cobrapy
cobrapy copied to clipboard
Cannot swap co-factor pairs of a model reaction within a context
Problem description
I would like to reversibly (within a context) swap co-factors. This unexpectedly results in a KeyError
.
Code Sample
import cobra
from cobra.test import create_test_model
config = cobra.Configuration()
config.solver = "glpk"
model = create_test_model("textbook")
nad = model.metabolites.nad_c
nadh = model.metabolites.nadh_c
nadp = model.metabolites.nadp_c
nadph = model.metabolites.nadph_c
with model:
rxn: cobra.Reaction = model.reactions.PDH
metabolites = rxn.metabolites
# Swap from source to target co-factors.
if nad in rxn.metabolites:
metabolites[nadp] = metabolites[nad]
metabolites[nadph] = metabolites[nadh]
metabolites[nad] = 0
metabolites[nadh] = 0
elif nadp in rxn.metabolites:
metabolites[nad] = metabolites[nadp]
metabolites[nadh] = metabolites[nadph]
metabolites[nadp] = 0
metabolites[nadph] = 0
else:
raise KeyError(
f"Neither co-factor swap partner present in "
f"predicted target reaction '{rxn.id}'."
)
rxn.add_metabolites(metabolites, combine=False)
Actual Output
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-8-7459538646d8> in <module>
22 f"predicted target reaction '{rxn.id}'."
23 )
---> 24 rxn.add_metabolites(metabolites, combine=False, reversibly=True)
python3.6/site-packages/cobra/core/reaction.py in add_metabolites(self, metabolites_to_add, combine, reversibly)
861 mets_to_reset = {
862 key: old_coefficients[model.metabolites.get_by_any(key)[0]]
--> 863 for key in iterkeys(metabolites_to_add)}
864
865 context(partial(
python3.6/site-packages/cobra/core/reaction.py in <dictcomp>(.0)
861 mets_to_reset = {
862 key: old_coefficients[model.metabolites.get_by_any(key)[0]]
--> 863 for key in iterkeys(metabolites_to_add)}
864
865 context(partial(
KeyError: <Metabolite nad_c at 0x7f2704150ac8>
Expected Output
Should just work as it does when not in a context.
Dependency Information
System Information
OS Linux OS-release 4.15.0-50-generic Python 3.6.7
Package Versions
cobra 0.15.3 depinfo 1.5.1 future 0.17.1 numpy 1.16.3 optlang 1.4.4 pandas 0.24.2 pbr 5.1.3 pip 19.1.1 python-libsbml-experimental 5.18.0 ruamel.yaml 0.15.96 setuptools 41.0.1 six 1.12.0 swiglpk 4.65.0 tabulate 0.8.3 wheel 0.33.4