Ejemplo n.º 1
0
    def test_get_lr_keyroots(self):
        params1 = {"LR_keyroots": {}, "l": []}
        params2 = {"LR_keyroots": {}, "l": []}

        [self.t1, params1] = TD.postorder_traverse(self.t1, params1, TD.compute_l)
        [self.t1, params1] = TD.get_lr_keyroots(self.t1, params1)

        [self.t2, params2] = TD.postorder_traverse(self.t2, params2, TD.compute_l)
        [self.t2, params2] = TD.get_lr_keyroots(self.t2, params2)

        kr1_actual = params1["LR_keyroots"]
        kr1_expected = [3, 5, 6]
        kr2_actual = params2["LR_keyroots"]
        kr2_expected = [2, 5, 6]

        for i in range(0, 3):
            self.assertEqual(kr1_actual[i], kr1_expected[i])
            self.assertEqual(kr2_actual[i], kr2_expected[i])

        # SECOND EXAMPLE
        params3 = {"LR_keyroots": {}, "l": []}
        params4 = {"LR_keyroots": {}, "l": []}

        [self.t3, params3] = TD.postorder_traverse(self.t3, params3, TD.compute_l)
        [self.t4, params4] = TD.postorder_traverse(self.t4, params4, TD.compute_l)

        [self.t3, params3] = TD.get_lr_keyroots(self.t3, params3)
        [self.t4, params4] = TD.get_lr_keyroots(self.t4, params4)

        kr3_actual = params3["LR_keyroots"]
        kr3_expected = [2, 4, 5, 7, 8, 9, 10]
        kr4_actual = params4["LR_keyroots"]
        kr4_expected = [2, 4, 5, 6, 7]

        for i in range(0, 7):
            self.assertEqual(kr3_actual[i], kr3_expected[i])
        for i in range(0, 5):
            self.assertEqual(kr4_actual[i], kr4_expected[i])
