Skip to content

Commit 1febdae

Browse files
fix: fix handling of scalarized array symbolics in subexpressions_not_involving_vars!
1 parent 562b77a commit 1febdae

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/utils.jl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,20 +1116,25 @@ function subexpressions_not_involving_vars!(expr, vars, state::Dict{Any, Any})
11161116
end
11171117
return expr
11181118
end
1119+
any(isequal(expr), vars) && return expr
11191120
iscall(expr) || return expr
11201121
Symbolics.shape(expr) == Symbolics.Unknown() && return expr
11211122
haskey(state, expr) && return state[expr]
1122-
vs = ModelingToolkit.vars(expr)
1123-
intersect!(vs, vars)
1124-
if isempty(vs)
1123+
op = operation(expr)
1124+
args = arguments(expr)
1125+
# if this is a `getindex` and the getindex-ed value is a `Sym`
1126+
# or it is not a called parameter
1127+
# OR
1128+
# none of `vars` are involved in `expr`
1129+
if op === getindex && (issym(args[1]) || !iscalledparameter(args[1])) ||
1130+
(vs = ModelingToolkit.vars(expr); intersect!(vs, vars); isempty(vs))
11251131
sym = gensym(:subexpr)
11261132
stype = symtype(expr)
11271133
var = similar_variable(expr, sym)
11281134
state[expr] = var
11291135
return var
11301136
end
1131-
op = operation(expr)
1132-
args = arguments(expr)
1137+
11331138
if (op == (+) || op == (*)) && symbolic_type(expr) !== ArraySymbolic()
11341139
indep_args = []
11351140
dep_args = []

0 commit comments

Comments
 (0)