code: def slice(source, *args):
      
      s = builtins.slice(*args)
      start, stop, step = s.start or 0, s.stop, s.step or 1
      # Filter the first items
      if start < 0:
          source = takelast.raw(source, abs(start))
      elif start > 0:
          source = skip.raw(source, start)
      # Filter the last items
      if stop is not None:
          if stop >= 0 and start < 0:
              raise ValueError(
                  "Positive stop with negative start is not supported")
          elif stop >= 0:
              source = take.raw(source, stop - start)
          else:
              source = skiplast.raw(source, abs(stop))
      # Filter step items
      if step is not None:
          if step > 1:
              source = filterindex.raw(source, lambda i: i % step == 0)
          elif step < 0:
              raise ValueError("Negative step not supported")
      # Return
      return source
docs: Slice an asynchronous sequence.
  
      The arguments are the same as the builtin type slice.
  
      There are two limitations compare to regular slices:
      - Positive stop index with negative start index is not supported
      - Negative step is not supported