Skip to content

Commit

Permalink
Fix empy slicing an array backwards by relying on slice.indices
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasG0 committed Mar 19, 2024
1 parent 8ec32aa commit 10d63ac
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 35 deletions.
38 changes: 3 additions & 35 deletions python/pyarrow/array.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -549,41 +549,9 @@ def _normalize_slice(object arrow_obj, slice key):
Py_ssize_t start, stop, step
Py_ssize_t n = len(arrow_obj)

step = key.step or 1

if key.start is None:
if step < 0:
start = n - 1
else:
start = 0
elif key.start < 0:
start = key.start + n
if start < 0:
start = 0
elif key.start >= n:
start = n
else:
start = key.start

if step < 0 and (key.stop is None or key.stop < -n):
stop = -1
elif key.stop is None:
stop = n
elif key.stop < 0:
stop = key.stop + n
if stop < 0: # step > 0 in this case.
stop = 0
elif key.stop >= n:
stop = n
else:
stop = key.stop

if step != 1:
indices = np.arange(start, stop, step)
return arrow_obj.take(indices)
else:
length = max(stop - start, 0)
return arrow_obj.slice(start, length)
start, stop, step = key.indices(n)
indices = np.arange(start, stop, step)
return arrow_obj.take(indices)


cdef Py_ssize_t _normalize_index(Py_ssize_t index,
Expand Down
1 change: 1 addition & 0 deletions python/pyarrow/tests/test_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,7 @@ def test_array_slice_negative_step():
slice(None, None, 2),
slice(0, 10, 2),
slice(15, -25, -1), # GH-38768
slice(-22, -22, -1), # GH-40642
]

for case in cases:
Expand Down

0 comments on commit 10d63ac

Please sign in to comment.