Source code for chipiron.scripts.league.runtheleague

"""
RunTheLeagueScript
"""

import os
import pickle
import random
from typing import Any

from chipiron.league.league import League
from chipiron.scripts.script import Script


[docs]class RunTheLeagueScript: """ Running a league playing games between ers in the league and computing ELOs """ default_param_dict: dict[str, Any] = { "config_file_name": None, } base_experiment_output_folder: str = os.path.join( Script.base_experiment_output_folder, "league/outputs/" ) folder_league: str = os.path.join( Script.base_experiment_output_folder, "league/league_data/league_10_001" ) base_script: Script[Any] def __init__(self, base_script: Script[Any]) -> None: """ Initialize the RunTheLeague class. Args: base_script (Script): The base script object. Returns: None """ self.base_script = base_script try: with open(self.folder_league + "/players.pickle", "rb") as openfile: # TODO not use pickle make somehting human readbale and moidifiable self.league = pickle.load(openfile) print("Previous league loaded successfully") except Exception: print("Creation of a new league") new_random = random.Random(x=None) seed_run: int = new_random.randrange(0, 10**10) self.league = League(folder_league=self.folder_league, seed=seed_run) self.league.print_info()
[docs] def run(self) -> None: """ Runs the league. This method continuously runs the league until interrupted. It calls the `run` method of the `league` object and saves the league data to a pickle file. Returns: None """ print("run the league") while True: self.league.run() # save pickle.dump(self.league, open(self.folder_league + "/players.pickle", "wb"))
[docs] def terminate(self) -> None: """ Terminates the league execution. """ self.base_script.terminate()