Skip to content

IndexError when running KineticSimulation #49

@gg-plato

Description

@gg-plato

Hello,

I am working with an inhouse kinetic model (SBML format) at ITQB NOVA, and while I can run simulations on MEWpy <= 0.1.28, latter versions of the package do not seem to work. After retesting, I can't get it to work on the older version too, as such I suspect its caused by an updated dependency, unfortunately I dont have the original environment saved.

Running the following code:

sim = KineticSimulation(model,timeout=0)
res = sim.simulate(t_points=range(0,800,50))
res.find()

Results in the following error:

{
IndexError                                Traceback (most recent call last)
Cell In[8], line 2
      1 sim = KineticSimulation(model,timeout=0)
----> 2 res = sim.simulate(t_points=range(0,800,50))
      3 res.find()

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\simulation\\kinetic.py:347, in KineticSimulation.simulate(self, parameters, initcon, factors, t_points)
    345         warnings.warn(str(e))
    346 else:
--> 347     status, sstateRates, sstateConc, t, y = kinetic_solve(self.model,
    348                                                           initConcentrations,
    349                                                           time_steps,
    350                                                           params,
    351                                                           _factors)
    353 return KineticSimulationResult(self.model, status, factors=_factors, rates=sstateRates,
    354                                concentrations=sstateConc, t=t, y=y)

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\simulation\\kinetic.py:67, in kinetic_solve(model, y0, time_steps, parameters, factors)
     50 \"\"\"Kinetic solve method that invokes an available ODE solver. 
     51 
     52 :param model: The kinetic model
   (...)
     63 :rtype: _type_
     64 \"\"\"
     66 rates = OrderedDict()    
---> 67 f = model.get_ode(r_dict=rates, params=parameters, factors=factors)
     68 solver = ode_solver_instance(f, KineticConfigurations.SOLVER_METHOD)
     70 try:

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\model\\kinetic.py:740, in ODEModel.get_ode(self, r_dict, params, factors)
    737 r = r_dict if r_dict is not None else dict()
    739 np.seterr(divide='ignore', invalid='ignore')
--> 740 exec(self.build_ode(factors), globals())
    741 ode_func = eval('ode_func')
    743 return lambda t, y: ode_func(t, y, r, p, v)

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\model\\kinetic.py:696, in ODEModel.build_ode(self, factors, local)
    693 v = {p_id: f\"v['{p_id}']\" for p_id in self.variable_params}
    694 rmap = OrderedDict({**m, **c, **p, **v})
--> 696 parsed_rates = {r_id: ratelaw.parse_law(rmap, local=local)
    697                 for r_id, ratelaw in self.ratelaws.items()}
    699 r = {r_id: f\"({parsed_rates[r_id]})\" for r_id in self.ratelaws.keys()}
    701 rmap.update(r)

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\model\\kinetic.py:696, in <dictcomp>(.0)
    693 v = {p_id: f\"v['{p_id}']\" for p_id in self.variable_params}
    694 rmap = OrderedDict({**m, **c, **p, **v})
--> 696 parsed_rates = {r_id: ratelaw.parse_law(rmap, local=local)
    697                 for r_id, ratelaw in self.ratelaws.items()}
    699 r = {r_id: f\"({parsed_rates[r_id]})\" for r_id in self.ratelaws.keys()}
    701 rmap.update(r)

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\model\\kinetic.py:295, in KineticReaction.parse_law(self, map, local)
    292 r_map = map.copy()
    293 r_map.update(m)
--> 295 return self.replace(r_map, local=local)

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\model\\kinetic.py:195, in Rule.replace(self, parameters, local, infix, latex)
    193 if local:
    194     param.update(self.parameters)
--> 195 t = self.tree.replace(param)
    196 if latex:
    197     return Latex(t.to_latex()[0])

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\model\\kinetic.py:150, in Rule.tree(self)
    144 \"\"\"Parsing tree of the law.
    145 
    146 Returns:
    147     Node: Root node of the parsing tree.
    148 \"\"\"
    149 if not self._tree:
--> 150     self._tree = build_tree(self.law, Arithmetic)
    151 return self._tree

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\util\\parsing.py:742, in build_tree(exp, rules)
    739     t = Node(f[0], Node(EMPTY_LEAF), build_tree(f[1], rules), 1)
    740 elif len(f) == 3:
    741     t = Node(
--> 742         f[0], build_tree(f[1], rules), build_tree(f[2], rules), 2
    743     )
    744 else:
    745     t = Node(token)

File c:\\Code_Projects\\Master Thesis\\kinetic_modeling\\.venv\\lib\\site-packages\\mewpy\\util\\parsing.py:769, in build_tree(exp, rules)
    767 t = Node(popped_item)
    768 t1 = tree_stack.pop()
--> 769 t2 = tree_stack.pop()
    770 t.right = t1
    771 t.left = t2

IndexError: pop from empty list"
}

Any idea what could be the problem?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions