Exemple #1
0
    def get_dendropy_tree_from_break_tree(self, break_tree):
        nodes = self._extract_break_tree_leaves(break_tree)
        sorted_break_tree_leaves_sets, max_leaves_set_size = self._sort_break_tree_leaves_sets(break_tree)

        for leave_set_size in range(max_leaves_set_size):
            if leave_set_size not in sorted_break_tree_leaves_sets:
                continue

            for leave_set in sorted_break_tree_leaves_sets[leave_set_size]:
                one_step_parents = []
                for leaf in leave_set:
                    node = self._find_node_with_same_taxon(nodes, leaf)
                    oldest_parent = self._get_oldest_parent(node)
                    if oldest_parent not in one_step_parents:
                        one_step_parents.append(oldest_parent)

                new_oldest_parent = Node()
                if len(one_step_parents) > 1:
                    for parent in one_step_parents:
                        parent.parent_node = new_oldest_parent

        oldest_parents = []
        for node in nodes:
            oldest_parent = self._get_oldest_parent(node)
            if oldest_parent not in oldest_parents:
                oldest_parents.append(oldest_parent)

        if len(oldest_parents) > 1:
            seed = Node()
            for oldest_parent in oldest_parents:
                oldest_parent.parent_node = seed
        elif len(oldest_parents) == 1:
            seed = oldest_parents[0]
        else:
            seed = Node()

        tree = Tree(seed_node=seed)
        tree.deroot()
        return tree