code: def test_hyperopt_ray_mlflow(csv_filename, tmpdir, ray_cluster_4cpu):
      mlflow_uri = f"file://{tmpdir}/mlruns"
      mlflow.set_tracking_uri(mlflow_uri)
      client = MlflowClient(tracking_uri=mlflow_uri)
  
      num_samples = 2
      config = _get_config(
          {"type": "variant_generator"},  # search_alg
          {"type": "ray", "num_samples": num_samples},  # executor
          2,  # epochs
      )
  
      rel_path = generate_data(
          config["input_features"],
          config["output_features"],
          csv_filename,
      )
  
      exp_name = "mlflow_test"
      run_hyperopt(
          config,
          rel_path,
          tmpdir,
          experiment_name=exp_name,
          callbacks=[MlflowCallback(mlflow_uri)],
      )
  
      experiment = client.get_experiment_by_name(exp_name)
      assert experiment is not None
  
      runs = client.search_runs([experiment.experiment_id])
      assert len(runs) > 0
  
      for run in runs:
          artifacts = [
              f.path for f in client.list_artifacts(run.info.run_id, "")
          ]
          assert "config.yaml" in artifacts
          assert "model" in artifacts
  
imports: import json
  import logging
  import os.path
  from typing import Dict, List
  import mlflow
  import pandas
  import pytest
  from mlflow.tracking import MlflowClient
  from ludwig.backend import initialize_backend
  from ludwig.callbacks import Callback
  from ludwig.constants import ACCURACY, AUTO, BATCH_SIZE, EXECUTOR, MAX_CONCURRENT_TRIALS, TRAINER
  from ludwig.contribs.mlflow import MlflowCallback
  from ludwig.globals import HYPEROPT_STATISTICS_FILE_NAME, MODEL_HYPERPARAMETERS_FILE_NAME
  from ludwig.hyperopt.results import HyperoptResults
  from ludwig.hyperopt.run import hyperopt
  from ludwig.hyperopt.utils import update_hyperopt_params_with_defaults
  from ludwig.schema.model_config import ModelConfig
  from ludwig.utils.automl.utils import get_model_type
  from tests.integration_tests.utils import category_feature, generate_data, text_feature
label_desc: Use image node_id 6 for calling a global function with example usage: test_hyperopt_ray_mlflow(csv_filename, tmpdir, ray_cluster_4cpu) without return types