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))
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))
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)
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)