Skip to content

Commit

Permalink
simplesbml -> ant
Browse files Browse the repository at this point in the history
Makes it easier to create new models.
  • Loading branch information
dweindl committed Jul 2, 2024
1 parent 4a1b1b0 commit c042a3a
Show file tree
Hide file tree
Showing 9 changed files with 156 additions and 127 deletions.
38 changes: 38 additions & 0 deletions petabtests/antimony.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"""Antimony -> SBML"""

import antimony as ant
from pathlib import Path


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: 21 additions & 25 deletions petabtests/cases/v1.0.0/sbml/0018/0018.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from petab.v1.C import *
from pathlib import Path
from petabtests import PetabTestCase, analytical_a, analytical_b
from petabtests.antimony import antimony_to_sbml_str

DESCRIPTION = cleandoc("""
## Objective
Expand All @@ -28,30 +29,25 @@

# 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 = 0
B = 0
A = 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 +110,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
45 changes: 20 additions & 25 deletions petabtests/cases/v2.0.0/sbml/0018/0018.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from petab.v1.C import *
from pathlib import Path
from petabtests import PetabTestCase, analytical_a, analytical_b
from petabtests.antimony import antimony_to_sbml_str

DESCRIPTION = cleandoc("""
## Objective
Expand All @@ -28,30 +29,24 @@

# 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 = 0
B = 0
A = 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 +109,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
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 c042a3a

Please sign in to comment.