code: def test_1_add_analyzer_block(self):
      mname = "custom_analyzers"
      cname = "ExampleAnalysis"
      module_code = f"""
  from lightwood.analysis.base import BaseAnalysisBlock
  
  class {cname}(BaseAnalysisBlock):
      def __init__(self, deps=tuple()):
          super().__init__(deps=deps)
  
      def analyze(self, info, **kwargs):
          info['test'] = 'test'
          return info
  
      def explain(self, row_insights, global_insights, **kwargs):
          row_insights['test'] = 'test'
          return row_insights, global_insights
  """
      create_custom_module(f"{mname}.py", module_code)
  
      # Create base json ai
      df = pd.read_csv("tests/data/hdi.csv").iloc[0:400]
      json_ai = json_ai_from_problem(
          df,
          ProblemDefinition.from_dict(
              {"target": "Development Index", "time_aim": 20}
          ),
      )
  
      # modify it
      json_ai_dump = json_ai.to_dict()
      json_ai_dump["analysis_blocks"] = [
          {"module": f"{mname}.{cname}", "args": {}}
      ]
  
      json_ai = JsonAI.from_dict(json_ai_dump)
  
      # create a predictor from it
      code = code_from_json_ai(json_ai)
      predictor = predictor_from_code(code)
      predictor.learn(df)
      row_insights = predictor.predict(df)
  
      assert predictor.runtime_analyzer["test"] == "test"
      assert row_insights["test"].iloc[0] == "test"
  
file_path: lightwood/tests/integration/advanced/test_custom_modules.py
imports: from lightwood.api.high_level import json_ai_from_problem, code_from_json_ai, predictor_from_code, load_custom_module
  from lightwood.api.types import JsonAI, ProblemDefinition
  import unittest
  import os
  import pandas
label_desc: Use image node_id 2 for calling the TestBasic obj's underlying member method code with example usage: obj.test_1_add_analyzer_block() without return types