Junetheriver commited on
Commit
de840d4
·
1 Parent(s): 9408d44

add latex and csv function

Browse files
Files changed (2) hide show
  1. app.py +122 -37
  2. latex_utils.py +16 -3
app.py CHANGED
@@ -124,16 +124,19 @@ def plot_radar_chart(df, attributes):
124
 
125
  return fig
126
 
127
- def pop_latex_table(caption, label, dataframe):
128
- table = gen_latex_table(caption, label, dataframe)
129
  return gr.Textbox(table, label="LaTeX Table", visible=True)
130
 
131
- def generate_csv(df, filename):
132
- df.to_csv(filename, index=False)
133
- download_link = gr.File(label="Download Link", type="filepath", value=filename,
 
134
  visible=True)
135
  return download_link
136
 
 
 
137
  def create_lang_leader_board(lang_dict, lang, dis_lang='en'):
138
  best_scores = {}
139
  best_plot_datasets = []
@@ -150,43 +153,104 @@ def create_lang_leader_board(lang_dict, lang, dis_lang='en'):
150
  # plot = plot_radar_chart(pd.DataFrame(best_scores), best_plot_datasets)
151
  # gr.Plot(plot)
152
  tab_list = []
 
 
 
 
 
 
 
 
 
 
 
153
 
154
  for dataset, value in lang_dict.items():
 
 
 
 
155
  chosen_dict = dataset_abbr_en_dict if dis_lang == "en" else dataset_abbr_zh_dict
156
  with gr.Tab(chosen_dict[dataset]) as tab:
157
  for cat, df in value.items():
 
 
 
 
158
  if cat == 'mc':
159
  for shot in ['Zeroshot', 'Fewshot']:
160
  with gr.Tab(f'Multiple Choice Question ({shot})'):
161
  df_component = dataframe_to_gradio(df, is_mc=True, shot=shot)
162
  # 加一个latex表格导出按钮, 按一下弹出一个浮动文本窗口
163
- # with gr.Row():
164
- # latex_button = gr.Button("Export LaTeX Table", variant="primary")
165
- # csv_button = gr.Button("Export CSV", variant="primary")
166
-
167
- # latex_textbox = gr.Textbox(label="LaTeX Table", visible=False)
168
- # download_link = gr.File(label="Download Link", type="filepath",
169
- # visible=False)
170
-
171
- # latex_button.click(lambda: pop_latex_table(
172
- # caption=f"{chosen_dict[dataset]} Multiple Choice Question ({shot}, {lang}) Leaderboard",
173
- # label=f"tab:{dataset}_{shot}_{lang}",
174
- # dataframe=df,
175
- # ), inputs=[], outputs=[latex_textbox])
176
- # csv_button.click(lambda: generate_csv(df, f"/tmp/opseval-{chosen_dict[dataset]}-mc-{shot}.csv"), inputs=[], outputs=[download_link])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  else:
178
  with gr.Tab('Question Answering'):
179
  df_component = dataframe_to_gradio(df, is_mc=False)
180
- # df_list.append(df_component)
181
- # button = gr.Button("Export LaTeX Table", variant="primary")
182
- # latex_textbox = gr.Textbox(label="LaTeX Table", visible=False)
183
- # button.click(lambda: pop_latex_table(
184
- # caption=f"{chosen_dict[dataset]} {shot} {lang} Leaderboard",
185
- # label=f"tab:{dataset}_{shot}_{lang}",
186
- # dataframe=df,
187
- # ), inputs=[], outputs=[latex_textbox])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
  tab_list.append(tab)
189
- return tab_list
190
 
191
  def get_latest_modification_date():
192
  latest = 0
