@@ -123,9 +123,8 @@ function remake(prob::ODEProblem; f = missing,
123
123
iip = isinplace (prob)
124
124
125
125
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)
129
128
if specialization (prob. f) === FunctionWrapperSpecialize
130
129
ptspan = promote_tspan (tspan)
131
130
if iip
@@ -134,14 +133,14 @@ function remake(prob::ODEProblem; f = missing,
134
133
unwrapped_f (prob. f. f),
135
134
(newu0, newu0, newp,
136
135
ptspan[1 ]));
137
- initializeprob, initializeprobmap)
136
+ initializeprob, initializeprobmap, initializeprobpmap )
138
137
else
139
138
_f = ODEFunction {iip, FunctionWrapperSpecialize} (
140
139
wrapfun_oop (
141
140
unwrapped_f (prob. f. f),
142
141
(newu0, newp,
143
142
ptspan[1 ]));
144
- initializeprob, initializeprobmap)
143
+ initializeprob, initializeprobmap, initializeprobpmap )
145
144
end
146
145
else
147
146
_f = prob. f
@@ -159,6 +158,13 @@ function remake(prob::ODEProblem; f = missing,
159
158
_f = parameterless_type (_f){
160
159
iip, specialization (_f), map (typeof, props)... }(props... )
161
160
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
162
168
end
163
169
elseif f isa AbstractODEFunction
164
170
_f = f
@@ -189,15 +195,19 @@ end
189
195
remake_initializeprob(sys, scimlfn, u0, t0, p)
190
196
191
197
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.
195
205
"""
196
206
function remake_initializeprob (sys, scimlfn, u0, t0, p)
197
207
if ! has_initializeprob (scimlfn)
198
- return nothing , nothing
208
+ return nothing , nothing , nothing
199
209
end
200
- return scimlfn. initializeprob, scimlfn. initializeprobmap
210
+ return scimlfn. initializeprob, scimlfn. initializeprobmap, scimlfn . initializeprobpmap
201
211
end
202
212
203
213
"""
0 commit comments