docstr: Draw information of training performance to the result
  
  Args:
      evaluation_result (dict): evaluation metric
          - key: metric_name
          - value: metric_value: single float value for average/overall metric,
                                  list for class metrics
          sample input 1: {'precision': 0.5}, report value directly
          sample input 2: {'precision': {'class':[0.5,0.4,0.3],'average':0.5}},
                                      report "average" value
          sample input 3: {'precision': {'class':[0.5,0.4,0.3]},
                              report unweighted average for "class" value
      notes (str, Optional): explain the block
code: def draw_evaluation_result_summary(
      self, notes: str, *, evaluation_result: dict
  ):
      """
      Draw information of training performance to the result
  
      Args:
          evaluation_result (dict): evaluation metric
              - key: metric_name
              - value: metric_value: single float value for average/overall metric,
                                      list for class metrics
              sample input 1: {'precision': 0.5}, report value directly
              sample input 2: {'precision': {'class':[0.5,0.4,0.3],'average':0.5}},
                                          report "average" value
              sample input 3: {'precision': {'class':[0.5,0.4,0.3]},
                                  report unweighted average for "class" value
          notes (str, Optional): explain the block
      """
      import numpy as np
  
      # -- Draw Content --
      self.html.article[-1].items.append(
          self.html.add_header(text=notes, heading="h3")
      )
      items = dict()
      for result in evaluation_result:
          for metric_name, metric_value in result.items():
              valid = False
              if type(metric_value) == dict:
                  if "average" in metric_value.keys():
                      key = "%s (average)" % metric_name.capitalize()
                      if (
                          type(metric_value["average"]) == float
                          or type(metric_value["average"]) == str
                      ):
                          value = "%.4f " % metric_value["average"]
                  elif "class" in metric_value.keys():
                      key = (
                          "%s (macro average)"
                          % metric_name.capitalize()
                      )
                      if type(metric_value["class"]) == list:
                          valid = True
                          for e in metric_value["class"]:
                              if type(e) != float and type(e) != str:
                                  valid = False
                      if not valid:
                          continue
                      value = "%.4f" % np.mean(
                          np.array(metric_value["class"])
                      )
                  else:
                      warnings.warn(
                          message="No defined keys (`class`,`average`) found in metric value: %s"
                          % (metric_value.keys())
                      )
                      continue
  
              elif type(metric_value) == float:
                  key = "%s" % metric_name.capitalize()
                  value = "%.4f" % metric_value
              elif type(metric_value) == str:
                  key = "%s" % metric_name.capitalize()
                  value = metric_value
              else:
                  warnings.warn(
                      message="Unsupported metric value type for metric (%s): %s"
                      % (metric_name, type(metric_value))
                  )
                  continue
              if key not in items:
                  items[key] = list()
              items.get(key).append(value)
  
      self.html.article[-1].items.append(
          self.html.add_overview_table_with_dict(data=items)
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import copy
  import os
  import tempfile
  import warnings
  import shutil
  from typing import Tuple, Dict, List
  import numpy
  from xai import MODE
  from xai.data.explorer import CategoricalStats, NumericalStats, TextStats, DatetimeStats
  from xai.formatter.contents import Header, Title, SectionTitle
  from xai.formatter.hypertext_markup.publisher import CustomHtml, Div
  from xai.formatter.report.section import OverviewSection, DetailSection
  from xai.formatter.writer import Writer
label_desc: Use image node_id 16 for calling the HtmlWriter obj's underlying member method code with example usage: obj.draw_evaluation_result_summary(notes) without return types