@staticmethod
def backward(ctx, grad_output):
    (x, y) = ctx.saved_tensors
    return (unbroadcast((y * grad_output), x.shape), unbroadcast((x * grad_output), y.shape))
@staticmethod
def backward(ctx, grad_output):
    (x, y) = ctx.saved_tensors
    return (unbroadcast((y * grad_output), x.shape), unbroadcast((x * grad_output), y.shape))