class_docstr: RNNT loss with the `minimal` topology.
  If predictor_window_size is not provided, this loss works as regular RNNT.
  With predictor_window_size provided, it applies uniform pruning when compiling Emission FSAs
  to reduce memory and compute consumption.
  cfg takes precedence over all optional parameters
  We keep explicit parameter setting to be able to create an instance without the need of a config.
code: def forward(
      self,
      log_probs: torch.Tensor,
      targets: torch.Tensor,
      input_lengths: torch.Tensor,
      target_lengths: torch.Tensor,
  ) -> Tuple[torch.Tensor, torch.Tensor]:
      assert (
          self.predictor_window_size == 0
          or log_probs.size(2) <= self.predictor_window_size + 1
      )
  
      return super().forward(
          log_probs=log_probs,
          targets=targets,
          input_lengths=input_lengths,
          target_lengths=target_lengths,
      )
  
imports: from abc import abstractmethod
  from typing import Any, Optional, Tuple
  import torch
  from omegaconf import DictConfig
  from nemo.collections.asr.parts.k2.graph_compilers import CtcTopologyCompiler, RnntTopologyCompiler
  from nemo.collections.asr.parts.k2.loss_mixins import CtcK2Mixin, RnntK2Mixin
  from nemo.collections.asr.parts.k2.utils import get_tot_objf_and_finite_mask, invert_permutation
  from nemo.core.utils.k2_guard import k2
label_desc: Use image node_id 2 for calling the RnntLoss obj's underlying member method code with example usage: obj.forward(log_probs, targets, input_lengths, target_lengths) and returns: super