def swap_tree(tree): # make safe tree if not '"' in tree: tree = nwk.safe_newick_string(tree) # swap two nodes of the tree nodes = list(nwk.nodes_in_tree(tree))[1:] random.shuffle(nodes) # choose two nodes to be swapped nodeA = nodes.pop(0) # get another node that can be interchanged while nodes: nodeB = nodes.pop(0) if nodeB in nodeA or nodeA in nodeB: pass else: break tree = tree.replace(nodeA+',', '#dummyA#,') tree = tree.replace(nodeA+')', '#dummyA#)') tree = tree.replace(nodeB+',', '#dummyB#,') tree = tree.replace(nodeB+')', '#dummyB#)') tree = tree.replace('#dummyA#', nodeB) tree = tree.replace('#dummyB#', nodeA) return nwk.sort_tree(tree).replace('"','')
def swap_tree(tree): # make safe tree if not '"' in tree: tree = nwk.safe_newick_string(tree) # swap two nodes of the tree nodes = list(nwk.nodes_in_tree(tree))[1:] random.shuffle(nodes) # choose two nodes to be swapped nodeA = nodes.pop(0) # get another node that can be interchanged while nodes: nodeB = nodes.pop(0) if nodeB in nodeA or nodeA in nodeB: pass else: break tree = tree.replace(nodeA + ',', '#dummyA#,') tree = tree.replace(nodeA + ')', '#dummyA#)') tree = tree.replace(nodeB + ',', '#dummyB#,') tree = tree.replace(nodeB + ')', '#dummyB#)') tree = tree.replace('#dummyA#', nodeB) tree = tree.replace('#dummyB#', nodeA) return nwk.sort_tree(tree).replace('"', '')