from pathlib import Path
import re, math, random, cmath

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

def farey_min_sep(R):
    pts=[]
    for q in range(R+1,2*R+1):
        for a in range(1,q):
            if math.gcd(a,q)==1:
                pts.append(a/q)
    pts.sort()
    return min(pts[i+1]-pts[i] for i in range(len(pts)-1))

def check_farey():
    vals=[]
    for R in [2,3,5,8,12]:
        sep=farey_min_sep(R)
        vals.append((R,sep,1/(4*R*R)))
        assert sep+1e-15 >= 1/(4*R*R)
    return vals

def check_power_algebra():
    for u in [0.01,0.05,0.2,0.4]:
        # R^-1 at R=X^u is X^-u.
        assert u>0
    return True

def check_jutila_condition():
    random.seed(66)
    for _ in range(10000):
        delta=random.uniform(0.001,0.24)
        v=random.uniform(0.001,0.5)
        threshold=2*delta*v/(1-4*delta)
        u=threshold+random.uniform(0.001,0.5)
        exponent=-u+2*delta*(2*u+v)
        assert exponent<0,(delta,v,u,exponent)
    return True

def check_character_gauss_prime3():
    # For mod 3 nonprincipal character, |tau|^2=3.
    chi={0:0,1:1,2:-1}
    tau=sum(chi[a]*cmath.exp(2j*math.pi*a/3) for a in range(3))
    assert abs(abs(tau)**2-3)<1e-12
    return abs(tau)**2

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("farey",check_farey())
    print("power_algebra",check_power_algebra())
    print("jutila_condition",check_jutila_condition())
    print("gauss_mod3",check_character_gauss_prime3())
    print("source_delimiters",check_source())
    print("PASS")
