code: def backward(ctx: Any, grad_out: Tensor) -> Tuple[Tensor, None, None]:
      (
          inputs,
          edge_label_index,
          edge_label_weight,
          logsumexp,
      ) = ctx.saved_tensors
  
      grad_out = grad_out / inputs.size(0)
      grad_out = grad_out.expand(edge_label_index.size(1))
  
      if edge_label_weight is not None:
          grad_out = grad_out * edge_label_weight
  
      grad_logsumexp = scatter(
          grad_out,
          edge_label_index[0],
          dim=0,
          dim_size=inputs.size(0),
          reduce="sum",
      )
  
      # Gradient computation of `logsumexp`: `grad * (self - result).exp()`
      grad_input = inputs - logsumexp.view(-1, 1)
      grad_input.exp_()
      grad_input.mul_(grad_logsumexp.view(-1, 1))
  
      grad_input[edge_label_index[0], edge_label_index[1]] -= grad_out
  
      return grad_input, None, None
  
file_path: pytorch_geometric/torch_geometric/utils/cross_entropy.py
imports: from typing import Any, Optional, Tuple
  import torch
  from torch import Tensor
  from torch_geometric.utils import scatter
label_desc: Use image node_id 2 for calling the SparseCrossEntropy obj's underlying member method code with example usage: obj.backward(ctx, grad_out) and returns: grad_input,  None,  None