def test_extract_nodegraph_info_badfile():
    try:
        khmer.extract_nodegraph_info(
            utils.get_test_data('test-abund-read-2.fa'))
        assert 0, 'this should fail'
    except ValueError:
        pass
Exemple #2
0
def test_extract_nodegraph_info_badfile():
    try:
        khmer.extract_nodegraph_info(
            utils.get_test_data('test-abund-read-2.fa'))
        assert 0, 'this should fail'
    except ValueError:
        pass
Exemple #3
0
    def _load_v2(cls,
                 info,
                 leaf_loader,
                 dirname,
                 storage,
                 print_version_warning=True):
        nodes = {int(k): v for (k, v) in info['nodes'].items()}

        if nodes[0] is None:
            raise ValueError("Empty tree!")

        sbt_nodes = defaultdict(lambda: None)

        sample_bf = os.path.join(dirname, nodes[0]['filename'])
        k, size, ntables = khmer.extract_nodegraph_info(sample_bf)[:3]
        factory = GraphFactory(k, size, ntables)

        for k, node in nodes.items():
            if node is None:
                continue

            node['filename'] = os.path.join(dirname, node['filename'])

            if 'internal' in node['name']:
                node['factory'] = factory
                sbt_node = Node.load(node, storage)
            else:
                sbt_node = leaf_loader(node, storage)

            sbt_nodes[k] = sbt_node

        tree = cls(factory, d=info['d'])
        tree.nodes = sbt_nodes

        return tree
Exemple #4
0
    def _load_v2(cls, info, leaf_loader, dirname, storage, print_version_warning=True):
        nodes = {int(k): v for (k, v) in info['nodes'].items()}

        if nodes[0] is None:
            raise ValueError("Empty tree!")

        sbt_nodes = defaultdict(lambda: None)

        sample_bf = os.path.join(dirname, nodes[0]['filename'])
        k, size, ntables = khmer.extract_nodegraph_info(sample_bf)[:3]
        factory = GraphFactory(k, size, ntables)

        for k, node in nodes.items():
            if node is None:
                continue

            node['filename'] = os.path.join(dirname, node['filename'])

            if 'internal' in node['name']:
                node['factory'] = factory
                sbt_node = Node.load(node, storage)
            else:
                sbt_node = leaf_loader(node, storage)

            sbt_nodes[k] = sbt_node

        tree = cls(factory, d=info['d'])
        tree.nodes = sbt_nodes

        return tree
Exemple #5
0
    def _load_v1(jnodes,
                 leaf_loader,
                 dirname,
                 storage,
                 print_version_warning=True):

        if jnodes[0] is None:
            raise ValueError("Empty tree!")

        sbt_nodes = defaultdict(lambda: None)

        sample_bf = os.path.join(dirname, jnodes[0]['filename'])
        ksize, tablesize, ntables = khmer.extract_nodegraph_info(sample_bf)[:3]
        factory = GraphFactory(ksize, tablesize, ntables)

        for i, jnode in enumerate(jnodes):
            if jnode is None:
                continue

            jnode['filename'] = os.path.join(dirname, jnode['filename'])

            if 'internal' in jnode['name']:
                jnode['factory'] = factory
                sbt_node = Node.load(jnode, storage)
            else:
                sbt_node = leaf_loader(jnode, storage)

            sbt_nodes[i] = sbt_node

        tree = SBT(factory)
        tree.nodes = sbt_nodes

        return tree
Exemple #6
0
    def _load_v2(cls, info, leaf_loader, dirname):
        nodes = {int(k): v for (k, v) in info['nodes'].items()}

        if nodes[0] is None:
            raise ValueError("Empty tree!")

        sbt_nodes = []

        sample_bf = os.path.join(dirname, nodes[0]['filename'])
        k, size, ntables = khmer.extract_nodegraph_info(sample_bf)[:3]
        factory = GraphFactory(k, size, ntables)

        for i, node in sorted(nodes.items()):
            if node is None:
                sbt_nodes.append(None)
                continue

            if 'internal' in node['filename']:
                node['factory'] = factory
                sbt_node = LazyNode(Node.load, node, dirname)
            else:
                sbt_node = LazyNode(leaf_loader, node, dirname)

            sbt_nodes.append(sbt_node)

        tree = cls(factory, d=info['d'])
        tree.nodes = sbt_nodes

        return tree
Exemple #7
0
    def _load_v1(jnodes, leaf_loader, dirname, storage, print_version_warning=True):

        if jnodes[0] is None:
            raise ValueError("Empty tree!")

        sbt_nodes = defaultdict(lambda: None)

        sample_bf = os.path.join(dirname, jnodes[0]['filename'])
        ksize, tablesize, ntables = khmer.extract_nodegraph_info(sample_bf)[:3]
        factory = GraphFactory(ksize, tablesize, ntables)

        for i, jnode in enumerate(jnodes):
            if jnode is None:
                continue

            jnode['filename'] = os.path.join(dirname, jnode['filename'])

            if 'internal' in jnode['name']:
                jnode['factory'] = factory
                sbt_node = Node.load(jnode, storage)
            else:
                sbt_node = leaf_loader(jnode, storage)

            sbt_nodes[i] = sbt_node

        tree = SBT(factory)
        tree.nodes = sbt_nodes

        return tree
