Skip to content

Commit ffd538d

Browse files
fix: fix eager initialization in remake
1 parent d2d5e6f commit ffd538d

File tree

1 file changed

+37
-72
lines changed

1 file changed

+37
-72
lines changed

src/remake.jl

Lines changed: 37 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -257,18 +257,9 @@ function remake(prob::ODEProblem; f = missing,
257257
ODEProblem{iip}(f, newu0, tspan, newp, prob.problem_type; kwargs...)
258258
end
259259

260-
if lazy_initialization === nothing
261-
lazy_initialization = !is_trivial_initialization(initialization_data)
262-
end
263-
if initialization_data !== nothing && !lazy_initialization
264-
u0, p, _ = get_initial_values(
265-
prob, prob, prob.f, OverrideInit(), Val(isinplace(prob)))
266-
if u0 !== nothing && eltype(u0) == Any && isempty(u0)
267-
u0 = nothing
268-
end
269-
@reset prob.u0 = u0
270-
@reset prob.p = p
271-
end
260+
u0, p = maybe_eager_initialize_problem(prob, initialization_data, lazy_initialization)
261+
@reset prob.u0 = u0
262+
@reset prob.p = p
272263

273264
return prob
274265
end
@@ -453,18 +444,10 @@ function remake(prob::SDEProblem;
453444
else
454445
SDEProblem{iip}(f, newu0, tspan, newp; noise, noise_rate_prototype, seed, kwargs...)
455446
end
456-
if lazy_initialization === nothing
457-
lazy_initialization = !is_trivial_initialization(initialization_data)
458-
end
459-
if initialization_data !== nothing && !lazy_initialization
460-
u0, p, _ = get_initial_values(
461-
prob, prob, prob.f, OverrideInit(), Val(isinplace(prob)))
462-
if u0 !== nothing && eltype(u0) == Any && isempty(u0)
463-
u0 = nothing
464-
end
465-
@reset prob.u0 = u0
466-
@reset prob.p = p
467-
end
447+
448+
u0, p = maybe_eager_initialize_problem(prob, initialization_data, lazy_initialization)
449+
@reset prob.u0 = u0
450+
@reset prob.p = p
468451

469452
return prob
470453
end
@@ -520,18 +503,10 @@ function remake(prob::DDEProblem; f = missing, h = missing, u0 = missing,
520503
DDEProblem{iip}(f, newu0, h, tspan, newp; constant_lags, dependent_lags,
521504
order_discontinuity_t0, neutral, kwargs...)
522505
end
523-
if lazy_initialization === nothing
524-
lazy_initialization = !is_trivial_initialization(initialization_data)
525-
end
526-
if initialization_data !== nothing && !lazy_initialization
527-
u0, p, _ = get_initial_values(
528-
prob, prob, prob.f, OverrideInit(), Val(isinplace(prob)))
529-
if u0 !== nothing && eltype(u0) == Any && isempty(u0)
530-
u0 = nothing
531-
end
532-
@reset prob.u0 = u0
533-
@reset prob.p = p
534-
end
506+
507+
u0, p = maybe_eager_initialize_problem(prob, initialization_data, lazy_initialization)
508+
@reset prob.u0 = u0
509+
@reset prob.p = p
535510

536511
return prob
537512
end
@@ -619,18 +594,9 @@ function remake(prob::SDDEProblem;
619594
dependent_lags, order_discontinuity_t0, neutral, kwargs...)
620595
end
621596

622-
if lazy_initialization === nothing
623-
lazy_initialization = !is_trivial_initialization(initialization_data)
624-
end
625-
if initialization_data !== nothing && !lazy_initialization
626-
u0, p, _ = get_initial_values(
627-
prob, prob, prob.f, OverrideInit(), Val(isinplace(prob)))
628-
if u0 !== nothing && eltype(u0) == Any && isempty(u0)
629-
u0 = nothing
630-
end
631-
@reset prob.u0 = u0
632-
@reset prob.p = p
633-
end
597+
u0, p = maybe_eager_initialize_problem(prob, initialization_data, lazy_initialization)
598+
@reset prob.u0 = u0
599+
@reset prob.p = p
634600

635601
return prob
636602
end
@@ -741,18 +707,9 @@ function remake(prob::NonlinearProblem;
741707
problem_type = problem_type; kwargs...)
742708
end
743709

744-
if lazy_initialization === nothing
745-
lazy_initialization = !is_trivial_initialization(initialization_data)
746-
end
747-
if initialization_data !== nothing && !lazy_initialization
748-
u0, p, _ = get_initial_values(
749-
prob, prob, prob.f, OverrideInit(), Val(isinplace(prob)))
750-
if u0 !== nothing && eltype(u0) == Any && isempty(u0)
751-
u0 = nothing
752-
end
753-
@reset prob.u0 = u0
754-
@reset prob.p = p
755-
end
710+
u0, p = maybe_eager_initialize_problem(prob, initialization_data, lazy_initialization)
711+
@reset prob.u0 = u0
712+
@reset prob.p = p
756713

757714
return prob
758715
end
@@ -792,18 +749,9 @@ function remake(prob::NonlinearLeastSquaresProblem; f = missing, u0 = missing, p
792749
f, u0 = newu0, p = newp, kwargs...)
793750
end
794751

795-
if lazy_initialization === nothing
796-
lazy_initialization = !is_trivial_initialization(initialization_data)
797-
end
798-
if initialization_data !== nothing && !lazy_initialization
799-
u0, p, _ = get_initial_values(
800-
prob, prob, prob.f, OverrideInit(), Val(isinplace(prob)))
801-
if u0 !== nothing && eltype(u0) == Any && isempty(u0)
802-
u0 = nothing
803-
end
804-
@reset prob.u0 = u0
805-
@reset prob.p = p
806-
end
752+
u0, p = maybe_eager_initialize_problem(prob, initialization_data, lazy_initialization)
753+
@reset prob.u0 = u0
754+
@reset prob.p = p
807755

808756
return prob
809757
end
@@ -1134,6 +1082,23 @@ function process_p_u0_symbolic(prob, p, u0)
11341082
end
11351083
end
11361084

1085+
function maybe_eager_initialize_problem(prob::AbstractSciMLProblem, initialization_data, lazy_initialization::Union{Nothing, Bool})
1086+
if lazy_initialization === nothing
1087+
lazy_initialization = !is_trivial_initialization(initialization_data)
1088+
end
1089+
if initialization_data !== nothing && !lazy_initialization && (!is_time_dependent(prob) || current_time(prob) !== nothing)
1090+
u0, p, _ = get_initial_values(
1091+
prob, prob, prob.f, OverrideInit(), Val(isinplace(prob)))
1092+
if u0 !== nothing && eltype(u0) == Any && isempty(u0)
1093+
u0 = nothing
1094+
end
1095+
else
1096+
u0 = state_values(prob)
1097+
p = parameter_values(prob)
1098+
end
1099+
return u0, p
1100+
end
1101+
11371102
function remake(thing::AbstractJumpProblem; kwargs...)
11381103
parameterless_type(thing)(remake(thing.prob; kwargs...))
11391104
end

0 commit comments

Comments
 (0)