Skip to content

Commit 74f33ee

Browse files
committed
reset test file
1 parent 6a1f2f1 commit 74f33ee

File tree

1 file changed

+33
-42
lines changed

1 file changed

+33
-42
lines changed

test/downstream/linearize.jl

Lines changed: 33 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,25 @@ eqs = [u ~ kp * (r - y)
1313
y ~ x]
1414

1515
@named sys = ODESystem(eqs, t)
16-
sys1 = structural_simplify(sys, inputs = [r], outputs = [y])
1716

18-
lsys = linearize(sys1)
19-
lprob = LinearizationProblem(sys1)
17+
lsys, ssys = linearize(sys, [r], [y])
18+
lprob = LinearizationProblem(sys, [r], [y])
2019
lsys2 = solve(lprob)
21-
lsys3 = linearize(sys1; autodiff = AutoFiniteDiff())
20+
lsys3, _ = linearize(sys, [r], [y]; autodiff = AutoFiniteDiff())
2221

2322
@test lsys.A[] == lsys2.A[] == lsys3.A[] == -2
2423
@test lsys.B[] == lsys2.B[] == lsys3.B[] == 1
2524
@test lsys.C[] == lsys2.C[] == lsys3.C[] == 1
2625
@test lsys.D[] == lsys2.D[] == lsys3.D[] == 0
2726

28-
sys2 = structural_simplify(sys, inputs = [r], outputs = [r])
29-
lsys = linearize(sys2)
27+
lsys, ssys = linearize(sys, [r], [r])
3028

3129
@test lsys.A[] == -2
3230
@test lsys.B[] == 1
3331
@test lsys.C[] == 0
3432
@test lsys.D[] == 1
3533

36-
lsys = linearize(sys2, r, r) # Test allow scalars
34+
lsys, ssys = linearize(sys, r, r) # Test allow scalars
3735

3836
@test lsys.A[] == -2
3937
@test lsys.B[] == 1
@@ -88,21 +86,20 @@ connections = [f.y ~ c.r # filtered reference to controller reference
8886
p.y ~ c.y]
8987

9088
@named cl = ODESystem(connections, t, systems = [f, c, p])
91-
cl = structural_simplify(cl, inputs = [f.u], outputs = [p.x])
9289

93-
lsys0 = linearize(cl)
90+
lsys0, ssys = linearize(cl, [f.u], [p.x])
9491
desired_order = [f.x, p.x]
95-
lsys = ModelingToolkit.reorder_unknowns(lsys0, unknowns(cl), desired_order)
96-
lsys1 = linearize(cl, [f.u], [p.x]; autodiff = AutoFiniteDiff())
97-
lsys2 = ModelingToolkit.reorder_unknowns(lsys1, unknowns(cl), desired_order)
92+
lsys = ModelingToolkit.reorder_unknowns(lsys0, unknowns(ssys), desired_order)
93+
lsys1, ssys = linearize(cl, [f.u], [p.x]; autodiff = AutoFiniteDiff())
94+
lsys2 = ModelingToolkit.reorder_unknowns(lsys1, unknowns(ssys), desired_order)
9895

9996
@test lsys.A == lsys2.A == [-2 0; 1 -2]
10097
@test lsys.B == lsys2.B == reshape([1, 0], 2, 1)
10198
@test lsys.C == lsys2.C == [0 1]
10299
@test lsys.D[] == lsys2.D[] == 0
103100

104101
## Symbolic linearization
105-
lsyss = ModelingToolkit.linearize_symbolic(cl)
102+
lsyss, _ = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x])
106103

107104
@test ModelingToolkit.fixpoint_sub(lsyss.A, ModelingToolkit.defaults(cl)) == lsys.A
108105
@test ModelingToolkit.fixpoint_sub(lsyss.B, ModelingToolkit.defaults(cl)) == lsys.B
@@ -117,18 +114,18 @@ Nd = 10
117114
@named pid = LimPID(; k, Ti, Td, Nd)
118115

119116
@unpack reference, measurement, ctr_output = pid
120-
pid_s = structural_simplify(pid, inputs = [reference.u, measurement.u], outputs = [ctr_output.u])
121-
lsys0 = linearize(pid_s; op = Dict(reference.u => 0.0, measurement.u => 0.0))
122-
@unpack int, der = pid_s
117+
lsys0, ssys = linearize(pid, [reference.u, measurement.u], [ctr_output.u];
118+
op = Dict(reference.u => 0.0, measurement.u => 0.0))
119+
@unpack int, der = pid
123120
desired_order = [int.x, der.x]
124-
lsys = ModelingToolkit.reorder_unknowns(lsys0, unknowns(pid_s), desired_order)
121+
lsys = ModelingToolkit.reorder_unknowns(lsys0, unknowns(ssys), desired_order)
125122

