@@ -1524,7 +1524,7 @@ automatically symbolically generating the Jacobian and more from the
1524
1524
numerically-defined functions.
1525
1525
"""
1526
1526
struct DAEFunction{iip, specialize, F, Ta, Tt, TJ, JVP, VJP, JP, SP, TW, TWt, TPJ, O, TCV,
1527
- SYS} < :
1527
+ SYS, IProb, IProbMap } < :
1528
1528
AbstractDAEFunction{iip}
1529
1529
f:: F
1530
1530
analytic:: Ta
@@ -1540,6 +1540,8 @@ struct DAEFunction{iip, specialize, F, Ta, Tt, TJ, JVP, VJP, JP, SP, TW, TWt, TP
1540
1540
observed:: O
1541
1541
colorvec:: TCV
1542
1542
sys:: SYS
1543
+ initializeprob:: IProb
1544
+ initializeprobmap:: IProbMap
1543
1545
end
1544
1546
1545
1547
TruncatedStacktraces. @truncate_stacktrace DAEFunction 1 2
@@ -2279,8 +2281,8 @@ function ODEFunction{iip, specialize}(f;
2279
2281
DEFAULT_OBSERVED,
2280
2282
colorvec = __has_colorvec (f) ? f. colorvec : nothing ,
2281
2283
sys = __has_sys (f) ? f. sys : nothing ,
2282
- initializeprob = nothing ,
2283
- initializeprobmap = nothing
2284
+ initializeprob = _has_initializeprob (f) ? f . sys : nothing ,
2285
+ initializeprobmap = _has_initializeprobmap (f) ? f . sys : nothing
2284
2286
) where {iip,
2285
2287
specialize,
2286
2288
}
@@ -2328,7 +2330,7 @@ function ODEFunction{iip, specialize}(f;
2328
2330
2329
2331
sys = something (sys, SymbolCache (syms, paramsyms, indepsym))
2330
2332
2331
- @assert typeof (initializeprob) <: Union{NonlinearProblem, NonlinearLeastSquaresProblem}
2333
+ @assert typeof (initializeprob) <: Union{Nothing, NonlinearProblem, NonlinearLeastSquaresProblem}
2332
2334
2333
2335
if specialize === NoSpecialize
2334
2336
ODEFunction{iip, specialize,
@@ -3189,7 +3191,9 @@ function DAEFunction{iip, specialize}(f;
3189
3191
observed = __has_observed (f) ? f. observed :
3190
3192
DEFAULT_OBSERVED,
3191
3193
colorvec = __has_colorvec (f) ? f. colorvec : nothing ,
3192
- sys = __has_sys (f) ? f. sys : nothing ) where {iip,
3194
+ sys = __has_sys (f) ? f. sys : nothing ,
3195
+ initializeprob = _has_initializeprob (f) ? f. sys : nothing ,
3196
+ initializeprobmap = _has_initializeprobmap (f) ? f. sys : nothing ) where {iip,
3193
3197
specialize
3194
3198
}
3195
3199
if jac === nothing && isa (jac_prototype, AbstractSciMLOperator)
@@ -3221,14 +3225,16 @@ function DAEFunction{iip, specialize}(f;
3221
3225
_f = prepare_function (f)
3222
3226
sys = sys_or_symbolcache (sys, syms, paramsyms, indepsym)
3223
3227
3228
+ @assert typeof (initializeprob) <: Union{Nothing, NonlinearProblem, NonlinearLeastSquaresProblem}
3229
+
3224
3230
if specialize === NoSpecialize
3225
3231
DAEFunction{iip, specialize, Any, Any, Any,
3226
3232
Any, Any, Any, Any, Any,
3227
3233
Any, Any, Any,
3228
3234
Any, typeof (_colorvec), Any}(_f, analytic, tgrad, jac, jvp,
3229
3235
vjp, jac_prototype, sparsity,
3230
3236
Wfact, Wfact_t, paramjac, observed,
3231
- _colorvec, sys)
3237
+ _colorvec, sys, initializeprob, initializeprobmap )
3232
3238
else
3233
3239
DAEFunction{iip, specialize, typeof (_f), typeof (analytic), typeof (tgrad),
3234
3240
typeof (jac), typeof (jvp), typeof (vjp), typeof (jac_prototype),
@@ -3238,7 +3244,7 @@ function DAEFunction{iip, specialize}(f;
3238
3244
typeof (sys)}(_f, analytic, tgrad, jac, jvp, vjp,
3239
3245
jac_prototype, sparsity, Wfact, Wfact_t,
3240
3246
paramjac, observed,
3241
- _colorvec, sys)
3247
+ _colorvec, sys, initializeprob, initializeprobmap )
3242
3248
end
3243
3249
end
3244
3250
@@ -3957,6 +3963,8 @@ __has_colorvec(f) = isdefined(f, :colorvec)
3957
3963
__has_sys (f) = isdefined (f, :sys )
3958
3964
__has_analytic_full (f) = isdefined (f, :analytic_full )
3959
3965
__has_resid_prototype (f) = isdefined (f, :resid_prototype )
3966
+ __has_initializeprob (f) = isdefined (f, :initializeprob )
3967
+ __has_initializeprobmap (f) = isdefined (f, :initializeprobmap )
3960
3968
3961
3969
# compatibility
3962
3970
has_invW (f:: AbstractSciMLFunction ) = false
@@ -3969,6 +3977,9 @@ has_Wfact(f::AbstractSciMLFunction) = __has_Wfact(f) && f.Wfact !== nothing
3969
3977
has_Wfact_t (f:: AbstractSciMLFunction ) = __has_Wfact_t (f) && f. Wfact_t != = nothing
3970
3978
has_paramjac (f:: AbstractSciMLFunction ) = __has_paramjac (f) && f. paramjac != = nothing
3971
3979
has_sys (f:: AbstractSciMLFunction ) = __has_sys (f) && f. sys != = nothing
3980
+ has_initializeprob (f:: AbstractSciMLFunction ) = __has_initializeprob (f) && f. initializeprob != = nothing
3981
+ has_initializeprobmap (f:: AbstractSciMLFunction ) = __has_initializeprobmap (f) && f. initializeprobmap != = nothing
3982
+
3972
3983
function has_syms (f:: AbstractSciMLFunction )
3973
3984
if __has_syms (f)
3974
3985
f. syms != = nothing
0 commit comments