Added docstrings and TODOs
This commit is contained in:
parent
37edb9a6e9
commit
8599ea9662
@ -227,6 +227,7 @@ class Simulator:
|
|||||||
|
|
||||||
# TODO: Fix typing.Any or Simulator
|
# TODO: Fix typing.Any or Simulator
|
||||||
class SimulationDeSerializer:
|
class SimulationDeSerializer:
|
||||||
|
"""Class responsible for file management, de- and serialization of Simulator objects."""
|
||||||
def __init__(self, save_dir: str, results_dir: str):
|
def __init__(self, save_dir: str, results_dir: str):
|
||||||
self._save_dir = save_dir
|
self._save_dir = save_dir
|
||||||
self._results_dir = results_dir
|
self._results_dir = results_dir
|
||||||
@ -243,14 +244,32 @@ class SimulationDeSerializer:
|
|||||||
def _get_results_path(self, sim_name):
|
def _get_results_path(self, sim_name):
|
||||||
return f"{self._results_dir}/{misc.slugify(sim_name)}.csv"
|
return f"{self._results_dir}/{misc.slugify(sim_name)}.csv"
|
||||||
|
|
||||||
|
# TODO: Should this function also check for the metadata file?
|
||||||
|
# Currently, if the state-savefile is present, but not the metadata,
|
||||||
|
# this function will return true but loading the saved state will fail
|
||||||
def unfinished_sim_present(self, sim_name: str):
|
def unfinished_sim_present(self, sim_name: str):
|
||||||
|
"""Check if the savefile of a previously paused simulation is present.
|
||||||
|
|
||||||
|
:param sim_name:
|
||||||
|
:return: True if a paused simulation with the given name is found
|
||||||
|
"""
|
||||||
return os.path.isfile(self._get_savefile_path(sim_name))
|
return os.path.isfile(self._get_savefile_path(sim_name))
|
||||||
|
|
||||||
def remove_unfinished_sim(self, sim_name):
|
def remove_unfinished_sim(self, sim_name):
|
||||||
|
"""Remove the savefile of a previously paused simulation.
|
||||||
|
|
||||||
|
:param sim_name: Name of the simulation
|
||||||
|
"""
|
||||||
os.remove(self._get_savefile_path(sim_name))
|
os.remove(self._get_savefile_path(sim_name))
|
||||||
# os.remove(self._get_metadata_path(sim_name))
|
# os.remove(self._get_metadata_path(sim_name))
|
||||||
|
|
||||||
def save_state(self, simulator: typing.Any, sim_name: str, metadata: typing.Dict) -> None:
|
def save_state(self, simulator: typing.Any, sim_name: str, metadata: typing.Dict) -> None:
|
||||||
|
"""Save the state of a currently running simulation.
|
||||||
|
|
||||||
|
:param simulator: Simulator object
|
||||||
|
:param sim_name: Name of the simulation
|
||||||
|
:param metadata: Metadata to be saved besides the actual state
|
||||||
|
"""
|
||||||
# Save metadata
|
# Save metadata
|
||||||
with open(self._get_metadata_path(sim_name), 'w+', encoding='utf-8') as f:
|
with open(self._get_metadata_path(sim_name), 'w+', encoding='utf-8') as f:
|
||||||
json.dump(metadata, f, ensure_ascii=False, indent=4)
|
json.dump(metadata, f, ensure_ascii=False, indent=4)
|
||||||
@ -260,6 +279,11 @@ class SimulationDeSerializer:
|
|||||||
pickle.dump(simulator, file)
|
pickle.dump(simulator, file)
|
||||||
|
|
||||||
def read_state(self, sim_name: str) -> typing.Tuple[typing.Any, typing.Dict]:
|
def read_state(self, sim_name: str) -> typing.Tuple[typing.Any, typing.Dict]:
|
||||||
|
"""Read the saved state of a paused simulation.
|
||||||
|
|
||||||
|
:param sim_name: Name of the simulation
|
||||||
|
:return: Tuple of the form (simulator, metadata)
|
||||||
|
"""
|
||||||
metadata = None
|
metadata = None
|
||||||
simulator = None
|
simulator = None
|
||||||
|
|
||||||
@ -273,7 +297,14 @@ class SimulationDeSerializer:
|
|||||||
|
|
||||||
return simulator, metadata
|
return simulator, metadata
|
||||||
|
|
||||||
|
# TODO: Is the simulator object actually necessary here?
|
||||||
def save_results(self, simulator: typing.Any, sim_name: str, metadata: typing.Dict) -> None:
|
def save_results(self, simulator: typing.Any, sim_name: str, metadata: typing.Dict) -> None:
|
||||||
|
"""Save simulation results to file.
|
||||||
|
|
||||||
|
:param simulator: Simulator object. Used to obtain the data
|
||||||
|
:param sim_name: Name of the simulation. Determines the filename
|
||||||
|
:param metadata: Metadata to be saved besides the actual simulation results
|
||||||
|
"""
|
||||||
# Save metadata
|
# Save metadata
|
||||||
with open(self._get_metadata_path(sim_name), 'w+', encoding='utf-8') as f:
|
with open(self._get_metadata_path(sim_name), 'w+', encoding='utf-8') as f:
|
||||||
json.dump(metadata, f, ensure_ascii=False, indent=4)
|
json.dump(metadata, f, ensure_ascii=False, indent=4)
|
||||||
@ -289,6 +320,11 @@ class SimulationDeSerializer:
|
|||||||
df.to_csv(self._get_results_path(sim_name))
|
df.to_csv(self._get_results_path(sim_name))
|
||||||
|
|
||||||
def read_results(self, sim_name: str) -> typing.Tuple[pd.DataFrame, typing.Dict]:
|
def read_results(self, sim_name: str) -> typing.Tuple[pd.DataFrame, typing.Dict]:
|
||||||
|
"""Read simulation results from file.
|
||||||
|
|
||||||
|
:param sim_name: Name of the simulation.
|
||||||
|
:return: Tuple of the form (data, metadata), where data is a pandas dataframe and metadata is a dict
|
||||||
|
"""
|
||||||
# Read metadata
|
# Read metadata
|
||||||
with open(self._get_metadata_path(sim_name), 'r', encoding='utf-8') as f:
|
with open(self._get_metadata_path(sim_name), 'r', encoding='utf-8') as f:
|
||||||
metadata = json.load(f)
|
metadata = json.load(f)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user