def test_moma_shlomi_2005_change_ref(self, toy_model): if current_solver_name(toy_model) == 'glpk': pytest.skip('glpk does not support qp') original_objective = toy_model.objective reference = { "b1": 10, "v1": 10, "v2": 5, "v3": 0, "v4": 0, "v5": 0, "v6": 5, "b2": 5, "b3": 5 } expected = { 'b1': 8.8, 'b2': 4.4, 'b3': 4.4, 'v1': 8.8, 'v2': 3.1, 'v3': 1.3, 'v4': 4.4, 'v5': 3.1, 'v6': 0.0 } with TimeMachine() as tm: toy_model.reactions.v6.knock_out(tm) result = moma(toy_model, reference=reference) for k in reference.keys(): assert abs(expected[k] - result.fluxes[k]) < 0.1, "%s: %f | %f" assert toy_model.objective is original_objective reference_changed = { "b1": 5, "v1": 5, "v2": 5, "v3": 0, "v4": 0, "v5": 0, "v6": 5, "b2": 5, "b3": 5 } with TimeMachine() as tm: toy_model.reactions.v6.knock_out(tm) result_changed = moma(toy_model, reference=reference_changed) assert expected != result_changed.fluxes
def test_moma_with_cache(self, core_model): if current_solver_name(core_model) == 'glpk': pytest.skip('glpk does not support qp') original_objective = core_model.objective pfba_solution = pfba(core_model) essential_reactions = find_essential_reactions(core_model) cache = ProblemCache(core_model) for r in core_model.reactions: if r not in essential_reactions: with core_model: r.knock_out() moma(core_model, reference=pfba_solution, cache=cache) assert any(v.name.startswith("moma_aux_") for v in core_model.solver.variables) assert any(c.name.startswith("moma_const_") for c in core_model.solver.constraints) cache.reset() assert core_model.objective.expression == original_objective.expression assert not any(v.name.startswith("moma_aux_") for v in core_model.solver.variables) assert not any(c.name.startswith("moma_const_") for c in core_model.solver.constraints)
def test_moma(self): original_objective = self.model.objective pfba_solution = pfba(self.model) solution = moma(self.model, reference=pfba_solution) distance = sum((abs(solution[v] - pfba_solution[v]) for v in pfba_solution.keys())) self.assertAlmostEqual(0, distance, delta=1e-6, msg="moma distance without knockouts must be 0 (was %f)" % distance) self.assertIs(self.model.objective, original_objective)
def test_moma_with_cache(self, core_model): if current_solver_name(core_model) == 'glpk': pytest.skip('glpk does not support qp') original_objective = core_model.objective pfba_solution = pfba(core_model) essential_reactions = find_essential_reactions(core_model) cache = ProblemCache(core_model) for r in core_model.reactions: if r not in essential_reactions: with core_model: r.knock_out() moma(core_model, reference=pfba_solution, cache=cache) assert any(v.name.startswith("moma_aux_") for v in core_model.solver.variables) assert any(c.name.startswith("moma_const_") for c in core_model.solver.constraints) cache.reset() assert core_model.objective.expression == original_objective.expression assert not any(v.name.startswith("moma_aux_") for v in core_model.solver.variables) assert not any(c.name.startswith("moma_const_") for c in core_model.solver.constraints)
def test_moma(self): original_objective = self.model.objective pfba_solution = pfba(self.model) solution = moma(self.model, reference=pfba_solution) distance = sum((abs(solution[v] - pfba_solution[v]) for v in pfba_solution.keys())) self.assertAlmostEqual(0, distance, delta=1e-6, msg="moma distance without knockouts must be 0 (was %f)" % distance) self.assertIs(self.model.objective, original_objective)
def test_moma(self, core_model): if current_solver_name(core_model) == 'glpk': pytest.skip('glpk does not support qp') original_objective = core_model.objective pfba_solution = pfba(core_model) solution = moma(core_model, reference=pfba_solution) distance = sum((abs(solution[v] - pfba_solution[v]) for v in pfba_solution.keys())) assert abs(0 - distance) < 1e-6, "moma distance without knockouts must be 0 (was %f)" % distance assert core_model.objective.expression == original_objective.expression assert not any(v.name.startswith("moma_aux_") for v in core_model.solver.variables) assert not any(c.name.startswith("moma_const_") for c in core_model.solver.constraints)
def test_moma(self, core_model): if current_solver_name(core_model) == 'glpk': pytest.skip('glpk does not support qp') original_objective = core_model.objective pfba_solution = pfba(core_model) solution = moma(core_model, reference=pfba_solution) distance = sum((abs(solution[v] - pfba_solution[v]) for v in pfba_solution.keys())) assert abs(0 - distance) < 1e-6, "moma distance without knockouts must be 0 (was %f)" % distance assert core_model.objective.expression == original_objective.expression assert not any(v.name.startswith("moma_aux_") for v in core_model.solver.variables) assert not any(c.name.startswith("moma_const_") for c in core_model.solver.constraints)
def test_moma_shlomi_2005_change_ref_1(self, toy_model): if current_solver_name(toy_model) == 'glpk': pytest.skip('glpk does not support qp') expected = {'b1': 8.8, 'b2': 4.4, 'b3': 4.4, 'v1': 8.8, 'v2': 3.1, 'v3': 1.3, 'v4': 4.4, 'v5': 3.1, 'v6': 0.0} reference_changed = {"b1": 5, "v1": 5, "v2": 5, "v3": 0, "v4": 0, "v5": 0, "v6": 5, "b2": 5, "b3": 5} with toy_model: toy_model.reactions.v6.knock_out() result_changed = moma(toy_model, reference=reference_changed) assert np.all([expected != result_changed.fluxes]) assert not any(v.name.startswith("u_") for v in toy_model.solver.variables)
def test_moma_shlomi_2005_change_ref_1(self, toy_model): if current_solver_name(toy_model) == 'glpk': pytest.skip('glpk does not support qp') expected = {'b1': 8.8, 'b2': 4.4, 'b3': 4.4, 'v1': 8.8, 'v2': 3.1, 'v3': 1.3, 'v4': 4.4, 'v5': 3.1, 'v6': 0.0} reference_changed = {"b1": 5, "v1": 5, "v2": 5, "v3": 0, "v4": 0, "v5": 0, "v6": 5, "b2": 5, "b3": 5} with toy_model: toy_model.reactions.v6.knock_out() result_changed = moma(toy_model, reference=reference_changed) assert np.all([expected != result_changed.fluxes]) assert not any(v.name.startswith("u_") for v in toy_model.solver.variables)
def test_moma_shlomi_2005_change_ref(self): original_objective = self.model.objective reference = {"b1": 10, "v1": 10, "v2": 5, "v3": 0, "v4": 0, "v5": 0, "v6": 5, "b2": 5, "b3": 5} expected = {'b1': 8.8, 'b2': 4.4, 'b3': 4.4, 'v1': 8.8, 'v2': 3.1, 'v3': 1.3, 'v4': 4.4, 'v5': 3.1, 'v6': 0.0} TOY_MODEL_PAPIN_2003.solver = self.model.solver.interface with TimeMachine() as tm: TOY_MODEL_PAPIN_2003.reactions.v6.knock_out(tm) result = moma(TOY_MODEL_PAPIN_2003, reference=reference) for k in reference.keys(): self.assertAlmostEqual(expected[k], result.fluxes[k], delta=0.1, msg="%s: %f | %f") self.assertIs(self.model.objective, original_objective) reference_changed = {"b1": 5, "v1": 5, "v2": 5, "v3": 0, "v4": 0, "v5": 0, "v6": 5, "b2": 5, "b3": 5} with TimeMachine() as tm: TOY_MODEL_PAPIN_2003.reactions.v6.knock_out(tm) result_changed = moma(TOY_MODEL_PAPIN_2003, reference=reference_changed) self.assertNotEqual(expected, result_changed.fluxes)
def test_moma(self, core_model): if current_solver_name(core_model) == 'glpk': pytest.skip('glpk does not support qp') original_objective = core_model.objective pfba_solution = pfba(core_model) solution = moma(core_model, reference=pfba_solution) distance = sum((abs(solution[v] - pfba_solution[v]) for v in pfba_solution.keys())) assert abs( 0 - distance ) < 1e-6, "moma distance without knockouts must be 0 (was %f)" % distance assert core_model.objective is original_objective
def test_moma_shlomi_2005(self): original_objective = self.model.objective reference = {"b1": 10, "v1": 10, "v2": 5, "v3": 0, "v4": 0, "v5": 0, "v6": 5, "b2": 5, "b3": 5} expected = {'b1': 8.8, 'b2': 4.4, 'b3': 4.4, 'v1': 8.8, 'v2': 3.1, 'v3': 1.3, 'v4': 4.4, 'v5': 3.1, 'v6': 0.0} TOY_MODEL_PAPIN_2003.solver = self.model.solver.interface with TimeMachine() as tm: TOY_MODEL_PAPIN_2003.reactions.v6.knock_out(tm) result = moma(TOY_MODEL_PAPIN_2003, reference=reference) for k in reference.keys(): self.assertAlmostEqual(expected[k], result.fluxes[k], delta=0.1, msg="%s: %f | %f") self.assertIs(self.model.objective, original_objective)
def test_moma_shlomi_2005_change_ref(self, toy_model): if current_solver_name(toy_model) == 'glpk': pytest.skip('glpk does not support qp') original_objective = toy_model.objective reference = {"b1": 10, "v1": 10, "v2": 5, "v3": 0, "v4": 0, "v5": 0, "v6": 5, "b2": 5, "b3": 5} expected = {'b1': 8.8, 'b2': 4.4, 'b3': 4.4, 'v1': 8.8, 'v2': 3.1, 'v3': 1.3, 'v4': 4.4, 'v5': 3.1, 'v6': 0.0} with toy_model: toy_model.reactions.v6.knock_out() result = moma(toy_model, reference=reference) for k in reference.keys(): assert abs(expected[k] - result.fluxes[k]) < 0.1, "%s: %f | %f" assert toy_model.objective.expression == original_objective.expression assert not any(v.name.startswith("u_") for v in toy_model.solver.variables)
def test_moma_shlomi_2005_change_ref(self, toy_model): if current_solver_name(toy_model) == 'glpk': pytest.skip('glpk does not support qp') original_objective = toy_model.objective reference = {"b1": 10, "v1": 10, "v2": 5, "v3": 0, "v4": 0, "v5": 0, "v6": 5, "b2": 5, "b3": 5} expected = {'b1': 8.8, 'b2': 4.4, 'b3': 4.4, 'v1': 8.8, 'v2': 3.1, 'v3': 1.3, 'v4': 4.4, 'v5': 3.1, 'v6': 0.0} with toy_model: toy_model.reactions.v6.knock_out() result = moma(toy_model, reference=reference) for k in reference.keys(): assert abs(expected[k] - result.fluxes[k]) < 0.1, "%s: %f | %f" assert toy_model.objective.expression == original_objective.expression assert not any(v.name.startswith("u_") for v in toy_model.solver.variables)