@@ -352,67 +352,28 @@ Base.@propagate_inbounds function _getindex(A::AbstractDiffEqArray, ::NotSymboli
352352end
353353
354354# Symbolic Indexing Methods
355- Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: ScalarSymbolic , sym)
356- if is_independent_variable (A, sym)
357- return A. t
358- elseif is_variable (A, sym)
359- if constant_structure (A)
360- return getindex .(A. u, variable_index (A, sym))
361- else
362- return getindex .(A. u, variable_index .((A,), (sym,), eachindex (A. t)))
355+ for symtype in [ScalarSymbolic, ArraySymbolic]
356+ paramcheck = quote
357+ if is_parameter (A, sym) || (sym isa AbstractArray && symbolic_type (eltype (sym)) != = NotSymbolic () || sym isa Tuple) && all (x -> is_parameter (A, x), sym)
358+ error (" Indexing with parameters is deprecated. Use `getp(A, $sym )` for parameter indexing." )
363359 end
364- elseif is_parameter (A, sym)
365- error (" Indexing with parameters is deprecated. Use `getp(A, $sym )` for parameter indexing." )
366- elseif is_observed (A, sym)
367- return observed (A, sym).(A. u, (parameter_values (A),), A. t)
368- else
369- # NOTE: this is basically just for LabelledArrays. It's better if this
370- # were an error. Should we make an extension for LabelledArrays handling
371- # this case?
372- return getindex .(A. u, sym)
373360 end
374- end
375-
376- Base. @propagate_inbounds function _getindex (
377- A:: AbstractDiffEqArray , :: ScalarSymbolic , sym, args... )
378- if is_independent_variable (A, sym)
379- return A. t[args... ]
380- elseif is_variable (A, sym)
381- return A[sym][args... ]
382- elseif is_observed (A, sym)
383- u = A. u[args... ]
384- t = A. t[args... ]
385- observed_fn = observed (A, sym)
386- if t isa AbstractArray
387- return observed_fn .(u, (parameter_values (A),), t)
388- else
389- return observed_fn (u, parameter_values (A), t)
390- end
391- else
392- # NOTE: this is basically just for LabelledArrays. It's better if this
393- # were an error. Should we make an extension for LabelledArrays handling
394- # this case?
395- return getindex .(A. u[args... ], sym)
361+ @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype , sym)
362+ $ paramcheck
363+ getu (A, sym)(A)
396364 end
397- end
398-
399- Base. @propagate_inbounds function _getindex (
400- A:: AbstractDiffEqArray , :: ArraySymbolic , sym, args... )
401- return getindex (A, collect (sym), args... )
402- end
403-
404- Base. @propagate_inbounds function _getindex (
405- A:: AbstractDiffEqArray , :: ScalarSymbolic , sym:: Union{Tuple, AbstractArray} )
406- if all (x -> is_parameter (A, x), sym)
407- error (" Indexing with parameters is deprecated. Use `getp(A, $sym )` for parameter indexing." )
408- else
409- return [getindex .((A,), sym, i) for i in eachindex (A. t)]
365+ @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype , sym, arg)
366+ $ paramcheck
367+ getu (A, sym)(A, arg)
368+ end
369+ @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype , sym, arg:: Union{AbstractArray{Int}, AbstractArray{Bool}} )
370+ $ paramcheck
371+ getu (A, sym).((A,), arg)
372+ end
373+ @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype , sym, arg:: Colon )
374+ $ paramcheck
375+ getu (A, sym)(A)
410376 end
411- end
412-
413- Base. @propagate_inbounds function _getindex (
414- A:: AbstractDiffEqArray , :: ScalarSymbolic , sym:: Union{Tuple, AbstractArray} , args... )
415- return reduce (vcat, map (s -> A[s, args... ]' , sym))
416377end
417378
418379Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: ScalarSymbolic ,
0 commit comments