code: def test_lm_featurizer_shapes_in_process_messages(
      self,
      model_name: Text,
      model_weights: Text,
      texts: List[Text],
      expected_shape: List[Tuple[int, int]],
      expected_sequence_vec: List[List[float]],
      expected_cls_vec: List[List[float]],
      create_language_model_featurizer: Callable[
          [Dict[Text, Any]], LanguageModelFeaturizer
      ],
      whitespace_tokenizer: WhitespaceTokenizer,
  ):
      messages = process_messages(
          texts,
          model_name,
          model_weights,
          create_language_model_featurizer,
          whitespace_tokenizer,
      )
      self.evaluate_message_shapes(
          messages,
          expected_shape,
          expected_sequence_vec,
          expected_cls_vec,
      )
  
imports: import os
  from typing import Text, List, Dict, Tuple, Any, Callable
  import numpy
  import pytest
  import logging
  from _pytest.monkeypatch import MonkeyPatch
  from _pytest.logging import LogCaptureFixture
  from rasa.engine.graph import ExecutionContext
  from rasa.engine.storage.storage import ModelStorage
  from rasa.engine.storage.resource import Resource
  from rasa.nlu.constants import TOKENS_NAMES, NUMBER_OF_SUB_TOKENS
  from rasa.nlu.tokenizers.whitespace_tokenizer import WhitespaceTokenizer
  from rasa.shared.nlu.training_data.training_data import TrainingData
  from rasa.shared.nlu.training_data.message import Message
  from rasa.nlu.featurizers.dense_featurizer.lm_featurizer import LanguageModelFeaturizer
  from rasa.shared.nlu.constants import TEXT, INTENT
  from rasa.nlu.tokenizers.tokenizer import Token
label_desc: Use image node_id 3 for calling the TestShapeValuesTrainAndProcess obj's underlying member method code with example usage: obj.test_lm_featurizer_shapes_in_process_messages(model_name, model_weights, texts, expected_shape, expected_sequence_vec, expected_cls_vec, create_language_model_featurizer, whitespace_tokenizer) without return types