docstr: Metadata for CPU based RNNT loss calculation. Holds the working space memory.
  
  Args:
      T: Length of the acoustic sequence (without padding).
      U: Length of the target sequence (without padding).
      workspace: Working space memory for the CPU.
      bytes_used: Number of bytes currently used for indexing the working space memory. Generally 0.
      blank: Index of the blank token in the vocabulary.
      labels: Ground truth padded labels matrix of shape [B, U]
      log_probs: Log probs / activation matrix of flattented shape [B, T, U, V+1]
      idx:
docstr_tok: ["Metadata","for","CPU","based","RNNT","loss","calculation",".","Holds","the","working","space","memory",".","Args",":","T",":","Length","of","the","acoustic","sequence","(","without","padding",")",".","U",":","Length","of","the","target","sequence","(","without","padding",")",".","workspace",":","Working","space","memory","for","the","CPU",".","bytes_used",":","Number","of","bytes","currently","used","for","indexing","the","working","space","memory",".","Generally","0.","blank",":","Index","of","the","blank","token","in","the","vocabulary",".","labels",":","Ground","truth","padded","labels","matrix","of","shape","[","B",",","U","]","log_probs",":","Log","probs","\/","activation","matrix","of","flattented","shape","[","B",",","T",",","U",",","V+1","]","idx",":"]
code: def __init__(
      self,
      T: int,
      U: int,
      workspace: torch.Tensor,
      bytes_used: int,
      blank: int,
      labels: torch.Tensor,
      log_probs: torch.Tensor,
      idx: CpuRNNT_index,
  ):
      """
      Metadata for CPU based RNNT loss calculation. Holds the working space memory.
  
      Args:
          T: Length of the acoustic sequence (without padding).
          U: Length of the target sequence (without padding).
          workspace: Working space memory for the CPU.
          bytes_used: Number of bytes currently used for indexing the working space memory. Generally 0.
          blank: Index of the blank token in the vocabulary.
          labels: Ground truth padded labels matrix of shape [B, U]
          log_probs: Log probs / activation matrix of flattented shape [B, T, U, V+1]
          idx:
      """
      super(CpuRNNT_metadata, self).__init__()
  
      self.alphas = workspace[bytes_used : bytes_used + T * U]
      bytes_used += T * U
  
      self.betas = workspace[bytes_used : bytes_used + T * U]
      bytes_used += T * U
  
      self.log_probs2 = workspace[
          bytes_used : bytes_used + T * U * 2
      ]  # // only store blank & label
      bytes_used += T * U * 2
  
      self.bytes_used = bytes_used
  
      self.setup_probs(T, U, labels, blank, log_probs, idx)
  
imports: import math
  import multiprocessing
  from typing import Optional
  import numba
  import torch
  from torch.autograd import Function
  from nemo.collections.asr.parts.numba.rnnt_loss.utils import global_constants
label_desc: Use image node_id 1 to create a new CpuRNNT_metadata object  with example: obj = CpuRNNT_metadata(T, U, workspace, bytes_used, blank, labels, log_probs, idx)