import pandas as pd
from sbmlsim.model import ModelChange
from sbmlsim.simulation import Timecourse, TimecourseSim
from sbmlsim.simulator import SimulatorSerial as Simulator
from sbmlsim.test import MODEL_REPRESSILATOR
[docs]def test_create_simulator():
simulator = Simulator(MODEL_REPRESSILATOR)
assert simulator
[docs]def test_create_simulator_strpath():
simulator = Simulator(str(MODEL_REPRESSILATOR))
assert simulator
[docs]def test_timecourse_simulation():
simulator = Simulator(MODEL_REPRESSILATOR)
tc = Timecourse(start=0, end=100, steps=100)
tc.normalize(uinfo=simulator.uinfo)
s = simulator._timecourse(tc)
assert s is not None
tc = Timecourse(start=0, end=100, steps=100, changes={"PX": 10.0})
tc.normalize(uinfo=simulator.uinfo)
s = simulator._timecourse(tc)
assert s is not None
assert isinstance(s, pd.DataFrame)
assert "time" in s
assert len(s.time) == 101
assert s.PX[0] == 10.0
tcsim = TimecourseSim(
timecourses=[Timecourse(start=0, end=100, steps=100, changes={"[X]": 10.0})]
)
tcsim.normalize(simulator.uinfo)
s = simulator._timecourse(tcsim)
assert s is not None
[docs]def test_timecourse_combined():
simulator = Simulator(MODEL_REPRESSILATOR)
s = simulator._timecourse(
simulation=TimecourseSim(
[
Timecourse(start=0, end=100, steps=100),
Timecourse(
start=0,
end=50,
steps=100,
model_changes={ModelChange.CLAMP_SPECIES: {"X": True}},
),
Timecourse(
start=0,
end=100,
steps=100,
model_changes={ModelChange.CLAMP_SPECIES: {"X": False}},
),
]
)
)
assert isinstance(s, pd.DataFrame)
assert "time" in s
assert s.time.values[-1] == 250.0
[docs]def test_timecourse_concat():
"""Reuse of timecourses."""
simulator = Simulator(MODEL_REPRESSILATOR)
tc = Timecourse(start=0, end=50, steps=100, changes={"X": 10})
s = simulator._timecourse(simulation=TimecourseSim([tc] * 3))
assert isinstance(s, pd.DataFrame)
assert "time" in s
assert s.time.values[-1] == 150.0
assert len(s) == 3 * 101
assert s.X.values[0] == 10.0
assert s.X.values[101] == 10.0
assert s.X.values[202] == 10.0
[docs]def test_timecourse_empty():
"""Reuse of timecourses."""
simulator = Simulator(MODEL_REPRESSILATOR)
tc = Timecourse(start=0, end=50, steps=100, changes={"X": 10})
tcsim = TimecourseSim([None, tc, None])
s = simulator._timecourse(
simulation=tcsim,
)
assert len(tcsim.timecourses) == 1
assert isinstance(s, pd.DataFrame)
assert "time" in s
assert s.time.values[-1] == 50.0
assert len(s) == 101
[docs]def test_timecourse_discard():
"""Test discarding pre-simulation."""
simulator = Simulator(MODEL_REPRESSILATOR)
s = simulator._timecourse(
simulation=TimecourseSim(
[
Timecourse(
start=0,
end=100,
steps=100,
discard=True,
changes={
"[X]": 20.0,
"[Y]": 20.0,
"[Z]": 20.0,
},
),
Timecourse(start=0, end=100, steps=100),
]
)
)
assert isinstance(s, pd.DataFrame)
assert "time" in s
assert len(s.time) == 101
assert s.time.values[0] == 0.0
assert s.time.values[-1] == 100.0