Skip to content

Commit b21418a

Browse files
committed
Revert "revert back to using a parameter eval module"
This reverts commit f2eb60f.
1 parent d5abfa3 commit b21418a

File tree

1 file changed

+7
-22
lines changed

1 file changed

+7
-22
lines changed

src/systems/jumps/jumpsystem.jl

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -91,18 +91,13 @@ function assemble_crj(js, crj, statetoid)
9191
end
9292

9393
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}
9695
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
10398
elseif sr isa Variable
104-
pval = parammap[sr]
105-
else
99+
pval = Dict(parammap)[sr()]
100+
else
106101
pval = maj.scaled_rates
107102
end
108103

@@ -169,20 +164,10 @@ sol = solve(jprob, SSAStepper())
169164
function DiffEqJump.JumpProblem(js::JumpSystem, prob, aggregator; kwargs...)
170165

171166
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)
173168
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
184169

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]]
186171
crjs = ConstantRateJump[assemble_crj(js, j, statetoid) for j in eqs.x[2]]
187172
vrjs = VariableRateJump[assemble_vrj(js, j, statetoid) for j in eqs.x[3]]
188173
((prob isa DiscreteProblem) && !isempty(vrjs)) && error("Use continuous problems such as an ODEProblem or a SDEProblem with VariableRateJumps")

0 commit comments

Comments
 (0)