def test_distance(nwck, nodes): tree = None rootStack = [] current_node = '$' for c in reversed(nwck): if c == ';': continue if not c in (',', '(', ')'): current_node = c + current_node else: if c == ',': rootStack[-1].add(current_node) elif c == ')': if not tree: tree = Tree(current_node) rootStack.append(tree) else: rootStack.append(rootStack[-1].add(current_node)) elif c == '(': rootStack[-1].add(current_node) rootStack.pop() current_node = '$' n1 = None n2 = None for c in nodes: if n1 is None: n1 = tree.find(c + '$') else: n2 = tree.find(c + '$') p1 = n1.getPath() p2 = n2.getPath() i = 0 while i < len(p1) and i < len(p2): if p1[i] == p2[i]: del p1[i] del p2[i] else: break d = distance(nwck, nodes) if len(p1) + len(p2) != d: print("ERROR: expected %d, but got %d" % (len(p1) + len(p2), d)) print(' '.join([str(x.data) for x in p1])) print(' '.join([str(x.data) for x in p2])) return len(p1) + len(p2)
def buildAllTrees(baseTree, nodes): if len(nodes) == 0: print(baseTree.toNewick()) return node = nodes[0] stack = [baseTree] while len(stack) > 0: r = stack.pop() for i in range(len(r.children)): c = r.children[i] t1 = Tree(None) # new internal node t1.add(node) t1.add(c) r.replaceChild(i, t1) buildAllTrees(baseTree, nodes[1:]) r.replaceChild(i, c) stack.append(c)
occurrences[suffix] = n_occ f = open(argv[1], "r") def readNext(): return f.readline() # def readNext(): # return input() s = readNext() k = int(readNext()) tree = Tree(Data("node1", 0, 0), key=lambda x: x.name) while True: l = readNext() if not l: break d = l.split(" ") tree[d[0]].add(Data(d[1], int(d[2]), int(d[3]))) f.close() tree.traverse(calcSuffix) # print(occurrences) # print(sorted(occurrences.keys(), key=lambda x: -len(x))) for x in sorted(occurrences.keys(), key=lambda x: -len(x)): if occurrences[x] >= k:
node = nodes[0] stack = [baseTree] while len(stack) > 0: r = stack.pop() for i in range(len(r.children)): c = r.children[i] t1 = Tree(None) # new internal node t1.add(node) t1.add(c) r.replaceChild(i, t1) buildAllTrees(baseTree, nodes[1:]) r.replaceChild(i, c) stack.append(c) if __name__ == '__main__': nodes = input().split() baseTree = Tree(nodes[0]) if len(nodes) == 1: print(baseTree.toNewick()) sys.exit() baseTree.add(nodes[1]) if len(nodes) == 2: print(baseTree.toNewick()) sys.exit() buildAllTrees(baseTree, nodes[2:])