class_docstr: Data collator that will dynamically pad the inputs received.
  Args:
      processor (:class:`~transformers.Wav2Vec2Processor`)
          The processor used for proccessing the data.
      padding (:obj:`bool`, :obj:`str` or :class:`~transformers.tokenization_utils_base.PaddingStrategy`, `optional`, defaults to :obj:`True`):
          Select a strategy to pad the returned sequences (according to the model's padding side and padding index)
          among:
          * :obj:`True` or :obj:`'longest'`: Pad to the longest sequence in the batch (or no padding if only a single
            sequence if provided).
          * :obj:`'max_length'`: Pad to a maximum length specified with the argument :obj:`max_length` or to the
            maximum acceptable input length for the model if that argument is not provided.
          * :obj:`False` or :obj:`'do_not_pad'` (default): No padding (i.e., can output a batch with sequences of
            different lengths).
      max_length (:obj:`int`, `optional`):
          Maximum length of the ``input_values`` of the returned list and optionally padding length (see above).
      max_length_labels (:obj:`int`, `optional`):
          Maximum length of the ``labels`` returned list and optionally padding length (see above).
      pad_to_multiple_of (:obj:`int`, `optional`):
          If set will pad the sequence to a multiple of the provided value.
          This is especially useful to enable the use of Tensor Cores on NVIDIA hardware with compute capability >=
          7.5 (Volta).
class_docstr_tok: ["Data","collator","that","will","dynamically","pad","the","inputs","received",".","Args",":","processor","(",":","class",":","`","~transformers.Wav2Vec2Processor","`",")","The","processor","used","for","proccessing","the","data",".","padding","(",":","obj",":","`","bool","`",",",":","obj",":","`","str","`","or",":","class",":","`","~transformers.tokenization_utils_base.PaddingStrategy","`",",","`","optional","`",",","defaults","to",":","obj",":","`","True","`",")",":","Select","a","strategy","to","pad","the","returned","sequences","(","according","to","the","model","'s","padding","side","and","padding","index",")","among",":","*",":","obj",":","`","True","`","or",":","obj",":","`","'longest","'","`",":","Pad","to","the","longest","sequence","in","the","batch","(","or","no","padding","if","only","a","single","sequence","if","provided",")",".","*",":","obj",":","`","'max_length","'","`",":","Pad","to","a","maximum","length","specified","with","the","argument",":","obj",":","`","max_length","`","or","to","the","maximum","acceptable","input","length","for","the","model","if","that","argument","is","not","provided",".","*",":","obj",":","`","False","`","or",":","obj",":","`","'do_not_pad","'","`","(","default",")",":","No","padding","(","i.e.",",","can","output","a","batch","with","sequences","of","different","lengths",")",".","max_length","(",":","obj",":","`","int","`",",","`","optional","`",")",":","Maximum","length","of","the","``","input_values","``","of","the","returned","list","and","optionally","padding","length","(","see","above",")",".","max_length_labels","(",":","obj",":","`","int","`",",","`","optional","`",")",":","Maximum","length","of","the","``","labels","``","returned","list","and","optionally","padding","length","(","see","above",")",".","pad_to_multiple_of","(",":","obj",":","`","int","`",",","`","optional","`",")",":","If","set","will","pad","the","sequence","to","a","multiple","of","the","provided","value",".","This","is","especially","useful","to","enable","the","use","of","Tensor","Cores","on","NVIDIA","hardware","with","compute","capability",">","=","7.5","(","Volta",")","."]
code: def __call__(
      self, features: List[Dict[str, Union[List[int], torch.Tensor]]]
  ) -> Dict[str, torch.Tensor]:
      # split inputs and labels since they have to be of different lengths and need
      # different padding methods
      input_features = [
          {"input_values": feature["input_values"]}
          for feature in features
      ]
      label_features = [
          {"input_ids": feature["labels"]} for feature in features
      ]
  
      batch = self.processor.pad(
          input_features,
          padding=self.padding,
          max_length=self.max_length,
          pad_to_multiple_of=self.pad_to_multiple_of,
          return_tensors="pt",
      )
      labels_batch = self.processor.pad(
          labels=label_features,
          padding=self.padding,
          max_length=self.max_length_labels,
          pad_to_multiple_of=self.pad_to_multiple_of_labels,
          return_tensors="pt",
      )
  
      # replace padding with -100 to ignore loss correctly
      labels = labels_batch["input_ids"].masked_fill(
          labels_batch.attention_mask.ne(1), -100
      )
  
      batch["labels"] = labels
  
      return batch
  
imports: import logging
  import pathlib
  import re
  import sys
  from dataclasses import dataclass, field
  from typing import Any, Callable, Dict, List, Optional, Set, Union
  import datasets
  import librosa
  import numpy
  import torch
  from lang_trans import arabic
  from packaging import version
  from torch import nn
  from transformers import HfArgumentParser, Trainer, TrainingArguments, Wav2Vec2CTCTokenizer, Wav2Vec2FeatureExtractor, Wav2Vec2ForCTC, Wav2Vec2Processor, is_apex_available, trainer_utils
label_desc: Use image node_id 1 for calling the DataCollatorCTCWithPadding obj's underlying member method code with example usage: obj.__call__(features) and returns: batch