code: def get_workspace_size(
      maxT: int, maxU: int, minibatch: int, gpu: bool
  ) -> Tuple[Optional[int], global_constants.RNNTStatus]:
      if minibatch <= 0 or maxT <= 0 or maxU <= 0:
          return (
              None,
              global_constants.RNNTStatus.RNNT_STATUS_INVALID_VALUE,
          )
  
      # per minibatch memory
      per_minibatch_size = 0
  
      # alphas & betas
      per_minibatch_size += maxT * maxU * 2
  
      if not gpu:
          # // blank & label log probability cache
          per_minibatch_size += maxT * maxU * 2
      else:
          # // softmax denominator
          per_minibatch_size += maxT * maxU
          # // forward - backward loglikelihood
          per_minibatch_size += 2
  
      size = per_minibatch_size * minibatch
      return (size, global_constants.RNNTStatus.RNNT_STATUS_SUCCESS)
  
file_path: espnet/espnet2/asr/transducer/rnnt_multi_blank/utils/rnnt_helper.py
imports: import math
  from typing import Optional, Tuple
  import torch
  from numba import cuda
  from espnet2.asr.transducer.rnnt_multi_blank.utils import global_constants
label_desc: Use image node_id 11 for calling a global function with example usage: get_workspace_size(maxT, maxU, minibatch, gpu) and returns: size,  global_constants, None,  global_constants