"""Provide functions for model component validations."""
from typing import TYPE_CHECKING, Dict, List
if TYPE_CHECKING:
from cobra import Metabolite, Model, Reaction
# Set of mass unbalanced SBO terms
[docs]_NOT_MASS_BALANCED_TERMS = {
"SBO:0000627", # EXCHANGE
"SBO:0000628", # DEMAND
"SBO:0000629", # BIOMASS
"SBO:0000631", # PSEUDOREACTION
"SBO:0000632", # SINK
}
[docs]def check_mass_balance(model: "Model") -> Dict["Reaction", Dict["Metabolite", float]]:
"""Check mass balance for reactions of `model` and return unbalanced ones.
Parameters
----------
model: cobra.Model
The model to perform check on.
Returns
-------
dict of {cobra.Reaction: dict of {cobra.Metabolite: float}}
Returns an empty dict if all components are balanced.
"""
unbalanced = {}
for reaction in model.reactions:
if reaction.annotation.get("sbo") not in _NOT_MASS_BALANCED_TERMS:
balance = reaction.check_mass_balance()
if balance:
unbalanced[reaction] = balance
return unbalanced