Beispiel #1
0
    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]]))
        )
Beispiel #2
0
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)
Beispiel #3
0
    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}",
            )
Beispiel #4
0
    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))