# -*- coding: utf-8 -*-
from pathlib import Path

import pandas as pd


ROOT = Path(__file__).resolve().parents[2]
PRED = ROOT / "検証" / "results" / "downstream_model_comparison" / "predictions.csv"


def grade_num(score):
    if score >= 80:
        return 3  # A
    if score >= 60:
        return 2  # B
    if score >= 21:
        return 1  # C
    return 0  # D


def main():
    df = pd.read_csv(PRED)
    test = df[(df["split"] == "test") & (df["target"] == "human_total_score")].copy()
    test["human_grade"] = test["human_score"].map(grade_num)
    test["pred_grade"] = test["prediction"].map(grade_num)
    test["grade_abs_diff"] = (test["human_grade"] - test["pred_grade"]).abs()
    rows = []
    for (feature_set, model), group in test.groupby(["feature_set", "model"]):
        rows.append(
            {
                "feature_set": feature_set,
                "model": model,
                "n": len(group),
                "exact_grade_match": (group["grade_abs_diff"] == 0).mean(),
                "within_1_grade": (group["grade_abs_diff"] <= 1).mean(),
                "within_2_grade": (group["grade_abs_diff"] <= 2).mean(),
            }
        )
    out = pd.DataFrame(rows).sort_values(["within_1_grade", "exact_grade_match"], ascending=False)
    print(out.to_string(index=False))


if __name__ == "__main__":
    main()
