class_docstr: Base class for hybrid RNNT/CTC models.
class_docstr_tok: ["Base","class","for","hybrid","RNNT\/CTC","models","."]
code: def test_step(self, batch, batch_idx, dataloader_idx=0):
      logs = self.validation_step(
          batch, batch_idx, dataloader_idx=dataloader_idx
      )
      test_logs = {
          name.replace("val_", "test_"): value
          for name, value in logs.items()
      }
      if (
          type(self.trainer.test_dataloaders) == list
          and len(self.trainer.test_dataloaders) > 1
      ):
          self.test_step_outputs[dataloader_idx].append(test_logs)
      else:
          self.test_step_outputs.append(test_logs)
      return test_logs
  
imports: import copy
  import json
  import os
  import tempfile
  from typing import List, Optional
  import torch
  from omegaconf import DictConfig, OmegaConf, open_dict
  from pytorch_lightning import Trainer
  from tqdm.auto import tqdm
  from nemo.collections.asr.losses.ctc import CTCLoss
  from nemo.collections.asr.metrics.wer import WER
  from nemo.collections.asr.parts.mixins import ASRBPEMixin, InterCTCMixin
  from nemo.collections.asr.parts.submodules.ctc_decoding import CTCDecoding, CTCDecodingConfig
  from nemo.collections.asr.parts.utils.audio_utils import ChannelSelectorType
  from nemo.collections.multimodal.speech_cv.models.visual_rnnt_models import VisualEncDecRNNTModel
  from nemo.core.classes.common import PretrainedModelInfo
  from nemo.core.classes.mixins import AccessMixin
  from nemo.utils import logging, model_utils
label_desc: Use image node_id 8 for calling the VisualEncDecHybridRNNTCTCModel obj's underlying member method code with example usage: obj.test_step(batch, batch_idx, dataloader_idx) and returns: test_logs