from pathlib import Path
import re, random, math

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

def check_brownian_suffix_identity():
    random.seed(53)
    worst=0.0
    for N in [2,3,5,9,17]:
        c=[0.0]+[random.uniform(-2,2) for _ in range(2*N)]
        B=[0.0]*(2*N+1)
        for n in range(1,2*N+1):
            B[n]=B[n-1]+c[n]
        y=[B[N]]+[c[N+r] for r in range(1,N)]
        z=[0.0]+[y[N-i] for i in range(1,N+1)]
        Jbrown=0.0
        for i in range(1,N+1):
            for j in range(1,N+1):
                Jbrown += z[i]*min(i,j)*z[j]
        Jphysical=sum(B[n]**2 for n in range(N,2*N))
        worst=max(worst,abs(Jbrown-Jphysical))
    assert worst<1e-10, worst
    return worst

def check_discrete_continuous_norm_bound():
    random.seed(530)
    worst=0.0
    for N in [3,8,19,47]:
        E=[random.uniform(-10,10) for _ in range(N)]
        disc=math.sqrt(sum(e*e for e in E))
        # exact integral on each unit interval of (E-u)^2
        cont2=sum(e*e-e+1.0/3.0 for e in E)
        cont=math.sqrt(max(cont2,0.0))
        bound=math.sqrt(N/3.0)
        excess=max(0.0,abs(cont-disc)-bound)
        worst=max(worst,excess)
        assert abs(cont-disc)<=bound+1e-12
    return worst

def check_mellin_exponent_algebra():
    # A=3-kappa+eps -> boundary (A-1)/2
    for kappa in [0.1,0.25,0.5,0.75,1.0]:
        for eps in [0.001,0.03]:
            A=3-kappa+eps
            boundary=(A-1)/2
            target=1-kappa/2+eps/2
            assert abs(boundary-target)<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("brownian_physical_identity_worst",check_brownian_suffix_identity())
    print("discrete_continuous_norm_excess",check_discrete_continuous_norm_bound())
    print("mellin_exponent_algebra",check_mellin_exponent_algebra())
    print("source_delimiters",check_source())
    print("PASS")
