code: def test_gbm_feature_name_special_characters(
      tmpdir, feature_name, feature_type, backend, ray_cluster_4cpu
  ):
      """Test that feature names containing JSON special characters are properly sanitized.
  
      LGBM Datasets do not support feature names with JSON special characters. This tests that our sanitizer both solves
      the special character error and also does not impede training.
      """
      input_features = (
          [binary_feature(name=feature_name)]
          if feature_name == "input"
          else [binary_feature()]
      )
      output_features = (
          [binary_feature(name=feature_name)]
          if feature_type == "output"
          else [binary_feature()]
      )
      _train_and_predict_gbm(
          input_features, output_features, tmpdir, backend
      )
  
imports: import os
  import numpy
  import pytest
  from ludwig.api import LudwigModel
  from ludwig.constants import INPUT_FEATURES, MODEL_TYPE, OUTPUT_FEATURES, TRAINER
  from ludwig.error import ConfigValidationError
  from ludwig.schema.model_types.base import ModelConfig
  from tests.integration_tests import synthetic_test_data
  from tests.integration_tests.utils import binary_feature
  from tests.integration_tests.utils import category_feature
  from tests.integration_tests.utils import generate_data, number_feature, text_feature
label_desc: Use image node_id 30 for calling a global function with example usage: test_gbm_feature_name_special_characters(tmpdir, feature_name, feature_type, backend, ray_cluster_4cpu) without return types