Exemple #8
0
    def _load_v1(jnodes, leaf_loader, dirname):

        if jnodes[0] is None:
            # TODO error!
            raise ValueError("Empty tree!")

        sbt_nodes = []

        sample_bf = os.path.join(dirname, jnodes[0]['filename'])
        ksize, tablesize, ntables = khmer.extract_nodegraph_info(sample_bf)[:3]
        factory = GraphFactory(ksize, tablesize, ntables)

        for jnode in jnodes:
            if jnode is None:
                sbt_nodes.append(None)
                continue

            if 'internal' in jnode['filename']:
                jnode['factory'] = factory
                sbt_node = LazyNode(Node.load, jnode, dirname)
            else:
                sbt_node = LazyNode(leaf_loader, jnode, dirname)

            sbt_nodes.append(sbt_node)

        tree = SBT(factory)
        tree.nodes = sbt_nodes

        return tree
Exemple #9
0
    def load(sbt_fn):
        with open(sbt_fn) as fp:
            nodes = json.load(fp)

        if nodes[0] is None:
            # TODO error!
            raise ValueError("Empty tree!")

        sbt_nodes = []

        ksize, tablesize, ntables, _, _, _ = khmer.extract_nodegraph_info(nodes[0]["filename"])
        factory = GraphFactory(ksize, tablesize, ntables)

        for node in nodes:
            if node is None:
                sbt_nodes.append(None)
                continue

            graph = khmer.load_nodegraph(node["filename"])

            if "metadata" in node:
                # only Leaf nodes have metadata
                l = Leaf(node["metadata"], graph)
                sbt_nodes.append(l)
            else:
                n = Node(factory, name=node["name"])
                n.graph = graph
                sbt_nodes.append(n)

        tree = SBT(factory)
        tree.nodes = sbt_nodes

        return tree
Exemple #10
0
def load_sbt(sbt_fn):

    with open(sbt_fn) as fp:
       sbt_dict = json.load(fp)

    ksize, tablesize, ntables, _, _, _ = khmer.extract_nodegraph_info(sbt_dict['root']['filename'])
    factory = GraphFactory(ksize, tablesize, ntables)

    tree = load_node(sbt_dict['root'], factory)

    return tree
def test_extract_nodegraph_info():
    fn = utils.get_temp_filename("test_extract_nodegraph.pt")
    for size in [1e6, 2e6, 5e6, 1e7]:
        ht = khmer.Nodegraph(25, size, 4)
        ht.save(fn)

        info = khmer.extract_nodegraph_info(fn)
        ksize, table_size, n_tables, _, _, _ = info
        print(ksize, table_size, n_tables)

        assert (ksize) == 25
        assert table_size == size, table_size
        assert n_tables == 4

        try:
            os.remove(fn)
        except OSError as err:
            print("...failed to remove {fn}".format(fn) + str(err), file=sys.stderr)
Exemple #12
0
def test_extract_nodegraph_info():
    fn = utils.get_temp_filename('test_extract_nodegraph.pt')
    for size in [1e6, 2e6, 5e6, 1e7]:
        ht = khmer.Nodegraph(25, size, 4)
        ht.save(fn)

        info = khmer.extract_nodegraph_info(fn)
        ksize, table_size, n_tables, _, _, _ = info
        print(ksize, table_size, n_tables)

        assert(ksize) == 25
        assert table_size == size, table_size
        assert n_tables == 4

        try:
            os.remove(fn)
        except OSError as err:
            print('...failed to remove {fn}'.format(fn) + str(err),
                  file=sys.stderr)
Exemple #13
0
    def load(cls, sbt_fn, leaf_loader=None):
        if leaf_loader is None:
            leaf_loader = Leaf.load

        with open(sbt_fn) as fp:
            info = json.load(fp)

        nodes = {int(k): v for (k, v) in info['nodes'].items()}

        if nodes[0] is None:
            raise ValueError("Empty tree!")

        sbt_nodes = []

        # TODO if there is only one Leaf (the root),
        # how do we initialize the factory?
        # Probably better to save this in the json
        k, size, ntables, *_ = extract_nodegraph_info(nodes[0]['filename'])
        factory = GraphFactory(k, size, ntables)

        for i, node in sorted(nodes.items()):
            if node is None:
                sbt_nodes.append(None)
                continue

            if 'internal' in node['filename']:
                node['factory'] = factory
                new_node = Node.load(node)
            else:
                new_node = leaf_loader(node)

            sbt_nodes.append(new_node)

        tree = cls(factory, d=info['d'])
        tree.nodes = sbt_nodes

        return tree