Generate edge_index for bipartite graph connecting nodes of a second-order graph to first-order nodes.
Source code in src/pathpyG/utils/dbgnn.py
| def generate_bipartite_edge_index(
g: Graph, g2: Graph, mapping: str = "last", device: Optional[torch.device] = None
) -> torch.Tensor:
"""Generate edge_index for bipartite graph connecting nodes of a second-order graph to first-order nodes."""
if mapping == "last":
bipartide_edge_index = torch.tensor([list(range(g2.n)), [v[1] for v in g2.data.node_sequence]], device=device)
elif mapping == "first":
bipartide_edge_index = torch.tensor([list(range(g2.n)), [v[0] for v in g2.data.node_sequence]], device=device)
else:
bipartide_edge_index = torch.tensor(
[
list(range(g2.n)) + list(range(g2.n)),
[v[0] for v in g2.data.node_sequence] + [v[1] for v in g2.data.node_sequence],
],
device=device,
)
return bipartide_edge_index
|