Skip to content

Commit 28c144e

Browse files
refactor: use new remake(::SciMLFunction) in remake(::ODEProblem)
1 parent 914b2b1 commit 28c144e

File tree

1 file changed

+9
-36
lines changed

1 file changed

+9
-36
lines changed

src/remake.jl

Lines changed: 9 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -216,53 +216,26 @@ function remake(prob::ODEProblem; f = missing,
216216
initialization_data = nothing
217217
end
218218

219-
if f === missing
220-
if specialization(prob.f) === FunctionWrapperSpecialize
221-
ptspan = promote_tspan(tspan)
222-
if iip
223-
_f = ODEFunction{iip, FunctionWrapperSpecialize}(
224-
wrapfun_iip(
225-
unwrapped_f(prob.f.f),
226-
(newu0, newu0, newp,
227-
ptspan[1])); initialization_data)
228-
else
229-
_f = ODEFunction{iip, FunctionWrapperSpecialize}(
230-
wrapfun_oop(
231-
unwrapped_f(prob.f.f),
232-
(newu0, newp,
233-
ptspan[1])); initialization_data)
234-
end
235-
else
236-
_f = prob.f
237-
if __has_initialization_data(_f)
238-
props = getproperties(_f)
239-
@reset props.initialization_data = initialization_data
240-
props = values(props)
241-
_f = parameterless_type(_f){iip, specialization(_f), map(typeof, props)...}(props...)
242-
end
243-
end
244-
elseif f isa AbstractODEFunction
245-
_f = f
246-
elseif specialization(prob.f) === FunctionWrapperSpecialize
219+
f = coalesce(f, prob.f)
220+
f = remake(prob.f; f, initialization_data)
221+
222+
if specialization(f) === FunctionWrapperSpecialize
247223
ptspan = promote_tspan(tspan)
248224
if iip
249-
_f = ODEFunction{iip, FunctionWrapperSpecialize}(wrapfun_iip(f,
250-
(newu0, newu0, newp,
251-
ptspan[1])))
225+
f = remake(f; f = wrapfun_iip(unwrapped_f(f.f), (newu0, newu0, newp, ptspan[1])))
252226
else
253-
_f = ODEFunction{iip, FunctionWrapperSpecialize}(wrapfun_oop(f,
254-
(newu0, newp, ptspan[1])))
227+
f = remake(f; f = wrapfun_oop(unwrapped_f(f.f), (newu0, newu0, newp, ptspan[1])))
255228
end
256229
else
257-
_f = ODEFunction{isinplace(prob), specialization(prob.f)}(f)
230+
_f = f
258231
end
259232

260233
prob = if kwargs === missing
261-
ODEProblem{isinplace(prob)}(
234+
ODEProblem{iip}(
262235
_f, newu0, tspan, newp, prob.problem_type; prob.kwargs...,
263236
_kwargs...)
264237
else
265-
ODEProblem{isinplace(prob)}(_f, newu0, tspan, newp, prob.problem_type; kwargs...)
238+
ODEProblem{iip}(_f, newu0, tspan, newp, prob.problem_type; kwargs...)
266239
end
267240

268241
if lazy_initialization === nothing

0 commit comments

Comments
 (0)