docstr: Called every checkpoint evaluation step.
docstr_tok: ["Called","every","checkpoint","evaluation","step","."]
code: def eval_step(
      self, progress_tracker: ProgressTracker, validation_field: str
  ):
      """Called every checkpoint evaluation step."""
      if self._eval_scheduler is None:
          # No reduce on plateau
          return
  
      if self.config.reduce_eval_split == TRAINING:
          split_metrics = progress_tracker.train_metrics
      elif self.config.reduce_eval_split == VALIDATION:
          split_metrics = progress_tracker.validation_metrics
      else:  # if self.config.reduce_eval_split == TEST:
          split_metrics = progress_tracker.test_metrics
  
      validation_metric = self.config.reduce_eval_metric
      last_metric: TrainerMetric = split_metrics[validation_field][
          validation_metric
      ][-1]
      last_metric_value = last_metric[-1]
  
      prev_num_reductions = self._eval_scheduler.num_reduce_lr
      self._eval_scheduler.step(last_metric_value)
  
      num_reductions = self._eval_scheduler.num_reduce_lr
      if num_reductions > prev_num_reductions:
          # LR reduction -> update progress tracker
          progress_tracker.last_learning_rate_reduction_steps = (
              progress_tracker.steps
          )
          progress_tracker.last_learning_rate_reduction = 0
          progress_tracker.num_reductions_learning_rate += 1
      else:
          progress_tracker.last_learning_rate_reduction = (
              progress_tracker.steps
              - progress_tracker.last_learning_rate_reduction_steps
          )
  
imports: import logging
  import math
  from typing import Any, Callable, Dict
  from torch.optim import Optimizer
  from torch.optim.lr_scheduler import CosineAnnealingWarmRestarts, LambdaLR, ReduceLROnPlateau, SequentialLR
  from ludwig.constants import MINIMIZE, TRAINING, VALIDATION
  from ludwig.modules.metric_registry import get_metric_objective
  from ludwig.schema.lr_scheduler import LRSchedulerConfig
  from ludwig.utils.metric_utils import TrainerMetric
  from ludwig.utils.trainer_utils import ProgressTracker
label_desc: Use image node_id 3 for calling the LRScheduler obj's underlying member method code with example usage: obj.eval_step(progress_tracker, validation_field) without return types