def METHOD_NAME(grad_inputs, inputs, input_shapes, outputs, output_shapes, dim=0, itr=1, eps=1e-12, test=False, output_u=False):
    """
    Args:
      grad_inputs (list of :obj:`nnabla.Variable`): Propagated grads to this backward function.
      inputs (list of :obj:`nnabla.Variable` and None): Input Variables of the forward function
          if this backward function depends on it. Otherwise, None is set instead.
      input_shapes (list of tuple of :obj:`int`): Input shapes of the forward function.
          The shapes of the inputs in which None is set can be passed.
      outputs (list of :obj:`nnabla.Variable` and None): Output Variables of the forward function
          if this backward function depends on it. Otherwise, None is set instead.
      output_shapes (list of tuple of :obj:`int`): Output shapes of the forward function.
          The shapes of the outputs in which None is set can be passed.
      kwargs (dict of arguments): Dictionary of the corresponding function arguments.
    Return:
      list of Variable: Return the gradients wrt inputs of the corresponding function.
    """
    if not output_u:
        # We need to get original `u` from output for gradient calculation.
        raise ValueError(
            "spectral_norm_backward is supported for output_u=True.")
    dw_sn = grad_inputs[0]
    w = inputs[0]
    u = outputs[1]
    if dim == w.ndim - 1:
        return _spectral_norm_outer_most_dim_backward(dw_sn, w, u, itr, eps)
    else:
        return _spectral_norm_backward(dw_sn, w, u, dim, itr, eps)