Skip to content

Commit afab565

Browse files
committed
allow more types in substitution, refactor a bit
1 parent 5e2ec07 commit afab565

File tree

1 file changed

+13
-21
lines changed

1 file changed

+13
-21
lines changed

src/utils.jl

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -100,32 +100,24 @@ end
100100

101101
# variable substitution
102102
"""
103-
substitute(expr::Operation, s::Pair{Operation, Operation})
104-
substitute(expr::Operation, s::Dict{Operation, Operation})
105-
substitute(expr::Operation, s::Vector{Pair{Operation, Operation}})
103+
substitute(expr::Operation, s::Pair)
104+
substitute(expr::Operation, s::Dict)
105+
substitute(expr::Operation, s::Vector)
106106
107-
Performs the substitution `Operation => Operation` on the `expr` Operation.
107+
Performs the substitution `Operation => val` on the `expr` Operation.
108108
"""
109-
substitute(expr::Constant, s) = nothing
109+
substitute(expr::Constant, s) = expr
110+
substitute(expr::Operation, s::Pair) = _substitute(expr, [s[1]], [s[2]])
111+
substitute(expr::Operation, dict::Dict) = _substitute(expr, keys(dict), values(dict))
112+
substitute(expr::Operation, s::Vector) = _substitute(expr, first.(s), last.(s))
110113

111-
function substitute(expr::Operation, s::Pair{Operation, Operation})
112-
substitute(expr,Dict(to_symbolic(s[1]) => to_symbolic(s[2])))
114+
function _substitute(expr, ks, vs)
115+
_substitute(expr, Dict(map(Pair, map(to_symbolic, ks), map(to_symbolic, vs))))
113116
end
114117

115-
function substitute(expr::Operation, dict::Dict{Operation,Operation})
116-
substitute(expr,Dict(map(Pair,
117-
map(to_symbolic, keys(dict)),
118-
map(to_symbolic, values(dict)))))
119-
end
120-
121-
function substitute(expr::Operation, s::Vector)
122-
substitute(expr,Dict(map(Pair,
123-
map(to_symbolic, first.(s)),
124-
map(to_symbolic, last.(s)))))
125-
end
126-
127-
function substitute(expr::Operation, s::Dict{<:SymbolicUtils.Term,<:SymbolicUtils.Term})
128-
SymbolicUtils.RuleSet([SymbolicUtils.@rule(~x::(x->haskey(s, x)) => s[~x])])(expr) |> to_mtk
118+
function _substitute(expr, dict::Dict)
119+
sub = SymbolicUtils.RuleSet([SymbolicUtils.@rule(~x::(x->haskey(dict, x)) => dict[~x])])
120+
to_mtk(simplify(sub(expr)))
129121
end
130122

131123
@deprecate substitute_expr!(expr,s) substitute(expr,s)

0 commit comments

Comments
 (0)