Source code for rnaglib.transforms.partition.connected_component
from typing import Iterator
import networkx as nx
from rnaglib.transforms import Transform, PartitionTransform
[docs]
class ConnectedComponentPartition(PartitionTransform):
"""Split up an RNA by connected components. Yields all nodes belonging to the same connected
component at a time.
"""
def forward(self, rna_dict: dict) -> Iterator[dict]:
g = rna_dict["rna"]
connected_components = nx.weakly_connected_components(g)
for i, c in enumerate(connected_components):
connected_component_subgraph = g.subgraph(c).copy()
try:
connected_component_subgraph.name = g.name + "_" + str(i)
except:
connected_component_subgraph.name = g.graph["pdbid"].lower() + "_" + str(i)
yield {"rna": connected_component_subgraph}