Skip to content

Commit

Permalink
Merge pull request #102 from biosimulators/check-datagens
Browse files Browse the repository at this point in the history
feat: check all SED-ML XPath targets and warn appropriately
  • Loading branch information
jonrkarr committed Mar 28, 2022
2 parents 4afc7e8 + 6d0bd63 commit 76524bd
Show file tree
Hide file tree
Showing 16 changed files with 575 additions and 72 deletions.
2 changes: 1 addition & 1 deletion biosimulators_utils/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.1.169'
__version__ = '0.1.170'
2 changes: 1 addition & 1 deletion biosimulators_utils/sedml/data_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@ def has_structural_changes(self):
:obj:`bool`: :obj:`True`, if structural model changes are present
"""
for change in self.changes:
if isinstance(change, (AddElementModelChange, ReplaceElementModelChange, RemoveElementModelChange)):
if isinstance(change, (AddElementModelChange, ReplaceElementModelChange, RemoveElementModelChange, ModelAttributeChange)):
return True
return False

Expand Down
151 changes: 95 additions & 56 deletions biosimulators_utils/sedml/validation.py

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions tests/fixtures/BIOMD0000000297_bad_change_att.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version2" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="2">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
<listOfChanges>
<changeAttribute target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;Trim&apos;]/@initialConcentration" newValue="0.084410675"/>
<changeAttribute target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;Trim_noexist&apos;]/@initialConcentration" newValue="0.084410675"/>
</listOfChanges>
</model>
</listOfModels>
</sedML>
44 changes: 44 additions & 0 deletions tests/fixtures/BIOMD0000000297_change_bad_xpath.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version2" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="2">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
<listOfChanges>
<changeAttribute target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;Trim&apos;]/@initialConcentration" newValue="0.084410675"/>
</listOfChanges>
</model>
</listOfModels>
<listOfSimulations>
<uniformTimeCourse id="sim1" initialTime="0" outputStartTime="0" outputEndTime="140" numberOfPoints="140">
<algorithm kisaoID="KISAO:0000019"/>
</uniformTimeCourse>
</listOfSimulations>
<listOfTasks>
<task id="task1" modelReference="model" simulationReference="sim1"/>
</listOfTasks>
<listOfDataGenerators>
<dataGenerator id="time_task1" name="Time">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> var_time_task1 </ci>
</math>
<listOfVariables>
<variable id="var_time_task1" symbol="urn:sedml:symbol:time" taskReference="task1"/>
</listOfVariables>
</dataGenerator>
<dataGenerator id="BE_1_task1" name="[BE]">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> p1_BE_task1 </ci>
</math>
<listOfVariables>
<variable id="p1_BE_task1" name="BE" target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE_noexist&apos;]" taskReference="task1"/>
</listOfVariables>
</dataGenerator>
</listOfDataGenerators>
<listOfOutputs>
<report id="autogen_report_for_task1" name="Auto-generated report for task1, including all symbols in SBML with mathematical meaning, both constant and variable.">
<listOfDataSets>
<dataSet id="autogen_task1_time" label="Time" dataReference="time_task1"/>
<dataSet id="autogen_task1_BE" label="BE" dataReference="BE_1_task1"/>
</listOfDataSets>
</report>
</listOfOutputs>
</sedML>
44 changes: 44 additions & 0 deletions tests/fixtures/BIOMD0000000297_change_good_xpath.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version2" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="2">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
<listOfChanges>
<changeAttribute target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;Trim&apos;]/@initialConcentration" newValue="0.084410675"/>
</listOfChanges>
</model>
</listOfModels>
<listOfSimulations>
<uniformTimeCourse id="sim1" initialTime="0" outputStartTime="0" outputEndTime="140" numberOfPoints="140">
<algorithm kisaoID="KISAO:0000019"/>
</uniformTimeCourse>
</listOfSimulations>
<listOfTasks>
<task id="task1" modelReference="model" simulationReference="sim1"/>
</listOfTasks>
<listOfDataGenerators>
<dataGenerator id="time_task1" name="Time">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> var_time_task1 </ci>
</math>
<listOfVariables>
<variable id="var_time_task1" symbol="urn:sedml:symbol:time" taskReference="task1"/>
</listOfVariables>
</dataGenerator>
<dataGenerator id="BE_1_task1" name="[BE]">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> p1_BE_task1 </ci>
</math>
<listOfVariables>
<variable id="p1_BE_task1" name="BE" target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE&apos;]" taskReference="task1"/>
</listOfVariables>
</dataGenerator>
</listOfDataGenerators>
<listOfOutputs>
<report id="autogen_report_for_task1" name="Auto-generated report for task1, including all symbols in SBML with mathematical meaning, both constant and variable.">
<listOfDataSets>
<dataSet id="autogen_task1_time" label="Time" dataReference="time_task1"/>
<dataSet id="autogen_task1_BE" label="BE" dataReference="BE_1_task1"/>
</listOfDataSets>
</report>
</listOfOutputs>
</sedML>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version2" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="2">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
<listOfChanges>
<changeAttribute target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;Trim&apos;]/@initialConcentration" newValue="0.084410675"/>
<computeChange target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE_noexist&apos;]">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<cn type="integer"> 5 </cn>
</math>
</computeChange>
</listOfChanges>
</model>
</listOfModels>
</sedML>
14 changes: 14 additions & 0 deletions tests/fixtures/BIOMD0000000297_compchange_bad_xpath.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version2" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="2">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
<listOfChanges>
<computeChange target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE_noexist&apos;]">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<cn type="integer"> 5 </cn>
</math>
</computeChange>
</listOfChanges>
</model>
</listOfModels>
</sedML>
41 changes: 41 additions & 0 deletions tests/fixtures/BIOMD0000000297_nochange_bad_xpath.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version2" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="2">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
</model>
</listOfModels>
<listOfSimulations>
<uniformTimeCourse id="sim1" initialTime="0" outputStartTime="0" outputEndTime="140" numberOfPoints="140">
<algorithm kisaoID="KISAO:0000019"/>
</uniformTimeCourse>
</listOfSimulations>
<listOfTasks>
<task id="task1" modelReference="model" simulationReference="sim1"/>
</listOfTasks>
<listOfDataGenerators>
<dataGenerator id="time_task1" name="Time">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> var_time_task1 </ci>
</math>
<listOfVariables>
<variable id="var_time_task1" symbol="urn:sedml:symbol:time" taskReference="task1"/>
</listOfVariables>
</dataGenerator>
<dataGenerator id="BE_1_task1" name="[BE]">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> p1_BE_task1 </ci>
</math>
<listOfVariables>
<variable id="p1_BE_task1" name="BE" target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE_noexist&apos;]" taskReference="task1"/>
</listOfVariables>
</dataGenerator>
</listOfDataGenerators>
<listOfOutputs>
<report id="autogen_report_for_task1" name="Auto-generated report for task1, including all symbols in SBML with mathematical meaning, both constant and variable.">
<listOfDataSets>
<dataSet id="autogen_task1_time" label="Time" dataReference="time_task1"/>
<dataSet id="autogen_task1_BE" label="BE" dataReference="BE_1_task1"/>
</listOfDataSets>
</report>
</listOfOutputs>
</sedML>
41 changes: 41 additions & 0 deletions tests/fixtures/BIOMD0000000297_nochange_good_xpath.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version2" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="2">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
</model>
</listOfModels>
<listOfSimulations>
<uniformTimeCourse id="sim1" initialTime="0" outputStartTime="0" outputEndTime="140" numberOfPoints="140">
<algorithm kisaoID="KISAO:0000019"/>
</uniformTimeCourse>
</listOfSimulations>
<listOfTasks>
<task id="task1" modelReference="model" simulationReference="sim1"/>
</listOfTasks>
<listOfDataGenerators>
<dataGenerator id="time_task1" name="Time">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> var_time_task1 </ci>
</math>
<listOfVariables>
<variable id="var_time_task1" symbol="urn:sedml:symbol:time" taskReference="task1"/>
</listOfVariables>
</dataGenerator>
<dataGenerator id="BE_1_task1" name="[BE]">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> p1_BE_task1 </ci>
</math>
<listOfVariables>
<variable id="p1_BE_task1" name="BE" target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE&apos;]" taskReference="task1"/>
</listOfVariables>
</dataGenerator>
</listOfDataGenerators>
<listOfOutputs>
<report id="autogen_report_for_task1" name="Auto-generated report for task1, including all symbols in SBML with mathematical meaning, both constant and variable.">
<listOfDataSets>
<dataSet id="autogen_task1_time" label="Time" dataReference="time_task1"/>
<dataSet id="autogen_task1_BE" label="BE" dataReference="BE_1_task1"/>
</listOfDataSets>
</report>
</listOfOutputs>
</sedML>
33 changes: 33 additions & 0 deletions tests/fixtures/BIOMD0000000297_repeat_bad_xpath_change.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version4" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="4">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
<listOfChanges>
<changeAttribute target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;Trim&apos;]/@initialConcentration" newValue="0.084410675"/>
</listOfChanges>
</model>
</listOfModels>
<listOfSimulations>
<uniformTimeCourse id="sim0" initialTime="0" outputStartTime="0" outputEndTime="100" numberOfPoints="100">
<algorithm kisaoID="KISAO:0000019"/>
</uniformTimeCourse>
</listOfSimulations>
<listOfTasks>
<task id="task0" modelReference="model" simulationReference="sim0"/>
<repeatedTask id="task1" range="uniform_linear_for_S1" resetModel="true">
<listOfRanges>
<uniformRange id="uniform_linear_for_S1" start="1" end="15" numberOfPoints="25" type="linear"/>
</listOfRanges>
<listOfChanges>
<setValue modelReference="model" target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE_noexist&apos;]" range="uniform_linear_for_S1">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> uniform_linear_for_S1 </ci>
</math>
</setValue>
</listOfChanges>
<listOfSubTasks>
<subTask order="0" task="task0"/>
</listOfSubTasks>
</repeatedTask>
</listOfTasks>
</sedML>
30 changes: 30 additions & 0 deletions tests/fixtures/BIOMD0000000297_repeat_bad_xpath_nochange.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version4" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="4">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
</model>
</listOfModels>
<listOfSimulations>
<uniformTimeCourse id="sim0" initialTime="0" outputStartTime="0" outputEndTime="100" numberOfPoints="100">
<algorithm kisaoID="KISAO:0000019"/>
</uniformTimeCourse>
</listOfSimulations>
<listOfTasks>
<task id="task0" modelReference="model" simulationReference="sim0"/>
<repeatedTask id="task1" range="uniform_linear_for_S1" resetModel="true">
<listOfRanges>
<uniformRange id="uniform_linear_for_S1" start="1" end="15" numberOfPoints="25" type="linear"/>
</listOfRanges>
<listOfChanges>
<setValue modelReference="model" target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE_noexist&apos;]" range="uniform_linear_for_S1">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> uniform_linear_for_S1 </ci>
</math>
</setValue>
</listOfChanges>
<listOfSubTasks>
<subTask order="0" task="task0"/>
</listOfSubTasks>
</repeatedTask>
</listOfTasks>
</sedML>
33 changes: 33 additions & 0 deletions tests/fixtures/BIOMD0000000297_repeat_good_xpath_change.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version4" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="4">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
<listOfChanges>
<changeAttribute target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;Trim&apos;]/@initialConcentration" newValue="0.084410675"/>
</listOfChanges>
</model>
</listOfModels>
<listOfSimulations>
<uniformTimeCourse id="sim0" initialTime="0" outputStartTime="0" outputEndTime="100" numberOfPoints="100">
<algorithm kisaoID="KISAO:0000019"/>
</uniformTimeCourse>
</listOfSimulations>
<listOfTasks>
<task id="task0" modelReference="model" simulationReference="sim0"/>
<repeatedTask id="task1" range="uniform_linear_for_S1" resetModel="true">
<listOfRanges>
<uniformRange id="uniform_linear_for_S1" start="1" end="15" numberOfPoints="25" type="linear"/>
</listOfRanges>
<listOfChanges>
<setValue modelReference="model" target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE&apos;]" range="uniform_linear_for_S1">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> uniform_linear_for_S1 </ci>
</math>
</setValue>
</listOfChanges>
<listOfSubTasks>
<subTask order="0" task="task0"/>
</listOfSubTasks>
</repeatedTask>
</listOfTasks>
</sedML>
30 changes: 30 additions & 0 deletions tests/fixtures/BIOMD0000000297_repeat_good_xpath_nochange.sedml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<sedML xmlns="http://sed-ml.org/sed-ml/level1/version2" xmlns:sbml="http://www.sbml.org/sbml/level2/version4" level="1" version="2">
<listOfModels>
<model id="model" language="urn:sedml:language:sbml" source="BIOMD0000000297.xml">
</model>
</listOfModels>
<listOfSimulations>
<uniformTimeCourse id="sim0" initialTime="0" outputStartTime="0" outputEndTime="100" numberOfPoints="100">
<algorithm kisaoID="KISAO:0000019"/>
</uniformTimeCourse>
</listOfSimulations>
<listOfTasks>
<task id="task0" modelReference="model" simulationReference="sim0"/>
<repeatedTask id="task1" range="uniform_linear_for_S1" resetModel="true">
<listOfRanges>
<uniformRange id="uniform_linear_for_S1" start="1" end="15" numberOfPoints="25" type="linear"/>
</listOfRanges>
<listOfChanges>
<setValue modelReference="model" target="/sbml:sbml/sbml:model/sbml:listOfSpecies/sbml:species[@id=&apos;BE&apos;]" range="uniform_linear_for_S1">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> uniform_linear_for_S1 </ci>
</math>
</setValue>
</listOfChanges>
<listOfSubTasks>
<subTask order="0" task="task0"/>
</listOfSubTasks>
</repeatedTask>
</listOfTasks>
</sedML>
4 changes: 2 additions & 2 deletions tests/sedml/test_sedml_data_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,9 +406,9 @@ def test_Model_has_structural_changes(self):
self.assertFalse(model.has_structural_changes())

model.changes.append(data_model.ModelAttributeChange())
self.assertFalse(model.has_structural_changes())
self.assertTrue(model.has_structural_changes())

model.changes.append(data_model.AddElementModelChange())
model.changes = [data_model.AddElementModelChange()]
self.assertTrue(model.has_structural_changes())

model.changes = [data_model.ReplaceElementModelChange()]
Expand Down
Loading

0 comments on commit 76524bd

Please sign in to comment.