@@ -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
191197Re-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"""
196206function 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
201211end
202212
203213"""
0 commit comments