コード例 #1
0
    def test_is_time_variable(self):
        var1 = MockVariable()
        var1.standard_name = 'time'
        self.assertTrue(is_time_variable('not_time', var1))

        var2 = MockVariable()
        self.assertTrue(is_time_variable('time', var2))

        self.assertFalse(is_time_variable('not_time', var2))

        var3 = MockVariable()
        var3.axis = 'T'
        self.assertTrue(is_time_variable('maybe_time', var3))

        var4 = MockVariable()
        var4.units = 'seconds since 1900-01-01'
        self.assertTrue(is_time_variable('maybe_time', var4))
コード例 #2
0
ファイル: test_cf.py プロジェクト: ioos/compliance-checker
    def test_is_time_variable(self):
        var1 = MockVariable()
        var1.standard_name = 'time'
        self.assertTrue(is_time_variable('not_time', var1))

        var2 = MockVariable()
        self.assertTrue(is_time_variable('time', var2))

        self.assertFalse(is_time_variable('not_time', var2))

        var3 = MockVariable()
        var3.axis = 'T'
        self.assertTrue(is_time_variable('maybe_time', var3))

        var4 = MockVariable()
        var4.units = 'seconds since 1900-01-01'
        self.assertTrue(is_time_variable('maybe_time', var4))
コード例 #3
0
ファイル: test_cf.py プロジェクト: petejan/compliance-checker
    def test_is_time_variable(self):
        var1 = MockVariable()
        var1.standard_name = "time"
        self.assertTrue(is_time_variable("not_time", var1))

        var2 = MockVariable()
        self.assertTrue(is_time_variable("time", var2))

        self.assertFalse(is_time_variable("not_time", var2))

        var3 = MockVariable()
        var3.axis = "T"
        self.assertTrue(is_time_variable("maybe_time", var3))

        var4 = MockVariable()
        var4.units = "seconds since 1900-01-01"
        self.assertTrue(is_time_variable("maybe_time", var4))
コード例 #4
0
ファイル: acdd.py プロジェクト: webtrike/compliance-checker
    def check_time_extents(self, ds):
        """
        Check that the values of time_coverage_start/time_coverage_end approximately match the data.
        """
        if not (hasattr(ds.dataset, 'time_coverage_start')
                and hasattr(ds.dataset, 'time_coverage_end')):
            return

        epoch = parse_dt("1970-01-01 00:00:00 UTC")
        t_min = (parse_dt(ds.dataset.time_coverage_start) -
                 epoch).total_seconds()
        t_max = (parse_dt(ds.dataset.time_coverage_end) -
                 epoch).total_seconds()

        # identify t vars as per CF 4.4
        t_vars = [
            var for name, var in ds.dataset.variables.iteritems()
            if is_time_variable(name, var)
        ]

        if len(t_vars) == 0:
            return Result(
                BaseCheck.MEDIUM, False, 'time_coverage_extents_match',
                'Could not find time variable to test extent of time_coverage_start/time_coverage_end, see CF-1.6 spec chapter 4.4'
            )

        obs_mins = {
            var._name: Unit(str(
                var.units)).get_converter("seconds since 1970-01-01").evaluate(
                    np.nanmin(var))
            for var in t_vars
        }
        obs_maxs = {
            var._name: Unit(str(
                var.units)).get_converter("seconds since 1970-01-01").evaluate(
                    np.nanmax(var))
            for var in t_vars
        }

        min_pass = any(
            (np.isclose(t_min, min_val) for min_val in obs_mins.itervalues()))
        max_pass = any(
            (np.isclose(t_max, max_val) for max_val in obs_maxs.itervalues()))

        allpass = sum((min_pass, max_pass))

        msgs = []
        if not min_pass:
            msgs.append(
                "Data for possible time variables (%s) did not match time_coverage_start value (%s)"
                % (obs_mins, t_min))
        if not max_pass:
            msgs.append(
                "Data for possible time variables (%s) did not match time_coverage_end value (%s)"
                % (obs_maxs, t_max))

        return Result(BaseCheck.MEDIUM, (allpass, 2),
                      'time_coverage_extents_match', msgs)
コード例 #5
0
ファイル: acdd.py プロジェクト: benjwadams/compliance-checker
    def check_time_extents(self, ds):
        """
        Check that the values of time_coverage_start/time_coverage_end approximately match the data.
        """
        if not (hasattr(ds, "time_coverage_start") and hasattr(ds, "time_coverage_end")):
            return

        epoch = parse_dt("1970-01-01 00:00:00 UTC")
        t_min = (parse_dt(ds.time_coverage_start) - epoch).total_seconds()
        t_max = (parse_dt(ds.time_coverage_end) - epoch).total_seconds()

        # identify t vars as per CF 4.4
        t_vars = [var for name, var in ds.variables.items() if is_time_variable(name, var)]

        if len(t_vars) == 0:
            return Result(
                BaseCheck.MEDIUM,
                False,
                "time_coverage_extents_match",
                [
                    "Could not find time variable to test extent of time_coverage_start/time_coverage_end, see CF-1.6 spec chapter 4.4"
                ],
            )

        obs_mins = {
            var._name: Unit(str(var.units)).convert(np.nanmin(var), "seconds since 1970-01-01") for var in t_vars
        }
        obs_maxs = {
            var._name: Unit(str(var.units)).convert(np.nanmax(var), "seconds since 1970-01-01") for var in t_vars
        }

        min_pass = any((np.isclose(t_min, min_val) for min_val in obs_mins.values()))
        max_pass = any((np.isclose(t_max, max_val) for max_val in obs_maxs.values()))

        allpass = sum((min_pass, max_pass))

        msgs = []
        if not min_pass:
            msgs.append(
                "Data for possible time variables (%s) did not match time_coverage_start value (%s)" % (obs_mins, t_min)
            )
        if not max_pass:
            msgs.append(
                "Data for possible time variables (%s) did not match time_coverage_end value (%s)" % (obs_maxs, t_max)
            )

        return Result(BaseCheck.MEDIUM, (allpass, 2), "time_coverage_extents_match", msgs)