From 63742d7810bbaa6e639beafa2fa9c2a9c86d13aa Mon Sep 17 00:00:00 2001 From: Andrew Freiburger Date: Sat, 2 Jul 2022 19:59:48 -0400 Subject: [PATCH 1/4] initial commit --- modelseedpy/fbapkg/changeoptpkg.py | 37 +++---- modelseedpy/fbapkg/drainfluxpkg.py | 14 +-- modelseedpy/fbapkg/elementuptakepkg.py | 4 +- modelseedpy/fbapkg/fullthermopkg.py | 112 +++++++++++--------- modelseedpy/fbapkg/kbasemediapkg.py | 24 ++--- modelseedpy/fbapkg/metabofbapkg.py | 43 ++++---- modelseedpy/fbapkg/objconstpkg.py | 6 +- modelseedpy/fbapkg/problemreplicationpkg.py | 21 ++-- modelseedpy/fbapkg/proteomefittingpkg.py | 13 +-- modelseedpy/fbapkg/revbinpkg.py | 2 +- modelseedpy/fbapkg/simplethermopkg.py | 3 +- modelseedpy/fbapkg/totalfluxpkg.py | 19 ++-- 12 files changed, 144 insertions(+), 154 deletions(-) diff --git a/modelseedpy/fbapkg/changeoptpkg.py b/modelseedpy/fbapkg/changeoptpkg.py index 82c5b7c0..b112f910 100644 --- a/modelseedpy/fbapkg/changeoptpkg.py +++ b/modelseedpy/fbapkg/changeoptpkg.py @@ -2,9 +2,9 @@ from __future__ import absolute_import -from optlang.symbolics import Zero, add -from cobra.core import Gene, Metabolite, Model, Reaction from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg +from optlang.symbolics import Zero + #Base class for FBA packages class ChangeOptPkg(BaseFBAPkg): @@ -15,7 +15,7 @@ def build_package(self,target_values = {},build_objective = True): self.validate_parameters({}, [], { "target_values":target_values }); - #Creating objective but won't set objective unless build_objective is true + # the created objective will only be set when build_objective is true goal_objective = self.model.problem.Objective(Zero,direction="max") obj_coef = dict() for rxnid in target_values: @@ -25,35 +25,32 @@ def build_package(self,target_values = {},build_objective = True): rxn = self.model.reactions.get_by_id(rxnid) var = self.build_variable("bgoal",rxn) obj_coef[var] = target_values[rxnid]["objcoef"] - const = self.build_constraint("bgoalc",rxn) - #Now setting the goal objective if build_objective is true + self.build_constraint("bgoalc",rxn) + # setting the goal objective if build_objective is true if build_objective: self.model.objective = goal_objective goal_objective.set_linear_coefficients(obj_coef) - def build_variable(self,type,object): - if type == "bgoal": - goal = self.parameters["target_values"][object.id] - return BaseFBAPkg.build_variable(self,type,0,1,"binary",object.id+goal["direction"]) + def build_variable(self,obj_type,cobra_obj): + if obj_type == "bgoal": + goal = self.parameters["target_values"][cobra_obj.id] + return BaseFBAPkg.build_variable(self,obj_type,0,1,"binary",cobra_obj.id+goal["direction"]) - def build_constraint(self,type,object): - if type == "bgoalc": + def build_constraint(self,obj_type,cobra_obj): + if obj_type == "bgoalc": #For lower: goal - vi + 1000 - 1000 gi >= 0 #For higher: vi - goal + 1000 - 1000 gi >= 0 lb = -1000 - goal = self.parameters["target_values"][object.id] - var = self.variables["bgoal"][object.id+goal["direction"]] - fluxvar = None + goal = self.parameters["target_values"][cobra_obj.id] + var = self.variables["bgoal"][cobra_obj.id+goal["direction"]] + fluxvar = cobra_obj.forward_variable if goal["flux"] < 0: - fluxvar = object.reverse_variable - else: - fluxvar = object.forward_variable - coef = {var:-1000} + fluxvar = cobra_obj.reverse_variable + coef = {var:-1000, fluxvar:1} if goal["direction"] == "low": coef[fluxvar] = -1 lb += -1*abs(goal["flux"]) else: - coef[fluxvar] = 1 lb += abs(goal["flux"]) - return BaseFBAPkg.build_constraint(self,type,lb,None,coef,object) + return BaseFBAPkg.build_constraint(self,obj_type,lb,None,coef,cobra_obj) \ No newline at end of file diff --git a/modelseedpy/fbapkg/drainfluxpkg.py b/modelseedpy/fbapkg/drainfluxpkg.py index fd6da44c..adaaba3e 100644 --- a/modelseedpy/fbapkg/drainfluxpkg.py +++ b/modelseedpy/fbapkg/drainfluxpkg.py @@ -3,16 +3,16 @@ from __future__ import absolute_import import logging -from optlang.symbolics import Zero, add -from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg - logger = logging.getLogger("modelseedpy") +from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg +from modelseedpy.core.fbahelper import FBAHelper + #Base class for FBA packages class DrainFluxPkg(BaseFBAPkg): def __init__(self,model): BaseFBAPkg.__init__(self,model,"drain flux",{},{"drain"}) - self.update_drain_fluxes(self) + self.update_drain_fluxes() def build_package(self,parameters): self.validate_parameters(parameters,[],{ @@ -24,14 +24,14 @@ def build_package(self,parameters): "update_drain_fluxes":False }) if self.parameters["update_drain_fluxes"]: - self.update_drain_fluxes(self) + self.update_drain_fluxes() if self.parameters["add_all_intracellular_drains"]: for cpd in self.model.metabolites: self.add_drain_reaction(cpd,self.parameters["default_uptake"],self.parameters["default_excretion"]) else: for cpd in self.parameters["drain_compounds"]: - if cpd in self.metabolites: - cpdobj = self.metabolites.get_by_id(cpd) + if cpd in self.model.metabolites: + cpdobj = self.model.metabolites.get_by_id(cpd) self.add_drain_reaction(cpdobj,self.parameters["drain_compounds"][cpd]["uptake"],self.parameters["drain_compounds"][cpd]["excretion"]) def add_drain_reaction(self,cpd,uptake,excretion): diff --git a/modelseedpy/fbapkg/elementuptakepkg.py b/modelseedpy/fbapkg/elementuptakepkg.py index deed26de..db98825d 100644 --- a/modelseedpy/fbapkg/elementuptakepkg.py +++ b/modelseedpy/fbapkg/elementuptakepkg.py @@ -11,9 +11,9 @@ def __init__(self,model): BaseFBAPkg.__init__(self,model,"element uptake",{"elements":"string"},{"elements":"string"}) def build_package(self,element_limits): - for element in element_limits: + for element, limit in element_limits.items(): if element not in self.variables["elements"]: - self.build_variable(element,element_limits[element]) + self.build_variable(element, limit) self.build_constraint(element) def build_variable(self,element,limit): diff --git a/modelseedpy/fbapkg/fullthermopkg.py b/modelseedpy/fbapkg/fullthermopkg.py index 7197f698..024e6e7e 100644 --- a/modelseedpy/fbapkg/fullthermopkg.py +++ b/modelseedpy/fbapkg/fullthermopkg.py @@ -9,75 +9,85 @@ from modelseedpy.core.fbahelper import FBAHelper #Base class for FBA packages -class FullThermoPkg(BaseFBAPkg): +class FullThermoPkg(BaseFBAPkg): @staticmethod - def default_concentration(): + def default_concentrations(): return { - "cpd00067_c0":[0.0000001,0.0000001],#M H+ - equivalent to pHint = 7 - "cpd00007_c0":[1E-07,8.2E-06],#M O2 instracellular - "cpd00011_c0":[1E-08,0.0014],#M CO2 instracellular - "cpd00067_e0":[3.16228E-07,3.16228E-07],#M H+ - equivalent to pHext = 6.5 - "cpd00009_e0":[0.056,0.056],#Extracellular phosphate - overridden by media when media concentration is given - "cpd00048_e0":[0.0030,0.0030],#Extracellular sulfate - overridden by media when media concentration is given - "cpd00013_e0":[0.019,0.019],#Extracellular ammonia - overridden by media when media concentration is given - "cpd00971_e0":[0.16,0.16],#Extracellular sodium - overridden by media when media concentration is given - "cpd00205_e0":[0.022,0.022],#Extracellular potassium - overridden by media when media concentration is given - "cpd10515_e0":[0.062,0.062],#Extracellular Fe2+ - overridden by media when media concentration is given - "cpd00011_e0":[0.00010,0.00010],#Extracellular CO2 - overridden by media when media concentration is given - "cpd00007_e0":[8.2E-06,8.2E-06],#Extracellular O2 - overridden by media when media concentration is given - "cpd00027_e0":[0.020,0.020]#Extracellular glucose - overridden by media when media concentration is given + "cpd00067_c0":[0.0000001,0.0000001], #M H+ - equivalent to pHint = 7 + "cpd00007_c0":[1E-07,8.2E-06], #M O2 instracellular + "cpd00011_c0":[1E-08,0.0014], #M CO2 instracellular + "cpd00067_e0":[3.16228E-07,3.16228E-07], #M H+ - equivalent to pHext = 6.5 + "cpd00009_e0":[0.056,0.056], #Extracellular phosphate - overridden by media when media concentration is given + "cpd00048_e0":[0.0030,0.0030], #Extracellular sulfate - overridden by media when media concentration is given + "cpd00013_e0":[0.019,0.019], #Extracellular ammonia - overridden by media when media concentration is given + "cpd00971_e0":[0.16,0.16], #Extracellular sodium - overridden by media when media concentration is given + "cpd00205_e0":[0.022,0.022], #Extracellular potassium - overridden by media when media concentration is given + "cpd10515_e0":[0.062,0.062], #Extracellular Fe2+ - overridden by media when media concentration is given + "cpd00011_e0":[0.00010,0.00010], #Extracellular CO2 - overridden by media when media concentration is given + "cpd00007_e0":[8.2E-06,8.2E-06], #Extracellular O2 - overridden by media when media concentration is given + "cpd00027_e0":[0.020,0.020] #Extracellular glucose - overridden by media when media concentration is given } @staticmethod def default_deltaG_error(): return { - "cpd00067":0#KJ/mol - H delta G is based on pH and so has no error + "cpd00067":0 #KJ/mol - H delta G is based on pH and so has no error } @staticmethod - def default_compartment_potential(): + def default_compartment_potentials(): return { - "e0":0,#Extracellular MUST be the zero reference for compartment electrochemical potential (so community modeling works) - "c0":-160#mV = 0.33 (pHint - pHext) - 143.33 where pHint = 7 and pHext = 6.5 + "e0":0, #Extracellular MUST be the zero reference for compartment electrochemical potential (so community modeling works) + "c0":-160 #mV = 0.33 (pHint - pHext) - 143.33 where pHint = 7 and pHext = 6.5 } def __init__(self,model): BaseFBAPkg.__init__(self,model,"full thermo",{"logconc":"metabolite","dgerr":"metabolite"},{"potc":"metabolite"}) self.pkgmgr.addpkgs(["SimpleThermoPkg"]) - def build_package(self,parameters, verbose = True): - self.validate_parameters(parameters,["modelseed_path"],{ - "default_max_conc":0.02,#M - "default_min_conc":0.000001,#M - "default_max_error":5,#KJ/mol + def build_package(self, + parameters: dict, # simulation parameters + verbose: bool = True + ): + # define hard-coded defaults + self.parameters["deltaG_error"] = FullThermoPkg.default_deltaG_error() + self.parameters["compartment_potential"] = FullThermoPkg.default_compartment_potentials() + self.parameters["concentrations"] = FullThermoPkg.default_concentrations() + + # amalgamate default and specified paramters + self.validate_parameters(parameters, # specified parameters + ["modelseed_db_path"] # required parameter for uploading the ModelSEED Database + ,{ # default parameters + "default_max_conc":0.02, #M + "default_min_conc":0.000001, #M + "default_max_error":5, #KJ/mol "custom_concentrations":{}, "custom_deltaG_error":{}, - "compartment_potential":{}, - "temperature":298,#K + "custom_compartment_potential":{}, + "temperature":298, #K "filter":None, "infeasible_model": False, 'dgbin':False }) - self.parameters["modelseed_api"] = FBAHelper.get_modelseed_db_api(self.parameters["modelseed_path"]) + self.parameters["modelseed_api"] = FBAHelper.get_modelseed_db_api(self.parameters["modelseed_db_path"]) + for cpd in self.parameters["custom_concentrations"]: + self.parameters["concentrations"][cpd] = self.parameters["custom_concentrations"][cpd] + for cpd in self.parameters["custom_deltaG_error"]: + self.parameters["deltaG_error"][cpd] = self.parameters["custom_deltaG_error"][cpd] + for cmp in self.parameters["custom_compartment_potential"]: + self.parameters["compartment_potential"][cmp] = self.parameters["custom_compartment_potential"][cmp] + + # implements an accommodating variable to encourage feasibility simple_thermo_parameters = { "filter":self.parameters["filter"], - "min_potential":-100000,#KJ/mol - "max_potential":100000,#KJ/mol + "min_potential":-100000, #KJ/mol + "max_potential":100000, #KJ/mol 'dgbin':self.parameters['dgbin'] } if self.parameters['infeasible_model']: simple_thermo_parameters['dgbin'] = True self.pkgmgr.getpkg("SimpleThermoPkg").build_package(simple_thermo_parameters) - self.parameters["combined_custom_concentrations"] = FullThermoPkg.default_concentration() - for cpd in self.parameters["custom_concentrations"]: - self.parameters["combined_custom_concentrations"][cpd] = self.parameters["custom_concentrations"][cpd] - self.parameters["combined_custom_deltaG_error"] = FullThermoPkg.default_deltaG_error() - for cpd in self.parameters["custom_deltaG_error"]: - self.parameters["combined_custom_deltaG_error"][cpd] = self.parameters["custom_deltaG_error"][cpd] - self.parameters["combined_custom_comp_pot"] = FullThermoPkg.default_compartment_potential() - for cmp in self.parameters["compartment_potential"]: - self.parameters["combined_custom_comp_pot"][cmp] = self.parameters["compartment_potential"][cmp] msid_hash = {} for metabolite in self.model.metabolites: msid = FBAHelper.modelseed_id_from_cobra_metabolite(metabolite) @@ -85,29 +95,27 @@ def build_package(self,parameters, verbose = True): if msid not in msid_hash: msid_hash[msid] = {} msid_hash[msid][metabolite.id] = metabolite - #Build concentration variable - self.build_variable(metabolite,"logconc") - #Build error variable - self.build_variable(metabolite,"dgerr") - #Build the potential constraint - self.build_constraint(metabolite, verbose) + + self._build_variable(metabolite,"logconc") #Build concentration variable + self._build_variable(metabolite,"dgerr") #Build error variable + self._build_constraint(metabolite, verbose) #Build the potential constraint - def build_variable(self,object,type): + def _build_variable(self,object,type): msid = FBAHelper.modelseed_id_from_cobra_metabolite(object) - if type == "logconc" and msid != "cpd00001":#Do not make a concentration variable for water + if type == "logconc" and msid != "cpd00001": #Do not make a concentration variable for water lb = ln(self.parameters["default_min_conc"]) ub = ln(self.parameters["default_max_conc"]) - if object.id in self.parameters["combined_custom_concentrations"]: - lb = ln(self.parameters["combined_custom_concentrations"][object.id][0]) - ub = ln(self.parameters["combined_custom_concentrations"][object.id][1]) + if object.id in self.parameters["concentrations"]: + lb = ln(self.parameters["concentrations"][object.id][0]) + ub = ln(self.parameters["concentrations"][object.id][1]) return BaseFBAPkg.build_variable(self,"logconc",lb,ub,"continuous",object) elif type == "dgerr": ub = self.parameters["default_max_error"] - if object.id in self.parameters["combined_custom_deltaG_error"]: - ub = self.parameters["combined_custom_deltaG_error"][object.id] + if object.id in self.parameters["deltaG_error"]: + ub = self.parameters["deltaG_error"][object.id] return BaseFBAPkg.build_variable(self,"dgerr",-1*ub,ub,"continuous",object) - def build_constraint(self,object, verbose): + def _build_constraint(self,object, verbose): #potential(i) (KJ/mol) = deltaG(i) (KJ/mol) + R * T(K) * lnconc(i) + charge(i) * compartment_potential if object.id not in self.pkgmgr.getpkg("SimpleThermoPkg").variables["potential"]: return None diff --git a/modelseedpy/fbapkg/kbasemediapkg.py b/modelseedpy/fbapkg/kbasemediapkg.py index 8538d015..b844576d 100755 --- a/modelseedpy/fbapkg/kbasemediapkg.py +++ b/modelseedpy/fbapkg/kbasemediapkg.py @@ -2,17 +2,14 @@ from __future__ import absolute_import -import logging from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg -from modelseedpy.core.fbahelper import FBAHelper +from modelseedpy.core.fbahelper import FBAHelper # !!! imported but not used +from numpy import log as ln +import logging logger = logging.getLogger(__name__) class KBaseMediaPkg(BaseFBAPkg): - """ - Base class for FBA packages - """ - def __init__(self, model): BaseFBAPkg.__init__(self, model, "kbase media", {}, {}) @@ -33,26 +30,25 @@ def build_package(self, media_or_parameters, default_uptake=None, default_excret self.parameters["default_uptake"] = 0 if self.parameters["default_excretion"] is None: self.parameters["default_excretion"] = 100 - if self.parameters["media"] is None and self.parameters["default_uptake"] == 0: + if not self.parameters["media"] and self.parameters["default_uptake"] == 0: self.parameters["default_uptake"] = 100 #First initializing all exchanges to default uptake and excretion - exchange_list = self.modelutl.exchange_list() - for reaction in exchange_list: - reaction.lower_bound = -1*self.parameters["default_uptake"] + for reaction in self.modelutl.exchange_list(): + reaction.lower_bound = -self.parameters["default_uptake"] reaction.upper_bound = self.parameters["default_excretion"] #Now constraining exchanges for specific compounds specified in the media if self.parameters["media"]: exchange_hash = self.modelutl.exchange_hash() - self.modelutl.build_metabolite_hash() + # self.modelutl.build_metabolite_hash() for mediacpd in self.parameters["media"].mediacompounds: mets = self.modelutl.find_met(mediacpd.id) if len(mets) > 0: for met in mets: if met in exchange_hash: - exchange_hash[met].lower_bound = -1 * mediacpd.maxFlux - exchange_hash[met].upper_bound = -1 * mediacpd.minFlux + exchange_hash[met].lower_bound = -mediacpd.maxFlux + exchange_hash[met].upper_bound = -mediacpd.minFlux if self.pkgmgr != None and "FullThermoPkg" in self.pkgmgr.packages: logger.info('FullThermo constrained compound: ', met.id) if met.id in self.variables["logconc"] and met.compartment[0:1] == "e": @@ -60,4 +56,4 @@ def build_package(self, media_or_parameters, default_uptake=None, default_excret self.variables["logconc"][met.id].lb = ln(mediacpd.concentration) self.variables["logconc"][met.id].ub = ln(mediacpd.concentration) else: - logger.warn('Media compound: ', mediacpd.id,' not found in model.') \ No newline at end of file + logger.warn('Media compound: ', mediacpd.id,' not found in model.') diff --git a/modelseedpy/fbapkg/metabofbapkg.py b/modelseedpy/fbapkg/metabofbapkg.py index 71e72f8c..c52bd50d 100644 --- a/modelseedpy/fbapkg/metabofbapkg.py +++ b/modelseedpy/fbapkg/metabofbapkg.py @@ -4,7 +4,7 @@ import logging from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg -from modelseedpy.fbapkg.simplethermopkg import SimpleThermoPkg +from optlang.symbolics import Zero #Base class for FBA packages class MetaboFBAPkg(BaseFBAPkg): @@ -12,13 +12,13 @@ def __init__(self,model): BaseFBAPkg.__init__(self,model,"metabo fba",{"met":"metabolite","pk":"string"},{"metc":"metabolite","pkc":"string"}) self.pkgmgr.addpkgs(["SimpleThermoPkg"]) - def build_package(self,parameters): + def build_package(self,parameters, peaks): self.validate_parameters(parameters,["peaks"],{ - "set_objective":1, + "set_objective":True, }) self.pkgmgr.getpkg("SimpleThermoPkg").build_package() peak_hash = {} - for peak_data in peaks: + for peak_data in self.parameters['peaks']: peak_hash[peak_data["id"]] = peak_data self.find_metabolites_matching_peak(peak_data) self.build_variable(peak_data,"pk") @@ -26,10 +26,8 @@ def build_package(self,parameters): self.build_variable(met,"met") self.build_constraint(met,"metc") self.build_constraint(peak_data,"pkc") - if parameters["set_objective"] == 1: - metabolite_objective = self.model.problem.Objective( - Zero, - direction="max") + if parameters["set_objective"]: + metabolite_objective = self.model.problem.Objective(Zero, direction="max") obj_coef = dict() for peak_id in self.variables["pk"]: if "wieght" in peak_hash[peak_id]: @@ -39,21 +37,20 @@ def build_package(self,parameters): self.model.objective = metabolite_objective metabolite_objective.set_linear_coefficients(obj_coef) - def build_variable(self,object,type): - if type == "met": - return BaseFBAPkg.build_variable(self,type,0,1,"continuous",object) - elif type == "pk": - return BaseFBAPkg.build_variable(self,type,0,1,"continuous",object["id"]) + def build_variable(self,cobra_obj,obj_type): + if obj_type == "met": + return BaseFBAPkg.build_variable(self,obj_type,0,1,"continuous",cobra_obj) + elif obj_type == "pk": + return BaseFBAPkg.build_variable(self,obj_type,0,1,"continuous",cobra_obj["id"]) - def build_constraint(self,object,type): + def build_constraint(self,cobra_obj,obj_type): #TODO: need to determine coefficients - coef = {self.variables["met"][object.id]:1} - if type == "metc": - return BaseFBAPkg.build_constraint(self,"metc",0,0,coef,object) - elif type == "pkc": - return BaseFBAPkg.build_constraint(self,"pkc",0,0,coef,object["id"]) + if obj_type == "metc": + return BaseFBAPkg.build_constraint(self,"metc",0,0,{self.variables["met"][cobra_obj.id]:1},cobra_obj) + elif obj_type == "pkc": + return BaseFBAPkg.build_constraint(self,"pkc",0,0,{self.variables["met"][cobra_obj.id]:1},cobra_obj["id"]) - def find_metabolites_matching_peak(self,data): - #TODO: need to write this function - pass - \ No newline at end of file + # def find_metabolites_matching_peak(self,data): + # #TODO: need to write this function + # pass + diff --git a/modelseedpy/fbapkg/objconstpkg.py b/modelseedpy/fbapkg/objconstpkg.py index 15ec0ec9..2a8b115b 100644 --- a/modelseedpy/fbapkg/objconstpkg.py +++ b/modelseedpy/fbapkg/objconstpkg.py @@ -2,7 +2,6 @@ from __future__ import absolute_import -import logging from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg #Base class for FBA packages @@ -11,8 +10,5 @@ def __init__(self,model): BaseFBAPkg.__init__(self,model,"objective constraint",{},{"objc":"none"}) def build_package(self,lower_bound,upper_bound): - self.build_constraint(lower_bound,upper_bound) - - def build_constraint(self,lower_bound,upper_bound): coef = self.model.solver.objective.get_linear_coefficients(self.model.solver.objective.variables) - return BaseFBAPkg.build_constraint(self,"objc",lower_bound,upper_bound,coef,None) \ No newline at end of file + return BaseFBAPkg.build_constraint(self,"objc",lower_bound,upper_bound,coef,None) diff --git a/modelseedpy/fbapkg/problemreplicationpkg.py b/modelseedpy/fbapkg/problemreplicationpkg.py index e7d4dbb9..d15d5efa 100644 --- a/modelseedpy/fbapkg/problemreplicationpkg.py +++ b/modelseedpy/fbapkg/problemreplicationpkg.py @@ -2,12 +2,10 @@ from __future__ import absolute_import -import logging -from optlang import Variable -from optlang.symbolics import Zero, add + from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg -from modelseedpy.fbapkg.revbinpkg import RevBinPkg -from modelseedpy.fbapkg.totalfluxpkg import TotalFluxPkg +from optlang import Variable +import logging #Base class for FBA packages class ProblemReplicationPkg(BaseFBAPkg): @@ -21,10 +19,11 @@ def build_package(self,parameters): #First loading shared variables into a hash shared_var_hash = {} for pkg in self.parameters["shared_variable_packages"]: - for type in self.parameters["shared_variable_packages"][pkg]: - if type in pkg.variables: - for objid in pkg.variables[type]: - shared_var_hash[pkg.variables[type][objid].name] = pkg.variables[type][objid] + for obj_type in self.parameters["shared_variable_packages"][pkg]: + if obj_type in pkg.variables: + for objid in pkg.variables[obj_type]: + shared_var_hash[pkg.variables[obj_type][objid].name] = pkg.variables[obj_type][objid] + #Now copying over variables and constraints from other models and replacing shared variables count = 0 for othermdl in self.parameters["models"]: @@ -37,7 +36,7 @@ def build_package(self,parameters): newvar = Variable.clone(var) newvar.name = var.name+"."+str(count) self.variables[str(count)][var.name] = newvar - new_var_hash[var.name] = newvar + new_var_hash[var.name] = newvar newobj.append(newvar) self.model.add_cons_vars(newobj) newobj = [] @@ -55,4 +54,4 @@ def build_package(self,parameters): self.constraints[str(count)][const.name] = newconst newobj.append(newconst) self.model.add_cons_vars(newobj) - count += 1 \ No newline at end of file + count += 1 diff --git a/modelseedpy/fbapkg/proteomefittingpkg.py b/modelseedpy/fbapkg/proteomefittingpkg.py index 3a86f3c6..20835962 100644 --- a/modelseedpy/fbapkg/proteomefittingpkg.py +++ b/modelseedpy/fbapkg/proteomefittingpkg.py @@ -3,11 +3,12 @@ from __future__ import absolute_import import logging -import math -from optlang.symbolics import Zero, add +logger = logging.getLogger(__name__) + +from optlang.symbolics import add from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg from modelseedpy.core.fbahelper import FBAHelper -from modelseedpy.multiomics.msexpression import MSExpression, GENOME, MODEL, COLUMN_NORM +from modelseedpy.multiomics.msexpression import GENOME, COLUMN_NORM #Options for default behavior LOWEST = 10 @@ -60,15 +61,15 @@ def build_package(self,parameters): self.build_variable(rxnobj,"kapp") var = self.build_variable(rxnobj,"kvfit") objvars.append(self.parameters["obj_kvfit"] * var ** 2) - const = self.build_constraint(rxnobj,"vkapp") + self.build_constraint(rxnobj,"vkapp") #Adding kcat fitting variables and constraints - for rxnid in self.parameters["kcat_values"]: + for rxnid in self.parameters["kcat_values"]: #!!! what does this loop contribute? for rxnobj in self.model.reactions: if rxnid == FBAHelper.modelseed_id_from_cobra_reaction(rxnobj): if rxnobj.id not in self.variables["kapp"]: self.build_variable(rxnobj,"kapp") var = self.build_variable(rxnobj,"kfit") - const = self.build_constraint(rxnobj,"kfitc") + self.build_constraint(rxnobj,"kfitc") objvars.append(self.parameters["obj_kfit"] * var ** 2) #Creating objective function if self.parameters["set_objective"] == 1: diff --git a/modelseedpy/fbapkg/revbinpkg.py b/modelseedpy/fbapkg/revbinpkg.py index e7312527..d2e0ca04 100644 --- a/modelseedpy/fbapkg/revbinpkg.py +++ b/modelseedpy/fbapkg/revbinpkg.py @@ -24,4 +24,4 @@ def build_constraint(self,object): #-1000 * revbin(i) + forv(i) <= 0 BaseFBAPkg.build_constraint(self,"revbinF",None,0,{self.variables["revbin"][object.id]:-1000,object.forward_variable:1},object) #1000 * revbin(i) + revv(i) <= 1000 - return BaseFBAPkg.build_constraint(self,"revbinR",None,1000,{self.variables["revbin"][object.id]:1000,object.reverse_variable:1},object) \ No newline at end of file + return BaseFBAPkg.build_constraint(self,"revbinR",None,1000,{self.variables["revbin"][object.id]:1000,object.reverse_variable:1},object) diff --git a/modelseedpy/fbapkg/simplethermopkg.py b/modelseedpy/fbapkg/simplethermopkg.py index 7114ef70..15722342 100644 --- a/modelseedpy/fbapkg/simplethermopkg.py +++ b/modelseedpy/fbapkg/simplethermopkg.py @@ -4,7 +4,6 @@ import logging from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg from optlang.symbolics import Zero -import re #Base class for FBA packages class SimpleThermoPkg(BaseFBAPkg): @@ -101,4 +100,4 @@ def optimize_dgbin(self): # set the dgbin sum as the model objective self.model.objective = self.model.problem.Objective(Zero,direction='max') - self.model.objective.set_linear_coefficients(dgbin_sum_coef) \ No newline at end of file + self.model.objective.set_linear_coefficients(dgbin_sum_coef) diff --git a/modelseedpy/fbapkg/totalfluxpkg.py b/modelseedpy/fbapkg/totalfluxpkg.py index 98a9fc45..b775d3fd 100644 --- a/modelseedpy/fbapkg/totalfluxpkg.py +++ b/modelseedpy/fbapkg/totalfluxpkg.py @@ -3,16 +3,12 @@ from __future__ import absolute_import import logging -import re -from optlang.symbolics import Zero, add -import json as _json -from cobra.core import Gene, Metabolite, Model, Reaction +# import re +# from optlang.symbolics import Zero, add +# import json as _json +# from cobra.core import Gene, Metabolite, Model, Reaction from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg - -#Adding a few exception classes to handle different types of errors -class FeasibilityError(Exception): - """Error in FBA formulation""" - pass +from modelseedpy.core.exceptions import FeasibilityError #Base class for FBA packages class TotalFluxPkg(BaseFBAPkg): @@ -28,6 +24,7 @@ def build_package(self,reaction_filter = None,upper_bound = 100): self.variables["tf"][reaction.id] = self.model.problem.Variable(reaction.id+"_tf", lb=0,ub=upper_bound) self.model.add_cons_vars(self.variables["tf"][reaction.id]) self.constraints["tf"][reaction.id] = self.model.problem.Constraint( - reaction.forward_variable + reaction.reverse_variable - self.variables["tf"][reaction.id],lb=0,ub=0,name=reaction.id+"_tf" + reaction.forward_variable + reaction.reverse_variable - self.variables["tf"][reaction.id], + lb=0, ub=0, name=reaction.id+"_tf" ) - self.model.add_cons_vars(self.constraints["tf"][reaction.id]) \ No newline at end of file + self.model.add_cons_vars(self.constraints["tf"][reaction.id]) From 074c65a3ac2fe27d573c1691e5f292c28ad27604 Mon Sep 17 00:00:00 2001 From: Andrew Freiburger Date: Sat, 2 Jul 2022 20:29:09 -0400 Subject: [PATCH 2/4] polished edits --- modelseedpy/fbapkg/changeoptpkg.py | 3 +- modelseedpy/fbapkg/drainfluxpkg.py | 2 +- modelseedpy/fbapkg/fullthermopkg.py | 112 +++++++++----------- modelseedpy/fbapkg/kbasemediapkg.py | 9 +- modelseedpy/fbapkg/metabofbapkg.py | 10 +- modelseedpy/fbapkg/objconstpkg.py | 2 + modelseedpy/fbapkg/problemreplicationpkg.py | 12 ++- modelseedpy/fbapkg/proteomefittingpkg.py | 6 +- modelseedpy/fbapkg/simplethermopkg.py | 2 + modelseedpy/fbapkg/totalfluxpkg.py | 11 +- 10 files changed, 87 insertions(+), 82 deletions(-) diff --git a/modelseedpy/fbapkg/changeoptpkg.py b/modelseedpy/fbapkg/changeoptpkg.py index b112f910..9ef36b66 100644 --- a/modelseedpy/fbapkg/changeoptpkg.py +++ b/modelseedpy/fbapkg/changeoptpkg.py @@ -2,8 +2,9 @@ from __future__ import absolute_import +from optlang.symbolics import Zero, add # !!! Add is never used +from cobra.core import Gene, Metabolite, Model, Reaction # !!! None of these packages are ever used from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg -from optlang.symbolics import Zero #Base class for FBA packages diff --git a/modelseedpy/fbapkg/drainfluxpkg.py b/modelseedpy/fbapkg/drainfluxpkg.py index adaaba3e..67d8e039 100644 --- a/modelseedpy/fbapkg/drainfluxpkg.py +++ b/modelseedpy/fbapkg/drainfluxpkg.py @@ -4,7 +4,7 @@ import logging logger = logging.getLogger("modelseedpy") - +from optlang.symbolics import Zero, add # !!! Neither Zero nor Add are used from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg from modelseedpy.core.fbahelper import FBAHelper diff --git a/modelseedpy/fbapkg/fullthermopkg.py b/modelseedpy/fbapkg/fullthermopkg.py index 024e6e7e..7197f698 100644 --- a/modelseedpy/fbapkg/fullthermopkg.py +++ b/modelseedpy/fbapkg/fullthermopkg.py @@ -9,85 +9,75 @@ from modelseedpy.core.fbahelper import FBAHelper #Base class for FBA packages -class FullThermoPkg(BaseFBAPkg): +class FullThermoPkg(BaseFBAPkg): @staticmethod - def default_concentrations(): + def default_concentration(): return { - "cpd00067_c0":[0.0000001,0.0000001], #M H+ - equivalent to pHint = 7 - "cpd00007_c0":[1E-07,8.2E-06], #M O2 instracellular - "cpd00011_c0":[1E-08,0.0014], #M CO2 instracellular - "cpd00067_e0":[3.16228E-07,3.16228E-07], #M H+ - equivalent to pHext = 6.5 - "cpd00009_e0":[0.056,0.056], #Extracellular phosphate - overridden by media when media concentration is given - "cpd00048_e0":[0.0030,0.0030], #Extracellular sulfate - overridden by media when media concentration is given - "cpd00013_e0":[0.019,0.019], #Extracellular ammonia - overridden by media when media concentration is given - "cpd00971_e0":[0.16,0.16], #Extracellular sodium - overridden by media when media concentration is given - "cpd00205_e0":[0.022,0.022], #Extracellular potassium - overridden by media when media concentration is given - "cpd10515_e0":[0.062,0.062], #Extracellular Fe2+ - overridden by media when media concentration is given - "cpd00011_e0":[0.00010,0.00010], #Extracellular CO2 - overridden by media when media concentration is given - "cpd00007_e0":[8.2E-06,8.2E-06], #Extracellular O2 - overridden by media when media concentration is given - "cpd00027_e0":[0.020,0.020] #Extracellular glucose - overridden by media when media concentration is given + "cpd00067_c0":[0.0000001,0.0000001],#M H+ - equivalent to pHint = 7 + "cpd00007_c0":[1E-07,8.2E-06],#M O2 instracellular + "cpd00011_c0":[1E-08,0.0014],#M CO2 instracellular + "cpd00067_e0":[3.16228E-07,3.16228E-07],#M H+ - equivalent to pHext = 6.5 + "cpd00009_e0":[0.056,0.056],#Extracellular phosphate - overridden by media when media concentration is given + "cpd00048_e0":[0.0030,0.0030],#Extracellular sulfate - overridden by media when media concentration is given + "cpd00013_e0":[0.019,0.019],#Extracellular ammonia - overridden by media when media concentration is given + "cpd00971_e0":[0.16,0.16],#Extracellular sodium - overridden by media when media concentration is given + "cpd00205_e0":[0.022,0.022],#Extracellular potassium - overridden by media when media concentration is given + "cpd10515_e0":[0.062,0.062],#Extracellular Fe2+ - overridden by media when media concentration is given + "cpd00011_e0":[0.00010,0.00010],#Extracellular CO2 - overridden by media when media concentration is given + "cpd00007_e0":[8.2E-06,8.2E-06],#Extracellular O2 - overridden by media when media concentration is given + "cpd00027_e0":[0.020,0.020]#Extracellular glucose - overridden by media when media concentration is given } @staticmethod def default_deltaG_error(): return { - "cpd00067":0 #KJ/mol - H delta G is based on pH and so has no error + "cpd00067":0#KJ/mol - H delta G is based on pH and so has no error } @staticmethod - def default_compartment_potentials(): + def default_compartment_potential(): return { - "e0":0, #Extracellular MUST be the zero reference for compartment electrochemical potential (so community modeling works) - "c0":-160 #mV = 0.33 (pHint - pHext) - 143.33 where pHint = 7 and pHext = 6.5 + "e0":0,#Extracellular MUST be the zero reference for compartment electrochemical potential (so community modeling works) + "c0":-160#mV = 0.33 (pHint - pHext) - 143.33 where pHint = 7 and pHext = 6.5 } def __init__(self,model): BaseFBAPkg.__init__(self,model,"full thermo",{"logconc":"metabolite","dgerr":"metabolite"},{"potc":"metabolite"}) self.pkgmgr.addpkgs(["SimpleThermoPkg"]) - def build_package(self, - parameters: dict, # simulation parameters - verbose: bool = True - ): - # define hard-coded defaults - self.parameters["deltaG_error"] = FullThermoPkg.default_deltaG_error() - self.parameters["compartment_potential"] = FullThermoPkg.default_compartment_potentials() - self.parameters["concentrations"] = FullThermoPkg.default_concentrations() - - # amalgamate default and specified paramters - self.validate_parameters(parameters, # specified parameters - ["modelseed_db_path"] # required parameter for uploading the ModelSEED Database - ,{ # default parameters - "default_max_conc":0.02, #M - "default_min_conc":0.000001, #M - "default_max_error":5, #KJ/mol + def build_package(self,parameters, verbose = True): + self.validate_parameters(parameters,["modelseed_path"],{ + "default_max_conc":0.02,#M + "default_min_conc":0.000001,#M + "default_max_error":5,#KJ/mol "custom_concentrations":{}, "custom_deltaG_error":{}, - "custom_compartment_potential":{}, - "temperature":298, #K + "compartment_potential":{}, + "temperature":298,#K "filter":None, "infeasible_model": False, 'dgbin':False }) - self.parameters["modelseed_api"] = FBAHelper.get_modelseed_db_api(self.parameters["modelseed_db_path"]) - for cpd in self.parameters["custom_concentrations"]: - self.parameters["concentrations"][cpd] = self.parameters["custom_concentrations"][cpd] - for cpd in self.parameters["custom_deltaG_error"]: - self.parameters["deltaG_error"][cpd] = self.parameters["custom_deltaG_error"][cpd] - for cmp in self.parameters["custom_compartment_potential"]: - self.parameters["compartment_potential"][cmp] = self.parameters["custom_compartment_potential"][cmp] - - # implements an accommodating variable to encourage feasibility + self.parameters["modelseed_api"] = FBAHelper.get_modelseed_db_api(self.parameters["modelseed_path"]) simple_thermo_parameters = { "filter":self.parameters["filter"], - "min_potential":-100000, #KJ/mol - "max_potential":100000, #KJ/mol + "min_potential":-100000,#KJ/mol + "max_potential":100000,#KJ/mol 'dgbin':self.parameters['dgbin'] } if self.parameters['infeasible_model']: simple_thermo_parameters['dgbin'] = True self.pkgmgr.getpkg("SimpleThermoPkg").build_package(simple_thermo_parameters) + self.parameters["combined_custom_concentrations"] = FullThermoPkg.default_concentration() + for cpd in self.parameters["custom_concentrations"]: + self.parameters["combined_custom_concentrations"][cpd] = self.parameters["custom_concentrations"][cpd] + self.parameters["combined_custom_deltaG_error"] = FullThermoPkg.default_deltaG_error() + for cpd in self.parameters["custom_deltaG_error"]: + self.parameters["combined_custom_deltaG_error"][cpd] = self.parameters["custom_deltaG_error"][cpd] + self.parameters["combined_custom_comp_pot"] = FullThermoPkg.default_compartment_potential() + for cmp in self.parameters["compartment_potential"]: + self.parameters["combined_custom_comp_pot"][cmp] = self.parameters["compartment_potential"][cmp] msid_hash = {} for metabolite in self.model.metabolites: msid = FBAHelper.modelseed_id_from_cobra_metabolite(metabolite) @@ -95,27 +85,29 @@ def build_package(self, if msid not in msid_hash: msid_hash[msid] = {} msid_hash[msid][metabolite.id] = metabolite - - self._build_variable(metabolite,"logconc") #Build concentration variable - self._build_variable(metabolite,"dgerr") #Build error variable - self._build_constraint(metabolite, verbose) #Build the potential constraint + #Build concentration variable + self.build_variable(metabolite,"logconc") + #Build error variable + self.build_variable(metabolite,"dgerr") + #Build the potential constraint + self.build_constraint(metabolite, verbose) - def _build_variable(self,object,type): + def build_variable(self,object,type): msid = FBAHelper.modelseed_id_from_cobra_metabolite(object) - if type == "logconc" and msid != "cpd00001": #Do not make a concentration variable for water + if type == "logconc" and msid != "cpd00001":#Do not make a concentration variable for water lb = ln(self.parameters["default_min_conc"]) ub = ln(self.parameters["default_max_conc"]) - if object.id in self.parameters["concentrations"]: - lb = ln(self.parameters["concentrations"][object.id][0]) - ub = ln(self.parameters["concentrations"][object.id][1]) + if object.id in self.parameters["combined_custom_concentrations"]: + lb = ln(self.parameters["combined_custom_concentrations"][object.id][0]) + ub = ln(self.parameters["combined_custom_concentrations"][object.id][1]) return BaseFBAPkg.build_variable(self,"logconc",lb,ub,"continuous",object) elif type == "dgerr": ub = self.parameters["default_max_error"] - if object.id in self.parameters["deltaG_error"]: - ub = self.parameters["deltaG_error"][object.id] + if object.id in self.parameters["combined_custom_deltaG_error"]: + ub = self.parameters["combined_custom_deltaG_error"][object.id] return BaseFBAPkg.build_variable(self,"dgerr",-1*ub,ub,"continuous",object) - def _build_constraint(self,object, verbose): + def build_constraint(self,object, verbose): #potential(i) (KJ/mol) = deltaG(i) (KJ/mol) + R * T(K) * lnconc(i) + charge(i) * compartment_potential if object.id not in self.pkgmgr.getpkg("SimpleThermoPkg").variables["potential"]: return None diff --git a/modelseedpy/fbapkg/kbasemediapkg.py b/modelseedpy/fbapkg/kbasemediapkg.py index b844576d..e865f469 100755 --- a/modelseedpy/fbapkg/kbasemediapkg.py +++ b/modelseedpy/fbapkg/kbasemediapkg.py @@ -1,15 +1,18 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import - +import logging +logger = logging.getLogger(__name__) from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg from modelseedpy.core.fbahelper import FBAHelper # !!! imported but not used from numpy import log as ln -import logging logger = logging.getLogger(__name__) class KBaseMediaPkg(BaseFBAPkg): + """ + Base class for FBA packages + """ def __init__(self, model): BaseFBAPkg.__init__(self, model, "kbase media", {}, {}) @@ -41,7 +44,7 @@ def build_package(self, media_or_parameters, default_uptake=None, default_excret #Now constraining exchanges for specific compounds specified in the media if self.parameters["media"]: exchange_hash = self.modelutl.exchange_hash() - # self.modelutl.build_metabolite_hash() + self.modelutl.build_metabolite_hash() # !!! what does this accomplish? for mediacpd in self.parameters["media"].mediacompounds: mets = self.modelutl.find_met(mediacpd.id) if len(mets) > 0: diff --git a/modelseedpy/fbapkg/metabofbapkg.py b/modelseedpy/fbapkg/metabofbapkg.py index c52bd50d..b9de1d70 100644 --- a/modelseedpy/fbapkg/metabofbapkg.py +++ b/modelseedpy/fbapkg/metabofbapkg.py @@ -3,7 +3,9 @@ from __future__ import absolute_import import logging +logger = logging.getLogger(__name__) from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg +from modelseedpy.fbapkg.simplethermopkg import SimpleThermoPkg # !!! the import is not used from optlang.symbolics import Zero #Base class for FBA packages @@ -12,7 +14,7 @@ def __init__(self,model): BaseFBAPkg.__init__(self,model,"metabo fba",{"met":"metabolite","pk":"string"},{"metc":"metabolite","pkc":"string"}) self.pkgmgr.addpkgs(["SimpleThermoPkg"]) - def build_package(self,parameters, peaks): + def build_package(self,parameters): self.validate_parameters(parameters,["peaks"],{ "set_objective":True, }) @@ -50,7 +52,7 @@ def build_constraint(self,cobra_obj,obj_type): elif obj_type == "pkc": return BaseFBAPkg.build_constraint(self,"pkc",0,0,{self.variables["met"][cobra_obj.id]:1},cobra_obj["id"]) - # def find_metabolites_matching_peak(self,data): - # #TODO: need to write this function - # pass + def find_metabolites_matching_peak(self,data): + #TODO: need to write this function + pass diff --git a/modelseedpy/fbapkg/objconstpkg.py b/modelseedpy/fbapkg/objconstpkg.py index 2a8b115b..8aa8aade 100644 --- a/modelseedpy/fbapkg/objconstpkg.py +++ b/modelseedpy/fbapkg/objconstpkg.py @@ -2,6 +2,8 @@ from __future__ import absolute_import +import logging +logger = logging.getLogger(__name__) from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg #Base class for FBA packages diff --git a/modelseedpy/fbapkg/problemreplicationpkg.py b/modelseedpy/fbapkg/problemreplicationpkg.py index d15d5efa..676bbe71 100644 --- a/modelseedpy/fbapkg/problemreplicationpkg.py +++ b/modelseedpy/fbapkg/problemreplicationpkg.py @@ -2,10 +2,13 @@ from __future__ import absolute_import - -from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg -from optlang import Variable import logging +logger = logging.getLogger(__name__) +from optlang import Variable +from optlang.symbolics import Zero, add # !!! neither Zero nor Add are used +from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg +from modelseedpy.fbapkg.revbinpkg import RevBinPkg # !!! import is unused +from modelseedpy.fbapkg.totalfluxpkg import TotalFluxPkg # !!! import is unused #Base class for FBA packages class ProblemReplicationPkg(BaseFBAPkg): @@ -23,7 +26,6 @@ def build_package(self,parameters): if obj_type in pkg.variables: for objid in pkg.variables[obj_type]: shared_var_hash[pkg.variables[obj_type][objid].name] = pkg.variables[obj_type][objid] - #Now copying over variables and constraints from other models and replacing shared variables count = 0 for othermdl in self.parameters["models"]: @@ -36,7 +38,7 @@ def build_package(self,parameters): newvar = Variable.clone(var) newvar.name = var.name+"."+str(count) self.variables[str(count)][var.name] = newvar - new_var_hash[var.name] = newvar + new_var_hash[var.name] = newvar newobj.append(newvar) self.model.add_cons_vars(newobj) newobj = [] diff --git a/modelseedpy/fbapkg/proteomefittingpkg.py b/modelseedpy/fbapkg/proteomefittingpkg.py index 20835962..6c092f61 100644 --- a/modelseedpy/fbapkg/proteomefittingpkg.py +++ b/modelseedpy/fbapkg/proteomefittingpkg.py @@ -4,11 +4,11 @@ import logging logger = logging.getLogger(__name__) - -from optlang.symbolics import add +import math # !!! import never used +from optlang.symbolics import Zero, add # !!! Zero is never used from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg from modelseedpy.core.fbahelper import FBAHelper -from modelseedpy.multiomics.msexpression import GENOME, COLUMN_NORM +from modelseedpy.multiomics.msexpression import MSExpression, GENOME, MODEL, COLUMN_NORM # !!! MSExpression and Model are never used #Options for default behavior LOWEST = 10 diff --git a/modelseedpy/fbapkg/simplethermopkg.py b/modelseedpy/fbapkg/simplethermopkg.py index 15722342..d14be134 100644 --- a/modelseedpy/fbapkg/simplethermopkg.py +++ b/modelseedpy/fbapkg/simplethermopkg.py @@ -2,8 +2,10 @@ from __future__ import absolute_import import logging +logger = logging.getLogger(__name__) from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg from optlang.symbolics import Zero +import re # !!! import is never used #Base class for FBA packages class SimpleThermoPkg(BaseFBAPkg): diff --git a/modelseedpy/fbapkg/totalfluxpkg.py b/modelseedpy/fbapkg/totalfluxpkg.py index b775d3fd..ec351f86 100644 --- a/modelseedpy/fbapkg/totalfluxpkg.py +++ b/modelseedpy/fbapkg/totalfluxpkg.py @@ -3,12 +3,13 @@ from __future__ import absolute_import import logging -# import re -# from optlang.symbolics import Zero, add -# import json as _json -# from cobra.core import Gene, Metabolite, Model, Reaction +logger = logging.getLogger(__name__) +import re # !!! import is never used +from optlang.symbolics import Zero, add # !!! Neither import is never used +import json as _json # !!! import is never used +from cobra.core import Gene, Metabolite, Model, Reaction # !!! None of these import are ever used from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg -from modelseedpy.core.exceptions import FeasibilityError +from modelseedpy.core.exceptions import FeasibilityError # !!! import is never used #Base class for FBA packages class TotalFluxPkg(BaseFBAPkg): From eed99c6c674c6743085803c5af5be5b6886b5b36 Mon Sep 17 00:00:00 2001 From: freiburgermsu Date: Fri, 22 Jul 2022 22:57:30 -0400 Subject: [PATCH 3/4] revert None logic --- modelseedpy/fbapkg/kbasemediapkg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modelseedpy/fbapkg/kbasemediapkg.py b/modelseedpy/fbapkg/kbasemediapkg.py index e865f469..20c586e3 100755 --- a/modelseedpy/fbapkg/kbasemediapkg.py +++ b/modelseedpy/fbapkg/kbasemediapkg.py @@ -33,7 +33,7 @@ def build_package(self, media_or_parameters, default_uptake=None, default_excret self.parameters["default_uptake"] = 0 if self.parameters["default_excretion"] is None: self.parameters["default_excretion"] = 100 - if not self.parameters["media"] and self.parameters["default_uptake"] == 0: + if self.parameters["media"] is None and self.parameters["default_uptake"] == 0: self.parameters["default_uptake"] = 100 #First initializing all exchanges to default uptake and excretion From 02bb018fb551335c93968fd3235c814edfc80606 Mon Sep 17 00:00:00 2001 From: freiburgermsu Date: Fri, 22 Jul 2022 22:58:24 -0400 Subject: [PATCH 4/4] relocate the logger initialization --- modelseedpy/fbapkg/totalfluxpkg.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modelseedpy/fbapkg/totalfluxpkg.py b/modelseedpy/fbapkg/totalfluxpkg.py index ec351f86..40bb2a13 100644 --- a/modelseedpy/fbapkg/totalfluxpkg.py +++ b/modelseedpy/fbapkg/totalfluxpkg.py @@ -3,7 +3,6 @@ from __future__ import absolute_import import logging -logger = logging.getLogger(__name__) import re # !!! import is never used from optlang.symbolics import Zero, add # !!! Neither import is never used import json as _json # !!! import is never used @@ -11,6 +10,8 @@ from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg from modelseedpy.core.exceptions import FeasibilityError # !!! import is never used +logger = logging.getLogger(__name__) + #Base class for FBA packages class TotalFluxPkg(BaseFBAPkg): def __init__(self,model):