File size: 1,191 Bytes
0339ef7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from dataclasses import dataclass, field
from datetime import datetime
import json


@dataclass(frozen=True, slots=True)
class Result:
    submission_name: str
    submission_time: datetime
    submission_score: float
    user_id: str
    rank: int

    @classmethod
    def from_dict(cls, data: dict) -> "Result":
        return cls(
            submission_name=data["submission_name"],
            submission_time=datetime.fromisoformat(data["submission_time"]),
            submission_score=data["submission_score"],
            user_id=data["user_id"],
            rank=data["rank"],
        )

    @classmethod
    def from_json(cls, json_path: str) -> "Result":
        with open(json_path, "r") as f:
            data = json.load(f)
        return cls.from_dict(data)

    def to_dict(self) -> dict:
        return {
            "filename": self.filename,
            "score": self.score,
            "user_name": self.user_name,
            "created_at": self.created_at.isoformat(),
        }


@dataclass
class LbData:
    name: str
    gpu: str
    results: list[Result] = field(default_factory=list)

    def add_result(self, result: Result):
        self.results.append(result)