@@ -58,6 +58,8 @@ def _generate_segments(
5858) -> Union [list , Tuple [list , list ]]:
5959 """Generate segments maximizing segment lengths.
6060
61+ Isolated nodes will be included as segments of length 0.
62+
6163 Parameters
6264 ----------
6365 x : TreeNeuron | NeuronList
@@ -108,6 +110,7 @@ def _generate_segments(
108110 x .nodes .node_id .values , x .nodes .parent_id .values , weights = weight
109111 )
110112
113+ # Find leaf nodes and sort by distance to root
111114 d = dist_to_root (x , igraph_indices = False , weight = weight )
112115 endNodeIDs = x .nodes [x .nodes .type == "end" ].node_id .values
113116 endNodeIDs = sorted (endNodeIDs , key = lambda x : d .get (x , 0 ), reverse = True )
@@ -147,8 +150,17 @@ def _generate_segments(
147150 lengths = [d [s [0 ]] - d [s [- 1 ]] for s in sequences ]
148151 sequences = [x for _ , x in sorted (zip (lengths , sequences ), reverse = True )]
149152
153+ # Turn into list of arrays
154+ sequences = [np .array (s ) for s in sequences ]
155+
156+ # Isolated nodes would not be included in the sequences(because they are treated
157+ # as roots, not leafs. Let's add them manually here.
158+ for node in nx .isolates (x .graph ):
159+ sequences .append (np .array ([node ]))
160+ lengths .append (0 )
161+
150162 if return_lengths :
151- return sequences , sorted (lengths , reverse = True )
163+ return sequences , np . array ( sorted (lengths , reverse = True ) )
152164 else :
153165 return sequences
154166
0 commit comments