class_docstr: Test case: Create Report using Titanic dataset with ONLY Data Analysis (p1)
  - refer to README in sample_input for more info on dataset
  - please update the config to include other feature in p1
docstr: Test report rendering with json config file 
code: def test_json_generate_report(self):
      """Test report rendering with json config file"""
      start_time = datetime.now().replace(microsecond=0)
      controller = Controller(config=Configuration(self.json))
      controller.render()
      end_time = datetime.now().replace(microsecond=0)
  
      # -- PDF Report --
      output = "%s/%s.pdf" % (self.out_path, self.json_writer_pdf_name)
      print("JSON-PDF report generated %s:" % output)
  
      with open(output, "rb") as f:
          pdf = PdfFileReader(f)
          info = pdf.getDocumentInfo()
          number_of_pages = pdf.getNumPages()
  
      print(info)
      self.assertEqual(info["/Title"], self.json_report_name)
  
      # print(info['/CreationDate'])
      report_time = datetime.strptime(
          info["/CreationDate"], "D:%Y%m%d%H%M%S"
      )
      self.assertTrue(time_in_range(start_time, end_time, report_time))
  
      print(number_of_pages)
      self.assertEqual(
          number_of_pages, self.json_writer_pdf_page_number
      )
  
file_path: contextual-ai/tests/compiler/test_data_statistics_analysis_titanic.py
imports: import sys
  import warnings
  from PyPDF2 import PdfFileReader
  from datetime import datetime
  import unittest
  from xai.compiler import Configuration, Controller
  from tests.compiler.util import prepare_template, prepare_output_path, read_json_source, time_in_range, remove_temp
label_desc: Use image node_id 3 for calling the TestDataStatisticsAnalysisTitanic obj's underlying member method code with example usage: obj.test_json_generate_report() without return types