def test_Query_year_month_day_hour_minute_second(self): d = cf.Data([[1., 5.], [6, 2]], 'days since 2000-12-29 21:57:57', calendar='gregorian') self.assertTrue( (d == cf.year(2000)).equals( cf.Data([[True, False], [False, True]])) ) self.assertTrue( (d == cf.month(12)).equals( cf.Data([[True, False], [False, True]])) ) self.assertTrue( (d == cf.day(3)).equals(cf.Data([[False, True], [False, False]]))) d = cf.Data([[1., 5], [6, 2]], 'hours since 2000-12-29 21:57:57') self.assertTrue( (d == cf.hour(2)).equals(cf.Data([[False, True], [False, False]]))) d = cf.Data([[1., 5], [6, 2]], 'minutes since 2000-12-29 21:57:57') self.assertTrue( (d == cf.minute(2)).equals( cf.Data([[False, True], [False, False]])) ) d = cf.Data([[1., 5], [6, 2]], 'seconds since 2000-12-29 21:57:57') self.assertTrue( (d == cf.second(2)).equals( cf.Data([[False, True], [False, False]])) ) d = cf.Data([[1., 5.], [6, 2]], 'days since 2000-12-29 21:57:57') self.assertTrue( (d == cf.year(cf.ne(-1))).equals( cf.Data([[True, True], [True, True]])) ) self.assertTrue( (d == cf.month(cf.ne(-1))).equals( cf.Data([[True, True], [True, True]])) ) self.assertTrue( (d == cf.day(cf.ne(-1))).equals( cf.Data([[True, True], [True, True]])) ) d = cf.Data([[1., 5], [6, 2]], 'hours since 2000-12-29 21:57:57') self.assertTrue( (d == cf.hour(cf.ne(-1))).equals( cf.Data([[True, True], [True, True]])) ) d = cf.Data([[1., 5], [6, 2]], 'minutes since 2000-12-29 21:57:57') self.assertTrue( (d == cf.minute(cf.ne(-1))).equals( cf.Data([[True, True], [True, True]])) ) d = cf.Data([[1., 5], [6, 2]], 'seconds since 2000-12-29 21:57:57') self.assertTrue( (d == cf.second(cf.ne(-1))).equals( cf.Data([[True, True], [True, True]])) )
c == 2 c &= cf.Query('set', [1, 3, 5]) c c == 2 c == 3 upper_bounds_ge_minus4 = cf.Query('ge', -4, attr='upper_bounds') X = t.dimension_coordinate('X') X print(X.bounds.array) print((upper_bounds_ge_minus4 == X).array) cf.contains(4) cf.Query('lt', 4, attr='lower_bounds') & cf.Query('ge', 4, attr='upper_bounds') cf.ge(3) cf.ge(cf.dt('2000-3-23')) cf.year(1999) cf.month(cf.wi(6, 8)) cf.jja() cf.contains(4) cf.cellsize(cf.lt(10, 'degrees')) print("\n**Assignment by condition**\n") t = cf.read('file.nc')[1] print(t.array) u = t.where(cf.lt(273.15), x=cf.masked) print(u.array) u = t.where(cf.lt(273.15), x=0, y=1) print(u.array) print(t.where(u, x=-t, y=-99).array) print(t.where(cf.gt(0.5), x=cf.masked, construct='grid_latitude').array)
def test_Field_collapse(self): if self.test_only and inspect.stack()[0][3] not in self.test_only: return verbose = False f = cf.read(self.filename2)[0] g = f.collapse("mean") if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 1, 1), g.shape) g = f.collapse("mean", axes=["T", "X"]) if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 4, 1)) g = f.collapse("mean", axes=[0, 2]) if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 4, 1)) g = f.collapse("mean", axes=[0, 1]) if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 1, 5)) g = f.collapse("mean", axes="domainaxis1") if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1800, 1, 5)) g = f.collapse("mean", axes=["domainaxis1"]) if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1800, 1, 5)) g = f.collapse("mean", axes=[1]) if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1800, 1, 5)) g = f.collapse("mean", axes=1) if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1800, 1, 5)) g = f.collapse("T: mean") if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 4, 5)) g = f.collapse("T: mean X: maximum") if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 4, 1)) g = f.collapse( "T: mean within years time: minimum over years", within_years=cf.M(), ) if verbose: print("\n", f) print(g) print(g.constructs) self.assertEqual(g.shape, (12, 4, 5)) for m in range(1, 13): a = numpy.empty((5, 4, 5)) for i, year in enumerate( f.subspace(T=cf.month(m)).coord("T").year.unique() ): cf.month(m) & cf.year(year) x = f.subspace(T=cf.month(m) & cf.year(year)) x.data.mean(axes=0, inplace=True) a[i] = x.array a = a.min(axis=0) self.assertTrue(numpy.allclose(a, g.array[m % 12])) g = f.collapse("T: mean", group=360) for group in ( cf.M(12), cf.M(12, month=12), cf.M(12, day=16), cf.M(12, month=11, day=27), ): g = f.collapse("T: mean", group=group) bound = g.coord("T").bounds.datetime_array[0, 1] self.assertEqual( bound.month, group.offset.month, f"{bound.month}!={group.offset.month}, group={group}", ) self.assertEqual( bound.day, group.offset.day, f"{bound.day}!={group.offset.day}, group={group}", )
def test_Field_collapse(self): if self.test_only and inspect.stack()[0][3] not in self.test_only: return verbose = False f = cf.read(self.filename2)[0] g = f.collapse('mean') if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 1, 1), g.shape) g = f.collapse('mean', axes=['T', 'X']) if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 4, 1)) g = f.collapse('mean', axes=[0, 2]) if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 4, 1)) g = f.collapse('mean', axes=[0, 1]) if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 1, 5)) g = f.collapse('mean', axes='domainaxis1') if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1800, 1, 5)) g = f.collapse('mean', axes=['domainaxis1']) if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1800, 1, 5)) g = f.collapse('mean', axes=[1]) if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1800, 1, 5)) g = f.collapse('mean', axes=1) if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1800, 1, 5)) g = f.collapse('T: mean') if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 4, 5)) g = f.collapse('T: mean X: maximum') if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (1, 4, 1)) g = f.collapse('T: mean within years time: minimum over years', within_years=cf.M()) if verbose: print('\n', f) print(g) print(g.constructs) self.assertEqual(g.shape, (12, 4, 5)) for m in range(1, 13): a = numpy.empty((5, 4, 5)) for i, year in enumerate( f.subspace(T=cf.month(m)).coord('T').year.unique()): q = cf.month(m) & cf.year(year) x = f.subspace(T=cf.month(m) & cf.year(year)) x.data.mean(axes=0, inplace=True) a[i] = x.array a = a.min(axis=0) self.assertTrue(numpy.allclose(a, g.array[m % 12])) # --- End: for g = f.collapse('T: mean', group=360) for group in (cf.M(12), cf.M(12, month=12), cf.M(12, day=16), cf.M(12, month=11, day=27)): g = f.collapse('T: mean', group=group) bound = g.coord('T').bounds.datetime_array[0, 1] self.assertEqual( bound.month, group.offset.month, "{}!={}, group={}".format(bound.month, group.offset.month, group)) self.assertEqual( bound.day, group.offset.day, "{}!={}, group={}".format(bound.day, group.offset.day, group))