def nodeFeatures(g, types): #g = dgl.add_self_loop(g) #graph = dgl.DGLGraph.to_networkx(g) if (types == "simple"): return g.in_degrees() elif (types == "weight"): return dgl.khop_adj(g, 1) #g.ndata['w'] elif (types == "multifractal"): return multifractal.multifractal(g)
def test_khop_adj(): N = 20 feat = F.randn((N, 5)) g = dgl.DGLGraph(nx.erdos_renyi_graph(N, 0.3)) for k in range(3): adj = F.tensor(dgl.khop_adj(g, k)) # use original graph to do message passing for k times. g.ndata['h'] = feat for _ in range(k): g.update_all(fn.copy_u('h', 'm'), fn.sum('m', 'h')) h_0 = g.ndata.pop('h') # use k-hop adj to do message passing for one time. h_1 = F.matmul(adj, feat) assert F.allclose(h_0, h_1, rtol=1e-3, atol=1e-3)