@@ -192,7 +192,9 @@ function SymbolicIndexingInterface.is_variable(sys::AbstractSystem, sym)
192
192
ic = get_index_cache (sys)
193
193
h = getsymbolhash (sym)
194
194
return haskey (ic. unknown_idx, h) ||
195
- haskey (ic. unknown_idx, getsymbolhash (default_toterm (sym)))
195
+ haskey (ic. unknown_idx, getsymbolhash (default_toterm (sym))) ||
196
+ (istree (sym) && operation (sym) === getindex &&
197
+ is_variable (sys, first (arguments (sym))))
196
198
else
197
199
return any (isequal (sym), variable_symbols (sys)) ||
198
200
hasname (sym) && is_variable (sys, getname (sym))
@@ -213,16 +215,15 @@ function SymbolicIndexingInterface.variable_index(sys::AbstractSystem, sym)
213
215
if has_index_cache (sys) && get_index_cache (sys) != = nothing
214
216
ic = get_index_cache (sys)
215
217
h = getsymbolhash (sym)
216
- return if haskey (ic. unknown_idx, h)
217
- ic. unknown_idx[h]
218
- else
219
- h = getsymbolhash (default_toterm (sym))
220
- if haskey (ic. unknown_idx, h)
221
- ic. unknown_idx[h]
222
- else
223
- nothing
224
- end
225
- end
218
+ haskey (ic. unknown_idx, h) && return ic. unknown_idx[h]
219
+
220
+ h = getsymbolhash (default_toterm (sym))
221
+ haskey (ic. unknown_idx, h) && return ic. unknown_idx[h]
222
+ sym = unwrap (sym)
223
+ istree (sym) && operation (sym) === getindex || return nothing
224
+ idx = variable_index (sys, first (arguments (sym)))
225
+ idx === nothing && return nothing
226
+ return idx[arguments (sym)[(begin + 1 ): end ]. .. ]
226
227
end
227
228
idx = findfirst (isequal (sym), variable_symbols (sys))
228
229
if idx === nothing && hasname (sym)
0 commit comments