code: def merge_config_preprocessing_with_feature_specific_defaults(
      config_preprocessing: PreprocessingConfigDict,
      config_defaults: FeatureTypeDefaultsDict,
  ) -> PreprocessingConfigDict:
      """Returns a new dictionary that merges preprocessing section of config with type-specific preprocessing
      parameters from config defaults."""
      preprocessing_params = {}
      preprocessing_params.update(config_preprocessing)
      for feature_type in config_defaults:
          preprocessing_params[feature_type] = config_defaults[
              feature_type
          ].get(PREPROCESSING, {})
      return preprocessing_params
  
file_path: ludwig/ludwig/utils/config_utils.py
imports: from typing import Any, Dict, Set, Union
  from ludwig.api_annotations import DeveloperAPI
  from ludwig.constants import DECODER, ENCODER, IMAGE, INPUT_FEATURES, MODEL_ECD, MODEL_LLM, MODEL_TYPE, PREPROCESSING, SEQUENCE, TEXT, TIMESERIES, TYPE
  from ludwig.features.feature_registries import get_input_type_registry
  from ludwig.schema.model_config import ModelConfig
  from ludwig.types import FeatureConfigDict, FeatureTypeDefaultsDict, PreprocessingConfigDict
label_desc: Use image node_id 4 for calling a global function with example usage: merge_config_preprocessing_with_feature_specific_defaults(config_preprocessing, config_defaults) and returns: preprocessing_params