def test_Query_contains(self): f = cf.read(self.filename)[0] c = f.dim('X') self.assertTrue(((cf.contains(21.1) == c).array == numpy.array([0, 1, 0, 0, 0, 0, 0, 0, 0], bool)).all()) self.assertTrue(((cf.contains(999) == c).array == numpy.array([0, 0, 0, 0, 0, 0, 0, 0, 0], bool)).all())
def test_Query(self): f = cf.read(self.filename)[0] q = cf.Query('wi', [2, 5]) r = cf.Query('le', 67) s = q | r t = cf.Query('gt', 12, attr='bounds') u = s & t _ = repr(q) _ = repr(s) _ = repr(t) _ = repr(u) _ = str(q) _ = str(s) _ = str(t) _ = str(u) _ = u.dump(display=False) _ = u.attr _ = u.operator _ = q.attr _ = q.operator _ = q.value with self.assertRaises(Exception): _ = u.value self.assertTrue(u.equals(u.copy(), verbose=2)) self.assertFalse(u.equals(t, verbose=0)) _ = copy.deepcopy(u) c = f.dimension_coordinate('X') self.assertTrue(((cf.contains(21.1) == c).array == numpy.array([0, 1, 0, 0, 0, 0, 0, 0, 0], bool)).all()) self.assertTrue(((cf.contains(999) == c).array == numpy.array([0, 0, 0, 0, 0, 0, 0, 0, 0], bool)).all()) _ = cf.cellsize(34) _ = cf.cellsize(q) _ = cf.celllt(3) _ = cf.cellle(3) _ = cf.cellge(3) _ = cf.cellgt(3) _ = cf.cellwi(1, 2) _ = cf.cellwo(1, 2)
c c == 2 c != 2 c = ge3 | lt5 c 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)
def test_Domain_subspace(self): f = self.d.copy() x = f.dimension_coordinate("X") a = x.varray a[...] = numpy.arange(0, 360, 40) x.set_bounds(x.create_bounds()) f.cyclic("X", iscyclic=True, period=360) f0 = f.copy() # wi (increasing) g = f.subspace(grid_longitude=cf.wi(50, 130)) self.assertEqual(g.size, 20) x = g.construct("grid_longitude").array self.assertTrue((x == [80, 120]).all()) g = f.subspace(grid_longitude=cf.wi(-90, 50)) self.assertEqual(g.size, 40) x = g.construct("grid_longitude").array self.assertTrue((x == [-80, -40, 0, 40]).all()) g = f.subspace(grid_longitude=cf.wi(310, 450)) self.assertEqual(g.size, 40) x = g.construct("grid_longitude").array self.assertTrue((x == [-40, 0, 40, 80]).all()) g = f.subspace(grid_longitude=cf.wi(310 - 1080, 450 - 1080)) self.assertEqual(g.size, 40) x = g.construct("grid_longitude").array self.assertTrue((x == [-40, 0, 40, 80]).all()) g = f.subspace(grid_longitude=cf.wi(310 + 720, 450 + 720)) self.assertEqual(g.size, 40) x = g.construct("grid_longitude").array self.assertTrue((x == [-40, 0, 40, 80]).all()) g = f.subspace(grid_longitude=cf.wi(-90, 370)) self.assertEqual(g.size, 90) x = g.construct("grid_longitude").array self.assertTrue((x == [-80, -40, 0, 40, 80, 120, 160, 200, 240.0]).all()) with self.assertRaises(IndexError): f.indices(grid_longitude=cf.wi(90, 100)) # wi (decreasing) f.flip("X", inplace=True) g = f.subspace(grid_longitude=cf.wi(50, 130)) self.assertEqual(g.size, 20) x = g.construct("grid_longitude").array self.assertTrue((x == [80, 120][::-1]).all()) g = f.subspace(grid_longitude=cf.wi(-90, 50)) self.assertEqual(g.size, 40) x = g.construct("grid_longitude").array self.assertTrue((x == [-80, -40, 0, 40][::-1]).all()) g = f.subspace(grid_longitude=cf.wi(310, 450)) self.assertEqual(g.size, 40) x = g.construct("grid_longitude").array self.assertTrue((x == [-40, 0, 40, 80][::-1]).all()) g = f.subspace(grid_longitude=cf.wi(310 - 1080, 450 - 1080)) self.assertEqual(g.size, 40) x = g.construct("grid_longitude").array self.assertTrue((x == [-40, 0, 40, 80][::-1]).all()) g = f.subspace(grid_longitude=cf.wi(310 + 720, 450 + 720)) self.assertEqual(g.size, 40) x = g.construct("grid_longitude").array self.assertTrue((x == [-40, 0, 40, 80][::-1]).all()) with self.assertRaises(IndexError): f.indices(grid_longitude=cf.wi(90, 100)) # wo f = f0.copy() g = f.subspace(grid_longitude=cf.wo(50, 130)) self.assertEqual(g.size, 70) x = g.construct("grid_longitude").array self.assertTrue((x == [-200, -160, -120, -80, -40, 0, 40]).all()) with self.assertRaises(IndexError): f.indices(grid_longitude=cf.wo(-90, 370)) # set g = f.subspace(grid_longitude=cf.set([320, 40, 80, 99999])) self.assertEqual(g.size, 30) x = g.construct("grid_longitude").array self.assertTrue((x == [40, 80, 320]).all()) g = f.subspace(grid_longitude=cf.lt(90)) self.assertEqual(g.size, 30) x = g.construct("grid_longitude").array self.assertTrue((x == [0, 40, 80]).all()) g = f.subspace(grid_longitude=cf.gt(90)) self.assertEqual(g.size, 60) x = g.construct("grid_longitude").array self.assertTrue((x == [120, 160, 200, 240, 280, 320]).all()) g = f.subspace(grid_longitude=cf.le(80)) self.assertEqual(g.size, 30) x = g.construct("grid_longitude").array self.assertTrue((x == [0, 40, 80]).all()) g = f.subspace(grid_longitude=cf.ge(80)) self.assertEqual(g.size, 70) x = g.construct("grid_longitude").array self.assertTrue((x == [80, 120, 160, 200, 240, 280, 320]).all()) # 2-d lon = f.auxiliary_coordinate("X") lon.data[...] = numpy.arange(60, 150).reshape(9, 10) lat = f.auxiliary_coordinate("Y") lat.data[...] = numpy.arange(-45, 45).reshape(10, 9) for mode in ("compress", "envelope"): g = f.subspace(mode, longitude=cf.wi(92, 134)) size = 50 self.assertEqual(g.size, size) for mode in (("compress", ), ("envelope", )): g = f.subspace(*mode, longitude=cf.wi(72, 83) | cf.gt(118)) if mode == ("envelope", ): size = 80 else: size = 60 self.assertEqual(g.size, size, mode) for mode in ("compress", "envelope"): g = f.subspace(mode, grid_longitude=cf.contains(23.2)) size = 10 self.assertEqual(g.size, size) self.assertEqual(g.construct("grid_longitude").array, 40) for mode in ("compress", "envelope"): g = f.subspace(mode, grid_latitude=cf.contains(1)) size = 9 self.assertEqual(g.size, size) self.assertEqual(g.construct("grid_latitude").array, 0.88) for mode in ("compress", "envelope"): g = f.subspace(mode, longitude=cf.contains(83)) size = 1 self.assertEqual(g.size, size) self.assertEqual(g.construct("longitude").array, 83) # Calls that should fail with self.assertRaises(Exception): f.subspace(grid_longitude=cf.gt(23), X=cf.wi(92, 134)) with self.assertRaises(Exception): f.subspace(grid_longitude=cf.gt(23), longitude=cf.wi(92, 134)) with self.assertRaises(Exception): f.subspace(grid_latitude=cf.contains(-23.2))