code: def slice_indexer(self, start=None, end=None, step=None, kind=None):
          
          start_slice, end_slice = self.slice_locs(start, end, step=step,
                                                   kind=kind)
  
          # return a slice
          if not is_scalar(start_slice):
              raise AssertionError("Start slice bound is non-scalar")
          if not is_scalar(end_slice):
              raise AssertionError("End slice bound is non-scalar")
  
          return slice(start_slice, end_slice, step)
docs: For an ordered or unique index, compute the slice indexer for input
          labels and step.
  
          Parameters
          ----------
          start : label, default None
              If None, defaults to the beginning
          end : label, default None
              If None, defaults to the end
          step : int, default None
          kind : string, default None
  
          Returns
          -------
          indexer : slice
  
          Raises
          ------
          KeyError : If key does not exist, or key is not unique and index is
              not ordered.
  
          Notes
          -----
          This function assumes that the data is sorted, so use at your own peril
  
          Examples
          ---------
          This is a method on all index types. For example you can do:
  
          >>> idx = pd.Index(list('abcd'))
          >>> idx.slice_indexer(start='b', end='c')
          slice(1, 3)
  
          >>> idx = pd.MultiIndex.from_arrays([list('abcd'), list('efgh')])
          >>> idx.slice_indexer(start='b', end=('c', 'g'))
          slice(1, 3)