Spaces:
Sleeping
Sleeping
from dataclasses import dataclass | |
from config import BENCHMARK_SCORE, GREATER_IS_BETTER | |
import numpy as np | |
import pandas as pd | |
import os | |
class LeaderBoard: | |
benchmark_score: float = BENCHMARK_SCORE | |
db_file: str = 'leaderboard.csv' | |
current_path: str = os.path.abspath(os.path.dirname(__file__)) | |
def get(self): | |
try: | |
leaderboard = pd.read_csv(os.path.join(self.current_path, self.db_file)) | |
except FileNotFoundError: | |
leaderboard = self.create() | |
return leaderboard | |
def create(self): | |
ldb = pd.DataFrame(columns=['id', 'score', 'nb_submissions'], index=[0]) | |
ldb.loc[0, 'id'] = 'benchmark' | |
ldb.loc[0, 'score'] = self.benchmark_score | |
ldb.loc[0, 'nb_submissions'] = 1 | |
ldb.to_csv(os.path.join(self.current_path, self.db_file), index=False) | |
return ldb | |
def edit(self, leaderboard: pd.DataFrame, id: str, score: float) -> pd.DataFrame: | |
new_lb = leaderboard.copy() | |
if new_lb[new_lb.id == id].shape[0] == 0: | |
new_lb = new_lb.append({'id': id, 'score': score, 'nb_submissions': 1}, ignore_index=True) | |
else: | |
current_score = new_lb.loc[new_lb.id == id, 'score'].values[0] | |
if self.compare_score(score, current_score, greater_is_better=GREATER_IS_BETTER): | |
new_lb.loc[new_lb.id == id, 'score'] = score | |
new_lb.loc[new_lb.id == id, 'nb_submissions'] += 1 | |
new_lb.to_csv(os.path.join(self.current_path, self.db_file), index=False) | |
return new_lb | |
def show(leaderboard: pd.DataFrame, ascending: bool) -> pd.DataFrame: | |
new_lb = leaderboard.sort_values('score', ascending=ascending, ignore_index=True) | |
new_lb['rank'] = np.arange(1, new_lb.shape[0] + 1) | |
return new_lb | |
def compare_score(new_score: float, current_score: float, greater_is_better: bool=True) -> bool: | |
if greater_is_better: | |
return new_score > current_score | |
else: | |
return new_score < current_score | |