def test_pydatetime_wrong_calendar(self): unit = cf_units.Unit("days since 1970-01-01", calendar="360_day") with self.assertRaisesRegex( ValueError, "illegal calendar or reference date" ): _num2date_to_nearest_second( 1, unit, only_use_cftime_datetimes=False, only_use_python_datetimes=True, )
def test_scalar(self): unit = cf_units.Unit("seconds since 1970-01-01", "gregorian") num = 5.0 exp = datetime.datetime(1970, 1, 1, 0, 0, 5) res = _num2date_to_nearest_second(num, unit) self.assertEqual(exp, res) self.assertIsInstance(res, cftime.datetime)
def check_timedelta(self, nums, units, expected): for num, unit, exp in zip(nums, units, expected): epoch = cftime.num2date(0, unit.cftime_unit, unit.calendar) res = _num2date_to_nearest_second(num, unit) delta = res - epoch seconds = np.round(delta.seconds + (delta.microseconds / 1000000)) self.assertEqual((delta.days, seconds), exp)
def check_timedelta(self, nums, utimes, expected): for num, utime, exp in zip(nums, utimes, expected): epoch = utime.num2date(0) res = _num2date_to_nearest_second(num, utime) delta = res - epoch seconds = np.round(delta.seconds + (delta.microseconds / 1000000)) self.assertEqual((delta.days, seconds), exp)
def check_dates(self, nums, units, expected, only_cftime=True): for num, unit, exp in zip(nums, units, expected): res = _num2date_to_nearest_second( num, unit, only_use_cftime_datetimes=only_cftime ) self.assertEqual(exp, res) self.assertIsInstance(res, type(exp))
def test_multidim_sequence(self): utime = cftime.utime('seconds since 1970-01-01', 'gregorian') nums = [[20., 40., 60.], [80, 100., 120.]] exp_shape = (2, 3) res = _num2date_to_nearest_second(nums, utime) self.assertEqual(exp_shape, res.shape)
def test_masked_ndarray(self): utime = cftime.utime('seconds since 1970-01-01', 'gregorian') nums = np.ma.masked_array([20., 40., 60.], [False, True, False]) exp = [datetime.datetime(1970, 1, 1, 0, 0, 20), None, datetime.datetime(1970, 1, 1, 0, 1)] res = _num2date_to_nearest_second(nums, utime) np.testing.assert_array_equal(exp, res)
def test_masked_ndarray(self): unit = cf_units.Unit("seconds since 1970-01-01", "gregorian") nums = np.ma.masked_array([20.0, 40.0, 60.0], [False, True, False]) exp = [ datetime.datetime(1970, 1, 1, 0, 0, 20), None, datetime.datetime(1970, 1, 1, 0, 1), ] res = _num2date_to_nearest_second(nums, unit) np.testing.assert_array_equal(exp, res)
def test_sequence(self): utime = cftime.utime('seconds since 1970-01-01', 'gregorian') nums = [20., 40., 60., 80, 100.] exp = [datetime.datetime(1970, 1, 1, 0, 0, 20), datetime.datetime(1970, 1, 1, 0, 0, 40), datetime.datetime(1970, 1, 1, 0, 1), datetime.datetime(1970, 1, 1, 0, 1, 20), datetime.datetime(1970, 1, 1, 0, 1, 40)] res = _num2date_to_nearest_second(nums, utime) np.testing.assert_array_equal(exp, res)
def test_sequence(self): unit = cf_units.Unit("seconds since 1970-01-01", "gregorian") nums = [20.0, 40.0, 60.0, 80, 100.0] exp = [ datetime.datetime(1970, 1, 1, 0, 0, 20), datetime.datetime(1970, 1, 1, 0, 0, 40), datetime.datetime(1970, 1, 1, 0, 1), datetime.datetime(1970, 1, 1, 0, 1, 20), datetime.datetime(1970, 1, 1, 0, 1, 40), ] res = _num2date_to_nearest_second(nums, unit) np.testing.assert_array_equal(exp, res)
def test_multidim_sequence(self): unit = cf_units.Unit("seconds since 1970-01-01", "gregorian") nums = [[20.0, 40.0, 60.0], [80, 100.0, 120.0]] exp_shape = (2, 3) res = _num2date_to_nearest_second(nums, unit) self.assertEqual(exp_shape, res.shape)
def test_scalar(self): utime = cftime.utime('seconds since 1970-01-01', 'gregorian') num = 5. exp = datetime.datetime(1970, 1, 1, 0, 0, 5) res = _num2date_to_nearest_second(num, utime) self.assertEqual(exp, res)
def check_dates(self, nums, utimes, expected): for num, utime, exp in zip(nums, utimes, expected): res = _num2date_to_nearest_second(num, utime) self.assertEqual(exp, res)