code: def test_model_progress_save(
      skip_save_progress, skip_save_model, tmp_path
  ):
      (
          input_features,
          output_features,
      ) = synthetic_test_data.get_feature_configs()
  
      config = {
          "input_features": input_features,
          "output_features": output_features,
          "combiner": {"type": "concat"},
          TRAINER: {"epochs": 5, BATCH_SIZE: 128},
      }
  
      # create sub-directory to store results
      results_dir = tmp_path / "results"
      results_dir.mkdir()
  
      # run experiment
      generated_data = synthetic_test_data.get_generated_data()
      _, _, _, _, output_dir = experiment_cli(
          training_set=generated_data.train_df,
          validation_set=generated_data.validation_df,
          test_set=generated_data.test_df,
          output_directory=str(results_dir),
          config=config,
          skip_save_processed_input=True,
          skip_save_progress=skip_save_progress,
          skip_save_unprocessed_output=True,
          skip_save_model=skip_save_model,
          skip_save_log=True,
      )
  
      # ========== Check for required result data sets =============
      model_dir = os.path.join(output_dir, "model")
      files = [
          f
          for f in os.listdir(model_dir)
          if re.match(r"model_weights", f)
      ]
      if skip_save_model:
          assert len(files) == 0
      else:
          assert len(files) == 1
  
      training_checkpoints_dir = os.path.join(
          output_dir, "model", "training_checkpoints"
      )
      training_checkpoints = os.listdir(training_checkpoints_dir)
      if skip_save_progress:
          assert len(training_checkpoints) == 0
      else:
          assert len(training_checkpoints) > 0
  
imports: import json
  import logging
  import os.path
  import re
  import numpy
  import pandas
  import pytest
  import torch
  from ludwig import globals
  from ludwig.api import LudwigModel
  from ludwig.backend import LOCAL_BACKEND
  from ludwig.constants import BATCH_SIZE, CATEGORY, DEFAULTS, EPOCHS, INPUT_FEATURES, OUTPUT_FEATURES, PREPROCESSING, TRAINER, TRAINING
  from ludwig.contribs.mlflow import MlflowCallback
  from ludwig.experiment import experiment_cli
  from ludwig.features.number_feature import numeric_transformation_registry
  from ludwig.globals import DESCRIPTION_FILE_NAME, TRAINING_PREPROC_FILE_NAME
  from ludwig.schema.optimizers import optimizer_registry
  from ludwig.utils.data_utils import load_json, replace_file_extension
  from ludwig.utils.misc_utils import get_from_registry
  from ludwig.utils.package_utils import LazyLoader
  from tests.integration_tests import synthetic_test_data
  from tests.integration_tests.utils import category_feature, generate_data, LocalTestBackend
label_desc: Use image node_id 2 for calling a global function with example usage: test_model_progress_save(skip_save_progress, skip_save_model, tmp_path) without return types