code: def test_validation_parity(
      self, summarize_report_fn, test_reporter, sw, mkdirs
  ):
      config = self._get_mmf_config(
          max_updates=8,
          max_epochs=None,
          batch_size=2,
          evaluation_interval=3,
      )
      mmf_trainer = get_mmf_trainer(config=config)
      mmf_trainer.load_metrics()
      logistics_callback = LogisticsCallback(
          mmf_trainer.config, mmf_trainer
      )
      logistics_callback.snapshot_timer = Timer()
      logistics_callback.train_timer = Timer()
      mmf_trainer.logistics_callback = logistics_callback
      mmf_trainer.callbacks.append(logistics_callback)
      mmf_trainer.early_stop_callback = MagicMock(return_value=None)
      mmf_trainer.on_validation_end = (
          logistics_callback.on_validation_end
      )
      mmf_trainer.training_loop()
  
      calls = summarize_report_fn.call_args_list
      self.assertEqual(3, len(calls))
      self.assertEqual(len(self.ground_truths), len(calls))
      self._check_values(calls)
  
imports: import gc
  import unittest
  from typing import Any, Dict, Optional
  from unittest.mock import MagicMock, patch
  from mmf.common.meter import Meter
  from mmf.trainers.callbacks.logistics import LogisticsCallback
  from mmf.trainers.lightning_core.loop_callback import LightningLoopCallback
  from mmf.trainers.lightning_core.loop_callback_with_torchmetrics import LightningTorchMetricsCallback
  from mmf.trainers.lightning_core.torchmetric import LightningTorchMetrics
  from mmf.utils.logger import TensorboardLogger
  from mmf.utils.timer import Timer
  from tests.trainers.test_utils import get_config_with_defaults, get_lightning_trainer, get_mmf_trainer, run_lightning_trainer
label_desc: Use image node_id 5 for calling the TestLightningTrainerValidation obj's underlying member method code with example usage: obj.test_validation_parity(summarize_report_fn, test_reporter, sw, mkdirs) without return types