File size: 4,722 Bytes
5434c4b
 
 
f26a894
5434c4b
0c136d8
 
5434c4b
5f3a4af
 
 
f26a894
 
 
5434c4b
0c136d8
5434c4b
0c136d8
 
 
 
5434c4b
 
5f3a4af
 
 
30e165f
5f3a4af
 
 
642fae1
 
 
 
 
 
 
 
 
 
 
5434c4b
642fae1
0c136d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5f3a4af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f26a894
 
 
 
4017643
f26a894
 
 
 
 
 
 
 
 
 
 
 
 
5f3a4af
0c136d8
 
5434c4b
5f3a4af
 
 
5434c4b
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
import gradio as gr

import generate_annotated_diffs
import statistics

df_manual = generate_annotated_diffs.manual_data_with_annotated_diffs()
n_diffs_manual = len(df_manual)

df_synthetic = generate_annotated_diffs.synthetic_data_with_annotated_diffs()
n_diffs_synthetic = len(df_synthetic)

STATISTICS = {"manual": statistics.get_statistics_for_manual_df(df_manual),
              "synthetic": statistics.get_statistics_for_synthetic_df(df_synthetic)}


def update_manual_view(diff_idx):
    diff_idx -= 1
    return df_manual.iloc[diff_idx]['annotated_diff'], df_manual.iloc[diff_idx]['commit_msg_start'], \
        df_manual.iloc[diff_idx][
            'commit_msg_end'], df_manual.iloc[diff_idx][
        'session'], f"https://github.com/{df_manual.iloc[diff_idx]['repo']}/commit/{df_manual.iloc[diff_idx]['hash']}"


def update_synthetic_view(diff_idx):
    diff_idx -= 1
    return (df_synthetic.iloc[diff_idx]['annotated_diff'], df_synthetic.iloc[diff_idx]['initial_msg_pred'],
            df_synthetic.iloc[diff_idx]['reference'],
            f"https://github.com/{df_synthetic.iloc[diff_idx]['repo']}/commit/{df_synthetic.iloc[diff_idx]['hash']}")


force_light_theme_js_func = """
function refresh() {
    const url = new URL(window.location);

    if (url.searchParams.get('__theme') !== 'light') {
        url.searchParams.set('__theme', 'light');
        window.location.href = url.href;
    }
}
"""

if __name__ == '__main__':
    with gr.Blocks(theme=gr.themes.Soft(), js=force_light_theme_js_func) as application:
        with gr.Tab("Manual"):
            slider_manual = gr.Slider(minimum=1, maximum=n_diffs_manual, step=1, value=1,
                                      label=f"Sample number (total: {n_diffs_manual})")

            diff_view_manual = gr.Highlightedtext(combine_adjacent=True, color_map={'+': "green", '-': "red"})
            start_view_manual = gr.Textbox(interactive=False, label="Start message", container=True)
            end_view_manual = gr.Textbox(interactive=False, label="End message", container=True)
            session_view_manual = gr.Textbox(interactive=False, label="Session", container=True)
            link_view_manual = gr.Markdown()
            view_manual = [
                diff_view_manual,
                start_view_manual,
                end_view_manual,
                session_view_manual,
                link_view_manual
            ]

            slider_manual.change(update_manual_view, inputs=slider_manual,
                                 outputs=view_manual)

        with gr.Tab("Synthetic"):
            slider_synthetic = gr.Slider(minimum=1, maximum=n_diffs_synthetic, step=1, value=1,
                                         label=f"Sample number (total: {n_diffs_synthetic})")

            diff_view_synthetic = gr.Highlightedtext(combine_adjacent=True, color_map={'+': "green", '-': "red"})
            start_view_synthetic = gr.Textbox(interactive=False, label="Start message", container=True)
            end_view_synthetic = gr.Textbox(interactive=False, label="End message", container=True)
            link_view_synthetic = gr.Markdown()
            view_synthetic = [
                diff_view_synthetic,
                start_view_synthetic,
                end_view_synthetic,
                link_view_synthetic
            ]

            slider_synthetic.change(update_synthetic_view, inputs=slider_synthetic,
                                    outputs=view_synthetic)
        with gr.Tab("Compare"):
            def layout_for_statistics(statistics_group_name):
                gr.Markdown(f"### {statistics_group_name}")
                stats = STATISTICS[statistics_group_name]
                gr.Number(label="Average deletions number (rel to the initial message length)", interactive=False,
                          value=stats['deletions'].mean().item(), precision=3)
                gr.Number(label="Average insertions number (rel to the result length)", interactive=False,
                          value=stats['insertions'].mean().item(), precision=3)
                gr.Number(label="Average changes number (rel to the result length)", interactive=False,
                          value=stats['changes'].mean().item(), precision=3)


            with gr.Row():
                with gr.Column(scale=1):
                    layout_for_statistics("manual")

                with gr.Column(scale=1):
                    layout_for_statistics("synthetic")

        application.load(update_manual_view, inputs=slider_manual,
                         outputs=view_manual)

        application.load(update_synthetic_view, inputs=slider_synthetic,
                         outputs=view_synthetic)

    application.launch()