class_docstr: Maximum Likelihood criterion.
  It implements Connectionist Temporal Classification (CTC) loss,
  but can be extended to support other loss functions (ASG, HMM, RNNT, ...).
  
  Based on https://github.com/k2-fsa/snowfall/blob/master/snowfall/objectives/ctc.py
  
  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.graph_compiler is not None
  
      (
          emissions_graphs,
          supervision_graphs,
          supervisions,
      ) = self._prepare_graphs_for_intersection(
          log_probs, targets, input_lengths, target_lengths
      )
      scores, mask = self._intersect_calc_scores(
          emissions_graphs, supervision_graphs, supervisions
      )
      return scores, mask
  
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 4 for calling the MLLoss obj's underlying member method code with example usage: obj.forward(log_probs, targets, input_lengths, target_lengths) and returns: scores,  mask