Skip to content

Commit 816722e

Browse files
authored
Merge pull request #482 from SciML/s/fix-substitute-dict
Fix substitution with Dict
2 parents ff89e56 + 22b7b8e commit 816722e

File tree

4 files changed

+9
-13
lines changed

4 files changed

+9
-13
lines changed

src/systems/jumps/jumpsystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ function DiffEqJump.JumpProblem(js::JumpSystem, prob, aggregator; kwargs...)
233233
# handling parameter substition and empty param vecs
234234
p = (prob.p == DiffEqBase.NullParameters()) ? Operation[] : prob.p
235235
parammap = map((x,y)->Pair(x(),y), parameters(js), p)
236-
subber = substituter(first.(parammap), last.(parammap))
236+
subber = substituter(parammap)
237237

238238
majs = MassActionJump[assemble_maj(js, j, statetoid, subber, invttype) for j in eqs.x[1]]
239239
crjs = ConstantRateJump[assemble_crj(js, j, statetoid) for j in eqs.x[2]]

src/utils.jl

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,12 @@ substitute(expr::Operation, s::Vector)
117117
Performs the substitution `Operation => val` on the `expr` Operation.
118118
"""
119119
substitute(expr::Constant, s) = expr
120-
substitute(expr::Operation, s::Pair) = _substitute(expr, [s[1]], [s[2]])
121-
substitute(expr::Operation, dict::Dict) = _substitute(expr, keys(dict), values(dict))
122-
substitute(expr::Operation, s::Vector) = _substitute(expr, first.(s), last.(s))
120+
substitute(expr::Operation, s::Pair) = substituter([s[1] => s[2]])(expr)
121+
substitute(expr::Operation, s::Union{Vector, Dict}) = substituter(s)(expr)
123122

124-
function _substitute(ks, vs)
125-
expr -> _substitute(expr, Dict(map(Pair, map(to_symbolic, ks), map(to_symbolic, vs))))
126-
end
127-
128-
function substituter(ks, vs)
129-
dict = Dict(map(Pair, map(to_symbolic, ks), map(to_symbolic, vs)))
123+
function substituter(pairs)
124+
dict = Dict(to_symbolic(k) => to_symbolic(v) for (k, v) in pairs)
130125
expr -> to_mtk(SymbolicUtils.simplify(SymbolicUtils.substitute(expr, dict)))
131126
end
132127

133-
_substitute(expr, ks, vs) = substituter(ks, vs)(expr)
134-
135128
@deprecate substitute_expr!(expr,s) substitute(expr,s)

test/reactionsystem.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ jumps[20] = VariableRateJump((u,p,t) -> p[20]*t*u[1]*binomial(u[2],2)*u[3], inte
117117
statetoid = Dict(convert(Variable,state) => i for (i,state) in enumerate(states(js)))
118118
parammap = map((x,y)->Pair(x(),y),parameters(js),pars)
119119
for i = 1:14
120-
maj = MT.assemble_maj(js, js.eqs[i], statetoid, ModelingToolkit.substituter(first.(parammap), last.(parammap)),eltype(pars))
120+
maj = MT.assemble_maj(js, js.eqs[i], statetoid, ModelingToolkit.substituter(parammap),eltype(pars))
121121
@test abs(jumps[i].scaled_rates - maj.scaled_rates) < 100*eps()
122122
@test jumps[i].reactant_stoch == maj.reactant_stoch
123123
@test jumps[i].net_stoch == maj.net_stoch

test/simplify.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,6 @@ d3 = Differential(x)(d2)
2929

3030
@test simplified_expr(expand_derivatives(d3)) == :(0)
3131
@test simplified_expr(simplify(x^0)) == :(1)
32+
33+
@test ModelingToolkit.substitute(2x + y == 1, Dict(x => 0.0, y => 0.0)).value === false
34+
@test ModelingToolkit.substitute(2x + y == 1, Dict(x => 0.0, y => 1.0)).value === true

0 commit comments

Comments
 (0)