Spaces:
Sleeping
Sleeping
| 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 | |