(idtype)
| 2196 | |
| 2197 | @parametrize_idtype |
| 2198 | def test_remove_selfloop(idtype): |
| 2199 | # homogeneous graph |
| 2200 | g = dgl.graph(([0, 0, 0, 1], [1, 0, 0, 2]), idtype=idtype, device=F.ctx()) |
| 2201 | g.edata["he"] = F.copy_to(F.tensor([1, 2, 3, 4], dtype=idtype), ctx=F.ctx()) |
| 2202 | g = dgl.remove_self_loop(g) |
| 2203 | assert g.num_nodes() == 3 |
| 2204 | assert g.num_edges() == 2 |
| 2205 | assert F.array_equal(g.edata["he"], F.tensor([1, 4], dtype=idtype)) |
| 2206 | |
| 2207 | # bipartite graph |
| 2208 | g = dgl.heterograph( |
| 2209 | {("user", "plays", "game"): ([0, 1, 2], [1, 2, 2])}, |
| 2210 | idtype=idtype, |
| 2211 | device=F.ctx(), |
| 2212 | ) |
| 2213 | # nothing will happend |
| 2214 | raise_error = False |
| 2215 | try: |
| 2216 | g = dgl.remove_self_loop(g, etype="plays") |
| 2217 | except: |
| 2218 | raise_error = True |
| 2219 | assert raise_error |
| 2220 | |
| 2221 | g = create_test_heterograph4(idtype) |
| 2222 | g = dgl.remove_self_loop(g, etype="follows") |
| 2223 | assert g.num_nodes("user") == 3 |
| 2224 | assert g.num_nodes("game") == 2 |
| 2225 | assert g.num_edges("follows") == 2 |
| 2226 | assert g.num_edges("plays") == 2 |
| 2227 | u, v = g.edges(form="uv", order="eid", etype="follows") |
| 2228 | assert F.array_equal(u, F.tensor([1, 2], dtype=idtype)) |
| 2229 | assert F.array_equal(v, F.tensor([0, 1], dtype=idtype)) |
| 2230 | assert F.array_equal( |
| 2231 | g.edges["follows"].data["h"], F.tensor([2, 4], dtype=idtype) |
| 2232 | ) |
| 2233 | assert F.array_equal( |
| 2234 | g.edges["plays"].data["h"], F.tensor([1, 2], dtype=idtype) |
| 2235 | ) |
| 2236 | |
| 2237 | raise_error = False |
| 2238 | try: |
| 2239 | g = dgl.remove_self_loop(g, etype="plays") |
| 2240 | except: |
| 2241 | raise_error = True |
| 2242 | assert raise_error |
| 2243 | |
| 2244 | # batch information |
| 2245 | g = dgl.graph( |
| 2246 | ([0, 0, 0, 1, 3, 3, 4], [1, 0, 0, 2, 3, 4, 4]), |
| 2247 | idtype=idtype, |
| 2248 | device=F.ctx(), |
| 2249 | ) |
| 2250 | g.set_batch_num_nodes([3, 2]) |
| 2251 | g.set_batch_num_edges([4, 3]) |
| 2252 | g = dgl.remove_self_loop(g) |
| 2253 | assert g.num_nodes() == 5 |
| 2254 | assert g.num_edges() == 3 |
| 2255 | assert F.array_equal(g.batch_num_nodes(), F.tensor([3, 2], dtype=idtype)) |
nothing calls this directly
no test coverage detected