class_docstr: RNNT graph decoder with the `minimal` topology.
  If predictor_window_size is not provided, this decoder works as a Viterbi over regular RNNT lattice.
  With predictor_window_size provided, it applies uniform pruning when compiling Emission FSAs
  to reduce memory and compute consumption.
  
  Can only do forced alignment.
code: def align(
      self,
      log_probs: torch.Tensor,
      log_probs_length: torch.Tensor,
      targets: torch.Tensor,
      target_lengths: torch.Tensor,
      return_lattices: bool = False,
      return_ilabels: bool = False,
      output_aligned: bool = True,
  ) -> Tuple[List[torch.Tensor], List[torch.Tensor]]:
      assert (
          self.predictor_window_size == 0
          or log_probs.size(2) <= self.predictor_window_size + 1
      )
  
      return super().align(
          log_probs,
          log_probs_length,
          targets,
          target_lengths,
          return_lattices=return_lattices,
          return_ilabels=return_ilabels,
          output_aligned=output_aligned,
      )
  
imports: from abc import abstractmethod
  from typing import List, Optional, Tuple, Union
  import torch
  from omegaconf import DictConfig
  from nemo.collections.asr.parts.k2.classes import GraphIntersectDenseConfig
  from nemo.collections.asr.parts.k2.loss_mixins import CtcK2Mixin, RnntK2Mixin
  from nemo.collections.asr.parts.k2.utils import invert_permutation, load_graph
  from nemo.utils import logging
label_desc: Use image node_id 3 for calling the RnntAligner obj's underlying member method code with example usage: obj.align(log_probs, log_probs_length, targets, target_lengths, return_lattices, return_ilabels, output_aligned) and returns: super