gyorilab / mira

MIRA modeling framework
BSD 2-Clause "Simplified" License
9 stars 7 forks source link

failed to convert mira model to AMR #366

Closed djinnome closed 4 weeks ago

djinnome commented 1 month ago

Hi folks,

I have the following igfr.xml.gz SBML model that was generated from this igfr.antimony.gz Antimony description.

antimony_fname = "igfr.antimony"
sbml_file = "igfr.xml"
rr_model = te.loada(antimony_fname)
rr_model.exportToSBML(sbml_file)

I was able to load this in Mira,

mira_model = template_model_from_sbml_file(sbml_file)
display(mira_model.parameters)
display(mira_model.initials)

{'k1': Parameter(name='k1', display_name=None, description='', identifiers={}, context={}, units=None, value=400000.0, distribution=None),
 'kd1': Parameter(name='kd1', display_name=None, description='', identifiers={}, context={}, units=None, value=0.002, distribution=None),
 'k1a': Parameter(name='k1a', display_name=None, description='', identifiers={}, context={}, units=None, value=400000.0, distribution=None),
 'kd1a': Parameter(name='kd1a', display_name=None, description='', identifiers={}, context={}, units=None, value=0.002, distribution=None),
 'k3': Parameter(name='k3', display_name=None, description='', identifiers={}, context={}, units=None, value=1e-07, distribution=None),
...

but when I tried to display it in graphviz or convert it to an AMR, I get the same error:

---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
Cell In[6], [line 2](vscode-notebook-cell:?execution_count=6&line=2)
      [1](vscode-notebook-cell:?execution_count=6&line=1) model_json_file_name = "igfr.json"
----> [2](vscode-notebook-cell:?execution_count=6&line=2) community_modeling.convert_MIRA_model_to_petrinet_AMRPetriNetModel(mira_model,model_json_file_name)

File ~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:116, in convert_MIRA_model_to_petrinet_AMRPetriNetModel(mira_model, petrinet_model_filename)
    [114](~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:114) file_path = Path(petrinet_model_filename)
    [115](~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:115) file_root = file_path.stem
--> [116](~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:116) petrinet_model = AMRPetriNetModel(Model(mira_model))
    [117](~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:117) petrinet_model.to_json_file(
    [118](~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:118)             petrinet_model_filename,
    [119](~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:119)             name=file_root,
    [120](~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:120)             description=file_root,
    [121](~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:121)             indent=2,
    [122](~/Projects/PPI/CarbStor/concerto/concerto/utils/community_modeling.py:122)         )

File ~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:149, in Model.__init__(self, template_model)
    [147](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:147) self.transitions: Dict[Hashable, Transition] = {}
    [148](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:148) self.observables: Dict[Hashable, ModelObservable] = {}
--> [149](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:149) self.make_model()

File ~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:340, in Model.make_model(self)
    [336](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:336) elif not is_replication(template):
    [337](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:337)     produced, produced_key = tuple(), None
    [339](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:339) tkey_elements = tuple(
--> [340](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:340)     element for element in [consumed_key, produced_key, control_key, str(idx)]
    [341](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:341)     if element is not None
    [342](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:342) )
    [343](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:343) tkey = get_transition_key(tkey_elements, template.type)
    [345](~/Projects/PPI/CarbStor/mira/mira/modeling/__init__.py:345) p = self.assemble_parameter(template, tkey)

UnboundLocalError: cannot access local variable 'consumed_key' where it is not associated with a value
bgyori commented 4 weeks ago

Fixed in #368