def testFlattenRandomTree(self): if IGNORE_TEST: return tree = NamedTree.createRandomNamedTree(100, 0.5, prob_detach=0.2) leaves = tree.getLeaves() detached_nodes = [n for n in tree.getAllNodes() if not n.isAttached()] # Include in the leaves the parents with no attached # children for node in detached_nodes: parent = node.getParent() is_leaf = True for child in parent.getChildren(): if child.isAttached(): is_leaf = False break if is_leaf and (not parent in leaves): leaves.append(parent) leaf_full_names = [l._makeFlattenName() for l in leaves] elements = tree.flatten() names = [] for e in elements: e.tree._checkTreeStructure() for leaf in e.tree.getLeaves(): names.append(leaf._makeFlattenName()) self.assertEqual(set(leaf_full_names), set(names))
def testUnflattenManyTrees(self): if IGNORE_TEST: return tree = NamedTree.createRandomNamedTree(100, 0.5, prob_detach=0.2) tree._checkTreeStructure() tree_list = tree.flatten() new_tree = NamedTree.unflatten(tree_list) self.assertTrue(tree.isEquivalent(new_tree))
def testDetachTreesRandom(self): if IGNORE_TEST: return tree = NamedTree.createRandomNamedTree(300, 0.5, prob_detach=0.2) elements = tree._detachTrees() detached = [c for c in tree.getAllNodes() if not c.isAttached()] expected_num = len(detached) + 1 self.assertEqual(expected_num, len(elements)) for element in elements: root = element.tree parsed_name = root.getName(is_global_name=False).split(FLATTEN_SEPARATOR) self.assertEqual(len(parsed_name), len(set(parsed_name))) for name in parsed_name: b = any([name in node._name for node in tree.getAllNodes()]) self.assertTrue(b)