from unittest import TestCase, TestLoader, TextTestRunner
from warnings import warn
import sys
__module_function_dict = {'double_deletion': 'double_deletion',
'single_deletion': 'single_deletion',
'variability': 'flux_variability_analysis'}
if __name__ == "__main__":
sys.path.insert(0, "../..")
from cobra.test import create_test_model
from cobra import Model, Reaction, Metabolite
for the_module, the_function in __module_function_dict.iteritems():
try:
exec('from cobra.flux_analysis.%s import %s'%(the_module, the_function))
except:
warn("%s test will not work with your current configuration"%the_function)
sys.path.pop(0)
else:
from . import create_test_model
from .. import Model, Reaction, Metabolite
from ..manipulation import initialize_growth_medium
for the_module, the_function in __module_function_dict.iteritems():
try:
exec('from ..flux_analysis.%s import %s'%(the_module, the_function))
except:
warn("%s test will not work with your current configuration"%the_function)
[docs]class TestCobraFluxAnalysis(TestCase):
"""Test the simulation functions in cobra.flux_analysis
TODO: Add in tests for: MOMA
"""
[docs] def setUp(self):
self.model = create_test_model()
[docs] def test_single_deletion(self):
cobra_model = self.model
initialize_growth_medium(cobra_model, 'LB')
#Expected growth rates for the salmonella model with deletions in LB medium
the_loci = ['STM4081', 'STM0247', 'STM3867', 'STM2952']
the_genes = tpiA, metN, atpA, eno = map(cobra_model.genes.get_by_id, the_loci)
id_to_name = dict([(x.id, x.name) for x in the_genes])
growth_dict = {'fba':{tpiA.id:2.41, metN.id:2.44, atpA.id:1.87, eno.id:1.81}}
for method, the_growth_rates in growth_dict.items():
element_list = the_growth_rates.keys()
rates, statuses, problems = single_deletion(cobra_model,
element_list=element_list,
method=method)
for the_gene in element_list:
self.assertEqual(statuses[the_gene], 'optimal')
self.assertAlmostEqual(rates[the_gene], the_growth_rates[the_gene],
places=2)
[docs] def test_double_deletion(self):
"""
"""
from os import name as __name
if __name == 'java':
warn("cobra.test.flux_analysis.test_double_deletion doesn't yet work with java")
return
cobra_model = self.model
#turn into a double deletion unit test
the_problem='return'
initialize_growth_medium(cobra_model, 'LB')
#Expected growth rates for the salmonella model with deletions in LB medium
the_loci = ['STM4081', 'STM0247', 'STM3867', 'STM2952']
the_genes = tpiA, metN, atpA, eno = map(cobra_model.genes.get_by_id, the_loci)
growth_dict = {}
growth_list = [[2.41, 2.389, 1.775, 1.81],
[2.389, 2.437, 1.86, 1.79],
[1.775, 1.86, 1.87, 1.3269],
[1.81, 1.79, 1.3269, 1.81]]
for the_gene, the_rates in zip(the_genes, growth_list):
growth_dict[the_gene] = dict(zip(the_genes, the_rates))
the_solution = double_deletion(cobra_model, element_list_1=the_genes,
element_list_2=the_genes,
the_problem=the_problem)
#Potential problem if the data object doesn't have a tolist function
s_data = the_solution['data'].tolist()
s_x = the_solution['x']
s_y = the_solution['y']
for gene_x, rates_x in zip(s_x, s_data):
for gene_y, the_rate in zip(s_y, rates_x):
self.assertAlmostEqual(growth_dict[gene_x][gene_y], the_rate,
places=2)
[docs] def test_flux_variability(self):
"""
"""
fva_results = {'5DGLCNtex': {'minimum': -1.9748300208638403e-05, 'maximum': 0.0}, 'ABTA': {'minimum': 0.0, 'maximum': 0.00014811225541408996}, '5DOAN': {'minimum': 0.0, 'maximum': 3.2227507421302166e-06}, 'A5PISO': {'minimum': 0.006920856282000001, 'maximum': 0.006922717378372606}, 'AACPS1': {'minimum': 0.0, 'maximum': 3.7028063376249126e-05}, 'AACPS2': {'minimum': 0.0, 'maximum': 3.7028063733878864e-05}, 'ACALDtex': {'minimum': -0.00011848980305159615, 'maximum': 0.0}, 'AACPS3': {'minimum': 0.0, 'maximum': 3.702806337623859e-05}, 'AACPS4': {'minimum': 0.0, 'maximum': 3.702806373387888e-05}, 'ABUTD': {'minimum': 0.0, 'maximum': 0.00014811225541406058}, 'AACPS5': {'minimum': 0.0, 'maximum': 2.8211857518389774e-05}, 'AACPS6': {'minimum': 0.0, 'maximum': 2.821185753295664e-05}, 'AACPS7': {'minimum': 0.0, 'maximum': 3.702806368868028e-05}, 'AACPS8': {'minimum': 0.0, 'maximum': 3.702806338788376e-05}, 'AACPS9': {'minimum': 0.0, 'maximum': 3.702806309933293e-05}, 'AACTOOR': {'minimum': 0.0, 'maximum': 1.5388286124597477e-05}, 'ABUTt2pp': {'minimum': 0.0, 'maximum': 0.0}, '3OAS140': {'minimum': 0.5041754136687804, 'maximum': 0.5042009621703677}, '3OAS141': {'minimum': 0.037484893950000084, 'maximum': 0.03750284695065363}, '3OAS160': {'minimum': 0.41767086529953557, 'maximum': 0.41769641380045963}, '3OAS161': {'minimum': 0.03748489395, 'maximum': 0.03750284695060761}, '3OAS180': {'minimum': 0.01069201669939239, 'maximum': 0.010717565200387778}, '3OAS181': {'minimum': 0.01606495455, 'maximum': 0.01608290755044158}, 'ABUTtex': {'minimum': 0.0, 'maximum': 0.0}, '3OAS60': {'minimum': 0.5439852127139995, 'maximum': 0.5439896193596934}, '3OAS80': {'minimum': 0.5439852127140001, 'maximum': 0.5439896193596934}, 'AAMYL': {'minimum': 0.0, 'maximum': 0.0}, '3PEPTabcpp': {'minimum': 0.0, 'maximum': 5.808323730923103e-06}, '3PEPTtex': {'minimum': -3.4245609402880297e-06, 'maximum': 0.0}, '3UMPtex': {'minimum': 0.0, 'maximum': 0.0}, '4HOXPACDtex': {'minimum': 0.0, 'maximum': 0.0}, 'ACACtex': {'minimum': 0.0, 'maximum': 0.0}, '4PCP': {'minimum': 0.0, 'maximum': 6.171343917391756e-06}, '4PCPpp': {'minimum': 0.0, 'maximum': 5.58914186256664e-06}, 'AAMYLpp': {'minimum': 0.0, 'maximum': 0.0}, '4PEPTabcpp': {'minimum': 0.0, 'maximum': 5.696625084349692e-06}, '4PEPTtex': {'minimum': -3.2198316806921494e-06, 'maximum': 0.0}, '5DGLCNR': {'minimum': -2.1942555793285538e-05, 'maximum': 0.0}, '5DGLCNt2rpp': {'minimum': -1.9748300208638403e-05, 'maximum': 0.0}, 'ACALD': {'minimum': 3.356574143593833, 'maximum': 7.4971939913624155}}
cobra_model = self.model
the_problem='return'
initialize_growth_medium(cobra_model, 'LB')
the_problem = cobra_model.optimize(the_problem=the_problem)
fva_out = flux_variability_analysis(cobra_model,
the_problem=the_problem,
the_reactions=cobra_model.reactions[100:140])
for the_reaction, the_range in fva_out.iteritems():
for k, v in the_range.iteritems():
self.assertAlmostEqual(fva_results[the_reaction][k], v, places=3)
# make a test suite to run all of the tests
loader = TestLoader()
suite = loader.loadTestsFromModule(sys.modules[__name__])
[docs]def test_all():
TextTestRunner(verbosity=2).run(suite)
if __name__ == "__main__":
test_all()