(idtype)
| 198 | # reverse graph related |
| 199 | @parametrize_idtype |
| 200 | def 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 |
nothing calls this directly
no test coverage detected