code: def on_batch_start(
      self, batch: Any, dataloader_idx: Optional[int] = None
  ) -> None:
      if self._first_loop_iter is None:
          self._first_loop_iter = True
      elif self._first_loop_iter is True:
          self._first_loop_iter = False
  
      results = self.trainer._results
      assert results is not None
      # attach reference to the new batch and remove the cached batch_size
      results.batch = batch
      results.batch_size = None
      results.dataloader_idx = dataloader_idx
  
imports: from typing import Any, Iterable, Optional, Union
  from lightning_utilities.core.apply_func import apply_to_collection
  from torch import Tensor
  import lightning.pytorch
  from lightning.fabric.loggers.tensorboard import _TENSORBOARD_AVAILABLE, _TENSORBOARDX_AVAILABLE
  from lightning.fabric.plugins.environments import SLURMEnvironment
  from lightning.fabric.utilities import move_data_to_device
  from lightning.fabric.utilities.apply_func import convert_tensors_to_scalars
  from lightning.pytorch.loggers import CSVLogger, Logger, TensorBoardLogger
  from lightning.pytorch.trainer.connectors.logger_connector.result import _METRICS, _OUT_DICT, _PBAR_DICT
  from lightning.pytorch.utilities.rank_zero import WarningCache
label_desc: Use image node_id 12 for calling the _LoggerConnector obj's underlying member method code with example usage: obj.on_batch_start(batch, dataloader_idx) without return types