"""
Example simulation experiment.
"""
from pathlib import Path
from typing import Dict, Union
from sbmlsim.combine.sedml.report import Report
from sbmlsim.data import Data
from sbmlsim.experiment import ExperimentRunner, SimulationExperiment
from sbmlsim.model import AbstractModel
from sbmlsim.plot import Figure, Plot
from sbmlsim.simulation import AbstractSim, Timecourse, TimecourseSim
from sbmlsim.simulator.rr_simulator_ray import SimulatorParallel
from sbmlsim.task import Task
[docs]class CurveTypesExperiment(SimulationExperiment):
"""Simulation experiments for curve types."""
[docs] def models(self) -> Dict[str, Union[Path, AbstractModel]]:
"""Define models."""
return {
"model": Path(__file__).parent / "results" / "curve_types_model.xml",
}
[docs] def simulations(self) -> Dict[str, AbstractSim]:
"""Define simulations."""
tc = TimecourseSim(
timecourses=Timecourse(start=0, end=10, steps=10),
time_offset=0,
)
return {"tc": tc}
[docs] def tasks(self) -> Dict[str, Task]:
"""Define tasks."""
tasks = dict()
for model in ["model"]:
tasks[f"task_{model}_tc"] = Task(model=model, simulation="tc")
return tasks
[docs] def data(self) -> Dict[str, Data]:
"""Define data generators."""
# direct access via id
data = []
for model in ["model"]:
for selection in ["time", "S1", "S2", "[S1]", "[S2]"]:
data.append(Data(task=f"task_{model}_tc", index=selection))
return {d.sid: d for d in data}
[docs] def reports(self) -> Dict[str, Report]:
"""Define reports."""
report1 = Report(
sid="report1",
datasets={
sid: f"task_model_tc__{sid}"
for sid in ["time", "S1", "S2", "[S1]", "[S2]"]
},
)
return {report1.sid: report1}
[docs]def run_curve_types_experiments(output_path: Path) -> Path:
"""Run simulation experiments."""
base_path = Path(__file__).parent
data_path = base_path
runner = ExperimentRunner(
CurveTypesExperiment,
simulator=SimulatorParallel(),
data_path=data_path,
base_path=base_path,
)
_results = runner.run_experiments(
output_path=output_path / "results", show_figures=True
)
if __name__ == "__main__":
run_curve_types_experiments(Path(__file__).parent / "results")