code: def _add_target_answer_batch_stats(
      self, m_input, targets, **contexts
  ):
      # For BERT, doc_tokens = concatenated tokens from question and document.
      doc_tokens = m_input[0]
      batch_starts, batch_ends = targets[:2]
      target_starts = []
      target_ends = []
  
      for tokens, starts, ends, doc_str in zip(
          doc_tokens,
          batch_starts,
          batch_ends,
          contexts[self.DOC_COLUMN],
      ):
          # for each batch
          start_idxs = []
          end_idxs = []
          for start, end in zip(starts[starts > -1], ends[ends > -1]):
              # for each answer
              _, start_idx, end_idx = self._unnumberize(
                  start, end, tokens.tolist(), doc_str
              )
              start_idxs.append(start_idx)
              end_idxs.append(end_idx)
          target_starts.append(start_idxs)
          target_ends.append(end_idxs)
  
      self.aggregate_data(self.all_start_pos_targets, target_starts)
      self.aggregate_data(self.all_end_pos_targets, target_ends)
  
imports: import re
  import string
  from collections import Counter
  from itertools import zip_longest
  from typing import Dict, List
  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 import compute_classification_metrics, LabelPrediction
  from pytext.metrics.squad_metrics import SquadMetrics
label_desc: Use image node_id 5 for calling the SquadMetricReporter obj's underlying member method code with example usage: obj._add_target_answer_batch_stats(m_input, targets) without return types