def test_get_bounds_from_1d(self): sdim = self.get_sdim(bounds=False) test_sdim = self.get_sdim(bounds=True) row_bounds = get_bounds_from_1d(sdim.grid.row.value) col_bounds = get_bounds_from_1d(sdim.grid.col.value) self.assertNumpyAll(row_bounds, test_sdim.grid.row.bounds) self.assertNumpyAll(col_bounds, test_sdim.grid.col.bounds) across_180 = np.array([-180, -90, 0, 90, 180], dtype=float) bounds_180 = get_bounds_from_1d(across_180) self.assertEqual(bounds_180.tostring(), '\x00\x00\x00\x00\x00 l\xc0\x00\x00\x00\x00\x00\xe0`\xc0\x00\x00\x00\x00\x00\xe0`\xc0\x00\x00\x00\x00\x00\x80F\xc0\x00\x00\x00\x00\x00\x80F\xc0\x00\x00\x00\x00\x00\x80F@\x00\x00\x00\x00\x00\x80F@\x00\x00\x00\x00\x00\xe0`@\x00\x00\x00\x00\x00\xe0`@\x00\x00\x00\x00\x00 l@') dates = get_date_list(datetime(2000, 1, 31), datetime(2002, 12, 31), 1) with self.assertRaises(NotImplementedError): get_bounds_from_1d(np.array(dates)) with self.assertRaises(ValueError): get_bounds_from_1d(np.array([0], dtype=float)) just_two = get_bounds_from_1d(np.array([50, 75], dtype=float)) self.assertEqual(just_two.tostring(), '\x00\x00\x00\x00\x00\xc0B@\x00\x00\x00\x00\x00@O@\x00\x00\x00\x00\x00@O@\x00\x00\x00\x00\x00\xe0U@') just_two_reversed = get_bounds_from_1d(np.array([75, 50], dtype=float)) self.assertEqual(just_two_reversed.tostring(), '\x00\x00\x00\x00\x00\xe0U@\x00\x00\x00\x00\x00@O@\x00\x00\x00\x00\x00@O@\x00\x00\x00\x00\x00\xc0B@') zero_origin = get_bounds_from_1d(np.array([0, 50, 100], dtype=float)) self.assertEqual(zero_origin.tostring(), '\x00\x00\x00\x00\x00\x009\xc0\x00\x00\x00\x00\x00\x009@\x00\x00\x00\x00\x00\x009@\x00\x00\x00\x00\x00\xc0R@\x00\x00\x00\x00\x00\xc0R@\x00\x00\x00\x00\x00@_@')
def set_extrapolated_bounds(self): """Set the bounds variable using extrapolation.""" if self.bounds is not None: raise BoundsAlreadyAvailableError self.bounds = get_bounds_from_1d(self.value) self._has_interpolated_bounds = True
def test_units_with_bounds(self): value = [5., 10., 15.] vdim = VectorDimension(value=value, units='celsius', bounds=get_bounds_from_1d(np.array(value))) vdim.cfunits_conform(get_units_object('kelvin')) self.assertNumpyAll(vdim.bounds, np.array([[275.65, 280.65], [280.65, 285.65], [285.65, 290.65]]))