class_docstr: Create answer start and end positions in subtokens.
  Args:
      do_lower_case: set True if lowercasing is needed
class_docstr_tok: ["Create","answer","start","and","end","positions","in","subtokens",".","Args",":","do_lower_case",":","set","True","if","lowercasing","is","needed"]
code: def __call__(
      self, answers_raw, answers_start, char2subtoks, **kwargs
  ):
      answers, starts, ends = [], [], []
      for answers_raw, answers_start, c2sub in zip(
          answers_raw, answers_start, char2subtoks
      ):
          answers.append([])
          starts.append([])
          ends.append([])
          for ans, ans_st in zip(answers_raw, answers_start):
              if self.do_lower_case:
                  ans = ans.lower()
              try:
                  indices = {
                      c2sub[0][i]
                      for i in range(ans_st, ans_st + len(ans))
                      if i in c2sub[0]
                  }
                  st = min(indices)
                  end = max(indices)
              except ValueError:
                  # 0 - CLS token
                  st, end = 0, 0
                  ans = ""
              starts[-1] += [st]
              ends[-1] += [end]
              answers[-1] += [ans]
      return answers, starts, ends
  
file_path: DeepPavlov/deeppavlov/models/preprocessors/squad_preprocessor.py
imports: import bisect
  from logging import getLogger
  from typing import List, Dict
  from deeppavlov.core.common.registry import register
  from deeppavlov.core.models.component import Component
label_desc: Use image node_id 2 for calling the SquadBertAnsPreprocessor obj's underlying member method code with example usage: obj.__call__(answers_raw, answers_start, char2subtoks) and returns: answers,  starts,  ends