code: def test_legacy_image_encoders(
      encoder: Dict[str, Any], upgraded_type: str
  ):
      config = {
          "input_features": [
              {"name": "image1", "type": "image", "encoder": encoder}
          ],
          "output_features": [{"name": "binary1", "type": "binary"}],
      }
  
      updated_config = upgrade_config_dict_to_latest_version(config)
  
      expected_encoder = {
          **encoder,
          **{"type": upgraded_type},
      }
      assert (
          updated_config["input_features"][0]["encoder"]
          == expected_encoder
      )
  
imports: import copy
  import math
  from typing import Any, Dict
  import pytest
  from ludwig.constants import BATCH_SIZE, BFILL, CLASS_WEIGHTS, DEFAULTS, EVAL_BATCH_SIZE, EXECUTOR, HYPEROPT, INPUT_FEATURES, LEARNING_RATE_SCHEDULER, LOSS, NUMBER, OUTPUT_FEATURES, PREPROCESSING, SCHEDULER, SPLIT, TRAINER, TYPE
  from ludwig.schema.model_config import ModelConfig
  from ludwig.schema.trainer import ECDTrainerConfig
  from ludwig.utils.backward_compatibility import _update_backend_cache_credentials, _upgrade_encoder_decoder_params, _upgrade_feature, _upgrade_preprocessing_split, upgrade_config_dict_to_latest_version, upgrade_missing_value_strategy, upgrade_model_progress
  from ludwig.utils.trainer_utils import TrainerMetric
label_desc: Use image node_id 14 for calling a global function with example usage: test_legacy_image_encoders(encoder, upgraded_type) without return types