Example #1
0
def test_inequality(value1, value2):
    scalar1 = chainerx.Scalar(value1)
    scalar2 = chainerx.Scalar(value2)

    assert scalar1 != scalar2
    assert scalar2 != scalar1

    assert scalar2 != value1
    assert value1 != scalar2

    assert scalar1 != value2
    assert value2 != scalar1
Example #2
0
def test_sub_scalar(scalar, device, shape, dtype):
    if dtype == 'bool_':
        # Boolean subtract is deprecated.
        return chainerx.testing.ignore()
    x_np = array_utils.create_dummy_ndarray(numpy, shape, dtype)
    # Implicit casting in NumPy's multiply depends on the 'casting' argument,
    # which is not yet supported (ChainerX always casts).
    # Therefore, we explicitly cast the scalar to the dtype of the ndarray
    # before the multiplication for NumPy.
    expected = x_np - numpy.dtype(dtype).type(scalar)
    expected_rev = numpy.dtype(dtype).type(scalar) - x_np

    x = chainerx.array(x_np)
    scalar_chx = chainerx.Scalar(scalar, dtype)
    chainerx.testing.assert_array_equal_ex(x - scalar, expected)
    chainerx.testing.assert_array_equal_ex(x - scalar_chx, expected)
    chainerx.testing.assert_array_equal_ex(scalar - x, expected_rev)
    chainerx.testing.assert_array_equal_ex(scalar_chx - x, expected_rev)
    chainerx.testing.assert_array_equal_ex(chainerx.subtract(x, scalar),
                                           expected)
    chainerx.testing.assert_array_equal_ex(chainerx.subtract(x, scalar_chx),
                                           expected)
    chainerx.testing.assert_array_equal_ex(chainerx.subtract(scalar, x),
                                           expected_rev)
    chainerx.testing.assert_array_equal_ex(chainerx.subtract(scalar_chx, x),
                                           expected_rev)
Example #3
0
def test_full_with_scalar(shape, dtype, value, device):
    scalar = chainerx.Scalar(value, dtype)
    a = chainerx.full(shape, scalar)
    if scalar.dtype.kind == 'f' and math.isnan(float(scalar)):
        assert all([math.isnan(el) for el in a._debug_flat_data])
    else:
        assert a._debug_flat_data == [scalar.tolist()] * a.size
Example #4
0
def test_init_without_dtype(value, dtype):
    scalar = chainerx.Scalar(value)
    assert scalar.dtype == dtype
    if math.isnan(value):
        assert math.isnan(scalar.tolist())
    else:
        assert scalar.tolist() == value
    assert isinstance(scalar.tolist(), type(value))
Example #5
0
def test_init_casted(value, cast_dtype, expected_value):
    scalar = chainerx.Scalar(value, cast_dtype)
    assert scalar.dtype == cast_dtype
    if math.isnan(expected_value):
        assert math.isnan(scalar.tolist())
    else:
        assert scalar.tolist() == expected_value
    assert isinstance(scalar.tolist(), type(expected_value))
Example #6
0
def test_equality(value1, value2):
    scalar1 = chainerx.Scalar(value1)
    scalar2 = chainerx.Scalar(value2)

    assert scalar1 == scalar2
    assert scalar2 == scalar1

    assert scalar1 == value1
    assert value1 == scalar1

    assert scalar2 == value2
    assert value2 == scalar2

    assert scalar2 == value1
    assert value1 == scalar2

    assert scalar1 == value2
    assert value2 == scalar1
Example #7
0
def test_cast(value):
    scalar = chainerx.Scalar(value)

    _check_cast_scalar_equals_data(scalar, value)
    _check_cast_scalar_equals_data(+scalar, +value)
    if isinstance(value, bool):
        with pytest.raises(chainerx.DtypeError):
            -scalar  # should not be able to negate bool
    else:
        _check_cast_scalar_equals_data(-scalar, -value)
Example #8
0
def test_dtype(value):
    scalar = chainerx.Scalar(value)

    if isinstance(value, bool):
        assert scalar.dtype == chainerx.bool_
    elif isinstance(value, int):
        assert scalar.dtype == chainerx.int64
    elif isinstance(value, float):
        assert scalar.dtype == chainerx.float64
    else:
        assert False
