Skip to content

Commit

Permalink
increase test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
balazs1987 committed Sep 26, 2018
1 parent 4dcd13b commit 5e8cf3f
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 63 deletions.
31 changes: 26 additions & 5 deletions tests/prokaryote/test_metabolism.py
Expand Up @@ -24,21 +24,42 @@ def setUpClass(cls):
cls.model = prokaryote.ProkaryoteModelGenerator(
knowledge_base = cls.kb,
component_generators=[prokaryote.InitalizeModel,
prokaryote.MetabolismSubmodelGenerator],
options = {'component': {
'TranscriptionSubmodelGenerator': {
'rate_dynamics': 'phenomenological'}}}).run()
prokaryote.MetabolismSubmodelGenerator]).run()

@classmethod
def tearDownClass(cls):
pass

def test_metabolite_species(self):

cytosol = self.model.compartments.get_one(id='c')
for species in self.kb.cell.species_types.get(__type=wc_kb.core.MetaboliteSpeciesType):
model_species_type = self.model.species_types.get_one(id=species.id)
model_specie = model_species_type.species.get_one(compartment=cytosol)

self.assertIsInstance(model_species_type, wc_lang.SpeciesType)
self.assertIsInstance(model_specie, wc_lang.Species)

def test_raises(self):

break_model = self.model
rxn = break_model.submodels.get_one(id='metabolism').reactions[0]
rxn.id = 'wrong_id_name'
submod_gen = prokaryote.MetabolismSubmodelGenerator(
knowledge_base = self.kb,
model = self.model)
self.assertRaisesRegexp(Exception, 'Invalid reaction id', submod_gen.gen_rate_laws)

break_model = self.model
rxn = break_model.submodels.get_one(id='metabolism').reactions[0]
rxn.id = 'transfer_wrong_id_name'
submod_gen = prokaryote.MetabolismSubmodelGenerator(
knowledge_base = self.kb,
model = self.model)
self.assertRaisesRegexp(Exception, 'Invalid transfer reaction id', submod_gen.gen_rate_laws)

break_model = self.model
break_model.species_types.get_one(id='atp').id='pta'
submod_gen = prokaryote.MetabolismSubmodelGenerator(
knowledge_base = self.kb,
model = self.model)
self.assertRaisesRegexp(ValueError, 'not found in model.species', submod_gen.gen_reactions)
87 changes: 40 additions & 47 deletions wc_model_gen/prokaryote/initalize_model.py
Expand Up @@ -124,15 +124,14 @@ def gen_rna(self):
rnas = cell.species_types.get(__type=wc_kb.prokaryote_schema.RnaSpeciesType)
for rna in rnas:
species_type = model.species_types.get_or_create(id=rna.id)
if not species_type.name:
species_type.name = rna.name
species_type.type = wc_lang.SpeciesTypeType.rna
species_type.structure = rna.get_seq()
species_type.empirical_formula = rna.get_empirical_formula()
species_type.molecular_weight = rna.get_mol_wt()
species_type.charge = rna.get_charge()
species_type.comments = rna.comments
species = species_type.species.get_or_create(compartment=cytosol)
species_type.name = rna.name
species_type.type = wc_lang.SpeciesTypeType.rna
species_type.structure = rna.get_seq()
species_type.empirical_formula = rna.get_empirical_formula()
species_type.molecular_weight = rna.get_mol_wt()
species_type.charge = rna.get_charge()
species_type.comments = rna.comments
species = species_type.species.get_or_create(compartment=cytosol)

def gen_protein(self):
'''Generate proteins in wc_lang model from knowledge base '''
Expand All @@ -143,18 +142,14 @@ def gen_protein(self):

for protein in self.knowledge_base.cell.species_types.get(__type=wc_kb.prokaryote_schema.ProteinSpeciesType):
species_type = self.model.species_types.get_or_create(id=protein.id)
if not species_type.name:

# Add functional form of protein
species_type.name = protein.name
species_type.type = wc_lang.SpeciesTypeType.protein
species_type.structure = protein.get_seq()
species_type.empirical_formula = protein.get_empirical_formula()
species_type.molecular_weight = protein.get_mol_wt()
species_type.charge = protein.get_charge()
species_type.comments = protein.comments

species = species_type.species.get_or_create(compartment=cytosol)
species_type.name = protein.name
species_type.type = wc_lang.SpeciesTypeType.protein
species_type.structure = protein.get_seq()
species_type.empirical_formula = protein.get_empirical_formula()
species_type.molecular_weight = protein.get_mol_wt()
species_type.charge = protein.get_charge()
species_type.comments = protein.comments
species = species_type.species.get_or_create(compartment=cytosol)

def gen_complexes(self):
'''Generate complexes in wc_lang model from knowledge base '''
Expand Down Expand Up @@ -194,33 +189,31 @@ def gen_observables(self):
cytosol = model.compartments.get(id='c')[0]
observable_references = {Species:{}, Observable:{}}
for kb_observable in self.knowledge_base.cell.observables:
model_observable = self.model.observables.get_or_create(
id=kb_observable.id)

model_observable = self.model.observables.get_or_create(id=kb_observable.id)
obs_expr_parts = []
if not model_observable.name:
model_observable.name = kb_observable.name
for kb_species_coefficient in kb_observable.species:
kb_species = kb_species_coefficient.species
kb_species_type = kb_species.species_type
kb_compartment = kb_species.compartment
model_species_type = model.species_types.get_one(
id=kb_species_type.id)
model_species = model_species_type.species.get_one(
compartment=model.compartments.get_one(id=kb_compartment.id))
observable_references[Species][model_species.get_id()] = model_species
model_coefficient = kb_species_coefficient.coefficient
obs_expr_parts.append("{}*{}".format(model_coefficient, model_species.get_id()))

for kb_observable_observable in kb_observable.observables:
model_observable_observable = model.observables.get_or_create(
id=kb_observable_observable.id)
obs_expr_parts.append("{}*{}".format(kb_observable_observable.coefficient, kb_observable_observable.id))
observable_references[Observable][model_observable_observable.id] = model_observable_observable
obs_expr, e = ExpressionMethods.make_expression_obj(Observable,
' + '.join(obs_expr_parts), observable_references)
assert e is None, "cannot deserialize ObservableExpression: {}".format(e)
model_observable.expression = obs_expr

model_observable.name = kb_observable.name
for kb_species_coefficient in kb_observable.species:
kb_species = kb_species_coefficient.species
kb_species_type = kb_species.species_type
kb_compartment = kb_species.compartment
model_species_type = model.species_types.get_one(
id=kb_species_type.id)
model_species = model_species_type.species.get_one(
compartment=model.compartments.get_one(id=kb_compartment.id))
observable_references[Species][model_species.get_id()] = model_species
model_coefficient = kb_species_coefficient.coefficient
obs_expr_parts.append("{}*{}".format(model_coefficient, model_species.get_id()))

for kb_observable_observable in kb_observable.observables:
model_observable_observable = model.observables.get_or_create(
id=kb_observable_observable.id)
obs_expr_parts.append("{}*{}".format(kb_observable_observable.coefficient, kb_observable_observable.id))
observable_references[Observable][model_observable_observable.id] = model_observable_observable
obs_expr, e = ExpressionMethods.make_expression_obj(Observable,
' + '.join(obs_expr_parts), observable_references)
assert e is None, "cannot deserialize ObservableExpression: {}".format(e)
model_observable.expression = obs_expr

def gen_a_specie(self, kb_metabolite, lang_compartment):
""" Generate a species in a particular compartment
Expand Down
24 changes: 13 additions & 11 deletions wc_model_gen/prokaryote/metabolism.py
Expand Up @@ -103,32 +103,34 @@ def gen_rate_laws(self):

# rate for tRNA transfer reactions
if rxn.id[0:13]=='transfer_tRNA':
expression='0.00000000005'

expression='0.0000000000589232'
if 'transfer_tRNA_rate_equation' not in locals():
transfer_tRNA_rate_equation = wc_lang.RateLawEquation(expression=expression)
rate_law.equation = transfer_tRNA_rate_equation

# rate for xMP transfers
elif rxn.id[-2:]=='mp':
expression='0.0000000007852'
if 'transfer_xMP_rate_equation' not in locals():
transfer_xMP_rate_equation = wc_lang.RateLawEquation(expression=expression)
rate_law.equation = transfer_xMP_rate_equation

# rate for H transfer reactions; CALIB
elif rxn.id[0:10]=='transfer_h':
expression='0.000000013058175578434628529'
if 'transfer_H_rate_equation' not in locals():
transfer_H_rate_equation = wc_lang.RateLawEquation(expression=expression)
transfer_H_rate_equation = wc_lang.RateLawEquation(expression=expression)
rate_law.equation = transfer_H_rate_equation

# rate for xMP molecules
# Raise error if invalid id
else:
expression='0.0000000007852'
if 'transfer_H_rate_law_equation' not in locals():
transfer_H_rate_law_equation = wc_lang.RateLawEquation(expression=expression)
rate_law.equation = transfer_H_rate_law_equation
raise Exception('Invalid transfer reaction id, no associated rate law.')

elif rxn.id[0:11]=='conversion_':
expression='0.000000001'
expression='0.000000001264589'
#expression='0.0000026'
if 'conversion_rate_law_equation' not in locals():
conversion_rate_law_equation = wc_lang.RateLawEquation(expression=expression)
rate_law.equation = conversion_rate_law_equation

else:
raise Exception('Unknown reaction type')
raise Exception('Invalid reaction id, no associated rate law.')

0 comments on commit 5e8cf3f

Please sign in to comment.