docstr: [summary]
  
  Args:
      gold_instance_list (List[Dict]): List of Sentece, each sentence contains Four List of Event Tuple
          [
              {
                  'offset_trigger': [('Die', (16,)), ('Convict', (30,))],
                  'string_trigger': [('Die', 'shot'), ('Convict', 'convicted')],
                  'offset_role': [('Die', 'Victim', (17,)), ('Die', 'Agent', (5, 6)), ('Die', 'Place', (23,))],
                  'string_role': [('Die', 'Victim', 'himself'), ('Die', 'Agent', 'John Joseph'), ('Die', 'Place', 'court')]
              },
              ...
          ]
      pred_instance_list (List[Dict]): List of Sentece, each sentence contains four List (offset, string) X (trigger, role) of Event List
          [
              {
                  'offset_trigger': [('Attack', (16,))],
                  'offset_role': [('Attack', 'Attacker', (5, 6)), ('Attack', 'Place', (23,)), ('Attack', 'Target', (17,))],
                  'string_trigger': [('Attack', 'shot')],
                  'string_role': [('Attack', 'Attacker', 'John Joseph'), ('Attack', 'Place', 'court'), ('Attack', 'Target', 'himself')],
              },
              ...
          ]
      verbose (bool, optional): [description]. Defaults to False.
      match_mode (string, optional): [description]. Defaults to `normal`.
  
  Returns:
      Dict: Result of Evaluation
          (offset, string) X (trigger, role) X (gold, pred, tp, P, R, F1)
code: def eval_instance_list(
      gold_instance_list,
      pred_instance_list,
      verbose=False,
      match_mode="normal",
  ):
      """[summary]
  
      Args:
          gold_instance_list (List[Dict]): List of Sentece, each sentence contains Four List of Event Tuple
              [
                  {
                      'offset_trigger': [('Die', (16,)), ('Convict', (30,))],
                      'string_trigger': [('Die', 'shot'), ('Convict', 'convicted')],
                      'offset_role': [('Die', 'Victim', (17,)), ('Die', 'Agent', (5, 6)), ('Die', 'Place', (23,))],
                      'string_role': [('Die', 'Victim', 'himself'), ('Die', 'Agent', 'John Joseph'), ('Die', 'Place', 'court')]
                  },
                  ...
              ]
          pred_instance_list (List[Dict]): List of Sentece, each sentence contains four List (offset, string) X (trigger, role) of Event List
              [
                  {
                      'offset_trigger': [('Attack', (16,))],
                      'offset_role': [('Attack', 'Attacker', (5, 6)), ('Attack', 'Place', (23,)), ('Attack', 'Target', (17,))],
                      'string_trigger': [('Attack', 'shot')],
                      'string_role': [('Attack', 'Attacker', 'John Joseph'), ('Attack', 'Place', 'court'), ('Attack', 'Target', 'himself')],
                  },
                  ...
              ]
          verbose (bool, optional): [description]. Defaults to False.
          match_mode (string, optional): [description]. Defaults to `normal`.
  
      Returns:
          Dict: Result of Evaluation
              (offset, string) X (trigger, role) X (gold, pred, tp, P, R, F1)
      """
      trigger_metrics = {
          "offset": Metric(verbose=verbose, match_mode=match_mode),
          "string": Metric(verbose=verbose, match_mode=match_mode),
      }
      role_metrics = {
          "offset": Metric(verbose=verbose, match_mode=match_mode),
          "string": Metric(verbose=verbose, match_mode=match_mode),
      }
  
      for pred, gold in zip(pred_instance_list, gold_instance_list):
          pre_string_tp, pre_offset_tp = (
              trigger_metrics["string"].tp,
              trigger_metrics["offset"].tp,
          )
  
          for eval_key in trigger_metrics:
              trigger_metrics[eval_key].count_instance(
                  gold_list=gold.get(eval_key + "_trigger", []),
                  pred_list=pred.get(eval_key + "_trigger", []),
              )
  
          post_string_tp, post_offset_tp = (
              trigger_metrics["string"].tp,
              trigger_metrics["offset"].tp,
          )
          if (
              verbose
              and post_offset_tp - pre_offset_tp
              != post_string_tp - pre_string_tp
          ):
              warning_tp_increment(
                  gold=gold, pred=pred, prefix="Trigger"
              )
  
          pre_string_tp, pre_offset_tp = (
              role_metrics["string"].tp,
              role_metrics["offset"].tp,
          )
  
          for eval_key in role_metrics:
              role_metrics[eval_key].count_instance(
                  gold_list=gold.get(eval_key + "_role", []),
                  pred_list=pred.get(eval_key + "_role", []),
              )
  
          post_string_tp, post_offset_tp = (
              role_metrics["string"].tp,
              role_metrics["offset"].tp,
          )
          if (
              verbose
              and post_offset_tp - pre_offset_tp
              != post_string_tp - pre_string_tp
          ):
              warning_tp_increment(gold=gold, pred=pred, prefix="Role")
  
      results = dict()
      for eval_key in trigger_metrics:
          results.update(
              trigger_metrics[eval_key].compute_f1(
                  prefix=f"{eval_key}-evt-trigger-"
              )
          )
      for eval_key in role_metrics:
          results.update(
              role_metrics[eval_key].compute_f1(
                  prefix=f"{eval_key}-evt-role-"
              )
          )
  
      return results
  
imports: from collections import defaultdict
  from copy import deepcopy
  from typing import Dict, List
  import sys
label_desc: Use image node_id 3 for calling the EventScorer obj's underlying member method code with example usage: obj.eval_instance_list(gold_instance_list, pred_instance_list, verbose, match_mode) and returns: results