docstr: Forward function.
  
  Pseudo-code:
  
  .. code:: python
  
      score = dgl.EData(g, score)
      score_max = score.dst_max()  # of type dgl.NData
      score = score - score_max  # edge_sub_dst, ret dgl.EData
      score_sum = score.dst_sum()  # of type dgl.NData
      out = score / score_sum    # edge_div_dst, ret dgl.EData
      return out.data
code: def forward(self, score):
      """Forward function.
  
      Pseudo-code:
  
      .. code:: python
  
          score = dgl.EData(g, score)
          score_max = score.dst_max()  # of type dgl.NData
          score = score - score_max  # edge_sub_dst, ret dgl.EData
          score_sum = score.dst_sum()  # of type dgl.NData
          out = score / score_sum    # edge_div_dst, ret dgl.EData
          return out.data
      """
      gidx = self.gidx
      score_max = _gspmm(gidx, "copy_rhs", "max", None, score)[0]
      score = mx.nd.exp(
          _gsddmm(gidx, "sub", score, score_max, "e", "v")
      )
      score_sum = _gspmm(gidx, "copy_rhs", "sum", None, score)[0]
      out = _gsddmm(gidx, "div", score, score_sum, "e", "v")
      self.save_for_backward(out)
      return out
  
imports: import mxnet
  import numpy
  from mxnet import nd
  from ..._sparse_ops import _bwd_segment_cmp, _csrmask, _csrmm, _csrsum, _gsddmm, _gspmm, _scatter_add, _segment_reduce
  from ...base import ALL, dgl_warning, is_all
  from ...heterograph_index import create_unitgraph_from_csr
  from .tensor import asnumpy, context, copy_to, to_backend_ctx, zerocopy_from_numpy
label_desc: Use image node_id 2 for calling the EdgeSoftmax obj's underlying member method code with example usage: obj.forward(score) and returns: out