def _add_iris_coord(cube, name, points, dim, calendar=None): """ Add a Coord to a Cube from a Pandas index or columns array. If no calendar is specified for a time series, Gregorian is assumed. """ units = Unit("unknown") if calendar is None: calendar = iris.unit.CALENDAR_GREGORIAN # Convert pandas datetime objects to python datetime obejcts. if isinstance(points, pandas.tseries.index.DatetimeIndex): points = np.array([i.to_datetime() for i in points]) # Convert datetime objects to Iris' current datetime representation. if points.dtype == object: dt_types = (datetime.datetime, netcdftime.datetime) if all([isinstance(i, dt_types) for i in points]): units = Unit("hours since epoch", calendar=calendar) points = units.date2num(points) points = np.array(points) if (np.issubdtype(points.dtype, np.number) and iris.util.monotonic(points, strict=True)): coord = DimCoord(points, units=units) coord.rename(name) cube.add_dim_coord(coord, dim) else: coord = AuxCoord(points, units=units) coord.rename(name) cube.add_aux_coord(coord, dim)
class Test(tests.IrisTest): def setUp(self): self.section = { 'year': 2007, 'month': 1, 'day': 15, 'hour': 0, 'minute': 3, 'second': 0 } self.unit = Unit('hours since epoch', calendar=CALENDAR_GREGORIAN) dt = datetime(self.section['year'], self.section['month'], self.section['day'], self.section['hour'], self.section['minute'], self.section['second']) self.point = self.unit.date2num(dt) def _check(self, section, standard_name=None): expected = DimCoord(self.point, standard_name=standard_name, units=self.unit) # The call being tested. coord = reference_time_coord(section) self.assertEqual(coord, expected) def test_start_of_forecast(self): section = deepcopy(self.section) section['significanceOfReferenceTime'] = 1 self._check(section, 'forecast_reference_time') def test_observation_time(self): section = deepcopy(self.section) section['significanceOfReferenceTime'] = 3 self._check(section, 'time') def test_unknown_significance(self): section = deepcopy(self.section) section['significanceOfReferenceTime'] = 0 emsg = 'unsupported significance' with self.assertRaisesRegexp(TranslationError, emsg): self._check(section)
class Test(tests.IrisTest): def setUp(self): self.section = {'year': 2007, 'month': 1, 'day': 15, 'hour': 0, 'minute': 3, 'second': 0} self.unit = Unit('hours since epoch', calendar=CALENDAR_GREGORIAN) dt = datetime(self.section['year'], self.section['month'], self.section['day'], self.section['hour'], self.section['minute'], self.section['second']) self.point = self.unit.date2num(dt) def _check(self, section, standard_name=None): expected = DimCoord(self.point, standard_name=standard_name, units=self.unit) # The call being tested. coord = reference_time_coord(section) self.assertEqual(coord, expected) def test_start_of_forecast(self): section = deepcopy(self.section) section['significanceOfReferenceTime'] = 1 self._check(section, 'forecast_reference_time') def test_observation_time(self): section = deepcopy(self.section) section['significanceOfReferenceTime'] = 3 self._check(section, 'time') def test_unknown_significance(self): section = deepcopy(self.section) section['significanceOfReferenceTime'] = 0 emsg = 'unsupported significance' with self.assertRaisesRegexp(TranslationError, emsg): self._check(section)