#!/usr/bin/env python3
"""EXPLORATORY (not pre-registered; run after the locked SCORE test): the SCORE cue test on the subset of SCORE's
public file that best matches the paper's main set of 274 claims, by dropping generalisability tests and COVID-era
claims (273 claims). Same estimator and band rule as score_cue_test.py."""
import sys, json
import numpy as np
sys.path.insert(0, ".")
import score_cue_test as S, fred_two_cues as F
import pandas as pd

o = pd.read_csv(S.ORIG, low_memory=False).merge(pd.read_csv(S.META, low_memory=False, usecols=["paper_id", "COS_pub_category"]), on="paper_id", how="left")
o["band"] = [F.p_band(S.TYPE_MAP.get(t), v) for t, v in zip(o["orig_p_value_type"], o["orig_p_value"])]
o["strong"] = o.apply(S.card_strong, axis=1)
o["doi_o"] = o["paper_id"]
r = pd.read_csv(S.REPLI, low_memory=False)
ex = pd.read_csv(S.EXCL)
r = r[~r["report_id"].isin(ex["report_id"])]
vor = r["repli_version_of_record"].map(S.truthy)
r = r[(vor == 1.0) | (~r["claim_id"].isin(r.loc[vor == 1.0, "claim_id"]))]
r = r.sort_values("report_id").drop_duplicates("claim_id", keep="first")
r = r[~r["repli_is_generalizability"].astype(bool) & ~r["is_covid"].astype(bool)]
r["y"] = r["repli_score_criteria_met"].map(S.truthy)
d = o.merge(r[["claim_id", "y"]], on="claim_id").dropna(subset=["y"])
rng = np.random.default_rng(S.SEED)
a = F.run_h1(d, rng); b = F.diff_with_ci(d[d["strong"] == 1.0], d[d["strong"] == 0.0], rng)
print(f"EXPLORATORY · {len(d)} claims, {d['paper_id'].nunique()} papers, {int(d['y'].sum())} replicated")
for k, v in (("A S vs W", a), ("B card strong vs weak", b)):
    print(f"  {k}: {F.pct(v['rate_a'])} ({v['n_a']}, {v['papers_a']}) vs {F.pct(v['rate_b'])} ({v['n_b']}, {v['papers_b']}) · {F.pp(v['diff'])} [{F.pp(v['ci95'][0])}, {F.pp(v['ci95'][1])}] -> {F.h1_verdict(v)}")
json.dump({"claims": int(len(d)), "A": a, "B": b}, open("explore-score-main-set-results.json", "w"), indent=2, default=float)
