Spaces:
Sleeping
Sleeping
File size: 4,146 Bytes
b87ce7c 141f1e0 b87ce7c 141f1e0 b87ce7c 141f1e0 b87ce7c 141f1e0 30f0c04 dcb04e7 aabac86 dcb04e7 aabac86 dcb04e7 141f1e0 b87ce7c 141f1e0 bc714de 141f1e0 dcb04e7 141f1e0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | import json
import os
import pandas as pd
from src.display.utils import SubmissionQueueColumn, TeamColumn
from src.leaderboard.read_team_results import get_team_results
def get_leaderboard_df(results_path: str, cols: list) -> pd.DataFrame:
raw_data = get_team_results(results_path)
all_data_json = [v.to_dict() for v in raw_data]
if not all_data_json:
return pd.DataFrame(columns=cols)
df = pd.DataFrame.from_records(all_data_json)
df = df.sort_values(
by=[TeamColumn.best_f1.name, TeamColumn.best_submission_date.name],
ascending=[False, True],
)
team_name_col = TeamColumn.team_name.name
if team_name_col in df.columns and len(df) > 0:
medals = ["π₯", "π₯", "π₯"]
creative_emoji = "π¨"
non_aurigin_count = 0
for idx in range(len(df)):
current_name = str(df.iloc[idx][team_name_col])
if current_name.lower() == "aurigin":
if not current_name.startswith("π€"):
df.iloc[idx, df.columns.get_loc(team_name_col)] = f"π€ {current_name}"
continue
if not any(current_name.startswith(emoji) for emoji in medals + [creative_emoji, "π€"]):
if non_aurigin_count < 3:
df.iloc[idx, df.columns.get_loc(team_name_col)] = f"{medals[non_aurigin_count]} {current_name}"
elif non_aurigin_count < 6:
df.iloc[idx, df.columns.get_loc(team_name_col)] = f"{creative_emoji} {current_name}"
non_aurigin_count += 1
df = df[cols].round(decimals=4)
return df
def get_submission_queue_df(save_path: str, cols: list) -> list[pd.DataFrame]:
all_submissions = []
if not os.path.exists(save_path):
empty_df = pd.DataFrame(columns=cols)
return empty_df, empty_df, empty_df
for filename in os.listdir(save_path):
if not filename.endswith(".json"):
continue
filepath = os.path.join(save_path, filename)
if not os.path.isfile(filepath):
continue
filepath = os.path.join(save_path, filename)
try:
with open(filepath, "r") as f:
data = json.load(f)
submission_data = {
SubmissionQueueColumn.team_name.name: data.get("team_name", ""),
SubmissionQueueColumn.submission_date.name: data.get("timestamp", ""),
SubmissionQueueColumn.accuracy.name: data.get("scores", {}).get("accuracy", 0.0),
SubmissionQueueColumn.f1.name: data.get("scores", {}).get("f1", 0.0),
SubmissionQueueColumn.precision.name: data.get("scores", {}).get("precision", 0.0),
SubmissionQueueColumn.recall.name: data.get("scores", {}).get("recall", 0.0),
SubmissionQueueColumn.tp.name: data.get("scores", {}).get("tp", 0),
SubmissionQueueColumn.fp.name: data.get("scores", {}).get("fp", 0),
SubmissionQueueColumn.fn.name: data.get("scores", {}).get("fn", 0),
SubmissionQueueColumn.tn.name: data.get("scores", {}).get("tn", 0),
SubmissionQueueColumn.status.name: data.get("status", "UNKNOWN"),
}
all_submissions.append(submission_data)
except Exception:
continue
accepted_list = [
s for s in all_submissions if s[SubmissionQueueColumn.status.name] in ["ACCEPTED", "ACCEPTED, BUT WORST"]
]
rejected_list = [
s for s in all_submissions if s[SubmissionQueueColumn.status.name] not in ["ACCEPTED", "ACCEPTED, BUT WORST"]
]
df_accepted = (
pd.DataFrame.from_records(accepted_list, columns=cols) if accepted_list else pd.DataFrame(columns=cols)
)
df_rejected = (
pd.DataFrame.from_records(rejected_list, columns=cols) if rejected_list else pd.DataFrame(columns=cols)
)
df_all = (
pd.DataFrame.from_records(all_submissions, columns=cols) if all_submissions else pd.DataFrame(columns=cols)
)
return df_accepted, df_rejected, df_all
|