code: def test_create_auto_config(
      test_data, expectations, ray_cluster_2cpu, request
  ):
      test_data = request.getfixturevalue(test_data)
      input_features, output_features, dataset_csv = test_data
      targets = [feature[NAME] for feature in output_features]
      df = dd.read_csv(dataset_csv)
      config = create_auto_config(
          df, targets, time_limit_s=600, backend="ray"
      )
  
      # Ensure our configs are using the latest Ludwig schema
      ModelConfig.from_dict(config)
  
      assert to_name_set(config[INPUT_FEATURES]) == to_name_set(
          input_features
      )
      assert to_name_set(config[OUTPUT_FEATURES]) == to_name_set(
          output_features
      )
      check_types(config, input_features, output_features)
  
      expected = merge_dict_with_features(config, expectations)
      assert config == expected
  
imports: import os
  import tempfile
  from typing import List, Set
  from unittest import mock
  import numpy
  import pandas
  import pytest
  from ludwig.api import LudwigModel
  from ludwig.constants import COLUMN, ENCODER, INPUT_FEATURES, NAME, OUTPUT_FEATURES, PREPROCESSING, SPLIT, TYPE
  from ludwig.schema.model_types.base import ModelConfig
  from ludwig.types import FeatureConfigDict, ModelConfigDict
  from ludwig.utils.misc_utils import merge_dict
  from tests.integration_tests.utils import binary_feature, category_feature, generate_data, image_feature, minio_test_creds, number_feature, private_param, remote_tmpdir, text_feature
  import dask.dataframe
  from ray.tune.experiment.trial import Trial
  from ludwig.automl import auto_train, create_auto_config, train_with_config
  from ludwig.automl.automl import OUTPUT_DIR
  from ludwig.hyperopt.execution import RayTuneExecutor
label_desc: Use image node_id 10 for calling a global function with example usage: test_create_auto_config(test_data, expectations, ray_cluster_2cpu, request) without return types