def search_knn(self, point, k, dist=None):
        """ Return the k nearest neighbors of point and their distances

        point must be an actual point, not a node.

        k is the number of results to return. The actual results can be less
        (if there aren't more nodes to return) or more in case of equal
        distances.

        dist is a distance function, expecting two points and returning a
        distance value. Distance values can be any comparable type.

        The result is an ordered list of (node, distance) tuples.
        """

        if k < 1:
            raise ValueError("k must be greater than 0.")

        if dist is None:
            get_dist = lambda n: n.dist(point)
        else:
            get_dist = lambda n: dist(n.data, point)

        results = []

        self._search_node(point, k, results, get_dist, itertools.count())

        # We sort the final result by the distance in the tuple
        # (<KdNode>, distance).
        return [(node, -d) for d, _, node in sorted(results, reverse=True)]
def search_knn ( self , point , k , dist = None ) : if k < 1 : raise ValueError ( "k must be greater than 0." ) if dist is None : get_dist = lambda n : n . dist ( point ) else : get_dist = lambda n : dist ( n . data , point ) results = [ ] self . _search_node ( point , k , results , get_dist , itertools . count ( ) ) return [ ( node , - d ) for d , _ , node in sorted ( results , reverse = True ) ]
Return the k nearest neighbors of point and their distances

        point must be an actual point, not a node.

        k is the number of results to return. The actual results can be less
        (if there aren't more nodes to return) or more in case of equal
        distances.

        dist is a distance function, expecting two points and returning a
        distance value. Distance values can be any comparable type.

        The result is an ordered list of (node, distance) tuples.