docs: def check_coordinate_types(self, ds):
          '''
          Check the axis attribute of coordinate variables
  
          CF §4 The attribute axis may be attached to a coordinate variable and
          given one of the values X, Y, Z or T which stand for a longitude,
          latitude, vertical, or time axis respectively. Alternatively the
          standard_name attribute may be used for direct identification.
  
          :param netCDF4.Dataset ds: An open netCDF dataset
          :rtype: list
          :return: List of results
          '''
          ret_val = []
  
          for variable in ds.get_variables_by_attributes(axis=lambda x: x is not None):
              name = variable.name
              # Coordinate compressions should not be checked as a valid
              # coordinate, which they are not. They are a mechanism to project
              # an array of indices onto a 2-d grid containing valid coordinates.
              if cfutil.is_compression_coordinate(ds, name):
                  continue
  
              variable = ds.variables[name]
              # Even though it's not allowed in CF 1.6, it is allowed in CF 1.7
              # and we see people do it, often.
              if hasattr(variable, 'cf_role'):
                  continue
  
              # §6.1 allows for labels to be referenced as auxiliary coordinate
              # variables, which should not be checked like the rest of the
              # coordinates.
              if variable.dtype.char == 'S':
                  continue
  
              axis = getattr(variable, 'axis', None)
  
              if axis is not None:
                  valid_axis = self._check_axis(ds, name)
                  ret_val.append(valid_axis)
  
          return ret_val