def test_medium_mip(self, model): med = medium.minimal_medium(model, 0.8, minimize_components=True) assert len(med) <= 4 assert all(med > 1e-6) # Anaerobic growth med = medium.minimal_medium(model, 0.1, minimize_components=True) assert len(med) <= 3 assert all(med > 1e-6)
def test_open_exchanges(self, model): model.reactions.EX_glc__D_e.bounds = 0, 0 med = medium.minimal_medium(model, 0.8) assert med is None med = medium.minimal_medium(model, 0.8, minimize_components=True) assert med is None med = medium.minimal_medium(model, 0.8, open_exchanges=True) assert len(med) >= 3 med = medium.minimal_medium(model, 0.8, open_exchanges=100) assert len(med) >= 3
def __init__(self, config={}): model_path = config.get('model_path') # get tolerances self.default_tolerance = config.get('default_tolerance', [0.95, 1]) self.tolerance = config.get('tolerance', {}) # set MOMA (minimization of metabolic adjustment) self.moma = config.get('moma', False) if model_path: # load a BiGG model self.model = cobra.io.load_json_model(model_path) swap_synonyms(self.model) extract = extract_model(self.model) self.stoichiometry = extract['stoichiometry'] self.reversible = extract['reversible'] self.external_molecules = extract['external_molecules'] self.objective = extract['objective'] self.flux_bounds = extract['flux_bounds'] self.molecular_weights = extract['molecular_weights'] self.exchange_bounds = extract['exchange_bounds'] self.default_upper_bound = DEFAULT_UPPER_BOUND # TODO -- can this be extracted from model? self.flux_scaling = extract['flux_scaling'] else: # create an FBA model from config self.stoichiometry = config['stoichiometry'] self.reversible = config.get('reversible', []) self.external_molecules = config['external_molecules'] self.objective = config['objective'] self.flux_bounds = config.get('flux_bounds', {}) self.molecular_weights = config.get('molecular_weights', {}) self.exchange_bounds = config.get('exchange_bounds', {}) self.default_upper_bound = config.get('default_upper_bound', DEFAULT_UPPER_BOUND) self.flux_scaling = config.get('flux_scaling', 1) self.model = build_model(self.stoichiometry, self.reversible, self.objective, self.external_molecules, self.default_upper_bound) # apply constraints self.constrain_reaction_bounds(self.flux_bounds) self.set_exchange_bounds() self.exchange_bounds_keys = list(self.exchange_bounds.keys()) # get minimal external state # TODO -- make sure that scaling is accounted for max_growth = self.model.slim_optimize() max_exchange = minimal_medium(self.model, max_growth) self.minimal_external = { ex[len(EXTERNAL_PREFIX):len(ex)]: value for ex, value in max_exchange.items() } # initialize solution self.solution = self.model.optimize()
def test_medium_exports(self, model): med = medium.minimal_medium(model, 0.8, exports=True, minimize_components=True) assert len(med) > 4 assert any(med < -1e-6)
def test_medium_alternative_mip(self, model): med = medium.minimal_medium(model, 0.8, minimize_components=5, open_exchanges=True) assert isinstance(med, pd.DataFrame) assert med.shape[0] >= 5 assert med.shape[1] == 5 assert all((med > 0).sum() == 3) assert all(med.sum(axis=1) > 1e-6)
def minimal_external(self): '''get minimal external state''' max_growth = self.model.slim_optimize() max_exchange = minimal_medium(self.model, max_growth) return { ex[len(EXTERNAL_PREFIX):len(ex)]: value for ex, value in max_exchange.items() }
def test_medium_linear(self, model): med = medium.minimal_medium(model, 0.8) assert len(med) <= 4 assert all(med > 1e-6)
def deter_milieu_minimal(self): from cobra.medium import minimal_medium self.deter_les_croissances() self.milieu_minimal=dict(minimal_medium(self.bacterie.model, self.croissance_global_max))
def deter_milieu_minimal(self): from cobra.medium import minimal_medium self.milieu_minimal=minimal_medium(self.model, self.croissance_global_max)