def _edge_softmax_backward(gidx, out, sds):
    r"""Edge_softmax backward interface.

    Parameters
    ----------
    gidx : HeteroGraphIndex
        The input graph index.
    out : tensor
        The result of Edge_softmax during forward.
    sds : tensor
        The result of out * gradient.

    Returns
    -------
    The result of Edge_softmax during backward

    Notes
    -----
    This function does not support gpu op.
    """
    op = "copy_rhs"
    back_out = F.zeros_like(out)
    _CAPI_DGLKernelEdge_softmax_backward(
        gidx,
        op,
        to_dgl_nd(out),
        to_dgl_nd(sds),
        to_dgl_nd_for_write(back_out),
        to_dgl_nd(None),
    )
    return back_out
Edge_softmax backward interface.

    Parameters
    ----------
    gidx : HeteroGraphIndex
        The input graph index.
    out : tensor
        The result of Edge_softmax during forward.
    sds : tensor
        The result of out * gradient.

    Returns
    -------
    The result of Edge_softmax during backward

    Notes
    -----
    This function does not support gpu op.
    
python/dgl/_sparse_ops.py