docs: def _group_until_different(items: Iterable[TIn],
                             key: Callable[[TIn], TKey],
                             value=lambda e: e):
      """Groups runs of items that are identical according to a keying function.
  
      Args:
          items: The items to group.
          key: If two adjacent items produce the same output from this function,
              they will be grouped.
          value: Maps each item into a value to put in the group. Defaults to the
              item itself.
  
      Examples:
          _group_until_different(range(11), key=is_prime) yields
              (False, [0, 1])
              (True, [2, 3])
              (False, [4])
              (True, [5])
              (False, [6])
              (True, [7])
              (False, [8, 9, 10])
  
      Yields:
          Tuples containing the group key and item values.
      """
      return ((k, [value(i) for i in v]) for (k, v) in groupby(items, key))