@@ -10,6 +10,7 @@ import ..SymbolicUtils
1010import .. SymbolicUtils. Rewriters
1111import SymbolicUtils: @matchable , BasicSymbolic, Sym, Term, iscall, operation, arguments, issym,
1212 symtype, sorted_arguments, metadata, isterm, term, maketerm
13+ import SymbolicIndexingInterface: symbolic_type, NotSymbolic
1314
1415# #== state management ==##
1516
@@ -169,13 +170,24 @@ function substitute_name(O, st)
169170 end
170171end
171172
173+ function _is_array_of_symbolics (O)
174+ # O is an array, not a symbolic array, and either has a non-symbolic eltype or contains elements that are
175+ # symbolic or arrays of symbolics
176+ return O isa AbstractArray && symbolic_type (O) == NotSymbolic () &&
177+ (symbolic_type (eltype (O)) != NotSymbolic () ||
178+ any (x -> symbolic_type (x) != NotSymbolic () || _is_array_of_symbolics (x), O))
179+ end
180+
172181function toexpr (O, st)
173182 if issym (O)
174183 O = substitute_name (O, st)
175184 return issym (O) ? nameof (O) : toexpr (O, st)
176185 end
177186 O = substitute_name (O, st)
178187
188+ if _is_array_of_symbolics (O)
189+ return toexpr (MakeArray (O, typeof (O)), st)
190+ end
179191 ! iscall (O) && return O
180192 op = operation (O)
181193 expr′ = function_to_expr (op, O, st)
0 commit comments