docs: def _find_ancillary_vars(self, ds, refresh=False):
          '''
          Returns a list of variable names that are defined as ancillary
          variables in the dataset ds.
  
          An ancillary variable generally is a metadata container and referenced
          from other variables via a string reference in an attribute.
  
          - via ancillary_variables (3.4)
          - "grid mapping var" (5.6)
          - TODO: more?
  
          The result is cached by the passed in dataset object inside of this
          checker. Pass refresh=True to redo the cached value.
  
          :param netCDF4.Dataset ds: An open netCDF dataset
          :param bool refresh: if refresh is set to True, the cache is
                               invalidated.
          :rtype: list
          :return: List of variable names (str) that are defined as ancillary
                   variables in the dataset ds.
          '''
  
          # Used the cached version if it exists and is not empty
          if self._ancillary_vars.get(ds, None) and refresh is False:
              return self._ancillary_vars[ds]
  
          # Invalidate the cache at all costs
          self._ancillary_vars[ds] = []
  
          for name, var in ds.variables.items():
              if hasattr(var, 'ancillary_variables'):
                  for anc_name in var.ancillary_variables.split(" "):
                      if anc_name in ds.variables:
                          self._ancillary_vars[ds].append(anc_name)
  
              if hasattr(var, 'grid_mapping'):
                  gm_name = var.grid_mapping
                  if gm_name in ds.variables:
                      self._ancillary_vars[ds].append(gm_name)
  
          return self._ancillary_vars[ds]