import json, re, sys, collections
def norm(s): return re.sub(r"[\s$,%]|million|thousand","",(s or "").lower()).replace("—","-").replace("–","-").replace("(","-").replace(")","")
titles={"998c8ed06c0be22d":"Q1 2026 10-Q","705c9a88ad5d2694":"Q1 2026 supplement","91c27397e36f1cd5":"Q1 2026 release","05d219e055142f19":"FY 2025 10-K","7b3e369dc5223e3c":"Q4 2025 supplement","e273e835cb26c428":"Q4 2025 release"}
for f in sys.argv[1:]:
    d=json.load(open(f)); c=collections.Counter(); bc=nc=0
    for r in d["rows"]:
        b=r["baseline"]; bc+=sum(b["context_chars"]); nc+=sum(r["context_chars"])
        if b["shape"]=="scalar" and r["shape"]=="scalar": c["same" if norm(b["payload"].get("value"))==norm(r["payload"].get("value")) else "diff"]+=1
        elif b["shape"]=="scalar": c["lost"]+=1
        elif r["shape"]=="scalar": c["gained"]+=1
        c["err"]+= r["shape"]=="error"
    bs=sum(1 for r in d["rows"] if r["baseline"]["shape"]=="scalar"); ns=sum(1 for r in d["rows"] if r["shape"]=="scalar")
    print(f"[{d['mode']}] {titles.get(d['doc_key'],d['doc_key']):20s} scalar {bs:>2d}->{ns:<2d} same {c['same']:>2d} diff {c['diff']:>2d} lost {c['lost']:>2d} gained {c['gained']:>2d} err {c['err']} | Opus ctx {bc/len(d['rows'])/4:6.0f} -> {nc/len(d['rows'])/4:5.0f} tokens ({100*nc/bc:.0f}%)")
