def test_set_slice(self): values = [1, 2, 3, 3] mapping = {1: 'one', 2: 'two', 3: 'three'} mask = [False, True, False, True] arr = np.ma.MaskedArray(values, mask) a = MappedArray(arr, values_mapping=self.mapping) a[:2] = ['two', 'three'] # this will unmask second item! self.assertEqual(a[0], 'two') self.assertEqual(list(a.raw), [2, 3, 3, np.ma.masked]) self.assertEqual(a[1], 'three') # updated value self.assertTrue(a[1] is not np.ma.masked) # mask is lost self.assertTrue(a[3] is np.ma.masked) # mask is maintained a.mask = False a[:3] = np.ma.masked self.assertEqual(list(a.raw.mask), [True, True, True, False]) a[:] = np.ma.array([3, 3, 3, 3], mask=[False, False, True, True]) self.assertEqual(list(a.raw.mask), [False, False, True, True]) # set a slice to a single value a[2:] = 'one' self.assertEqual(list(a.raw.data[2:]), [1, 1]) a[2:] = 3 self.assertEqual(list(a.raw.data[2:]), [3, 3]) # set a slice to a single element list (odd but consistent with numpy) a[2:] = [2] self.assertEqual(list(a.raw.data[2:]), [2, 2]) a[2:] = ['three'] self.assertEqual(list(a.raw.data[2:]), [3, 3]) # unequal number of arguments self.assertRaises(ValueError, a.__setitem__, slice(-3, None), ['one', 'one'])
def test_set_slice(self): values = [1, 2, 3, 3] mask = [False, True, False, True] arr = np.ma.MaskedArray(values, mask) a = MappedArray(arr, values_mapping=self.mapping) a[:2] = ['two', 'three'] # this will unmask second item! self.assertEqual(a[0], 'two') self.assertEqual(list(a.raw), [2, 3, 3, np.ma.masked]) self.assertEqual(a[1], 'three') # updated value self.assertTrue(a[1] is not np.ma.masked) # mask is lost self.assertTrue(a[3] is np.ma.masked) # mask is maintained a.mask = False a[:3] = np.ma.masked self.assertEqual(list(a.raw.mask), [True, True, True, False]) a[:] = np.ma.array([3, 3, 3, 3], mask=[False, False, True, True]) self.assertEqual(list(a.raw.mask), [False, False, True, True]) # set a slice to a single value a[2:] = 'one' self.assertEqual(list(a.raw.data[2:]), [1, 1]) a[2:] = 3 self.assertEqual(list(a.raw.data[2:]), [3, 3]) # set a slice to a single element list (odd but consistent with numpy) a[2:] = [2] self.assertEqual(list(a.raw.data[2:]), [2, 2]) a[2:] = ['three'] self.assertEqual(list(a.raw.data[2:]), [3, 3]) # unequal number of arguments self.assertRaises(ValueError, a.__setitem__, slice(-3, None), ['one', 'one'])