@@ -6,6 +6,7 @@ using UnPack
66using ModelingToolkit: t_nounits as t, D_nounits as D, default_toterm
77using Symbolics: unwrap
88using DataInterpolations
9+ using OrdinaryDiffEq, NonlinearSolve, StochasticDiffEq
910const ST = StructuralTransformations
1011
1112# Define some variables
386387 @test D (sys. k (t)) in vs
387388 end
388389end
390+
391+ @testset " Don't rely on metadata" begin
392+ @testset " ODESystem" begin
393+ @variables x (t) p
394+ @parameters y (t) q
395+ @mtkbuild sys = System ([D (x) ~ x * q, x^ 2 + y^ 2 ~ p], t, [x, y],
396+ [p, q]; initialization_eqs = [p + q ~ 3 ],
397+ defaults = [p => missing ], guesses = [p => 1.0 , y => 1.0 ])
398+ @test length (equations (sys)) == 2
399+ @test length (parameters (sys)) == 2
400+ prob = ODEProblem (sys, [x => 1.0 ], (0.0 , 1.0 ), [q => 2.0 ])
401+ integ = init (prob, Rodas5P (); abstol = 1e-10 , reltol = 1e-8 )
402+ @test integ. ps[p]≈ 1.0 atol= 1e-6
403+ @test integ[y]≈ 0.0 atol= 1e-5
404+ end
405+
406+ @testset " NonlinearSystem" begin
407+ @variables x p
408+ @parameters y q
409+ @mtkbuild sys = System ([0 ~ p * x + y, x^ 3 + y^ 3 ~ q], [x, y],
410+ [p, q]; initialization_eqs = [p ~ q + 1 ],
411+ guesses = [p => 1.0 ], defaults = [p => missing ])
412+ @test length (equations (sys)) == length (unknowns (sys)) == 1
413+ @test length (observed (sys)) == 1
414+ @test observed (sys)[1 ]. lhs in Set ([x, y])
415+ @test length (parameters (sys)) == 2
416+ prob = NonlinearProblem (sys, [x => 1.0 , y => 1.0 ], [q => 1.0 ])
417+ integ = init (prob, NewtonRaphson ())
418+ @test prob. ps[p] ≈ 2.0
419+ end
420+
421+ @testset " SDESystem" begin
422+ @variables x (t) p a
423+ @parameters y (t) q b
424+ @brownian c
425+ @mtkbuild sys = System ([D (x) ~ x + q * a, D (y) ~ y + p * b + c], t, [x, y],
426+ [p, q], [a, b, c]; initialization_eqs = [p + q ~ 4 ],
427+ guesses = [p => 1.0 ], defaults = [p => missing ])
428+ @test length (equations (sys)) == 2
429+ @test issetequal (unknowns (sys), [x, y])
430+ @test issetequal (parameters (sys), [p, q])
431+ @test isempty (brownians (sys))
432+ neqs = ModelingToolkit. get_noise_eqs (sys)
433+ @test issetequal (sum .(eachrow (neqs)), [q, 1 + p])
434+ prob = SDEProblem (sys, [x => 1.0 , y => 1.0 ], (0.0 , 1.0 ), [q => 1.0 ])
435+ integ = init (prob, ImplicitEM ())
436+ @test integ. ps[p] ≈ 3.0
437+ end
438+ end
0 commit comments