@@ -160,12 +160,12 @@ eqs = [
160160]
161161
162162@named sys = ODESystem (eqs, t)
163- f, dvs, ps = ModelingToolkit. generate_control_function (sys, simplify = true )
163+ f, dvs, ps, io_sys = ModelingToolkit. generate_control_function (sys, simplify = true )
164164
165165@test isequal (dvs[], x)
166166@test isempty (ps)
167167
168- p = []
168+ p = nothing
169169x = [rand ()]
170170u = [rand ()]
171171@test f[1 ](x, u, p, 1 ) == - x + u
@@ -221,10 +221,10 @@ eqs = [connect_sd(sd, mass1, mass2)
221221@named _model = ODESystem (eqs, t)
222222@named model = compose (_model, mass1, mass2, sd);
223223
224- f, dvs, ps = ModelingToolkit. generate_control_function (model, simplify = true )
224+ f, dvs, ps, io_sys = ModelingToolkit. generate_control_function (model, simplify = true )
225225@test length (dvs) == 4
226226@test length (ps) == length (parameters (model))
227- p = ModelingToolkit . varmap_to_vars (ModelingToolkit . defaults (model), ps )
227+ p = MTKParameters (io_sys, [io_sys . u => NaN ] )
228228x = ModelingToolkit. varmap_to_vars (
229229 merge (ModelingToolkit. defaults (model),
230230 Dict (D .(unknowns (model)) .=> 0.0 )), dvs)
@@ -288,7 +288,7 @@ model_outputs = [model.inertia1.w, model.inertia2.w, model.inertia1.phi, model.i
288288@named dmodel = Blocks. StateSpace ([0.0 ], [1.0 ], [1.0 ], [0.0 ]) # An integrating disturbance
289289
290290@named dist = ModelingToolkit. DisturbanceModel (model. torque. tau. u, dmodel)
291- (f_oop, f_ip), outersys, dvs, p = ModelingToolkit. add_input_disturbance (model, dist)
291+ (f_oop, f_ip), outersys, dvs, p, io_sys = ModelingToolkit. add_input_disturbance (model, dist)
292292
293293@unpack u, d = outersys
294294matrices, ssys = linearize (outersys, [u, d], model_outputs)
@@ -302,7 +302,7 @@ x_add = ModelingToolkit.varmap_to_vars(merge(Dict(dvs .=> 0), Dict(dstate => 1))
302302x0 = randn (5 )
303303x1 = copy (x0) + x_add # add disturbance state perturbation
304304u = randn (1 )
305- pn = ModelingToolkit . varmap_to_vars (def, p )
305+ pn = MTKParameters (io_sys, [] )
306306xp0 = f_oop (x0, u, pn, 0 )
307307xp1 = f_oop (x1, u, pn, 0 )
308308
401401 f, dvs, ps = ModelingToolkit. generate_control_function (sys, simplify = true )
402402 @test f[1 ]([0.5 ], nothing , nothing , 0.0 ) == [1.0 ]
403403end
404+
405+ @testset " With callable symbolic" begin
406+ @variables x (t)= 0 u (t)= 0 [input = true ]
407+ @parameters p (:: Real ) = (x -> 2 x)
408+ eqs = [D (x) ~ - x + p (u)]
409+ @named sys = ODESystem (eqs, t)
410+ f, dvs, ps, io_sys = ModelingToolkit. generate_control_function (sys, simplify = true )
411+ p = MTKParameters (io_sys, [])
412+ u = [1.0 ]
413+ x = [1.0 ]
414+ @test_nowarn f[1 ](x, u, p, 0.0 )
415+ end
0 commit comments