code: def slice_slice(old_slice, applied_slice, size):
      
      step = (old_slice.step or 1) * (applied_slice.step or 1)
  
      # For now, use the hack of turning old_slice into an ndarray to reconstruct
      # the slice start and stop. This is not entirely ideal, but it is still
      # definitely better than leaving the indexer as an array.
      items = _expand_slice(old_slice, size)[applied_slice]
      if len(items) > 0:
          start = items[0]
          stop = items[-1] + int(np.sign(step))
          if stop < 0:
              stop = None
      else:
          start = 0
          stop = 0
      return slice(start, stop, step)
docs: Given a slice and the size of the dimension to which it will be applied,
      index it with another slice to return a new slice equivalent to applying
      the slices sequentially