Connectivity diagnostics

Connectivity helpers inspect components and help remove disconnected fragments before routing.

# To install IduEdu in a clean environment:
# !pip install IduEdu

OSM_ID = 1114252
from iduedu import get_drive_graph, get_walk_graph

G_walk_all = get_walk_graph(osm_id=OSM_ID, simplify=True, keep_largest_subgraph=False)
G_drive_all = get_drive_graph(osm_id=OSM_ID, simplify=True, keep_largest_subgraph=False)

Undirected connected components

Use connected_components for undirected graphs such as walking networks.

from iduedu import connected_components, largest_connected_component, number_connected_components

components = connected_components(G_walk_all)
print("component count:", number_connected_components(G_walk_all))
print("largest component size:", len(largest_connected_component(G_walk_all)))
print("top component sizes:", [len(component) for component in components[:5]])
component count: 110
largest component size: 19588
top component sizes: [19588, 63, 18, 7, 6]

Directed graph connectivity

For directed graphs, weak components ignore edge direction and strong components require reachability in both directions.

from iduedu import (
    largest_component,
    largest_strongly_connected_component,
    largest_weakly_connected_component,
    number_strongly_connected_components,
    number_weakly_connected_components,
)

print("weak components:", number_weakly_connected_components(G_drive_all))
print("strong components:", number_strongly_connected_components(G_drive_all))
print("largest weak:", len(largest_weakly_connected_component(G_drive_all)))
print("largest strong:", len(largest_strongly_connected_component(G_drive_all)))
print("largest auto:", len(largest_component(G_drive_all)))
weak components: 1
strong components: 39
largest weak: 745
largest strong: 707
largest auto: 707

Keep the largest component

Builders can do this automatically with keep_largest_subgraph=True. The same operation is available as a method.

G_drive_main = G_drive_all.keep_largest_connected_component(mode="auto")

print("before:", len(G_drive_all.nodes_gdf), "nodes,", len(G_drive_all.edges_gdf), "edges")
print("after :", len(G_drive_main.nodes_gdf), "nodes,", len(G_drive_main.edges_gdf), "edges")
2026-07-07 15:17:36.416 | WARNING  | Removing 38 nodes outside the largest strongly connected component. Retaining 707 of 745 nodes.
before: 745 nodes, 1243 edges
after : 707 nodes, 1188 edges