from pathlib import Path
import re, math, random

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

def check_factorial_transfer():
    random.seed(87)
    for _ in range(5000):
        lam=random.uniform(1000,1e6)
        delta=random.uniform(0.001,0.3)
        r=max(1,int(delta*lam/4))
        K=(1+delta)*lam
        denom=K-r
        assert denom>=lam*(1+delta/2)-1e-9
        ratio=lam/denom
        assert math.log(ratio)<=-math.log(1+delta/2)+1e-12
    return True

def check_resolution_order():
    for nu in [0.02,0.1,0.25]:
        X=1e12
        delta=X**(-nu)
        c=0.2
        r=6*c*math.log(X)/delta
        bound=math.exp(-delta*r/6)
        target=X**(-c)
        assert bound<=target*(1+1e-10)
    return True

def check_window():
    for tau in [0.1,0.3,0.6]:
        for kappa in [0.05,0.2,0.5]:
            if kappa<1-tau:
                d=kappa/2
                nu=(d+(1-tau)/2)/2
                assert d<nu<(1-tau)/2
            else:
                # no nu can lie strictly between
                assert not (kappa/2 < (1-tau)/2)
    return True

def check_r_vs_delta_lambda():
    # exponent comparison only
    for tau,nu in [(0.2,0.1),(0.4,0.15),(0.1,0.3)]:
        lhs_exp=nu
        rhs_exp=1-tau-nu
        if 2*nu<1-tau:
            assert lhs_exp<rhs_exp
        else:
            assert lhs_exp>=rhs_exp
    return True

def check_sieve_constant_gap():
    C=1.2
    for nu in [0.02,0.1,0.3]:
        X=1e50
        delta=X**(-nu)
        assert math.log(C)>delta
    return True

def check_prime_power_threshold():
    # exponent-only: H X^-1/2 is o(H X^-nu) if nu<1/2.
    for nu in [0.05,0.2,0.49]:
        assert -0.5 < -nu
    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("factorial_transfer",check_factorial_transfer())
    print("resolution_order",check_resolution_order())
    print("window",check_window())
    print("r_vs_delta_lambda",check_r_vs_delta_lambda())
    print("sieve_constant_gap",check_sieve_constant_gap())
    print("prime_power_threshold",check_prime_power_threshold())
    print("source_delimiters",check_source())
    print("PASS")
