@@ -351,49 +351,73 @@ Base.@propagate_inbounds function _getindex(A::AbstractDiffEqArray, ::NotSymboli
351
351
DiffEqArray (A. u[I], A. t[I], parameter_values (A), symbolic_container (A))
352
352
end
353
353
354
+ struct ParameterIndexingError <: Exception
355
+ sym
356
+ end
357
+
358
+ function Base. showerror (io:: IO , pie:: ParameterIndexingError )
359
+ print (io, " Indexing with parameters is deprecated. Use `getp(A, $(pie. sym) )` for parameter indexing." )
360
+ end
361
+
354
362
# Symbolic Indexing Methods
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." )
359
- end
360
- end
361
- @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype , sym)
362
- $ paramcheck
363
- getu (A, sym)(A)
363
+ for (symtype, elsymtype, valtype, errcheck) in [
364
+ (ScalarSymbolic, SymbolicIndexingInterface. SymbolicTypeTrait, Any, :(is_parameter (A, sym))),
365
+ (ArraySymbolic, SymbolicIndexingInterface. SymbolicTypeTrait, Any, :(is_parameter (A, sym))),
366
+ (NotSymbolic, SymbolicIndexingInterface. SymbolicTypeTrait, Union{<: Tuple , <: AbstractArray },
367
+ :(all (x -> is_parameter (A, x), sym))),
368
+ ]
369
+ @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype ,
370
+ :: $elsymtype , sym:: $valtype )
371
+ if $ errcheck
372
+ throw (ParameterIndexingError (sym))
364
373
end
365
- @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype , sym, arg)
366
- $ paramcheck
367
- getu (A, sym)(A, arg)
374
+ getu (A, sym)(A)
375
+ end
376
+ @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype ,
377
+ :: $elsymtype , sym:: $valtype , arg)
378
+ if $ errcheck
379
+ throw (ParameterIndexingError (sym))
368
380
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)
381
+ getu (A, sym)(A, arg)
382
+ end
383
+ @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype ,
384
+ :: $elsymtype , sym:: $valtype , arg:: Union{AbstractArray{Int}, AbstractArray{Bool}} )
385
+ if $ errcheck
386
+ throw (ParameterIndexingError (sym))
372
387
end
373
- @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype , sym, arg:: Colon )
374
- $ paramcheck
375
- getu (A, sym)(A)
388
+ getu (A, sym).((A,), arg)
389
+ end
390
+ @eval Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: $symtype ,
391
+ :: $elsymtype , sym:: $valtype , :: Colon )
392
+ if $ errcheck
393
+ throw (ParameterIndexingError (sym))
376
394
end
395
+ getu (A, sym)(A)
396
+ end
377
397
end
378
398
379
399
Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: ScalarSymbolic ,
380
- :: SymbolicIndexingInterface.SolvedVariables , args... )
400
+ :: NotSymbolic , :: SymbolicIndexingInterface.SolvedVariables , args... )
381
401
return getindex (A, variable_symbols (A), args... )
382
402
end
383
403
384
404
Base. @propagate_inbounds function _getindex (A:: AbstractDiffEqArray , :: ScalarSymbolic ,
385
- :: SymbolicIndexingInterface.AllVariables , args... )
405
+ :: NotSymbolic , :: SymbolicIndexingInterface.AllVariables , args... )
386
406
return getindex (A, all_variable_symbols (A), args... )
387
407
end
388
408
389
409
Base. @propagate_inbounds function Base. getindex (A:: AbstractVectorOfArray , _arg, args... )
390
410
symtype = symbolic_type (_arg)
391
411
elsymtype = symbolic_type (eltype (_arg))
392
412
393
- if symtype != NotSymbolic ()
394
- return _getindex (A, symtype, _arg, args... )
413
+ if symtype == NotSymbolic () && elsymtype == NotSymbolic ()
414
+ if _arg isa Union{Tuple, AbstractArray} && any (x -> symbolic_type (x) != NotSymbolic (), _arg)
415
+ _getindex (A, symtype, elsymtype, _arg, args... )
416
+ else
417
+ _getindex (A, symtype, _arg, args... )
418
+ end
395
419
else
396
- return _getindex (A, elsymtype, _arg, args... )
420
+ _getindex (A, symtype , elsymtype, _arg, args... )
397
421
end
398
422
end
399
423
0 commit comments