Source code for test_room

# -*- coding: utf-8 -*-

"""Test functionalities of ROOM."""

from __future__ import absolute_import

import numpy as np

from cobra.flux_analysis.room import add_room


[docs]def test_room_sanity(model, all_solvers): """Test optimization criterion and optimality for ROOM.""" model.solver = all_solvers sol = model.optimize() with model: model.reactions.PYK.knock_out() knock_sol = model.optimize() with model: # Internally uses pFBA as reference solution. add_room(model) model.reactions.PYK.knock_out() room_sol = model.optimize() with model: # Use FBA as reference solution. add_room(model, solution=sol) model.reactions.PYK.knock_out() room_sol_ref = model.optimize() flux_change = (sol.fluxes - knock_sol.fluxes).abs().sum() flux_change_room = (sol.fluxes - room_sol.fluxes).abs().sum() flux_change_room_ref = (sol.fluxes - room_sol_ref.fluxes).abs().sum() # Expect the ROOM solution to have smaller flux changes in # reactions compared to a normal FBA. assert flux_change_room < flux_change or \ np.isclose(flux_change_room, flux_change, atol=1E-06) # Expect the FBA-based reference to have less change in # flux distribution. assert flux_change_room_ref > flux_change_room or \ np.isclose(flux_change_room_ref, flux_change_room, atol=1E-06)
[docs]def test_linear_room_sanity(model, all_solvers): """Test optimization criterion and optimality for linear ROOM.""" model.solver = all_solvers sol = model.optimize() with model: model.reactions.PYK.knock_out() knock_sol = model.optimize() with model: # Internally uses pFBA as reference solution. add_room(model, linear=True) model.reactions.PYK.knock_out() room_sol = model.optimize() with model: # Use FBA as reference solution. add_room(model, solution=sol, linear=True) model.reactions.PYK.knock_out() room_sol_ref = model.optimize() flux_change = (sol.fluxes - knock_sol.fluxes).abs().sum() flux_change_room = (sol.fluxes - room_sol.fluxes).abs().sum() flux_change_room_ref = (sol.fluxes - room_sol_ref.fluxes).abs().sum() # Expect the ROOM solution to have smaller flux changes in # reactions compared to a normal FBA. assert flux_change_room < flux_change or \ np.isclose(flux_change_room, flux_change, atol=1E-06) # Expect the FBA-based reference to have less change in # flux distribution. assert flux_change_room_ref > flux_change_room or \ np.isclose(flux_change_room_ref, flux_change_room, atol=1E-06)