"""Reconstructed integer checks for method50, not recovery of lost source bytes."""
from fractions import Fraction as F
from pathlib import Path
import json
A={1,2,3,5,6,7,8}
cases={
81:([51,47,38,26,-15,33,25,9,128],[910,73,-9,-53,-50,33,-1,86,33],234),
128:([81,75,60,41,-24,52,39,15,203],[1834,-77,-4,-52,-39,24,-80,-56,-59],1052)}
def autocorr(p):
    return [sum(p[j+k]*p[j] for j in range(len(p)-k)) for k in range(len(p))]
out=[]
for q,(p,expected,margin) in cases.items():
    h=[4]+[int(k in A) for k in range(1,9)]
    ac=autocorr(p)
    r=[q*q*h[k]-ac[k] for k in range(9)]
    assert r==expected
    delta=r[0]-2*sum(abs(x) for x in r[1:])
    assert delta==margin>0
    assert sum(x*x for x in p)+delta+2*sum(abs(x) for x in r[1:])==4*q*q
    B=sum(abs(F(x,q)) for x in p);d=F(delta,q*q)
    bound=F(len(p))*(2*B+1)/d
    threshold=max((len(p)+1)//2,-(-bound.numerator//bound.denominator))
    out.append({"q":q,"polynomial":p,"residual":r,"margin":delta,"B":str(B),"delta_scaled":str(d),"sufficient_all_q_threshold":threshold})
assert out[1]["B"]=="295/64" and out[1]["sufficient_all_q_threshold"]==1433
p0=[F(x,128) for x in cases[128][0]]
for q in [1433,1434,2027,4096,104729]:
    # Nearest rational rounding, with ties rounded upward; coefficients are rational.
    p=[(2*(x*q).numerator+(x*q).denominator)//(2*(x*q).denominator) for x in p0]
    ac=autocorr(p)
    r=[q*q*(4 if k==0 else int(k in A))-ac[k] for k in range(9)]
    assert r[0]-2*sum(abs(x) for x in r[1:])>0
result={"status":"passed","arithmetic":"integer/Fraction","scope":"explicit identities and selected instances of proved rounding lemma","cases":out}
path=Path(__file__).with_name("quantization_50_reconstructed_results.json")
path.write_text(json.dumps(result,indent=2)+"\n")
print(json.dumps({"status":"passed","identities":2,"extra_rounding_checks":5,"all_q_threshold":1433}))

