class_docstr: Top-level loop where validation/testing starts.
docstr: Runs the ``_on_evaluation_epoch_end`` hook.
docstr_tok: ["Runs","the","``","_on_evaluation_epoch_end","``","hook","."]
code: def on_run_end(self) -> List[_OUT_DICT]:
      """Runs the ``_on_evaluation_epoch_end`` hook."""
      # if `done` returned True before any iterations were done, this won't have been called in `on_advance_end`
      self.trainer._logger_connector.epoch_end_reached()
      self.trainer._logger_connector._evaluation_epoch_end()
  
      # hook
      self._on_evaluation_epoch_end()
  
      logged_outputs, self._logged_outputs = (
          self._logged_outputs,
          [],
      )  # free memory
      # include any logged outputs on epoch_end
      epoch_end_logged_outputs = (
          self.trainer._logger_connector.update_eval_epoch_metrics()
      )
      all_logged_outputs = dict(
          ChainMap(*logged_outputs)
      )  # list[dict] -> dict
      all_logged_outputs.update(epoch_end_logged_outputs)
      for dl_outputs in logged_outputs:
          dl_outputs.update(epoch_end_logged_outputs)
  
      # log metrics
      self.trainer._logger_connector.log_eval_end_metrics(
          all_logged_outputs
      )
  
      # hook
      self._on_evaluation_end()
  
      # enable train mode again
      self._on_evaluation_model_train()
  
      if self.verbose and self.trainer.is_global_zero:
          self._print_results(logged_outputs, self._stage.value)
  
      return logged_outputs
  
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 11 for calling the _EvaluationLoop obj's underlying member method code with example usage: obj.on_run_end() and returns: logged_outputs