class_docstr: MultiDataLoader cycles through individual dataloaders passed to it.
  
  Attributes:
      individual_dataloaders (Dict[str, Union[DataLoader, Iterable]]): A dictionary of DataLoaders or Iterables with dataloader name as key
      and dataloader/iterable object as value.
      iteration_strategy (DataIterationStrategy): A dataclass indicating how the dataloaders are iterated over.
      iterator_cls (MultiIterator, optional): A subclass of MultiIterator defining iteration logic. This is the type, not an object instance
      ignore_empty_data (bool): skip dataloaders which contain no data. It's False by default, and an exception is raised.
  
  Note:
      `TorchData <https://pytorch.org/data/beta/index.html>`_ also has generic
      multi-data sources reading support to achieve the same functionality
      provided by MultiIterator.
      For example, `mux`, `mux_longest`, `cycle`, `zip` etc. Please refer
      to the documentation for more details.
code: def __init__(
      self,
      # pyre-fixme[24]: Generic type `Iterable` expects 1 type parameter
      individual_dataloaders: Dict[str, Union[DataLoader, Iterable]],
      iteration_strategy: DataIterationStrategy,
      iterator_cls: Optional[Type[MultiIterator]] = None,
      ignore_empty_data: bool = False,
  ) -> None:
      self.individual_dataloaders = individual_dataloaders
      self.iteration_strategy = iteration_strategy
      self.iterator_cls = iterator_cls
      for name in list(individual_dataloaders.keys()):
          try:
              next(iter(self.individual_dataloaders[name]))
          except StopIteration:
              if not ignore_empty_data:
                  raise ValueError(
                      f"Dataloader '{name}' contains no data."
                  )
              else:
                  logger.warning(
                      f"Dataloader '{name}' which contains no data. "
                      "You might have empty dataloaders in the input dict."
                  )
  
file_path: tnt/torchtnt/utils/data/multi_dataloader.py
imports: from __future__ import annotations
  import logging
  from typing import Any, Dict, Iterable, Iterator, Optional, Type, TYPE_CHECKING, Union
  from torchtnt.utils.data.iterators import DataIterationStrategy, DataIterationStrategyRegistry, MultiIterator
  from torchtnt.utils.stateful import Stateful
label_desc: Use image node_id 1 to create a new MultiDataLoader object  with example: obj = MultiDataLoader(individual_dataloaders, iteration_strategy, iterator_cls, ignore_empty_data)