"docs/git@developer.sourcefind.cn:OpenDAS/vision.git" did not exist on "5f0edb97b46e5bff71dc19dedef05c5396eeaea2"
Unverified Commit ccaa0bf2 authored by Rhett Ying's avatar Rhett Ying Committed by GitHub
Browse files

[Doc] refine docstring and examples for reorder_graph (#3770)

* [Doc] refine docstring and examples for reorder_graph

* refine docstring
parent 609a49a9
...@@ -2995,8 +2995,9 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src', ...@@ -2995,8 +2995,9 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src',
The homogeneous graph. The homogeneous graph.
node_permute_algo: str, optional node_permute_algo: str, optional
The permutation algorithm to re-order nodes. If given, the options are ``rcmk`` or The permutation algorithm to re-order nodes. If given, the options are ``rcmk`` or
``metis`` or ``custom``. ``rcmk`` is the default value. ``metis`` or ``custom``.
* ``None``: Keep the current node order.
* ``rcmk``: Use the `Reverse Cuthill–McKee <https://docs.scipy.org/doc/scipy/reference/ * ``rcmk``: Use the `Reverse Cuthill–McKee <https://docs.scipy.org/doc/scipy/reference/
generated/scipy.sparse.csgraph.reverse_cuthill_mckee.html# generated/scipy.sparse.csgraph.reverse_cuthill_mckee.html#
scipy-sparse-csgraph-reverse-cuthill-mckee>`__ from ``scipy`` to generate nodes scipy-sparse-csgraph-reverse-cuthill-mckee>`__ from ``scipy`` to generate nodes
...@@ -3009,8 +3010,8 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src', ...@@ -3009,8 +3010,8 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src',
* ``custom``: Reorder the graph according to the user-provided node permutation * ``custom``: Reorder the graph according to the user-provided node permutation
array (provided in :attr:`permute_config`). array (provided in :attr:`permute_config`).
edge_permute_algo: str, optional edge_permute_algo: str, optional
The permutation algorithm to reorder edges. Options are ``src`` or ``dst``. The permutation algorithm to reorder edges. Options are ``src`` or ``dst`` or
``src`` is the default value. ``custom``. ``src`` is the default value.
* ``src``: Edges are arranged according to their source nodes. * ``src``: Edges are arranged according to their source nodes.
* ``dst``: Edges are arranged according to their destination nodes. * ``dst``: Edges are arranged according to their destination nodes.
...@@ -3059,7 +3060,7 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src', ...@@ -3059,7 +3060,7 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src',
Reorder according to ``'rcmk'`` permute algorithm. Reorder according to ``'rcmk'`` permute algorithm.
>>> rg = dgl.reorder_graph(g) >>> rg = dgl.reorder_graph(g, node_permute_algo='rcmk')
>>> rg.ndata >>> rg.ndata
{'h': tensor([[8, 9], {'h': tensor([[8, 9],
[6, 7], [6, 7],
...@@ -3075,7 +3076,7 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src', ...@@ -3075,7 +3076,7 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src',
Reorder according to ``'metis'`` permute algorithm. Reorder according to ``'metis'`` permute algorithm.
>>> rg = dgl.reorder_graph(g, 'metis', permute_config={'k':2}) >>> rg = dgl.reorder_graph(g, node_permute_algo='metis', permute_config={'k':2})
>>> rg.ndata >>> rg.ndata
{'h': tensor([[4, 5], {'h': tensor([[4, 5],
[2, 3], [2, 3],
...@@ -3091,10 +3092,8 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src', ...@@ -3091,10 +3092,8 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src',
Reorder according to ``'custom'`` permute algorithm with user-provided nodes_perm. Reorder according to ``'custom'`` permute algorithm with user-provided nodes_perm.
>>> nodes_perm = torch.randperm(g.num_nodes()) >>> rg = dgl.reorder_graph(g, node_permute_algo='custom',
>>> nodes_perm ... permute_config={'nodes_perm': [3, 2, 0, 4, 1]})
tensor([3, 2, 0, 4, 1])
>>> rg = dgl.reorder_graph(g, 'custom', permute_config={'nodes_perm':nodes_perm})
>>> rg.ndata >>> rg.ndata
{'h': tensor([[6, 7], {'h': tensor([[6, 7],
[4, 5], [4, 5],
...@@ -3108,30 +3107,40 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src', ...@@ -3108,30 +3107,40 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src',
[4], [4],
[1]]), '_ID': tensor([3, 2, 0, 4, 1])} [1]]), '_ID': tensor([3, 2, 0, 4, 1])}
Reorder according to ``dst`` edge permute algorithm and refine further Reorder nodes according to ``'rcmk'`` and reorder edges according to ``dst``
according to self-generated edges permutation. Please assure to specify edge permute algorithm.
``relabel_nodes`` as ``False`` to keep the nodes order.
>>> rg = dgl.reorder_graph(g, edge_permute_algo='dst') >>> rg = dgl.reorder_graph(g, node_permute_algo='rcmk', edge_permute_algo='dst')
>>> rg.edges() >>> print(rg.ndata)
(tensor([0, 3, 1, 2, 4]), tensor([1, 1, 3, 3, 3])) {'h': tensor([[8, 9],
>>> eg = dgl.edge_subgraph(rg, [0, 2, 4, 1, 3], relabel_nodes=False) [6, 7],
>>> eg.edata [2, 3],
[4, 5],
[0, 1]]), '_ID': tensor([4, 3, 1, 2, 0])}
>>> print(rg.edata)
{'w': tensor([[4], {'w': tensor([[4],
[3],
[0],
[2], [2],
[1]]), '_ID': tensor([0, 2, 4, 1, 3])} [3],
[1],
[0]]), '_ID': tensor([4, 2, 3, 1, 0])}
Reorder according to node and edge types: Nodes are not reordered but edges are reordered according to ``'custom'`` permute
algorithm with user-provided edges_perm.
>>> ntype = ... # some node type array >>> rg = dgl.reorder_graph(g, edge_permute_algo='custom',
>>> etype = ... # some edge type array ... permute_config={'edges_perm': [1, 2, 3, 4, 0]})
>>> sorted_ntype, idx_nt = torch.sort(ntype) >>> print(rg.ndata)
>>> sorted_etype, idx_et = torch.sort(etype) {'h': tensor([[0, 1],
>>> rg = dgl.reorder_graph(g, node_permute_algo='custom', edge_permute_algo='custom', [2, 3],
... permute_config={'nodes_perm' : idx_nt.to(g.idtype), [4, 5],
... 'edges_perm' : idx_et.to(g.idtype)}) [6, 7],
[8, 9]]), '_ID': tensor([0, 1, 2, 3, 4])}
>>> print(rg.edata)
{'w': tensor([[1],
[2],
[3],
[4],
[0]]), '_ID': tensor([1, 2, 3, 4, 0])}
""" """
# sanity checks # sanity checks
if not g.is_homogeneous: if not g.is_homogeneous:
...@@ -3194,7 +3203,7 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src', ...@@ -3194,7 +3203,7 @@ def reorder_graph(g, node_permute_algo=None, edge_permute_algo='src',
# First revert the edge reorder caused by node reorder and then # First revert the edge reorder caused by node reorder and then
# apply user-provided edge permutation # apply user-provided edge permutation
rev_id = F.argsort(rg.edata['__orig__'], 0, False) rev_id = F.argsort(rg.edata['__orig__'], 0, False)
edges_perm = F.astype(F.gather_row(rev_id, edges_perm), rg.idtype) edges_perm = F.astype(F.gather_row(rev_id, F.tensor(edges_perm)), rg.idtype)
rg = subgraph.edge_subgraph( rg = subgraph.edge_subgraph(
rg, edges_perm, relabel_nodes=False, store_ids=False) rg, edges_perm, relabel_nodes=False, store_ids=False)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment