class_docstr: Default graph compiler.
  It applies its topology to the input token sequence to compile the supervision graph.
  
  Based on https://github.com/k2-fsa/snowfall/blob/master/snowfall/training/ctc_graph.py
code: def __init__(
      self,
      num_classes: int,
      blank: int,
      topo_type: str = "default",
      topo_with_self_loops: bool = True,
      device: torch.device = torch.device("cpu"),
  ):
      self.topo_type = topo_type
      self.device = device
      from nemo.collections.asr.parts.k2.topologies import build_topo
  
      self.base_graph = k2.arc_sort(
          build_topo(
              topo_type,
              list(range(num_classes)),
              blank,
              topo_with_self_loops,
          )
      ).to(self.device)
      self.ctc_topo_inv = k2.arc_sort(self.base_graph.invert())
  
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 1 to create a new CtcTopologyCompiler object from inherited base classes: object with example: obj = CtcTopologyCompiler(num_classes, blank, topo_type, topo_with__loops, device)