def test_Field_regrids(self): if self.test_only and inspect.stack()[0][3] not in self.test_only: return # Set tolerance for array equality original_atol = cf.atol(1e-12) for chunksize in self.chunk_sizes: cf.chunksize(chunksize) f1 = cf.read(self.filename1)[0] f2 = cf.read(self.filename2)[0] f3 = cf.read(self.filename3)[0] r = f1.regrids(f2, 'conservative') self.assertTrue( f3.equals(r, verbose=2), 'destination = global Field, CHUNKSIZE = %s' % chunksize ) r = f1.regrids(f2, method='conservative') self.assertTrue( f3.equals(r, verbose=2), 'destination = global Field, CHUNKSIZE = %s' % chunksize ) dst = {'longitude': f2.dim('X'), 'latitude': f2.dim('Y')} r = f1.regrids(dst, 'conservative', dst_cyclic=True) self.assertTrue( f3.equals(r, verbose=2), 'destination = global dict, CHUNKSIZE = %s' % chunksize ) r = f1.regrids(dst, method='conservative', dst_cyclic=True) self.assertTrue( f3.equals(r, verbose=2), 'destination = global dict, CHUNKSIZE = %s' % chunksize ) f4 = cf.read(self.filename4)[0] f5 = cf.read(self.filename5)[0] r = f1.regrids(f5, 'linear') self.assertTrue( f4.equals(r, verbose=2), 'destination = regional Field, CHUNKSIZE = %s' % chunksize ) r = f1.regrids(f5, method='linear') self.assertTrue( f4.equals(r, verbose=2), 'destination = regional Field, CHUNKSIZE = %s' % chunksize ) # --- End: for cf.chunksize(self.original_chunksize) f6 = cf.read(self.filename6)[0] with self.assertRaises(Exception): f1.regridc(f6, axes='T', method='linear') cf.atol(original_atol)
def test_Field_regridc(self): if self.test_only and inspect.stack()[0][3] not in self.test_only: return original_atol = cf.atol(1e-12) for chunksize in self.chunk_sizes: cf.chunksize(chunksize) f1 = cf.read(self.filename7)[0] f2 = cf.read(self.filename8)[0] f3 = cf.read(self.filename9)[0] self.assertTrue( f3.equals(f1.regridc( f2, axes='T', method='linear'), verbose=2), 'destination = time series, CHUNKSIZE = %s' % chunksize ) f4 = cf.read(self.filename1)[0] f5 = cf.read(self.filename2)[0] f6 = cf.read(self.filename10)[0] self.assertTrue( f6.equals(f4.regridc( f5, axes=('X', 'Y'), method='conservative'), verbose=2), 'destination = global Field, CHUNKSIZE = %s' % chunksize ) self.assertTrue( f6.equals(f4.regridc( f5, axes=('X', 'Y'), method='conservative'), verbose=2), 'destination = global Field, CHUNKSIZE = %s' % chunksize ) dst = {'X': f5.dim('X'), 'Y': f5.dim('Y')} self.assertTrue( f6.equals( f4.regridc(dst, axes=('X', 'Y'), method='conservative'), verbose=2 ), 'destination = global dict, CHUNKSIZE = %s' % chunksize ) self.assertTrue( f6.equals( f4.regridc(dst, axes=('X', 'Y'), method='conservative'), verbose=2 ), 'destination = global dict, CHUNKSIZE = %s' % chunksize ) # --- End: for cf.chunksize(self.original_chunksize) cf.atol(original_atol)
def test_Field_regridc(self): self.assertFalse(cf.regrid_logging()) with cf.atol(1e-11): for chunksize in self.chunk_sizes: self.assertFalse(cf.regrid_logging()) with cf.chunksize(chunksize): f1 = cf.read(self.filename7)[0] f2 = cf.read(self.filename8)[0] f3 = cf.read(self.filename9)[0] self.assertTrue( f3.equals(f1.regridc(f2, axes="T", method="linear")), "destination=time series, CHUNKSIZE={}".format( chunksize ), ) f4 = cf.read(self.filename1)[0] f5 = cf.read(self.filename2)[0] f6 = cf.read(self.filename10)[0] self.assertTrue( f6.equals( f4.regridc( f5, axes=("X", "Y"), method="conservative" ) ), "destination=global Field, CHUNKSIZE={}".format( chunksize ), ) self.assertTrue( f6.equals( f4.regridc( f5, axes=("X", "Y"), method="conservative" ) ), "destination=global Field, CHUNKSIZE={}".format( chunksize ), ) dst = {"X": f5.dim("X"), "Y": f5.dim("Y")} self.assertTrue( f6.equals( f4.regridc( dst, axes=("X", "Y"), method="conservative" ) ), "destination=global dict, CHUNKSIZE={}".format( chunksize ), ) self.assertTrue( f6.equals( f4.regridc( dst, axes=("X", "Y"), method="conservative" ) ), "destination=global dict, CHUNKSIZE={}".format( chunksize ), )
def test_Field_regridc_operator(self): self.assertFalse(cf.regrid_logging()) with cf.atol(1e-12): f1 = cf.read(self.filename7)[0] f2 = cf.read(self.filename8)[0] f3 = cf.read(self.filename9)[0] f4 = cf.read(self.filename1)[0] f5 = cf.read(self.filename2)[0] f6 = cf.read(self.filename10)[0] op = f1.regridc(f2, axes="T", method="linear", return_operator=True) self.assertTrue(f3.equals(f1.regridc(op))) op = f4.regridc( f5, axes=("X", "Y"), method="conservative", return_operator=True, ) self.assertTrue(f6.equals(f4.regridc(op))) op = f4.regridc( f5, axes=("X", "Y"), method="conservative", return_operator=True, ) self.assertTrue(f6.equals(f4.regridc(op))) dst = { "X": f5.dimension_coordinate("X"), "Y": f5.dimension_coordinate("Y"), } op = f4.regridc( dst, axes=("X", "Y"), method="conservative", return_operator=True, ) self.assertTrue(f6.equals(f4.regridc(op))) self.assertTrue(f6.equals(f4.regridc(op))) # Raise exception when the source grid does not match that of # the regrid operator op = f1.regridc(f2, axes="T", method="linear", return_operator=True) with self.assertRaises(ValueError): f2.regrids(op)
def test_Field_regrids(self): self.assertFalse(cf.regrid_logging()) with cf.atol(1e-12): for chunksize in self.chunk_sizes: with cf.chunksize(chunksize): f1 = cf.read(self.filename1)[0] f2 = cf.read(self.filename2)[0] f3 = cf.read(self.filename3)[0] f4 = cf.read(self.filename4)[0] f5 = cf.read(self.filename5)[0] r = f1.regrids(f2, "conservative") self.assertTrue( f3.equals(r), "destination=global Field, CHUNKSIZE={}".format( chunksize ), ) dst = {"longitude": f2.dim("X"), "latitude": f2.dim("Y")} r = f1.regrids(dst, "conservative", dst_cyclic=True) self.assertTrue( f3.equals(r), "destination=global dict, CHUNKSIZE={}".format( chunksize ), ) r = f1.regrids(dst, method="conservative", dst_cyclic=True) self.assertTrue( f3.equals(r), "destination=global dict, CHUNKSIZE={}".format( chunksize ), ) # Regrid global to regional roated pole r = f1.regrids(f5, method="linear") self.assertTrue( f4.equals(r, verbose=3), "destination=regional Field, CHUNKSIZE={}".format( chunksize ), ) f6 = cf.read(self.filename6)[0] with self.assertRaises(Exception): f1.regridc(f6, axes="T", method="linear")
def test_Field_regrids_operator(self): self.assertFalse(cf.regrid_logging()) with cf.atol(1e-12): f1 = cf.read(self.filename1)[0] f2 = cf.read(self.filename2)[0] f3 = cf.read(self.filename3)[0] f4 = cf.read(self.filename4)[0] f5 = cf.read(self.filename5)[0] op = f1.regrids(f2, "conservative", return_operator=True) r = f1.regrids(op) self.assertTrue(f3.equals(r)) # Repeat r = f1.regrids(op) self.assertTrue(f3.equals(r)) dst = {"longitude": f2.dim("X"), "latitude": f2.dim("Y")} op = f1.regrids(dst, "conservative", dst_cyclic=True, return_operator=True) r = f1.regrids(op) self.assertTrue(f3.equals(r)) op = f1.regrids( dst, method="conservative", dst_cyclic=True, return_operator=True, ) r = f1.regrids(op) self.assertTrue(f3.equals(r)) # Regrid global to regional rotated pole op = f1.regrids(f5, method="linear", return_operator=True) r = f1.regrids(op) self.assertTrue(f4.equals(r)) # Raise exception when the source grid does not match that of # the regrid operator op = f1.regrids(f2, "conservative", return_operator=True) with self.assertRaises(ValueError): f2.regrids(op)
def test_Constant(self): c = cf.atol() self.assertIs(c._func, cf.atol)
def test_context_managers(self): # rtol, atol, chunksize for func in ( cf.atol, cf.rtol, cf.chunksize, cf.free_memory_factor, cf.of_fraction, ): old = func() new = old * 1.001 with func(new): self.assertEqual(func(), new) self.assertEqual(func(new * 1.001), new) self.assertEqual(func(), new * 1.001) self.assertEqual(func(), old) # collapse_parallel_mode func = cf.collapse_parallel_mode org = func(0) old = func() new = old + 1 with func(new): self.assertEqual(func(), new) self.assertEqual(func(new + 1), new) self.assertEqual(func(), new + 1) self.assertEqual(func(), old) func(org) # log_level func = cf.log_level org = func("DETAIL") old = func() new = "DEBUG" with func(new): self.assertEqual(func(), new) self.assertEqual(func(), old) func(org) del org._func with self.assertRaises(AttributeError): with org: pass # bounds_combination_mode func = cf.bounds_combination_mode org = func("XOR") old = func() new = "AND" with func(new): self.assertEqual(func(), new) self.assertEqual(func(), old) func(org) del org._func with self.assertRaises(AttributeError): with org: pass # Full configuration func = cf.configuration org = func(rtol=cf.Constant(10), atol=20, log_level="WARNING") old = func() new = dict(rtol=cf.Constant(20), atol=40, log_level="DISABLE") with func(**new): self.assertEqual(cf.atol(), 40) self.assertEqual(func(), old) func(**org)
u = t.copy() u.data[0, 0, 0] = -1e30 u.data[0, 0, 0] t.data[0, 0, 0] u.del_construct('grid_latitude') u.constructs('grid_latitude') t.constructs('grid_latitude') import copy u = copy.deepcopy(t) orog = t.constructs('surface_altitude').value().copy() t.equals(t) t.equals(t.copy()) t.equals(t[...]) t.equals(q) t.equals(q, verbose=2) print(cf.atol()) print(cf.rtol()) original = cf.rtol(0.00001) print(cf.rtol()) print(cf.rtol(original)) print(cf.rtol()) t2 = t - 0.00001 t.equals(t2) with cf.atol(1e-5): print(t.equals(t2)) t.equals(t2) orog = t.constructs('surface_altitude').value() orog.equals(orog.copy()) print(t.constructs.filter_by_ncvar('b')) t.constructs('ncvar%x').value() t.constructs('ncdim%x')
def test_Constant(self): if self.test_only and inspect.stack()[0][3] not in self.test_only: return c = cf.atol() self.assertIs(c._func, cf.atol)
u.del_construct('grid_latitude') u.constructs('grid_latitude') t.constructs('grid_latitude') import copy u = copy.deepcopy(t) orog = t.constructs('surface_altitude').value().copy() print("\n**Equality**\n") t.equals(t) t.equals(t.copy()) t.equals(t[...]) t.equals(q) t.equals(q, verbose=2) cf.atol() cf.rtol() original = cf.rtol(0.00001) cf.rtol() cf.rtol(original) cf.rtol() orog = t.constructs('surface_altitude').value() orog.equals(orog.copy()) print("\n**NetCDF interface**\n") print(t.constructs.filter_by_ncvar('b')) t.constructs('ncvar%x').value() t.constructs('ncdim%x') q.nc_get_variable() q.nc_global_attributes()
def test_Field_regrids(self): if self.test_only and inspect.stack()[0][3] not in self.test_only: return self.assertFalse(cf.regrid_logging()) with cf.atol(1e-12): for chunksize in self.chunk_sizes: with cf.chunksize(chunksize): f1 = cf.read(self.filename1)[0] f2 = cf.read(self.filename2)[0] f3 = cf.read(self.filename3)[0] r = f1.regrids(f2, "conservative") self.assertTrue( f3.equals(r), "destination=global Field, CHUNKSIZE={}".format( chunksize), ) r = f1.regrids(f2, method="conservative") self.assertTrue( f3.equals(r), "destination=global Field, CHUNKSIZE={}".format( chunksize), ) dst = {"longitude": f2.dim("X"), "latitude": f2.dim("Y")} r = f1.regrids(dst, "conservative", dst_cyclic=True) self.assertTrue( f3.equals(r), "destination=global dict, CHUNKSIZE={}".format( chunksize), ) r = f1.regrids(dst, method="conservative", dst_cyclic=True) self.assertTrue( f3.equals(r), "destination=global dict, CHUNKSIZE={}".format( chunksize), ) f4 = cf.read(self.filename4)[0] f5 = cf.read(self.filename5)[0] r = f1.regrids(f5, "linear") self.assertTrue( f4.equals(r), "destination=regional Field, CHUNKSIZE={}".format( chunksize), ) r = f1.regrids(f5, method="linear") self.assertTrue( f4.equals(r), "destination=regional Field, CHUNKSIZE={}".format( chunksize), ) # --- End: for f6 = cf.read(self.filename6)[0] with self.assertRaises(Exception): f1.regridc(f6, axes="T", method="linear")