@@ -507,15 +507,25 @@ function (atw::AsParameterTupleWrapper)(
507507 atw. getter (buffer, ts, prob, args... )
508508end
509509
510+ is_observed_getter (_) = false
511+ is_observed_getter (:: GetParameterObserved ) = true
512+ is_observed_getter (:: GetParameterObservedNoTime ) = true
513+ is_observed_getter (mpg:: MultipleParametersGetter ) = any (is_observed_getter, mpg. getters)
514+
510515for (t1, t2) in [
511516 (ArraySymbolic, Any),
512517 (ScalarSymbolic, Any),
513518 (NotSymbolic, Union{<: Tuple , <: AbstractArray })
514519]
515520 @eval function _getp (sys, :: NotSymbolic , :: $t1 , p:: $t2 )
516- num_observed = count (x -> is_observed (sys, x), p)
521+ # We need to do it this way because if an `ODESystem` has `p[1], p[2], p[3]` as
522+ # parameters (all scalarized) then `is_observed(sys, p[2:3]) == true`. Then,
523+ # `getp` errors on older MTK that doesn't support `parameter_observed`.
524+ getters = getp .((sys,), p)
525+ num_observed = count (is_observed_getter, getters)
526+
517527 if num_observed == 0
518- return MultipleParametersGetter (getp .((sys,), p) )
528+ return MultipleParametersGetter (getters )
519529 else
520530 pofn = parameter_observed (sys, p isa Tuple ? collect (p) : p)
521531 if is_time_dependent (sys)
0 commit comments