@@ -5,6 +5,8 @@ using ModelingToolkit, Test
55using ModelingToolkit: t_nounits as t, D_nounits as D
66import ModelingToolkit: get_ps, get_unknowns, get_observed, get_eqs, get_continuous_events,
77 get_discrete_events, namespace_equations
8+ import ModelingToolkit: parameters_toplevel, unknowns_toplevel, equations_toplevel,
9+ continuous_events_toplevel, discrete_events_toplevel
810
911# Creates helper functions.
1012function all_sets_equal (args... )
2325# ## Basic Tests ###
2426
2527# Checks `toplevel = false` argument for various accessors (currently only for `ODESystem`s).
26- # Compares to `toplevel = true ` version, and `get_` functions.
28+ # Compares to `` version, and `get_` functions.
2729# Checks accessors for parameters, unknowns, equations, observables, and events.
30+ # Some tests looks funny (caused by the formatter).
2831let
2932 # Prepares model components.
3033 @parameters p_top p_mid1 p_mid2 p_bot d
7073 sys_mid1_ss = structural_simplify (sys_mid1)
7174 sys_top_ss = structural_simplify (sys_top)
7275
73- # Checks `parameters` for `toplevel = false` .
76+ # Checks `parameters1 .
7477 @test all_sets_equal (parameters .([sys_bot, sys_bot_comp, sys_bot_ss])... , [d, p_bot])
7578 @test all_sets_equal (parameters .([sys_mid1, sys_mid1_comp, sys_mid1_ss])... ,
7679 [d, p_mid1, sys_bot. d, sys_bot. p_bot])
8083 [d, p_top, sys_mid1. d, sys_mid1. p_mid1, sys_mid1. sys_bot. d,
8184 sys_mid1. sys_bot. p_bot, sys_mid2. d, sys_mid2. p_mid2])
8285
83- # Checks `parameters`` for `toplevel = true `. Compares to known parameters and also checks that
86+ # Checks `parameters_toplevel `. Compares to known parameters and also checks that
8487 # these are subset of what `get_ps` returns.
8588 @test all_sets_equal (
86- parameters .([sys_bot, sys_bot_comp, sys_bot_ss]; toplevel = true )... , [d, p_bot])
89+ parameters_toplevel .([sys_bot, sys_bot_comp, sys_bot_ss])... , [d, p_bot])
8790 @test_broken all_sets_equal (
88- parameters .([sys_mid1, sys_mid1_comp, sys_mid1_ss]; toplevel = true )... ,
91+ parameters_toplevel .([sys_mid1, sys_mid1_comp, sys_mid1_ss])... ,
8992 [d, p_mid1])
9093 @test all_sets_equal (
91- parameters .([sys_mid2, sys_mid2_comp, sys_mid2_ss]; toplevel = true )... ,
94+ parameters_toplevel .([sys_mid2, sys_mid2_comp, sys_mid2_ss])... ,
9295 [d, p_mid2])
9396 @test_broken all_sets_equal (
94- parameters .([sys_top, sys_top_comp, sys_top_ss]; toplevel = true )... , [d, p_top])
95- @test all (sym_issubset (parameters (sys; toplevel = true ), get_ps (sys))
97+ parameters_toplevel .([sys_top, sys_top_comp, sys_top_ss])... , [d, p_top])
98+ @test all (sym_issubset (parameters_toplevel (sys), get_ps (sys))
9699 for sys in [sys_bot, sys_mid2, sys_mid1, sys_top])
97100
98- # Checks `unknowns` for `toplevel = false` . O(t) is eliminated by `structural_simplify` and
101+ # Checks `unknowns`. O(t) is eliminated by `structural_simplify` and
99102 # must be considered separately.
100103 @test all_sets_equal (unknowns .([sys_bot, sys_bot_comp])... , [O, Y, X_bot])
101104 @test all_sets_equal (unknowns .([sys_bot_ss])... , [Y, X_bot])
@@ -112,20 +115,20 @@ let
112115 [Y, X_top, sys_mid1. Y, sys_mid1. X_mid1, sys_mid1. sys_bot. Y,
113116 sys_mid1. sys_bot. X_bot, sys_mid2. Y, sys_mid2. X_mid2])
114117
115- # Checks `unknowns` for `toplevel = true `. Note that O is not eliminated here (as we go back
116- # to original parent system). Also checks that outputs are subsets of what `get_ps ` returns. .
118+ # Checks `unknowns_toplevel `. Note that O is not eliminated here (as we go back
119+ # to original parent system). Also checks that outputs are subsets of what `get_unknowns ` returns.
117120 @test all_sets_equal (
118- unknowns .([sys_bot, sys_bot_comp, sys_bot_ss]; toplevel = true )... , [O, Y, X_bot])
121+ unknowns_toplevel .([sys_bot, sys_bot_comp, sys_bot_ss])... , [O, Y, X_bot])
119122 @test all_sets_equal (
120- unknowns .([sys_mid1, sys_mid1_comp]; toplevel = true )... , [O, Y, X_mid1])
123+ unknowns_toplevel .([sys_mid1, sys_mid1_comp])... , [O, Y, X_mid1])
121124 @test all_sets_equal (
122- unknowns .([sys_mid2, sys_mid2_comp]; toplevel = true )... , [O, Y, X_mid2])
125+ unknowns_toplevel .([sys_mid2, sys_mid2_comp])... , [O, Y, X_mid2])
123126 @test all_sets_equal (
124- unknowns .([sys_top, sys_top_comp]; toplevel = true )... , [O, Y, X_top])
125- @test all (sym_issubset (unknowns (sys; toplevel = true ), get_unknowns (sys))
127+ unknowns_toplevel .([sys_top, sys_top_comp])... , [O, Y, X_top])
128+ @test all (sym_issubset (unknowns_toplevel (sys), get_unknowns (sys))
126129 for sys in [sys_bot, sys_mid1, sys_mid2, sys_top])
127130
128- # Checks `equations` for `toplevel = false` . Do not check ss equations as these might potentially
131+ # Checks `equations`. Do not check ss equations as these might potentially
129132 # be structurally simplified to new equations.
130133 @test all_sets_equal (equations .([sys_bot, sys_bot_comp])... , eqs_bot)
131134 @test all_sets_equal (
@@ -134,65 +137,35 @@ let
134137 @test all_sets_equal (equations .([sys_top, sys_top_comp])... ,
135138 [eqs_top; namespace_equations (sys_mid1); namespace_equations (sys_mid2)])
136139
137- # Checks `equations` for `toplevel = true` . Do not check ss equations directly as these
138- # might potentially be structurally simplified to new equations.
139- @test all_sets_equal (equations .([sys_bot, sys_bot_comp]; toplevel = true )... , eqs_bot)
140+ # Checks `equations_toplevel` . Do not check ss equations directly as these
141+ # might potentially be structurally simplified to new equations. Do not check
142+ @test all_sets_equal (equations_toplevel .([sys_bot] )... , eqs_bot)
140143 @test all_sets_equal (
141- equations .([sys_mid1, sys_mid1_comp]; toplevel = true )... , eqs_mid1)
144+ equations_toplevel .([sys_mid1] )... , eqs_mid1)
142145 @test all_sets_equal (
143- equations .([sys_mid2, sys_mid2_comp]; toplevel = true )... , eqs_mid2)
144- @test all_sets_equal (equations .([sys_top, sys_top_comp]; toplevel = true )... , eqs_top)
145- @test all (sym_issubset (equations (sys; toplevel = true ), get_eqs (sys))
146+ equations_toplevel .([sys_mid2] )... , eqs_mid2)
147+ @test all_sets_equal (equations_toplevel .([sys_top] )... , eqs_top)
148+ @test all (sym_issubset (equations_toplevel (sys), get_eqs (sys))
146149 for sys in [sys_bot, sys_mid2, sys_mid1, sys_top])
147150
148- # Checks `observed for `toplevel = false`. For non-ss systems, there are no observables.
149- @test all_sets_equal (
150- observed .([sys_bot, sys_bot_comp, sys_mid1, sys_mid1_comp,
151- sys_mid2, sys_mid2_comp, sys_top, sys_top_comp])... ,
152- [])
153- @test issetequal (observed (sys_bot_ss), eqs_bot[3 : 3 ])
154- @test issetequal (
155- observed (sys_mid1_ss), [eqs_mid1[3 : 3 ]; namespace_equations (sys_bot)[3 : 3 ]])
156- @test issetequal (observed (sys_mid2_ss), eqs_mid2[3 : 3 ])
157- @test issetequal (observed (sys_top_ss),
158- [eqs_top[3 : 3 ]; namespace_equations (sys_mid1)[3 : 3 : 6 ];
159- namespace_equations (sys_mid2)[3 : 3 ]])
160-
161- # Checks `observed` for `toplevel = true`. Again, for non-ss systems, there are no observables.
162- # Also checks that `toplevel = true` yields subset of `get_observed`.
163- @test all_sets_equal (
164- observed .(
165- [sys_bot, sys_bot_comp, sys_mid1, sys_mid1_comp,
166- sys_mid2, sys_mid2_comp, sys_top, sys_top_comp];
167- toplevel = true )... ,
168- [])
169- @test_broken issetequal (observed (sys_bot_ss; toplevel = true ), eqs_bot[3 : 3 ])
170- @test_broken issetequal (observed (sys_mid1_ss; toplevel = true ), eqs_mid1[3 : 3 ])
171- @test_broken issetequal (observed (sys_mid2_ss; toplevel = true ), eqs_mid2[3 : 3 ])
172- @test_broken issetequal (observed (sys_top_ss; toplevel = true ), eqs_top[3 : 3 ])
173- @test all (sym_issubset (observed (sys; toplevel = true ), get_observed (sys))
174- for sys in [sys_bot, sys_mid2, sys_mid1, sys_top])
175-
176- # Checks `continuous_events` and `discrete_events` for `toplevel = true` (more straightforward
177- # as I stored the same singe event in all systems). Don't check for `toplevel = false` as
151+ # Checks `continuous_events_toplevel` and `discrete_events_toplevel` (straightforward
152+ # as I stored the same singe event in all systems). Don't check for non-toplevel cases as
178153 # technically not needed for these tests and name spacing the events is a mess.
179154 mtk_cev = ModelingToolkit. SymbolicContinuousCallback .(cevs)[1 ]
180155 mtk_dev = ModelingToolkit. SymbolicDiscreteCallback .(devs)[1 ]
181156 @test all_sets_equal (
182- continuous_events .(
157+ continuous_events_toplevel .(
183158 [sys_bot, sys_bot_comp, sys_bot_ss, sys_mid1, sys_mid1_comp, sys_mid1_ss,
184- sys_mid2, sys_mid2_comp, sys_mid2_ss, sys_top, sys_top_comp, sys_top_ss];
185- toplevel = true )... ,
159+ sys_mid2, sys_mid2_comp, sys_mid2_ss, sys_top, sys_top_comp, sys_top_ss])... ,
186160 [mtk_cev])
187161 @test all_sets_equal (
188- discrete_events .(
162+ discrete_events_toplevel .(
189163 [sys_bot, sys_bot_comp, sys_bot_ss, sys_mid1, sys_mid1_comp, sys_mid1_ss,
190- sys_mid2, sys_mid2_comp, sys_mid2_ss, sys_top, sys_top_comp, sys_top_ss];
191- toplevel = true )... ,
164+ sys_mid2, sys_mid2_comp, sys_mid2_ss, sys_top, sys_top_comp, sys_top_ss])... ,
192165 [mtk_dev])
193166 @test all (sym_issubset (
194- continuous_events (sys; toplevel = true ), get_continuous_events (sys))
167+ continuous_events_toplevel (sys ), get_continuous_events (sys))
195168 for sys in [sys_bot, sys_mid2, sys_mid1, sys_top])
196- @test all (sym_issubset (discrete_events (sys; toplevel = true ), get_discrete_events (sys))
169+ @test all (sym_issubset (discrete_events_toplevel (sys), get_discrete_events (sys))
197170 for sys in [sys_bot, sys_mid2, sys_mid1, sys_top])
198171end
0 commit comments