Esempio n. 1
0
def test_isna():
    # Objects which are not np.NA or ndarray all return False
    assert_equal(np.isna(True), False)
    assert_equal(np.isna("abc"), False)
    assert_equal(np.isna([1, 2, 3]), False)
    assert_equal(np.isna({3: 5}), False)
    # Various NA values return True
    assert_equal(np.isna(np.NA), True)
    assert_equal(np.isna(np.NA()), True)
    assert_equal(np.isna(np.NA(5)), True)
    assert_equal(np.isna(np.NA(dtype='f4')), True)
    assert_equal(np.isna(np.NA(12, dtype='f4')), True)
Esempio n. 2
0
def test_na_str():
    # With no payload or dtype
    assert_equal(str(np.NA), 'NA')
    assert_equal(str(np.NA()), 'NA')

    # With a payload
    assert_equal(str(np.NA(10)), 'NA(10)')

    # With just a dtype
    assert_equal(str(np.NA(dtype='c16')), 'NA')

    # With a payload and a dtype
    assert_equal(str(np.NA(10, dtype='f4')), 'NA(10)')
Esempio n. 3
0
def test_na_construction():
    # construct a new NA object
    v = np.NA()
    assert_(not v is np.NA)
    assert_equal(v.payload, None)
    assert_equal(v.dtype, None)

    # Construct with a payload
    v = np.NA(3)
    assert_equal(v.payload, 3)
    assert_equal(v.dtype, None)

    # Construct with a dtype
    v = np.NA(dtype='f4')
    assert_equal(v.payload, None)
    assert_equal(v.dtype, np.dtype('f4'))

    # Construct with both a payload and a dtype
    v = np.NA(5, dtype='f4,i2')
    assert_equal(v.payload, 5)
    assert_equal(v.dtype, np.dtype('f4,i2'))

    # min and max payload values
    v = np.NA(0)
    assert_equal(v.payload, 0)
    v = np.NA(127)
    assert_equal(v.payload, 127)

    # Out of bounds payload values
    assert_raises(ValueError, np.NA, -1)
    assert_raises(ValueError, np.NA, 128)
Esempio n. 4
0
def test_na_other_operations():
    # Make sure we get NAs for all these operations
    assert_equal(type(np.NA + 3), np.NAType)
    assert_equal(type(3 + np.NA), np.NAType)
    assert_equal(type(np.NA - 3.0), np.NAType)
    assert_equal(type(3.0 - np.NA), np.NAType)
    assert_equal(type(np.NA * 2j), np.NAType)
    assert_equal(type(2j * np.NA), np.NAType)
    assert_equal(type(np.NA / 2j), np.NAType)
    assert_equal(type(2j / np.NA), np.NAType)
    assert_equal(type(np.NA // 2j), np.NAType)
    assert_equal(type(np.NA % 6), np.NAType)
    assert_equal(type(6 % np.NA), np.NAType)
    assert_equal(type(np.NA**2), np.NAType)
    assert_equal(type(2**np.NA), np.NAType)
    assert_equal(type(np.NA & 2), np.NAType)
    assert_equal(type(2 & np.NA), np.NAType)
    assert_equal(type(np.NA | 2), np.NAType)
    assert_equal(type(2 | np.NA), np.NAType)
    assert_equal(type(np.NA << 2), np.NAType)
    assert_equal(type(2 << np.NA), np.NAType)
    assert_equal(type(np.NA >> 2), np.NAType)
    assert_equal(type(2 >> np.NA), np.NAType)
    assert_(abs(np.NA) is np.NA)
    assert_((-np.NA) is np.NA)
    assert_((+np.NA) is np.NA)
    assert_((~np.NA) is np.NA)

    # The NA should get the dtype from the other operand
    assert_equal((np.NA + 3).dtype, np.array(3).dtype)
    assert_equal((np.NA - 3.0).dtype, np.array(3.0).dtype)
    assert_equal((np.NA * 2j).dtype, np.array(2j).dtype)

    # Should have type promotion if the NA already has a dtype
    assert_equal((np.NA(dtype='f4')**3.0).dtype, np.dtype('f8'))

    # Bitwise and/or are specialized slightly
    # NOTE: The keywords 'and' and 'or' coerce to boolean, so we cannot
    #       properly support them.
    assert_equal(np.NA & False, False)
    assert_equal(False & np.NA, False)
    assert_equal(np.NA | True, True)
    assert_equal(True | np.NA, True)
    assert_equal(type(np.NA | False), np.NAType)
    assert_equal(type(np.NA & True), np.NAType)
    assert_equal((np.NA | False).dtype, np.array(False).dtype)
    assert_equal((np.NA & True).dtype, np.array(True).dtype)
Esempio n. 5
0
def test_na_repr():
    # With no payload or dtype
    assert_equal(repr(np.NA), 'NA')
    assert_equal(repr(np.NA()), 'NA')

    # With a payload
    assert_equal(repr(np.NA(10)), 'NA(10)')

    # With just a dtype
    assert_equal(repr(np.NA(dtype='?')), "NA(dtype='bool')")
    if sys.byteorder == 'little':
        assert_equal(repr(np.NA(dtype='<c16')), "NA(dtype='complex128')")
        assert_equal(repr(np.NA(dtype='>c16')), "NA(dtype='>c16')")
    else:
        assert_equal(repr(np.NA(dtype='>c16')), "NA(dtype='complex128')")
        assert_equal(repr(np.NA(dtype='<c16')), "NA(dtype='<c16')")

    # With a payload and a dtype
    if sys.byteorder == 'little':
        assert_equal(repr(np.NA(10, dtype='<f4')), "NA(10, dtype='float32')")
        assert_equal(repr(np.NA(10, dtype='>f4')), "NA(10, dtype='>f4')")
    else:
        assert_equal(repr(np.NA(10, dtype='>f4')), "NA(10, dtype='float32')")
        assert_equal(repr(np.NA(10, dtype='<f4')), "NA(10, dtype='<f4')")
Esempio n. 6
0
def test_na_writable_attributes_deletion():
    a = np.NA(2)
    attr = ['payload', 'dtype']
    for s in attr:
        assert_raises(AttributeError, delattr, a, s)
Esempio n. 7
0
def test_na_operations():
    # The minimum of the payload is taken
    assert_equal((np.NA + np.NA(3)).payload, None)
    assert_equal((np.NA(12) + np.NA()).payload, None)
    assert_equal((np.NA(2) - np.NA(6)).payload, 2)
    assert_equal((np.NA(5) - np.NA(1)).payload, 1)

    # The dtypes are promoted like np.promote_types
    assert_equal((np.NA(dtype='f4') * np.NA(dtype='f8')).dtype, np.dtype('f8'))
    assert_equal((np.NA(dtype='c8') * np.NA(dtype='f8')).dtype,
                 np.dtype('c16'))
    assert_equal((np.NA * np.NA(dtype='i8')).dtype, np.dtype('i8'))
    assert_equal((np.NA(dtype='i2') / np.NA).dtype, np.dtype('i2'))