class_docstr: NWCSAF PPS&MSG NetCDF reader.
code: def _mask_variable(variable):
      if "_FillValue" in variable.attrs:
          variable = variable.where(
              variable != variable.attrs["_FillValue"]
          )
          variable.attrs["_FillValue"] = np.nan
      if "valid_range" in variable.attrs:
          variable = variable.where(
              variable <= variable.attrs["valid_range"][1]
          )
          variable = variable.where(
              variable >= variable.attrs["valid_range"][0]
          )
      if "valid_max" in variable.attrs:
          variable = variable.where(
              variable <= variable.attrs["valid_max"]
          )
      if "valid_min" in variable.attrs:
          variable = variable.where(
              variable >= variable.attrs["valid_min"]
          )
      return variable
  
imports: import functools
  import logging
  import os
  from contextlib import suppress
  from datetime import datetime
  import dask.array
  import numpy
  import xarray
  from pyproj import CRS
  from pyresample.geometry import AreaDefinition
  from satpy.readers.file_handlers import BaseFileHandler
  from satpy.readers.utils import unzip_file
  from satpy.utils import get_chunk_size_limit
label_desc: Use image node_id 10 for calling the NcNWCSAF obj's underlying member method code with example usage: obj._mask_variable(variable) and returns: variable