From 40b2c8deec90b99514a802981ddf2d14081af5da Mon Sep 17 00:00:00 2001 From: Benjamin Chung Date: Fri, 11 Oct 2024 16:35:29 -0400 Subject: [PATCH 1/2] A first pass at adding vector and Arr support to substitute --- src/substitute.jl | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/substitute.jl b/src/substitute.jl index 828f88b1..81c9108d 100644 --- a/src/substitute.jl +++ b/src/substitute.jl @@ -15,14 +15,13 @@ julia> substitute(1+sqrt(y), Dict(y => 2), fold=false) """ function substitute(expr, dict; fold=true) haskey(dict, expr) && return dict[expr] - if iscall(expr) op = substitute(operation(expr), dict; fold=fold) if fold - canfold = !(op isa Symbolic) + canfold = !(op isa SymbolicUtils.Symbolic) args = map(arguments(expr)) do x x′ = substitute(x, dict; fold=fold) - canfold = canfold && !(x′ isa Symbolic) + canfold = canfold && !(x′ isa SymbolicUtils.Symbolic) x′ end canfold && return op(args...) @@ -31,10 +30,18 @@ function substitute(expr, dict; fold=true) args = map(x->substitute(x, dict, fold=fold), arguments(expr)) end - maketerm(typeof(expr), + Symbolics.maketerm(typeof(expr), op, args, - metadata(expr)) + Symbolics.metadata(expr)) + elseif expr isa Symbolics.Arr + return substitute(expr.value, dict; fold=fold) + elseif expr isa AbstractArray + res = [] + for e in expr + push!(res, substitute(e, dict; fold=fold)) + end + return res else expr end From d755275b51e2c326d7bbede9decb401987d5ef1e Mon Sep 17 00:00:00 2001 From: Benjamin Chung Date: Fri, 11 Oct 2024 16:36:41 -0400 Subject: [PATCH 2/2] Remove FQNs --- src/substitute.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/substitute.jl b/src/substitute.jl index 81c9108d..d054384a 100644 --- a/src/substitute.jl +++ b/src/substitute.jl @@ -18,10 +18,10 @@ function substitute(expr, dict; fold=true) if iscall(expr) op = substitute(operation(expr), dict; fold=fold) if fold - canfold = !(op isa SymbolicUtils.Symbolic) + canfold = !(op isa Symbolic) args = map(arguments(expr)) do x x′ = substitute(x, dict; fold=fold) - canfold = canfold && !(x′ isa SymbolicUtils.Symbolic) + canfold = canfold && !(x′ isa Symbolic) x′ end canfold && return op(args...) @@ -30,11 +30,11 @@ function substitute(expr, dict; fold=true) args = map(x->substitute(x, dict, fold=fold), arguments(expr)) end - Symbolics.maketerm(typeof(expr), + maketerm(typeof(expr), op, args, - Symbolics.metadata(expr)) - elseif expr isa Symbolics.Arr + metadata(expr)) + elseif expr isa Arr return substitute(expr.value, dict; fold=fold) elseif expr isa AbstractArray res = []