def test_TimeDuration_arithmetic(self): self.assertEqual(cf.M() + cf.dt(2000, 1, 1), cf.dt(2000, 2, 1)) self.assertEqual(cf.M() * 8, cf.M(8)) self.assertEqual(cf.M() * 8.5, cf.M(8.5)) self.assertEqual(cf.dt(2000, 1, 1) + cf.M(), cf.dt(2000, 2, 1)) self.assertEqual(cf.dt(2000, 1, 1) - cf.M(), cf.dt(1999, 12, 1)) self.assertEqual( cf.M() + datetime.datetime(2000, 1, 1), cf.dt(2000, 2, 1, calendar="gregorian"), ) self.assertEqual( datetime.datetime(2000, 1, 1) + cf.M(), cf.dt(2000, 2, 1, calendar="gregorian"), ) self.assertEqual( datetime.datetime(2000, 1, 1) - cf.M(), cf.dt(1999, 12, 1, calendar="gregorian"), ) d = cf.dt(2000, 1, 1) d += cf.M() self.assertEqual(d, cf.dt(2000, 2, 1)) d -= cf.M() self.assertEqual(d, cf.dt(2000, 1, 1)) d = datetime.datetime(2000, 1, 1) d += cf.M() self.assertEqual(d, cf.dt(2000, 2, 1, calendar="gregorian")) d -= cf.M() self.assertEqual(d, cf.dt(2000, 1, 1, calendar="gregorian")) self.assertEqual(cf.M() * 8, cf.M(8)) self.assertEqual(cf.M() * 8.5, cf.M(8.5)) self.assertEqual(cf.M() / 2.0, cf.M(0.5)) self.assertEqual(cf.M(8) / 3, cf.M(8 / 3)) self.assertEqual(cf.M(8) // 3, cf.M(2)) # Test arithmetic involving Data as well as datetimes: da = cf.Data([2], units="days since 2000-01-01") dt = cf.TimeDuration(14, "day") t0 = da + dt t1 = dt + da self.assertEqual( t0, cf.dt(2000, 1, 17, calendar="gregorian"), ) self.assertEqual(t0, t1) t2 = dt - da t3 = da - dt self.assertEqual( t2, cf.dt(1999, 12, 20, calendar="gregorian"), ) self.assertEqual(t2, t3)
print(lon.array) lon.data[2] = 112.5 key = t.construct_key('latitude') key t.get_data_axes(key) t.constructs.data_axes() print("\n**Time**\n") time = q.construct('time') time time.get_property('units') time.get_property('calendar', default='standard') print(time.array) print(time.datetime_array) cm = cf.TimeDuration(1, 'calendar_month', day=16, hour=12) cm cf.dt(2000, 2, 1) + cm cf.Data([1, 2, 3], 'days since 2000-02-01') + cm cm.interval(cf.dt(2000, 2, 1)) cm.bounds(cf.dt(2000, 2, 1)) print("\n**Domain**\n") domain = t.domain domain print(domain) description = domain.dump(display=False) domain_latitude = t.domain.constructs('latitude').value() field_latitude = t.constructs('latitude').value() domain_latitude.set_property('test', 'set by domain')
def test_TimeDuration(self): self.assertGreater(cf.TimeDuration(2, 'calendar_years'), cf.TimeDuration(1, 'calendar_years')) self.assertLess(cf.TimeDuration(2, 'calendar_years'), cf.TimeDuration(25, 'calendar_months')) self.assertLessEqual(cf.TimeDuration(2, 'hours'), cf.TimeDuration(1, 'days')) self.assertEqual(cf.TimeDuration(2, 'hours'), cf.TimeDuration(1 / 12.0, 'days')) self.assertEqual(cf.TimeDuration(2, 'days'), cf.TimeDuration(48, 'hours')) self.assertEqual(cf.TimeDuration(2, 'days'), cf.Data(2)) self.assertEqual(cf.TimeDuration(2, 'days'), cf.Data([2.], 'days')) self.assertGreater(cf.TimeDuration(2, 'days'), cf.Data([[60]], 'seconds')) self.assertLessEqual(cf.TimeDuration(2, 'hours'), 2) self.assertEqual(cf.TimeDuration(0.1, units='seconds'), 0.1) self.assertNotEqual(cf.TimeDuration(2, 'days'), 30.5) self.assertGreater(cf.TimeDuration(2, 'calendar_years'), numpy.array(1.5)) self.assertLess(cf.TimeDuration(2, 'calendar_months'), numpy.array([[12]])) self.assertGreater(cf.TimeDuration(2, 'calendar_years'), cf.TimeDuration(1, 'calendar_years')) self.assertLessEqual(cf.TimeDuration(1, 'calendar_years'), cf.TimeDuration(2, 'calendar_years')) self.assertGreaterEqual(cf.TimeDuration(25, 'calendar_months'), cf.TimeDuration(2, 'calendar_years')) self.assertLess(cf.TimeDuration(2, 'calendar_years'), cf.TimeDuration(25, 'calendar_months')) self.assertGreaterEqual(cf.TimeDuration(1, 'days'), cf.TimeDuration(2, 'hours')) self.assertEqual(cf.TimeDuration(2, 'hours'), cf.TimeDuration(1 / 12.0, 'days')) self.assertEqual(cf.TimeDuration(2, 'days'), cf.TimeDuration(48, 'hours')) self.assertEqual(cf.TimeDuration(2, 'days'), cf.Data(2)) self.assertEqual(cf.TimeDuration(2, 'days'), cf.Data([2.], 'days')) self.assertGreater(cf.TimeDuration(2, 'days'), cf.Data([[60]], 'seconds')) self.assertEqual(cf.TimeDuration(2, 'hours'), 2) self.assertNotEqual(cf.TimeDuration(2, 'days'), 30.5) self.assertGreater(cf.TimeDuration(2, 'calendar_years'), numpy.array(1.5)) self.assertLess(cf.TimeDuration(2, 'calendar_months'), numpy.array([[12]])) self.assertEqual(cf.TimeDuration(64, 'calendar_years') + 2, cf.Y(66)) self.assertEqual( cf.TimeDuration(64, 'calendar_years') - 2.5, cf.Y(61.5)) self.assertEqual( cf.M(23) + cf.TimeDuration(64, 'calendar_years'), cf.M(791)) self.assertEqual( cf.TimeDuration(64, 'calendar_years') + cf.M(24), cf.Y(66)) self.assertTrue( cf.TimeDuration(36, 'calendar_months') / 8 == cf.M(4.5)) self.assertTrue(cf.TimeDuration(36, 'calendar_months') // 8 == cf.M(4)) self.assertTrue( cf.TimeDuration(36, 'calendar_months') / numpy.array(8.0) == cf.M(36 / 8.0)) self.assertTrue( cf.TimeDuration(12, 'calendar_months') * cf.Data([[1.5]]) == cf.Y(1.5)) self.assertTrue( cf.TimeDuration(36, 'calendar_months') // 8.25 == cf.M(4.0)) self.assertTrue(cf.TimeDuration(36, 'calendar_months') % 10 == cf.M(6)) self.assertTrue( cf.TimeDuration(24, 'hours') + cf.TimeDuration(0.5, 'days') == cf.h(36.0)) self.assertTrue( cf.TimeDuration(0.5, 'days') + cf.TimeDuration(24, 'hours') == cf.D(1.5)) t = cf.TimeDuration(24, 'hours') t += 2 self.assertTrue(t == cf.h(26)) t -= cf.Data(3, 'hours') self.assertTrue(t == cf.h(23)) t = cf.TimeDuration(24.0, 'hours') t += 2 self.assertTrue(t == cf.h(26)) self.assertTrue(t - cf.Data(2.5, 'hours') == cf.h(23.5)) t *= 2 self.assertTrue(t == cf.h(52.0)) t -= 1.0 self.assertTrue(t == cf.h(51)) t /= 3 self.assertTrue(t == cf.h(17)) t += 5.5 self.assertTrue(t == cf.h(22.5)) t //= numpy.array(2) self.assertTrue(t == cf.h(11.0)) t *= 10 self.assertTrue(t == cf.h(110.0)) t %= 3 self.assertTrue(t == cf.h(2.0)) t = cf.TimeDuration(24.5, 'hours') self.assertTrue(-t == -24.5) self.assertTrue(int(t) == 24) self.assertTrue(t / 0.5 == 49) self.assertTrue(t // 2 == 12) self.assertTrue(25 - t == 0.5) self.assertTrue(2 * t == 49) self.assertTrue(2.0 % t == 2, 2.0 % t) self.assertTrue(cf.TimeDuration(24, 'hours').isint) self.assertTrue(cf.TimeDuration(24.0, 'hours').isint) self.assertFalse(t.isint) t.Units = 'days' self.assertTrue(t.Units == cf.Units('days')) t.Units = 'hours' self.assertTrue(cf.TimeDuration(12, 'hours').is_day_factor()) self.assertFalse(cf.TimeDuration(13, 'hours').is_day_factor()) self.assertFalse(cf.TimeDuration(2, 'days').is_day_factor()) self.assertTrue(cf.TimeDuration(cf.Data(2, 'days')) == 2) self.assertTrue(cf.TimeDuration(cf.Data(48, 'hours')) == 48) self.assertTrue( cf.TimeDuration(cf.Data(48, 'hours'), units='days') == 2) self.assertTrue(cf.TimeDuration(0.1, units='seconds') == 0.1) self.assertTrue(t.equals(t, verbose=2)) self.assertTrue(t.equals(t.copy(), verbose=2)) self.assertTrue(t.equivalent(t, verbose=2)) self.assertTrue(t.equivalent(t.copy(), verbose=2)) with self.assertRaises(Exception): t = cf.TimeDuration(48, 'm') with self.assertRaises(Exception): t = cf.TimeDuration(cf.Data(48, 'm')) with self.assertRaises(Exception): t = cf.TimeDuration(cf.Data(48, 'days'), units='m') t = t.copy() t = copy.deepcopy(t) _ = repr(t) _ = str(t) t //= 2 t %= 2
def test_TimeDuration(self): self.assertGreater( cf.TimeDuration(2, "calendar_years"), cf.TimeDuration(1, "calendar_years"), ) self.assertLess( cf.TimeDuration(2, "calendar_years"), cf.TimeDuration(25, "calendar_months"), ) self.assertLessEqual( cf.TimeDuration(2, "hours"), cf.TimeDuration(1, "days") ) self.assertEqual( cf.TimeDuration(2, "hours"), cf.TimeDuration(1 / 12.0, "days") ) self.assertEqual( cf.TimeDuration(2, "days"), cf.TimeDuration(48, "hours") ) self.assertEqual(cf.TimeDuration(2, "days"), cf.Data(2)) self.assertEqual(cf.TimeDuration(2, "days"), cf.Data([2.0], "days")) self.assertGreater( cf.TimeDuration(2, "days"), cf.Data([[60]], "seconds") ) self.assertLessEqual(cf.TimeDuration(2, "hours"), 2) self.assertEqual(cf.TimeDuration(0.1, units="seconds"), 0.1) self.assertNotEqual(cf.TimeDuration(2, "days"), 30.5) self.assertGreater( cf.TimeDuration(2, "calendar_years"), numpy.array(1.5) ) self.assertLess( cf.TimeDuration(2, "calendar_months"), numpy.array([[12]]) ) self.assertGreater( cf.TimeDuration(2, "calendar_years"), cf.TimeDuration(1, "calendar_years"), ) self.assertLessEqual( cf.TimeDuration(1, "calendar_years"), cf.TimeDuration(2, "calendar_years"), ) self.assertGreaterEqual( cf.TimeDuration(25, "calendar_months"), cf.TimeDuration(2, "calendar_years"), ) self.assertLess( cf.TimeDuration(2, "calendar_years"), cf.TimeDuration(25, "calendar_months"), ) self.assertGreaterEqual( cf.TimeDuration(1, "days"), cf.TimeDuration(2, "hours") ) self.assertEqual( cf.TimeDuration(2, "hours"), cf.TimeDuration(1 / 12.0, "days") ) self.assertEqual( cf.TimeDuration(2, "days"), cf.TimeDuration(48, "hours") ) self.assertEqual(cf.TimeDuration(2, "days"), cf.Data(2)) self.assertEqual(cf.TimeDuration(2, "days"), cf.Data([2.0], "days")) self.assertGreater( cf.TimeDuration(2, "days"), cf.Data([[60]], "seconds") ) self.assertEqual(cf.TimeDuration(2, "hours"), 2) self.assertNotEqual(cf.TimeDuration(2, "days"), 30.5) self.assertGreater( cf.TimeDuration(2, "calendar_years"), numpy.array(1.5) ) self.assertLess( cf.TimeDuration(2, "calendar_months"), numpy.array([[12]]) ) self.assertEqual(cf.TimeDuration(64, "calendar_years") + 2, cf.Y(66)) self.assertEqual( cf.TimeDuration(64, "calendar_years") - 2.5, cf.Y(61.5) ) self.assertEqual( cf.M(23) + cf.TimeDuration(64, "calendar_years"), cf.M(791) ) self.assertEqual( cf.TimeDuration(64, "calendar_years") + cf.M(24), cf.Y(66) ) self.assertEqual(cf.TimeDuration(36, "calendar_months") / 8, cf.M(4.5)) self.assertEqual(cf.TimeDuration(36, "calendar_months") // 8, cf.M(4)) self.assertEqual( cf.TimeDuration(36, "calendar_months") / numpy.array(8.0), cf.M(36 / 8.0), ) self.assertEqual( cf.TimeDuration(12, "calendar_months") * cf.Data([[1.5]]), cf.Y(1.5), ) self.assertEqual( cf.TimeDuration(36, "calendar_months") // 8.25, cf.M(4.0) ) self.assertEqual(cf.TimeDuration(36, "calendar_months") % 10, cf.M(6)) self.assertEqual( cf.TimeDuration(24, "hours") + cf.TimeDuration(0.5, "days"), cf.h(36.0), ) self.assertEqual( cf.TimeDuration(0.5, "days") + cf.TimeDuration(24, "hours"), cf.D(1.5), ) t = cf.TimeDuration(24, "hours") t += 2 self.assertEqual(t, cf.h(26)) t -= cf.Data(3, "hours") self.assertEqual(t, cf.h(23)) t = cf.TimeDuration(24.0, "hours") t += 2 self.assertEqual(t, cf.h(26)) self.assertEqual(t - cf.Data(2.5, "hours"), cf.h(23.5)) t *= 2 self.assertEqual(t, cf.h(52.0)) t -= 1.0 self.assertEqual(t, cf.h(51)) t /= 3 self.assertEqual(t, cf.h(17)) t += 5.5 self.assertEqual(t, cf.h(22.5)) t //= numpy.array(2) self.assertEqual(t, cf.h(11.0)) t *= 10 self.assertEqual(t, cf.h(110.0)) t %= 3 self.assertEqual(t, cf.h(2.0)) t = cf.TimeDuration(24.5, "hours") self.assertEqual(-t, -24.5) self.assertEqual(int(t), 24) self.assertEqual(t / 0.5, 49) self.assertEqual(t // 2, 12) self.assertEqual(25 - t, 0.5) self.assertEqual(2 * t, 49) self.assertEqual(2.0 % t, 2, 2.0 % t) self.assertTrue(cf.TimeDuration(24, "hours").isint) self.assertTrue(cf.TimeDuration(24.0, "hours").isint) self.assertFalse(t.isint) t.Units = "days" self.assertEqual(t.Units, cf.Units("days")) t.Units = "hours" self.assertTrue(cf.TimeDuration(12, "hours").is_day_factor()) self.assertFalse(cf.TimeDuration(13, "hours").is_day_factor()) self.assertFalse(cf.TimeDuration(2, "days").is_day_factor()) self.assertEqual(cf.TimeDuration(cf.Data(2, "days")), 2) self.assertEqual(cf.TimeDuration(cf.Data(48, "hours")), 48) self.assertEqual( cf.TimeDuration(cf.Data(48, "hours"), units="days"), 2 ) self.assertEqual(cf.TimeDuration(0.1, units="seconds"), 0.1) self.assertTrue(t.equals(t, verbose=2)) self.assertTrue(t.equals(t.copy(), verbose=2)) self.assertTrue(t.equivalent(t, verbose=2)) self.assertTrue(t.equivalent(t.copy(), verbose=2)) with self.assertRaises(Exception): t = cf.TimeDuration(48, "m") with self.assertRaises(Exception): t = cf.TimeDuration(cf.Data(48, "m")) with self.assertRaises(Exception): t = cf.TimeDuration(cf.Data(48, "days"), units="m") t = t.copy() t = copy.deepcopy(t) repr(t) str(t) t //= 2 t %= 2