@@ -601,12 +601,18 @@ end
601601 pmap[p] = 2 q
602602 prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), pmap)
603603 test_parameter (prob, p, 2.0 )
604+ prob2 = remake (prob; u0 = u0map, p = pmap)
605+ prob2. ps[p] = 0.0
606+ test_parameter (prob2, p, 2.0 )
604607 # `missing` default, provided guess
605608 @mtkbuild sys = ODESystem (
606609 [D (x) ~ x, p ~ x + y], t; defaults = [p => missing ], guesses = [p => 0.0 ])
607610 prob = ODEProblem (sys, u0map, (0.0 , 1.0 ))
608611 test_parameter (prob, p, 2.0 )
609612 test_initializesystem (sys, u0map, pmap, p, 0 ~ p - x - y)
613+ prob2 = remake (prob; u0 = u0map)
614+ prob2. ps[p] = 0.0
615+ test_parameter (prob2, p, 2.0 )
610616
611617 # `missing` to ODEProblem, equation from default
612618 @mtkbuild sys = ODESystem (
@@ -615,13 +621,18 @@ end
615621 prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), pmap)
616622 test_parameter (prob, p, 2.0 )
617623 test_initializesystem (sys, u0map, pmap, p, 0 ~ 2 q - p)
624+ prob2 = remake (prob; u0 = u0map, p = pmap)
625+ prob2. ps[p] = 0.0
618626 test_parameter (prob2, p, 2.0 )
619627 # `missing` to ODEProblem, provided guess
620628 @mtkbuild sys = ODESystem (
621629 [D (x) ~ x, p ~ x + y], t; guesses = [p => 0.0 ])
622630 prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), pmap)
623631 test_parameter (prob, p, 2.0 )
624632 test_initializesystem (sys, u0map, pmap, p, 0 ~ x + y - p)
633+ prob2 = remake (prob; u0 = u0map, p = pmap)
634+ prob2. ps[p] = 0.0
635+ test_parameter (prob2, p, 2.0 )
625636
626637 # No `missing`, default and guess
627638 @mtkbuild sys = ODESystem (
630641 prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), pmap)
631642 test_parameter (prob, p, 2.0 )
632643 test_initializesystem (sys, u0map, pmap, p, 0 ~ 2 q - p)
644+ prob2 = remake (prob; u0 = u0map, p = pmap)
645+ prob2. ps[p] = 0.0
646+ test_parameter (prob2, p, 2.0 )
633647
634648 # Should not be solved for:
635649
711725 integ = init (prob, Tsit5 ())
712726 @test integ. ps[p] ≈ 2
713727end
728+
729+ @testset " Re-creating initialization problem on remake" begin
730+ @variables x (t) y (t)
731+ @parameters p q
732+ @mtkbuild sys = ODESystem (
733+ [D (x) ~ x, p ~ x + y], t; defaults = [p => missing ], guesses = [x => 0.0 , p => 0.0 ])
734+ prob = ODEProblem (sys, [x => 1.0 , y => 1.0 ], (0.0 , 1.0 ))
735+ @test init (prob, Tsit5 ()). ps[p] ≈ 2.0
736+ # nonsensical value for y just to test that equations work
737+ prob2 = remake (prob; u0 = [x => 1.0 , y => 2 x + exp (t)])
738+ @test init (prob2, Tsit5 ()). ps[p] ≈ 4.0
739+ # solve for `x` given `p` and `y`
740+ prob3 = remake (prob; u0 = [x => nothing , y => 1.0 ], p = [p => 2 x + exp (t)])
741+ @test init (prob3, Tsit5 ())[x] ≈ 0.0
742+ @test_logs (:warn , r" overdetermined" ) remake (
743+ prob; u0 = [x => 1.0 , y => 2.0 ], p = [p => 4.0 ])
744+ prob4 = remake (prob; u0 = [x => 1.0 , y => 2.0 ], p = [p => 4.0 ])
745+ @test solve (prob4, Tsit5 ()). retcode == ReturnCode. InitialFailure
746+ prob5 = remake (prob)
747+ @test init (prob, Tsit5 ()). ps[p] ≈ 2.0
748+ end
0 commit comments