@@ -187,11 +187,14 @@ function SymbolicIndexingInterface.is_variable(sys::AbstractSystem, sym)
187187 if unwrap (sym) isa Int # [x, 1] coerces 1 to a Num
188188 return unwrap (sym) in 1 : length (unknown_states (sys))
189189 end
190- return any (isequal (sym), unknown_states (sys)) || hasname (sym) && is_variable (sys, getname (sym))
190+ return any (isequal (sym), unknown_states (sys)) ||
191+ hasname (sym) && is_variable (sys, getname (sym))
191192end
192193
193194function SymbolicIndexingInterface. is_variable (sys:: AbstractSystem , sym:: Symbol )
194- return any (isequal (sym), getname .(unknown_states (sys))) || count (' ₊' , string (sym)) == 1 && count (isequal (sym), Symbol .(sys. name, :₊ , getname .(unknown_states (sys)))) == 1
195+ return any (isequal (sym), getname .(unknown_states (sys))) ||
196+ count (' ₊' , string (sym)) == 1 &&
197+ count (isequal (sym), Symbol .(sys. name, :₊ , getname .(unknown_states (sys)))) == 1
195198end
196199
197200function SymbolicIndexingInterface. variable_index (sys:: AbstractSystem , sym)
@@ -224,12 +227,14 @@ function SymbolicIndexingInterface.is_parameter(sys::AbstractSystem, sym)
224227 return unwrap (sym) in 1 : length (parameters (sys))
225228 end
226229
227- return any (isequal (sym), parameters (sys)) || hasname (sym) && is_parameter (sys, getname (sym))
230+ return any (isequal (sym), parameters (sys)) ||
231+ hasname (sym) && is_parameter (sys, getname (sym))
228232end
229233
230234function SymbolicIndexingInterface. is_parameter (sys:: AbstractSystem , sym:: Symbol )
231235 return any (isequal (sym), getname .(parameters (sys))) ||
232- count (' ₊' , string (sym)) == 1 && count (isequal (sym), Symbol .(sys. name, :₊ , getname .(parameters (sys)))) == 1
236+ count (' ₊' , string (sym)) == 1 &&
237+ count (isequal (sym), Symbol .(sys. name, :₊ , getname .(parameters (sys)))) == 1
233238end
234239
235240function SymbolicIndexingInterface. parameter_index (sys:: AbstractSystem , sym)
@@ -270,7 +275,8 @@ function SymbolicIndexingInterface.independent_variable_symbols(sys::AbstractSys
270275end
271276
272277function SymbolicIndexingInterface. is_observed (sys:: AbstractSystem , sym)
273- return ! is_variable (sys, sym) && ! is_parameter (sys, sym) && ! is_independent_variable (sys, sym) && symbolic_type (sym) != NotSymbolic ()
278+ return ! is_variable (sys, sym) && ! is_parameter (sys, sym) &&
279+ ! is_independent_variable (sys, sym) && symbolic_type (sym) != NotSymbolic ()
274280end
275281
276282SymbolicIndexingInterface. is_time_dependent (:: AbstractTimeDependentSystem ) = true
@@ -621,13 +627,25 @@ function namespace_expr(O, sys, n = nameof(sys); ivs = independent_variables(sys
621627 O
622628 end
623629end
624-
630+ _nonum ( @nospecialize x) = x isa Num ? x . val : x
625631function states (sys:: AbstractSystem )
626632 sts = get_states (sys)
627633 systems = get_systems (sys)
628- unique (isempty (systems) ?
629- sts :
630- [sts; reduce (vcat, namespace_variables .(systems))])
634+ nonunique_states = if isempty (systems)
635+ sts
636+ else
637+ system_states = reduce (vcat, namespace_variables .(systems))
638+ isempty (sts) ? system_states : [sts; system_states]
639+ end
640+ isempty (nonunique_states) && return nonunique_states
641+ # `Vector{Any}` is incompatible with the `SymbolicIndexingInterface`, which uses
642+ # `elsymtype = symbolic_type(eltype(_arg))`
643+ # which inappropriately returns `NotSymbolic()`
644+ if nonunique_states isa Vector{Any}
645+ nonunique_states = _nonum .(nonunique_states)
646+ end
647+ @assert typeof (nonunique_states) != = Vector{Any}
648+ unique (nonunique_states)
631649end
632650
633651function parameters (sys:: AbstractSystem )
0 commit comments