We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 379f18e commit e683da2Copy full SHA for e683da2
base/abstractarray.jl
@@ -853,10 +853,15 @@ _to_subscript_indices{T}(A::AbstractArray{T,0}, i::Int) = () # TODO: REMOVE FOR
853
_to_subscript_indices{T}(A::AbstractArray{T,0}, I::Int...) = () # TODO: DEPRECATE FOR #14770
854
function _to_subscript_indices{T,N}(A::AbstractArray{T,N}, I::Int...) # TODO: DEPRECATE FOR #14770
855
@_inline_meta
856
- J, _ = IteratorsMD.split(I, Val{N}) # (maybe) drop any trailing indices
857
- sz = _remaining_size(J, size(A)) # compute trailing size (overlapping the final index)
+ J, Jrem = IteratorsMD.split(I, Val{N})
+ _to_subscript_indices(A, J, Jrem)
858
+end
859
+function _to_subscript_indices(A::AbstractArray, J::Tuple, Jrem::Tuple{})
860
+ @_inline_meta
861
+ sz = _remaining_size(J, indices(A)) # compute trailing size (overlapping the final index)
862
(front(J)..., _unsafe_ind2sub(sz, last(J))...) # (maybe) extend the last index
863
end
864
+_to_subscript_indices(A, J::Tuple, Jrem::Tuple) = J # already bounds-checked, safe to drop
865
_to_subscript_indices{T,N}(A::AbstractArray{T,N}, I::Vararg{Int,N}) = I
866
_remaining_size(::Tuple{Any}, t::Tuple) = t
867
_remaining_size(h::Tuple, t::Tuple) = (@_inline_meta; _remaining_size(tail(h), tail(t)))
test/offsetarray.jl
@@ -22,12 +22,14 @@ S = OffsetArray(view(A0, 1:2, 1:2), (-1,2)) # LinearSlow
22
@test_throws ErrorException size(A, 1)
23
24
# Scalar indexing
25
-@test A[0,3] == A[1] == S[0,3] == S[1] == 1
26
-@test A[1,3] == A[2] == S[1,3] == S[2] == 2
27
-@test A[0,4] == A[3] == S[0,4] == S[3] == 3
28
-@test A[1,4] == A[4] == S[1,4] == S[4] == 4
+@test A[0,3] == A[1] == A[0,3,1] == S[0,3] == S[1] == S[0,3,1] == 1
+@test A[1,3] == A[2] == A[1,3,1] == S[1,3] == S[2] == S[1,3,1] == 2
+@test A[0,4] == A[3] == A[0,4,1] == S[0,4] == S[3] == S[0,4,1] == 3
+@test A[1,4] == A[4] == A[1,4,1] == S[1,4] == S[4] == S[1,4,1] == 4
29
@test_throws BoundsError A[1,1]
30
@test_throws BoundsError S[1,1]
31
+@test_throws BoundsError A[0,3,2]
32
+@test_throws BoundsError S[0,3,2]
33
34
# Vector indexing
35
@test A[:, 3] == S[:, 3] == OffsetArray([1,2], (A.offsets[1],))
0 commit comments