docs: def k_partitions(collection, k):
      """Generate all ``k``-partitions of a collection.
  
      Example:
          >>> list(k_partitions(range(3), 2))
          [[[0, 1], [2]], [[0], [1, 2]], [[0, 2], [1]]]
      """
      collection = list(collection)
      n = len(collection)
  
      # Special cases
      if n == 0 or k < 1:
          return []
      if k == 1:
          return [[collection]]
  
      a = [0] * (n + 1)
      for j in range(1, k + 1):
          a[n - k + j] = j - 1
      return _f(k, n, 0, n, a, k, collection)