from pathlib import Path
import re, random, math

HERE=Path(__file__).resolve().parent
PAPER=HERE/"CSM_RH_Paper_56_Seeded_Shrinking_Threshold_Amplification_and_Relocated_Right_Edge_Wall_v0.1_2026-09-08.md"

def Phi(k,a,nu,c):
    return min(a,2*nu,k+c+2*a-2,2-a*(2-k))

def strict_gate(k,a,nu,c):
    return a>k and nu>k/2 and c>2*(1-a) and a<1

def check_strict_gate():
    random.seed(56)
    for _ in range(20000):
        k=random.uniform(0.02,0.98)
        a=random.uniform(0.02,0.999)
        nu=random.uniform(0.001,0.8)
        c=random.uniform(0.001,1.2)
        amp=Phi(k,a,nu,c)>k+1e-12
        gate=strict_gate(k,a,nu,c)
        assert amp==gate,(k,a,nu,c,Phi(k,a,nu,c),amp,gate)
    return True

def ccrit(k):
    return (1-k)*(4-k)/(3-k)

def alpha_star(k,c):
    return 1-c/(4-k)

def output_star(k,c):
    return k+c*(2-k)/(4-k)

def check_modest_c_optimizer():
    worst=0.0
    for k in [0.1,0.3,0.5,0.7,0.9]:
        cc=ccrit(k)
        for c in [0.05*cc,0.3*cc,0.7*cc,0.98*cc]:
            target=output_star(k,c)
            a0=alpha_star(k,c)
            # make threshold non-bottleneck
            nu=0.6
            vals=[]
            for j in range(1,30000):
                a=j/30000
                if a>=1: continue
                vals.append(Phi(k,a,nu,c))
            num=max(vals)
            worst=max(worst,abs(num-target))
            assert abs(num-target)<1e-4,(k,c,num,target,a0)
    return worst

def check_bad_delta_algebra():
    for k in [0.2,0.5,0.8]:
        for a in [0.6,0.8,0.95]:
            for c in [0.05,0.2]:
                # N^(3-k-c) = N^(1+2a-delta)
                d=k+c+2*a-2
                assert abs((1+2*a-d)-(3-k-c))<1e-14
    return True

def check_source():
    s=PAPER.read_text(encoding="utf-8")
    forbidden=[
        r"(?<!\\)\\\(",
        r"(?<!\\)\\\)",
        r"(?<!\\)\\\[",
        r"(?<!\\)\\\]",
    ]
    for pat in forbidden:
        assert re.search(pat,s) is None,pat
    assert s.count("$$")%2==0
    tmp=re.sub(r"\$\$.*?\$\$","",s,flags=re.S)
    assert len(re.findall(r"(?<!\\)\$",tmp))%2==0
    return True

if __name__=="__main__":
    print("strict_gate",check_strict_gate())
    print("modest_c_optimizer_error",check_modest_c_optimizer())
    print("bad_delta_algebra",check_bad_delta_algebra())
    print("source_delimiters",check_source())
    print("PASS")
