Skip to content

Commit bad69a2

Browse files
refactor: change remake_initializeprob to also return initializeprobpmap
1 parent 991e559 commit bad69a2

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/remake.jl

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,8 @@ function remake(prob::ODEProblem; f = missing,
123123
iip = isinplace(prob)
124124

125125
if f === missing
126-
initializeprob, initializeprobmap = remake_initializeprob(
127-
prob.f.sys, prob.f, u0 === missing ? newu0 : u0,
128-
tspan[1], p === missing ? newp : p)
126+
initializeprob, initializeprobmap, initializeprobpmap = remake_initializeprob(
127+
prob.f.sys, prob.f, u0, tspan[1], p)
129128
if specialization(prob.f) === FunctionWrapperSpecialize
130129
ptspan = promote_tspan(tspan)
131130
if iip
@@ -134,14 +133,14 @@ function remake(prob::ODEProblem; f = missing,
134133
unwrapped_f(prob.f.f),
135134
(newu0, newu0, newp,
136135
ptspan[1]));
137-
initializeprob, initializeprobmap)
136+
initializeprob, initializeprobmap, initializeprobpmap)
138137
else
139138
_f = ODEFunction{iip, FunctionWrapperSpecialize}(
140139
wrapfun_oop(
141140
unwrapped_f(prob.f.f),
142141
(newu0, newp,
143142
ptspan[1]));
144-
initializeprob, initializeprobmap)
143+
initializeprob, initializeprobmap, initializeprobpmap)
145144
end
146145
else
147146
_f = prob.f
@@ -159,6 +158,13 @@ function remake(prob::ODEProblem; f = missing,
159158
_f = parameterless_type(_f){
160159
iip, specialization(_f), map(typeof, props)...}(props...)
161160
end
161+
if __has_initializeprobpmap(_f)
162+
props = getproperties(_f)
163+
@reset props.initializeprobpmap = initializeprobpmap
164+
props = values(props)
165+
_f = parameterless_type(_f){
166+
iip, specialization(_f), map(typeof, props)...}(props...)
167+
end
162168
end
163169
elseif f isa AbstractODEFunction
164170
_f = f
@@ -189,15 +195,19 @@ end
189195
remake_initializeprob(sys, scimlfn, u0, t0, p)
190196
191197
Re-create the initialization problem present in the function `scimlfn`, using the
192-
associated system `sys`, and the new values of `u0`, initial time `t0` and `p`. By
193-
default, returns `nothing, nothing` if `scimlfn` does not have an initialization
194-
problem, and `scimlfn.initializeprob, scimlfn.initializeprobmap` if it does.
198+
associated system `sys`, and the user-provided new values of `u0`, initial time `t0` and
199+
`p`. By default, returns `nothing, nothing, nothing` if `scimlfn` does not have an
200+
initialization problem, and
201+
`scimlfn.initializeprob, scimlfn.initializeprobmap, scimlfn.initializeprobpmap` if it
202+
does.
203+
204+
Note that `u0` or `p` may be `missing` if the user does not provide a value for them.
195205
"""
196206
function remake_initializeprob(sys, scimlfn, u0, t0, p)
197207
if !has_initializeprob(scimlfn)
198-
return nothing, nothing
208+
return nothing, nothing, nothing
199209
end
200-
return scimlfn.initializeprob, scimlfn.initializeprobmap
210+
return scimlfn.initializeprob, scimlfn.initializeprobmap, scimlfn.initializeprobpmap
201211
end
202212

203213
"""

0 commit comments

Comments
 (0)