Exemple #1
0
 def _array_vals():
     for d in _integer_dtypes:
         yield asarray(1, dtype=d)
     for d in _boolean_dtypes:
         yield asarray(False, dtype=d)
     for d in _floating_dtypes:
         yield asarray(1.0, dtype=d)
Exemple #2
0
def test_bitwise_shift_error():
    # bitwise shift functions should raise when the second argument is negative
    assert_raises(
        ValueError,
        lambda: bitwise_left_shift(asarray([1, 1]), asarray([1, -1])))
    assert_raises(
        ValueError,
        lambda: bitwise_right_shift(asarray([1, 1]), asarray([1, -1])))
Exemple #3
0
def test_stable_desc_argsort(obj, axis, expected):
    """
    Indices respect relative order of a descending stable-sort

    See https://github.com/numpy/numpy/issues/20778
    """
    x = xp.asarray(obj)
    out = xp.argsort(x, axis=axis, stable=True, descending=True)
    assert xp.all(out == xp.asarray(expected))
Exemple #4
0
def test_validate_index():
    # The indexing tests in the official array API test suite test that the
    # array object correctly handles the subset of indices that are required
    # by the spec. But the NumPy array API implementation specifically
    # disallows any index not required by the spec, via Array._validate_index.
    # This test focuses on testing that non-valid indices are correctly
    # rejected. See
    # https://data-apis.org/array-api/latest/API_specification/indexing.html
    # and the docstring of Array._validate_index for the exact indexing
    # behavior that should be allowed. This does not test indices that are
    # already invalid in NumPy itself because Array will generally just pass
    # such indices directly to the underlying cp.ndarray.

    a = ones((3, 4))

    # Out of bounds slices are not allowed
    assert_raises(IndexError, lambda: a[:4])
    assert_raises(IndexError, lambda: a[:-4])
    assert_raises(IndexError, lambda: a[:3:-1])
    assert_raises(IndexError, lambda: a[:-5:-1])
    assert_raises(IndexError, lambda: a[4:])
    assert_raises(IndexError, lambda: a[-4:])
    assert_raises(IndexError, lambda: a[4::-1])
    assert_raises(IndexError, lambda: a[-4::-1])

    assert_raises(IndexError, lambda: a[..., :5])
    assert_raises(IndexError, lambda: a[..., :-5])
    assert_raises(IndexError, lambda: a[..., :5:-1])
    assert_raises(IndexError, lambda: a[..., :-6:-1])
    assert_raises(IndexError, lambda: a[..., 5:])
    assert_raises(IndexError, lambda: a[..., -5:])
    assert_raises(IndexError, lambda: a[..., 5::-1])
    assert_raises(IndexError, lambda: a[..., -5::-1])

    # Boolean indices cannot be part of a larger tuple index
    assert_raises(IndexError, lambda: a[a[:, 0] == 1, 0])
    assert_raises(IndexError, lambda: a[a[:, 0] == 1, ...])
    assert_raises(IndexError, lambda: a[..., a[0] == 1])
    assert_raises(IndexError, lambda: a[[True, True, True]])
    assert_raises(IndexError, lambda: a[(True, True, True), ])

    # Integer array indices are not allowed (except for 0-D)
    idx = asarray([[0, 1]])
    assert_raises(IndexError, lambda: a[idx])
    assert_raises(IndexError, lambda: a[idx, ])
    assert_raises(IndexError, lambda: a[[0, 1]])
    assert_raises(IndexError, lambda: a[(0, 1), (0, 1)])
    assert_raises(IndexError, lambda: a[[0, 1]])
    assert_raises(IndexError, lambda: a[cp.array([[0, 1]])])

    # cp.newaxis is not allowed
    assert_raises(IndexError, lambda: a[None])
    assert_raises(IndexError, lambda: a[None, ...])
    assert_raises(IndexError, lambda: a[..., None])

    # Multiaxis indices must contain exactly as many indices as dimensions
    assert_raises(IndexError, lambda: a[()])
    assert_raises(IndexError, lambda: a[0, ])
    assert_raises(IndexError, lambda: a[0])
    assert_raises(IndexError, lambda: a[:])
Exemple #5
0
def test_python_scalar_construtors():
    b = asarray(False)
    i = asarray(0)
    f = asarray(0.0)

    assert bool(b) == False
    assert int(i) == 0
    assert float(f) == 0.0
    assert operator.index(i) == 0

    # bool/int/float should only be allowed on 0-D arrays.
    assert_raises(TypeError, lambda: bool(asarray([False])))
    assert_raises(TypeError, lambda: int(asarray([0])))
    assert_raises(TypeError, lambda: float(asarray([0.0])))
    assert_raises(TypeError, lambda: operator.index(asarray([0])))

    # bool/int/float should only be allowed on arrays of the corresponding
    # dtype
    assert_raises(ValueError, lambda: bool(i))
    assert_raises(ValueError, lambda: bool(f))

    assert_raises(ValueError, lambda: int(b))
    assert_raises(ValueError, lambda: int(f))

    assert_raises(ValueError, lambda: float(b))
    assert_raises(ValueError, lambda: float(i))

    assert_raises(TypeError, lambda: operator.index(b))
    assert_raises(TypeError, lambda: operator.index(f))
Exemple #6
0
import pytest

from cupy import array_api as xp


@pytest.mark.parametrize(
    "from_, to, expected",
    [
        (xp.int8, xp.int16, True),
        (xp.int16, xp.int8, False),
        (xp.bool, xp.int8, False),
        (xp.asarray(0, dtype=xp.uint8), xp.int8, False),
    ],
)
def test_can_cast(from_, to, expected):
    """
    can_cast() returns correct result
    """
    assert xp.can_cast(from_, to) == expected
Exemple #7
0
def test_mask_0d_array_without_errors():
    a = ones(())
    a[asarray(True)]
Exemple #8
0
def test_disallow_mask_with_newaxis():
    a = ones((3, 3, 3))
    with pytest.raises(IndexError):
        a[None, asarray(True)]
Exemple #9
0
    with pytest.raises(IndexError):
        a[None, asarray(True)]

@pytest.mark.parametrize("shape", [(), (5,), (3, 3, 3)])
@pytest.mark.parametrize("index", ["string", False, True])
def test_error_on_invalid_index(shape, index):
    a = ones(shape)
    with pytest.raises(IndexError):
        a[index]

def test_mask_0d_array_without_errors():
    a = ones(())
    a[asarray(True)]

@pytest.mark.parametrize(
    "i", [slice(5), slice(5, 0), asarray(True), asarray([0, 1])]
)
def test_error_on_invalid_index_with_ellipsis(i):
    a = ones((3, 3, 3))
    with pytest.raises(IndexError):
        a[..., i]
    with pytest.raises(IndexError):
        a[i, ...]

def test_array_keys_use_private_array():
    """
    Indexing operations convert array keys before indexing the internal array

    Fails when array_api array keys are not converted into NumPy-proper arrays
    in __getitem__(). This is achieved by passing array_api arrays with 0-sized
    dimensions, which NumPy-proper treats erroneously - not sure why!