LineGraph¶

class dgl.transforms.LineGraph(backtracking=True)[source]

Bases: dgl.transforms.module.BaseTransform

Return the line graph of the input graph.

The line graph $$L(G)$$ of a given graph $$G$$ is a graph where the nodes in $$L(G)$$ correspond to the edges in $$G$$. For a pair of edges $$(u, v)$$ and $$(v, w)$$ in $$G$$, there will be an edge from the node corresponding to $$(u, v)$$ to the node corresponding to $$(v, w)$$ in $$L(G)$$.

This module only works for homogeneous graphs.

Parameters

backtracking (bool, optional) – If False, there will be an edge from the line graph node corresponding to $$(u, v)$$ to the line graph node corresponding to $$(v, u)$$.

Example

The following example uses PyTorch backend.

>>> import dgl
>>> import torch
>>> from dgl import LineGraph


Case1: Backtracking is True

>>> transform = LineGraph()
>>> g = dgl.graph(([0, 1, 1], [1, 0, 2]))
>>> g.ndata['h'] = torch.tensor([[0.], [1.], [2.]])
>>> g.edata['w'] = torch.tensor([[0.], [0.1], [0.2]])
>>> new_g = transform(g)
>>> print(new_g)
Graph(num_nodes=3, num_edges=3,
ndata_schemes={'w': Scheme(shape=(1,), dtype=torch.float32)}
edata_schemes={})
>>> print(new_g.edges())
(tensor([0, 0, 1]), tensor([1, 2, 0]))


Case2: Backtracking is False

>>> transform = LineGraph(backtracking=False)
>>> new_g = transform(g)
>>> print(new_g.edges())
(tensor([0]), tensor([2]))