class_docstr: Create mini-batches of data (functional name: ``batch``).
  
  An outer dimension will be added as ``batch_size`` if ``drop_last`` is set to ``True``,
  or ``length % batch_size`` for the last batch if ``drop_last`` is set to ``False``.
  
  Args:
      datapipe: Iterable DataPipe being batched
      batch_size: The size of each batch
      drop_last: Option to drop the last batch if it's not full
  
  Example:
      >>> # xdoctest: +SKIP
      >>> from torchdata.datapipes.map import SequenceWrapper
      >>> dp = SequenceWrapper(range(10))
      >>> batch_dp = dp.batch(batch_size=2)
      >>> list(batch_dp)
      [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
code: def __len__(self) -> int:
      if isinstance(self.datapipe, Sized):
          if self.drop_last:
              return len(self.datapipe) // self.batch_size
          else:
              return (
                  len(self.datapipe) + self.batch_size - 1
              ) // self.batch_size
      else:
          raise TypeError(
              f"{type(self).__name__} instance doesn't have valid length"
          )
  
imports: from torch.utils.data.datapipes._decorator import functional_datapipe
  from torch.utils.data.datapipes.datapipe import MapDataPipe, DataChunk
  from typing import List, Sized, TypeVar
label_desc: Use image node_id 3 for calling the BatcherMapDataPipe obj's underlying member method code with example usage: obj.__len__() and returns: unknown, unknown