@@ -91,18 +91,13 @@ function assemble_crj(js, crj, statetoid)
91
91
end
92
92
93
93
function assemble_maj (js, maj:: MassActionJump{U,Vector{Pair{V,W}},Vector{Pair{V2,W2}}} ,
94
- statetoid, parammap, pcontext) where {U,V,W,V2,W2}
95
-
94
+ statetoid, parammap) where {U,V,W,V2,W2}
96
95
sr = maj. scaled_rates
97
- if sr isa Operation
98
- if isempty (sr. args)
99
- pval = parammap[sr. op]
100
- else
101
- pval = Base. eval (pcontext, Expr (maj. scaled_rates))
102
- end
96
+ if sr isa Operation
97
+ pval = simplify (substitute (sr,parammap)). value
103
98
elseif sr isa Variable
104
- pval = parammap[sr]
105
- else
99
+ pval = Dict ( parammap) [sr () ]
100
+ else
106
101
pval = maj. scaled_rates
107
102
end
108
103
@@ -169,20 +164,10 @@ sol = solve(jprob, SSAStepper())
169
164
function DiffEqJump. JumpProblem (js:: JumpSystem , prob, aggregator; kwargs... )
170
165
171
166
statetoid = Dict (convert (Variable,state) => i for (i,state) in enumerate (states (js)))
172
- parammap = Dict ( convert (Variable,param) => prob . p[i] for (i,param) in enumerate ( parameters (js)) )
167
+ parammap = map ((x,y) -> Pair ( x (),y), parameters (js), prob . p )
173
168
eqs = equations (js)
174
-
175
- # for mass action jumps might need to evaluate parameter expressions
176
- # populate dummy module with params as local variables
177
- # (for eval-ing parameter expressions)
178
- pvars = parameters (js)
179
- param_context = Module ()
180
- for (i, pval) in enumerate (prob. p)
181
- psym = Symbol (pvars[i])
182
- Base. eval (param_context, :($ psym = $ pval))
183
- end
184
169
185
- majs = MassActionJump[assemble_maj (js, j, statetoid, parammap, param_context ) for j in eqs. x[1 ]]
170
+ majs = MassActionJump[assemble_maj (js, j, statetoid, parammap) for j in eqs. x[1 ]]
186
171
crjs = ConstantRateJump[assemble_crj (js, j, statetoid) for j in eqs. x[2 ]]
187
172
vrjs = VariableRateJump[assemble_vrj (js, j, statetoid) for j in eqs. x[3 ]]
188
173
((prob isa DiscreteProblem) && ! isempty (vrjs)) && error (" Use continuous problems such as an ODEProblem or a SDEProblem with VariableRateJumps" )
0 commit comments