mgyigit commited on
Commit
582b7cb
Β·
verified Β·
1 Parent(s): 861ea98

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -63
app.py CHANGED
@@ -202,71 +202,84 @@ with block:
202
  # 1️⃣ Leaderboard tab
203
  # ------------------------------------------------------------------
204
  with gr.TabItem("πŸ… PROBE Leaderboard", elem_id="probe-benchmark-tab-table", id=1):
205
- # small workflow figure at top
 
206
  gr.Image(
207
  value="./src/data/PROBE_workflow_figure.jpg",
208
  show_label=False,
209
  height=1000,
210
  container=False,
211
  )
212
-
213
  gr.Markdown(
214
  "## For detailed explanations of the metrics and benchmarks, please refer to the πŸ“ About tab.",
215
  elem_classes="leaderboard-note",
216
  )
217
-
218
- leaderboard = get_baseline_df(None, None)
219
- method_names = leaderboard['Method'].unique().tolist()
220
- metric_names = leaderboard.columns.tolist(); metric_names.remove('Method')
221
-
 
 
 
 
222
  benchmark_metric_mapping = {
223
- "Semantic Similarity Inference": [m for m in metric_names if m.startswith('sim_')],
224
- "Ontology-based Protein Function Prediction": [m for m in metric_names if m.startswith('func')],
225
- "Drug Target Protein Family Classification": [m for m in metric_names if m.startswith('fam_')],
226
- "Protein-Protein Binding Affinity Estimation": [m for m in metric_names if m.startswith('aff_')],
227
  }
228
-
229
- leaderboard_method_selector = gr.CheckboxGroup(
230
- choices=method_names,
231
- label="Select Methods",
232
- value=method_names,
233
- interactive=True,
234
- )
235
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236
  benchmark_type_selector_lb = gr.CheckboxGroup(
237
  choices=list(benchmark_metric_mapping.keys()),
238
- label="Select Benchmark Types",
239
- value=None,
240
  interactive=True,
241
  )
242
-
243
- leaderboard_metric_selector = gr.CheckboxGroup(
244
- choices=metric_names,
245
- label="Select Metrics",
246
- value=None,
247
- interactive=True,
248
- )
249
-
250
- baseline_value = get_baseline_df(method_names, metric_names)
251
- baseline_value = baseline_value.applymap(lambda x: round(x, 4) if isinstance(x, (int, float)) else x)
252
- baseline_header = ["Method"] + metric_names
253
- baseline_datatype = ['markdown'] + ['number'] * len(metric_names)
254
-
255
- styler = build_leaderboard_styler()
256
-
257
  with gr.Row():
258
  with gr.Column(scale=1):
259
  gr.Markdown(
260
  """
261
  ## Method-name colours
262
  <span style='color:green; font-weight:bold; font-size:1.1rem;'>πŸŸ’β€‚ Classical representations
263
- <span style='color:blue; font-weight:bold; font-size:1.1rem;'>πŸ”΅β€‚ Small-scale Protein Language Models
264
- <span style='color:red; font-weight:bold; font-size:1.1rem;'>πŸ”΄β€‚ Large-scale Protein Language Models
265
- <span style='color:orange;font-weight:bold; font-size:1.1rem;'>πŸŸ β€‚ Multimodal Protein Language Models
266
  """,
267
  elem_classes="leaderboard-note",
268
  )
269
-
270
  with gr.Column(scale=1):
