def _split_reaction_monom(reaction, species):
"""Split a reaction into separate reactions, one
for each monomial in rate (compare to split_reactions).
:rtype: list of Reactions.
"""
ratenumer, ratedenom = reaction.rate.cancel().as_numer_denom()
ratenumer = ratenumer.expand()
species = map(sp.Symbol, species)
ratendict = sp.Poly(ratenumer, *species).as_dict()
if len(ratendict) > 1:
reactions = []
i = 0
for degrees in ratendict:
i = i + 1
ratenpart = sp.Mul(*[species[r]**degrees[r] for r in range(len(species))]) * ratendict[degrees]
reactions.append(Reaction(reaction.reactionid + "_" + str(i), \
reaction.reactant, \
reaction.product, \
ratenpart / ratedenom))
return reactions
return [reaction]
评论列表
文章目录