Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
        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:
Esempio n. 4
0
    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:])