code: def components(self):
      
      skel, forest = self._compute_components()
  
      if len(forest) == 0:
        return []
      elif len(forest) == 1:
        return [ skel ]
  
      orig_verts = { tuple(coord): i for i, coord in enumerate(skel.vertices) }      
  
      skeletons = []
      for edge_list in forest:
        edge_list = np.array(edge_list, dtype=np.uint32)
        edge_list = np.unique(edge_list, axis=0)
        vert_idx = np.unique(edge_list.flatten())
        vert_list = skel.vertices[vert_idx]
        radii = skel.radii[vert_idx]
        vtypes = skel.vertex_types[vert_idx]
  
        new_verts = { orig_verts[tuple(coord)]: i for i, coord in enumerate(vert_list) }
  
        edge_vector_map = np.vectorize(lambda x: new_verts[x])
        edge_list = edge_vector_map(edge_list)
  
        skeletons.append(
          PrecomputedSkeleton(vert_list, edge_list, radii, vtypes, skel.id)
        )
  
      return skeletons
docs: Extract connected components from graph. 
      Useful for ensuring that you're working with a single tree.
  
      Returns: [ PrecomputedSkeleton, PrecomputedSkeleton, ... ]