code: def setup_model_scaffolding(raw_df, input_features, output_features):
      # setup input feature for testing
      config = {
          "input_features": input_features,
          "output_features": output_features,
      }
  
      # setup model scaffolding to for testing
      model = LudwigModel(config)
      (
          training_set,
          _,
          _,
          training_set_metadata,
      ) = preprocess_for_training(
          model.config,
          training_set=raw_df,
          skip_save_processed_input=True,
      )
      model.training_set_metadata = training_set_metadata
      update_config_with_metadata(
          model.config_obj, training_set_metadata
      )
      model.model = model.create_model(model.config_obj)
  
      # setup batcher to go through synthetic data
      with training_set.initialize_batcher() as batcher:
          yield model, batcher
  
file_path: ludwig/tests/integration_tests/test_sequence_features.py
imports: import contextlib
  import copy
  from io import StringIO
  import pandas
  import pytest
  import torch
  from ludwig.api import LudwigModel
  from ludwig.constants import DECODER, ENCODER_OUTPUT_STATE, LOGITS
  from ludwig.data.dataset_synthesizer import build_synthetic_dataset
  from ludwig.data.preprocessing import preprocess_for_training
  from ludwig.features.feature_registries import update_config_with_metadata
  from tests.integration_tests.utils import generate_data, run_experiment, sequence_feature
label_desc: Use image node_id 2 for calling a global function with example usage: setup_model_scaffolding(raw_df, input_features, output_features) without return types