Skip to content

Commit 2827ac0

Browse files
fix: fix subexpressions_not_involving_vars! handling of array hack
1 parent 24a34b7 commit 2827ac0

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

src/utils.jl

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,6 +1117,23 @@ function subexpressions_not_involving_vars!(expr, vars, state::Dict{Any, Any})
11171117
symtype(expr) <: Union{Real, AbstractArray{<:Real}} || return expr
11181118
Symbolics.shape(expr) == Symbolics.Unknown() && return expr
11191119
haskey(state, expr) && return state[expr]
1120+
1121+
op = operation(expr)
1122+
args = arguments(expr)
1123+
if op == StructuralTransformations.change_origin
1124+
newargs = map(args) do arg
1125+
if symbolic_type(arg) == NotSymbolic()
1126+
if is_array_of_symbolics(arg)
1127+
return map(arg) do _arg
1128+
subexpressions_not_involving_vars!(_arg, vars, state)
1129+
end
1130+
end
1131+
return arg
1132+
end
1133+
subexpressions_not_involving_vars!(arg, vars, state)
1134+
end
1135+
return maketerm(typeof(expr), op, newargs, metadata(expr))
1136+
end
11201137
vs = ModelingToolkit.vars(expr)
11211138
intersect!(vs, vars)
11221139
if isempty(vs)
@@ -1126,8 +1143,6 @@ function subexpressions_not_involving_vars!(expr, vars, state::Dict{Any, Any})
11261143
state[expr] = var
11271144
return var
11281145
end
1129-
op = operation(expr)
1130-
args = arguments(expr)
11311146
if (op == (+) || op == (*)) && symbolic_type(expr) !== ArraySymbolic()
11321147
indep_args = []
11331148
dep_args = []
@@ -1146,7 +1161,14 @@ function subexpressions_not_involving_vars!(expr, vars, state::Dict{Any, Any})
11461161
return op(indep_term, dep_term)
11471162
end
11481163
newargs = map(args) do arg
1149-
symbolic_type(arg) != NotSymbolic() || is_array_of_symbolics(arg) || return arg
1164+
if symbolic_type(arg) == NotSymbolic()
1165+
if is_array_of_symbolics(arg)
1166+
return map(arg) do _arg
1167+
subexpressions_not_involving_vars!(_arg, vars, state)
1168+
end
1169+
end
1170+
return arg
1171+
end
11501172
subexpressions_not_involving_vars!(arg, vars, state)
11511173
end
11521174
return maketerm(typeof(expr), op, newargs, metadata(expr))

0 commit comments

Comments
 (0)