class SimpleTree: def __init__(self, dim): self._parents_map = {} self._kd = KDTree(dim) def __len__(self): return len(self._kd) def insert_new_node(self, point, parent=None): node_id = self._kd.insert(point) self._parents_map[node_id] = parent return node_id def get_parent(self, child_id): return self._parents_map[child_id] def get_point(self, node_id): return self._kd.get_node(node_id).point def get_nearest_node(self, point): return self._kd.find_nearest_point(point) def construct_path_to_root(self, leaf_node_id): path = [] node_id = leaf_node_id while node_id is not None: path.append(self.get_point(node_id)) node_id = self.get_parent(node_id) return path def get_num_nodes(self): return len(self._parents_map)
class SimpleGraph: def __init__(self, dim, capacity=100000): self._edges = collections.defaultdict(list) self._kd = KDTree(dim, capacity) self.start_id = None self.target_id = None def __len__(self): return len(self._kd) def insert_new_node(self, point): node_id = self._kd.insert(point) return node_id def add_edge(self, node_id, neighbor_id): self._edges[node_id].append(neighbor_id) self._edges[neighbor_id].append(node_id) def get_parent(self, child_id): return self._edges[child_id] def get_point(self, node_id): return self._kd.get_node(node_id).point def get_nearest_node(self, point): return self._kd.find_nearest_point(point) def get_neighbor_within_radius(self, point, radius): """ Return a list of node_id within the radius """ return self._kd.find_points_within_radius(point, radius)
class SimpleTree: def __init__(self, dim): self._parents_map = {} self._kd = KDTree(dim) def insert_new_node(self, point, parent=None): node_id = self._kd.insert(point) self._parents_map[node_id] = parent return node_id def get_parent(self, child_id): return self._parents_map[child_id] def get_point(self, node_id): return self._kd.get_node(node_id).point def get_nearest_node(self, point): return self._kd.find_nearest_point(point)