@@ -352,67 +352,28 @@ Base.@propagate_inbounds function _getindex(A::AbstractDiffEqArray, ::NotSymboli
352
352
end
353
353
354
354
# 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." )
363
359
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)
373
360
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)
396
364
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)
410
376
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))
416
377
end
417
378
418
379
Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: ScalarSymbolic ,
0 commit comments