<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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))