docs: def _get_coord_axis_map(self, ds):
          '''
          Returns a dictionary mapping each coordinate to a letter identifier
          describing the _kind_ of coordinate.
  
          :param netCDF4.Dataset ds: An open netCDF dataset
  
          :rtype: dict
          :return: A dictionary with variable names mapped to axis abbreviations,
                   i.e. {'longitude': 'X', ... 'pressure': 'Z'}
          '''
          expected = ['T', 'Z', 'Y', 'X']
          coord_vars = self._find_coord_vars(ds)
          coord_axis_map = {}
  
          # L - Unlimited Coordinates
          # T - Time coordinates
          # Z - Depth/Altitude Coordinate
          # Y - Y-Coordinate (latitude)
          # X - X-Coordinate (longitude)
          # A - Auxiliary Coordinate
          # I - Instance Coordinate
  
          time_variables = cfutil.get_time_variables(ds)
          lat_variables = cfutil.get_latitude_variables(ds)
          lon_variables = cfutil.get_longitude_variables(ds)
          z_variables = cfutil.get_z_variables(ds)
  
          for coord_name in coord_vars:
              coord_var = ds.variables[coord_name]
              axis = getattr(coord_var, 'axis', None)
              standard_name = getattr(coord_var, 'standard_name', None)
  
              # Unlimited dimensions must come first
              if ds.dimensions[coord_name].isunlimited():
                  coord_axis_map[coord_name] = 'L'
              # axis takes precedence over standard_name
              elif axis in expected:
                  coord_axis_map[coord_name] = axis
              elif standard_name == 'time':
                  coord_axis_map[coord_name] = 'T'
              elif standard_name == 'longitude':
                  coord_axis_map[coord_name] = 'X'
              elif standard_name == 'latitude':
                  coord_axis_map[coord_name] = 'Y'
              elif standard_name in ['height', 'depth', 'altitude']:
                  coord_axis_map[coord_name] = 'Z'
              elif cfutil.is_compression_coordinate(ds, coord_name):
                  coord_axis_map[coord_name] = 'C'
              elif coord_name in time_variables:
                  coord_axis_map[coord_name] = 'T'
              elif coord_name in z_variables:
                  coord_axis_map[coord_name] = 'Z'
              elif coord_name in lat_variables:
                  coord_axis_map[coord_name] = 'Y'
              elif coord_name in lon_variables:
                  coord_axis_map[coord_name] = 'X'
              else:
                  # mark the coordinate variable as unknown
                  coord_axis_map[coord_name] = 'U'
  
          for dimension in self._get_instance_dimensions(ds):
              if dimension not in coord_axis_map:
                  coord_axis_map[dimension] = 'I'
  
          # Dimensions of auxiliary coordinate variables will be marked with A.
          # This is useful to help determine if the dimensions are used like a
          # mapping from grid coordinates to physical lat/lon
          for coord_name in self._find_aux_coord_vars(ds):
              coord_var = ds.variables[coord_name]
              # Skip label auxiliary coordinates
              if coord_var.dtype.char == 'S':
                  continue
              for dimension in coord_var.dimensions:
                  if dimension not in coord_axis_map:
                      coord_axis_map[dimension] = 'A'
  
          # If a dimension does not have a coordinate variable mark it as unknown
          # 'U'
          for dimension in ds.dimensions:
              if dimension not in coord_axis_map:
                  coord_axis_map[dimension] = 'U'
  
          return coord_axis_map