code: def dataset_processing_func(
      self,
      example: Dict[str, Any],
      data_keys: Dict[str, str],
      ref_keys: Optional[List[str]] = None,
  ) -> Dict[str, Any]:
      # Some of the questions have lots of whitespace on the left, which is not useful and will make the
      # truncation of the context fail (the tokenized question will take a lots of space). So we remove that
      # left whitespace
      example[data_keys["question"]] = example[
          data_keys["question"]
      ].lstrip()
      # Padding side determines if we do (question|context) or (context|question).
      pad_on_right = self.preprocessor.padding_side == "right"
  
      tokenized_inputs = self.preprocessor(
          text=example[
              data_keys["question"]
              if pad_on_right
              else data_keys["context"]
          ],
          text_pair=example[
              data_keys["context"]
              if pad_on_right
              else data_keys["question"]
          ],
          **self.defaults,
          **self.preprocessor_kwargs,
      )
      return tokenized_inputs
  
file_path: optimum/optimum/utils/preprocessing/question_answering.py
imports: import copy
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
  from transformers import PreTrainedTokenizerBase
  from .base import TaskProcessor
label_desc: Use image node_id 2 for calling the QuestionAnsweringProcessing obj's underlying member method code with example usage: obj.dataset_processing_func(example, data_keys, ref_keys) and returns: tokenized_inputs