@@ -402,7 +402,7 @@ numerically-defined functions.
402
402
"""
403
403
struct ODEFunction{iip, specialize, F, TMM, Ta, Tt, TJ, JVP, VJP, JP, SP, TW, TWt, WP, TPJ,
404
404
O, TCV,
405
- SYS} <: AbstractODEFunction{iip}
405
+ SYS, IProb, IProbMap } <: AbstractODEFunction{iip}
406
406
f:: F
407
407
mass_matrix:: TMM
408
408
analytic:: Ta
@@ -419,6 +419,8 @@ struct ODEFunction{iip, specialize, F, TMM, Ta, Tt, TJ, JVP, VJP, JP, SP, TW, TW
419
419
observed:: O
420
420
colorvec:: TCV
421
421
sys:: SYS
422
+ initializeprob:: IProb
423
+ initializeprobmap:: IProbMap
422
424
end
423
425
424
426
TruncatedStacktraces. @truncate_stacktrace ODEFunction 1 2
@@ -1522,7 +1524,7 @@ automatically symbolically generating the Jacobian and more from the
1522
1524
numerically-defined functions.
1523
1525
"""
1524
1526
struct DAEFunction{iip, specialize, F, Ta, Tt, TJ, JVP, VJP, JP, SP, TW, TWt, TPJ, O, TCV,
1525
- SYS} < :
1527
+ SYS, IProb, IProbMap } < :
1526
1528
AbstractDAEFunction{iip}
1527
1529
f:: F
1528
1530
analytic:: Ta
@@ -1538,6 +1540,8 @@ struct DAEFunction{iip, specialize, F, Ta, Tt, TJ, JVP, VJP, JP, SP, TW, TWt, TP
1538
1540
observed:: O
1539
1541
colorvec:: TCV
1540
1542
sys:: SYS
1543
+ initializeprob:: IProb
1544
+ initializeprobmap:: IProbMap
1541
1545
end
1542
1546
1543
1547
TruncatedStacktraces. @truncate_stacktrace DAEFunction 1 2
@@ -2276,7 +2280,10 @@ function ODEFunction{iip, specialize}(f;
2276
2280
observed = __has_observed (f) ? f. observed :
2277
2281
DEFAULT_OBSERVED,
2278
2282
colorvec = __has_colorvec (f) ? f. colorvec : nothing ,
2279
- sys = __has_sys (f) ? f. sys : nothing ) where {iip,
2283
+ sys = __has_sys (f) ? f. sys : nothing ,
2284
+ initializeprob = __has_initializeprob (f) ? f. sys : nothing ,
2285
+ initializeprobmap = __has_initializeprobmap (f) ? f. sys : nothing
2286
+ ) where {iip,
2280
2287
specialize
2281
2288
}
2282
2289
if mass_matrix === I && f isa Tuple
@@ -2321,18 +2328,22 @@ function ODEFunction{iip, specialize}(f;
2321
2328
2322
2329
_f = prepare_function (f)
2323
2330
2324
- sys = sys_or_symbolcache (sys, syms, paramsyms, indepsym)
2331
+ sys = something (sys, SymbolCache (syms, paramsyms, indepsym))
2332
+
2333
+ @assert typeof (initializeprob) < :
2334
+ Union{Nothing, NonlinearProblem, NonlinearLeastSquaresProblem}
2335
+
2325
2336
if specialize === NoSpecialize
2326
2337
ODEFunction{iip, specialize,
2327
2338
Any, Any, Any, Any,
2328
2339
Any, Any, Any, typeof (jac_prototype),
2329
2340
typeof (sparsity), Any, Any, typeof (W_prototype), Any,
2330
2341
Any,
2331
2342
typeof (_colorvec),
2332
- typeof (sys)}(_f, mass_matrix, analytic, tgrad, jac,
2343
+ typeof (sys), Any, Any }(_f, mass_matrix, analytic, tgrad, jac,
2333
2344
jvp, vjp, jac_prototype, sparsity, Wfact,
2334
2345
Wfact_t, W_prototype, paramjac,
2335
- observed, _colorvec, sys)
2346
+ observed, _colorvec, sys, initializeprob, initializeprobmap )
2336
2347
elseif specialize === false
2337
2348
ODEFunction{iip, FunctionWrapperSpecialize,
2338
2349
typeof (_f), typeof (mass_matrix), typeof (analytic), typeof (tgrad),
@@ -2341,10 +2352,11 @@ function ODEFunction{iip, specialize}(f;
2341
2352
typeof (paramjac),
2342
2353
typeof (observed),
2343
2354
typeof (_colorvec),
2344
- typeof (sys)}(_f, mass_matrix, analytic, tgrad, jac,
2355
+ typeof (sys), typeof (initializeprob),
2356
+ typeof (initializeprobmap)}(_f, mass_matrix, analytic, tgrad, jac,
2345
2357
jvp, vjp, jac_prototype, sparsity, Wfact,
2346
2358
Wfact_t, W_prototype, paramjac,
2347
- observed, _colorvec, sys)
2359
+ observed, _colorvec, sys, initializeprob, initializeprobmap )
2348
2360
else
2349
2361
ODEFunction{iip, specialize,
2350
2362
typeof (_f), typeof (mass_matrix), typeof (analytic), typeof (tgrad),
@@ -2353,10 +2365,11 @@ function ODEFunction{iip, specialize}(f;
2353
2365
typeof (paramjac),
2354
2366
typeof (observed),
2355
2367
typeof (_colorvec),
2356
- typeof (sys)}(_f, mass_matrix, analytic, tgrad, jac,
2368
+ typeof (sys), typeof (initializeprob),
2369
+ typeof (initializeprobmap)}(_f, mass_matrix, analytic, tgrad, jac,
2357
2370
jvp, vjp, jac_prototype, sparsity, Wfact,
2358
2371
Wfact_t, W_prototype, paramjac,
2359
- observed, _colorvec, sys)
2372
+ observed, _colorvec, sys, initializeprob, initializeprobmap )
2360
2373
end
2361
2374
end
2362
2375
@@ -2373,21 +2386,23 @@ function unwrapped_f(f::ODEFunction, newf = unwrapped_f(f.f))
2373
2386
Any, Any, Any, Any, typeof (f. jac_prototype),
2374
2387
typeof (f. sparsity), Any, Any, Any,
2375
2388
Any, typeof (f. colorvec),
2376
- typeof (f. sys)}(newf, f. mass_matrix, f. analytic, f. tgrad, f. jac,
2389
+ typeof (f. sys), Any, Any }(newf, f. mass_matrix, f. analytic, f. tgrad, f. jac,
2377
2390
f. jvp, f. vjp, f. jac_prototype, f. sparsity, f. Wfact,
2378
2391
f. Wfact_t, f. W_prototype, f. paramjac,
2379
- f. observed, f. colorvec, f. sys)
2392
+ f. observed, f. colorvec, f. sys, f . initializeprob, f . initializeprobmap )
2380
2393
else
2381
2394
ODEFunction{isinplace (f), specialization (f), typeof (newf), typeof (f. mass_matrix),
2382
2395
typeof (f. analytic), typeof (f. tgrad),
2383
2396
typeof (f. jac), typeof (f. jvp), typeof (f. vjp), typeof (f. jac_prototype),
2384
2397
typeof (f. sparsity), typeof (f. Wfact), typeof (f. Wfact_t), typeof (f. W_prototype),
2385
2398
typeof (f. paramjac),
2386
2399
typeof (f. observed), typeof (f. colorvec),
2387
- typeof (f. sys)}(newf, f. mass_matrix, f. analytic, f. tgrad, f. jac,
2400
+ typeof (f. sys), typeof (f. initializeprob),
2401
+ typeof (f. initializeprobmap)}(newf, f. mass_matrix, f. analytic, f. tgrad, f. jac,
2388
2402
f. jvp, f. vjp, f. jac_prototype, f. sparsity, f. Wfact,
2389
2403
f. Wfact_t, f. W_prototype, f. paramjac,
2390
- f. observed, f. colorvec, f. sys)
2404
+ f. observed, f. colorvec, f. sys, f. initializeprob,
2405
+ f. initializeprobmap)
2391
2406
end
2392
2407
end
2393
2408
@@ -3177,7 +3192,9 @@ function DAEFunction{iip, specialize}(f;
3177
3192
observed = __has_observed (f) ? f. observed :
3178
3193
DEFAULT_OBSERVED,
3179
3194
colorvec = __has_colorvec (f) ? f. colorvec : nothing ,
3180
- sys = __has_sys (f) ? f. sys : nothing ) where {iip,
3195
+ sys = __has_sys (f) ? f. sys : nothing ,
3196
+ initializeprob = __has_initializeprob (f) ? f. sys : nothing ,
3197
+ initializeprobmap = __has_initializeprobmap (f) ? f. sys : nothing ) where {iip,
3181
3198
specialize
3182
3199
}
3183
3200
if jac === nothing && isa (jac_prototype, AbstractSciMLOperator)
@@ -3209,24 +3226,28 @@ function DAEFunction{iip, specialize}(f;
3209
3226
_f = prepare_function (f)
3210
3227
sys = sys_or_symbolcache (sys, syms, paramsyms, indepsym)
3211
3228
3229
+ @assert typeof (initializeprob) < :
3230
+ Union{Nothing, NonlinearProblem, NonlinearLeastSquaresProblem}
3231
+
3212
3232
if specialize === NoSpecialize
3213
3233
DAEFunction{iip, specialize, Any, Any, Any,
3214
3234
Any, Any, Any, Any, Any,
3215
3235
Any, Any, Any,
3216
- Any, typeof (_colorvec), Any}(_f, analytic, tgrad, jac, jvp,
3236
+ Any, typeof (_colorvec), Any, Any, Any }(_f, analytic, tgrad, jac, jvp,
3217
3237
vjp, jac_prototype, sparsity,
3218
3238
Wfact, Wfact_t, paramjac, observed,
3219
- _colorvec, sys)
3239
+ _colorvec, sys, initializeprob, initializeprobmap )
3220
3240
else
3221
3241
DAEFunction{iip, specialize, typeof (_f), typeof (analytic), typeof (tgrad),
3222
3242
typeof (jac), typeof (jvp), typeof (vjp), typeof (jac_prototype),
3223
3243
typeof (sparsity), typeof (Wfact), typeof (Wfact_t),
3224
3244
typeof (paramjac),
3225
3245
typeof (observed), typeof (_colorvec),
3226
- typeof (sys)}(_f, analytic, tgrad, jac, jvp, vjp,
3246
+ typeof (sys), typeof (initializeprob), typeof (initializeprobmap)}(
3247
+ _f, analytic, tgrad, jac, jvp, vjp,
3227
3248
jac_prototype, sparsity, Wfact, Wfact_t,
3228
3249
paramjac, observed,
3229
- _colorvec, sys)
3250
+ _colorvec, sys, initializeprob, initializeprobmap )
3230
3251
end
3231
3252
end
3232
3253
@@ -3945,6 +3966,8 @@ __has_colorvec(f) = isdefined(f, :colorvec)
3945
3966
__has_sys (f) = isdefined (f, :sys )
3946
3967
__has_analytic_full (f) = isdefined (f, :analytic_full )
3947
3968
__has_resid_prototype (f) = isdefined (f, :resid_prototype )
3969
+ __has_initializeprob (f) = isdefined (f, :initializeprob )
3970
+ __has_initializeprobmap (f) = isdefined (f, :initializeprobmap )
3948
3971
3949
3972
# compatibility
3950
3973
has_invW (f:: AbstractSciMLFunction ) = false
@@ -3957,6 +3980,13 @@ has_Wfact(f::AbstractSciMLFunction) = __has_Wfact(f) && f.Wfact !== nothing
3957
3980
has_Wfact_t (f:: AbstractSciMLFunction ) = __has_Wfact_t (f) && f. Wfact_t != = nothing
3958
3981
has_paramjac (f:: AbstractSciMLFunction ) = __has_paramjac (f) && f. paramjac != = nothing
3959
3982
has_sys (f:: AbstractSciMLFunction ) = __has_sys (f) && f. sys != = nothing
3983
+ function has_initializeprob (f:: AbstractSciMLFunction )
3984
+ __has_initializeprob (f) && f. initializeprob != = nothing
3985
+ end
3986
+ function has_initializeprobmap (f:: AbstractSciMLFunction )
3987
+ __has_initializeprobmap (f) && f. initializeprobmap != = nothing
3988
+ end
3989
+
3960
3990
function has_syms (f:: AbstractSciMLFunction )
3961
3991
if __has_syms (f)
3962
3992
f. syms != = nothing
0 commit comments