使用 CupSodaSimulator class os PySB 时出错

Error Using CupSodaSimulator class os PySB

我正在使用 PySB 库来完成毕业设计。最初的目标是使用 pysb.simulator.cupsoda 模型的 CupSodaSimulator class 提供的 pysb/cupSODA 接口在 GPU 上模拟一个 SBML。我写了一个简单的 Python 脚本

from pysb.importers.sbml import model_from_sbml
from pysb.simulator.cupsoda import CupSodaSimulator

filename="BIOMD0000000005_url.xml"
model = model_from_sbml(filename=filename)
simulator = CupSodaSimulator(model=model)

但我收到以下错误

AttributeError                            Traceback (most recent call last)
<ipython-input-5-b1ba6e155a18> in <module>
----> 1 simulator = CupSodaSimulator(model=model)

~/anaconda3/lib/python3.8/site-packages/pysb/simulator/cupsoda.py in __init__(self, model, tspan, initials, param_values, verbose, **kwargs)
    197 
    198         # generate the equations for the model
--> 199         pysb.bng.generate_equations(self._model, self._cleanup, self.verbose)
    200 
    201         # build integrator options list from our defaults and any kwargs

~/anaconda3/lib/python3.8/site-packages/pysb/bng.py in generate_equations(model, cleanup, verbose, **kwargs)
    729     if model.reactions:
    730         return
--> 731     lines = iter(generate_network(model, cleanup=cleanup,
    732                                   verbose=verbose, **kwargs).split('\n'))
    733     _parse_netfile(model, lines)

~/anaconda3/lib/python3.8/site-packages/pysb/bng.py in generate_network(model, cleanup, append_stdout, verbose, **kwargs)
    670         bngfile.action('generate_network', overwrite=True,
    671                        verbose=bng_action_debug, **kwargs)
--> 672         bngfile.execute()
    673 
    674         output = bngfile.read_netfile()

~/anaconda3/lib/python3.8/site-packages/pysb/bng.py in execute(self, reload_netfile, skip_file_actions)
    441             output = ''
    442             if self.model and not reload_netfile:
--> 443                 output += self.generator.get_content()
    444             if reload_netfile:
    445                 filename = reload_netfile if \

~/anaconda3/lib/python3.8/site-packages/pysb/generator/bng.py in get_content(self)
     24     def get_content(self):
     25         if self.__content == None:
---> 26             self.generate_content()
     27         return self.__content
     28 

~/anaconda3/lib/python3.8/site-packages/pysb/generator/bng.py in generate_content(self)
     29     def generate_content(self):
     30         self.__content = "begin model\n"
---> 31         self.generate_parameters()
     32         self.generate_compartments()
     33         self.generate_molecule_types()

~/anaconda3/lib/python3.8/site-packages/pysb/generator/bng.py in generate_parameters(self)
     40 
     41     def generate_parameters(self):
---> 42         exprs = self.model.expressions_constant()
     43         if not self.model.parameters and not exprs:
     44             return

~/anaconda3/lib/python3.8/site-packages/pysb/core.py in expressions_constant(self)
   1974     def expressions_constant(self):
   1975         """Return a ComponentSet of constant expressions."""
-> 1976         cset = ComponentSet(e for e in self.expressions
   1977                             if e.is_constant_expression())
   1978         return cset

~/anaconda3/lib/python3.8/site-packages/pysb/core.py in __init__(self, iterable)
   2253         self._index_map = {}
   2254         if iterable is not None:
-> 2255             for value in iterable:
   2256                 self.add(value)
   2257 

~/anaconda3/lib/python3.8/site-packages/pysb/core.py in <genexpr>(.0)
   1975         """Return a ComponentSet of constant expressions."""
   1976         cset = ComponentSet(e for e in self.expressions
-> 1977                             if e.is_constant_expression())
   1978         return cset
   1979 

~/anaconda3/lib/python3.8/site-packages/pysb/core.py in is_constant_expression(self)
   1642                    (isinstance(a, Expression) and a.is_constant_expression()) or
   1643                    isinstance(a, sympy.Number)
-> 1644                    for a in self.expr.atoms())
   1645 
   1646     def get_value(self):

~/anaconda3/lib/python3.8/site-packages/sympy/core/basic.py in atoms(self, *types)
    521             result = {node for node in nodes if isinstance(node, types)}
    522         else:
--> 523             result = {node for node in nodes if not node.args}
    524         return result
    525 

~/anaconda3/lib/python3.8/site-packages/sympy/core/basic.py in <setcomp>(.0)
    521             result = {node for node in nodes if isinstance(node, types)}
    522         else:
--> 523             result = {node for node in nodes if not node.args}
    524         return result
    525 

AttributeError: 'str' object has no attribute 'args'

有人知道如何解决这个问题吗?

这是 Sympy 版本控制错误,其中 1.6 破坏了兼容性 (https://github.com/pysb/pysb/issues/503). There is already a fix in place, but hasn't been merged in yet. If you install a Sympy with version less than 1.6 (1.5 works), then this error should go away. Also, if you have more issues with PySB errors, you can always post to the issues on github (https://github.com/pysb/pysb/issues), or check out our gitter (https://gitter.im/pysb)