code: def backward(cls, ctx, dY):
      (Y,) = ctx.saved_tensors
  
      gppr = torch.where(Y > 0, Y ** (2 - ctx.alpha), Y.new_zeros(1))
  
      dX = dY * gppr
      q = dX.sum(ctx.dim) / gppr.sum(ctx.dim)
      q = q.unsqueeze(ctx.dim)
      dX -= q * gppr
  
      d_alpha = None
      if ctx.needs_input_grad[1]:
          # alpha gradient computation
          # d_alpha = (partial_y / partial_alpha) * dY
          # NOTE: ensure alpha is not close to 1
          # since there is an indetermination
          # batch_size, _ = dY.shape
  
          # shannon terms
          S = torch.where(Y > 0, Y * torch.log(Y), Y.new_zeros(1))
          # shannon entropy
          ent = S.sum(ctx.dim).unsqueeze(ctx.dim)
          Y_skewed = gppr / gppr.sum(ctx.dim).unsqueeze(ctx.dim)
  
          d_alpha = dY * (Y - Y_skewed) / ((ctx.alpha - 1) ** 2)
          d_alpha -= dY * (S - Y_skewed * ent) / (ctx.alpha - 1)
          d_alpha = d_alpha.sum(ctx.dim).unsqueeze(ctx.dim)
  
      return dX, d_alpha, None, None, None
  
imports: import torch
  import torch.nn
  from torch.autograd import Function
label_desc: Use image node_id 5 for calling the EntmaxBisectFunction obj's underlying member method code with example usage: obj.backward(cls, ctx, dY) and returns: dX,  d_alpha,  None,  None,  None