@@ -1120,3 +1120,42 @@ tearing_state = TearingState(expand_connections(sys))
11201120ts_vars = tearing_state. fullvars
11211121orig_vars = unknowns (sys)
11221122@test isempty (setdiff (ts_vars, orig_vars))
1123+
1124+ # Guesses in hierarchical systems
1125+ @variables x (t) y (t)
1126+ @named sys = ODESystem (Equation[], t, [x], []; guesses = [x => 1.0 ])
1127+ @named outer = ODESystem (
1128+ [D (y) ~ sys. x + t, 0 ~ t + y - sys. x * y], t, [y], []; systems = [sys])
1129+ @test ModelingToolkit. guesses (outer)[sys. x] == 1.0
1130+ outer = structural_simplify (outer)
1131+ @test ModelingToolkit. get_guesses (outer)[sys. x] == 1.0
1132+ prob = ODEProblem (outer, [outer. y => 2.0 ], (0.0 , 10.0 ))
1133+ int = init (prob, Rodas4 ())
1134+ @test int[outer. sys. x] == 1.0
1135+
1136+ # Ensure indexes of array symbolics are cached appropriately
1137+ @variables x (t)[1 : 2 ]
1138+ @named sys = ODESystem (Equation[], t, [x], [])
1139+ sys1 = complete (sys)
1140+ @named sys = ODESystem (Equation[], t, [x... ], [])
1141+ sys2 = complete (sys)
1142+ for sys in [sys1, sys2]
1143+ for (sym, idx) in [(x, 1 : 2 ), (x[1 ], 1 ), (x[2 ], 2 )]
1144+ @test is_variable (sys, sym)
1145+ @test variable_index (sys, sym) == idx
1146+ end
1147+ end
1148+
1149+ @variables x (t)[1 : 2 , 1 : 2 ]
1150+ @named sys = ODESystem (Equation[], t, [x], [])
1151+ sys1 = complete (sys)
1152+ @named sys = ODESystem (Equation[], t, [x... ], [])
1153+ sys2 = complete (sys)
1154+ for sys in [sys1, sys2]
1155+ @test is_variable (sys, x)
1156+ @test variable_index (sys, x) == [1 3 ; 2 4 ]
1157+ for i in eachindex (x)
1158+ @test is_variable (sys, x[i])
1159+ @test variable_index (sys, x[i]) == variable_index (sys, x)[i]
1160+ end
1161+ end
0 commit comments