Skip to content

Commit 58f6852

Browse files
fix: handle initialization_data in f passed to remake
1 parent 2188104 commit 58f6852

File tree

1 file changed

+42
-19
lines changed

1 file changed

+42
-19
lines changed

src/remake.jl

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,18 @@ function remake(prob::ODEProblem; f = missing,
124124

125125
iip = isinplace(prob)
126126

127-
initialization_data = prob.f.initialization_data
128-
129-
if f === missing
130-
if build_initializeprob
131-
initialization_data = remake_initialization_data_compat_wrapper(
132-
prob.f.sys, prob.f, u0, tspan[1], p, newu0, newp)
127+
if build_initializeprob
128+
if f !== missing && has_initialization_data(f)
129+
initialization_data = f.initialization_data
133130
else
134-
initialization_data = nothing
131+
initialization_data = remake_initialization_data(
132+
prob.f.sys, prob.f, u0, tspan[1], p, newu0, newp)
135133
end
134+
else
135+
initialization_data = nothing
136+
end
137+
138+
if f === missing
136139
if specialization(prob.f) === FunctionWrapperSpecialize
137140
ptspan = promote_tspan(tspan)
138141
if iip
@@ -337,8 +340,12 @@ function remake(prob::SDEProblem;
337340
newu0, newp = updated_u0_p(prob, u0, p, tspan[1]; interpret_symbolicmap, use_defaults)
338341

339342
if build_initializeprob
340-
initialization_data = remake_initialization_data(
341-
prob.f.sys, prob.f, u0, tspan[1], p, newu0, newp)
343+
if f !== missing && has_initialization_data(f)
344+
initialization_data = f.initialization_data
345+
else
346+
initialization_data = remake_initialization_data(
347+
prob.f.sys, prob.f, u0, tspan[1], p, newu0, newp)
348+
end
342349
else
343350
initialization_data = nothing
344351
end
@@ -437,8 +444,12 @@ function remake(prob::DDEProblem; f = missing, h = missing, u0 = missing,
437444
newu0, newp = updated_u0_p(prob, u0, p, tspan[1]; interpret_symbolicmap, use_defaults)
438445

439446
if build_initializeprob
440-
initialization_data = remake_initialization_data(
441-
prob.f.sys, prob.f, u0, tspan[1], p, newu0, newp)
447+
if f !== missing && has_initialization_data(f)
448+
initialization_data = f.initialization_data
449+
else
450+
initialization_data = remake_initialization_data(
451+
prob.f.sys, prob.f, u0, tspan[1], p, newu0, newp)
452+
end
442453
else
443454
initialization_data = nothing
444455
end
@@ -535,8 +546,12 @@ function remake(prob::SDDEProblem;
535546
newu0, newp = updated_u0_p(prob, u0, p, tspan[1]; interpret_symbolicmap, use_defaults)
536547

537548
if build_initializeprob
538-
initialization_data = remake_initialization_data(
539-
prob.f.sys, prob.f, u0, tspan[1], p, newu0, newp)
549+
if f !== missing && has_initialization_data(f)
550+
initialization_data = f.initialization_data
551+
else
552+
initialization_data = remake_initialization_data(
553+
prob.f.sys, prob.f, u0, tspan[1], p, newu0, newp)
554+
end
540555
else
541556
initialization_data = nothing
542557
end
@@ -681,8 +696,12 @@ function remake(prob::NonlinearProblem;
681696
newu0, newp = updated_u0_p(prob, u0, p; interpret_symbolicmap, use_defaults)
682697

683698
if build_initializeprob
684-
initialization_data = remake_initialization_data(
685-
prob.f.sys, prob.f, u0, nothing, p, newu0, newp)
699+
if f !== missing && has_initialization_data(f)
700+
initialization_data = f.initialization_data
701+
else
702+
initialization_data = remake_initialization_data(
703+
prob.f.sys, prob.f, u0, nothing, p, newu0, newp)
704+
end
686705
else
687706
initialization_data = nothing
688707
end
@@ -746,20 +765,24 @@ function remake(prob::NonlinearLeastSquaresProblem; f = missing, u0 = missing, p
746765
newu0, newp = updated_u0_p(prob, u0, p; interpret_symbolicmap, use_defaults)
747766

748767
if build_initializeprob
749-
initialization_data = remake_initialization_data(
750-
prob.f.sys, prob.f, u0, nothing, p, newu0, newp)
768+
if f !== missing && has_initialization_data(f)
769+
initialization_data = f.initialization_data
770+
else
771+
initialization_data = remake_initialization_data(
772+
prob.f.sys, prob.f, u0, nothing, p, newu0, newp)
773+
end
751774
else
752775
initialization_data = nothing
753776
end
754777

755778
f = remake(prob.f; f, initialization_data)
756779

757780
prob = if kwargs === missing
758-
return NonlinearLeastSquaresProblem{isinplace(prob)}(;
781+
prob = NonlinearLeastSquaresProblem{isinplace(prob)}(;
759782
f, u0 = newu0, p = newp, prob.kwargs...,
760783
_kwargs...)
761784
else
762-
return NonlinearLeastSquaresProblem{isinplace(prob)}(;
785+
prob = NonlinearLeastSquaresProblem{isinplace(prob)}(;
763786
f, u0 = newu0, p = newp, kwargs...)
764787
end
765788

0 commit comments

Comments
 (0)