code: def __iter__(
      self,
  ) -> Union[Iterator[Any], Generator[Any, None, None]]:
      # Without setting the epoch, the distributed sampler would return the same indices every time, even when
      # shuffling is enabled. In PyTorch, the user would normally have to call `.set_epoch()` on the sampler.
      # In Fabric, we take care of this boilerplate code.
      _set_sampler_epoch(self._dataloader, self._num_iter_calls)
      self._num_iter_calls += 1
  
      if self._device is None:
          yield from iter(self._dataloader)
      else:
          for item in self._dataloader:
              yield move_data_to_device(item, self._device)
  
imports: import inspect
  from functools import wraps
  from typing import Any, Callable, Dict, Generator, Iterator, List, Mapping, Optional, TypeVar, Union, overload
  import torch
  from lightning_utilities.core.apply_func import apply_to_collection
  from torch import Tensor
  from torch import nn
  from torch.nn.modules.module import _IncompatibleKeys
  from torch.optim import Optimizer
  from torch.utils.data import DataLoader
  from typing_extensions import override
  from lightning.fabric.plugins import Precision
  from lightning.fabric.strategies import Strategy
  from lightning.fabric.utilities import move_data_to_device
  from lightning.fabric.utilities.data import _set_sampler_epoch
  from lightning.fabric.utilities.device_dtype_mixin import _DeviceDtypeModuleMixin
  from lightning.fabric.utilities.imports import _TORCH_GREATER_EQUAL_2_0
  from lightning.fabric.utilities.types import Optimizable
label_desc: Use image node_id 4 for calling the _FabricDataLoader obj's underlying member method code with example usage: obj.__iter__() without return types