code: def test_dense_sage_conv(idtype, g, out_dim):
      g = g.astype(idtype).to(F.ctx())
      ctx = F.ctx()
      adj = g.adj_external(transpose=True, ctx=ctx).tostype("default")
      sage = nn.SAGEConv(5, out_dim, "gcn")
      dense_sage = nn.DenseSAGEConv(5, out_dim)
      sage.initialize(ctx=ctx)
      dense_sage.initialize(ctx=ctx)
      dense_sage.fc.weight.set_data(sage.fc_neigh.weight.data())
      dense_sage.fc.bias.set_data(sage.fc_neigh.bias.data())
      if len(g.ntypes) == 2:
          feat = (
              F.randn((g.number_of_src_nodes(), 5)),
              F.randn((g.number_of_dst_nodes(), 5)),
          )
      else:
          feat = F.randn((g.num_nodes(), 5))
  
      out_sage = sage(g, feat)
      out_dense_sage = dense_sage(adj, feat)
      assert F.allclose(out_sage, out_dense_sage)
  
imports: import backend
  import dgl
  import dgl.function
  import dgl.nn.mxnet
  import mxnet
  import networkx
  import numpy
  import pytest
  import scipy
  from mxnet import autograd, gluon, nd
  from utils import parametrize_idtype
  from utils.graph_cases import get_cases, random_bipartite, random_dglgraph, random_graph
label_desc: Use image node_id 20 for calling a global function with example usage: test_dense_sage_conv(idtype, g, out_dim) without return types