Skip to content

Commit

Permalink
Clean up lambda handling in SBML
Browse files Browse the repository at this point in the history
  • Loading branch information
bgyori committed Jul 11, 2023
1 parent 1ce2ce0 commit d5be529
Showing 1 changed file with 10 additions and 13 deletions.
23 changes: 10 additions & 13 deletions mira/sources/sbml/processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@

from mira.metamodel import *
from mira.resources import get_resource_file
from .. import clean_formula


class TqdmLoggingHandler(logging.Handler):
Expand Down Expand Up @@ -124,16 +123,15 @@ def _lookup_concepts_filtered(species_ids) -> List[Concept]:
all_species = {species.id for species in self.sbml_model.species}

all_parameters = {
clean_formula(parameter.id): {
parameter.id: {
'value': parameter.value,
'description': parameter.name,
'units': self.get_object_units(parameter)
}
for parameter in self.sbml_model.parameters
}
parameter_symbols = \
{clean_formula(parameter.id):
sympy.Symbol(clean_formula(parameter.id))
{parameter.id: sympy.Symbol(parameter.id)
for parameter in self.sbml_model.parameters}
compartment_symbols = {compartment.id: sympy.Symbol(compartment.id)
for compartment in self.sbml_model.compartments}
Expand All @@ -149,8 +147,7 @@ def _lookup_concepts_filtered(species_ids) -> List[Concept]:
args = [fun_def.getArgument(i).getName()
for i in range(fun_def.getNumArguments())]
arg_symbols = {
clean_formula(arg):
sympy.Symbol(clean_formula(arg)) for arg in args
arg: sympy.Symbol(arg) for arg in args
}

signature = tuple(arg_symbols.values())
Expand All @@ -172,10 +169,11 @@ def _lookup_concepts_filtered(species_ids) -> List[Concept]:
for species in self.sbml_model.species
}

all_locals = {k: v for k, v in (list(parameter_symbols.items()) +
list(compartment_symbols.items()) +
list(function_lambdas.items()) +
list(species_id_map.items()))}
all_locals = {get_parseable_expression(k): v
for k, v in (list(parameter_symbols.items()) +
list(compartment_symbols.items()) +
list(function_lambdas.items()) +
list(species_id_map.items()))}

# Handle custom assignment rules in the model
assignment_rules = {}
Expand All @@ -196,10 +194,9 @@ def _lookup_concepts_filtered(species_ids) -> List[Concept]:
all_parameters[parameter.id] = {'value': parameter.value,
'description': parameter.name if parameter.name else None,
'units': self.get_object_units(parameter)}
parameter_symbols[clean_formula(parameter.id)] = \
sympy.Symbol(clean_formula(parameter.id))
parameter_symbols[parameter.id] = sympy.Symbol(parameter.id)

rate_expr = sympy.parse_expr(clean_formula(rate_law.formula),
rate_expr = sympy.parse_expr(get_parseable_expression(rate_law.formula),
local_dict=all_locals)
# At this point we need to make sure we substitute the assignments
rate_expr = rate_expr.subs(assignment_rules)
Expand Down

0 comments on commit d5be529

Please sign in to comment.