chanycha commited on
Commit
617486d
1 Parent(s): 487ed85

deliver optimal result

Browse files
Files changed (1) hide show
  1. app.py +25 -14
app.py CHANGED
@@ -438,7 +438,7 @@ class ExplainerCheckboxGroup(Component):
438
  for exp in self.explainer_objs:
439
  val = exp.explainer_name in DEFAULT_EXPLAINER
440
  checkbox_group_info = self.update_check(checkbox_group_info, exp.default_exp_id, val)
441
- if hasattr(exp, "optimal_exp_id"):
442
  checkbox_group_info = self.update_check(checkbox_group_info, exp.optimal_exp_id, False)
443
  return checkboxes + bttns + [checkbox_group_info]
444
 
@@ -478,7 +478,7 @@ class ExplainerCheckbox(Component):
478
  self.experiment = experiment
479
  self.gallery = gallery
480
 
481
- self.optimal_exp_id = gr.State(None)
482
  self.default_exp_id = self.get_explainer_id_by_name(explainer_name)
483
  self.obj_metric = self.get_metric_id_by_name(OBJECTIVE_METRIC)
484
 
@@ -499,13 +499,19 @@ class ExplainerCheckbox(Component):
499
  checkbox_group_info = self.groups.update_check(checkbox_group_info, self.default_exp_id, evt._data['value'])
500
  return checkbox_group_info
501
 
502
- def optimal_on_select(self, evt: gr.EventData, checkbox_group_info, optimal_exp_id):
503
- if optimal_exp_id is not None:
 
504
  checkbox_group_info = self.groups.update_check(checkbox_group_info, optimal_exp_id, evt._data['value'])
505
  else:
506
- raise ValueError("Optimal explainer id is not found.")
507
  return checkbox_group_info
508
 
 
 
 
 
 
509
  def show(self):
510
  val = self.explainer_name in DEFAULT_EXPLAINER
511
  with gr.Accordion(self.explainer_name, open=val):
@@ -514,12 +520,12 @@ class ExplainerCheckbox(Component):
514
  self.opt_check = gr.Checkbox(label="Optimized Parameter (Not Optimal)", interactive=False)
515
 
516
  self.default_check.select(self.default_on_select, self.groups.info, self.groups.info)
517
- self.opt_check.select(self.optimal_on_select, [self.groups.info, self.optimal_exp_id], self.groups.info)
518
 
519
  self.bttn = gr.Button(value="Optimize", size="sm", variant="primary")
520
 
521
  @spaces.GPU
522
- def optimize(optimal_exp_id, checkbox_group_info):
523
  data_id = self.gallery.selected_index
524
 
525
  opt_output = self.experiment.optimize(
@@ -537,18 +543,23 @@ class ExplainerCheckbox(Component):
537
  opt_postprocessor_id = pp_id
538
  break
539
 
540
- opt_explainer_id = max([x['id'] for x in checkbox_group_info]) + 1
541
  opt_output.explainer.model = self.experiment.model
542
- self.experiment.manager._explainers.append(opt_output.explainer)
543
- self.experiment.manager._explainer_ids.append(opt_explainer_id)
544
- self.groups.insert_check(checkbox_group_info, self.explainer_name, opt_explainer_id, opt_postprocessor_id)
545
- optimal_exp_id = opt_explainer_id
 
 
 
 
546
  checkbox = gr.update(label="Optimized Parameter (Optimal)", interactive=True)
547
  bttn = gr.update(value="Optimized", variant="secondary")
548
 
549
- return [optimal_exp_id, checkbox_group_info, checkbox, bttn]
550
 
551
- self.bttn.click(optimize, inputs=[self.optimal_exp_id, self.groups.info], outputs=[self.optimal_exp_id, self.groups.info, self.opt_check, self.bttn], queue=True, concurrency_limit=1)
 
552
 
553
 
554
  class ExpRes(Component):
 
438
  for exp in self.explainer_objs:
439
  val = exp.explainer_name in DEFAULT_EXPLAINER
440
  checkbox_group_info = self.update_check(checkbox_group_info, exp.default_exp_id, val)
441
+ if hasattr(exp, "optimal_exp_id"): # TO BE FIXED : exp.optimal_exp_id is gr.State Object
442
  checkbox_group_info = self.update_check(checkbox_group_info, exp.optimal_exp_id, False)
443
  return checkboxes + bttns + [checkbox_group_info]
444
 
 
478
  self.experiment = experiment
479
  self.gallery = gallery
480
 
481
+ self.opt_res = gr.State(None)
482
  self.default_exp_id = self.get_explainer_id_by_name(explainer_name)
483
  self.obj_metric = self.get_metric_id_by_name(OBJECTIVE_METRIC)
484
 
 
499
  checkbox_group_info = self.groups.update_check(checkbox_group_info, self.default_exp_id, evt._data['value'])
500
  return checkbox_group_info
501
 
502
+ def optimal_on_select(self, evt: gr.EventData, checkbox_group_info, opt_res):
503
+ if opt_res is not None:
504
+ optimal_exp_id = opt_res['id']
505
  checkbox_group_info = self.groups.update_check(checkbox_group_info, optimal_exp_id, evt._data['value'])
506
  else:
507
+ raise ValueError("Optimal result is not found.")
508
  return checkbox_group_info
509
 
510
+ def update_exp(self, exp_res):
511
+ self.experiment.manager._explainers.append(exp_res['explainer'])
512
+ self.experiment.manager._explainer_ids.append(exp_res['id'])
513
+
514
+
515
  def show(self):
516
  val = self.explainer_name in DEFAULT_EXPLAINER
517
  with gr.Accordion(self.explainer_name, open=val):
 
520
  self.opt_check = gr.Checkbox(label="Optimized Parameter (Not Optimal)", interactive=False)
521
 
522
  self.default_check.select(self.default_on_select, self.groups.info, self.groups.info)
523
+ self.opt_check.select(self.optimal_on_select, [self.groups.info, self.opt_res], self.groups.info)
524
 
525
  self.bttn = gr.Button(value="Optimize", size="sm", variant="primary")
526
 
527
  @spaces.GPU
528
+ def optimize(checkbox_group_info):
529
  data_id = self.gallery.selected_index
530
 
531
  opt_output = self.experiment.optimize(
 
543
  opt_postprocessor_id = pp_id
544
  break
545
 
546
+ opt_exp_id = max([x['id'] for x in checkbox_group_info]) + 1
547
  opt_output.explainer.model = self.experiment.model
548
+ # self.experiment.manager._explainers.append(opt_output.explainer)
549
+ # self.experiment.manager._explainer_ids.append(opt_exp_id)
550
+
551
+ opt_res = {
552
+ 'id': opt_exp_id,
553
+ 'explainer': opt_output.explainer,
554
+ }
555
+ self.groups.insert_check(checkbox_group_info, self.explainer_name, opt_exp_id, opt_postprocessor_id)
556
  checkbox = gr.update(label="Optimized Parameter (Optimal)", interactive=True)
557
  bttn = gr.update(value="Optimized", variant="secondary")
558
 
559
+ return [opt_res, checkbox_group_info, checkbox, bttn]
560
 
561
+ self.bttn.click(optimize, inputs=[self.groups.info], outputs=[self.opt_res, self.groups.info, self.opt_check, self.bttn], queue=True, concurrency_limit=1)
562
+ self.opt_res.change(self.update_exp, self.opt_res)
563
 
564
 
565
  class ExpRes(Component):