"""
Generate results/matrix_summary.csv from per-scenario eval reports.
One row per scenario, metrics averaged across 11 client/sensor rows.
Uses session 2026-05-03_00-20-00 (all 17 scenarios, thr=0.5).
Output columns: scenario_id, auprc_mean, auprc_std, roc_auc_mean, f1_mean,
mse_mean, mae_mean, avg_payload_bytes, latency_ms_mean
"""
import pandas as pd
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent.parent
RESULTS = ROOT / "results"
SESSION = RESULTS / "2026-05-03_00-20-00"
SOURCES = {
"N01": (SESSION, "N01_eval_report.csv"),
"N02": (SESSION, "N02_eval_report.csv"),
"N03": (SESSION, "N03_eval_report.csv"),
"N04": (SESSION, "N04_eval_report.csv"),
"L05": (SESSION, "L05_eval_report.csv"),
"L06": (SESSION, "L06_eval_report.csv"),
"L07": (SESSION, "L07_eval_report.csv"),
"L08": (SESSION, "L08_eval_report.csv"),
"L09": (SESSION, "L09_eval_report.csv"),
"L10": (SESSION, "L10_eval_report.csv"),
"H11": (SESSION, "H11_eval_report.csv"),
"H12": (SESSION, "H12_eval_report.csv"),
"H13": (SESSION, "H13_eval_report.csv"),
"H14": (SESSION, "H14_eval_report.csv"),
"H15": (SESSION, "H15_eval_report.csv"),
"H16": (SESSION, "H16_eval_report.csv"),
"M17": (SESSION, "M17_eval_report.csv"),
}
METRICS = ["auprc", "roc_auc", "f1", "mse", "mae", "rain_mse", "rain_mae", "payload_bytes", "latency_ms"]
rows = []
for sid, (session_dir, fname) in SOURCES.items():
path = session_dir / fname
if not path.exists():
print(f"[SKIP] {sid}: {path} not found")
continue
df = pd.read_csv(path)
df = df[df["client_id"] != "SUMMARY"].copy()
for col in METRICS:
if col not in df.columns:
df[col] = float("nan")
df[col] = pd.to_numeric(df[col], errors="coerce")
row = {"scenario_id": sid}
row["auprc_mean"] = df["auprc"].mean()
row["auprc_std"] = df["auprc"].std()
row["roc_auc_mean"] = df["roc_auc"].mean()
row["f1_mean"] = df["f1"].mean()
row["mse_mean"] = df["mse"].mean()
row["mae_mean"] = df["mae"].mean()
row["rain_mse_mean"] = df["rain_mse"].mean()
row["rain_mae_mean"] = df["rain_mae"].mean()
row["avg_payload_bytes"] = df["payload_bytes"].mean()
row["latency_ms_mean"] = df["latency_ms"].mean()
rows.append(row)
print(f"[OK] {sid}: AUPRC={row['auprc_mean']:.4f}±{row['auprc_std']:.4f} "
f"payload={row['avg_payload_bytes']:.1f}B F1={row['f1_mean']:.4f}")
out = RESULTS / "matrix_summary.csv"
pd.DataFrame(rows).to_csv(out, index=False)
print(f"\nSaved {len(rows)} scenarios → {out}")