from pathlib import Path
import random, re

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

def omega(N,t,m):
    if m<=N:
        return (2**(1j*t)-1)/N
    if m<2*N:
        return ((2*N/m)**(1j*t)-1)/m
    return 0j

def g(N,t,x):
    return ((2*N/x)**(1j*t)-1)/x

def check_abel():
    random.seed(50)
    worst=0.0
    for N in [5,9,17,31]:
        for t in [0.07,0.4,1.3,4.9]:
            a=[0j]+[
                random.uniform(-2,2)+1j*random.uniform(-2,2)
                for _ in range(2*N)
            ]
            lhs=sum(a[m]*omega(N,t,m) for m in range(1,2*N+1))
            A=[0j]*(2*N+1)
            for m in range(1,2*N+1):
                A[m]=A[m-1]+a[m]
            rhs=sum(A[m]*(g(N,t,m)-g(N,t,m+1)) for m in range(N,2*N))
            worst=max(worst,abs(lhs-rhs))
    assert worst<1e-11, worst
    return worst

def check_source():
    s=PAPER.read_text(encoding="utf-8")
    # Reject actual delimiter commands \( \) \[ \], but do not confuse
    # a LaTeX row break such as \\[2mm] with the display delimiter \[.
    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("abel_worst_error",check_abel())
    print("source_delimiters",check_source())
    print("PASS")
