docs: def merge_indexes(
          indexes,  # type: Dict[Any, Union[Any, List[Any]]]
          variables,  # type: Dict[Any, Variable]
          coord_names,  # type: Set
          append=False,  # type: bool
  ):
      # type: (...) -> Tuple[OrderedDict[Any, Variable], Set]
      """Merge variables into multi-indexes.
  
      Not public API. Used in Dataset and DataArray set_index
      methods.
      """
      vars_to_replace = {}  # Dict[Any, Variable]
      vars_to_remove = []  # type: list
  
      for dim, var_names in indexes.items():
          if isinstance(var_names, str):
              var_names = [var_names]
  
          names, codes, levels = [], [], []  # type: (list, list, list)
          current_index_variable = variables.get(dim)
  
          for n in var_names:
              var = variables[n]
              if (current_index_variable is not None and
                      var.dims != current_index_variable.dims):
                  raise ValueError(
                      "dimension mismatch between %r %s and %r %s"
                      % (dim, current_index_variable.dims, n, var.dims))
  
          if current_index_variable is not None and append:
              current_index = current_index_variable.to_index()
              if isinstance(current_index, pd.MultiIndex):
                  try:
                      current_codes = current_index.codes
                  except AttributeError:
                      # fpr pandas<0.24
                      current_codes = current_index.labels
                  names.extend(current_index.names)
                  codes.extend(current_codes)
                  levels.extend(current_index.levels)
              else:
                  names.append('%s_level_0' % dim)
                  cat = pd.Categorical(current_index.values, ordered=True)
                  codes.append(cat.codes)
                  levels.append(cat.categories)
  
          if not len(names) and len(var_names) == 1:
              idx = pd.Index(variables[var_names[0]].values)
  
          else:
              for n in var_names:
                  names.append(n)
                  var = variables[n]
                  cat = pd.Categorical(var.values, ordered=True)
                  codes.append(cat.codes)
                  levels.append(cat.categories)
  
              idx = pd.MultiIndex(levels, codes, names=names)
  
          vars_to_replace[dim] = IndexVariable(dim, idx)
          vars_to_remove.extend(var_names)
  
      new_variables = OrderedDict([(k, v) for k, v in variables.items()
                                   if k not in vars_to_remove])
      new_variables.update(vars_to_replace)
      new_coord_names = coord_names | set(vars_to_replace)
      new_coord_names -= set(vars_to_remove)
  
      return new_variables, new_coord_names