class_docstr: Top-level loop where validation/testing starts.
code: def run(self) -> List[_OUT_DICT]:
      self.setup_data()
      if self.skip:
          return []
      self.reset()
      self.on_run_start()
      data_fetcher = self._data_fetcher
      assert data_fetcher is not None
      previous_dataloader_idx = 0
      while True:
          try:
              if isinstance(data_fetcher, _DataLoaderIterDataFetcher):
                  dataloader_iter = next(data_fetcher)
                  # hook's batch_idx and dataloader_idx arguments correctness cannot be guaranteed in this setting
                  batch = data_fetcher._batch
                  batch_idx = data_fetcher._batch_idx
                  dataloader_idx = data_fetcher._dataloader_idx
              else:
                  dataloader_iter = None
                  batch, batch_idx, dataloader_idx = next(data_fetcher)
              if previous_dataloader_idx != dataloader_idx:
                  # the dataloader has changed, notify the logger connector
                  self._store_dataloader_outputs()
              previous_dataloader_idx = dataloader_idx
              self.batch_progress.is_last_batch = data_fetcher.done
              # run step hooks
              self._evaluation_step(
                  batch, batch_idx, dataloader_idx, dataloader_iter
              )
          except StopIteration:
              # this needs to wrap the `*_step` call too (not just `next`) for `dataloader_iter` support
              break
          finally:
              self._restarting = False
      self._store_dataloader_outputs()
      return self.on_run_end()
  
imports: import os
  import shutil
  import sys
  from collections import ChainMap, OrderedDict, defaultdict
  from typing import Any, DefaultDict, Iterable, Iterator, List, Optional, Tuple, Union
  from lightning_utilities.core.apply_func import apply_to_collection
  from torch import Tensor
  import lightning.pytorch
  from lightning.fabric.utilities.data import _set_sampler_epoch
  from lightning.pytorch.callbacks.progress.rich_progress import _RICH_AVAILABLE
  from lightning.pytorch.loops.fetchers import _DataFetcher, _DataLoaderIterDataFetcher
  from lightning.pytorch.loops.loop import _Loop
  from lightning.pytorch.loops.progress import _BatchProgress
  from lightning.pytorch.loops.utilities import _no_grad_context, _select_data_fetcher, _verify_dataloader_idx_requirement
  from lightning.pytorch.trainer import call
  from lightning.pytorch.trainer.connectors.data_connector import _check_dataloader_iterable, _DataLoaderSource, _parse_num_batches, _process_dataloader, _request_dataloader, _resolve_overfit_batches
  from lightning.pytorch.trainer.connectors.logger_connector.result import _OUT_DICT, _ResultCollection
  from lightning.pytorch.trainer.states import RunningStage, TrainerFn
  from lightning.pytorch.utilities.combined_loader import CombinedLoader
  from lightning.pytorch.utilities.data import has_len_all_ranks
  from lightning.pytorch.utilities.exceptions import SIGTERMException
  from lightning.pytorch.utilities.model_helpers import _ModuleMode, is_overridden
  from lightning.pytorch.utilities.signature_utils import is_param_in_hook_signature
label_desc: Use image node_id 7 for calling the _EvaluationLoop obj's underlying member method code with example usage: obj.run() and returns: self, list