code: def test_vocab_change(self, hybrid_asr_model):
      old_vocab = copy.deepcopy(hybrid_asr_model.joint.vocabulary)
      nw1 = hybrid_asr_model.num_weights
      hybrid_asr_model.change_vocabulary(new_vocabulary=old_vocab)
      # No change
      assert nw1 == hybrid_asr_model.num_weights
      new_vocab = copy.deepcopy(old_vocab)
      new_vocab.append("!")
      new_vocab.append("$")
      new_vocab.append("@")
      hybrid_asr_model.change_vocabulary(new_vocabulary=new_vocab)
      # fully connected + bias
      # rnn embedding + joint + bias
      pred_embedding = 3 * (hybrid_asr_model.decoder.pred_hidden)
      joint_joint = 3 * (hybrid_asr_model.joint.joint_hidden + 1)
      ctc_decoder = 3 * (hybrid_asr_model.ctc_decoder._feat_in + 1)
      assert hybrid_asr_model.num_weights == (
          nw1 + (pred_embedding + joint_joint) + ctc_decoder
      )
      assert (
          hybrid_asr_model.ctc_decoder.vocabulary
          == hybrid_asr_model.joint.vocabulary
      )
  
imports: import copy
  import pytest
  import torch
  from omegaconf import DictConfig, ListConfig
  from nemo.collections.asr.models import EncDecHybridRNNTCTCModel
  from nemo.collections.asr.modules import RNNTDecoder, RNNTJoint, SampledRNNTJoint, StatelessTransducerDecoder
  from nemo.collections.asr.parts.submodules import rnnt_beam_decoding
  from nemo.collections.asr.parts.submodules import rnnt_greedy_decoding
  from nemo.collections.asr.parts.submodules.ctc_decoding import CTCDecoding, CTCDecodingConfig
  from nemo.collections.asr.parts.utils import rnnt_utils
  from nemo.core.utils import numba_utils
  from nemo.core.utils.numba_utils import __NUMBA_MINIMUM_VERSION__
  from nemo.utils.config_utils import assert_dataclass_signature_match
label_desc: Use image node_id 3 for calling the TestEncDecHybridRNNTCTCModel obj's underlying member method code with example usage: obj.test_vocab_change(hybrid_asr_model) without return types