import numpy as np
values=np.array([.02,-.01,.02]); labels=np.array(['A','B','C'])
order=np.argsort(values,kind='stable')
assert order.tolist()==[1,0,2]
print('ranked pairs',list(zip(labels[order].tolist(),values[order].tolist())))
r1=np.random.default_rng(2026); r2=np.random.default_rng(2026)
draws1=r1.normal(size=5); draws2=r2.normal(size=5)
assert np.array_equal(draws1,draws2)
print('repeatable normal',np.round(draws1,6).tolist())
rng=np.random.default_rng(2026); n=10000
heads=rng.integers(0,2,size=n)
estimate=heads.mean(); se=np.sqrt(.5*.5/n)
assert 0<=estimate<=1 and np.isclose(estimate,heads.sum()/n)
print('coin estimate/theoretical SE',float(estimate),float(se))
idx=rng.permutation(12); train=idx[:8]; test=idx[8:]
assert len(set(train)&set(test))==0 and len(set(idx))==12
print('split sizes',len(train),len(test))
