Source code for test_minimal_medium

"""Test functionalities of minimal medium creation and analysis."""

import pandas as pd
import pytest

from cobra.core import Model, Reaction
from cobra.medium import minimal_medium


[docs]def test_minimal_medium_linear(model: Model) -> None: """Test linear minimal medium.""" med = minimal_medium(model, 0.8) assert len(med) <= 4 assert all(med > 1e-6)
[docs]def test_minimal_medium_linear_benchmark(model: Model, benchmark) -> None: """Benchmark linear minimal medium.""" benchmark(minimal_medium, model, 0.8)
[docs]def test_minimal_medium_mip(model: Model) -> None: """Test mixed-integer minimal medium.""" med = minimal_medium(model, 0.8, minimize_components=True) assert len(med) <= 4 assert all(med > 1e-6) # Anaerobic growth med = minimal_medium(model, 0.1, minimize_components=True) assert len(med) <= 3 assert all(med > 1e-6)
[docs]def test_minimal_medium_mip_benchmark(model: Model, benchmark) -> None: """Benchmark mixed-integer minimal medium.""" benchmark(minimal_medium, model, 0.8, True)
[docs]def test_minimal_medium_alternative_mip(model: Model) -> None: """Test alternative mixed-integer minimal medium.""" med = 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)
[docs]def test_minimal_medium_exports(model: Model) -> None: """Test exports of a minimal medium.""" med = minimal_medium(model, 0.8, exports=True, minimize_components=True) assert len(med) > 4 assert any(med < -1e-6)
[docs]def test_minimal_medium_open_exchanges(model: Model) -> None: """Test open exchanges of a minimal medium.""" model.reactions.EX_glc__D_e.bounds = 0, 0 med = minimal_medium(model, 0.8) assert med is None med = minimal_medium(model, 0.8, minimize_components=True) assert med is None med = minimal_medium(model, 0.8, open_exchanges=True) assert len(med) >= 3 med = minimal_medium(model, 0.8, open_exchanges=100) assert len(med) >= 3
[docs]def test_model_medium(model: Model) -> None: """Test proper functioning of model medium manipulations.""" # Add a dummy 'malformed' import reaction bad_import = Reaction("bad_import") bad_import.add_metabolites({model.metabolites.pyr_c: 1}) bad_import.bounds = (0, 42) model.add_reaction(bad_import) # Test basic setting and getting methods medium = model.medium model.medium = medium assert model.medium == medium # Test context management with model: # Ensure the bounds are correct beforehand assert model.reactions.EX_glc__D_e.lower_bound == -10 assert model.reactions.bad_import.upper_bound == 42 assert model.reactions.EX_co2_e.lower_bound == -1000 # Make changes to the media new_medium = model.medium new_medium["EX_glc__D_e"] = 20 new_medium["bad_import"] = 24 del new_medium["EX_co2_e"] # Change the medium, make sure changes work model.medium = new_medium assert model.reactions.EX_glc__D_e.lower_bound == -20 assert model.reactions.bad_import.upper_bound == 24 assert model.reactions.EX_co2_e.lower_bound == 0 # Make sure changes revert after the contex assert model.reactions.EX_glc__D_e.lower_bound == -10 assert model.reactions.bad_import.upper_bound == 42 assert model.reactions.EX_co2_e.lower_bound == -1000 new_medium["bogus_rxn"] = 0 with pytest.raises(KeyError): model.medium = new_medium