@@ -601,12 +601,18 @@ end
601
601
pmap[p] = 2 q
602
602
prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), pmap)
603
603
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 )
604
607
# `missing` default, provided guess
605
608
@mtkbuild sys = ODESystem (
606
609
[D (x) ~ x, p ~ x + y], t; defaults = [p => missing ], guesses = [p => 0.0 ])
607
610
prob = ODEProblem (sys, u0map, (0.0 , 1.0 ))
608
611
test_parameter (prob, p, 2.0 )
609
612
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 )
610
616
611
617
# `missing` to ODEProblem, equation from default
612
618
@mtkbuild sys = ODESystem (
@@ -615,13 +621,18 @@ end
615
621
prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), pmap)
616
622
test_parameter (prob, p, 2.0 )
617
623
test_initializesystem (sys, u0map, pmap, p, 0 ~ 2 q - p)
624
+ prob2 = remake (prob; u0 = u0map, p = pmap)
625
+ prob2. ps[p] = 0.0
618
626
test_parameter (prob2, p, 2.0 )
619
627
# `missing` to ODEProblem, provided guess
620
628
@mtkbuild sys = ODESystem (
621
629
[D (x) ~ x, p ~ x + y], t; guesses = [p => 0.0 ])
622
630
prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), pmap)
623
631
test_parameter (prob, p, 2.0 )
624
632
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 )
625
636
626
637
# No `missing`, default and guess
627
638
@mtkbuild sys = ODESystem (
630
641
prob = ODEProblem (sys, u0map, (0.0 , 1.0 ), pmap)
631
642
test_parameter (prob, p, 2.0 )
632
643
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 )
633
647
634
648
# Should not be solved for:
635
649
711
725
integ = init (prob, Tsit5 ())
712
726
@test integ. ps[p] ≈ 2
713
727
end
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