docstr: add basic nested info
  
  Args:
       data (list): list of tuple / list of (list of tuple))
          multi-level rendering, e.g. to display `model_info`
  Returns: HTML String
code: def add_basic_nested_info(data: list):
      """
      add basic nested info
  
      Args:
           data (list): list of tuple / list of (list of tuple))
              multi-level rendering, e.g. to display `model_info`
      Returns: HTML String
      """
  
      def add_paragraph(x, itemize_level="&nbsp&nbsp- "):
          doc = Doc()
          for key, item in x:
              if (type(item) is list) or (type(item) is tuple):
                  doc.asis("%s%s:<br>" % (itemize_level, key))
                  new_indent = "&nbsp&nbsp" + itemize_level
                  doc.asis(add_paragraph(item, new_indent))
              else:
                  doc.asis(
                      "%s%s: <b>%s</b><br>" % (itemize_level, key, item)
                  )
  
          return doc.getvalue()
  
      outter_doc = Doc()
      with outter_doc.tag("p"):
          outter_doc.asis(add_paragraph(data))
      return outter_doc.getvalue()
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import os
  import datetime
  from yattag import Doc, indent
label_desc: Use image node_id 12 for calling the CustomHtml obj's underlying member method code with example usage: obj.add_basic_nested_info(data) and returns: outter_doc, doc