Files
DicePlayer/diceplayer/player.py

56 lines
1.9 KiB
Python

from diceplayer.config.player_config import PlayerConfig
from diceplayer.dice.dice_handler import DiceHandler
from diceplayer.logger import logger
from diceplayer.state.state_handler import StateHandler
from diceplayer.state.state_model import StateModel
from diceplayer.utils.potential import read_system_from_phb
from typing_extensions import TypedDict, Unpack
class PlayerFlags(TypedDict):
continuation: bool
force: bool
class Player:
def __init__(self, config: PlayerConfig):
self.config = config
self._state_handler = StateHandler(config.simulation_dir)
def play(self, **flags: Unpack[PlayerFlags]):
continuation = flags.get("continuation", False)
force = flags.get("force", False)
state = self._state_handler.get(self.config, force=force)
if not continuation and state is not None:
logger.info(
"Continuation flag is not set. Starting a new simulation and deleting any existing state."
)
self._state_handler.delete()
state = None
if state is None:
system = read_system_from_phb(self.config)
state = StateModel(config=self.config, system=system)
else:
logger.info("Resuming from existing state.")
while state.current_cycle < self.config.max_cyc:
logger.info(
f"Starting cycle {state.current_cycle + 1} of {self.config.max_cyc}."
)
step_directory = self.config.simulation_dir / f"{state.current_cycle:02d}"
if not step_directory.exists():
step_directory.mkdir(parents=True)
state = DiceHandler(step_directory).run(state, state.current_cycle)
# state = OptimizationHandler.run(state, state.current_cycle)
state.current_cycle += 1
self._state_handler.save(state)
logger.info("Reached maximum number of cycles. Simulation complete.")