import json, re, sys
sys.path.insert(0, '.')
from c_slop import measure, NOTXY
r = json.load(open('results.json'))
out = {}
for m in ["deslop-local", "qwen3-base-local"]:
    ws = [w for w in r["writing"] if w["model"] == m]
    tot = {"answers": len(ws), "words": 0, "em_dash": 0, "en_dash": 0, "double_hyphen": 0, "not_x_but_y": 0}
    hits = []; per = []
    for w in ws:
        x = measure(w["text"])
        for k in ["words", "em_dash", "en_dash", "double_hyphen", "not_x_but_y"]: tot[k] += x[k]
        per.append({"seed": w["seed"], "prompt_i": w["prompt_i"], **x, "tok_per_s": w["tok_per_s"]})
        for p in NOTXY:
            for mm in re.finditer(p, w["text"], flags=re.I): hits.append({"seed": w["seed"], "prompt_i": w["prompt_i"], "match": mm.group(0)})
    tot["em_per_1000"] = round(1000 * tot["em_dash"] / max(tot["words"], 1), 2)
    tot["notxy_per_1000"] = round(1000 * tot["not_x_but_y"] / max(tot["words"], 1), 2)
    tot["answers_with_em_dash"] = sum(1 for p in per if p["em_dash"] > 0)
    q = [x for x in r["quiz"] if x["model"] == m]
    tot["quiz_correct"] = sum(x["correct"] for x in q); tot["quiz_n"] = len(q)
    tot["quiz_wrong"] = [(x["q"], x["answer"][:120]) for x in q if not x["correct"]]
    tot["mean_tok_per_s"] = round(sum(p["tok_per_s"] or 0 for p in per) / max(len(per), 1), 1)
    out[m] = {"totals": tot, "per_answer": per, "notxy_matches": hits}
json.dump(out, open('analysis.json', 'w'), indent=1, ensure_ascii=False)
for m in out: print(m, json.dumps(out[m]["totals"], ensure_ascii=False))
