@@ -58,7 +58,7 @@ def hierarchical_leiden(
5858 graph : nx .Graph ,
5959 max_cluster_size : int = 10 ,
6060 random_seed : int | None = 0xDEADBEEF ,
61- ) -> Any :
61+ ) -> list [ gn . HierarchicalCluster ] :
6262 """Run hierarchical leiden on the graph."""
6363 return gn .hierarchical_leiden (
6464 edges = _nx_to_edge_list (graph ),
@@ -140,7 +140,7 @@ def calculate_root_modularity(
140140 hcs = hierarchical_leiden (
141141 graph , max_cluster_size = max_cluster_size , random_seed = random_seed
142142 )
143- root_clusters = hcs . first_level_hierarchical_clustering ()
143+ root_clusters = first_level_hierarchical_clustering (hcs )
144144 return modularity (graph , root_clusters )
145145
146146
@@ -153,7 +153,7 @@ def calculate_leaf_modularity(
153153 hcs = hierarchical_leiden (
154154 graph , max_cluster_size = max_cluster_size , random_seed = random_seed
155155 )
156- leaf_clusters = hcs . final_level_hierarchical_clustering ()
156+ leaf_clusters = final_level_hierarchical_clustering (hcs )
157157 return modularity (graph , leaf_clusters )
158158
159159
@@ -351,3 +351,32 @@ def get_upper_threshold_by_std(data: list[float] | list[int], std_trim: float) -
351351 mean = np .mean (data )
352352 std = np .std (data )
353353 return cast ("float" , mean + std_trim * std )
354+
355+
356+ def first_level_hierarchical_clustering (
357+ hcs : list [gn .HierarchicalCluster ],
358+ ) -> dict [Any , int ]:
359+ """first_level_hierarchical_clustering.
360+
361+ Returns
362+ -------
363+ dict[Any, int]
364+ The initial leiden algorithm clustering results as a dictionary
365+ of node id to community id.
366+ """
367+ return {entry .node : entry .cluster for entry in hcs if entry .level == 0 }
368+
369+
370+ def final_level_hierarchical_clustering (
371+ hcs : list [gn .HierarchicalCluster ],
372+ ) -> dict [Any , int ]:
373+ """
374+ final_level_hierarchical_clustering.
375+
376+ Returns
377+ -------
378+ dict[Any, int]
379+ The last leiden algorithm clustering results as a dictionary
380+ of node id to community id.
381+ """
382+ return {entry .node : entry .cluster for entry in hcs if entry .is_final_cluster }
0 commit comments