@@ -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 )
@@ -615,7 +615,7 @@ function fill_p(prob, p; defs = nothing, use_defaults = false)
615615 return newvals
616616end
617617
618- function _updated_u0_p_symmap (prob, u0, :: Val{true} , p, :: Val{false} )
618+ function _updated_u0_p_symmap (prob, u0, :: Val{true} , p, :: Val{false} , t0 )
619619 isdep = any (symbolic_type (v) != = NotSymbolic () for (_, v) in u0)
620620 isdep || return remake_buffer (prob, state_values (prob), keys (u0), values (u0)), p
621621
@@ -628,13 +628,13 @@ function _updated_u0_p_symmap(prob, u0, ::Val{true}, p, ::Val{false})
628628 # FIXME : need to provide `u` since the observed function expects it.
629629 # This is sort of an implicit dependency on MTK. The values of `u` won't actually be
630630 # used, since any state symbols in the expression were substituted out earlier.
631- temp_state = ProblemState (; u = state_values (prob), p = p)
631+ temp_state = ProblemState (; u = state_values (prob), p = p, t = t0 )
632632 u0 = anydict (k => symbolic_type (v) === NotSymbolic () ? v : getu (prob, v)(temp_state)
633633 for (k, v) in u0)
634634 return remake_buffer (prob, state_values (prob), keys (u0), values (u0)), p
635635end
636636
637- function _updated_u0_p_symmap (prob, u0, :: Val{false} , p, :: Val{true} )
637+ function _updated_u0_p_symmap (prob, u0, :: Val{false} , p, :: Val{true} , t0 )
638638 isdep = any (symbolic_type (v) != = NotSymbolic () for (_, v) in p)
639639 isdep || return u0, remake_buffer (prob, parameter_values (prob), keys (p), values (p))
640640
@@ -647,13 +647,13 @@ function _updated_u0_p_symmap(prob, u0, ::Val{false}, p, ::Val{true})
647647 # FIXME : need to provide `p` since the observed function expects an `MTKParameters`
648648 # this is sort of an implicit dependency on MTK. The values of `p` won't actually be
649649 # used, since any parameter symbols in the expression were substituted out earlier.
650- temp_state = ProblemState (; u = u0, p = parameter_values (prob))
650+ temp_state = ProblemState (; u = u0, p = parameter_values (prob), t = t0 )
651651 p = anydict (k => symbolic_type (v) === NotSymbolic () ? v : getu (prob, v)(temp_state)
652652 for (k, v) in p)
653653 return u0, remake_buffer (prob, parameter_values (prob), keys (p), values (p))
654654end
655655
656- function _updated_u0_p_symmap (prob, u0, :: Val{true} , p, :: Val{true} )
656+ function _updated_u0_p_symmap (prob, u0, :: Val{true} , p, :: Val{true} , t0 )
657657 isu0dep = any (symbolic_type (v) != = NotSymbolic () for (_, v) in u0)
658658 ispdep = any (symbolic_type (v) != = NotSymbolic () for (_, v) in p)
659659
@@ -663,11 +663,11 @@ function _updated_u0_p_symmap(prob, u0, ::Val{true}, p, ::Val{true})
663663 end
664664 if ! isu0dep
665665 u0 = remake_buffer (prob, state_values (prob), keys (u0), values (u0))
666- return _updated_u0_p_symmap (prob, u0, Val (false ), p, Val (true ))
666+ return _updated_u0_p_symmap (prob, u0, Val (false ), p, Val (true ), t0 )
667667 end
668668 if ! ispdep
669669 p = remake_buffer (prob, parameter_values (prob), keys (p), values (p))
670- return _updated_u0_p_symmap (prob, u0, Val (true ), p, Val (false ))
670+ return _updated_u0_p_symmap (prob, u0, Val (true ), p, Val (false ), t0 )
671671 end
672672
673673 varmap = merge (u0, p)
@@ -679,7 +679,7 @@ function _updated_u0_p_symmap(prob, u0, ::Val{true}, p, ::Val{true})
679679 remake_buffer (prob, parameter_values (prob), keys (p), values (p))
680680end
681681
682- function updated_u0_p (prob, u0, p; interpret_symbolicmap = true , use_defaults = false )
682+ function updated_u0_p (prob, u0, p, t0 = nothing ; interpret_symbolicmap = true , use_defaults = false )
683683 if u0 === missing && p === missing
684684 return state_values (prob), parameter_values (prob)
685685 end
@@ -698,7 +698,7 @@ function updated_u0_p(prob, u0, p; interpret_symbolicmap = true, use_defaults =
698698 return (u0 === missing ? state_values (prob) : u0),
699699 (p === missing ? parameter_values (prob) : p)
700700 end
701- return _updated_u0_p_internal (prob, u0, p; interpret_symbolicmap, use_defaults)
701+ return _updated_u0_p_internal (prob, u0, p, t0 ; interpret_symbolicmap, use_defaults)
702702end
703703
704704# overloaded in MTK to intercept symbolic remake
0 commit comments