docs: def get_slice_info(slice_times):
      """
      Extract slice order from slice timing info.
  
      TODO: Be more specific with slice orders.
      Currently anything where there's some kind of skipping is interpreted as
      interleaved of some kind.
  
      Parameters
      ----------
      slice_times : array-like
          A list of slice times in seconds or milliseconds or whatever.
  
      Returns
      -------
      slice_order_name : :obj:`str`
          The name of the slice order sequence.
      """
      # Slice order
      slice_times = remove_duplicates(slice_times)
      slice_order = sorted(range(len(slice_times)), key=lambda k: slice_times[k])
      if slice_order == range(len(slice_order)):
          slice_order_name = 'sequential ascending'
      elif slice_order == reversed(range(len(slice_order))):
          slice_order_name = 'sequential descending'
      elif slice_order[0] < slice_order[1]:
          # We're allowing some wiggle room on interleaved.
          slice_order_name = 'interleaved ascending'
      elif slice_order[0] > slice_order[1]:
          slice_order_name = 'interleaved descending'
      else:
          slice_order = [str(s) for s in slice_order]
          raise Exception('Unknown slice order: [{0}]'.format(', '.join(slice_order)))
  
      return slice_order_name