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 `Group` will be applied on the `i`th attribute. For example, each
  data sample is (nd_data, label). You can wrap two batchify functions using
  `Group(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
  --------
  >>> a = ([1, 2, 3, 4], 0)
  >>> b = ([5, 7], 1)
  >>> c = ([1, 2, 3, 4, 5, 6, 7], 0)
  >>> f1, f2 = Group(Pad(val=0),
  ...                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)>
code: def __mx_handle__(self):
      if self._handle is None:
          from ._internal import GroupBatchify
  
          try:
              mx_fn = [fn.__mx_handle__() for fn in self._fn]
              self._handle = GroupBatchify(functions=mx_fn)
          except Exception as e:
              raise NotImplementedError(
                  "GroupBatchify requires all internal batchify functions supported by backend."
                  + str(e)
              )
      return self._handle
  
imports: import math
  import warnings
  import numpy
  from ...device import Device, cpu
  from ...None import ndarray
  from ...None import numpy
  from ...util import is_np_array
label_desc: Use image node_id 3 for calling the Group obj's underlying member method code with example usage: obj.__mx_handle__() and returns: self