code: def test_progress_tracker():
      output_features = LudwigFeatureDict()
      category_feature, _ = load_config_with_kwargs(
          ECDCategoryOutputFeatureConfig,
          {
              "name": "category_feature",
              "type": "category",
              "decoder": {
                  "type": "classifier",
              },
              "num_classes": 3,
              "input_size": 10,
          },
      )
      output_features.set(
          "category_feature",
          CategoryOutputFeature(category_feature, {}),
      )
  
      progress_tracker = trainer_utils.get_new_progress_tracker(
          batch_size=5,
          best_eval_metric_value=0,
          best_increase_batch_size_eval_metric=0,
          learning_rate=0.01,
          output_features=output_features,
      )
  
      progress_tracker.validation_metrics[COMBINED][LOSS].append(
          TrainerMetric(epoch=1, step=10, value=0.1)
      )
      progress_tracker.validation_metrics[COMBINED][LOSS].append(
          TrainerMetric(epoch=1, step=20, value=0.2)
      )
  
      assert progress_tracker.log_metrics() == {
          "batch_size": 5,
          "best_eval_metric_checkpoint_number": 0,
          "best_eval_metric_epoch": 0,
          "best_valid_metric": 0,
          "checkpoint_number": 0,
          "epoch": 0,
          "best_eval_metric_steps": 0,
          "learning_rate": 0.01,
          "num_increases_bs": 0,
          "num_reductions_lr": 0,
          "steps": 0,
          "tune_checkpoint_num": 0,
          "validation_metrics.combined.loss": 0.2,
          "last_improvement_steps": 0,
          "total_tokens_used": 0,
      }
  
file_path: ludwig/tests/ludwig/utils/test_trainer_utils.py
imports: from collections import OrderedDict
  from typing import Union
  import pytest
  from ludwig.constants import AUTO, BATCH_SIZE, COMBINED, LOSS
  from ludwig.features.category_feature import CategoryOutputFeature
  from ludwig.features.feature_utils import LudwigFeatureDict
  from ludwig.schema.features.category_feature import ECDCategoryOutputFeatureConfig
  from ludwig.schema.trainer import ECDTrainerConfig
  from ludwig.schema.utils import load_config_with_kwargs
  from ludwig.utils import trainer_utils
  from ludwig.utils.metric_utils import TrainerMetric
label_desc: Use image node_id 4 for calling a global function with example usage: test_progress_tracker() without return types