code: def test_auto_train(
      test_data_tabular_large, ray_cluster_2cpu, tmpdir
  ):
      _, ofeatures, dataset_csv = test_data_tabular_large
      local_output_directory_path: str = f"{str(tmpdir)}/{OUTPUT_DIR}"
      results = auto_train(
          dataset=dataset_csv,
          target=ofeatures[0][NAME],
          time_limit_s=120,
          output_directory=local_output_directory_path,
          user_config={"hyperopt": {"executor": {"num_samples": 2}}},
      )
  
      analysis = results.experiment_analysis
      for trial in analysis.trials:
          assert trial.status != Trial.ERROR, f"Error in trial {trial}"
  
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 16 for calling a global function with example usage: test_auto_train(test_data_tabular_large, ray_cluster_2cpu, tmpdir) without return types