docs: def partitions(collection):
      """Generate all set partitions of a collection.
  
      Example:
          >>> list(partitions(range(3)))  # doctest: +NORMALIZE_WHITESPACE
          [[[0, 1, 2]],
           [[0], [1, 2]],
           [[0, 1], [2]],
           [[1], [0, 2]],
           [[0], [1], [2]]]
      """
      collection = list(collection)
  
      # Special cases
      if not collection:
          return
  
      if len(collection) == 1:
          yield [collection]
          return
  
      first = collection[0]
      for smaller in partitions(collection[1:]):
          for n, subset in enumerate(smaller):
              yield smaller[:n] + [[first] + subset] + smaller[n+1:]
          yield [[first]] + smaller