|
|
from dataclasses import dataclass, make_dataclass, field, MISSING |
|
|
|
|
|
def fields(raw_class): |
|
|
return [v for k, v in raw_class.__dict__.items() if k[:2] != "__" and k[-2:] != "__"] |
|
|
|
|
|
@dataclass |
|
|
class ColumnContent: |
|
|
name: str |
|
|
type: str |
|
|
displayed_by_default: bool |
|
|
hidden: bool = False |
|
|
never_hidden: bool = False |
|
|
|
|
|
def cc(name: str, typ: str, displayed: bool, hidden: bool = False, never_hidden: bool = False): |
|
|
|
|
|
return field(default_factory=lambda: ColumnContent(name, typ, displayed, hidden, never_hidden)) |
|
|
|
|
|
auto_eval_column_dict = [ |
|
|
("eval_name", ColumnContent, cc("Eval Name", "str", True)), |
|
|
("result_name", ColumnContent, cc("Result Name", "str", False)), |
|
|
("date", ColumnContent, cc("Submission Date", "str", True)), |
|
|
("miou", ColumnContent, cc("mIoU ⬆️", "number", True)), |
|
|
("accuracy", ColumnContent, cc("Accuracy ⬆️", "number", False)), |
|
|
] |
|
|
|
|
|
AutoEvalColumn = make_dataclass("AutoEvalColumn", auto_eval_column_dict, frozen=True) |
|
|
|
|
|
def col(field_name: str) -> ColumnContent: |
|
|
f = AutoEvalColumn.__dataclass_fields__[field_name] |
|
|
if f.default is not MISSING: |
|
|
return f.default |
|
|
return f.default_factory() |
|
|
|
|
|
|
|
|
|
|
|
COLS = [ |
|
|
col(fname).name |
|
|
for fname in AutoEvalColumn.__dataclass_fields__.keys() |
|
|
if not col(fname).hidden |
|
|
] |
|
|
|