Skip to content

Commit

Permalink
simplesbml -> ant (#76)
Browse files Browse the repository at this point in the history
Makes it easier to create new models.

Closes #75
  • Loading branch information
dweindl authored Jul 2, 2024
1 parent 4a1b1b0 commit 3d0bc1b
Show file tree
Hide file tree
Showing 10 changed files with 163 additions and 127 deletions.
1 change: 1 addition & 0 deletions petabtests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
from .file import * # noqa: F403, F401
from .evaluate import * # noqa: F403, F401
from .core import * # noqa: F403, F401
from .antimony import * # noqa: F403, F401
40 changes: 40 additions & 0 deletions petabtests/antimony.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"""Antimony -> SBML"""

import antimony as ant
from pathlib import Path

__all__ = ["antimony_to_sbml_str"]


def antimony_to_sbml_str(ant_model: str | Path) -> str:
"""Convert Antimony string to SBML model.
Arguments:
ant_str:
Antimony model as string (model, not filename), or Path to file.
Returns:
SBML model as string.
"""

# Unload everything / free memory
ant.clearPreviousLoads()
ant.freeAll()

if isinstance(ant_model, Path):
status = ant.loadAntimonyFile(str(ant_model))
else:
status = ant.loadAntimonyString(ant_model)
if status < 0:
raise RuntimeError(
f"Antimony model could not be loaded: {ant.getLastError()}"
)

if (main_module_name := ant.getMainModuleName()) is None:
raise AssertionError("There is no Antimony module.")

sbml_str = ant.getSBMLString(main_module_name)
if not sbml_str:
raise ValueError("Antimony model could not be converted to SBML.")

return sbml_str
46 changes: 22 additions & 24 deletions petabtests/cases/v1.0.0/sbml/0018/0018.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
import pandas as pd
from petab.v1.C import *
from pathlib import Path
from petabtests import PetabTestCase, analytical_a, analytical_b
from petabtests import (
PetabTestCase,
analytical_a,
analytical_b,
antimony_to_sbml_str,
)

DESCRIPTION = cleandoc("""
## Objective
Expand All @@ -28,30 +33,23 @@

# problem --------------------------------------------------------------------

model = str(Path(__file__).parent / "model.xml")


def get_model():
import simplesbml

model = simplesbml.SbmlModel()
model.addParameter("a0", 1)
model.addParameter("b0", 1)
model.addParameter("k1", 0)
model.addParameter("k2", 0)
model.addCompartment(comp_id="compartment")
model.addSpecies("[A]", 0, comp="compartment")
model.addParameter("B", 0)
model.addInitialAssignment("A", "a0")
model.addInitialAssignment("B", "b0")
model.addRateRule("A", "k2 * B - k1 * A")
model.addRateRule("B", "- compartment * k2 * B + compartment * k1 * A")
return model

sbml_file = Path(__file__).parent / "model.xml"

with open(model, "w") as f:
f.write(get_model().toSBML())

ant_model = """
model petab_test_0018
a0 = 1
b0 = 1
k1 = 0
k2 = 0
compartment default_compartment
species A in default_compartment = a0
B = b0
A' = k2 * B - k1 * A
B' = - default_compartment * k2 * B + default_compartment * k1 * A
end
"""
sbml_file.write_text(antimony_to_sbml_str(ant_model))

condition_df = pd.DataFrame(
data={
Expand Down Expand Up @@ -114,7 +112,7 @@ def get_model():
"reinitialized, one not (NaN in condition table). InitialAssignment "
"to species overridden.",
description=DESCRIPTION,
model=model,
model=sbml_file,
condition_dfs=[condition_df],
observable_dfs=[observable_df],
measurement_dfs=[measurement_df],
Expand Down
31 changes: 12 additions & 19 deletions petabtests/cases/v1.0.0/sbml/0018/_model.xml
Original file line number Diff line number Diff line change
@@ -1,26 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" level="3" version="1">
<model substanceUnits="mole" timeUnits="second" extentUnits="mole">
<listOfUnitDefinitions>
<unitDefinition id="per_second">
<listOfUnits>
<unit kind="second" exponent="-1" scale="0" multiplier="1"/>
</listOfUnits>
</unitDefinition>
</listOfUnitDefinitions>
<!-- Created by libAntimony version v2.14.0 with libSBML version 5.20.2. -->
<sbml xmlns="http://www.sbml.org/sbml/level3/version2/core" level="3" version="2">
<model metaid="petab_test_0018" id="petab_test_0018">
<listOfCompartments>
<compartment id="c1" spatialDimensions="3" size="1" units="litre" constant="true"/>
<compartment id="compartment" spatialDimensions="3" size="1" units="litre" constant="true"/>
<compartment sboTerm="SBO:0000410" id="default_compartment" spatialDimensions="3" size="1" constant="true"/>
</listOfCompartments>
<listOfSpecies>
<species id="A" compartment="compartment" initialConcentration="0" substanceUnits="mole" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
<species id="A" compartment="default_compartment" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
</listOfSpecies>
<listOfParameters>
<parameter id="a0" value="1" units="per_second" constant="false"/>
<parameter id="b0" value="1" units="per_second" constant="false"/>
<parameter id="k1" value="0" units="per_second" constant="false"/>
<parameter id="k2" value="0" units="per_second" constant="false"/>
<parameter id="B" value="0" units="per_second" constant="false"/>
<parameter id="a0" value="1" constant="true"/>
<parameter id="b0" value="1" constant="true"/>
<parameter id="k1" value="0" constant="true"/>
<parameter id="k2" value="0" constant="true"/>
<parameter id="B" constant="false"/>
</listOfParameters>
<listOfInitialAssignments>
<initialAssignment symbol="A">
Expand Down Expand Up @@ -60,14 +53,14 @@
<times/>
<apply>
<minus/>
<ci> compartment </ci>
<ci> default_compartment </ci>
</apply>
<ci> k2 </ci>
<ci> B </ci>
</apply>
<apply>
<times/>
<ci> compartment </ci>
<ci> default_compartment </ci>
<ci> k1 </ci>
<ci> A </ci>
</apply>
Expand Down
31 changes: 12 additions & 19 deletions petabtests/cases/v1.0.0/sbml/0018/model.xml
Original file line number Diff line number Diff line change
@@ -1,26 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" level="3" version="1">
<model substanceUnits="mole" timeUnits="second" extentUnits="mole">
<listOfUnitDefinitions>
<unitDefinition id="per_second">
<listOfUnits>
<unit kind="second" exponent="-1" scale="0" multiplier="1"/>
</listOfUnits>
</unitDefinition>
</listOfUnitDefinitions>
<!-- Created by libAntimony version v2.14.0 with libSBML version 5.20.2. -->
<sbml xmlns="http://www.sbml.org/sbml/level3/version2/core" level="3" version="2">
<model metaid="petab_test_0018" id="petab_test_0018">
<listOfCompartments>
<compartment id="c1" spatialDimensions="3" size="1" units="litre" constant="true"/>
<compartment id="compartment" spatialDimensions="3" size="1" units="litre" constant="true"/>
<compartment sboTerm="SBO:0000410" id="default_compartment" spatialDimensions="3" size="1" constant="true"/>
</listOfCompartments>
<listOfSpecies>
<species id="A" compartment="compartment" initialConcentration="0" substanceUnits="mole" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
<species id="A" compartment="default_compartment" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
</listOfSpecies>
<listOfParameters>
<parameter id="a0" value="1" units="per_second" constant="false"/>
<parameter id="b0" value="1" units="per_second" constant="false"/>
<parameter id="k1" value="0" units="per_second" constant="false"/>
<parameter id="k2" value="0" units="per_second" constant="false"/>
<parameter id="B" value="0" units="per_second" constant="false"/>
<parameter id="a0" value="1" constant="true"/>
<parameter id="b0" value="1" constant="true"/>
<parameter id="k1" value="0" constant="true"/>
<parameter id="k2" value="0" constant="true"/>
<parameter id="B" constant="false"/>
</listOfParameters>
<listOfInitialAssignments>
<initialAssignment symbol="A">
Expand Down Expand Up @@ -60,14 +53,14 @@
<times/>
<apply>
<minus/>
<ci> compartment </ci>
<ci> default_compartment </ci>
</apply>
<ci> k2 </ci>
<ci> B </ci>
</apply>
<apply>
<times/>
<ci> compartment </ci>
<ci> default_compartment </ci>
<ci> k1 </ci>
<ci> A </ci>
</apply>
Expand Down
49 changes: 23 additions & 26 deletions petabtests/cases/v2.0.0/sbml/0018/0018.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
import pandas as pd
from petab.v1.C import *
from pathlib import Path
from petabtests import PetabTestCase, analytical_a, analytical_b
from petabtests import (
PetabTestCase,
analytical_a,
analytical_b,
antimony_to_sbml_str,
)

DESCRIPTION = cleandoc("""
## Objective
Expand All @@ -28,30 +33,22 @@

# problem --------------------------------------------------------------------

model = str(Path(__file__).parent / "model.xml")


def get_model():
import simplesbml

model = simplesbml.SbmlModel()
model.addParameter("a0", 1)
model.addParameter("b0", 1)
model.addParameter("k1", 0)
model.addParameter("k2", 0)
model.addCompartment(comp_id="compartment")
model.addSpecies("[A]", 0, comp="compartment")
model.addParameter("B", 0)
model.addInitialAssignment("A", "a0")
model.addInitialAssignment("B", "b0")
model.addRateRule("A", "k2 * B - k1 * A")
model.addRateRule("B", "- compartment * k2 * B + compartment * k1 * A")
return model


with open(model, "w") as f:
f.write(get_model().toSBML())

sbml_file = Path(__file__).parent / "model.xml"

ant_model = """
model petab_test_0018
a0 = 1
b0 = 1
k1 = 0
k2 = 0
compartment default_compartment
species A in default_compartment = a0
B = b0
A' = k2 * B - k1 * A
B' = - default_compartment * k2 * B + default_compartment * k1 * A
end
"""
sbml_file.write_text(antimony_to_sbml_str(ant_model))

condition_df = pd.DataFrame(
data={
Expand Down Expand Up @@ -114,7 +111,7 @@ def get_model():
"reinitialized, one not (NaN in condition table). InitialAssignment "
"to species overridden.",
description=DESCRIPTION,
model=model,
model=sbml_file,
condition_dfs=[condition_df],
observable_dfs=[observable_df],
measurement_dfs=[measurement_df],
Expand Down
31 changes: 12 additions & 19 deletions petabtests/cases/v2.0.0/sbml/0018/_model.xml
Original file line number Diff line number Diff line change
@@ -1,26 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<sbml xmlns="http://www.sbml.org/sbml/level3/version1/core" level="3" version="1">
<model substanceUnits="mole" timeUnits="second" extentUnits="mole">
<listOfUnitDefinitions>
<unitDefinition id="per_second">
<listOfUnits>
<unit kind="second" exponent="-1" scale="0" multiplier="1"/>
</listOfUnits>
</unitDefinition>
</listOfUnitDefinitions>
<!-- Created by libAntimony version v2.14.0 with libSBML version 5.20.2. -->
<sbml xmlns="http://www.sbml.org/sbml/level3/version2/core" level="3" version="2">
<model metaid="petab_test_0018" id="petab_test_0018">
<listOfCompartments>
<compartment id="c1" spatialDimensions="3" size="1" units="litre" constant="true"/>
<compartment id="compartment" spatialDimensions="3" size="1" units="litre" constant="true"/>
<compartment sboTerm="SBO:0000410" id="default_compartment" spatialDimensions="3" size="1" constant="true"/>
</listOfCompartments>
<listOfSpecies>
<species id="A" compartment="compartment" initialConcentration="0" substanceUnits="mole" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
<species id="A" compartment="default_compartment" hasOnlySubstanceUnits="false" boundaryCondition="false" constant="false"/>
</listOfSpecies>
<listOfParameters>
<parameter id="a0" value="1" units="per_second" constant="false"/>
<parameter id="b0" value="1" units="per_second" constant="false"/>
<parameter id="k1" value="0" units="per_second" constant="false"/>
<parameter id="k2" value="0" units="per_second" constant="false"/>
<parameter id="B" value="0" units="per_second" constant="false"/>
<parameter id="a0" value="1" constant="true"/>
<parameter id="b0" value="1" constant="true"/>
<parameter id="k1" value="0" constant="true"/>
<parameter id="k2" value="0" constant="true"/>
<parameter id="B" constant="false"/>
</listOfParameters>
<listOfInitialAssignments>
<initialAssignment symbol="A">
Expand Down Expand Up @@ -60,14 +53,14 @@
<times/>
<apply>
<minus/>
<ci> compartment </ci>
<ci> default_compartment </ci>
</apply>
<ci> k2 </ci>
<ci> B </ci>
</apply>
<apply>
<times/>
<ci> compartment </ci>
<ci> default_compartment </ci>
<ci> k1 </ci>
<ci> A </ci>
</apply>
Expand Down
Loading

0 comments on commit 3d0bc1b

Please sign in to comment.