Exemple #1
0
    def test_kdebase(self):
        data = np.array([[0, 2]])
        tree = KDTree(data, leafsize=2)

        query = np.array([[0, 2]])
        tree_query = KDTree(query, leafsize=2)
        result = tree.kdebase(tree.root, tree_query.root, tree_query, 1)
        self.assertEqual([0.1592], round(result[0], 4))
Exemple #2
0
 def test_traverse_add(self):
     data = np.array([[0, 2], [0, 3], [0, 4]])
     tree = KDTree(data, leafsize=1)
     lower = np.zeros(3)
     upper = np.zeros(3)
     l = 0.1
     u = 0.2
     tree.traverse_add(tree.root, lower, upper, l, u)
     self.assertSequenceEqual(list([0.1, 0.1, 0.1]), list(lower))
     self.assertSequenceEqual(list([0.2, 0.2, 0.2]), list(upper))
Exemple #3
0
 def test_LeafNode(self):
     data = np.array([[0, 2]])
     tree = KDTree(data, leafsize=2)
     # Test if the node is recognized as leaf by the build function.
     self.assertEqual(0, tree.root.idx)
     self.assertSequenceEqual(list([0, 2]), list(tree.root.mins))
     self.assertSequenceEqual(list([0, 2]), list(tree.root.maxes))
     # Test if the information contained by the leaf node is correct.
     self.assertEqual(1, len(tree.children(tree.root)))
     self.assertEqual(0, tree.children(tree.root)[0].idx)
     self.assertEqual(True, isinstance(tree.root, KDTree.LeafNode))
Exemple #4
0
 def test_build1(self):
     data = np.array([[0, 2], [0, 3], [0, 4]])
     tree = KDTree(data, leafsize=2)
     # test if the node is built correctly.
     self.assertSequenceEqual(list([0, 1, 2]), list(tree.root.idx))
     self.assertSequenceEqual(list([0, 2]), list(tree.root.mins))
     self.assertSequenceEqual(list([0, 4]), list(tree.root.maxes))
     # Test if the information contained by the leaf node is correct.
     self.assertSequenceEqual(list([0, 1]),
                              list(tree.children(tree.root)[0].idx))
     self.assertSequenceEqual(list([2]),
                              list(tree.children(tree.root)[1].idx))
    def test_if_change_low1(self):
        query = np.array([[1, 2], [3, 4]])
        tree_query = KDTree(query, leafsize=1)

        data = np.array([[0, 2], [3, 4]])
        tree = KDTree(data, leafsize=1)

        self.assertTrue(not bound.if_change_low(
            tree.root.mins[0], tree.root.maxes[0], tree_query.root.mins[0],
            tree_query.root.maxes[0]))
        self.assertTrue(not bound.if_change_low(
            tree.root.mins[1], tree.root.maxes[1], tree_query.root.mins[1],
            tree_query.root.maxes[1]))
Exemple #6
0
    def test_query_dual(self):
        data = np.array([[1, 1]])
        pts = np.array([[1, 1]])

        tree = KDTree(data, leafsize=2)
        treep = KDTree(pts, leafsize=2)

        dens = KDTree.query_dual_tree(tree, treep, 1)
        kfit = KernelDensity(bandwidth=1.0,
                             kernel="gaussian",
                             breadth_first=True,
                             leaf_size=2,
                             metric_params=None).fit(data)
        result = kfit.score_samples(pts)
        self.assertTrue((dens - np.exp(result)) < 0.001)
Exemple #7
0
    def test_query_dual_rand(self):
        d = 5
        data = np.random.rand(51, d)
        pts = np.random.rand(3, d)

        tree = KDTree(data, leafsize=4)
        treep = KDTree(pts, leafsize=4)

        dens = KDTree.query_dual_tree(tree, treep, 1)
        kfit = KernelDensity(bandwidth=1.0,
                             kernel="gaussian",
                             breadth_first=True,
                             leaf_size=2,
                             metric_params=None).fit(data)
        result = kfit.score_samples(pts)
        self.assertTrue(np.sum(dens - np.exp(result)) < 0.001)
    def test_find_bound(self):
        query = np.array([[0, 2]])
        tree_query = KDTree(query, leafsize=1)

        data = np.array([[0, 2]])
        tree = KDTree(data, leafsize=1)

        # lower_distance = upper_distance = 0
        l, u = bound.find_bound(tree.root, tree_query.root, 1)
        self.assertEqual([0.1592], round(l, 4))
        self.assertEqual([0.1592], round(u, 4))

        query = np.array([[1, 2]])
        tree_query = KDTree(query, leafsize=1)

        data = np.array([[0, 2]])
        tree = KDTree(data, leafsize=1)
        l, u = bound.find_bound(tree.root, tree_query.root, 1)
        self.assertEqual([0.1592], round(u, 4))
Exemple #9
0
    def test_children(self):
        # LeafNode case
        data = np.array([[0, 2]])
        tree = KDTree(data, leafsize=2)
        self.assertEqual(tree.children(tree.root)[0], tree.root)

        # node case
        data = np.array([[0, 2], [0, 3]])
        tree = KDTree(data, leafsize=1)
        self.assertEqual(tree.children(tree.root)[0].idx, [0])
        self.assertEqual(tree.children(tree.root)[1].idx, [1])
Exemple #10
0
    def test_build2(self):
        data = np.array([[1, 1, 2], [0, 1, 2], [3, 1, 2], [3, 2, 1], [3, 3, 4],
                         [3, 1, 3], [2, 3, 1], [3, 4, 1], [3, 1, 0], [3, 4,
                                                                      5]])
        tree = KDTree(data, leafsize=3)
        # test if the node is built correctly on multi-dimensions.
        self.assertSequenceEqual(list([0, 1, 0]), list(tree.root.mins))
        self.assertSequenceEqual(list([3, 4, 5]), list(tree.root.maxes))

        # split = 2.5; dimension = 3
        # test if the left bound and right bound overlap
        self.assertSequenceEqual(list([0, 1, 2, 3, 6, 7, 8]),
                                 list(tree.root.leftchild.idx))
        self.assertSequenceEqual(list([4, 5, 9]),
                                 list(tree.root.rightchild.idx))

        # show that after splitting, we still can use .idx to trace the value of the node
        self.assertSequenceEqual(list([2, 3, 6, 7, 8]),
                                 list(tree.root.leftchild.rightchild.idx))
        self.assertSequenceEqual(list([0, 1]),
                                 list(tree.root.leftchild.leftchild.idx))

        # test if leave size == 3. root.greater shall be a LeafNode
        self.assertTrue(isinstance(tree.root.rightchild, KDTree.LeafNode))
Exemple #11
0
 def test_traverse(self):
     data = np.array([[0, 2], [0, 3]])
     tree = KDTree(data, leafsize=1)
     result = []
     tree.traverse(tree.root, result)  # result = array([0, 1])
     self.assertSequenceEqual(list(result[0]), list([0, 1]))
Exemple #12
0
 def test_priority(self):
     data = np.array([[0, 2], [0, 3]])
     tree = KDTree(data, leafsize=1)
     priority = tree.priority(tree.root, 0.1,
                              0.2)  # 0.1 * 2 + 0.0001 * random(0, 1)
     self.assertTrue((priority - 0.2) < 0.001)