MCPcopy
hub / github.com/dmlc/dgl / test_reverse

Function test_reverse

tests/python/common/transforms/test_transform.py:200–358  ·  view source on GitHub ↗
(idtype)

Source from the content-addressed store, hash-verified

198# reverse graph related
199@parametrize_idtype
200def test_reverse(idtype):
201 g = dgl.graph([])
202 g = g.astype(idtype).to(F.ctx())
203 g.add_nodes(5)
204 # The graph need not to be completely connected.
205 g.add_edges([0, 1, 2], [1, 2, 1])
206 g.ndata["h"] = F.tensor([[0.0], [1.0], [2.0], [3.0], [4.0]])
207 g.edata["h"] = F.tensor([[5.0], [6.0], [7.0]])
208 rg = g.reverse()
209
210 assert g.is_multigraph == rg.is_multigraph
211
212 assert g.num_nodes() == rg.num_nodes()
213 assert g.num_edges() == rg.num_edges()
214 assert F.allclose(
215 F.astype(rg.has_edges_between([1, 2, 1], [0, 1, 2]), F.float32),
216 F.ones((3,)),
217 )
218 assert g.edge_ids(0, 1) == rg.edge_ids(1, 0)
219 assert g.edge_ids(1, 2) == rg.edge_ids(2, 1)
220 assert g.edge_ids(2, 1) == rg.edge_ids(1, 2)
221
222 # test dgl.reverse
223 # test homogeneous graph
224 g = dgl.graph((F.tensor([0, 1, 2]), F.tensor([1, 2, 0])))
225 g.ndata["h"] = F.tensor([[0.0], [1.0], [2.0]])
226 g.edata["h"] = F.tensor([[3.0], [4.0], [5.0]])
227 g_r = dgl.reverse(g)
228 assert g.num_nodes() == g_r.num_nodes()
229 assert g.num_edges() == g_r.num_edges()
230 u_g, v_g, eids_g = g.all_edges(form="all")
231 u_rg, v_rg, eids_rg = g_r.all_edges(form="all")
232 assert F.array_equal(u_g, v_rg)
233 assert F.array_equal(v_g, u_rg)
234 assert F.array_equal(eids_g, eids_rg)
235 assert F.array_equal(g.ndata["h"], g_r.ndata["h"])
236 assert len(g_r.edata) == 0
237
238 # without share ndata
239 g_r = dgl.reverse(g, copy_ndata=False)
240 assert g.num_nodes() == g_r.num_nodes()
241 assert g.num_edges() == g_r.num_edges()
242 assert len(g_r.ndata) == 0
243 assert len(g_r.edata) == 0
244
245 # with share ndata and edata
246 g_r = dgl.reverse(g, copy_ndata=True, copy_edata=True)
247 assert g.num_nodes() == g_r.num_nodes()
248 assert g.num_edges() == g_r.num_edges()
249 assert F.array_equal(g.ndata["h"], g_r.ndata["h"])
250 assert F.array_equal(g.edata["h"], g_r.edata["h"])
251
252 # add new node feature to g_r
253 g_r.ndata["hh"] = F.tensor([0, 1, 2])
254 assert ("hh" in g.ndata) is False
255 assert ("hh" in g_r.ndata) is True
256
257 # add new edge feature to g_r

Callers

nothing calls this directly

Calls 12

reverseMethod · 0.80
all_edgesMethod · 0.80
graphMethod · 0.45
toMethod · 0.45
astypeMethod · 0.45
ctxMethod · 0.45
add_nodesMethod · 0.45
add_edgesMethod · 0.45
num_nodesMethod · 0.45
num_edgesMethod · 0.45
has_edges_betweenMethod · 0.45
edge_idsMethod · 0.45

Tested by

no test coverage detected