Skip to content

Commit f783cb1

Browse files
test: test remaking of initialization problem
1 parent 5a538c3 commit f783cb1

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

test/initializationsystem.jl

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,12 +601,18 @@ end
601601
pmap[p] = 2q
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 ~ 2q - 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(
@@ -630,6 +641,9 @@ end
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 ~ 2q - 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

@@ -711,3 +725,24 @@ end
711725
integ = init(prob, Tsit5())
712726
@test integ.ps[p] 2
713727
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 => 2x + 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 => 2x + 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

test/mtkparameters.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ end
293293
ps_vec = [k => [2.0, 3.0, 4.0, 5.0]]
294294
ps_scal = [k[1] => 1.0, k[2] => 2.0, k[3] => 3.0, k[4] => 4.0]
295295
oprob_scal_scal = ODEProblem(osys_scal, u0, 1.0, ps_scal)
296-
newoprob = remake(oprob_scal_scal; p = ps_vec)
296+
newoprob = remake(oprob_scal_scal; p = ps_vec, build_initializeprob = false)
297297
@test newoprob.ps[k] == [2.0, 3.0, 4.0, 5.0]
298298
end
299299

test/split_parameters.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,16 @@ eqs = [D(y) ~ dy * a
114114
sys = structural_simplify(model; split = false)
115115

116116
tspan = (0.0, t_end)
117-
prob = ODEProblem(sys, [], tspan, [])
117+
prob = ODEProblem(sys, [], tspan, []; build_initializeprob = false)
118118

119119
@test prob.p isa Vector{Float64}
120120
sol = solve(prob, ImplicitEuler());
121121
@test sol.retcode == ReturnCode.Success
122122

123123
# ------------------------ Mixed Type Conserved
124124

125-
prob = ODEProblem(sys, [], tspan, []; tofloat = false, use_union = true)
125+
prob = ODEProblem(
126+
sys, [], tspan, []; tofloat = false, use_union = true, build_initializeprob = false)
126127

127128
@test prob.p isa Tuple{Vector{Float64}, Vector{Int64}}
128129
sol = solve(prob, ImplicitEuler());

0 commit comments

Comments
 (0)