@@ -759,7 +759,8 @@ function DiffEqBase.ODEProblem{iip, specialize}(sys::AbstractODESystem, u0map =
759759 kwargs1 = merge (kwargs1, (; tstops))
760760 end
761761
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... ))
763764end
764765get_callback (prob:: ODEProblem ) = prob. kwargs[:callback ]
765766
@@ -963,8 +964,10 @@ function DiffEqBase.DAEProblem{iip}(sys::AbstractODESystem, du0map, u0map, tspan
963964 kwargs1 = merge (kwargs1, (; tstops))
964965 end
965966
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... ))
968971end
969972
970973function generate_history (sys:: AbstractODESystem , u0; expression = Val{false }, kwargs... )
@@ -991,7 +994,7 @@ function DiffEqBase.DDEProblem{iip}(sys::AbstractODESystem, u0map = [],
991994 end
992995 f, u0, p = process_SciMLProblem (DDEFunction{iip}, sys, u0map, parammap;
993996 t = tspan != = nothing ? tspan[1 ] : tspan,
994- symbolic_u0 = true ,
997+ symbolic_u0 = true , u0_constructor,
995998 check_length, eval_expression, eval_module, kwargs... )
996999 h_gen = generate_history (sys, u0; expression = Val{true })
9971000 h_oop, h_iip = eval_or_rgf .(h_gen; eval_expression, eval_module)
@@ -1008,7 +1011,8 @@ function DiffEqBase.DDEProblem{iip}(sys::AbstractODESystem, u0map = [],
10081011 if cbs != = nothing
10091012 kwargs1 = merge (kwargs1, (callback = cbs,))
10101013 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... ))
10121016end
10131017
10141018function DiffEqBase. SDDEProblem (sys:: AbstractODESystem , args... ; kwargs... )
@@ -1029,7 +1033,7 @@ function DiffEqBase.SDDEProblem{iip}(sys::AbstractODESystem, u0map = [],
10291033 end
10301034 f, u0, p = process_SciMLProblem (SDDEFunction{iip}, sys, u0map, parammap;
10311035 t = tspan != = nothing ? tspan[1 ] : tspan,
1032- symbolic_u0 = true , eval_expression, eval_module,
1036+ symbolic_u0 = true , eval_expression, eval_module, u0_constructor,
10331037 check_length, kwargs... )
10341038 h_gen = generate_history (sys, u0; expression = Val{true })
10351039 h_oop, h_iip = eval_or_rgf .(h_gen; eval_expression, eval_module)
@@ -1057,9 +1061,10 @@ function DiffEqBase.SDDEProblem{iip}(sys::AbstractODESystem, u0map = [],
10571061 else
10581062 noise_rate_prototype = zeros (eltype (u0), size (noiseeqs))
10591063 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;
10611066 noise_rate_prototype =
1062- noise_rate_prototype, kwargs1... , kwargs... )
1067+ noise_rate_prototype, kwargs1... , kwargs... ))
10631068end
10641069
10651070"""
0 commit comments