@@ -158,18 +158,33 @@ function invalid_variables(sys, expr)
158158end
159159
160160function unassignable_variables (sys, expr)
161- assignable_syms = reduce (
162- vcat, Symbolics. scalarize .(
163- vcat (
164- unknowns (sys), parameters (sys; initial_parameters = true )
165- )
166- );
167- init = []
168- )
169- written = reduce (vcat, Symbolics. scalarize .(collect (SU. search_variables (expr))); init = [])
170- return filter (
171- x -> ! any (isequal (x), assignable_syms), written
172- )
161+ assignable_syms = Set {SymbolicT} ()
162+ union! (assignable_syms, unknowns (sys))
163+ for p in parameters (sys; initial_parameters = true )
164+ if Symbolics. isarraysymbolic (p)
165+ for idx in SU. stable_eachindex (p)
166+ push! (assignable_syms, p[idx])
167+ end
168+ else
169+ push! (assignable_syms, p)
170+ end
171+ end
172+ vars = Set {SymbolicT} ()
173+ SU. search_variables! (vars, expr)
174+ unassignable = SymbolicT[]
175+ for var in vars
176+ if Symbolics. isarraysymbolic (var)
177+ for idx in SU. stable_eachindex (var)
178+ sym = var[idx]
179+ sym in assignable_syms && continue
180+ push! (unassignable, sym)
181+ end
182+ else
183+ var in assignable_syms && continue
184+ push! (unassignable, var)
185+ end
186+ end
187+ return unassignable
173188end
174189
175190@generated function _generated_writeback (
0 commit comments