Skip to content

Commit 8546980

Browse files
committed
reset test file
1 parent e477433 commit 8546980

File tree

1 file changed

+31
-40
lines changed

1 file changed

+31
-40
lines changed

test/downstream/linearize.jl

Lines changed: 31 additions & 40 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,11 +114,11 @@ 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]
@@ -151,17 +148,17 @@ lsys = ModelingToolkit.reorder_unknowns(lsys, desired_order, reverse(desired_ord
151148

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

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

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

273-
closed_loop = structural_simplify(closed_loop, inputs = :r, outputs = :y)
274-
linearize(closed_loop; warn_empty_op = false)
269+
@test_nowarn linearize(closed_loop, :r, :y; warn_empty_op = false)
275270

276271
# https://discourse.julialang.org/t/mtk-change-in-linearize/115760/3
277272
@mtkmodel Tank_noi begin
@@ -301,7 +296,6 @@ end
301296

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

@@ -310,14 +304,13 @@ m_ss = 2.4000000003229878
310304
@parameters p = 1.0
311305
eqs = [D(x) ~ p * u, x ~ y]
312306
@named sys = ODESystem(eqs, t)
313-
sys = structural_simplify(sys, inputs = [u])
314307

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

319312
# Ensure parameter values passed as `Dict` are respected
320-
linfun = linearization_function(sys, [u], []; op = Dict(x => 2.0))
313+
linfun, _ = linearization_function(sys, [u], []; op = Dict(x => 2.0))
321314
matrices = linfun([1.0], Dict(p => 3.0), 1.0)
322315
# this would be 1 if the parameter value isn't respected
323316
@test matrices.f_u[] == 3.0
@@ -333,28 +326,26 @@ end
333326
@parameters p
334327
eqs = [0 ~ x * log(y) - p]
335328
@named sys = ODESystem(eqs, t; defaults = [p => 1.0])
336-
sys = structural_simplify(sys, inputs = [x])
329+
sys = complete(sys)
337330
@test_throws ModelingToolkit.MissingVariablesError linearize(
338-
sys; op = Dict(x => 1.0), allow_input_derivatives = true)
331+
sys, [x], []; op = Dict(x => 1.0), allow_input_derivatives = true)
339332
@test_nowarn linearize(
340-
sys; op = Dict(x => 1.0), guesses = Dict(y => 1.0),
333+
sys, [x], []; op = Dict(x => 1.0), guesses = Dict(y => 1.0),
341334
allow_input_derivatives = true)
342335
end
343336

344337
@testset "Symbolic values for parameters in `linearize`" begin
345338
@named tank_noi = Tank_noi()
346339
@unpack md_i, h, m, ρ, A, K = tank_noi
347-
tank_noi = structural_simplify(tank_noi, inputs = [md_i], outputs = [h])
348340
m_ss = 2.4000000003229878
349341
@test_nowarn linearize(
350-
tank_noi; op = Dict(m => m_ss, md_i => 2, ρ => A / K, A => 5))
342+
tank_noi, [md_i], [h]; op = Dict(m => m_ss, md_i => 2, ρ => A / K, A => 5))
351343
end
352344

353345
@testset "Warn on empty operating point" begin
354346
@named tank_noi = Tank_noi()
355347
@unpack md_i, h, m = tank_noi
356-
tank_noi = structural_simplify(tank_noi, inputs = [md_i], outputs = [h])
357348
m_ss = 2.4000000003229878
358349
@test_warn ["empty operating point", "warn_empty_op"] linearize(
359-
tank_noi; p = [md_i => 1.0])
350+
tank_noi, [md_i], [h]; p = [md_i => 1.0])
360351
end

0 commit comments

Comments
 (0)