|  | 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 | 
					
						
						|  | 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 submit import submit_boundary | 
					
						
						|  | from about import PROBLEM_TYPES, TOKEN, CACHE_PATH, API, submissions_repo, results_repo | 
					
						
						|  | from utils import read_boundary, write_results, get_user | 
					
						
						|  |  | 
					
						
						|  | def evaluate_boundary(filename): | 
					
						
						|  | local_path = read_boundary(filename) | 
					
						
						|  | with Path(local_path).open("r") as f: | 
					
						
						|  | raw = f.read() | 
					
						
						|  | data_dict = json.loads(raw) | 
					
						
						|  | result = evaluate_problem(data_dict['problem_type'], local_path) | 
					
						
						|  | write_results(data_dict, result) | 
					
						
						|  | return | 
					
						
						|  |  | 
					
						
						|  | def get_leaderboard(): | 
					
						
						|  | ds = load_dataset(results_repo, split='train') | 
					
						
						|  | df = pd.DataFrame(ds) | 
					
						
						|  |  | 
					
						
						|  | score_field = "score" if "score" in df.columns else "objective" | 
					
						
						|  |  | 
					
						
						|  | df = df.sort_values(by=score_field, ascending=True) | 
					
						
						|  | return df | 
					
						
						|  |  | 
					
						
						|  | def show_output_box(message): | 
					
						
						|  | return gr.update(value=message, visible=True) | 
					
						
						|  |  | 
					
						
						|  | def gradio_interface() -> gr.Blocks: | 
					
						
						|  | with gr.Blocks() as demo: | 
					
						
						|  | with gr.Tabs(elem_classes="tab-buttons"): | 
					
						
						|  | with gr.TabItem("Leaderboard", elem_id="boundary-benchmark-tab-table"): | 
					
						
						|  | gr.Markdown("# Boundary Design Leaderboard") | 
					
						
						|  |  | 
					
						
						|  | Leaderboard( | 
					
						
						|  | value=get_leaderboard(), | 
					
						
						|  | select_columns=["submission_time", "feasibility", "score", "objective", "user"], | 
					
						
						|  | search_columns=["submission_time", "score", "user"], | 
					
						
						|  | hide_columns=["result_filename", "submission_filename", "minimize_objective", "boundary_json", "evaluated"], | 
					
						
						|  | filter_columns=["problem_type"], | 
					
						
						|  | every=60, | 
					
						
						|  | ) | 
					
						
						|  |  | 
					
						
						|  | '''def update_leaderboard(): | 
					
						
						|  | return get_leaderboard() | 
					
						
						|  |  | 
					
						
						|  | gr.update(fn=update_leaderboard, inputs=leaderboard_type, outputs=leaderboard_df)''' | 
					
						
						|  | with gr.TabItem("About", elem_id="boundary-benchmark-tab-table"): | 
					
						
						|  | gr.Markdown( | 
					
						
						|  | """ | 
					
						
						|  | # Welcome to the Fusion Challenge! | 
					
						
						|  | Upload your plasma boundary JSON and select the problem type to get your score. | 
					
						
						|  | """ | 
					
						
						|  | ) | 
					
						
						|  |  | 
					
						
						|  | with gr.TabItem("Submit", elem_id="boundary-benchmark-tab-table"): | 
					
						
						|  | gr.Markdown( | 
					
						
						|  | """ | 
					
						
						|  | # Plasma Boundary Evaluation Submission | 
					
						
						|  | Upload your plasma boundary JSON and select the problem type to get your score. | 
					
						
						|  | """ | 
					
						
						|  | ) | 
					
						
						|  | user_state = gr.State(value=None) | 
					
						
						|  | filename = gr.State(value=None) | 
					
						
						|  | eval_state = gr.State(value=None) | 
					
						
						|  |  | 
					
						
						|  | gr.LoginButton() | 
					
						
						|  |  | 
					
						
						|  | demo.load(get_user, inputs=None, outputs=user_state) | 
					
						
						|  |  | 
					
						
						|  | with gr.Row(): | 
					
						
						|  | problem_type = gr.Dropdown(PROBLEM_TYPES, label="Problem Type") | 
					
						
						|  | boundary_file = gr.File(label="Boundary JSON File (.json)") | 
					
						
						|  |  | 
					
						
						|  | boundary_file | 
					
						
						|  | message = gr.Textbox(label="Submission Status", lines=3, visible=False) | 
					
						
						|  | submit_btn = gr.Button("Evaluate") | 
					
						
						|  | submit_btn.click( | 
					
						
						|  | submit_boundary, | 
					
						
						|  | inputs=[problem_type, boundary_file, user_state], | 
					
						
						|  | outputs=[message, filename], | 
					
						
						|  | ).then( | 
					
						
						|  | fn=show_output_box, | 
					
						
						|  | inputs=[message], | 
					
						
						|  | outputs=[message], | 
					
						
						|  | ).then( | 
					
						
						|  | fn=evaluate_boundary, | 
					
						
						|  | inputs=[filename], | 
					
						
						|  | outputs=[eval_state] | 
					
						
						|  | ) | 
					
						
						|  | '''.then( | 
					
						
						|  | fn=update_leaderboard, | 
					
						
						|  | inputs=[problem_type], | 
					
						
						|  | outputs=[leaderboard_df] | 
					
						
						|  | )''' | 
					
						
						|  |  | 
					
						
						|  | return demo | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | if __name__ == "__main__": | 
					
						
						|  | gradio_interface().launch() | 
					
						
						|  |  |