Example #9
0
def test_truediv_scalar(scalar, device, shape, numeric_dtype):
    x_np = array_utils.create_dummy_ndarray(numpy, shape, numeric_dtype)
    expected = x_np / scalar

    x = chainerx.array(x_np)
    scalar_chx = chainerx.Scalar(scalar, numeric_dtype)
    chainerx.testing.assert_array_equal_ex(
        x / scalar, expected, strides_check=False)
    chainerx.testing.assert_array_equal_ex(
        x / scalar_chx, expected, strides_check=False)
    chainerx.testing.assert_array_equal_ex(
        chainerx.divide(x, scalar), expected, strides_check=False)
    chainerx.testing.assert_array_equal_ex(
        chainerx.divide(x, scalar_chx), expected, strides_check=False)
Example #10
0
def test_truediv_scalar(scalar, device, shape, numeric_dtype):
    x_np = array_utils.create_dummy_ndarray(numpy, shape, numeric_dtype)
    if 'int' in numeric_dtype:
        # NumPy does not support itruediv to integer arrays.
        expected = (x_np / scalar).astype(numeric_dtype)
    else:
        expected = x_np / scalar

    x = chainerx.array(x_np)
    scalar_chx = chainerx.Scalar(scalar, numeric_dtype)
    chainerx.testing.assert_array_equal_ex(x / scalar, expected)
    chainerx.testing.assert_array_equal_ex(x / scalar_chx, expected)
    chainerx.testing.assert_array_equal_ex(chainerx.divide(x, scalar),
                                           expected)
    chainerx.testing.assert_array_equal_ex(chainerx.divide(x, scalar_chx),
                                           expected)
Example #11
0
def test_add_scalar(scalar, device, shape, dtype):
    x_np = array_utils.create_dummy_ndarray(numpy, shape, dtype)
    # Implicit casting in NumPy's multiply depends on the 'casting' argument,
    # which is not yet supported (ChainerX always casts).
    # Therefore, we explicitly cast the scalar to the dtype of the ndarray
    # before the multiplication for NumPy.
    expected = x_np + numpy.dtype(dtype).type(scalar)

    x = chainerx.array(x_np)
    scalar_chx = chainerx.Scalar(scalar, dtype)
    chainerx.testing.assert_array_equal_ex(x + scalar, expected)
    chainerx.testing.assert_array_equal_ex(x + scalar_chx, expected)
    chainerx.testing.assert_array_equal_ex(scalar + x, expected)
    chainerx.testing.assert_array_equal_ex(scalar_chx + x, expected)
    chainerx.testing.assert_array_equal_ex(chainerx.add(x, scalar), expected)
    chainerx.testing.assert_array_equal_ex(chainerx.add(x, scalar_chx),
                                           expected)
    chainerx.testing.assert_array_equal_ex(chainerx.add(scalar, x), expected)
    chainerx.testing.assert_array_equal_ex(chainerx.add(scalar_chx, x),
                                           expected)
Example #12
0
def test_fill_with_scalar(xp, device, shape, dtype, value):
    a = xp.empty(shape, dtype)
    if xp is chainerx:
        value = chainerx.Scalar(value, dtype)
    a.fill(value)
    return a
Example #13
0
@pytest.mark.parametrize('shape', [(), (1, ), (2, 3)])
def test_assert_array_equal_fail(shape, dtype):
    a, b = _make_onehot_arrays(shape, dtype, 0, 2)
    with pytest.raises(AssertionError):
        chainerx.testing.assert_array_equal(a, b)


@pytest.mark.parametrize('value1,value2', [
    (True, 1),
    (True, 1.0),
    (False, 0),
    (False, 0.0),
    (2.0, 2),
    (numpy.int32(2), 2.0),
    (chainerx.Scalar(2), 2.0),
    (chainerx.Scalar(2, chainerx.int64), numpy.float32(2)),
    (float('nan'), numpy.float32('nan')),
])
def test_assert_array_equal_scalar(value1, value2):
    chainerx.testing.assert_array_equal(value1, value2)
    chainerx.testing.assert_array_equal(value2, value1)


@pytest.mark.parametrize('value1,value2', [
    (2, 3),
    (2.0, 3),
    (True, 0),
    (True, -1),
    (False, 1),
    (float('nan'), float('inf')),
Example #14
0
def test_init_invalid():
    with pytest.raises(TypeError):
        chainerx.Scalar("1")  # string, which is not a numeric
Example #15
0
def test_repr(value):
    scalar = chainerx.Scalar(value)

    assert repr(scalar) == repr(value)
    assert str(scalar) == str(value)
Example #16
0
def test_init_with_dtype(value, dtype_spec):
    expected_dtype = chainerx.dtype(dtype_spec)
    scalar = chainerx.Scalar(value, dtype_spec)
    assert scalar.dtype == expected_dtype
    assert scalar == chainerx.Scalar(value, expected_dtype)