File size: 3,868 Bytes
41e61b9
 
 
 
 
 
 
9663b38
 
 
41e61b9
 
 
 
 
 
 
 
 
 
 
 
 
143db4d
41e61b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13c5ece
41e61b9
 
13c5ece
41e61b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cc0f2e2
 
41e61b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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)