summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/tests/test_maskna.py333
-rw-r--r--numpy/core/tests/test_na.py326
2 files changed, 333 insertions, 326 deletions
diff --git a/numpy/core/tests/test_maskna.py b/numpy/core/tests/test_maskna.py
new file mode 100644
index 000000000..3dca0ce7e
--- /dev/null
+++ b/numpy/core/tests/test_maskna.py
@@ -0,0 +1,333 @@
+import numpy as np
+from numpy.compat import asbytes
+from numpy.testing import *
+import sys, warnings
+
+def test_array_maskna_flags():
+ a = np.arange(3)
+ assert_(not a.flags.maskna)
+ assert_(not a.flags.ownmaskna)
+ assert_(not a.flags['MASKNA'])
+ assert_(not a.flags['OWNMASKNA'])
+ # Add a mask by setting the flag
+ a.flags.maskna = True
+ assert_(a.flags.maskna)
+ assert_(a.flags.ownmaskna)
+ assert_(a.flags['MASKNA'])
+ assert_(a.flags['OWNMASKNA'])
+ # Can't remove the mask once it's created
+ def setmaskna(x, v):
+ x.maskna = v
+ assert_raises(ValueError, setmaskna, a.flags, False)
+ def setownmaskna(x, v):
+ x.ownmaskna = v
+ assert_raises(ValueError, setownmaskna, a.flags, False)
+
+def test_array_maskna_construction():
+ # Construction with NA inputs
+ a = np.array([1.0, 2.0, np.NA, 7.0], maskna=True)
+ assert_equal(a.dtype, np.dtype('f8'))
+ assert_(a.flags.maskna)
+ assert_equal(type(a[2]), np.NAType)
+ # Without the 'maskna=True', produces an object array
+ a = np.array([1.0, 2.0, np.NA, 7.0])
+ assert_equal(a.dtype, np.dtype('O'))
+ assert_equal(type(a[2]), np.NAType)
+
+ # From np.NA as a straight scalar
+ a = np.array(np.NA, maskna=True)
+ assert_equal(type(a), np.ndarray)
+ assert_(np.isna(a))
+
+ # As a special case, converting np.NA to an array produces
+ # a zero-dimensional masked array
+ a = np.array(np.NA)
+ assert_equal(type(a), np.ndarray)
+ assert_(np.isna(a))
+
+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)
+
+def test_array_maskna_isna_1D():
+ a = np.arange(10)
+
+ # With no mask, it returns all False
+ assert_equal(np.isna(a), False)
+ assert_equal(np.isna(a).shape, (10,))
+
+ # With a mask but no NAs, it still returns all False
+ a.flags.maskna = True
+ assert_equal(np.isna(a), False)
+ assert_equal(np.isna(a).shape, (10,))
+
+ # Checking isna of a single value
+ assert_equal(np.isna(a[4]), False)
+ # Assigning NA to a single value
+ a[3] = np.NA
+ assert_equal(np.isna(a), [0,0,0,1,0,0,0,0,0,0])
+ # Checking isna of a single value
+ assert_equal(np.isna(a[3]), True)
+
+ # Checking isna of a slice
+ assert_equal(np.isna(a[1:6]), [0,0,1,0,0])
+ # Assigning NA to a slice
+ a[5:7] = np.NA
+ assert_equal(np.isna(a), [0,0,0,1,0,1,1,0,0,0])
+
+ # Checking isna of a strided slice
+ assert_equal(np.isna(a[1:8:2]), [0,1,1,0])
+ # Assigning NA to a strided slice
+ a[2:10:3] = np.NA
+ assert_equal(np.isna(a), [0,0,1,1,0,1,1,0,1,0])
+
+ # Checking isna of a boolean mask index
+ mask = np.array([1,1,0,0,0,1,0,1,1,0], dtype='?')
+ assert_equal(np.isna(a[mask]), [0,0,1,0,1])
+ # Assigning NA to a boolean masked index
+ a[mask] = np.NA
+ assert_equal(np.isna(a), [1,1,1,1,0,1,1,1,1,0])
+
+ # TODO: fancy indexing is next...
+
+def test_array_maskna_view_function():
+ a = np.arange(10)
+
+ # Taking a view of a non-masked array, making sure there's a mask
+ b = a.view(maskna=True)
+ assert_(not a.flags.maskna)
+ assert_(b.flags.maskna)
+ assert_(b.flags.ownmaskna)
+
+ # Taking a view of a non-masked array, making sure there's an owned mask
+ b = a.view(ownmaskna=True)
+ assert_(not a.flags.maskna)
+ assert_(b.flags.maskna)
+ assert_(b.flags.ownmaskna)
+
+ # Taking a view of a masked array
+ c = b.view()
+ assert_(b.flags.maskna)
+ assert_(b.flags.ownmaskna)
+ assert_(c.flags.maskna)
+ assert_(not c.flags.ownmaskna)
+
+ # Taking a view of a masked array, making sure there's a mask
+ c = b.view(maskna = True)
+ assert_(b.flags.maskna)
+ assert_(b.flags.ownmaskna)
+ assert_(c.flags.maskna)
+ assert_(not c.flags.ownmaskna)
+
+ # Taking a view of a masked array, making sure there's an owned mask
+ c = b.view(ownmaskna = True)
+ assert_(b.flags.maskna)
+ assert_(b.flags.ownmaskna)
+ assert_(c.flags.maskna)
+ assert_(c.flags.ownmaskna)
+
+def test_array_maskna_array_function_1D():
+ a = np.arange(10)
+ a_ref = a.copy()
+ b = a.view(maskna=True)
+ b[3:10:2] = np.NA
+ b_view = b.view()
+
+ # Ensure the setup is correct
+ assert_(not a.flags.maskna)
+ assert_(b.flags.maskna)
+ assert_(b.flags.ownmaskna)
+ assert_(b_view.flags.maskna)
+ assert_(not b_view.flags.ownmaskna)
+
+ # Should be able to add a mask with 'maskna='
+ c = np.array(a, maskna=True)
+ assert_(c.flags.maskna)
+ assert_(c.flags.ownmaskna)
+ assert_(not (c is b))
+
+ # Should be able to add a mask with 'ownmaskna='
+ c = np.array(a, ownmaskna=True)
+ assert_(c.flags.maskna)
+ assert_(c.flags.ownmaskna)
+ assert_(not (c is b))
+
+ # Should propagate mask
+ c = np.array(b)
+ assert_(c.flags.maskna)
+ assert_(c.flags.ownmaskna)
+ assert_equal(np.isna(b), np.isna(c))
+ assert_(not (c is b))
+
+ # Should propagate mask with 'maskna=True'
+ c = np.array(b, maskna=True)
+ assert_(c.flags.maskna)
+ assert_(c.flags.ownmaskna)
+ assert_equal(np.isna(b), np.isna(c))
+ assert_(not (c is b))
+
+ # Should propagate mask with 'ownmaskna=True'
+ c = np.array(b, ownmaskna=True)
+ assert_(c.flags.maskna)
+ assert_(c.flags.ownmaskna)
+ assert_equal(np.isna(b), np.isna(c))
+ assert_(not (c is b))
+
+ # Should be able to pass it through
+ c = np.array(b, copy=False)
+ assert_(c is b)
+
+ # Should be able to pass it through with 'maskna=True'
+ c = np.array(b, copy=False, maskna=True)
+ assert_(c is b)
+
+ # Should be able to pass it through with 'maskna=True'
+ c = np.array(b_view, copy=False, maskna=True)
+ assert_(c is b_view)
+
+ # Should be able to pass an owned mask through with 'ownmaskna=True'
+ c = np.array(b, copy=False, ownmaskna=True)
+ assert_(c is b)
+
+ # Should produce a view with an owned mask with 'ownmaskna=True'
+ c = np.array(b_view, copy=False, ownmaskna=True)
+ assert_(c.base is a)
+ assert_(c.flags.ownmaskna)
+ assert_(not (c is b_view))
+
+def test_array_maskna_view_NA_assignment_1D():
+ a = np.arange(10)
+ a_ref = a.copy()
+
+ # Make sure that assigning NA doesn't affect the original data
+ b = a.view(maskna=True)
+ b[...] = np.NA
+ assert_equal(np.isna(b), True)
+ assert_equal(a, a_ref)
+
+ b = a.view(maskna=True)
+ b[:] = np.NA
+ assert_equal(np.isna(b), True)
+ assert_equal(a, a_ref)
+
+ b = a.view(maskna=True)
+ b[3:5] = np.NA
+ assert_equal(np.isna(b), [0,0,0,1,1,0,0,0,0,0])
+ assert_equal(a, a_ref)
+
+ b = a.view(maskna=True)
+ b[3:10:3] = np.NA
+ assert_equal(np.isna(b), [0,0,0,1,0,0,1,0,0,1])
+ assert_equal(a, a_ref)
+
+ b = a.view(maskna=True)
+ b[3] = np.NA
+ assert_equal(np.isna(b), [0,0,0,1,0,0,0,0,0,0])
+ assert_equal(a, a_ref)
+
+ b = a.view(maskna=True)
+ mask = np.array([0,1,0,1,1,0,0,0,1,1], dtype='?')
+ b[mask] = np.NA
+ assert_equal(np.isna(b), mask)
+ assert_equal(a, a_ref)
+
+ # TODO: fancy indexing is next...
+
+def test_array_maskna_view_array_assignment_1D():
+ a = np.arange(5)
+ b = a.view(maskna=True)
+
+ # Assigning a constant scalar should unmask the values
+ b[...] = np.NA
+ b[...] = 3
+ assert_equal(a, 3)
+ assert_equal(np.isna(b), False)
+
+ # Assigning from a list should unmask the values
+ b[...] = np.NA
+ b[...] = [2]
+ assert_equal(a, [2,2,2,2,2])
+ assert_equal(np.isna(b), False)
+
+ # Assigning from a list should unmask the values
+ b[...] = np.NA
+ b[...] = [2,3,4,5,6]
+ assert_equal(a, [2,3,4,5,6])
+ assert_equal(np.isna(b), False)
+
+ # Assigning from an unmasked array should unmask the values
+ b[...] = np.NA
+ b[...] = np.arange(5)
+ assert_equal(a, np.arange(5))
+ assert_equal(np.isna(b), False)
+
+ # Assigning from a masked array with no NAs should unmask the values
+ b[...] = np.NA
+ tmp = np.arange(5) + 1
+ tmp.flags.maskna = True
+ b[...] = tmp
+ assert_equal(a, np.arange(5) + 1)
+ assert_equal(np.isna(b), False)
+
+ # Assigning from a masked array with some NAs should unmask most
+ # of the values, and leave the value behind the NAs untouched
+ b[...] = np.NA
+ tmp = np.arange(5) + 5
+ tmp.flags.maskna = True
+ tmp[2] = np.NA
+ b[...] = tmp
+ assert_equal(a, [5,6,3,8,9])
+ assert_equal(np.isna(b), [0,0,1,0,0])
+
+ # Assigning to a single element should unmask the value
+ b[...] = np.NA
+ b[2] = 10
+ assert_equal(a, [5,6,10,8,9])
+ assert_equal(np.isna(b), [1,1,0,1,1])
+
+ # Assigning to a simple slice should unmask the values
+ b[...] = np.NA
+ b[2:] = 4
+ assert_equal(a, [5,6,4,4,4])
+ assert_equal(np.isna(b), [1,1,0,0,0])
+
+ # Assigning to a strided slice should unmask the values
+ b[...] = np.NA
+ b[3::-2] = 12
+ assert_equal(a, [5,12,4,12,4])
+ assert_equal(np.isna(b), [1,0,1,0,1])
+
+ # Assigning to a boolean index should unmask the values
+ b[...] = np.NA
+ mask = np.array([0,1,1,0,1], dtype='?')
+ b[mask] = 7
+ assert_equal(a, [5,7,7,12,7])
+ assert_equal(np.isna(b), [1,0,0,1,0])
+
+ # Assigning a list to a boolean index should unmask the values
+ b[...] = np.NA
+ mask = np.array([1,0,0,0,1], dtype='?')
+ b[mask] = [8,1]
+ assert_equal(a, [8,7,7,12,1])
+ assert_equal(np.isna(b), [0,1,1,1,0])
+
+ # Assigning a list with NA to a boolean index should unmask non-NA values
+ b[...] = np.NA
+ mask = np.array([0,1,1,0,0], dtype='?')
+ b[mask] = [8,np.NA]
+ assert_equal(a, [8,8,7,12,1])
+ assert_equal(np.isna(b), [1,0,1,1,1])
+
+ # TODO: fancy indexing is next...
+
+if __name__ == "__main__":
+ run_module_suite()
diff --git a/numpy/core/tests/test_na.py b/numpy/core/tests/test_na.py
index dec5379b4..676377ca1 100644
--- a/numpy/core/tests/test_na.py
+++ b/numpy/core/tests/test_na.py
@@ -149,331 +149,5 @@ def test_na_other_operations():
assert_equal((np.NA | False).dtype, np.array(False).dtype)
assert_equal((np.NA & True).dtype, np.array(True).dtype)
-def test_array_maskna_flags():
- a = np.arange(3)
- assert_(not a.flags.maskna)
- assert_(not a.flags.ownmaskna)
- assert_(not a.flags['MASKNA'])
- assert_(not a.flags['OWNMASKNA'])
- # Add a mask by setting the flag
- a.flags.maskna = True
- assert_(a.flags.maskna)
- assert_(a.flags.ownmaskna)
- assert_(a.flags['MASKNA'])
- assert_(a.flags['OWNMASKNA'])
- # Can't remove the mask once it's created
- def setmaskna(x, v):
- x.maskna = v
- assert_raises(ValueError, setmaskna, a.flags, False)
- def setownmaskna(x, v):
- x.ownmaskna = v
- assert_raises(ValueError, setownmaskna, a.flags, False)
-
-def test_array_maskna_construction():
- # Construction with NA inputs
- a = np.array([1.0, 2.0, np.NA, 7.0], maskna=True)
- assert_equal(a.dtype, np.dtype('f8'))
- assert_(a.flags.maskna)
- assert_equal(type(a[2]), np.NAType)
- # Without the 'maskna=True', produces an object array
- a = np.array([1.0, 2.0, np.NA, 7.0])
- assert_equal(a.dtype, np.dtype('O'))
- assert_equal(type(a[2]), np.NAType)
-
- # From np.NA as a straight scalar
- a = np.array(np.NA, maskna=True)
- assert_equal(type(a), np.ndarray)
- assert_(np.isna(a))
-
- # As a special case, converting np.NA to an array produces
- # a zero-dimensional masked array
- a = np.array(np.NA)
- assert_equal(type(a), np.ndarray)
- assert_(np.isna(a))
-
-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)
-
-def test_array_maskna_isna_1D():
- a = np.arange(10)
-
- # With no mask, it returns all False
- assert_equal(np.isna(a), False)
- assert_equal(np.isna(a).shape, (10,))
-
- # With a mask but no NAs, it still returns all False
- a.flags.maskna = True
- assert_equal(np.isna(a), False)
- assert_equal(np.isna(a).shape, (10,))
-
- # Checking isna of a single value
- assert_equal(np.isna(a[4]), False)
- # Assigning NA to a single value
- a[3] = np.NA
- assert_equal(np.isna(a), [0,0,0,1,0,0,0,0,0,0])
- # Checking isna of a single value
- assert_equal(np.isna(a[3]), True)
-
- # Checking isna of a slice
- assert_equal(np.isna(a[1:6]), [0,0,1,0,0])
- # Assigning NA to a slice
- a[5:7] = np.NA
- assert_equal(np.isna(a), [0,0,0,1,0,1,1,0,0,0])
-
- # Checking isna of a strided slice
- assert_equal(np.isna(a[1:8:2]), [0,1,1,0])
- # Assigning NA to a strided slice
- a[2:10:3] = np.NA
- assert_equal(np.isna(a), [0,0,1,1,0,1,1,0,1,0])
-
- # Checking isna of a boolean mask index
- mask = np.array([1,1,0,0,0,1,0,1,1,0], dtype='?')
- assert_equal(np.isna(a[mask]), [0,0,1,0,1])
- # Assigning NA to a boolean masked index
- a[mask] = np.NA
- assert_equal(np.isna(a), [1,1,1,1,0,1,1,1,1,0])
-
- # TODO: fancy indexing is next...
-
-def test_array_maskna_view_function():
- a = np.arange(10)
-
- # Taking a view of a non-masked array, making sure there's a mask
- b = a.view(maskna=True)
- assert_(not a.flags.maskna)
- assert_(b.flags.maskna)
- assert_(b.flags.ownmaskna)
-
- # Taking a view of a non-masked array, making sure there's an owned mask
- b = a.view(ownmaskna=True)
- assert_(not a.flags.maskna)
- assert_(b.flags.maskna)
- assert_(b.flags.ownmaskna)
-
- # Taking a view of a masked array
- c = b.view()
- assert_(b.flags.maskna)
- assert_(b.flags.ownmaskna)
- assert_(c.flags.maskna)
- assert_(not c.flags.ownmaskna)
-
- # Taking a view of a masked array, making sure there's a mask
- c = b.view(maskna = True)
- assert_(b.flags.maskna)
- assert_(b.flags.ownmaskna)
- assert_(c.flags.maskna)
- assert_(not c.flags.ownmaskna)
-
- # Taking a view of a masked array, making sure there's an owned mask
- c = b.view(ownmaskna = True)
- assert_(b.flags.maskna)
- assert_(b.flags.ownmaskna)
- assert_(c.flags.maskna)
- assert_(c.flags.ownmaskna)
-
-def test_array_maskna_array_function_1D():
- a = np.arange(10)
- a_ref = a.copy()
- b = a.view(maskna=True)
- b[3:10:2] = np.NA
- b_view = b.view()
-
- # Ensure the setup is correct
- assert_(not a.flags.maskna)
- assert_(b.flags.maskna)
- assert_(b.flags.ownmaskna)
- assert_(b_view.flags.maskna)
- assert_(not b_view.flags.ownmaskna)
-
- # Should be able to add a mask with 'maskna='
- c = np.array(a, maskna=True)
- assert_(c.flags.maskna)
- assert_(c.flags.ownmaskna)
- assert_(not (c is b))
-
- # Should be able to add a mask with 'ownmaskna='
- c = np.array(a, ownmaskna=True)
- assert_(c.flags.maskna)
- assert_(c.flags.ownmaskna)
- assert_(not (c is b))
-
- # Should propagate mask
- c = np.array(b)
- assert_(c.flags.maskna)
- assert_(c.flags.ownmaskna)
- assert_equal(np.isna(b), np.isna(c))
- assert_(not (c is b))
-
- # Should propagate mask with 'maskna=True'
- c = np.array(b, maskna=True)
- assert_(c.flags.maskna)
- assert_(c.flags.ownmaskna)
- assert_equal(np.isna(b), np.isna(c))
- assert_(not (c is b))
-
- # Should propagate mask with 'ownmaskna=True'
- c = np.array(b, ownmaskna=True)
- assert_(c.flags.maskna)
- assert_(c.flags.ownmaskna)
- assert_equal(np.isna(b), np.isna(c))
- assert_(not (c is b))
-
- # Should be able to pass it through
- c = np.array(b, copy=False)
- assert_(c is b)
-
- # Should be able to pass it through with 'maskna=True'
- c = np.array(b, copy=False, maskna=True)
- assert_(c is b)
-
- # Should be able to pass it through with 'maskna=True'
- c = np.array(b_view, copy=False, maskna=True)
- assert_(c is b_view)
-
- # Should be able to pass an owned mask through with 'ownmaskna=True'
- c = np.array(b, copy=False, ownmaskna=True)
- assert_(c is b)
-
- # Should produce a view with an owned mask with 'ownmaskna=True'
- c = np.array(b_view, copy=False, ownmaskna=True)
- assert_(c.base is a)
- assert_(c.flags.ownmaskna)
- assert_(not (c is b_view))
-
-def test_array_maskna_view_NA_assignment_1D():
- a = np.arange(10)
- a_ref = a.copy()
-
- # Make sure that assigning NA doesn't affect the original data
- b = a.view(maskna=True)
- b[...] = np.NA
- assert_equal(np.isna(b), True)
- assert_equal(a, a_ref)
-
- b = a.view(maskna=True)
- b[:] = np.NA
- assert_equal(np.isna(b), True)
- assert_equal(a, a_ref)
-
- b = a.view(maskna=True)
- b[3:5] = np.NA
- assert_equal(np.isna(b), [0,0,0,1,1,0,0,0,0,0])
- assert_equal(a, a_ref)
-
- b = a.view(maskna=True)
- b[3:10:3] = np.NA
- assert_equal(np.isna(b), [0,0,0,1,0,0,1,0,0,1])
- assert_equal(a, a_ref)
-
- b = a.view(maskna=True)
- b[3] = np.NA
- assert_equal(np.isna(b), [0,0,0,1,0,0,0,0,0,0])
- assert_equal(a, a_ref)
-
- b = a.view(maskna=True)
- mask = np.array([0,1,0,1,1,0,0,0,1,1], dtype='?')
- b[mask] = np.NA
- assert_equal(np.isna(b), mask)
- assert_equal(a, a_ref)
-
- # TODO: fancy indexing is next...
-
-def test_array_maskna_view_array_assignment_1D():
- a = np.arange(5)
- b = a.view(maskna=True)
-
- # Assigning a constant scalar should unmask the values
- b[...] = np.NA
- b[...] = 3
- assert_equal(a, 3)
- assert_equal(np.isna(b), False)
-
- # Assigning from a list should unmask the values
- b[...] = np.NA
- b[...] = [2]
- assert_equal(a, [2,2,2,2,2])
- assert_equal(np.isna(b), False)
-
- # Assigning from a list should unmask the values
- b[...] = np.NA
- b[...] = [2,3,4,5,6]
- assert_equal(a, [2,3,4,5,6])
- assert_equal(np.isna(b), False)
-
- # Assigning from an unmasked array should unmask the values
- b[...] = np.NA
- b[...] = np.arange(5)
- assert_equal(a, np.arange(5))
- assert_equal(np.isna(b), False)
-
- # Assigning from a masked array with no NAs should unmask the values
- b[...] = np.NA
- tmp = np.arange(5) + 1
- tmp.flags.maskna = True
- b[...] = tmp
- assert_equal(a, np.arange(5) + 1)
- assert_equal(np.isna(b), False)
-
- # Assigning from a masked array with some NAs should unmask most
- # of the values, and leave the value behind the NAs untouched
- b[...] = np.NA
- tmp = np.arange(5) + 5
- tmp.flags.maskna = True
- tmp[2] = np.NA
- b[...] = tmp
- assert_equal(a, [5,6,3,8,9])
- assert_equal(np.isna(b), [0,0,1,0,0])
-
- # Assigning to a single element should unmask the value
- b[...] = np.NA
- b[2] = 10
- assert_equal(a, [5,6,10,8,9])
- assert_equal(np.isna(b), [1,1,0,1,1])
-
- # Assigning to a simple slice should unmask the values
- b[...] = np.NA
- b[2:] = 4
- assert_equal(a, [5,6,4,4,4])
- assert_equal(np.isna(b), [1,1,0,0,0])
-
- # Assigning to a strided slice should unmask the values
- b[...] = np.NA
- b[3::-2] = 12
- assert_equal(a, [5,12,4,12,4])
- assert_equal(np.isna(b), [1,0,1,0,1])
-
- # Assigning to a boolean index should unmask the values
- b[...] = np.NA
- mask = np.array([0,1,1,0,1], dtype='?')
- b[mask] = 7
- assert_equal(a, [5,7,7,12,7])
- assert_equal(np.isna(b), [1,0,0,1,0])
-
- # Assigning a list to a boolean index should unmask the values
- b[...] = np.NA
- mask = np.array([1,0,0,0,1], dtype='?')
- b[mask] = [8,1]
- assert_equal(a, [8,7,7,12,1])
- assert_equal(np.isna(b), [0,1,1,1,0])
-
- # Assigning a list with NA to a boolean index should unmask non-NA values
- b[...] = np.NA
- mask = np.array([0,1,1,0,0], dtype='?')
- b[mask] = [8,np.NA]
- assert_equal(a, [8,8,7,12,1])
- assert_equal(np.isna(b), [1,0,1,1,1])
-
- # TODO: fancy indexing is next...
-
if __name__ == "__main__":
run_module_suite()