271
  gr.Markdown(
272
  """
@@ -287,23 +300,36 @@ with block:
287
  elem_classes="leaderboard-note",
288
  )
289
 
290
- with gr.Row(show_progress=True, variant='panel'):
291
- data_component = gr.Dataframe(
292
- value=styler,
293
- headers=baseline_header,
294
- type="pandas",
295
- datatype=baseline_datatype,
296
- interactive=False,
297
- elem_id="leaderboard-table",
298
- pinned_columns=1,
299
- max_height=1000,
300
- show_fullscreen_button=True
301
- )
302
-
303
- # callbacks
304
- leaderboard_method_selector.change(
305
- update_leaderboard,
306
- inputs=[leaderboard_method_selector, leaderboard_metric_selector],
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  outputs=data_component,
308
  )
309
  benchmark_type_selector_lb.change(
@@ -311,12 +337,6 @@ with block:
311
  inputs=[benchmark_type_selector_lb],
312
  outputs=leaderboard_metric_selector,
313
  )
314
- leaderboard_metric_selector.change(
315
- update_leaderboard,
316
- inputs=[leaderboard_method_selector, leaderboard_metric_selector],
317
- outputs=data_component,
318
- )
319
-
320
  # ------------------------------------------------------------------
321
  # 2��⃣ Visualisation tab
322
  # ------------------------------------------------------------------
 
202
  # 1️⃣ Leaderboard tab
203
  # ------------------------------------------------------------------
204
  with gr.TabItem("πŸ… PROBE Leaderboard", elem_id="probe-benchmark-tab-table", id=1):
205
+
206
+ # ── header ────────────────────────────────────────────────────
207
  gr.Image(
208
  value="./src/data/PROBE_workflow_figure.jpg",
209
  show_label=False,
210
  height=1000,
211
  container=False,
212
  )
 
213
  gr.Markdown(
214
  "## For detailed explanations of the metrics and benchmarks, please refer to the πŸ“ About tab.",
215
  elem_classes="leaderboard-note",
216
  )
217
+
218
+ # ── data prep ────────────────────────────────────────────────
219
+ leaderboard = get_baseline_df(None, None)
220
+ method_names = leaderboard["Method"].unique().tolist()
221
+ metric_names = leaderboard.columns.tolist(); metric_names.remove("Method")
222
+
223
+ base_method_names = [m for m in method_names if m in base_methods]
224
+ user_method_names = [m for m in method_names if m not in base_methods]
225
+
226
  benchmark_metric_mapping = {
227
+ "Semantic Similarity Inference": [m for m in metric_names if m.startswith("sim_")],
228
+ "Ontology-based Protein Function Prediction": [m for m in metric_names if m.startswith("func")],
229
+ "Drug Target Protein Family Classification": [m for m in metric_names if m.startswith("fam_")],
230
+ "Protein-Protein Binding Affinity Estimation": [m for m in metric_names if m.startswith("aff_")],
231
  }
232
+
233
+ # ── callback helper ──────────────────────────────────────────
234
+ def update_leaderboard_combined(selected_base, selected_user, selected_metrics):
235
+ selected_methods = (selected_base or []) + (selected_user or [])
236
+ return build_leaderboard_styler(selected_methods, selected_metrics)
237
+
238
+ # ── collapsible selectors ────────────────────────────────────
239
+ with gr.Accordion("πŸ“¦ Base methods", open=False):
240
+ leaderboard_method_selector_base = gr.CheckboxGroup(
241
+ choices=base_method_names,
242
+ label="Base Methods",
243
+ value=base_method_names, # ← all selected
244
+ interactive=True,
245
+ )
246
+
247
+ with gr.Accordion("πŸ› οΈ User-defined methods", open=False):
248
+ leaderboard_method_selector_user = gr.CheckboxGroup(
249
+ choices=user_method_names,
250
+ label="User Methods",
251
+ value=[], # ← none selected
252
+ interactive=True,
253
+ )
254
+
255
  benchmark_type_selector_lb = gr.CheckboxGroup(
256
  choices=list(benchmark_metric_mapping.keys()),
257
+ label="Benchmark Types",
258
+ value=list(benchmark_metric_mapping.keys()), # ← all selected
259
  interactive=True,
260
  )
261
+
262
+ with gr.Accordion("πŸ“ Metrics", open=False):
263
+ leaderboard_metric_selector = gr.CheckboxGroup(
264
+ choices=metric_names,
265
+ label="Select Metrics",
266
+ value=metric_names, # ← all selected
267
+ interactive=True,
268
+ )
269
+
270
+ # ── colour / shading legend (unchanged) ──────────────────────
 
 
 
 
 
271
  with gr.Row():
272
  with gr.Column(scale=1):
273
  gr.Markdown(
274
  """
275
  ## Method-name colours
276
  <span style='color:green; font-weight:bold; font-size:1.1rem;'>πŸŸ’β€‚ Classical representations
277
+ <span style='color:blue; font-weight:bold; font-size:1.1rem;'>πŸ”΅β€‚ Small-scale Protein LMs
278
+ <span style='color:red; font-weight:bold; font-size:1.1rem;'>πŸ”΄β€‚ Large-scale Protein LMs
279
+ <span style='color:orange;font-weight:bold; font-size:1.1rem;'>πŸŸ β€‚ Multimodal Protein LMs
280
  """,
281
  elem_classes="leaderboard-note",
282
  )
 
283
  with gr.Column(scale=1):
284
  gr.Markdown(
285
  """
 
300
  elem_classes="leaderboard-note",
301
  )
302
 
303
+ gr.Markdown("### If a method name ends with (`^`), it suggests potential suspicions of data leakage related to **similarity**, **function**, or **family** benchmarks.")
304
+ # ── dataframe ────────────────────────────────────────────────
305
+ styler = build_leaderboard_styler(base_method_names, metric_names)
306
+
307
+ data_component = gr.Dataframe(
308
+ value=styler,
309
+ headers=["Method"] + metric_names,
310
+ type="pandas",
311
+ datatype=["markdown"] + ["number"] * len(metric_names),
312
+ interactive=False,
313
+ elem_id="leaderboard-table",
314
+ pinned_columns=1,
315
+ max_height=1000,
316
+ show_fullscreen_button=True,
317
+ )
318
+
319
+ # ── callbacks ────────────────────────────────────────────────
320
+ leaderboard_method_selector_base.change(
321
+ update_leaderboard_combined,
322
+ inputs=[leaderboard_method_selector_base, leaderboard_method_selector_user, leaderboard_metric_selector],
323
+ outputs=data_component,
324
+ )
325
+ leaderboard_method_selector_user.change(
326
+ update_leaderboard_combined,
327
+ inputs=[leaderboard_method_selector_base, leaderboard_method_selector_user, leaderboard_metric_selector],
328
+ outputs=data_component,
329
+ )
330
+ leaderboard_metric_selector.change(
331
+ update_leaderboard_combined,
332
+ inputs=[leaderboard_method_selector_base, leaderboard_method_selector_user, leaderboard_metric_selector],
333
  outputs=data_component,
334
  )
335
  benchmark_type_selector_lb.change(
 
337
  inputs=[benchmark_type_selector_lb],
338
  outputs=leaderboard_metric_selector,
339
  )
 
 
 
 
 
 
340
  # ------------------------------------------------------------------
341
  # 2��⃣ Visualisation tab
342
  # ------------------------------------------------------------------