code: def _compute_exact_matches_and_f1_scores_sum(
      self,
      pred_answer_list: List[List[str]],
      target_answers_list: List[List[str]],
  ) -> Tuple[float, float]:
      exact_matches = 0.0
      f1_scores_sum = 0.0
      for pred_answers, target_answers in zip(
          pred_answer_list,
          target_answers_list,
      ):
          pred_spans, pred_bags = self._answer_to_bags(pred_answers)
          target_spans, target_bags = self._answer_to_bags(
              target_answers
          )
          if set(pred_spans) == set(target_spans) and len(
              pred_spans
          ) == len(target_spans):
              exact_matches += 1.0
          if not (target_answers or pred_answers):
              #  unanswerable
              f1_scores_sum += 1.0
              continue
          f1_per_bag = self._align_bags(pred_bags, target_bags)
          if len(f1_per_bag):
              # avoid NaNs
              f1 = np.mean(f1_per_bag)
              f1_scores_sum += round(f1, 2)
  
      return exact_matches, f1_scores_sum
  
imports: import re
  import string
  from typing import Dict, List, Set, Tuple, Union
  import numpy
  from pytext.common.constants import Stage
  from pytext.metric_reporters.channel import Channel, ConsoleChannel, FileChannel
  from pytext.metric_reporters.metric_reporter import MetricReporter
  from pytext.metrics.squad_metrics import SquadMetrics
  from pytext.utils.data import merge_token_labels_to_slot, parse_slot_string, Slot
  from scipy.optimize import linear_sum_assignment
label_desc: Use image node_id 13 for calling the MultiSpanQAMetricReporter obj's underlying member method code with example usage: obj._compute_exact_matches_and_f1_scores_sum(pred_answer_list, target_answers_list) and returns: exact_matches,  f1_scores_sum