class_docstr: Chebyshev Spectral Graph Convolution layer from `Convolutional Neural Networks on Graphs
  with Fast Localized Spectral Filtering <https://arxiv.org/pdf/1606.09375.pdf>`__
  
  We recommend to use this module when applying ChebConv on dense graphs.
  
  Parameters
  ----------
  in_feats: int
      Dimension of input features :math:`h_i^{(l)}`.
  out_feats: int
      Dimension of output features :math:`h_i^{(l+1)}`.
  k : int
      Chebyshev filter size.
  activation : function, optional
      Activation function, default is ReLu.
  bias : bool, optional
      If True, adds a learnable bias to the output. Default: ``True``.
  
  See also
  --------
  `ChebConv <https://docs.dgl.ai/api/python/nn.pytorch.html#chebconv>`__
docstr: Description
  -----------
  Compute (Dense) Chebyshev Spectral Graph Convolution layer.
  
  Parameters
  ----------
  adj : mxnet.NDArray
      The adjacency matrix of the graph to apply Graph Convolution on,
      should be of shape :math:`(N, N)`, where a row represents the destination
      and a column represents the source.
  feat : mxnet.NDArray
      The input feature of shape :math:`(N, D_{in})` where :math:`D_{in}`
      is size of input feature, :math:`N` is the number of nodes.
  lambda_max : float or None, optional
      A float value indicates the largest eigenvalue of given graph.
      Default: None.
  
  Returns
  -------
  mxnet.NDArray
      The output feature of shape :math:`(N, D_{out})` where :math:`D_{out}`
      is size of output feature.
docstr_tok: ["Description","--","--","--","--","--","-","Compute","(","Dense",")","Chebyshev","Spectral","Graph","Convolution","layer",".","Parameters","--","--","--","--","--","adj",":","mxnet.NDArray","The","adjacency","matrix","of","the","graph","to","apply","Graph","Convolution","on",",","should","be","of","shape",":","math",":","`","(","N",",","N",")","`",",","where","a","row","represents","the","destination","and","a","column","represents","the","source",".","feat",":","mxnet.NDArray","The","input","feature","of","shape",":","math",":","`","(","N",",","D_","{","in","}",")","`","where",":","math",":","`","D_","{","in","}","`","is","size","of","input","feature",",",":","math",":","`","N","`","is","the","number","of","nodes",".","lambda_max",":","float","or","None",",","optional","A","float","value","indicates","the","largest","eigenvalue","of","given","graph",".","Default",":","None",".","Returns","--","--","--","-","mxnet.NDArray","The","output","feature","of","shape",":","math",":","`","(","N",",","D_","{","out","}",")","`","where",":","math",":","`","D_","{","out","}","`","is","size","of","output","feature","."]
code: def forward(self, adj, feat, lambda_max=None):
      r"""
  
      Description
      -----------
      Compute (Dense) Chebyshev Spectral Graph Convolution layer.
  
      Parameters
      ----------
      adj : mxnet.NDArray
          The adjacency matrix of the graph to apply Graph Convolution on,
          should be of shape :math:`(N, N)`, where a row represents the destination
          and a column represents the source.
      feat : mxnet.NDArray
          The input feature of shape :math:`(N, D_{in})` where :math:`D_{in}`
          is size of input feature, :math:`N` is the number of nodes.
      lambda_max : float or None, optional
          A float value indicates the largest eigenvalue of given graph.
          Default: None.
  
      Returns
      -------
      mxnet.NDArray
          The output feature of shape :math:`(N, D_{out})` where :math:`D_{out}`
          is size of output feature.
      """
      A = adj.astype(feat.dtype).as_in_context(feat.context)
      num_nodes = A.shape[0]
  
      in_degree = 1.0 / nd.clip(A.sum(axis=1), 1, float("inf")).sqrt()
      D_invsqrt = nd.diag(in_degree)
      I = nd.eye(num_nodes, ctx=A.context)
      L = I - nd.dot(D_invsqrt, nd.dot(A, D_invsqrt))
  
      if lambda_max is None:
          # NOTE(zihao): this only works for directed graph.
          lambda_max = (nd.linalg.syevd(L)[1]).max()
  
      L_hat = 2 * L / lambda_max - I
      Z = [nd.eye(num_nodes, ctx=A.context)]
      Zh = self.fc[0](feat)
      for i in range(1, self._k):
          if i == 1:
              Z.append(L_hat)
          else:
              Z.append(2 * nd.dot(L_hat, Z[-1]) - Z[-2])
          Zh = Zh + nd.dot(Z[i], self.fc[i](feat))
  
      if self.bias is not None:
          Zh = Zh + self.bias.data(feat.context)
      return Zh
  
file_path: dgl/python/dgl/nn/mxnet/conv/densechebconv.py
imports: import math
  import mxnet
  from mxnet import nd
  from mxnet.gluon import nn
label_desc: Use image node_id 2 for calling the DenseChebConv obj's underlying member method code with example usage: obj.forward(adj, feat, lambda_max) and returns: Zh