| 2730 | |
| 2731 | @parametrize_idtype |
| 2732 | def test_clone(idtype): |
| 2733 | g = dgl.graph(([0, 1], [1, 2]), idtype=idtype, device=F.ctx()) |
| 2734 | g.ndata["h"] = F.copy_to(F.tensor([1, 1, 1], dtype=idtype), ctx=F.ctx()) |
| 2735 | g.edata["h"] = F.copy_to(F.tensor([1, 1], dtype=idtype), ctx=F.ctx()) |
| 2736 | |
| 2737 | new_g = g.clone() |
| 2738 | assert g.num_nodes() == new_g.num_nodes() |
| 2739 | assert g.num_edges() == new_g.num_edges() |
| 2740 | assert g.device == new_g.device |
| 2741 | assert g.idtype == new_g.idtype |
| 2742 | assert F.array_equal(g.ndata["h"], new_g.ndata["h"]) |
| 2743 | assert F.array_equal(g.edata["h"], new_g.edata["h"]) |
| 2744 | # data change |
| 2745 | new_g.ndata["h"] = F.copy_to(F.tensor([2, 2, 2], dtype=idtype), ctx=F.ctx()) |
| 2746 | assert F.array_equal(g.ndata["h"], new_g.ndata["h"]) == False |
| 2747 | g.edata["h"] = F.copy_to(F.tensor([2, 2], dtype=idtype), ctx=F.ctx()) |
| 2748 | assert F.array_equal(g.edata["h"], new_g.edata["h"]) == False |
| 2749 | # graph structure change |
| 2750 | g.add_nodes(1) |
| 2751 | assert g.num_nodes() != new_g.num_nodes() |
| 2752 | new_g.add_edges(1, 1) |
| 2753 | assert g.num_edges() != new_g.num_edges() |
| 2754 | |
| 2755 | # zero data graph |
| 2756 | g = dgl.graph(([], []), num_nodes=0, idtype=idtype, device=F.ctx()) |
| 2757 | new_g = g.clone() |
| 2758 | assert g.num_nodes() == new_g.num_nodes() |
| 2759 | assert g.num_edges() == new_g.num_edges() |
| 2760 | |
| 2761 | # heterograph |
| 2762 | g = create_test_heterograph3(idtype) |
| 2763 | g.edges["plays"].data["h"] = F.copy_to( |
| 2764 | F.tensor([1, 2, 3, 4], dtype=idtype), ctx=F.ctx() |
| 2765 | ) |
| 2766 | new_g = g.clone() |
| 2767 | assert g.num_nodes("user") == new_g.num_nodes("user") |
| 2768 | assert g.num_nodes("game") == new_g.num_nodes("game") |
| 2769 | assert g.num_nodes("developer") == new_g.num_nodes("developer") |
| 2770 | assert g.num_edges("plays") == new_g.num_edges("plays") |
| 2771 | assert g.num_edges("develops") == new_g.num_edges("develops") |
| 2772 | assert F.array_equal( |
| 2773 | g.nodes["user"].data["h"], new_g.nodes["user"].data["h"] |
| 2774 | ) |
| 2775 | assert F.array_equal( |
| 2776 | g.nodes["game"].data["h"], new_g.nodes["game"].data["h"] |
| 2777 | ) |
| 2778 | assert F.array_equal( |
| 2779 | g.edges["plays"].data["h"], new_g.edges["plays"].data["h"] |
| 2780 | ) |
| 2781 | assert g.device == new_g.device |
| 2782 | assert g.idtype == new_g.idtype |
| 2783 | u, v = g.edges(form="uv", order="eid", etype="plays") |
| 2784 | nu, nv = new_g.edges(form="uv", order="eid", etype="plays") |
| 2785 | assert F.array_equal(u, nu) |
| 2786 | assert F.array_equal(v, nv) |
| 2787 | # graph structure change |
| 2788 | u = F.tensor([0, 4], dtype=idtype) |
| 2789 | v = F.tensor([2, 6], dtype=idtype) |