8000 TST: Add masked array tests for '==' and '!='. · shoyer/numpy@173f65c · GitHub
[go: up one dir, main page]

Skip to content

Commit 173f65c

Browse files
committed
TST: Add masked array tests for '==' and '!='.
Cover the string and numeric types. Structured types were already covered.
1 parent c8bc149 commit 173f65c

File tree

1 file changed

+145
-5
lines changed

1 file changed

+145
-5
lines changed

numpy/ma/tests/test_core.py

Lines changed: 145 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@
6060
"setting an item on a masked array which has a shared mask will not copy")
6161

6262
63+
# For parametrized numeric testing
64+
num_dts = [np.dtype(dt_) for dt_ in '?bhilqBHILQefdgFD']
65+
num_ids = [dt_.char for dt_ in num_dts]
66+
67+
6368
class TestMaskedArray(object):
6469
# Base test class for MaskedArrays.
6570

@@ -1415,23 +1420,34 @@ def test_eq_on_structured(self):
14151420
# Test the equality of structured arrays
14161421
ndtype = [('A', int), ('B', int)]
14171422
a = array([(1, 1), (2, 2)], mask=[(0, 1), (0, 0)], dtype=ndtype)
1423+
14181424
test = (a == a)
14191425
assert_equal(test.data, [True, True])
14201426
assert_equal(test.mask, [False, False])
1427+
assert_(test.fill_value == True)
1428+
14211429
test = (a == a[0])
14221430
assert_equal(test.data, [True, False])
14231431
assert_equal(test.mask, [False, False])
1432+
assert_(test.fill_value == True)
1433+
14241434
b = array([(1, 1), (2, 2)], mask=[(1, 0), (0, 0)], dtype=ndtype)
14251435
test = (a == b)
14261436
assert_equal(test.data, [False, True])
14271437
assert_equal(test.mask, [True, False])
1438+
assert_(test.fill_value == True)
1439+
14281440
test = (a[0] == b)
14291441
assert_equal(test.data, [False, False])
14301442
assert_equal(test.mask, [True, False])
1443+
assert_(test.fill_value == True)
1444+
14311445
b = array([(1, 1), (2, 2)], mask=[(0, 1), (1, 0)], dtype=ndtype)
14321446
test = (a == b)
14331447
assert_equal(test.data, [True, True])
14341448
assert_equal(test.mask, [False, False])
1449+
assert_(test.fill_value == True)
1450+
14351451
# complicated dtype, 2-dimensional array.
14361452
ndtype = [('A', int), ('B', [('BA', int), ('BB', int)])]
14371453
a = array([[(1, (1, 1)), (2, (2, 2))],
@@ -1441,28 +1457,40 @@ def test_eq_on_structured(self):
14411457
test = (a[0, 0] == a)
14421458
assert_equal(test.data, [[True, False], [False, False]])
14431459
assert_equal(test.mask, [[False, False], [False, True]])
1460+
assert_(test.fill_value == True)
14441461

14451462
def test_ne_on_structured(self):
14461463
# Test the equality of structured arrays
14471464
ndtype = [('A', int), ('B', int)]
14481465
a = array([(1, 1), (2, 2)], mask=[(0, 1), (0, 0)], dtype=ndtype)
1466+
14491467
test = (a != a)
14501468
assert_equal(test.data, [False, False])
14511469
assert_equal(test.mask, [False, False])
1470+
assert_(test.fill_value == True)
1471+
14521472
test = (a != a[0])
14531473
assert_equal(test.data, [False, True])
14541474
assert_equal(test.mask, [False, False])
1475+
assert_(test.fill_value == True)
1476+
14551477
b = array([(1, 1), (2, 2)], mask=[(1, 0), (0, 0)], dtype=ndtype)
14561478
test = (a != b)
14571479
assert_equal(test.data, [True, False])
14581480
assert_equal(test.mask, [True, False])
1481+
assert_(test.fill_value == True)
1482+
14591483
test = (a[0] != b)
14601484
assert_equal(test.data, [True, True])
14611485
assert_equal(test.mask, [True, False])
1486+
assert_(test.fill_value == True)
1487+
14621488
b = array([(1, 1), (2, 2)], mask=[(0, 1), (1, 0)], dtype=ndtype)
14631489
test = (a != b)
14641490
assert_equal(test.data, [False, False])
14651491
assert_equal(test.mask, [False, False])
1492+
assert_(test.fill_value == True)
1493+
14661494
# complicated dtype, 2-dimensional array.
14671495
ndtype = [('A', int), ('B', [('BA', int), ('BB', int)])]
14681496
a = array([[(1, (1, 1)), (2, (2, 2))],
@@ -1472,6 +1500,7 @@ def test_ne_on_structured(self):
14721500
test = (a[0, 0] != a)
14731501
assert_equal(test.data, [[False, True], [True, True]])
14741502
assert_equal(test.mask, [[False, False], [False, True]])
1503+
assert_(test.fill_value == True)
14751504

14761505
def test_eq_ne_structured_extra(self):
14771506
# ensure simple examples are symmetric and make sense.
@@ -1507,6 +1536,120 @@ def test_eq_ne_structured_extra(self):
15071536
el_by_el = [m1[name] != m2[name] for name in dt.names]
15081537
assert_equal(array(el_by_el, dtype=bool).any(), ne_expected)
15091538

1539+
@pytest.mark.parametrize('dt', ['S', 'U'])
1540+
@pytest.mark.parametrize('fill', [None, 'A'])
1541+
def test_eq_for_strings(self, dt, fill):
1542+
# Test the equality of structured arrays
1543+
a = array(['a', 'b'], dtype=dt, mask=[0, 1], fill_value=fill)
1544+
1545+
test = (a == a)
1546+
assert_equal(test.data, [True, True])
1547+
assert_equal(test.mask, [False, True])
1548+
assert_(test.fill_value == True)
1549+
1550+
test = (a == a[0])
1551+
assert_equal(test.data, [True, False])
1552+
assert_equal(test.mask, [False, True])
1553+
assert_(test.fill_value == True)
1554+
1555+
b = array(['a', 'b'], dtype=dt, mask=[1, 0], fill_value=fill)
1556+
test = (a == b)
1557+
assert_equal(test.data, [False, False])
1558+
assert_equal(test.mask, [True, True])
1559+
assert_(test.fill_value == True)
1560+
1561+
# test = (a[0] == b) # doesn't work in Python2
1562+
test = (b == a[0])
1563+
assert_equal(test.data, [False, False])
1564+
assert_equal(test.mask, [True, False])
1565+
assert_(test.fill_value == True)
1566+
1567+
@pytest.mark.parametrize('dt', ['S', 'U'])
1568+
@pytest.mark.parametrize('fill', [None, 'A'])
1569+
def test_ne_for_strings(self, dt, fill):
1570+
# Test the equality of structured arrays
1571+
a = array(['a', 'b'], dtype=dt, mask=[0, 1], fill_value=fill)
1572+
1573+
test = (a != a)
1574+
assert_equal(test.data, [False, False])
1575+
assert_equal(test.mask, [False, True])
1576+
assert_(test.fill_value == True)
1577+
1578+
test = (a != a[0])
1579+
assert_equal(test.data, [False, True])
1580+
assert_equal(test.mask, [False, True])
1581+
assert_(test.fill_value == True)
1582+
1583+
b = array(['a', 'b'], dtype=dt, mask=[1, 0], fill_value=fill)
1584+
test = (a != b)
1585+
assert_equal(test.data, [True, True])
1586+
assert_equal(test.mask, [True, True])
1587+
assert_(test.fill_value == True)
1588+
1589+
# test = (a[0] != b) # doesn't work in Python2
1590+
test = (b != a[0])
1591+
assert_equal(test.data, [True, True])
1592+
assert_equal(test.mask, [True, False])
1593+
assert_(test.fill_value == True)
1594+
1595+
@pytest.mark.parametrize('dt1', num_dts, ids=num_ids)
1596+
@pytest.mark.parametrize('dt2', num_dts, ids=num_ids)
1597+
@pytest.mark.parametrize('fill', [None, 1])
1598+
def test_eq_for_numeric(self, dt1, dt2, fill):
1599+
# Test the equality of structured arrays
1600+
a = array([0, 1], dtype=dt1, mask=[0, 1], fill_value=fill)
1601+
1602+
test = (a == a)
1603+
assert_equal(test.data, [True, True])
1604+
assert_equal(test.mask, [False, True])
1605+
assert_(test.fill_value == True)
1606+
1607+
test = (a == a[0])
1608+
assert_equal(test.data, [True, False])
1609+
assert_equal(test.mask, [False, True])
1610+
assert_(test.fill_value == True)
1611+
1612+
b = array([0, 1], dtype=dt2, mask=[1, 0], fill_value=fill)
1613+
test = (a == b)
1614+
assert_equal(test.data, [False, False])
1615+
assert_equal(test.mask, [True, True])
1616+
assert_(test.fill_value == True)
1617+
1618+
# test = (a[0] == b) # doesn't work in Python2
1619+
test = (b == a[0])
1620+
assert_equal(test.data, [False, False])
1621+
assert_equal(test.mask, [True, False])
1622+
assert_(test.fill_value == True)
1623+
1624+
@pytest.mark.parametrize('dt1', num_dts, ids=num_ids)
1625+
@pytest.mark.parametrize('dt2', num_dts, ids=num_ids)
1626+
@pytest.mark.parametrize('fill', [None, 1])
1627+
def test_ne_for_numeric(self, dt1, dt2, fill):
1628+
# Test the equality of structured arrays
1629+
a = array([0, 1], dtype=dt1, mask=[0, 1], fill_value=fill)
1630+
1631+
test = (a != a)
1632+
assert_equal(test.data, [False, False])
1633+
assert_equal(test.mask, [False, True])
1634+
assert_(test.fill_value == True)
1635+
1636+
test = (a != a[0])
1637+
assert_equal(test.data, [False, True])
1638+
assert_equal(test.mask, [False, True])
1639+
assert_(test.fill_value == True)
1640+
1641+
b = array([0, 1], dtype=dt2, mask=[1, 0], fill_value=fill)
1642+
test = (a != b)
1643+
assert_equal(test.data, [True, True])
1644+
assert_equal(test.mask, [True, True])
1645+
assert_(test.fill_value == True)
1646+
1647+
# test = (a[0] != b) # doesn't work in Python2
1648+
test = (b != a[0])
1649+
assert_equal(test.data, [True, True])
1650+
assert_equal(test.mask, [True, False])
1651+
assert_(test.fill_value == True)
1652+
15101653
def test_eq_with_None(self):
15111654
# Really, comparisons with None should not be done, but check them
15121655
# anyway. Note that pep8 will flag these tests.
@@ -5017,11 +5160,8 @@ def test_astype_mask_ordering():
50175160
assert_(x_f2.mask.flags.f_contiguous)
50185161

50195162

5020-
dts = [np.dtype(dt_) for dt_ in '?bhilqBHILQefdgFD']
5021-
ids = [dt_.char for dt_ in dts]
5022-
5023-
@pytest.mark.parametrize('dt1', dts, ids=ids)
5024-
@pytest.mark.parametrize('dt2', dts, ids=ids)
5163+
@pytest.mark.parametrize('dt1', num_dts, ids=num_ids)
5164+
@pytest.mark.parametrize('dt2', num_dts, ids=num_ids)
50255165
@pytest.mark.filterwarnings('ignore::numpy.ComplexWarning')
50265166
def test_astype_basic(dt1, dt2):
50275167
# See gh-12070

0 commit comments

Comments
 (0)
0