@@ -5,6 +5,8 @@ using ModelingToolkit, Test
5
5
using ModelingToolkit: t_nounits as t, D_nounits as D
6
6
import ModelingToolkit: get_ps, get_unknowns, get_observed, get_eqs, get_continuous_events,
7
7
get_discrete_events, namespace_equations
8
+ import ModelingToolkit: parameters_toplevel, unknowns_toplevel, equations_toplevel,
9
+ continuous_events_toplevel, discrete_events_toplevel
8
10
9
11
# Creates helper functions.
10
12
function all_sets_equal (args... )
23
25
# ## Basic Tests ###
24
26
25
27
# 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.
27
29
# Checks accessors for parameters, unknowns, equations, observables, and events.
30
+ # Some tests looks funny (caused by the formatter).
28
31
let
29
32
# Prepares model components.
30
33
@parameters p_top p_mid1 p_mid2 p_bot d
70
73
sys_mid1_ss = structural_simplify (sys_mid1)
71
74
sys_top_ss = structural_simplify (sys_top)
72
75
73
- # Checks `parameters` for `toplevel = false` .
76
+ # Checks `parameters1 .
74
77
@test all_sets_equal (parameters .([sys_bot, sys_bot_comp, sys_bot_ss])... , [d, p_bot])
75
78
@test all_sets_equal (parameters .([sys_mid1, sys_mid1_comp, sys_mid1_ss])... ,
76
79
[d, p_mid1, sys_bot. d, sys_bot. p_bot])
80
83
[d, p_top, sys_mid1. d, sys_mid1. p_mid1, sys_mid1. sys_bot. d,
81
84
sys_mid1. sys_bot. p_bot, sys_mid2. d, sys_mid2. p_mid2])
82
85
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
84
87
# these are subset of what `get_ps` returns.
85
88
@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])
87
90
@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])... ,
89
92
[d, p_mid1])
90
93
@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])... ,
92
95
[d, p_mid2])
93
96
@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))
96
99
for sys in [sys_bot, sys_mid2, sys_mid1, sys_top])
97
100
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
99
102
# must be considered separately.
100
103
@test all_sets_equal (unknowns .([sys_bot, sys_bot_comp])... , [O, Y, X_bot])
101
104
@test all_sets_equal (unknowns .([sys_bot_ss])... , [Y, X_bot])
@@ -112,20 +115,20 @@ let
112
115
[Y, X_top, sys_mid1. Y, sys_mid1. X_mid1, sys_mid1. sys_bot. Y,
113
116
sys_mid1. sys_bot. X_bot, sys_mid2. Y, sys_mid2. X_mid2])
114
117
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.
117
120
@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])
119
122
@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])
121
124
@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])
123
126
@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))
126
129
for sys in [sys_bot, sys_mid1, sys_mid2, sys_top])
127
130
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
129
132
# be structurally simplified to new equations.
130
133
@test all_sets_equal (equations .([sys_bot, sys_bot_comp])... , eqs_bot)
131
134
@test all_sets_equal (
@@ -134,65 +137,35 @@ let
134
137
@test all_sets_equal (equations .([sys_top, sys_top_comp])... ,
135
138
[eqs_top; namespace_equations (sys_mid1); namespace_equations (sys_mid2)])
136
139
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)
140
143
@test all_sets_equal (
141
- equations .([sys_mid1, sys_mid1_comp]; toplevel = true )... , eqs_mid1)
144
+ equations_toplevel .([sys_mid1] )... , eqs_mid1)
142
145
@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))
146
149
for sys in [sys_bot, sys_mid2, sys_mid1, sys_top])
147
150
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
178
153
# technically not needed for these tests and name spacing the events is a mess.
179
154
mtk_cev = ModelingToolkit. SymbolicContinuousCallback .(cevs)[1 ]
180
155
mtk_dev = ModelingToolkit. SymbolicDiscreteCallback .(devs)[1 ]
181
156
@test all_sets_equal (
182
- continuous_events .(
157
+ continuous_events_toplevel .(
183
158
[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])... ,
186
160
[mtk_cev])
187
161
@test all_sets_equal (
188
- discrete_events .(
162
+ discrete_events_toplevel .(
189
163
[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])... ,
192
165
[mtk_dev])
193
166
@test all (sym_issubset (
194
- continuous_events (sys; toplevel = true ), get_continuous_events (sys))
167
+ continuous_events_toplevel (sys ), get_continuous_events (sys))
195
168
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))
197
170
for sys in [sys_bot, sys_mid2, sys_mid1, sys_top])
198
171
end
0 commit comments