docs: def cluster_nodes(self, tol=0.2):
          """
          Cluster nodes that are too close together using a tol.
  
          Args:
              tol (float): A distance tolerance. PBC is taken into account.
          """
          lattice = self.structure.lattice
  
          vfcoords = [v.frac_coords for v in self.vnodes]
  
          # Manually generate the distance matrix (which needs to take into
          # account PBC.
          dist_matrix = np.array(lattice.get_all_distances(vfcoords, vfcoords))
          dist_matrix = (dist_matrix + dist_matrix.T) / 2
          for i in range(len(dist_matrix)):
              dist_matrix[i, i] = 0
          condensed_m = squareform(dist_matrix)
          z = linkage(condensed_m)
          cn = fcluster(z, tol, criterion="distance")
          merged_vnodes = []
          for n in set(cn):
              poly_indices = set()
              frac_coords = []
              for i, j in enumerate(np.where(cn == n)[0]):
                  poly_indices.update(self.vnodes[j].polyhedron_indices)
                  if i == 0:
                      frac_coords.append(self.vnodes[j].frac_coords)
                  else:
                      fcoords = self.vnodes[j].frac_coords
                      # We need the image to combine the frac_coords properly.
                      d, image = lattice.get_distance_and_image(frac_coords[0],
                                                                fcoords)
                      frac_coords.append(fcoords + image)
              merged_vnodes.append(
                  VoronoiPolyhedron(lattice, np.average(frac_coords, axis=0),
                                    poly_indices, self.coords))
          self.vnodes = merged_vnodes
          logger.debug("%d vertices after combination." % len(self.vnodes))