from dataclasses import dataclass, make_dataclass | |
def fields(raw_class): | |
return [v for k, v in raw_class.__dict__.items() if k[:2] != "__" and k[-2:] != "__"] | |
# These classes are for user facing column names, | |
# to avoid having to change them all around the code | |
# when a modif is needed | |
class ColumnContent: | |
name: str | |
type: str | |
displayed_by_default: bool | |
hidden: bool = False | |
never_hidden: bool = False | |
## Leaderboard columns | |
# Init | |
auto_eval_column_dict = [ | |
["eval_name", ColumnContent, ColumnContent("Eval Name", "str", True)], | |
["result_name", ColumnContent, ColumnContent("Result Name", "str", False)], | |
["date", ColumnContent, ColumnContent("Submission Date", "str", True)], | |
["miou", ColumnContent, ColumnContent("mIoU ⬆️", "number", True)], | |
["accuracy", ColumnContent, ColumnContent("Accuracy ⬆️", "number", False)], | |
# ["precision_score", ColumnContent, ColumnContent("Precision ⬆️", "number", False)], | |
# ["recall", ColumnContent, ColumnContent("Recall ⬆️", "number", False)], | |
# ["f1", ColumnContent, ColumnContent("F1 ⬆️", "number", False)], | |
# ["producer_accuracy", ColumnContent, ColumnContent("Producer Accuracy", "list", False)], | |
# ["user_accuracy", ColumnContent, ColumnContent("User Accuracy", "list", False)], | |
# ["confusion_matrix", ColumnContent, ColumnContent("Confusion Matrix", "matrix", False)], | |
# ["num_classes", ColumnContent, ColumnContent("Number of classes", "number", False)], | |
] | |
# We use make dataclass to dynamically fill the scores from Tasks | |
AutoEvalColumn = make_dataclass("AutoEvalColumn", auto_eval_column_dict, frozen=True) | |
# Column selection | |
COLS = [c.name for c in fields(AutoEvalColumn) if not c.hidden] | |