@@ -118,7 +118,7 @@ function remake(prob::ODEProblem; f = missing,
118118 tspan = prob. tspan
119119 end
120120
121- newu0, newp = updated_u0_p (prob, u0, p; interpret_symbolicmap, use_defaults)
121+ newu0, newp = updated_u0_p (prob, u0, p, tspan[ 1 ] ; interpret_symbolicmap, use_defaults)
122122
123123 iip = isinplace (prob)
124124
@@ -214,7 +214,7 @@ function remake(prob::BVProblem{uType, tType, iip, nlls}; f = missing, bc = miss
214214 tspan = prob. tspan
215215 end
216216
217- u0, p = updated_u0_p (prob, u0, p; interpret_symbolicmap, use_defaults)
217+ u0, p = updated_u0_p (prob, u0, p, tspan[ 1 ] ; interpret_symbolicmap, use_defaults)
218218
219219 if problem_type === missing
220220 problem_type = prob. problem_type
@@ -280,7 +280,7 @@ function remake(prob::SDEProblem;
280280 tspan = prob. tspan
281281 end
282282
283- u0, p = updated_u0_p (prob, u0, p; interpret_symbolicmap, use_defaults)
283+ u0, p = updated_u0_p (prob, u0, p, tspan[ 1 ] ; interpret_symbolicmap, use_defaults)
284284
285285 if noise === missing
286286 noise = prob. noise
@@ -496,35 +496,35 @@ anydict(d) = Dict{Any, Any}(d)
496496anydict () = Dict {Any, Any} ()
497497
498498function _updated_u0_p_internal (
499- prob, :: Missing , :: Missing ; interpret_symbolicmap = true , use_defaults = false )
499+ prob, :: Missing , :: Missing , t0 ; interpret_symbolicmap = true , use_defaults = false )
500500 return state_values (prob), parameter_values (prob)
501501end
502502function _updated_u0_p_internal (
503- prob, :: Missing , p; interpret_symbolicmap = true , use_defaults = false )
503+ prob, :: Missing , p, t0 ; interpret_symbolicmap = true , use_defaults = false )
504504 u0 = state_values (prob)
505505
506506 if p isa AbstractArray && isempty (p)
507507 return _updated_u0_p_internal (
508- prob, u0, parameter_values (prob); interpret_symbolicmap)
508+ prob, u0, parameter_values (prob), t0 ; interpret_symbolicmap)
509509 end
510510 eltype (p) <: Pair && interpret_symbolicmap || return u0, p
511511 defs = default_values (prob)
512512 p = fill_p (prob, anydict (p); defs, use_defaults)
513- return _updated_u0_p_symmap (prob, u0, Val (false ), p, Val (true ))
513+ return _updated_u0_p_symmap (prob, u0, Val (false ), p, Val (true ), t0 )
514514end
515515
516516function _updated_u0_p_internal (
517- prob, u0, :: Missing ; interpret_symbolicmap = true , use_defaults = false )
517+ prob, u0, :: Missing , t0 ; interpret_symbolicmap = true , use_defaults = false )
518518 p = parameter_values (prob)
519519
520520 eltype (u0) <: Pair || return u0, p
521521 defs = default_values (prob)
522522 u0 = fill_u0 (prob, anydict (u0); defs, use_defaults)
523- return _updated_u0_p_symmap (prob, u0, Val (true ), p, Val (false ))
523+ return _updated_u0_p_symmap (prob, u0, Val (true ), p, Val (false ), t0 )
524524end
525525
526526function _updated_u0_p_internal (
527- prob, u0, p; interpret_symbolicmap = true , use_defaults = false )
527+ prob, u0, p, t0 ; interpret_symbolicmap = true , use_defaults = false )
528528 isu0symbolic = eltype (u0) <: Pair
529529 ispsymbolic = eltype (p) <: Pair && interpret_symbolicmap
530530
@@ -538,7 +538,7 @@ function _updated_u0_p_internal(
538538 if ispsymbolic
539539 p = fill_p (prob, anydict (p); defs, use_defaults)
540540 end
541- return _updated_u0_p_symmap (prob, u0, Val (isu0symbolic), p, Val (ispsymbolic))
541+ return _updated_u0_p_symmap (prob, u0, Val (isu0symbolic), p, Val (ispsymbolic), t0 )
542542end
543543
544544function fill_u0 (prob, u0; defs = nothing , use_defaults = false )
@@ -579,7 +579,7 @@ function fill_p(prob, p; defs = nothing, use_defaults = false)
579579 return merge (p, newvals)
580580end
581581
582- function _updated_u0_p_symmap (prob, u0, :: Val{true} , p, :: Val{false} )
582+ function _updated_u0_p_symmap (prob, u0, :: Val{true} , p, :: Val{false} , t0 )
583583 isdep = any (symbolic_type (v) != = NotSymbolic () for (_, v) in u0)
584584 isdep || return remake_buffer (prob, state_values (prob), u0), p
585585
@@ -592,13 +592,13 @@ function _updated_u0_p_symmap(prob, u0, ::Val{true}, p, ::Val{false})
592592 # FIXME : need to provide `u` since the observed function expects it.
593593 # This is sort of an implicit dependency on MTK. The values of `u` won't actually be
594594 # used, since any state symbols in the expression were substituted out earlier.
595- temp_state = ProblemState (; u = state_values (prob), p = p)
595+ temp_state = ProblemState (; u = state_values (prob), p = p, t = t0 )
596596 u0 = anydict (k => symbolic_type (v) === NotSymbolic () ? v : getu (prob, v)(temp_state)
597597 for (k, v) in u0)
598598 return remake_buffer (prob, state_values (prob), u0), p
599599end
600600
601- function _updated_u0_p_symmap (prob, u0, :: Val{false} , p, :: Val{true} )
601+ function _updated_u0_p_symmap (prob, u0, :: Val{false} , p, :: Val{true} , t0 )
602602 isdep = any (symbolic_type (v) != = NotSymbolic () for (_, v) in p)
603603 isdep || return u0, remake_buffer (prob, parameter_values (prob), p)
604604
@@ -611,13 +611,13 @@ function _updated_u0_p_symmap(prob, u0, ::Val{false}, p, ::Val{true})
611611 # FIXME : need to provide `p` since the observed function expects an `MTKParameters`
612612 # this is sort of an implicit dependency on MTK. The values of `p` won't actually be
613613 # used, since any parameter symbols in the expression were substituted out earlier.
614- temp_state = ProblemState (; u = u0, p = parameter_values (prob))
614+ temp_state = ProblemState (; u = u0, p = parameter_values (prob), t = t0 )
615615 p = anydict (k => symbolic_type (v) === NotSymbolic () ? v : getu (prob, v)(temp_state)
616616 for (k, v) in p)
617617 return u0, remake_buffer (prob, parameter_values (prob), p)
618618end
619619
620- function _updated_u0_p_symmap (prob, u0, :: Val{true} , p, :: Val{true} )
620+ function _updated_u0_p_symmap (prob, u0, :: Val{true} , p, :: Val{true} , t0 )
621621 isu0dep = any (symbolic_type (v) != = NotSymbolic () for (_, v) in u0)
622622 ispdep = any (symbolic_type (v) != = NotSymbolic () for (_, v) in p)
623623
@@ -627,11 +627,11 @@ function _updated_u0_p_symmap(prob, u0, ::Val{true}, p, ::Val{true})
627627 end
628628 if ! isu0dep
629629 u0 = remake_buffer (prob, state_values (prob), u0)
630- return _updated_u0_p_symmap (prob, u0, Val (false ), p, Val (true ))
630+ return _updated_u0_p_symmap (prob, u0, Val (false ), p, Val (true ), t0 )
631631 end
632632 if ! ispdep
633633 p = remake_buffer (prob, parameter_values (prob), p)
634- return _updated_u0_p_symmap (prob, u0, Val (true ), p, Val (false ))
634+ return _updated_u0_p_symmap (prob, u0, Val (true ), p, Val (false ), t0 )
635635 end
636636
637637 varmap = merge (u0, p)
@@ -643,7 +643,7 @@ function _updated_u0_p_symmap(prob, u0, ::Val{true}, p, ::Val{true})
643643 remake_buffer (prob, parameter_values (prob), p)
644644end
645645
646- function updated_u0_p (prob, u0, p; interpret_symbolicmap = true , use_defaults = false )
646+ function updated_u0_p (prob, u0, p, t0 = nothing ; interpret_symbolicmap = true , use_defaults = false )
647647 if u0 === missing && p === missing
648648 return state_values (prob), parameter_values (prob)
649649 end
@@ -662,7 +662,7 @@ function updated_u0_p(prob, u0, p; interpret_symbolicmap = true, use_defaults =
662662 return (u0 === missing ? state_values (prob) : u0),
663663 (p === missing ? parameter_values (prob) : p)
664664 end
665- return _updated_u0_p_internal (prob, u0, p; interpret_symbolicmap, use_defaults)
665+ return _updated_u0_p_internal (prob, u0, p, t0 ; interpret_symbolicmap, use_defaults)
666666end
667667
668668# overloaded in MTK to intercept symbolic remake
0 commit comments