code: def test_resume_training_mlflow(optimizer, 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": 2,
              "batch_size": 16,
              "eval_batch_size": 2,
              "optimizer": {"type": optimizer},
          },
      }
  
      # create sub-directory to store results
      results_dir = tmp_path / "results"
      results_dir.mkdir()
      mlflow_uri = f"file://{tmp_path}/mlruns"
      experiment_name = optimizer + "_experiment"
  
      generated_data = synthetic_test_data.get_generated_data()
      _, _, _, _, output_dir1 = experiment_cli(
          config,
          training_set=generated_data.train_df,
          validation_set=generated_data.validation_df,
          test_set=generated_data.test_df,
          callbacks=[MlflowCallback(mlflow_uri)],
          experiment_name=experiment_name,
      )
      # Can't change any artifact spec on a run once it has been logged to mlflow, so skipping changing epochs
  
      _, _, _, _, output_dir2 = experiment_cli(
          config,
          training_set=generated_data.train_df,
          validation_set=generated_data.validation_df,
          test_set=generated_data.test_df,
          model_resume_path=output_dir1,
          callbacks=[MlflowCallback(mlflow_uri)],
          experiment_name=experiment_name,
      )
  
      # make sure there is only one mlflow run id
      experiment = mlflow.get_experiment_by_name(experiment_name)
      previous_runs = mlflow.search_runs([experiment.experiment_id])
      assert len(previous_runs) == 1
  
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 4 for calling a global function with example usage: test_resume_training_mlflow(optimizer, tmp_path) without return types