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])
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])