Skip to content

Commit

Permalink
Revert "Make BitArray.{slice_bits,slice_shots,__getitem__} raise `I…
Browse files Browse the repository at this point in the history
…ndexErro…" (#12929)

This reverts commit 4f09f57.

This commit reverts #12844, the original PR was making an API change as a bugfix (to make the api consistent with other similar APIs). However it is still a change in the defined stable interface of the class as documented and we shouldn't be changing that per the stability guidelines of the project. Especially in a patch version bugfix release. We can debate whether the change is acceptable for 1.2.0 independently but for a patch version it is definitely out of scope.
  • Loading branch information
mtreinish authored Aug 8, 2024
1 parent 3494f95 commit 7a7cb66
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 42 deletions.
21 changes: 8 additions & 13 deletions qiskit/primitives/containers/bit_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,15 +131,10 @@ def __repr__(self):

def __getitem__(self, indices):
"""Slices the array along an existing axis of the array."""
if isinstance(indices, tuple):
if len(indices) == self.ndim + 1:
raise IndexError(
"BitArray cannot be sliced along the shots axis, use slice_shots() instead."
)
if len(indices) >= self.ndim + 2:
raise IndexError(
"BitArray cannot be sliced along the bits axis, use slice_bits() instead."
)
if isinstance(indices, tuple) and len(indices) >= self.ndim + 2:
raise ValueError(
"BitArrays cannot be sliced along the bits axis, see slice_bits() instead."
)
return BitArray(self._array[indices], self.num_bits)

@property
Expand Down Expand Up @@ -433,13 +428,13 @@ def slice_bits(self, indices: int | Sequence[int]) -> "BitArray":
A bit array sliced along the bit axis.
Raises:
IndexError: If there are any invalid indices of the bit axis.
ValueError: If there are any invalid indices of the bit axis.
"""
if isinstance(indices, int):
indices = (indices,)
for index in indices:
if index < 0 or index >= self.num_bits:
raise IndexError(
raise ValueError(
f"index {index} is out of bounds for the number of bits {self.num_bits}."
)
# This implementation introduces a temporary 8x memory overhead due to bit
Expand All @@ -460,13 +455,13 @@ def slice_shots(self, indices: int | Sequence[int]) -> "BitArray":
A bit array sliced along the shots axis.
Raises:
IndexError: If there are any invalid indices of the shots axis.
ValueError: If there are any invalid indices of the shots axis.
"""
if isinstance(indices, int):
indices = (indices,)
for index in indices:
if index < 0 or index >= self.num_shots:
raise IndexError(
raise ValueError(
f"index {index} is out of bounds for the number of shots {self.num_shots}."
)
arr = self._array
Expand Down

This file was deleted.

22 changes: 4 additions & 18 deletions test/python/primitives/containers/test_bit_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -527,20 +527,6 @@ def test_getitem(self):
for j in range(2):
self.assertEqual(ba.get_counts((0, j, 2)), ba2.get_counts(j))

with self.subTest("errors"):
with self.assertRaisesRegex(IndexError, "index 2 is out of bounds"):
_ = ba[0, 2, 2]
with self.assertRaisesRegex(IndexError, "index -3 is out of bounds"):
_ = ba[0, -3, 2]
with self.assertRaisesRegex(
IndexError, "BitArray cannot be sliced along the shots axis"
):
_ = ba[0, 1, 2, 3]
with self.assertRaisesRegex(
IndexError, "BitArray cannot be sliced along the bits axis"
):
_ = ba[0, 1, 2, 3, 4]

def test_slice_bits(self):
"""Test the slice_bits method."""
# this creates incrementing bitstrings from 0 to 59
Expand Down Expand Up @@ -585,9 +571,9 @@ def test_slice_bits(self):
self.assertEqual(ba2.get_counts((i, j, k)), expect)

with self.subTest("errors"):
with self.assertRaisesRegex(IndexError, "index -1 is out of bounds"):
with self.assertRaisesRegex(ValueError, "index -1 is out of bounds"):
_ = ba.slice_bits(-1)
with self.assertRaisesRegex(IndexError, "index 9 is out of bounds"):
with self.assertRaisesRegex(ValueError, "index 9 is out of bounds"):
_ = ba.slice_bits(9)

def test_slice_shots(self):
Expand Down Expand Up @@ -635,9 +621,9 @@ def test_slice_shots(self):
self.assertEqual(ba2.get_bitstrings((i, j, k)), expected)

with self.subTest("errors"):
with self.assertRaisesRegex(IndexError, "index -1 is out of bounds"):
with self.assertRaisesRegex(ValueError, "index -1 is out of bounds"):
_ = ba.slice_shots(-1)
with self.assertRaisesRegex(IndexError, "index 10 is out of bounds"):
with self.assertRaisesRegex(ValueError, "index 10 is out of bounds"):
_ = ba.slice_shots(10)

def test_expectation_values(self):
Expand Down

0 comments on commit 7a7cb66

Please sign in to comment.