Skip to content

Commit f791734

Browse files
More precise deprecations of linear indexing
Noticed in SciML/Catalyst.jl#1248, the linear indexing is actually fine when done on scalar arrays because that matches the linear indexing that you get from an AbstractArray interface. So instead the deprecations are made more precise to be just about the array of array case.
1 parent 074074d commit f791734

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

src/vector_of_array.jl

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -388,29 +388,32 @@ end
388388
@inline Base.IteratorSize(::Type{<:AbstractVectorOfArray}) = Base.HasLength()
389389
@inline Base.first(VA::AbstractVectorOfArray) = first(VA.u)
390390
@inline Base.last(VA::AbstractVectorOfArray) = last(VA.u)
391-
function Base.firstindex(VA::AbstractVectorOfArray)
392-
Base.depwarn(
391+
function Base.firstindex(VA::AbstractVectorOfArray{T,N,A}) where {T,N,A}
392+
N > 1 && Base.depwarn(
393393
"Linear indexing of `AbstractVectorOfArray` is deprecated. Change `A[i]` to `A.u[i]` ",
394394
:firstindex)
395395
return firstindex(VA.u)
396396
end
397397

398-
function Base.lastindex(VA::AbstractVectorOfArray)
399-
Base.depwarn(
398+
function Base.lastindex(VA::AbstractVectorOfArray{T,N,A}) where {T,N,A}
399+
N > 1 && Base.depwarn(
400400
"Linear indexing of `AbstractVectorOfArray` is deprecated. Change `A[i]` to `A.u[i]` ",
401401
:lastindex)
402402
return lastindex(VA.u)
403403
end
404404

405-
@deprecate Base.getindex(A::AbstractVectorOfArray, I::Int) Base.getindex(A, :, I) false
405+
Base.getindex(A::AbstractVectorOfArray, I::Int) = A.u[I]
406+
Base.getindex(A::AbstractVectorOfArray, I::AbstractArray{Int}) = A.u[I]
407+
Base.getindex(A::AbstractDiffEqArray, I::Int) = A.u[I]
408+
Base.getindex(A::AbstractDiffEqArray, I::AbstractArray{Int}) = A.u[I]
406409

407-
@deprecate Base.getindex(A::AbstractVectorOfArray, I::AbstractArray{Int}) Base.getindex(
408-
A, :, I) false
410+
@deprecate Base.getindex(A::AbstractVectorOfArray{T,N,A}, I::Int) where {T,N,A<:Union{AbstractArray, AbstractVectorOfArray}} A.u[I] false
409411

410-
@deprecate Base.getindex(A::AbstractDiffEqArray, I::AbstractArray{Int}) Base.getindex(
411-
A, :, I) false
412+
@deprecate Base.getindex(A::AbstractVectorOfArray{T,N,A}, I::AbstractArray{Int}) where {T,N,A<:Union{AbstractArray, AbstractVectorOfArray}} A.u[I] false
412413

413-
@deprecate Base.getindex(A::AbstractDiffEqArray, i::Int) Base.getindex(A, :, i) false
414+
@deprecate Base.getindex(A::AbstractDiffEqArray{T,N,A}, I::AbstractArray{Int}) where {T,N,A<:Union{AbstractArray, AbstractVectorOfArray}} A.u[I] false
415+
416+
@deprecate Base.getindex(A::AbstractDiffEqArray{T,N,A}, i::Int) where {T,N,A<:Union{AbstractArray, AbstractVectorOfArray}} A.u[i] false
414417

415418
__parameterless_type(T) = Base.typename(T).wrapper
416419

@@ -520,22 +523,25 @@ Base.@propagate_inbounds function Base.setindex!(VA::AbstractVectorOfArray{T, N}
520523
VA.u[I] = v
521524
end
522525

523-
@deprecate Base.setindex!(VA::AbstractVectorOfArray, v, I::Int) Base.setindex!(VA, v, :, I) false
526+
Base.@propagate_inbounds Base.setindex!(VA::AbstractVectorOfArray, v, I::Int) = Base.setindex!(VA.u, v, I)
527+
@deprecate Base.setindex!(VA::AbstractVectorOfArray{T,N,A}, v, I::Int) where {T,N,A<:Union{AbstractArray, AbstractVectorOfArray}} Base.setindex!(VA.u, v, I) false
524528

525529
Base.@propagate_inbounds function Base.setindex!(VA::AbstractVectorOfArray{T, N}, v,
526530
::Colon, I::Colon) where {T, N}
527531
VA.u[I] = v
528532
end
529533

530-
@deprecate Base.setindex!(VA::AbstractVectorOfArray, v, I::Colon) Base.setindex!(
531-
VA, v, :, I) false
534+
Base.@propagate_inbounds Base.setindex!(VA::AbstractVectorOfArray, v, I::Colon) = Base.setindex!(VA.u, v, I)
535+
@deprecate Base.setindex!(VA::AbstractVectorOfArray{T,N,A}, v, I::Colon) where {T,N,A<:Union{AbstractArray, AbstractVectorOfArray}} Base.setindex!(
536+
VA.u, v, I) false
532537

533538
Base.@propagate_inbounds function Base.setindex!(VA::AbstractVectorOfArray{T, N}, v,
534539
::Colon, I::AbstractArray{Int}) where {T, N}
535540
VA.u[I] = v
536541
end
537542

538-
@deprecate Base.setindex!(VA::AbstractVectorOfArray, v, I::AbstractArray{Int}) Base.setindex!(
543+
Base.@propagate_inbounds Base.setindex!(VA::AbstractVectorOfArray, v, I::AbstractArray{Int}) = Base.setindex!(VA.u, v, I)
544+
@deprecate Base.setindex!(VA::AbstractVectorOfArray{T,N,A}, v, I::AbstractArray{Int}) where {T,N,A<:Union{AbstractArray, AbstractVectorOfArray}} Base.setindex!(
539545
VA, v, :, I) false
540546

541547
Base.@propagate_inbounds function Base.setindex!(

0 commit comments

Comments
 (0)