def test_setitem_scalar(self, val, missing_value): arr = LabelArray(self.strs, missing_value=missing_value) if not arr.has_label(val): self.assertTrue((val == 'not in the array') or (val is None and missing_value is not None)) for slicer in [(0, 0), (0, 1), 1]: with self.assertRaises(ValueError): arr[slicer] = val return arr[0, 0] = val self.assertEqual(arr[0, 0], val) arr[0, 1] = val self.assertEqual(arr[0, 1], val) arr[1] = val if val == missing_value: self.assertTrue(arr.is_missing()[1].all()) else: self.assertTrue((arr[1] == val).all()) self.assertTrue((arr[1].as_string_array() == val).all()) arr[:, -1] = val if val == missing_value: self.assertTrue(arr.is_missing()[:, -1].all()) else: self.assertTrue((arr[:, -1] == val).all()) self.assertTrue((arr[:, -1].as_string_array() == val).all()) arr[:] = val if val == missing_value: self.assertTrue(arr.is_missing().all()) else: self.assertFalse(arr.is_missing().any()) self.assertTrue((arr == val).all())
def test_compare_to_str_array(self, missing_value): strs = self.strs shape = strs.shape arr = LabelArray(strs, missing_value=missing_value) if missing_value is None: # As of numpy 1.9.2, object array != None returns just False # instead of an array, with a deprecation warning saying the # behavior will change in the future. Work around that by just # using the ufunc. notmissing = np.not_equal(strs, missing_value) else: notmissing = (strs != missing_value) check_arrays(arr.not_missing(), notmissing) check_arrays(arr.is_missing(), ~notmissing) # The arrays are equal everywhere, but comparisons against the # missing_value should always produce False check_arrays(strs == arr, notmissing) check_arrays(strs != arr, np.zeros_like(strs, dtype=bool)) def broadcastable_row(value, dtype): return np.full((shape[0], 1), value, dtype=strs.dtype) def broadcastable_col(value, dtype): return np.full((1, shape[1]), value, dtype=strs.dtype) # Test comparison between arr and a like-shap 2D array, a column # vector, and a row vector. for comparator, dtype, value in product((eq, ne), (bytes, unicode, object), set(self.rowvalues)): check_arrays( comparator(arr, np.full_like(strs, value)), comparator(strs, value) & notmissing, ) check_arrays( comparator(arr, broadcastable_row(value, dtype=dtype)), comparator(strs, value) & notmissing, ) check_arrays( comparator(arr, broadcastable_col(value, dtype=dtype)), comparator(strs, value) & notmissing, )