def test_cf_timedelta(self): examples = [ ('1D', 'days', np.int64(1)), (['1D', '2D', '3D'], 'days', np.array([1, 2, 3], 'int64')), ('1h', 'hours', np.int64(1)), ('1ms', 'milliseconds', np.int64(1)), ('1us', 'microseconds', np.int64(1)), (['NaT', '0s', '1s'], None, [np.nan, 0, 1]), (['30m', '60m'], 'hours', [0.5, 1.0]), ] if pd.__version__ >= '0.16': # not quite sure why, but these examples don't work on older pandas examples.extend([(np.timedelta64('NaT', 'ns'), 'days', np.nan), (['NaT', 'NaT'], 'days', [np.nan, np.nan])]) for timedeltas, units, numbers in examples: timedeltas = pd.to_timedelta(timedeltas, box=False) numbers = np.array(numbers) expected = numbers actual, _ = conventions.encode_cf_timedelta(timedeltas, units) self.assertArrayEqual(expected, actual) self.assertEqual(expected.dtype, actual.dtype) if units is not None: expected = timedeltas actual = conventions.decode_cf_timedelta(numbers, units) self.assertArrayEqual(expected, actual) self.assertEqual(expected.dtype, actual.dtype) expected = np.timedelta64('NaT', 'ns') actual = conventions.decode_cf_timedelta(np.array(np.nan), 'days') self.assertArrayEqual(expected, actual)
def test_cf_timedelta_2d(self): timedeltas, units, numbers = ['1D', '2D', '3D'], 'days', np.atleast_2d([1, 2, 3]) timedeltas = np.atleast_2d(pd.to_timedelta(timedeltas, box=False)) expected = timedeltas actual = conventions.decode_cf_timedelta(numbers, units) self.assertArrayEqual(expected, actual) self.assertEqual(expected.dtype, actual.dtype)