class_docstr: GTN CTC module.
docstr: Backward computation.
  
  :param torch.tensor grad_output: backward passed gradient value
  :return: cumulative gradient output
  :rtype: (torch.Tensor, None, None, None)
docstr_tok: ["Backward","computation",".",":","param","torch.tensor","grad_output",":","backward","passed","gradient","value",":","return",":","cumulative","gradient","output",":","rtype",":","(","torch.Tensor",",","None",",","None",",","None",")"]
code: def backward(ctx, grad_output):
      """Backward computation.
  
      :param torch.tensor grad_output: backward passed gradient value
      :return: cumulative gradient output
      :rtype: (torch.Tensor, None, None, None)
      """
      (
          losses,
          scales,
          emissions_graphs,
          in_shape,
          ilens,
      ) = ctx.auxiliary_data
      B, T, C = in_shape
      input_grad = torch.zeros((B, T, C))
  
      def process(b):
          T = ilens[b]
          gtn.backward(losses[b], False)
          emissions = emissions_graphs[b]
          grad = emissions.grad().weights_to_numpy()
          input_grad[b][:T] = (
              torch.from_numpy(grad).view(1, T, C) * scales[b]
          )
  
      gtn.parallel_for(process, range(B))
  
      if grad_output.is_cuda:
          input_grad = input_grad.cuda()
      input_grad *= grad_output / B
  
      return (
          input_grad,
          None,  # targets
          None,  # ilens
          None,  # blank_idx
          None,  # reduction
      )
  
imports: import gtn
  import torch
label_desc: Use image node_id 3 for calling the GTNCTCLossFunction obj's underlying member method code with example usage: obj.backward(ctx, grad_output) and returns: input_grad,  None,  None,  None,  None