| 418 | |
| 419 | |
| 420 | def test_add_reverse_edges(): |
| 421 | # homogeneous graph |
| 422 | g = dgl.graph((F.tensor([0, 1, 3, 1]), F.tensor([1, 2, 0, 2]))) |
| 423 | g.ndata["h"] = F.tensor([[0.0], [1.0], [2.0], [1.0]]) |
| 424 | g.edata["h"] = F.tensor([[3.0], [4.0], [5.0], [6.0]]) |
| 425 | bg = dgl.add_reverse_edges(g, copy_ndata=True, copy_edata=True) |
| 426 | u, v = g.edges() |
| 427 | ub, vb = bg.edges() |
| 428 | assert F.array_equal(F.cat([u, v], dim=0), ub) |
| 429 | assert F.array_equal(F.cat([v, u], dim=0), vb) |
| 430 | assert F.array_equal(g.ndata["h"], bg.ndata["h"]) |
| 431 | assert F.array_equal( |
| 432 | F.cat([g.edata["h"], g.edata["h"]], dim=0), bg.edata["h"] |
| 433 | ) |
| 434 | bg.ndata["hh"] = F.tensor([[0.0], [1.0], [2.0], [1.0]]) |
| 435 | assert ("hh" in g.ndata) is False |
| 436 | bg.edata["hh"] = F.tensor( |
| 437 | [[0.0], [1.0], [2.0], [1.0], [0.0], [1.0], [2.0], [1.0]] |
| 438 | ) |
| 439 | assert ("hh" in g.edata) is False |
| 440 | |
| 441 | # donot share ndata and edata |
| 442 | bg = dgl.add_reverse_edges(g, copy_ndata=False, copy_edata=False) |
| 443 | ub, vb = bg.edges() |
| 444 | assert F.array_equal(F.cat([u, v], dim=0), ub) |
| 445 | assert F.array_equal(F.cat([v, u], dim=0), vb) |
| 446 | assert ("h" in bg.ndata) is False |
| 447 | assert ("h" in bg.edata) is False |
| 448 | |
| 449 | # zero edge graph |
| 450 | g = dgl.graph(([], [])) |
| 451 | bg = dgl.add_reverse_edges( |
| 452 | g, copy_ndata=True, copy_edata=True, exclude_self=False |
| 453 | ) |
| 454 | |
| 455 | # heterogeneous graph |
| 456 | g = dgl.heterograph( |
| 457 | { |
| 458 | ("user", "wins", "user"): ( |
| 459 | F.tensor([0, 2, 0, 2, 2]), |
| 460 | F.tensor([1, 1, 2, 1, 0]), |
| 461 | ), |
| 462 | ("user", "plays", "game"): ( |
| 463 | F.tensor([1, 2, 1]), |
| 464 | F.tensor([2, 1, 1]), |
| 465 | ), |
| 466 | ("user", "follows", "user"): ( |
| 467 | F.tensor([1, 2, 1]), |
| 468 | F.tensor([0, 0, 0]), |
| 469 | ), |
| 470 | } |
| 471 | ) |
| 472 | g.nodes["game"].data["hv"] = F.ones((3, 1)) |
| 473 | g.nodes["user"].data["hv"] = F.ones((3, 1)) |
| 474 | g.edges["wins"].data["h"] = F.tensor([0, 1, 2, 3, 4]) |
| 475 | bg = dgl.add_reverse_edges( |
| 476 | g, copy_ndata=True, copy_edata=True, ignore_bipartite=True |
| 477 | ) |