Skip to content

Commit 88bd570

Browse files
Merge pull request #3699 from AayushSabharwal/as/generate-control-func
feat: allow calling `generate_control_function` with unsimplified system
2 parents 61cd5a7 + 7b87047 commit 88bd570

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

src/inputoutput.jl

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,11 @@ function generate_control_function(sys::AbstractSystem, inputs = unbound_inputs(
198198
simplify = false,
199199
eval_expression = false,
200200
eval_module = @__MODULE__,
201-
check_simplified = true,
202201
kwargs...)
203-
# Remove this when the ControlFunction gets merged.
204-
if check_simplified && !iscomplete(sys)
205-
error("A completed `ODESystem` is required. Call `complete` or `mtkcompile` on the system before creating the control function.")
206-
end
207202
isempty(inputs) && @warn("No unbound inputs were found in system.")
203+
if !iscomplete(sys)
204+
sys = mtkcompile(sys; inputs, disturbance_inputs)
205+
end
208206
if disturbance_inputs !== nothing
209207
# add to inputs for the purposes of io processing
210208
inputs = [inputs; disturbance_inputs]

test/input_output_handling.jl

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@ end
165165
]
166166

167167
@named sys = System(eqs, t)
168-
sys = mtkcompile(sys, inputs = [u])
169-
f, dvs, ps, io_sys = ModelingToolkit.generate_control_function(sys; simplify, split)
168+
f, dvs, ps, io_sys = ModelingToolkit.generate_control_function(
169+
sys, [u]; simplify, split)
170170

171171
@test isequal(dvs[], x)
172172
@test isempty(ps)
@@ -183,8 +183,8 @@ end
183183
]
184184

185185
@named sys = System(eqs, t)
186-
sys = mtkcompile(sys, inputs = [u], disturbance_inputs = [d])
187-
f, dvs, ps, io_sys = ModelingToolkit.generate_control_function(sys; simplify, split)
186+
f, dvs, ps, io_sys = ModelingToolkit.generate_control_function(
187+
sys, [u], [d]; simplify, split)
188188

189189
@test isequal(dvs[], x)
190190
@test isempty(ps)
@@ -201,9 +201,9 @@ end
201201
]
202202

203203
@named sys = System(eqs, t)
204-
sys = mtkcompile(sys, inputs = [u], disturbance_inputs = [d])
205204
f, dvs, ps, io_sys = ModelingToolkit.generate_control_function(
206-
sys; simplify, split, disturbance_argument = true)
205+
sys, [u], [d];
206+
simplify, split, disturbance_argument = true)
207207

208208
@test isequal(dvs[], x)
209209
@test isempty(ps)
@@ -267,8 +267,8 @@ eqs = [connect_sd(sd, mass1, mass2)
267267
@named _model = System(eqs, t)
268268
@named model = compose(_model, mass1, mass2, sd);
269269

270-
model = mtkcompile(model, inputs = [u])
271-
f, dvs, ps, io_sys = ModelingToolkit.generate_control_function(model, simplify = true)
270+
f, dvs, ps, io_sys = ModelingToolkit.generate_control_function(
271+
model, [u]; simplify = true)
272272
@test length(dvs) == 4
273273
p = MTKParameters(io_sys, [io_sys.u => NaN])
274274
x = ModelingToolkit.varmap_to_vars(
@@ -435,8 +435,8 @@ matrices = ModelingToolkit.reorder_unknowns(
435435
]
436436

437437
@named sys = System(eqs, t)
438-
sys = mtkcompile(sys, inputs = [u])
439-
(; io_sys,) = ModelingToolkit.generate_control_function(sys, simplify = true)
438+
(; io_sys,) = ModelingToolkit.generate_control_function(
439+
sys, [u]; simplify = true)
440440
obsfn = ModelingToolkit.build_explicit_observed_function(
441441
io_sys, [x + u * t]; inputs = [u])
442442
@test obsfn([1.0], [2.0], MTKParameters(io_sys, []), 3.0) [7.0]
@@ -458,8 +458,7 @@ end
458458
@parameters p(::Real) = (x -> 2x)
459459
eqs = [D(x) ~ -x + p(u)]
460460
@named sys = System(eqs, t)
461-
sys = mtkcompile(sys, inputs = [u])
462-
f, dvs, ps, io_sys = ModelingToolkit.generate_control_function(sys)
461+
f, dvs, ps, io_sys = ModelingToolkit.generate_control_function(sys, [u])
463462
p = MTKParameters(io_sys, [])
464463
u = [1.0]
465464
x = [1.0]

0 commit comments

Comments
 (0)