| import os | |
| import time | |
| import shutil | |
| import gradio as gr | |
| from data4co import KaMISSolver, draw_mis_problem, draw_mis_solution | |
| MIS_DEFAULT_PATH = "media/mis_default.png" | |
| MIS_PROBLEM_PATH = "media/mis_problem.png" | |
| MIS_SOLUTION_PATH = "media/mis_solution.png" | |
| GPICKLE_PATH = "tmp/mis_problem.gpickle" | |
| RESULT_PATH = "tmp/solve/mis_problem_unweighted.result" | |
| def _handle_mis_solve(file_path: str): | |
| if not os.path.exists("tmp"): | |
| os.mkdir("tmp") | |
| else: | |
| shutil.rmtree("tmp") | |
| os.mkdir("tmp") | |
| shutil.move(file_path, GPICKLE_PATH) | |
| start_time = time.time() | |
| solver = KaMISSolver() | |
| solver.solve("tmp") | |
| solved_time = time.time() - start_time | |
| draw_mis_problem( | |
| save_path=MIS_PROBLEM_PATH, | |
| gpickle_path=GPICKLE_PATH | |
| ) | |
| draw_mis_solution( | |
| save_path=MIS_SOLUTION_PATH, | |
| gpickle_path=GPICKLE_PATH, | |
| result_path=RESULT_PATH, | |
| pos_type="kamada_kawai_layout" | |
| ) | |
| message = "Successfully solve the MIS problem, using time ({:.3f}s).".format(solved_time) | |
| return message, MIS_PROBLEM_PATH, MIS_SOLUTION_PATH | |
| def handle_mis_solve(file_path: str): | |
| try: | |
| message = _handle_mis_solve(file_path) | |
| return message | |
| except Exception as e: | |
| message = str(e) | |
| return message, MIS_PROBLEM_PATH, MIS_SOLUTION_PATH | |
| def handle_mis_clear(): | |
| shutil.copy( | |
| src=MIS_DEFAULT_PATH, | |
| dst=MIS_PROBLEM_PATH | |
| ) | |
| shutil.copy( | |
| src=MIS_DEFAULT_PATH, | |
| dst=MIS_SOLUTION_PATH | |
| ) | |
| message = "successfully clear the files!" | |
| return message, MIS_PROBLEM_PATH, MIS_SOLUTION_PATH | |
| def convert_image_path_to_bytes(image_path): | |
| with open(image_path, "rb") as f: | |
| image_bytes = f.read() | |
| return image_bytes | |
| with gr.Blocks() as mis_page: | |
| gr.Markdown( | |
| ''' | |
| This space displays the solution to the MIS problem. | |
| ## How to use this Space? | |
| - Upload a '.gpickle' file. | |
| - The images of the MIS problem and solution will be shown after you click the solve button. | |
| - Click the 'clear' button to clear all the files. | |
| ## Examples | |
| - You can get the test examples from our [MIS Dataset Repo.](https://huggingface.co/datasets/SJTU-TES/MIS) | |
| ''' | |
| ) | |
| with gr.Row(variant="panel"): | |
| with gr.Column(scale=7): | |
| with gr.Row(): | |
| mis_file = gr.File( | |
| file_types=[".gpickle"], | |
| scale=3 | |
| ) | |
| info = gr.Textbox( | |
| value="", | |
| label="Log", | |
| scale=4, | |
| ) | |
| with gr.Column(scale=4): | |
| mis_problem_img = gr.Image( | |
| value="media/mis_problem.png", | |
| type="filepath", | |
| label="MIS Problem", | |
| ) | |
| with gr.Column(scale=4): | |
| mis_solution_img = gr.Image( | |
| value="media/mis_solution.png", | |
| type="filepath", | |
| label="MIS Solution", | |
| ) | |
| with gr.Row(): | |
| with gr.Column(scale=1, min_width=100): | |
| solve_button = gr.Button( | |
| value="Solve", | |
| variant="primary", | |
| scale=1 | |
| ) | |
| with gr.Column(scale=1, min_width=100): | |
| clear_button = gr.Button( | |
| "Clear", | |
| variant="secondary", | |
| scale=1 | |
| ) | |
| with gr.Column(scale=8): | |
| pass | |
| solve_button.click( | |
| handle_mis_solve, | |
| [mis_file], | |
| outputs=[info, mis_problem_img, mis_solution_img] | |
| ) | |
| clear_button.click( | |
| handle_mis_clear, | |
| inputs=None, | |
| outputs=[info, mis_problem_img, mis_solution_img] | |
| ) | |
| if __name__ == "__main__": | |
| mis_page.launch(debug = True) |