|
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 huggingface_hub import HfApi |
|
|
|
from about import PROBLEM_TYPES, TOKEN, CACHE_PATH, API, submissions_repo, results_repo |
|
|
|
def submit_boundary( |
|
problem_type: Literal["geometrical", "simple_to_build", "mhd_stable"], |
|
boundary_file: BinaryIO, |
|
profile: gr.OAuthProfile | None |
|
) -> str: |
|
|
|
|
|
if profile.username is None: |
|
raise gr.Error("You must be logged in to submit a file.") |
|
|
|
file_path = boundary_file.name |
|
|
|
if not file_path: |
|
raise gr.Error("Uploaded file object does not have a valid file path.") |
|
|
|
path_obj = pathlib.Path(file_path) |
|
timestamp = datetime.utcnow().isoformat() |
|
|
|
with ( |
|
path_obj.open("rb") as f_in, |
|
tempfile.NamedTemporaryFile(delete=False, suffix=".json") as tmp_boundary, |
|
): |
|
file_content = f_in.read() |
|
tmp_boundary.write(file_content) |
|
tmp_boundary_path = pathlib.Path(tmp_boundary.name) |
|
|
|
|
|
filename = f"{problem_type}/{timestamp.replace(':', '-')}_{problem_type}.json" |
|
record = { |
|
"submission_filename": filename, |
|
"submission_time": timestamp, |
|
"problem_type": problem_type, |
|
"boundary_json": file_content.decode("utf-8"), |
|
"evaluated": False, |
|
"user": profile.username, |
|
} |
|
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=filename, |
|
repo_id=submissions_repo, |
|
repo_type="dataset", |
|
commit_message=f"Add submission for {problem_type} at {timestamp}" |
|
) |
|
pathlib.Path(tmp_name).unlink() |
|
|
|
tmp_boundary_path.unlink() |
|
|
|
return "β
Your submission has been received! Sit tight and your scores will appear on the leaderboard shortly.", filename |