Skip to content

Commit eb1177f

Browse files
Merge pull request #3684 from AayushSabharwal/as/fix-linearize
fix: fix linearization, move tests to InterfaceII
2 parents d1246c0 + e2ddd78 commit eb1177f

File tree

4 files changed

+21
-31
lines changed

4 files changed

+21
-31
lines changed

src/linearization.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ function linearize_symbolic(sys::AbstractSystem, inputs,
505505
ps = parameters(sys; initial_parameters = true)
506506
p = reorder_parameters(sys, ps)
507507

508-
fun_expr = generate_function(sys, sts, ps; expression = Val{true})[1]
508+
fun_expr = generate_rhs(sys; expression = Val{true})[1]
509509
fun = eval_or_rgf(fun_expr; eval_expression, eval_module)
510510
dx = fun(sts, p, t)
511511

src/systems/analysis_points.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -974,8 +974,8 @@ end
974974
function linearization_function(sys::AbstractSystem,
975975
inputs::Union{Symbol, Vector{Symbol}, AnalysisPoint, Vector{AnalysisPoint}},
976976
outputs; loop_openings = [], system_modifier = identity, kwargs...)
977-
978-
sys, input_vars, output_vars = linearization_ap_transform(sys, inputs, outputs, loop_openings)
977+
sys, input_vars, output_vars = linearization_ap_transform(
978+
sys, inputs, outputs, loop_openings)
979979
return linearization_function(system_modifier(sys), input_vars, output_vars; kwargs...)
980980
end
981981

test/downstream/linearize.jl renamed to test/linearize.jl

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,10 @@ connections = [f.y ~ c.r # filtered reference to controller reference
8787

8888
@named cl = System(connections, t, systems = [f, c, p])
8989

90-
lsys0, ssys = linearize(cl)
90+
lsys0, ssys = linearize(cl, [f.u], [p.x])
9191
desired_order = [f.x, p.x]
9292
lsys = ModelingToolkit.reorder_unknowns(lsys0, unknowns(ssys), desired_order)
93-
lsys1, ssys = linearize(cl; autodiff = AutoFiniteDiff())
93+
lsys1, ssys = linearize(cl, [f.u], [p.x]; autodiff = AutoFiniteDiff())
9494
lsys2 = ModelingToolkit.reorder_unknowns(lsys1, unknowns(ssys), desired_order)
9595

9696
@test lsys.A == lsys2.A == [-2 0; 1 -2]
@@ -99,8 +99,9 @@ lsys2 = ModelingToolkit.reorder_unknowns(lsys1, unknowns(ssys), desired_order)
9999
@test lsys.D[] == lsys2.D[] == 0
100100

101101
## Symbolic linearization
102-
lsyss, _ = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x])
102+
lsyss, ssys = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x])
103103

104+
lsyss = ModelingToolkit.reorder_unknowns(lsyss, unknowns(ssys), [f.x, p.x])
104105
@test ModelingToolkit.fixpoint_sub(lsyss.A, ModelingToolkit.defaults(cl)) == lsys.A
105106
@test ModelingToolkit.fixpoint_sub(lsyss.B, ModelingToolkit.defaults(cl)) == lsys.B
106107
@test ModelingToolkit.fixpoint_sub(lsyss.C, ModelingToolkit.defaults(cl)) == lsys.C
@@ -147,28 +148,17 @@ lsys = ModelingToolkit.reorder_unknowns(lsys, desired_order, reverse(desired_ord
147148
@test lsys.D == [4400 -4400]
148149

149150
## Test that there is a warning when input is misspecified
150-
if VERSION >= v"1.8"
151-
@test_throws "Some specified inputs were not found" linearize(pid,
152-
[
153-
pid.reference.u,
154-
pid.measurement.u
155-
], [ctr_output.u])
156-
@test_throws "Some specified outputs were not found" linearize(pid,
157-
[
158-
reference.u,
159-
measurement.u
160-
],
161-
[pid.ctr_output.u])
162-
else # v1.6 does not have the feature to match error message
163-
@test_throws ErrorException linearize(pid,
164-
[
165-
pid.reference.u,
166-
pid.measurement.u
167-
], [ctr_output.u])
168-
@test_throws ErrorException linearize(pid,
169-
[reference.u, measurement.u],
170-
[pid.ctr_output.u])
171-
end
151+
@test_throws "Some specified inputs were not found" linearize(pid,
152+
[
153+
pid.reference.u,
154+
pid.measurement.u
155+
], [ctr_output.u])
156+
@test_throws "Some specified outputs were not found" linearize(pid,
157+
[
158+
reference.u,
159+
measurement.u
160+
],
161+
[pid.ctr_output.u])
172162

173163
## Test operating points
174164

@@ -266,7 +256,7 @@ closed_loop = System(connections, t, systems = [model, pid, filt, sensor, r, er]
266256
filt.xd => 0.0
267257
])
268258

269-
@test_nowarn linearize(closed_loop; warn_empty_op = false)
259+
@test_nowarn linearize(closed_loop, :r, :y; warn_empty_op = false)
270260

271261
# https://discourse.julialang.org/t/mtk-change-in-linearize/115760/3
272262
@mtkmodel Tank_noi begin
@@ -327,7 +317,7 @@ end
327317
eqs = [0 ~ x * log(y) - p]
328318
@named sys = System(eqs, t; defaults = [p => 1.0])
329319
sys = complete(sys)
330-
@test_throws ModelingToolkit.MissingVariablesError linearize(
320+
@test_throws ModelingToolkit.MissingGuessError linearize(
331321
sys, [x], []; op = Dict(x => 1.0), allow_input_derivatives = true)
332322
@test_nowarn linearize(
333323
sys, [x], []; op = Dict(x => 1.0), guesses = Dict(y => 1.0),

test/runtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ end
9797
@safetestset "Debugging Test" include("debugging.jl")
9898
@safetestset "Namespacing test" include("namespacing.jl")
9999
@safetestset "Subsystem replacement" include("substitute_component.jl")
100+
@safetestset "Linearization Tests" include("linearize.jl")
100101
end
101102
end
102103

@@ -120,7 +121,6 @@ end
120121

121122
if GROUP == "All" || GROUP == "Downstream"
122123
activate_downstream_env()
123-
@safetestset "Linearization Tests" include("downstream/linearize.jl")
124124
@safetestset "Linearization Dummy Derivative Tests" include("downstream/linearization_dd.jl")
125125
@safetestset "Inverse Models Test" include("downstream/inversemodel.jl")
126126
@safetestset "Analysis Points Test" include("downstream/analysis_points.jl")

0 commit comments

Comments
 (0)