|
import pathlib |
|
from pathlib import Path |
|
import tempfile |
|
from typing import BinaryIO, Literal |
|
import json |
|
import pandas as pd |
|
|
|
import gradio as gr |
|
from datasets import load_dataset, Dataset |
|
from huggingface_hub import upload_file, hf_hub_download |
|
from gradio_leaderboard import ColumnFilter, Leaderboard, SelectColumns |
|
from evaluation import evaluate_problem |
|
from datetime import datetime |
|
import os |
|
|
|
from about import PROBLEM_TYPES, TOKEN, CACHE_PATH, API, submissions_repo, results_repo |
|
|
|
def read_boundary(filename): |
|
local_path = hf_hub_download( |
|
repo_id=submissions_repo, |
|
repo_type="dataset", |
|
filename=filename, |
|
) |
|
return local_path |
|
|
|
def write_results(record, result): |
|
record.update(result) |
|
record['result_filename'] = record['submission_filename'].rstrip('.json') + '_results.json' |
|
print(record['result_filename']) |
|
record['evaluated'] = True |
|
|
|
record["objectives"] = json.dumps(record.get("objectives", [])) |
|
record["feasibilities"] = json.dumps(record.get("feasibility", [])) |
|
|
|
if 'objective' not in record.keys(): |
|
record['objective'] = 0.0 |
|
record['minimize_objective'] = True |
|
record['feasibility'] = 0.0 |
|
|
|
with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as tmp: |
|
json.dump(record, tmp, indent=2) |
|
tmp.flush() |
|
tmp_name = tmp.name |
|
|
|
API.upload_file( |
|
path_or_fileobj=tmp_name, |
|
path_in_repo=record['result_filename'], |
|
repo_id=results_repo, |
|
repo_type="dataset", |
|
commit_message=f"Add result data for {record['result_filename']}" |
|
) |
|
|
|
pathlib.Path(tmp_name).unlink() |
|
return |
|
|
|
def get_user(profile: gr.OAuthProfile | None) -> str: |
|
if profile is None: |
|
return "Please login to submit a boundary for evaluation." |
|
return profile.username |