126123
@test lsys.A == [0 0; 0 -10]
127124
@test lsys.B == [2 -2; 10 -10]
128125
@test lsys.C == [400 -4000]
129126
@test lsys.D == [4400 -4400]
130127

131-
lsyss = ModelingToolkit.linearize_symbolic(pid_s, [reference.u, measurement.u],
128+
lsyss, _ = ModelingToolkit.linearize_symbolic(pid, [reference.u, measurement.u],
132129
[ctr_output.u])
133130

134131
@test ModelingToolkit.fixpoint_sub(
@@ -141,7 +138,7 @@ lsyss = ModelingToolkit.linearize_symbolic(pid_s, [reference.u, measurement.u],
141138
lsyss.D, ModelingToolkit.defaults_and_guesses(pid)) == lsys.D
142139

143140
# Test with the reverse desired unknown order as well to verify that similarity transform and reoreder_unknowns really works
144-
lsys = ModelingToolkit.reorder_unknowns(lsys, unknowns(pid_s), reverse(desired_order))
141+
lsys = ModelingToolkit.reorder_unknowns(lsys, unknowns(ssys), reverse(desired_order))
145142

146143
@test lsys.A == [-10 0; 0 0]
147144
@test lsys.B == [10 -10; 2 -2]
@@ -150,17 +147,17 @@ lsys = ModelingToolkit.reorder_unknowns(lsys, unknowns(pid_s), reverse(desired_o
150147

151148
## Test that there is a warning when input is misspecified
152149
if VERSION >= v"1.8"
153-
@test_throws "Some specified inputs were not found in system. The following variables were not found " structural_simplify(pid, inputs =
150+
@test_throws "Some specified inputs were not found" linearize(pid,
154151
[
155152
pid.reference.u,
156153
pid.measurement.u
157-
], outputs = [ctr_output.u])
158-
@test_throws "Some specified outputs were not found in system." structural_simplify(pid,
159-
inputs = [
154+
], [ctr_output.u])
155+
@test_throws "Some specified outputs were not found" linearize(pid,
156+
[
160157
reference.u,
161158
measurement.u
162159
],
163-
outputs = [pid.ctr_output.u])
160+
[pid.ctr_output.u])
164161
else # v1.6 does not have the feature to match error message
165162
@test_throws ErrorException linearize(pid,
166163
[
@@ -186,23 +183,22 @@ function saturation(; y_max, y_min = y_max > 0 ? -y_max : -Inf, name)
186183
ODESystem(eqs, t, name = name)
187184
end
188185
@named sat = saturation(; y_max = 1)
189-
sat = structural_simplify(sat, inputs = [u], outputs = [y])
190186
# inside the linear region, the function is identity
191187
@unpack u, y = sat
192-
lsys = linearize(sat, [u], [y])
188+
lsys, ssys = linearize(sat, [u], [y])
193189
@test isempty(lsys.A) # there are no differential variables in this system
194190
@test isempty(lsys.B)
195191
@test isempty(lsys.C)
196192
@test lsys.D[] == 1
197193

198-
@test_skip lsyss = ModelingToolkit.linearize_symbolic(sat, [u], [y]) # Code gen replaces ifelse with if statements causing symbolic evaluation to fail
194+
@test_skip lsyss, _ = ModelingToolkit.linearize_symbolic(sat, [u], [y]) # Code gen replaces ifelse with if statements causing symbolic evaluation to fail
199195
# @test substitute(lsyss.A, ModelingToolkit.defaults(sat)) == lsys.A
200196
# @test substitute(lsyss.B, ModelingToolkit.defaults(sat)) == lsys.B
201197
# @test substitute(lsyss.C, ModelingToolkit.defaults(sat)) == lsys.C
202198
# @test substitute(lsyss.D, ModelingToolkit.defaults(sat)) == lsys.D
203199

204200
# outside the linear region the derivative is 0
205-
lsys = linearize(sat, [u], [y]; op = Dict(u => 2))
201+
lsys, ssys = linearize(sat, [u], [y]; op = Dict(u => 2))
206202
@test isempty(lsys.A) # there are no differential variables in this system
207203
@test isempty(lsys.B)
208204
@test isempty(lsys.C)
@@ -269,8 +265,7 @@ closed_loop = ODESystem(connections, t, systems = [model, pid, filt, sensor, r,
269265
filt.xd => 0.0
270266
])
271267

272-
closed_loop = structural_simplify(closed_loop, inputs = :r, outputs = :y)
273-
linearize(closed_loop; warn_empty_op = false)
268+
@test_nowarn linearize(closed_loop, :r, :y; warn_empty_op = false)
274269

275270
# https://discourse.julialang.org/t/mtk-change-in-linearize/115760/3
276271
@mtkmodel Tank_noi begin
@@ -300,7 +295,6 @@ end
300295

301296
@named tank_noi = Tank_noi()
302297
@unpack md_i, h, m = tank_noi
303-
tank_noi = structural_simplify(tank_noi, inputs = [md_i], outputs = [h])
304298
m_ss = 2.4000000003229878
305299
@test_nowarn linearize(tank_noi, [md_i], [h]; op = Dict(m => m_ss, md_i => 2))
306300

@@ -309,14 +303,13 @@ m_ss = 2.4000000003229878
309303
@parameters p = 1.0
310304
eqs = [D(x) ~ p * u, x ~ y]
311305
@named sys = ODESystem(eqs, t)
312-
sys = structural_simplify(sys, inputs = [u])
313306

314-
matrices1 = linearize(sys, [u], []; op = Dict(x => 2.0))
315-
matrices2 = linearize(sys, [u], []; op = Dict(y => 2.0))
307+
matrices1, _ = linearize(sys, [u], []; op = Dict(x => 2.0))
308+
matrices2, _ = linearize(sys, [u], []; op = Dict(y => 2.0))
316309
@test matrices1 == matrices2
317310

318311
# Ensure parameter values passed as `Dict` are respected
319-
linfun = linearization_function(sys, [u], []; op = Dict(x => 2.0))
312+
linfun, _ = linearization_function(sys, [u], []; op = Dict(x => 2.0))
320313
matrices = linfun([1.0], Dict(p => 3.0), 1.0)
321314
# this would be 1 if the parameter value isn't respected
322315
@test matrices.f_u[] == 3.0
@@ -332,28 +325,26 @@ end
332325
@parameters p
333326
eqs = [0 ~ x * log(y) - p]
334327
@named sys = ODESystem(eqs, t; defaults = [p => 1.0])
335-
sys = structural_simplify(sys, inputs = [x])
328+
sys = complete(sys)
336329
@test_throws ModelingToolkit.MissingVariablesError linearize(
337-
sys; op = Dict(x => 1.0), allow_input_derivatives = true)
330+
sys, [x], []; op = Dict(x => 1.0), allow_input_derivatives = true)
338331
@test_nowarn linearize(
339-
sys; op = Dict(x => 1.0), guesses = Dict(y => 1.0),
332+
sys, [x], []; op = Dict(x => 1.0), guesses = Dict(y => 1.0),
340333
allow_input_derivatives = true)
341334
end
342335

343336
@testset "Symbolic values for parameters in `linearize`" begin
344337
@named tank_noi = Tank_noi()
345338
@unpack md_i, h, m, ρ, A, K = tank_noi
346-
tank_noi = structural_simplify(tank_noi, inputs = [md_i], outputs = [h])
347339
m_ss = 2.4000000003229878
348340
@test_nowarn linearize(
349-
tank_noi; op = Dict(m => m_ss, md_i => 2, ρ => A / K, A => 5))
341+
tank_noi, [md_i], [h]; op = Dict(m => m_ss, md_i => 2, ρ => A / K, A => 5))
350342
end
351343

352344
@testset "Warn on empty operating point" begin
353345
@named tank_noi = Tank_noi()
354346
@unpack md_i, h, m = tank_noi
355-
tank_noi = structural_simplify(tank_noi, inputs = [md_i], outputs = [h])
356347
m_ss = 2.4000000003229878
357348
@test_warn ["empty operating point", "warn_empty_op"] linearize(
358-
tank_noi; p = [md_i => 1.0])
349+
tank_noi, [md_i], [h]; p = [md_i => 1.0])
359350
end

0 commit comments

Comments
 (0)