code: def test_vocab_change(self, asr_model):
      old_vocab = copy.deepcopy(asr_model.decoder.vocabulary)
      nw1 = asr_model.num_weights
      asr_model.change_vocabulary(new_vocabulary=old_vocab)
      # No change
      assert nw1 == asr_model.num_weights
      new_vocab = copy.deepcopy(old_vocab)
      new_vocab.append("!")
      new_vocab.append("$")
      new_vocab.append("@")
      asr_model.change_vocabulary(new_vocabulary=new_vocab)
      # fully connected + bias
      assert asr_model.num_weights == nw1 + 3 * (
          asr_model.decoder._feat_in + 1
      )
  
imports: import copy
  import pytest
  import torch
  from omegaconf import DictConfig, OmegaConf, open_dict
  import nemo.collections.asr
  from nemo.collections.asr.data import audio_to_text
  from nemo.collections.asr.models import EncDecCTCModel, configs
  from nemo.collections.asr.parts.submodules.ctc_decoding import CTCDecoding, CTCDecodingConfig
  from nemo.utils.config_utils import assert_dataclass_signature_match, update_model_config
label_desc: Use image node_id 3 for calling the TestEncDecCTCModel obj's underlying member method code with example usage: obj.test_vocab_change(asr_model) without return types