docs: def _process_slice(self, arg):
          """
          process the input slice for use calling the C code
          """
          start = arg.start
          stop = arg.stop
          step = arg.step
  
          nrows = self._info['nrows']
          if step is None:
              step = 1
          if start is None:
              start = 0
          if stop is None:
              stop = nrows
  
          if start < 0:
              start = nrows + start
              if start < 0:
                  raise IndexError("Index out of bounds")
  
          if stop < 0:
              stop = nrows + start + 1
  
          if stop < start:
              # will return an empty struct
              stop = start
  
          if stop > nrows:
              stop = nrows
          return slice(start, stop, step)