code: def backward(ctx, grad_output):
      input, w_star, dim = ctx.saved_tensors
      w_star.requires_grad_(True)
  
      grad_input = None
      if ctx.needs_input_grad[0]:
          wstar = _SparseMaxGrad.apply(w_star, dim)
          grad_input = grad_output.unsqueeze(dim).mul(wstar)
      return grad_input, None, None
  
file_path: pytorch-struct/torch_struct/semirings/sparse_max.py
imports: import torch
  from .semirings import _BaseLog
label_desc: Use image node_id 2 for calling the _SimplexProject obj's underlying member method code with example usage: obj.backward(ctx, grad_output) and returns: grad_input,  None,  None