code: def backward(ctx, output_grads):
      (
          use_mask_t,
          heads_t,
          softmax_results,
          dropout_mask,
          pad_mask,
          mask_additive_t,
          dropout_prob_t,
      ) = ctx.saved_tensors
  
      if mask_additive_t[0]:
          input_grads = fast_multihead_attn.additive_mask_softmax_dropout_backward(
              use_mask_t[0],
              heads_t[0],
              output_grads,
              softmax_results,
              dropout_mask,
              dropout_prob_t[0],
          )
          # fast_additive_mask_softmax_dropout.backward(                          \
      else:
          input_grads = (
              fast_multihead_attn.mask_softmax_dropout_backward(
                  use_mask_t[0],
                  heads_t[0],
                  output_grads,
                  softmax_results,
                  dropout_mask,
                  pad_mask,
                  dropout_prob_t[0],
              )
          )
          # fast_mask_softmax_dropout.backward(                          \
      return None, None, input_grads, None, None, None
  
imports: import torch
  import fast_multihead_attn
label_desc: Use image node_id 2 for calling the MaskSoftmaxDropout obj's underlying member method code with example usage: obj.backward(ctx, output_grads) and returns: None,  None,  input_grads,  None,  None,  None