@@ -213,21 +277,23 @@ translation_dict = {
213
  def get_language_lb(language):
214
  tab_dict = {'English': None, 'Chinese': None}
215
  for key, dict in dict_lang.items():
216
- tab_list = create_lang_leader_board(dict, key, language)
217
- tab_dict[key] = tab_list
218
- return [*tab_dict['English'], *tab_dict['Chinese']]
219
 
220
  def switch_language(language):
221
  # gr.update(visible=True)
222
- return translation_dict[language]['title'], translation_dict[language]['intro'], translation_dict[language]['lb_sec'], *get_language_lb(language), language
 
 
223
 
224
  def get_lb_body(language='en'):
225
  tab_dict = {'English': None, 'Chinese': None}
226
  with gr.Blocks() as body:
227
  for key, dict in dict_lang.items():
228
  with gr.Tab(key):
229
- tab_list = create_lang_leader_board(dict, key, language)
230
- tab_dict[key] = tab_list
231
  return body, tab_dict
232
 
233
  def launch_gradio():
@@ -247,14 +313,32 @@ def launch_gradio():
247
 
248
  lb_body, tab_dict = get_lb_body(language=lang_state.value)
249
 
250
- tab_list = [*tab_dict['English'], *tab_dict['Chinese']]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  # print(tab_list)
252
 
253
  en_button.click(switch_language, inputs=[gr.State("en")], outputs=[title, intro, leaderboard_section, *tab_list, lang_state], postprocess=False)
254
  zh_button.click(switch_language, inputs=[gr.State("zh")], outputs=[title, intro, leaderboard_section, *tab_list, lang_state], postprocess=False)
255
 
256
 
257
- demo.launch()
258
 
259
  pd.set_option('display.float_format', '{:.02f}'.format)
260
 
@@ -262,4 +346,5 @@ scheduler = BackgroundScheduler()
262
  scheduler.add_job(launch_gradio, 'interval', hours=1)
263
  scheduler.start()
264
 
265
- launch_gradio()
 
 
124
 
125
  return fig
126
 
127
+ def pop_latex_table(caption, label, lang, dataset, cat):
128
+ table = gen_latex_table(caption, label, global_df[lang][dataset][cat])
129
  return gr.Textbox(table, label="LaTeX Table", visible=True)
130
 
131
+ def generate_csv(lang, dataset, cat, shot, chosen_dataset):
132
+ df = global_df[lang][dataset][cat]
133
+ df.to_csv(f"{chosen_dataset}_{lang}_{cat}_{shot}.csv", index=False)
134
+ download_link = gr.File(label="Download Link", type="filepath", value=f"{chosen_dataset}_{lang}_{cat}_{shot}.csv",
135
  visible=True)
136
  return download_link
137
 
138
+ global_df = {}
139
+
140
  def create_lang_leader_board(lang_dict, lang, dis_lang='en'):
141
  best_scores = {}
142
  best_plot_datasets = []
 
153
  # plot = plot_radar_chart(pd.DataFrame(best_scores), best_plot_datasets)
154
  # gr.Plot(plot)
155
  tab_list = []
156
+
157
+ latex_btn_list = []
158
+ latex_textbox_list = []
159
+
160
+ csv_btn_list = []
161
+ csv_textbox_list = []
162
+
163
+ export_params = []
164
+
165
+ if lang not in global_df:
166
+ global_df[lang] = {}
167
 
168
  for dataset, value in lang_dict.items():
169
+
170
+ if dataset not in global_df[lang]:
171
+ global_df[lang][dataset] = {}
172
+
173
  chosen_dict = dataset_abbr_en_dict if dis_lang == "en" else dataset_abbr_zh_dict
174
  with gr.Tab(chosen_dict[dataset]) as tab:
175
  for cat, df in value.items():
176
+
177
+ if cat not in global_df[lang][dataset]:
178
+ global_df[lang][dataset][cat] = df.copy(deep=True)
179
+
180
  if cat == 'mc':
181
  for shot in ['Zeroshot', 'Fewshot']:
182
  with gr.Tab(f'Multiple Choice Question ({shot})'):
183
  df_component = dataframe_to_gradio(df, is_mc=True, shot=shot)
184
  # 加一个latex表格导出按钮, 按一下弹出一个浮动文本窗口
185
+ latex_textbox = gr.Textbox(label="LaTeX Table", visible=False)
186
+ download_link = gr.File(label="Download Link", type="filepath",
187
+ visible=False)
188
+
189
+ latex_caption = gr.Text(value=f"{chosen_dict[dataset]} Multiple Choice Question ({shot}, {lang}) Leaderboard", visible=False)
190
+ latex_label = gr.Text(value=f"tab:{dataset}_{shot}_{lang}", visible=False)
191
+ param_lang = gr.Text(value=lang, visible=False)
192
+ param_dataset = gr.Text(value=dataset, visible=False)
193
+ param_cat = gr.Text(value=cat, visible=False)
194
+ param_shot = gr.Text(value=shot, visible=False)
195
+ dataset_name = gr.Text(value=chosen_dict[dataset], visible=False)
196
+ with gr.Row():
197
+ latex_button = gr.Button("Export LaTeX Table", variant="primary")
198
+ csv_button = gr.Button("Export CSV", variant="primary")
199
+
200
+ latex_btn_list.append(latex_button)
201
+ latex_textbox_list.append(latex_textbox)
202
+
203
+ csv_btn_list.append(csv_button)
204
+ csv_textbox_list.append(download_link)
205
+
206
+ export_params.append({
207
+ "caption": latex_caption,
208
+ "label": latex_label,
209
+ "lang": param_lang,
210
+ "dataset": param_dataset,
211
+ "cat": param_cat,
212
+ "shot": param_shot,
213
+ "dataset_name": dataset_name
214
+ })
215
+
216
+
217
+
218
  else:
219
  with gr.Tab('Question Answering'):
220
  df_component = dataframe_to_gradio(df, is_mc=False)
221
+ # 加一个latex表格导出按钮, 按一下弹出一个浮动文本窗口
222
+ latex_textbox = gr.Textbox(label="LaTeX Table", visible=False)
223
+ download_link = gr.File(label="Download Link", type="filepath",
224
+ visible=False)
225
+
226
+ latex_caption = gr.Text(value=f"{chosen_dict[dataset]} Question Answering ({lang}) Leaderboard", visible=False)
227
+ latex_label = gr.Text(value=f"tab:{dataset}_{lang}", visible=False)
228
+ param_lang = gr.Text(value=lang, visible=False)
229
+ param_dataset = gr.Text(value=dataset, visible=False)
230
+ param_cat = gr.Text(value=cat, visible=False)
231
+ param_shot = gr.Text(value=shot, visible=False)
232
+ dataset_name = gr.Text(value=chosen_dict[dataset], visible=False)
233
+ with gr.Row():
234
+ latex_button = gr.Button("Export LaTeX Table", variant="primary")
235
+ csv_button = gr.Button("Export CSV", variant="primary")
236
+
237
+ latex_btn_list.append(latex_button)
238
+ latex_textbox_list.append(latex_textbox)
239
+
240
+ csv_btn_list.append(csv_button)
241
+ csv_textbox_list.append(download_link)
242
+
243
+ export_params.append({
244
+ "caption": latex_caption,
245
+ "label": latex_label,
246
+ "lang": param_lang,
247
+ "dataset": param_dataset,
248
+ "cat": param_cat,
249
+ "shot": param_shot,
250
+ "dataset_name": dataset_name
251
+ })
252
  tab_list.append(tab)
253
+ return tab_list, latex_btn_list, latex_textbox_list, csv_btn_list, csv_textbox_list, export_params
254
 
255
  def get_latest_modification_date():
256
  latest = 0
 
277
  def get_language_lb(language):
278
  tab_dict = {'English': None, 'Chinese': None}
279
  for key, dict in dict_lang.items():
280
+ tab_list, latex_btn_list, latex_textbox_list, csv_btn_list, csv_textbox_list, export_params = create_lang_leader_board(dict, key, language)
281
+ tab_dict[key] = (tab_list, latex_btn_list, latex_textbox_list, csv_btn_list, csv_textbox_list, export_params)
282
+ return tab_dict
283
 
284
  def switch_language(language):
285
  # gr.update(visible=True)
286
+ tab_dict = get_language_lb(language)
287
+ tab_list = [*(tab_dict['English'][0]), *(tab_dict['Chinese'][0])]
288
+ return translation_dict[language]['title'], translation_dict[language]['intro'], translation_dict[language]['lb_sec'], *tab_list, language
289
 
290
  def get_lb_body(language='en'):
291
  tab_dict = {'English': None, 'Chinese': None}
292
  with gr.Blocks() as body:
293
  for key, dict in dict_lang.items():
294
  with gr.Tab(key):
295
+ tab_list, latex_btn_list, latex_textbox_list, csv_btn_list, csv_textbox_list, export_params = create_lang_leader_board(dict, key, language)
296
+ tab_dict[key] = (tab_list, latex_btn_list, latex_textbox_list, csv_btn_list, csv_textbox_list, export_params)
297
  return body, tab_dict
298
 
299
  def launch_gradio():
 
313
 
314
  lb_body, tab_dict = get_lb_body(language=lang_state.value)
315
 
316
+ for lang in ['English', 'Chinese']:
317
+ tab_list, latex_btn_list, latex_textbox_list, csv_btn_list, csv_textbox_list, export_params = tab_dict[lang]
318
+ for btn, params, textbox in zip(latex_btn_list, export_params, latex_textbox_list):
319
+ btn.click(pop_latex_table, inputs=[
320
+ params["caption"],
321
+ params["label"],
322
+ params["lang"],
323
+ params["dataset"],
324
+ params["cat"]],
325
+ outputs=[textbox])
326
+ for btn, params, textbox in zip(csv_btn_list, export_params, csv_textbox_list):
327
+ btn.click(generate_csv, inputs=[
328
+ params["lang"],
329
+ params["dataset"],
330
+ params["cat"],
331
+ params["shot"],
332
+ params["dataset_name"]],
333
+ outputs=[textbox])
334
+ tab_list = [*(tab_dict['English'][0]), *(tab_dict['Chinese'][0])]
335
  # print(tab_list)
336
 
337
  en_button.click(switch_language, inputs=[gr.State("en")], outputs=[title, intro, leaderboard_section, *tab_list, lang_state], postprocess=False)
338
  zh_button.click(switch_language, inputs=[gr.State("zh")], outputs=[title, intro, leaderboard_section, *tab_list, lang_state], postprocess=False)
339
 
340
 
341
+ return demo
342
 
343
  pd.set_option('display.float_format', '{:.02f}'.format)
344
 
 
346
  scheduler.add_job(launch_gradio, 'interval', hours=1)
347
  scheduler.start()
348
 
349
+ demo = launch_gradio()
350
+ demo.launch()
latex_utils.py CHANGED
@@ -1,5 +1,6 @@
1
  import pandas as pd
2
  from tabulate import tabulate
 
3
 
4
  # 创建一个示例 DataFrame
5
  data = {
@@ -33,8 +34,16 @@ latex_table = tabulate(df, headers='keys', tablefmt='latex', showindex=False,
33
  colalign='left')
34
 
35
  def gen_latex_table(caption, label, dataframe):
36
- table = tabulate(dataframe, headers='keys', tablefmt='latex', showindex=False,
37
- colalign='left')
 
 
 
 
 
 
 
 
38
  table = (
39
  "\\begin{table}[]\n"
40
  f"\\caption{{{caption}}}\n"
@@ -50,7 +59,11 @@ def gen_latex_table(caption, label, dataframe):
50
  # 将table中的第二个\hline改为\midrule
51
  table = table.replace("\\hline", "\\midrule", 1)
52
  # 将table中的最后一个\hline改为\bottomrule
53
- table = table.replace("\\hline", "\\bottom", 1)
 
 
 
 
54
  return table
55
 
56
  # # 添加表格环境
 
1
  import pandas as pd
2
  from tabulate import tabulate
3
+ import re
4
 
5
  # 创建一个示例 DataFrame
6
  data = {
 
34
  colalign='left')
35
 
36
  def gen_latex_table(caption, label, dataframe):
37
+ # print(caption)
38
+ # print(label)
39
+ # print(dataframe)
40
+ if len(dataframe.columns) > 2:
41
+ table = tabulate(dataframe, headers='keys', tablefmt='latex', showindex=False,
42
+ missingval='/',
43
+ colalign='left')
44
+ else:
45
+ table = tabulate(dataframe, headers='keys', tablefmt='latex', showindex=False,
46
+ missingval='/')
47
  table = (
48
  "\\begin{table}[]\n"
49
  f"\\caption{{{caption}}}\n"
 
59
  # 将table中的第二个\hline改为\midrule
60
  table = table.replace("\\hline", "\\midrule", 1)
61
  # 将table中的最后一个\hline改为\bottomrule
62
+ table = table.replace("\\hline", "\\bottomrule", 1)
63
+
64
+ # 将table中的所有nan(独立的单词)替换为/
65
+ table = re.sub(r'\bnan\b', '/', table)
66
+
67
  return table
68
 
69
  # # 添加表格环境