class Test__realised_dtype_setter(tests.IrisTest): def setUp(self): self.real_array = np.array(0.0) self.lazy_array = as_lazy_data(self.real_array) self.dm = DataManager(self.lazy_array) def test_lazy_with_none(self): self.assertIsNone(self.dm._realised_dtype) self.dm._realised_dtype_setter(None) self.assertIsNone(self.dm._realised_dtype) def test_real_with_none(self): self.dm._lazy_array = None self.dm._real_array = self.real_array self.assertIsNone(self.dm._realised_dtype) self.dm._realised_dtype_setter(None) self.assertIsNone(self.dm._realised_dtype) def test_real_with_same_dtype(self): self.dm._lazy_array = None self.dm._real_array = self.real_array self.assertIsNone(self.dm._realised_dtype) self.dm._realised_dtype_setter(self.dm.dtype) self.assertIsNone(self.dm._realised_dtype) def test_lazy_with_same_dtype(self): self.assertIsNone(self.dm._realised_dtype) self.dm._realised_dtype_setter(self.dm.dtype) self.assertIsNone(self.dm._realised_dtype) def test_real_array_failure(self): self.dm._lazy_array = None self.dm._real_array = self.real_array self.assertIsNone(self.dm._realised_dtype) emsg = 'Cannot set realised dtype, no lazy data is available' with self.assertRaisesRegexp(ValueError, emsg): self.dm._realised_dtype_setter(np.dtype('int16')) def test_invalid_realised_dtype(self): emsg = ("Can only cast lazy data to an integer or boolean " "dtype, got dtype\('float32'\)") with self.assertRaisesRegexp(ValueError, emsg): self.dm._realised_dtype_setter(np.dtype('float32')) def test_lazy_with_realised_dtype(self): dtypes = (np.dtype('bool'), np.dtype('int16'), np.dtype('uint16')) for dtype in dtypes: self.dm._realised_dtype = None self.dm._realised_dtype_setter(dtype) self.assertEqual(self.dm._realised_dtype, dtype) def test_lazy_with_realised_dtype__lazy_dtype_failure(self): self.dm._lazy_array = self.lazy_array.astype(np.dtype('int64')) emsg = ("Cannot set realised dtype for lazy data " "with dtype\('int64'\)") with self.assertRaisesRegexp(ValueError, emsg): self.dm._realised_dtype_setter(np.dtype('int16')) def test_lazy_replace_with_none(self): self.assertIsNone(self.dm._realised_dtype) dtype = np.dtype('int16') self.dm._realised_dtype_setter(dtype) self.assertEqual(self.dm._realised_dtype, dtype) self.dm._realised_dtype_setter(None) self.assertIsNone(self.dm._realised_dtype)