from pathlib import Path
import re, random, math

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

def check_safe_parameters():
    for d in [0.02,0.1,0.25,0.49]:
        for eps in [0.01,0.03,0.08,0.099]:
            tau=d*eps/100
            w=tau/8
            assert 4*w < tau
            assert tau+4*w/3 < d*eps/5
            assert w <= eps/1000
            eta=w/10
            assert eta < d-4*w
            assert eta < 1-tau-eps
            assert abs(eta-d*eps/8000)<1e-15
    return True

def check_dp_gate():
    random.seed(62)
    for _ in range(10000):
        d=random.uniform(0.01,0.49)
        eps=random.uniform(0.01,0.1)
        tau=random.uniform(1e-6, d*eps/10)
        maxw=0.75*(d*eps/5-tau)
        if maxw<=0:
            continue
        w=random.uniform(1e-8,maxw*0.99)
        lhs=tau+w-d*eps/5
        assert lhs < -w/3
    return True

def check_W_ceiling():
    for tau in [0.001,0.01,0.1,0.4]:
        w=tau/4
        assert w/10 <= tau/40+1e-15
    return True

def check_rough_flatness():
    # exact periodic counting sanity on small squarefree q
    for q in [6,30,210]:
        phi=sum(1 for a in range(1,q+1) if math.gcd(a,q)==1)
        weight=q/phi
        for H in [10,37,1000]:
            for x in [0,7,123]:
                count=sum(1 for n in range(x+1,x+H+1) if math.gcd(n,q)==1)
                S=weight*count
                # discrepancy <= weight*q
                assert abs(S-H) <= weight*q + 1e-12
    return True

def check_pole_cancellation():
    # algebraic residue at s=1: (q/phi(q))*prod_{p|q}(1-1/p)=1
    for primes in [[2,3],[2,3,5],[2,3,5,7]]:
        q=1
        prod=1.0
        for p in primes:
            q*=p
            prod*=1-1/p
        phi=q*prod
        residue=(q/phi)*prod
        assert abs(residue-1)<1e-12
    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("safe_parameters",check_safe_parameters())
    print("dp_gate",check_dp_gate())
    print("W_ceiling",check_W_ceiling())
    print("rough_flatness",check_rough_flatness())
    print("pole_cancellation",check_pole_cancellation())
    print("source_delimiters",check_source())
    print("PASS")
