code: def test_graph_conv(out_dim):
      g = dgl.DGLGraph(nx.path_graph(3)).to(F.ctx())
      ctx = F.ctx()
      adj = tf.sparse.to_dense(
          tf.sparse.reorder(g.adj_external(transpose=True, ctx=ctx))
      )
  
      conv = nn.GraphConv(5, out_dim, norm="none", bias=True)
      # conv = conv
      print(conv)
      # test#1: basic
      h0 = F.ones((3, 5))
      h1 = conv(g, h0)
      assert len(g.ndata) == 0
      assert len(g.edata) == 0
      assert F.allclose(h1, _AXWb(adj, h0, conv.weight, conv.bias))
      # test#2: more-dim
      h0 = F.ones((3, 5, 5))
      h1 = conv(g, h0)
      assert len(g.ndata) == 0
      assert len(g.edata) == 0
      assert F.allclose(h1, _AXWb(adj, h0, conv.weight, conv.bias))
  
      conv = nn.GraphConv(5, out_dim)
      # conv = conv
      # test#3: basic
      h0 = F.ones((3, 5))
      h1 = conv(g, h0)
      assert len(g.ndata) == 0
      assert len(g.edata) == 0
      # test#4: basic
      h0 = F.ones((3, 5, 5))
      h1 = conv(g, h0)
      assert len(g.ndata) == 0
      assert len(g.edata) == 0
  
      conv = nn.GraphConv(5, out_dim)
      # conv = conv
      # test#3: basic
      h0 = F.ones((3, 5))
      h1 = conv(g, h0)
      assert len(g.ndata) == 0
      assert len(g.edata) == 0
      # test#4: basic
      h0 = F.ones((3, 5, 5))
      h1 = conv(g, h0)
      assert len(g.ndata) == 0
      assert len(g.edata) == 0
  
imports: from copy import deepcopy
  import backend
  import dgl
  import dgl.function
  import dgl.nn.tensorflow
  import networkx
  import numpy
  import pytest
  import scipy
  import tensorflow
  from tensorflow.keras import layers
  from utils import parametrize_idtype
  from utils.graph_cases import get_cases, random_bipartite, random_dglgraph, random_graph
label_desc: Use image node_id 2 for calling a global function with example usage: test_graph_conv(out_dim) without return types