Skip to content

Commit

Permalink
fix: support multiple obj sbml models (fix #464) (#465)
Browse files Browse the repository at this point in the history
As part of 0.6.0 transition, there was a regression in reading sbml
models where only one objective_coefficient was kept. Fix that and make
test models have more than one non-zero objective coefficient.
  • Loading branch information
hredestig committed Mar 22, 2017
1 parent 8a574be commit 6f7a277
Show file tree
Hide file tree
Showing 10 changed files with 53 additions and 50 deletions.
8 changes: 4 additions & 4 deletions cobra/io/sbml3.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,19 +366,19 @@ def process_gpr(sub_xml):
return model
target_objective = get_attrib(obj_list, "fbc:activeObjective")
obj_query = OBJECTIVES_XPATH % target_objective
coefficients = {}
for sbml_objective in obj_list.findall(obj_query):
rxn_id = clip(get_attrib(sbml_objective, "fbc:reaction"), "R_")
try:
objective_reaction = model.reactions.get_by_id(rxn_id)
except KeyError:
raise CobraSBMLError("Objective reaction '%s' not found" % rxn_id)
try:
coefficients = {objective_reaction: get_attrib(
sbml_objective, "fbc:coefficient", type=number)}
coefficients[objective_reaction] = get_attrib(
sbml_objective, "fbc:coefficient", type=number)
except ValueError as e:
warn(str(e))
else:
set_objective(model, coefficients)
set_objective(model, coefficients)
return model


Expand Down
1 change: 1 addition & 0 deletions cobra/test/data/mini.json
Original file line number Diff line number Diff line change
Expand Up @@ -1268,6 +1268,7 @@
"h_c": 1.0
},
"name": "phosphofructokinase",
"objective_coefficient": 1.0,
"upper_bound": 1000.0
},
{
Expand Down
Binary file modified cobra/test/data/mini.mat
Binary file not shown.
Binary file modified cobra/test/data/mini.pickle
Binary file not shown.
64 changes: 32 additions & 32 deletions cobra/test/data/mini_cobra.xml
Original file line number Diff line number Diff line change
Expand Up @@ -205,19 +205,19 @@
<speciesReference species="M_h2o_c" stoichiometry="1"/>
</listOfReactants>
<listOfProducts>
<speciesReference species="M_adp_c" stoichiometry="1"/>
<speciesReference species="M_pi_c" stoichiometry="1"/>
<speciesReference species="M_h_c" stoichiometry="1"/>
<speciesReference species="M_adp_c" stoichiometry="1"/>
</listOfProducts>
<kineticLaw>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> FLUX_VALUE </ci>
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="8.39" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="1" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -232,18 +232,18 @@
<speciesReference species="M_lac__D_e" stoichiometry="1"/>
</listOfReactants>
<listOfProducts>
<speciesReference species="M_h_c" stoichiometry="1"/>
<speciesReference species="M_lac__D_c" stoichiometry="1"/>
<speciesReference species="M_h_c" stoichiometry="1"/>
</listOfProducts>
<kineticLaw>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> FLUX_VALUE </ci>
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -257,18 +257,18 @@
<speciesReference species="M_2pg_c" stoichiometry="1"/>
</listOfReactants>
<listOfProducts>
<speciesReference species="M_pep_c" stoichiometry="1"/>
<speciesReference species="M_h2o_c" stoichiometry="1"/>
<speciesReference species="M_pep_c" stoichiometry="1"/>
</listOfProducts>
<kineticLaw>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> FLUX_VALUE </ci>
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -285,9 +285,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-10" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -304,9 +304,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -323,9 +323,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -348,9 +348,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -361,9 +361,9 @@
</html>
</notes>
<listOfReactants>
<speciesReference species="M_g3p_c" stoichiometry="1"/>
<speciesReference species="M_nad_c" stoichiometry="1"/>
<speciesReference species="M_pi_c" stoichiometry="1"/>
<speciesReference species="M_g3p_c" stoichiometry="1"/>
</listOfReactants>
<listOfProducts>
<speciesReference species="M_13dpg_c" stoichiometry="1"/>
Expand All @@ -376,9 +376,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -402,9 +402,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -426,9 +426,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -439,23 +439,23 @@
</html>
</notes>
<listOfReactants>
<speciesReference species="M_lac__D_c" stoichiometry="1"/>
<speciesReference species="M_nad_c" stoichiometry="1"/>
<speciesReference species="M_lac__D_c" stoichiometry="1"/>
</listOfReactants>
<listOfProducts>
<speciesReference species="M_nadh_c" stoichiometry="1"/>
<speciesReference species="M_pyr_c" stoichiometry="1"/>
<speciesReference species="M_h_c" stoichiometry="1"/>
<speciesReference species="M_nadh_c" stoichiometry="1"/>
</listOfProducts>
<kineticLaw>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> FLUX_VALUE </ci>
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -466,12 +466,12 @@
</html>
</notes>
<listOfReactants>
<speciesReference species="M_f6p_c" stoichiometry="1"/>
<speciesReference species="M_atp_c" stoichiometry="1"/>
<speciesReference species="M_f6p_c" stoichiometry="1"/>
</listOfReactants>
<listOfProducts>
<speciesReference species="M_fdp_c" stoichiometry="1"/>
<speciesReference species="M_adp_c" stoichiometry="1"/>
<speciesReference species="M_fdp_c" stoichiometry="1"/>
<speciesReference species="M_h_c" stoichiometry="1"/>
</listOfProducts>
<kineticLaw>
Expand All @@ -480,9 +480,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="1" units="dimensionless"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -504,9 +504,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -517,22 +517,22 @@
</html>
</notes>
<listOfReactants>
<speciesReference species="M_3pg_c" stoichiometry="1"/>
<speciesReference species="M_atp_c" stoichiometry="1"/>
<speciesReference species="M_3pg_c" stoichiometry="1"/>
</listOfReactants>
<listOfProducts>
<speciesReference species="M_adp_c" stoichiometry="1"/>
<speciesReference species="M_13dpg_c" stoichiometry="1"/>
<speciesReference species="M_adp_c" stoichiometry="1"/>
</listOfProducts>
<kineticLaw>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> FLUX_VALUE </ci>
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -554,9 +554,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -567,8 +567,8 @@
</html>
</notes>
<listOfReactants>
<speciesReference species="M_h_e" stoichiometry="1"/>
<speciesReference species="M_pi_e" stoichiometry="1"/>
<speciesReference species="M_h_e" stoichiometry="1"/>
</listOfReactants>
<listOfProducts>
<speciesReference species="M_pi_c" stoichiometry="1"/>
Expand All @@ -580,9 +580,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -594,22 +594,22 @@
</notes>
<listOfReactants>
<speciesReference species="M_adp_c" stoichiometry="1"/>
<speciesReference species="M_h_c" stoichiometry="1"/>
<speciesReference species="M_pep_c" stoichiometry="1"/>
<speciesReference species="M_h_c" stoichiometry="1"/>
</listOfReactants>
<listOfProducts>
<speciesReference species="M_pyr_c" stoichiometry="1"/>
<speciesReference species="M_atp_c" stoichiometry="1"/>
<speciesReference species="M_pyr_c" stoichiometry="1"/>
</listOfProducts>
<kineticLaw>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<ci> FLUX_VALUE </ci>
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand All @@ -631,9 +631,9 @@
</math>
<listOfParameters>
<parameter id="LOWER_BOUND" value="-1000" units="mmol_per_gDW_per_hr"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
<parameter id="UPPER_BOUND" value="1000" units="mmol_per_gDW_per_hr"/>
<parameter id="OBJECTIVE_COEFFICIENT" value="0" units="dimensionless"/>
<parameter id="FLUX_VALUE" value="0" units="mmol_per_gDW_per_hr"/>
</listOfParameters>
</kineticLaw>
</reaction>
Expand Down

0 comments on commit 6f7a277

Please sign in to comment.