Ejemplo n.º 2
0
    def test_compute_treedist(self):

        # Preprocessing
        params1 = {"LR_keyroots": {}, "l": [], "labels": []}
        params2 = {"LR_keyroots": {}, "l": [], "labels": []}

        # -- Compute labels
        [self.t1, params1] = TD.postorder_traverse(self.t1, params1, TD.compute_labels)
        [self.t2, params2] = TD.postorder_traverse(self.t2, params2, TD.compute_labels)

        # -- Compute l
        [self.t1, params1] = TD.postorder_traverse(self.t1, params1, TD.compute_l)
        [self.t2, params2] = TD.postorder_traverse(self.t2, params2, TD.compute_l)

        # -- Compute LR_keyroots
        [self.t1, params1] = TD.get_lr_keyroots(self.t1, params1)
        [self.t2, params2] = TD.get_lr_keyroots(self.t2, params2)

        # First loop of example
        i_prime = 1
        j_prime = 1
        i = params1["LR_keyroots"][i_prime - 1]
        j = params2["LR_keyroots"][j_prime - 1]
        self.assertEqual(i, 3)
        self.assertEqual(j, 2)

        Tree_dist = numpy.zeros([self.t1["id"], self.t2["id"]])

        params = {}
        params["update_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["insert_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["delete_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])

        params["gamma"] = TD.unit_cost
        params["labels1"] = params1["labels"]
        params["labels2"] = params2["labels"]
        params["l1"] = params1["l"]
        params["l2"] = params2["l"]
        params["tree_dist"] = Tree_dist

        params = TD.treedist(i, j, params)
        self.assertEqual(params["tree_dist"][2 - 1, 2 - 1], 0)
        # self.assertEqual( params['edit_ops'][ 2 - 1, 2 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 2 - 1, 2 - 1], 0 )

        self.assertEqual(params["tree_dist"][3 - 1, 2 - 1], 1)
        # self.assertEqual( params['edit_ops'][ 3 - 1, 2 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 3 - 1, 2 - 1 ], 1 )

        # Second loop of example
        i_prime = 1
        j_prime = 2
        i = params1["LR_keyroots"][i_prime - 1]
        j = params2["LR_keyroots"][j_prime - 1]
        self.assertEqual(i, 3)
        self.assertEqual(j, 5)

        params["update_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["insert_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["delete_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params = TD.treedist(i, j, params)
        self.assertEqual(params["tree_dist"][2 - 1, 5 - 1], 1)
        #        self.assertEqual( params['edit_ops'][ 2 - 1, 5 - 1 ], TD.update )
        #        self.assertEqual( params['edit_cost'][ 2 - 1, 5 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][3 - 1, 5 - 1], 2)
        # self.assertEqual( params['edit_ops'][ 3 - 1, 5 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 3 - 1, 5 - 1 ], 1 )

        # Third loop of example
        i_prime = 1
        j_prime = 3
        i = params1["LR_keyroots"][i_prime - 1]
        j = params2["LR_keyroots"][j_prime - 1]
        self.assertEqual(i, 3)
        self.assertEqual(j, 6)

        params["update_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["insert_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["delete_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params = TD.treedist(i, j, params)
        self.assertEqual(params["tree_dist"][2 - 1, 1 - 1], 1)
        # self.assertEqual( params['edit_ops'][ 2 - 1, 1 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 2 - 1, 1 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][2 - 1, 3 - 1], 2)
        # self.assertEqual( params['edit_ops'][ 2 - 1, 3 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 2 - 1, 3 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][2 - 1, 4 - 1], 3)
        # self.assertEqual( params['edit_ops'][ 2 - 1, 4 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 2 - 1, 4 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][2 - 1, 6 - 1], 5)
        # self.assertEqual( params['edit_ops'][ 2 - 1, 6 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 2 - 1, 6 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][3 - 1, 1 - 1], 2)
        # self.assertEqual( params['edit_ops'][ 3 - 1, 1 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 3 - 1, 1 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][3 - 1, 3 - 1], 2)
        # self.assertEqual( params['edit_ops'][ 3 - 1, 3 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 3 - 1, 3 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][3 - 1, 4 - 1], 2)
        # self.assertEqual( params['edit_ops'][ 3 - 1, 4 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 3 - 1, 4 - 1 ], 0 )

        self.assertEqual(params["tree_dist"][3 - 1, 6 - 1], 4)
        # self.assertEqual( params['edit_ops'][ 3 - 1, 6 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 3 - 1, 6 - 1 ], 1 )

        # Fourth loop of example
        i_prime = 2
        j_prime = 1
        i = params1["LR_keyroots"][i_prime - 1]
        j = params2["LR_keyroots"][j_prime - 1]
        self.assertEqual(i, 5)
        self.assertEqual(j, 2)

        params["update_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["insert_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["delete_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params = TD.treedist(i, j, params)
        self.assertEqual(params["tree_dist"][5 - 1, 2 - 1], 1)
        # self.assertEqual( params['edit_ops'][ 5 - 1, 2 - 1], TD.update )
        # self.assertEqual( params['edit_cost'][ 5 - 1, 2 - 1 ], 1 )

        # Fifth loop of example
        i_prime = 2
        j_prime = 2
        i = params1["LR_keyroots"][i_prime - 1]
        j = params2["LR_keyroots"][j_prime - 1]
        self.assertEqual(i, 5)
        self.assertEqual(j, 5)

        params["update_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["insert_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["delete_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params = TD.treedist(i, j, params)
        self.assertEqual(params["tree_dist"][5 - 1, 5 - 1], 0)
        # self.assertEqual( params['edit_ops'][ 5 - 1, 5 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 5 - 1, 5 - 1 ], 0 )

        # Sixth loop of example
        i_prime = 2
        j_prime = 3
        i = params1["LR_keyroots"][i_prime - 1]
        j = params2["LR_keyroots"][j_prime - 1]
        self.assertEqual(i, 5)
        self.assertEqual(j, 6)

        params["update_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["insert_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["delete_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params = TD.treedist(i, j, params)
        self.assertEqual(params["tree_dist"][5 - 1, 1 - 1], 1)
        # self.assertEqual( params['edit_ops'][ 5 - 1, 1 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 5 - 1, 1 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][5 - 1, 3 - 1], 3)
        # self.assertEqual( params['edit_ops'][ 5 - 1, 3 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 5 - 1, 3 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][5 - 1, 4 - 1], 4)
        # self.assertEqual( params['edit_ops'][ 5 - 1, 4 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 5 - 1, 4 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][5 - 1, 6 - 1], 5)
        # self.assertEqual( params['edit_ops'][ 5 - 1, 6 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 5 - 1, 6 - 1 ], 1 )

        # Seventh loop of example
        i_prime = 3
        j_prime = 1
        i = params1["LR_keyroots"][i_prime - 1]
        j = params2["LR_keyroots"][j_prime - 1]
        self.assertEqual(i, 6)
        self.assertEqual(j, 2)

        params["update_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["insert_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["delete_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params = TD.treedist(i, j, params)
        self.assertEqual(params["tree_dist"][1 - 1, 2 - 1], 1)
        # self.assertEqual( params['edit_ops'][ 1 - 1, 2 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 1 - 1, 2 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][4 - 1, 2 - 1], 3)
        # self.assertEqual( params['edit_ops'][ 4 - 1, 2 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 4 - 1, 2 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][6 - 1, 2 - 1], 5)
        # self.assertEqual( params['edit_ops'][ 6 - 1, 2 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 6 - 1, 2 - 1 ], 1 )

        # Eighth loop of example
        i_prime = 3
        j_prime = 2
        i = params1["LR_keyroots"][i_prime - 1]
        j = params2["LR_keyroots"][j_prime - 1]
        self.assertEqual(i, 6)
        self.assertEqual(j, 5)

        params["update_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["insert_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["delete_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params = TD.treedist(i, j, params)
        self.assertEqual(params["tree_dist"][1 - 1, 5 - 1], 1)
        # self.assertEqual( params['edit_ops'][ 1 - 1, 5 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 1 - 1, 5 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][4 - 1, 5 - 1], 4)
        # self.assertEqual( params['edit_ops'][ 4 - 1, 5 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 4 - 1, 5 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][6 - 1, 5 - 1], 5)
        # self.assertEqual( params['edit_ops'][ 6 - 1, 5 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 6 - 1, 5 - 1 ], 1 )

        # Ninth loop of example
        i_prime = 3
        j_prime = 3
        i = params1["LR_keyroots"][i_prime - 1]
        j = params2["LR_keyroots"][j_prime - 1]
        self.assertEqual(i, 6)
        self.assertEqual(j, 6)

        params["update_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["insert_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params["delete_edit_cost"] = numpy.zeros([self.t1["id"], self.t2["id"]])
        params = TD.treedist(i, j, params)
        self.assertEqual(params["tree_dist"][1 - 1, 1 - 1], 0)
        # self.assertEqual( params['edit_ops'][ 1 - 1, 1 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 1 - 1, 1 - 1 ], 0 )

        self.assertEqual(params["tree_dist"][4 - 1, 1 - 1], 3)
        # self.assertEqual( params['edit_ops'][ 4 - 1, 1 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 4 - 1, 1 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][6 - 1, 1 - 1], 5)
        # self.assertEqual( params['edit_ops'][ 6 - 1, 1 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 6 - 1, 1 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][1 - 1, 3 - 1], 2)
        # self.assertEqual( params['edit_ops'][ 1 - 1, 3 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 1 - 1, 3 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][4 - 1, 3 - 1], 1)
        # self.assertEqual( params['edit_ops'][ 4 - 1, 3 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 4 - 1, 3 - 1 ], 0 )

        self.assertEqual(params["tree_dist"][6 - 1, 3 - 1], 3)
        # self.assertEqual( params['edit_ops'][ 6 - 1, 3 - 1 ], TD.delete )
        # self.assertEqual( params['edit_cost'][ 6 - 1, 3 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][1 - 1, 4 - 1], 3)
        # self.assertEqual( params['edit_ops'][ 1 - 1, 4 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 1 - 1, 4 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][4 - 1, 4 - 1], 2)
        # self.assertEqual( params['edit_ops'][ 4 - 1, 4 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 4 - 1, 4 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][6 - 1, 4 - 1], 3)
        # self.assertEqual( params['edit_ops'][ 6 - 1, 4 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 6 - 1, 4 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][1 - 1, 6 - 1], 5)
        # self.assertEqual( params['edit_ops'][ 1 - 1, 6 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 1 - 1, 6 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][4 - 1, 6 - 1], 4)
        # self.assertEqual( params['edit_ops'][ 4 - 1, 6 - 1 ], TD.insert )
        # self.assertEqual( params['edit_cost'][ 4 - 1, 6 - 1 ], 1 )

        self.assertEqual(params["tree_dist"][6 - 1, 6 - 1], 2)
        # self.assertEqual( params['edit_ops'][ 6 - 1, 6 - 1 ], TD.update )
        # self.assertEqual( params['edit_cost'][ 6 - 1, 6 - 1 ], 0 )

        expected_tree_dist = numpy.zeros([self.t1["id"], self.t2["id"]])
        expected_tree_dist[0, :] = [0, 1, 2, 3, 1, 5]
        expected_tree_dist[1, :] = [1, 0, 2, 3, 1, 5]
        expected_tree_dist[2, :] = [2, 1, 2, 2, 2, 4]
        expected_tree_dist[3, :] = [3, 3, 1, 2, 4, 4]
        expected_tree_dist[4, :] = [1, 1, 3, 4, 0, 5]
        expected_tree_dist[5, :] = [5, 5, 3, 3, 5, 2]

        for i in range(0, self.t1["id"]):
            for j in range(0, self.t2["id"]):
                self.assertEqual(params["tree_dist"][i, j], expected_tree_dist[i, j])