def test_moma_shlomi_2005(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
def test_shortest_elementary_flux_modes(self, core_model): if current_solver_name(core_model) == 'glpk': pytest.skip('sefm not supported for glpk') sefm = structural.ShortestElementaryFluxModes(core_model) ems = [] for i, em in enumerate(sefm): if i > 10: break ems.append(em) assert list(map(len, ems)) == sorted(map(len, ems))
def test_shortest_elementary_flux_modes(self, core_model): if current_solver_name(core_model) == 'glpk': pytest.skip('sefm not supported for glpk') sefm = structural.ShortestElementaryFluxModes(core_model) ems = [] for i, em in enumerate(sefm): if i > 10: break ems.append(em) assert list(map(len, ems)) == sorted(map(len, ems))
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(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_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_room_shlomi_2005(self, toy_model): if current_solver_name(toy_model) == "glpk": pytest.xfail("this test doesn't work with glpk") 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': 10.0, 'b2': 5.0, 'b3': 5.0, 'v1': 10.0, 'v2': 5.0, 'v3': 0.0, 'v4': 5.0, 'v5': 5.0, 'v6': 0.0} assert not any(v.name.startswith("y_") for v in toy_model.solver.variables) with toy_model: toy_model.reactions.v6.knock_out() result = room(toy_model, reference=reference, delta=0, epsilon=0) 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("y_") for v in toy_model.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)
def test_room_shlomi_2005(self, toy_model): if current_solver_name(toy_model) == "glpk": pytest.xfail("this test doesn't work with glpk") 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': 10.0, 'b2': 5.0, 'b3': 5.0, 'v1': 10.0, 'v2': 5.0, 'v3': 0.0, 'v4': 5.0, 'v5': 5.0, 'v6': 0.0} assert not any(v.name.startswith("y_") for v in toy_model.solver.variables) with toy_model: toy_model.reactions.v6.knock_out() result = room(toy_model, reference=reference, delta=0, epsilon=0) 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("y_") for v in toy_model.variables)
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_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)