def run(self, variable_name: str) -> Optional[np.ndarray]: # If this is a time variable, we check for 'NaT' if self.ds[variable_name].data.dtype.type == np.datetime64: results_array = np.isnat(self.ds[variable_name].data) else: fill_value = DSUtil.get_fill_value(self.ds, variable_name) # If the variable has no _FillValue attribute, then # we select a default value to use if fill_value is None: fill_value = -9999 # Make sure fill value has same data type as the variable fill_value = np.array(fill_value, dtype=self.ds[variable_name].data.dtype.type) # First check if any values are assigned to _FillValue results_array = np.equal(self.ds[variable_name].data, fill_value) # Then, if the value is numeric, we should also check if any values are assigned to NaN if self.ds[variable_name].data.dtype.type in ( type(0.0), np.float16, np.float32, np.float64, ): results_array |= np.isnan(self.ds[variable_name].data) return results_array
def run(self, variable_name: str) -> Optional[np.ndarray]: # If this is a time variable, we check for 'NaT' if self.ds[variable_name].values.dtype.type == np.datetime64: results_array = np.isnat(self.ds[variable_name].values) else: fill_value = DSUtil.get_fill_value(self.ds, variable_name) # If the variable has no _FillValue attribute, then # we select a default value to use if fill_value is None: fill_value = -9999 # Make sure fill value has same data type as the variable fill_value = np.array(fill_value, dtype=self.ds[variable_name].values.dtype.type) # First replace any values that are outside valid_range to be fill_value so # it will get flagged as missing self._replace_invalid_values(fill_value, variable_name) # First check if any values are assigned to _FillValue results_array = np.equal(self.ds[variable_name].values, fill_value) # Then, if the value is numeric, we should also check if any values are assigned to # NaN if self.ds[variable_name].values.dtype.type in (type(0.0), np.float16, np.float32, np.float64): results_array |= np.isnan(self.ds[variable_name].values) return results_array
def run(self, variable_name: str, results_array: np.ndarray): if results_array.any(): fill_value = DSUtil.get_fill_value(self.ds, variable_name) keep_array = np.logical_not(results_array) var_values = self.ds[variable_name].data replaced_values = np.where(keep_array, var_values, fill_value) self.ds[variable_name].data = replaced_values self.record_correction(variable_name)