code: def hyperopt_results_single_parameter(ray_cluster_4cpu):
      """This fixture is used by hyperopt visualization tests in test_visualization_api.py."""
      config, rel_path = _get_sample_config()
      config[HYPEROPT] = {
          "parameters": {
              "trainer.learning_rate": {
                  "space": "loguniform",
                  "lower": 0.0001,
                  "upper": 0.01,
              }
          },
          "goal": "minimize",
          "output_feature": config[OUTPUT_FEATURES][0][NAME],
          "validation_metrics": "loss",
          "executor": {
              "type": "ray",
              "num_samples": 2,
          },
          "search_alg": {
              "type": "variant_generator",
          },
      }
      # Prevent resume from failure since this results in failures in other tests
      hyperopt(
          config,
          dataset=rel_path,
          output_directory="results",
          experiment_name="hyperopt_test",
          resume=False,
      )
      return os.path.join(os.path.abspath("results"), "hyperopt_test")
  
imports: import contextlib
  import os
  import tempfile
  import time
  import uuid
  from unittest import mock
  import pytest
  from ludwig.constants import BATCH_SIZE, COMBINER, EPOCHS, HYPEROPT, INPUT_FEATURES, NAME, OUTPUT_FEATURES, TRAINER, TYPE
  from ludwig.hyperopt.run import hyperopt
  from tests.integration_tests.utils import category_feature, generate_data, text_feature
label_desc: Use image node_id 7 for calling a global function with example usage: hyperopt_results_single_parameter(ray_cluster_4cpu) and returns: os