from pathlib import Path
import re, math, random

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

def phi_pair(k,tau,xi):
    return min(1-tau,xi,k+tau*(2-k))

def check_strict_gate():
    random.seed(71)
    for _ in range(30000):
        k=random.uniform(0.01,0.99)
        tau=random.uniform(0.001,0.98)
        xi=random.uniform(0.001,1.2)
        amp=phi_pair(k,tau,xi)>k+1e-12
        gate=(tau<1-k and xi>k)
        assert amp==gate,(k,tau,xi,phi_pair(k,tau,xi),amp,gate)
    return True

def check_gain():
    random.seed(710)
    for _ in range(10000):
        k=random.uniform(0.01,0.95)
        tau=random.uniform(0.001,1-k-0.001)
        xi=k+random.uniform(0.001,0.5)
        gain=phi_pair(k,tau,xi)-k
        rhs=min(1-tau-k,xi-k,tau*(2-k))
        assert abs(gain-rhs)<1e-13
    return True

def check_optimum():
    for k in [0.1,0.3,0.5,0.7,0.9]:
        tau=(1-k)/(3-k)
        g1=1-tau-k
        g2=tau*(2-k)
        assert abs(g1-g2)<1e-14
        target=(1-k)*(2-k)/(3-k)
        assert abs(g1-target)<1e-14
    return True

def check_exponents():
    for tau in [0.05,0.2,0.4]:
        alpha=1-tau
        # NH log(N/H) = NH^2 N^(-alpha+o(1))
        # powers: 1+alpha vs 1+2alpha-alpha
        assert abs((1+alpha)-(1+2*alpha-alpha))<1e-14
    return True

def check_residual_cauchy():
    # If sum E_r^2 <= H N^2 L^-A, weighted sum <= ~NH^2 L^-A/2.
    for H in [10,100,1000]:
        sumw2=sum((H-r)**2 for r in range(1,H))
        assert sumw2 <= H**3/3 + H**2
    return True

def check_source():
    s=PAPER.read_text(encoding="utf-8")
    for pat in [r"(?<!\\)\\\(",r"(?<!\\)\\\)",r"(?<!\\)\\\[",r"(?<!\\)\\\]"]:
        assert re.search(pat,s) is None
    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("gain",check_gain())
    print("optimum",check_optimum())
    print("local_exponent",check_exponents())
    print("cauchy_weight",check_residual_cauchy())
    print("source_delimiters",check_source())
    print("PASS")
