From 9e43400ef088e434cda1f40a216f594ebaf6ec44 Mon Sep 17 00:00:00 2001 From: Andrew Freiburger Date: Wed, 26 Aug 2026 14:49:02 -0500 Subject: [PATCH] Sync modelseedpy/fbapkg/commkineticpkg.py from freiburgermsu fork File-level sync to the state of this file in freiburgermsu/ModelSEEDpy@971df5d, submitted as an individual PR so each module's divergence can be reviewed independently. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_017rcBA87xipNeaukuFW8N2G --- modelseedpy/fbapkg/commkineticpkg.py | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 modelseedpy/fbapkg/commkineticpkg.py diff --git a/modelseedpy/fbapkg/commkineticpkg.py b/modelseedpy/fbapkg/commkineticpkg.py new file mode 100644 index 00000000..0dbbcda8 --- /dev/null +++ b/modelseedpy/fbapkg/commkineticpkg.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +from __future__ import absolute_import + +import logging +from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg +from modelseedpy.core.fbahelper import FBAHelper + +# Base class for FBA packages +class CommKineticPkg(BaseFBAPkg): + def __init__(self, model): + BaseFBAPkg.__init__(self, model, "community kinetics", {}, {"commKin": "string"}) + + def build_package(self, kinetic_coef, community_model, probs={}): + self.validate_parameters({}, [], {"kinetic_coef": kinetic_coef, "community": community_model}) + for species in self.parameters["community"].members: + if species.id+"_commKin" in self.model.constraints: + print(f"Removing {species.id+'_commKin'} from {self.model.id}") + self.model.remove_cons_vars(self.model.constraints[species.id+"_commKin"]) + self.build_constraint(species, probs) + + def build_constraint(self, species, probs): + coef = {species.primary_biomass.forward_variable: -self.parameters["kinetic_coef"], + species.primary_biomass.reverse_variable: self.parameters["kinetic_coef"]} + for rxn in self.model.reactions: + rxnIndex = int(FBAHelper.rxn_compartment(rxn)[1:]) + if (rxnIndex == species.index and rxn != species.primary_biomass): + coef[rxn.forward_variable] = coef[rxn.reverse_variable] = probs.get(rxn.id, 1) + return BaseFBAPkg.build_constraint(self, "commKin", None, 0, coef, species.id)