Skip to content

Commit

Permalink
apacheGH-38768: [Python] Empty slicing an array backwards beyond the …
Browse files Browse the repository at this point in the history
…start is now empty (apache#40682)

### What changes are included in this PR?

`_normalize_slice` now relies on `slice.indices` (https://docs.python.org/3/reference/datamodel.html#slice.indices).

### Are these changes tested?

Yes.

### Are there any user-facing changes?

Fixing wrong data returned in an edge case.
* GitHub Issue: apache#40642
* GitHub Issue: apache#38768

Lead-authored-by: LucasG0 <guillermou.lucas@gmail.com>
Co-authored-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
Signed-off-by: Joris Van den Bossche <jorisvandenbossche@gmail.com>
  • Loading branch information
2 people authored and tolleybot committed May 2, 2024
1 parent 3785373 commit fec7606
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 28 deletions.
29 changes: 1 addition & 28 deletions python/pyarrow/array.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -561,34 +561,7 @@ 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
start, stop, step = key.indices(n)

if step != 1:
indices = np.arange(start, stop, step)
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 fec7606

Please sign in to comment.