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
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
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
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
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
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
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)
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)
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