def _distances_from_bounds(bounds, total_bounds, p): n = bounds.shape[1] // 2 dim_ranges = [(total_bounds[d], total_bounds[d + n]) for d in range(n)] # Avoid degenerate case where there is a single unique rectangle that is a # single point. Increase the range by 1.0 to prevent divide by zero error for d in range(n): if dim_ranges[d][0] == dim_ranges[d][1]: dim_ranges[d] = (dim_ranges[d][0], dim_ranges[d][1] + 1) # Compute hilbert distance of the middle of each bounding box dim_mids = [(bounds[:, d] + bounds[:, d + n]) / 2.0 for d in range(n)] side_length = 2**p coords = np.zeros((bounds.shape[0], n), dtype=np.int64) for d in range(n): coords[:, d] = _data2coord(dim_mids[d], dim_ranges[d], side_length) hilbert_distances = distances_from_coordinates(p, coords) return hilbert_distances
def test_distance_from_coordinates(p, n): side_len = 2**p # build matrix of all possible coordinate coords = np.array(list(product(range(side_len), repeat=n))) # Compute distances as vector result vector_result = distances_from_coordinates(p, coords) # Compare with reference reference_hc = HilbertCurve(p, n) for i in range(coords.shape[0]): coord = coords[i, :] # Reference expected = reference_hc.distance_from_coordinates(coord) # Compute scalar distance and compare scalar_result = distance_from_coordinate(p, coord) assert scalar_result == expected # Compare with vector distance compute above assert vector_result[i] == expected