@@ -91,13 +91,18 @@ function assemble_crj(js, crj, statetoid)
9191end
9292
9393function assemble_maj (js, maj:: MassActionJump{U,Vector{Pair{V,W}},Vector{Pair{V2,W2}}} ,
94- statetoid, parammap) where {U,V,W,V2,W2}
94+ statetoid, parammap, pcontext) where {U,V,W,V2,W2}
95+
9596 sr = maj. scaled_rates
96- if sr isa Operation
97- pval = simplify (substitute (sr,parammap)). value
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
98103 elseif sr isa Variable
99- pval = Dict ( parammap) [sr () ]
100- else
104+ pval = parammap[sr]
105+ else
101106 pval = maj. scaled_rates
102107 end
103108
@@ -164,10 +169,20 @@ sol = solve(jprob, SSAStepper())
164169function DiffEqJump. JumpProblem (js:: JumpSystem , prob, aggregator; kwargs... )
165170
166171 statetoid = Dict (convert (Variable,state) => i for (i,state) in enumerate (states (js)))
167- parammap = map ((x,y) -> Pair ( x (),y), parameters (js), prob . p )
172+ parammap = Dict ( convert (Variable,param) => prob . p[i] for (i,param) in enumerate ( parameters (js)) )
168173 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
169184
170- majs = MassActionJump[assemble_maj (js, j, statetoid, parammap) for j in eqs. x[1 ]]
185+ majs = MassActionJump[assemble_maj (js, j, statetoid, parammap, param_context ) for j in eqs. x[1 ]]
171186 crjs = ConstantRateJump[assemble_crj (js, j, statetoid) for j in eqs. x[2 ]]
172187 vrjs = VariableRateJump[assemble_vrj (js, j, statetoid) for j in eqs. x[3 ]]
173188 ((prob isa DiscreteProblem) && ! isempty (vrjs)) && error (" Use continuous problems such as an ODEProblem or a SDEProblem with VariableRateJumps" )
0 commit comments