diff --git a/lib/ModelingToolkitBase/src/utils.jl b/lib/ModelingToolkitBase/src/utils.jl index bcb4167dea..b4e8e9d93b 100644 --- a/lib/ModelingToolkitBase/src/utils.jl +++ b/lib/ModelingToolkitBase/src/utils.jl @@ -1243,9 +1243,10 @@ function observed_equations_used_by( obsidxs = BitSet() for sym in involved_vars sym in available_vars && continue - arrsym = iscall(sym) && operation(sym) === getindex ? arguments(sym)[1] : nothing + arrsym = split_indexed_var(sym)[1] idx = @something( get(obsvar_to_idx, sym, nothing), + get(obsvar_to_idx, arrsym, nothing), Some(nothing) ) idx === nothing && continue diff --git a/lib/ModelingToolkitBase/test/code_generation.jl b/lib/ModelingToolkitBase/test/code_generation.jl index 715dc4f32e..202ed8653b 100644 --- a/lib/ModelingToolkitBase/test/code_generation.jl +++ b/lib/ModelingToolkitBase/test/code_generation.jl @@ -152,3 +152,9 @@ end ps = MTKParameters(sys, nothing) @test fn([1.0], ps, 1.5) ≈ 4.0 end + +@testset "Non-scalarized array observed without individual elements being unknowns/observables" begin + @variables x(t)[1:3] y(t) + @mtkcomplete sys = System([D(y) ~ 2y + sum(x)], t, [y], []; observed = [x ~ [y, y + 1, y + 2]]) + @test ModelingToolkitBase.observed_equations_used_by(sys, [x[1]]) == [1] +end