docstr: Draw information of data attribute for data fields to the report
  
  Args:
      notes(str): Explain the block
      data_attribute (:dict of :dict):
          -key: data field name
          -value: attributes (dict)
              - key: attribute name
              - value: attribute value
docstr_tok: ["Draw","information","of","data","attribute","for","data","fields","to","the","report","Args",":","notes","(","str",")",":","Explain","the","block","data_attribute","(",":","dict","of",":","dict",")",":","-key",":","data","field","name","-value",":","attributes","(","dict",")","-","key",":","attribute","name","-","value",":","attribute","value"]
code: def draw_data_attributes(self, notes: str, *, data_attribute: Dict):
      """
      Draw information of data attribute for data fields to the report
  
      Args:
          notes(str): Explain the block
          data_attribute (:dict of :dict):
              -key: data field name
              -value: attributes (dict)
                  - key: attribute name
                  - value: attribute value
      """
  
      def get_data_attributes():
          attribute_list = list(
              set().union(
                  *[
                      set(attribute_dict.keys())
                      for attribute_dict in data_attribute.values()
                  ]
              )
          )
          table_header = ["Field Name"] + [
              attribute.capitalize() for attribute in attribute_list
          ]
  
          table_data = []
          for field_name, field_attributes in data_attribute.items():
              row = [
                  field_name
                  if len(field_name) < 40
                  else "%s_~" % (field_name[:40])
              ]
              for attribute_name in attribute_list:
                  if attribute_name in field_attributes.keys():
                      row.append(field_attributes[attribute_name])
                  else:
                      row.append("-")
              table_data.append(row)
  
          return table_header, table_data
  
      # -- Draw Content --
      self.pdf.add_new_line(notes)
      _table_header, _table_data = get_data_attributes()
      col_width = [180 - 22 * (len(_table_header) - 1)] + [22] * (
          len(_table_header) - 1
      )
  
      self.pdf.add_table(
          _table_header, _table_data, col_width=col_width
      )
      self.pdf.add_new_line()
  
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 18 for calling the PdfWriter obj's underlying member method code with example usage: obj.draw_data_attributes(notes) and returns: table_header,  table_data