@@ -759,7 +759,8 @@ function DiffEqBase.ODEProblem{iip, specialize}(sys::AbstractODESystem, u0map =
759
759
kwargs1 = merge (kwargs1, (; tstops))
760
760
end
761
761
762
- return ODEProblem {iip} (f, u0, tspan, p, pt; kwargs1... , kwargs... )
762
+ # Call `remake` so it runs initialization if it is trivial
763
+ return remake (ODEProblem {iip} (f, u0, tspan, p, pt; kwargs1... , kwargs... ))
763
764
end
764
765
get_callback (prob:: ODEProblem ) = prob. kwargs[:callback ]
765
766
@@ -963,8 +964,10 @@ function DiffEqBase.DAEProblem{iip}(sys::AbstractODESystem, du0map, u0map, tspan
963
964
kwargs1 = merge (kwargs1, (; tstops))
964
965
end
965
966
966
- DAEProblem {iip} (f, du0, u0, tspan, p; differential_vars = differential_vars,
967
- kwargs... , kwargs1... )
967
+ # Call `remake` so it runs initialization if it is trivial
968
+ return remake (DAEProblem {iip} (
969
+ f, du0, u0, tspan, p; differential_vars = differential_vars,
970
+ kwargs... , kwargs1... ))
968
971
end
969
972
970
973
function generate_history (sys:: AbstractODESystem , u0; expression = Val{false }, kwargs... )
@@ -991,7 +994,7 @@ function DiffEqBase.DDEProblem{iip}(sys::AbstractODESystem, u0map = [],
991
994
end
992
995
f, u0, p = process_SciMLProblem (DDEFunction{iip}, sys, u0map, parammap;
993
996
t = tspan != = nothing ? tspan[1 ] : tspan,
994
- symbolic_u0 = true ,
997
+ symbolic_u0 = true , u0_constructor,
995
998
check_length, eval_expression, eval_module, kwargs... )
996
999
h_gen = generate_history (sys, u0; expression = Val{true })
997
1000
h_oop, h_iip = eval_or_rgf .(h_gen; eval_expression, eval_module)
@@ -1008,7 +1011,8 @@ function DiffEqBase.DDEProblem{iip}(sys::AbstractODESystem, u0map = [],
1008
1011
if cbs != = nothing
1009
1012
kwargs1 = merge (kwargs1, (callback = cbs,))
1010
1013
end
1011
- DDEProblem {iip} (f, u0, h, tspan, p; kwargs1... , kwargs... )
1014
+ # Call `remake` so it runs initialization if it is trivial
1015
+ return remake (DDEProblem {iip} (f, u0, h, tspan, p; kwargs1... , kwargs... ))
1012
1016
end
1013
1017
1014
1018
function DiffEqBase. SDDEProblem (sys:: AbstractODESystem , args... ; kwargs... )
@@ -1029,7 +1033,7 @@ function DiffEqBase.SDDEProblem{iip}(sys::AbstractODESystem, u0map = [],
1029
1033
end
1030
1034
f, u0, p = process_SciMLProblem (SDDEFunction{iip}, sys, u0map, parammap;
1031
1035
t = tspan != = nothing ? tspan[1 ] : tspan,
1032
- symbolic_u0 = true , eval_expression, eval_module,
1036
+ symbolic_u0 = true , eval_expression, eval_module, u0_constructor,
1033
1037
check_length, kwargs... )
1034
1038
h_gen = generate_history (sys, u0; expression = Val{true })
1035
1039
h_oop, h_iip = eval_or_rgf .(h_gen; eval_expression, eval_module)
@@ -1057,9 +1061,10 @@ function DiffEqBase.SDDEProblem{iip}(sys::AbstractODESystem, u0map = [],
1057
1061
else
1058
1062
noise_rate_prototype = zeros (eltype (u0), size (noiseeqs))
1059
1063
end
1060
- SDDEProblem {iip} (f, f. g, u0, h, tspan, p;
1064
+ # Call `remake` so it runs initialization if it is trivial
1065
+ return remake (SDDEProblem {iip} (f, f. g, u0, h, tspan, p;
1061
1066
noise_rate_prototype =
1062
- noise_rate_prototype, kwargs1... , kwargs... )
1067
+ noise_rate_prototype, kwargs1... , kwargs... ))
1063
1068
end
1064
1069
1065
1070
"""
0 commit comments