'Finds the neighbors within a given radius of a point or points.
Return the indices and distances of some points from the dataset
lying in a ball with size ``radius`` around the points of the query
array. Points lying on the boundary are included in the results.
The result points are *not* necessarily sorted by distance to their
query point.
LSH Forest being an approximate method, some true neighbors from the
indexed dataset might be missing from the results.
Parameters
X : array_like or sparse (CSR) matrix, shape (n_samples, n_features)
List of n_features-dimensional data points. Each row
corresponds to a single query.
radius : float
Limiting distance of neighbors to return.
(default is the value passed to the constructor).
return_distance : boolean, optional (default = False)
Returns the distances of neighbors if set to True.
Returns
dist : array, shape (n_samples,) of arrays
Each element is an array representing the cosine distances
to some points found within ``radius`` of the respective query.
Only present if ``return_distance=True``.
ind : array, shape (n_samples,) of arrays
Each element is an array of indices for neighbors within ``radius``
of the respective query.'

def radius_neighbors(self, X, radius=None, return_distance=True):

    if (not hasattr(self, 'hash_functions_')):
        raise ValueError('estimator    should    be    fitted.')
    if (radius is None):
        radius = self.radius
    X = check_array(X, accept_sparse='csr')
    (neighbors, distances) = ([], [])
    (bin_queries, max_depth) = self._query(X)
    for i in range(X.shape[0]):
        (neighs, dists) = self._get_radius_neighbors(X[[i]], max_depth[i], bin_queries[i], radius)
        neighbors.append(neighs)
        distances.append(dists)
    if return_distance:
        return (_array_of_arrays(distances), _array_of_arrays(neighbors))
    else:
        return _array_of_arrays(neighbors)
