class_docstr: Wrap multiple batchify functions together. The input functions will be applied
  to the corresponding input fields.
  
  Each data sample should be a list or tuple containing multiple attributes. The `i`th batchify
  function stored in `Tuple` will be applied on the `i`th attribute. For example, each
  data sample is (nd_data, label). You can wrap two batchify functions using
  `Tuple(DataBatchify, LabelBatchify)` to batchify nd_data and label correspondingly.
  
  Parameters
  ----------
  fn : list or tuple or callable
      The batchify functions to wrap.
  *args : tuple of callable
      The additional batchify functions to wrap.
  
  Examples
  --------
  >>> import codel.data.batchify as bf
  >>> a = ([1, 2, 3, 4], 0)
  >>> b = ([5, 7], 1)
  >>> c = ([1, 2, 3, 4, 5, 6, 7], 0)
  >>> f1, f2 = bf.Group(bf.Pad(), bf.Stack())([a, b])
  >>> f1
  <BLANKLINE>
  [[1. 2. 3. 4.]
   [5. 7. 0. 0.]]
  <NDArray 2x4 @cpu_shared(0)>
  >>> f2
  <BLANKLINE>
  [0 1]
  <NDArray 2 @cpu_shared(0)>
docstr: Batchify the input data.
  
  Parameters
  ----------
  data : list
      The samples to batchfy. Each sample should contain N attributes.
  
  Returns
  -------
  ret : tuple
      A tuple of length N. Contains the batchified result of each attribute in the input.
docstr_tok: ["Batchify","the","input","data",".","Parameters","--","--","--","--","--","data",":","list","The","samples","to","batchfy",".","Each","sample","should","contain","N","attributes",".","Returns","--","--","--","-","ret",":","tuple","A","tuple","of","length","N.","Contains","the","batchified","result","of","each","attribute","in","the","input","."]
code: def __call__(self, data):
      """Batchify the input data.
  
      Parameters
      ----------
      data : list
          The samples to batchfy. Each sample should contain N attributes.
  
      Returns
      -------
      ret : tuple
          A tuple of length N. Contains the batchified result of each attribute in the input.
      """
      assert len(data[0]) == len(self._fn), (
          "The number of attributes in each data sample should contains"
          " {} elements".format(len(self._fn))
      )
      ret = []
      for i, ele_fn in enumerate(self._fn):
          ret.append(ele_fn([ele[i] for ele in data]))
      return tuple(ret)
  
imports: import math
  from typing import AnyStr
  from typing import Callable
  from typing import Dict
  from typing import List
  from typing import NamedTuple
  from typing import Tuple
  from typing import Union
  import numpy
  import torch
  from ..utils import to_torch_dtype
label_desc: Use image node_id 2 for calling the Group obj's underlying member method code with example usage: obj.__call__(data) and returns: tuple