Skip to content

Commit 48ba993

Browse files
committed
fix reverse arguements
1 parent 2b09950 commit 48ba993

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

src/array.jl

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ macro implement_array_methods(t)
2727
return $_copyto!(dest, src)
2828
end
2929

30-
Base.reverse(a::$t, dims=:) = $_reverse(a, dims)
31-
# For ambiguity
32-
Base.reverse(a::$t{<:Any,1}, dims::Integer) = $_reverse(a, dims)
30+
Base.reverse(a::$t; dims=:) = $_reverse(a, dims)
31+
Base.reverse(a::$t{<:Any,1}) = $_reverse1(a)
32+
Base.reverse(a::$t{<:Any,1}, start::Integer, stop::Integer=lastindex(a)) = $_reverse1(a, start, stop)
3333

3434
# Here we extend the unexported `_replace` method, but we replicate
3535
# much less Base functionality by extending it rather than `replace`.
@@ -64,7 +64,7 @@ end
6464
_copyto!(dest, Rdest, src, Rsrc) = view(dest, Rdest) .= view(src, Rsrc)
6565

6666
# Use a view for lazy reverse
67-
_reverse(a, dims::Colon) = _reverse(a, ntuple(identity, ndims(a)))
67+
_reverse(a, ::Colon) = _reverse(a, ntuple(identity, ndims(a)))
6868
_reverse(a, dims::Int) = _reverse(a, (dims,))
6969
function _reverse(A, dims::Tuple)
7070
rev_axes = map(ntuple(identity, ndims(A)), axes(A)) do d, a
@@ -73,6 +73,12 @@ function _reverse(A, dims::Tuple)
7373
end
7474
return view(A, rev_axes...)
7575
end
76+
_reverse1(a) = _reverse(a, 1)
77+
function _reverse1(a, start::Int, stop::Int)
78+
inds = [firstindex(a):start-1; stop:-1:start; stop+1:lastindex(a)]
79+
@show inds
80+
return view(a, inds)
81+
end
7682

7783
# Use broadcast instead of a loop.
7884
# The `count` argument is disallowed as broadcast is not sequential.

test/runtests.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,11 @@ end
535535
@test collect(reverse(a_disk)) == reverse(a)
536536
@test reverse(view(a_disk, :, 1)) == reverse(a[:, 1])
537537
@test reverse(view(a_disk, :, 1), 1) == reverse(a[:, 1], 1)
538-
@test collect(reverse(a_disk)) == reverse(a)
538+
# ERROR: ArgumentError: Can only subset chunks for sorted indices
539+
@test_broken reverse(view(a_disk, :, 1), 5) == reverse(a[:, 1], 5)
540+
@test_broken reverse(view(a_disk, :, 1), 5, 10) == reverse(a[:, 1], 5, 10)
541+
@test collect(reverse(a_disk)) == collect(reverse(a_disk; dims=:)) ==
542+
collect(reverse(a_disk; dims=(1, 2))) == reverse(a)
539543
@test collect(reverse(a_disk; dims=2)) == reverse(a; dims=2)
540544
@test replace(a_disk, 1 => 2) == replace(a, 1 => 2)
541545
@test rotr90(a_disk) == rotr90(a)

0 commit comments

Comments
 (0)