class_docstr: Graph compiler for MMI loss.
  The decoding graph is a composition of the auxiliary graph and the topology.
  It is returned along with the supervision graph on every compile() call.
code: def compile(
      self,
      targets: torch.Tensor,
      target_lengths: torch.Tensor,
      aux_graph: Optional["k2.Fsa"] = None,
  ) -> Tuple["k2.Fsa", "k2.Fsa"]:
      supervision_graphs = super().compile(
          targets, target_lengths, aux_graph
      )
      if aux_graph is None and self.decoding_graph is None:
          raise ValueError(
              f"At least one of aux_graph and self.decoding_graph must be set: {aux_graph}, {self.decoding_graph}"
          )
      elif aux_graph is not None:
          self.decoding_graph = k2.create_fsa_vec(
              [self.base_graph.detach()]
          ).to(self.device)
      return supervision_graphs, self.decoding_graph
  
imports: from typing import Optional, Tuple
  import torch
  from nemo.collections.asr.parts.k2.utils import add_self_loops, compose_with_self_loops, intersect_with_self_loops
  from nemo.core.utils.k2_guard import k2
label_desc: Use image node_id 3 for calling the MmiGraphCompiler obj's underlying member method code with example usage: obj.compile(targets, target_lengths, aux_graph) and returns: supervision_graphs,  self