diff --git a/src/simulation_runner/runner.py b/src/simulation_runner/runner.py index 4cd6c52..cd69d7e 100644 --- a/src/simulation_runner/runner.py +++ b/src/simulation_runner/runner.py @@ -1,18 +1,50 @@ # Python Imports import os +import shutil +import random +from typing import Generator # Project Imports from src.utilities.env_variables import BINARY_PATH, CONFIGURATION_SETTINGS, SHARED_FOLDER from src.utilities.files.json.json_utils import write_json -def run_simulation(arguments_config: dict, simulation_config: dict): +class SimulationRunner: - write_json(simulation_config, CONFIGURATION_SETTINGS) + def __init__(self, arguments_config: dict, simulation_config: dict): + self._arguments_config = arguments_config + self._base_simulation_config = simulation_config + random.seed(self._base_simulation_config["seed"]) - os.system(BINARY_PATH - + " -f " + arguments_config["output-format"] - + " -i " + CONFIGURATION_SETTINGS + " -o " - + arguments_config["output-file"]) + def run_simulation(self): - os.system("mv " + arguments_config["output-file"] + "." + arguments_config["output-format"] + " " + SHARED_FOLDER) + output_path = self._create_folder() + + seeds_generator = self._create_seeds_generator() + + for seed in seeds_generator: + self._base_simulation_config["seed"] = seed + + write_json(self._base_simulation_config, CONFIGURATION_SETTINGS) + + file_format = self._arguments_config["output-format"] + output_name = self._arguments_config["output-file"] + "_" + str(seed) + + os.system(f"{BINARY_PATH} -f {file_format} -i {CONFIGURATION_SETTINGS} -o {output_name}") + + os.system(f"mv {output_name}.{file_format} {output_path}") + + def _create_folder(self): + output_path = SHARED_FOLDER + self._arguments_config["output-folder"] + + if os.path.exists(output_path): + shutil.rmtree(output_path) + os.makedirs(output_path) + + return output_path + + def _create_seeds_generator(self) -> Generator[int, None, None]: + # Rust binary seed uses u64 int + seeds = (random.randint(0, 2 ** 64) for _ in range(self._arguments_config["number-of-simulations"])) + + return seeds