Skip to content

Commit 160bd70

Browse files
committed
A substituter
1 parent b21418a commit 160bd70

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

src/systems/jumps/jumpsystem.jl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@ 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) where {U,V,W,V2,W2}
94+
statetoid, subber) where {U,V,W,V2,W2}
9595
sr = maj.scaled_rates
9696
if sr isa Operation
97-
pval = simplify(substitute(sr,parammap)).value
97+
pval = subber(sr).value
9898
elseif sr isa Variable
99-
pval = Dict(parammap)[sr()]
99+
pval = subber(sr()).value
100100
else
101101
pval = maj.scaled_rates
102102
end
@@ -167,7 +167,8 @@ function DiffEqJump.JumpProblem(js::JumpSystem, prob, aggregator; kwargs...)
167167
parammap = map((x,y)->Pair(x(),y), parameters(js), prob.p)
168168
eqs = equations(js)
169169

170-
majs = MassActionJump[assemble_maj(js, j, statetoid, parammap) for j in eqs.x[1]]
170+
subber = substituter(first.(parammap), last.(parammap))
171+
majs = MassActionJump[assemble_maj(js, j, statetoid, subber) for j in eqs.x[1]]
171172
crjs = ConstantRateJump[assemble_crj(js, j, statetoid) for j in eqs.x[2]]
172173
vrjs = VariableRateJump[assemble_vrj(js, j, statetoid) for j in eqs.x[3]]
173174
((prob isa DiscreteProblem) && !isempty(vrjs)) && error("Use continuous problems such as an ODEProblem or a SDEProblem with VariableRateJumps")
@@ -210,4 +211,4 @@ function modified_states!(mstates, jump::MassActionJump, sts)
210211
for (state,stoich) in jump.net_stoch
211212
(state.op in sts) && push!(mstates, state)
212213
end
213-
end
214+
end

src/utils.jl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,16 @@ substitute(expr::Operation, s::Pair) = _substitute(expr, [s[1]], [s[2]])
121121
substitute(expr::Operation, dict::Dict) = _substitute(expr, keys(dict), values(dict))
122122
substitute(expr::Operation, s::Vector) = _substitute(expr, first.(s), last.(s))
123123

124-
function _substitute(expr, ks, vs)
125-
_substitute(expr, Dict(map(Pair, map(to_symbolic, ks), map(to_symbolic, vs))))
124+
function _substitute(ks, vs)
125+
expr -> _substitute(expr, Dict(map(Pair, map(to_symbolic, ks), map(to_symbolic, vs))))
126126
end
127127

128-
function _substitute(expr, dict::Dict)
129-
simplify(SymbolicUtils.substitute(expr, dict))
128+
function substituter(ks, vs)
129+
dict = Dict(map(Pair, map(to_symbolic, ks), map(to_symbolic, vs)))
130+
expr -> to_mtk(SymbolicUtils.simplify(SymbolicUtils.substitute(expr, dict)))
130131
end
131132

132-
@deprecate substitute_expr!(expr,s) substitute(expr,s)
133+
_substitute(expr, ks, vs) = substituter(ks, vs)(expr)
134+
135+
@deprecate substitute_expr!(expr,s) substitute(expr,s)
136+

0 commit comments

Comments
 (0)