def integrate(self, min, max, attr=None, info={}):
        """ Calculate the total number of points between [min, max).

            If attr is given, also calculate the sum of the weight.

            This is a M log(N) operation, where M is the number of min/max
            queries and N is number of points.

        """
        if numpy.isscalar(min):
            min = [min for i in range(self.ndims)]
        if numpy.isscalar(max):
            max = [max for i in range(self.ndims)]

        min = numpy.array(min, dtype='f8', order='C')
        max = numpy.array(max, dtype='f8', order='C')

        if (min).shape[-1] != self.ndims:
            raise ValueError("dimension of min does not match Node")
        if (max).shape[-1] != self.ndims:
            raise ValueError("dimension of max does not match Node")
        min, max = broadcast_arrays(min, max)
        return _core.KDNode.integrate(self, min, max, attr, info)
Calculate the total number of points between [min, max).

            If attr is given, also calculate the sum of the weight.

            This is a M log(N) operation, where M is the number of min/max
            queries and N is number of points.