Source code for test_deletion

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

"""Test functionalities of reaction and gene deletions."""

from __future__ import absolute_import

import math

import numpy as np
import pytest
from pandas import Series
from six import iteritems

from cobra.flux_analysis.deletion import (
    double_gene_deletion, double_reaction_deletion, single_gene_deletion,
    single_reaction_deletion)
from cobra.flux_analysis.room import add_room


# Single gene deletion FBA
[docs]def test_single_gene_deletion_fba_benchmark(model, benchmark, all_solvers): """Benchmark single gene deletion using FBA.""" model.solver = all_solvers benchmark(single_gene_deletion, model)
[docs]def test_single_gene_deletion_fba(model, all_solvers): """Test single gene deletion using FBA.""" # expected knockouts for textbook model model.solver = all_solvers growth_dict = {"b0008": 0.87, "b0114": 0.80, "b0116": 0.78, "b2276": 0.21, "b1779": 0.00} result = single_gene_deletion( model=model, gene_list=list(growth_dict), method="fba", processes=1 )["growth"] for gene, value in iteritems(growth_dict): assert np.isclose(result[frozenset([gene])], value, atol=1E-02)
# Singe gene deletion MOMA
[docs]def test_single_gene_deletion_moma_benchmark(model, benchmark, qp_solvers): """Benchmark single gene deletion using MOMA.""" model.solver = qp_solvers genes = ['b0008', 'b0114', 'b2276', 'b1779'] benchmark(single_gene_deletion, model=model, gene_list=genes, method="moma", processes=1)
[docs]def test_single_gene_deletion_moma(model, qp_solvers): """Test single gene deletion using MOMA.""" model.solver = qp_solvers # expected knockouts for textbook model growth_dict = {"b0008": 0.87, "b0114": 0.71, "b0116": 0.56, "b2276": 0.11, "b1779": 0.00} result = single_gene_deletion( model=model, gene_list=list(growth_dict), method="moma", processes=1 )["growth"] for gene, value in iteritems(growth_dict): assert np.isclose(result[frozenset([gene])], value, atol=1E-02)
[docs]def test_single_gene_deletion_moma_reference(model, qp_solvers): """Test single gene deletion using MOMA (reference solution).""" model.solver = qp_solvers # expected knockouts for textbook model growth_dict = {"b0008": 0.87, "b0114": 0.71, "b0116": 0.56, "b2276": 0.11, "b1779": 0.00} sol = model.optimize() result = single_gene_deletion( model=model, gene_list=list(growth_dict), method="moma", solution=sol, processes=1 )["growth"] for gene, value in iteritems(growth_dict): assert np.isclose(result[frozenset([gene])], value, atol=1E-02)
# Single gene deletion linear MOMA
[docs]def test_single_gene_deletion_linear_moma_benchmark( model, benchmark, all_solvers): """Benchmark single gene deletion using linear MOMA.""" model.solver = all_solvers genes = ['b0008', 'b0114', 'b2276', 'b1779'] benchmark(single_gene_deletion, model=model, gene_list=genes, method="linear moma", processes=1)
[docs]def test_single_gene_deletion_linear_moma(model, all_solvers): """Test single gene deletion using linear MOMA (reference solution).""" model.solver = all_solvers # expected knockouts for textbook model growth_dict = {"b0008": 0.87, "b0114": 0.76, "b0116": 0.65, "b2276": 0.08, "b1779": 0.00} sol = model.optimize() result = single_gene_deletion( model=model, gene_list=list(growth_dict), method="linear moma", solution=sol, processes=1 )["growth"] for gene, value in iteritems(growth_dict): assert np.isclose(result[frozenset([gene])], value, atol=1E-02)
# Single gene deletion ROOM
[docs]def test_single_gene_deletion_room_benchmark(model, benchmark, all_solvers): """Benchmark single gene deletion using ROOM.""" if all_solvers == "glpk": pytest.skip("GLPK is too slow to run ROOM.") model.solver = all_solvers genes = ['b0008', 'b0114', 'b2276', 'b1779'] benchmark(single_gene_deletion, model=model, gene_list=genes, method="room", processes=1)
# Single gene deletion linear ROOM
[docs]def test_single_gene_deletion_linear_room_benchmark( model, benchmark, all_solvers): """Benchmark single gene deletion using linear ROOM.""" model.solver = all_solvers genes = ['b0008', 'b0114', 'b2276', 'b1779'] benchmark(single_gene_deletion, model=model, gene_list=genes, method="linear room", processes=1)
# Single reaction deletion
[docs]def test_single_reaction_deletion_benchmark(model, benchmark, all_solvers): """Benchmark single reaction deletion.""" model.solver = all_solvers benchmark(single_reaction_deletion, model=model, processes=1)
[docs]def test_single_reaction_deletion(model, all_solvers): """Test single reaction deletion.""" model.solver = all_solvers expected_results = {'FBA': 0.70404, 'FBP': 0.87392, 'CS': 0, 'FUM': 0.81430, 'GAPD': 0, 'GLUDy': 0.85139} result = single_reaction_deletion( model=model, reaction_list=list(expected_results), processes=1 )['growth'] for reaction, value in iteritems(expected_results): assert np.isclose(result[frozenset([reaction])], value, atol=1E-05)
# Single reaction deletion ROOM
[docs]def test_single_reaction_deletion_room(room_model, room_solution, all_solvers): """Test single reaction deletion using ROOM.""" room_model.solver = all_solvers expected = Series({'v1': 10.0, 'v2': 5.0, 'v3': 0.0, 'v4': 5.0, 'v5': 5.0, 'v6': 0.0, 'b1': 10.0, 'b2': 5.0, 'b3': 5.0}, index=['v1', 'v2', 'v3', 'v4', 'v5', 'v6', 'b1', 'b2', 'b3']) with room_model: room_model.reactions.v6.knock_out() add_room(room_model, solution=room_solution, delta=0.0, epsilon=0.0) room_sol = room_model.optimize() assert np.allclose(room_sol.fluxes, expected)
# Single reaction deletion linear ROOM
[docs]def test_single_reaction_deletion_linear_room(room_model, room_solution, all_solvers): """Test single reaction deletion using linear ROOM.""" room_model.solver = all_solvers expected = Series({'v1': 10.0, 'v2': 5.0, 'v3': 0.0, 'v4': 5.0, 'v5': 5.0, 'v6': 0.0, 'b1': 10.0, 'b2': 5.0, 'b3': 5.0}, index=['v1', 'v2', 'v3', 'v4', 'v5', 'v6', 'b1', 'b2', 'b3']) with room_model: room_model.reactions.v6.knock_out() add_room(room_model, solution=room_solution, delta=0.0, epsilon=0.0, linear=True) linear_room_sol = room_model.optimize() assert np.allclose(linear_room_sol.fluxes, expected)
# Double gene deletion
[docs]def test_double_gene_deletion_benchmark(large_model, benchmark): """Benchmark double gene deletion.""" genes = ["b0726", "b4025", "b0724", "b0720", "b2935", "b2935", "b1276", "b1241"] benchmark(double_gene_deletion, large_model, gene_list1=genes, processes=1)
[docs]def test_double_gene_deletion(model): """Test double gene deletion.""" genes = ["b0726", "b4025", "b0724", "b0720", "b2935", "b2935", "b1276", "b1241"] growth_dict = {'b0720': {'b0720': 0.0, 'b0724': 0.0, 'b0726': 0.0, 'b1241': 0.0, 'b1276': 0.0, 'b2935': 0.0, 'b4025': 0.0}, 'b0724': {'b0720': 0.0, 'b0724': 0.814, 'b0726': 0.814, 'b1241': 0.814, 'b1276': 0.814, 'b2935': 0.814, 'b4025': 0.739}, 'b0726': {'b0720': 0.0, 'b0724': 0.814, 'b0726': 0.858, 'b1241': 0.858, 'b1276': 0.858, 'b2935': 0.858, 'b4025': 0.857}, 'b1241': {'b0720': 0.0, 'b0724': 0.814, 'b0726': 0.858, 'b1241': 0.874, 'b1276': 0.874, 'b2935': 0.874, 'b4025': 0.863}, 'b1276': {'b0720': 0.0, 'b0724': 0.814, 'b0726': 0.858, 'b1241': 0.874, 'b1276': 0.874, 'b2935': 0.874, 'b4025': 0.863}, 'b2935': {'b0720': 0.0, 'b0724': 0.814, 'b0726': 0.858, 'b1241': 0.874, 'b1276': 0.874, 'b2935': 0.874, 'b4025': 0.863}, 'b4025': {'b0720': 0.0, 'b0724': 0.739, 'b0726': 0.857, 'b1241': 0.863, 'b1276': 0.863, 'b2935': 0.863, 'b4025': 0.863}} solution = double_gene_deletion( model, gene_list1=genes, processes=3)['growth'] solution_one_process = double_gene_deletion( model, gene_list1=genes, processes=1)['growth'] for (rxn_a, sub) in iteritems(growth_dict): for rxn_b, growth in iteritems(sub): sol = solution[frozenset([rxn_a, rxn_b])] sol_one = solution_one_process[frozenset([rxn_a, rxn_b])] assert round(sol, 3) == growth assert round(sol_one, 3) == growth
# Double reaction deletion
[docs]def test_double_reaction_deletion_benchmark(large_model, benchmark): """Benchmark double reaction deletion.""" reactions = large_model.reactions[1::100] benchmark(double_reaction_deletion, large_model, reaction_list1=reactions)
[docs]def test_double_reaction_deletion(model): """Test double reaction deletion.""" reactions = ['FBA', 'ATPS4r', 'ENO', 'FRUpts2'] growth_dict = { "FBA": { "ATPS4r": 0.135, "ENO": float('nan'), "FRUpts2": 0.704 }, "ATPS4r": { "ENO": float('nan'), "FRUpts2": 0.374 }, "ENO": { "FRUpts2": 0.0 }, } solution = double_reaction_deletion( model, reaction_list1=reactions, processes=3)['growth'] solution_one_process = double_reaction_deletion( model, reaction_list1=reactions, processes=1)['growth'] for (rxn_a, sub) in iteritems(growth_dict): for rxn_b, growth in iteritems(sub): sol = solution[frozenset([rxn_a, rxn_b])] sol_one = solution_one_process[frozenset([rxn_a, rxn_b])] if math.isnan(growth): assert math.isnan(sol) assert math.isnan(sol_one) else: assert round(sol, 3) == growth assert round(sol_one, 3) == growth