()
| 26 | |
| 27 | |
| 28 | def test_validate_index(): |
| 29 | # The indexing tests in the official array API test suite test that the |
| 30 | # array object correctly handles the subset of indices that are required |
| 31 | # by the spec. But the NumPy array API implementation specifically |
| 32 | # disallows any index not required by the spec, via Array._validate_index. |
| 33 | # This test focuses on testing that non-valid indices are correctly |
| 34 | # rejected. See |
| 35 | # https://data-apis.org/array-api/latest/API_specification/indexing.html |
| 36 | # and the docstring of Array._validate_index for the exact indexing |
| 37 | # behavior that should be allowed. This does not test indices that are |
| 38 | # already invalid in NumPy itself because Array will generally just pass |
| 39 | # such indices directly to the underlying np.ndarray. |
| 40 | |
| 41 | a = ones((3, 4)) |
| 42 | |
| 43 | # Out of bounds slices are not allowed |
| 44 | assert_raises(IndexError, lambda: a[:4]) |
| 45 | assert_raises(IndexError, lambda: a[:-4]) |
| 46 | assert_raises(IndexError, lambda: a[:3:-1]) |
| 47 | assert_raises(IndexError, lambda: a[:-5:-1]) |
| 48 | assert_raises(IndexError, lambda: a[4:]) |
| 49 | assert_raises(IndexError, lambda: a[-4:]) |
| 50 | assert_raises(IndexError, lambda: a[4::-1]) |
| 51 | assert_raises(IndexError, lambda: a[-4::-1]) |
| 52 | |
| 53 | assert_raises(IndexError, lambda: a[...,:5]) |
| 54 | assert_raises(IndexError, lambda: a[...,:-5]) |
| 55 | assert_raises(IndexError, lambda: a[...,:5:-1]) |
| 56 | assert_raises(IndexError, lambda: a[...,:-6:-1]) |
| 57 | assert_raises(IndexError, lambda: a[...,5:]) |
| 58 | assert_raises(IndexError, lambda: a[...,-5:]) |
| 59 | assert_raises(IndexError, lambda: a[...,5::-1]) |
| 60 | assert_raises(IndexError, lambda: a[...,-5::-1]) |
| 61 | |
| 62 | # Boolean indices cannot be part of a larger tuple index |
| 63 | assert_raises(IndexError, lambda: a[a[:,0]==1,0]) |
| 64 | assert_raises(IndexError, lambda: a[a[:,0]==1,...]) |
| 65 | assert_raises(IndexError, lambda: a[..., a[0]==1]) |
| 66 | assert_raises(IndexError, lambda: a[[True, True, True]]) |
| 67 | assert_raises(IndexError, lambda: a[(True, True, True),]) |
| 68 | |
| 69 | # Integer array indices are not allowed (except for 0-D) |
| 70 | idx = asarray([[0, 1]]) |
| 71 | assert_raises(IndexError, lambda: a[idx]) |
| 72 | assert_raises(IndexError, lambda: a[idx,]) |
| 73 | assert_raises(IndexError, lambda: a[[0, 1]]) |
| 74 | assert_raises(IndexError, lambda: a[(0, 1), (0, 1)]) |
| 75 | assert_raises(IndexError, lambda: a[[0, 1]]) |
| 76 | assert_raises(IndexError, lambda: a[np.array([[0, 1]])]) |
| 77 | |
| 78 | # Multiaxis indices must contain exactly as many indices as dimensions |
| 79 | assert_raises(IndexError, lambda: a[()]) |
| 80 | assert_raises(IndexError, lambda: a[0,]) |
| 81 | assert_raises(IndexError, lambda: a[0]) |
| 82 | assert_raises(IndexError, lambda: a[:]) |
| 83 | |
| 84 | def test_operators(): |
| 85 | # For every operator, we test that it works for the required type |
nothing calls this directly
no test coverage detected