docstr: Add information of feature shap values to the report.
  
  Args:
      notes(str): Explain the block
      mode (str): Model Model - classification/regression model
      feature_shap_values(:list of :tuple): a list of 2-item tuple,
                                  item[0]: feature name, item[1] shap values on each training samples
      class_id(int): the class id for visualization.
      train_data(numpy.dnarray): Optional, training data, row is for samples, column is for features.
docstr_tok: ["Add","information","of","feature","shap","values","to","the","report",".","Args",":","notes","(","str",")",":","Explain","the","block","mode","(","str",")",":","Model","Model","-","classification\/regression","model","feature_shap_values","(",":","list","of",":","tuple",")",":","a","list","of","2-item","tuple",",","item","[","0","]",":","feature","name",",","item","[","1","]","shap","values","on","each","training","samples","class_id","(","int",")",":","the","class","id","for","visualization",".","train_data","(","numpy.dnarray",")",":","Optional",",","training","data",",","row","is","for","samples",",","column","is","for","features","."]
code: def draw_feature_shap_values(
      self,
      notes: str,
      *,
      mode: str,
      feature_shap_values: List[Tuple[str, List]],
      class_id: int,
      train_data: numpy.ndarray = None,
  ):
      """
      Add information of feature shap values to the report.
  
      Args:
          notes(str): Explain the block
          mode (str): Model Model - classification/regression model
          feature_shap_values(:list of :tuple): a list of 2-item tuple,
                                      item[0]: feature name, item[1] shap values on each training samples
          class_id(int): the class id for visualization.
          train_data(numpy.dnarray): Optional, training data, row is for samples, column is for features.
      """
      from xai.graphs import graph_generator
  
      image_path = "%s/feature_shap_values_%s.png" % (
          self.figure_path,
          class_id,
      )
      image_path = graph_generator.FeatureShapValues(
          figure_path=image_path,
          shap_values=feature_shap_values,
          class_id=class_id,
          train_data=train_data,
          title=None,
      ).draw()
  
      # -- Draw Content --
      if not (notes is None):
          self.pdf.add_new_line(notes)
      if mode == MODE.CLASSIFICATION:
          self.pdf.add_new_line(
              "The figure below shows an overview of which features are most important class %s,"
              " by plotting SHAP values of every feature for every sample."
              % class_id
          )
      else:
          self.pdf.add_new_line(
              "The figure below shows an overview of which features are most important in regression model,"
              " by plotting SHAP values of every feature for every sample."
          )
      self.pdf.add_large_image(image_path)
  
      self.pdf.ln()
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import copy
  import os
  import tempfile
  import warnings
  import numpy
  import shutil
  from typing import Tuple, Dict, List
  from xai import MODE
  from xai.data.constants import DatetimeResolution
  from xai.data.explorer import CategoricalStats, NumericalStats, TextStats, DatetimeStats
  from xai.formatter.contents import Title, SectionTitle, Header
  from xai.formatter.portable_document.publisher import CustomPdf
  from xai.formatter.report.section import OverviewSection, DetailSection
  from xai.formatter.writer import Writer
label_desc: Use image node_id 24 for calling the PdfWriter obj's underlying member method code with example usage: obj.draw_feature_shap_values(notes) without return types