@@ -646,21 +646,39 @@ end
646646 prob2. ps[p] = 0.0
647647 test_parameter (prob2, p, 2.0 )
648648
649- # Should not be solved for:
649+ # Default overridden by ODEProblem, guess provided
650+ @mtkbuild sys = ODESystem (
651+ [D (x) ~ q * x, D (y) ~ y * p], t; defaults = [p => 2 q], guesses = [p => 1.0 ])
652+ _pmap = merge (pmap, Dict (p => q))
653+ prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), _pmap)
654+ test_parameter (prob, p, pmap[q])
655+ test_initializesystem (sys, u0map, pmap, p, 0 ~ q - p)
650656
651- # ODEProblem value with guess, no `missing`
657+ # ODEProblem dependent value with guess, no `missing`
652658 @mtkbuild sys = ODESystem ([D (x) ~ x * q, D (y) ~ y * p], t; guesses = [p => 0.0 ])
653659 _pmap = merge (pmap, Dict (p => 3 q))
654660 prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), _pmap)
655- @test prob. ps[p] ≈ 3.0
656- @test prob. f. initializeprob === nothing
657- # Default overridden by ODEProblem, guess provided
661+ test_parameter (prob, p, 3 pmap[q])
662+
663+ # Should not be solved for:
664+
665+ # Override dependent default with direct value
658666 @mtkbuild sys = ODESystem (
659667 [D (x) ~ q * x, D (y) ~ y * p], t; defaults = [p => 2 q], guesses = [p => 1.0 ])
668+ _pmap = merge (pmap, Dict (p => 1.0 ))
660669 prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), _pmap)
661- @test prob. ps[p] ≈ 3 .0
670+ @test prob. ps[p] ≈ 1 .0
662671 @test prob. f. initializeprob === nothing
663672
673+ # Non-floating point
674+ @parameters r:: Int s:: Int
675+ @mtkbuild sys = ODESystem (
676+ [D (x) ~ s * x, D (y) ~ y * r], t; defaults = [s => 2 r], guesses = [s => 1.0 ])
677+ prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), [r => 1 ])
678+ @test prob. ps[r] == 1
679+ @test prob. ps[s] == 2
680+ @test prob. f. initializeprob === nothing
681+
664682 @mtkbuild sys = ODESystem ([D (x) ~ x, p ~ x + y], t; guesses = [p => 0.0 ])
665683 @test_throws ModelingToolkit. MissingParametersError ODEProblem (
666684 sys, [x => 1.0 , y => 1.0 ], (0.0 , 1.0 ))
0 commit comments