From ed0214719390c86d2645146356e7d7091503fb20 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Tue, 31 Oct 2017 10:42:29 -0700 Subject: [PATCH 01/34] Bump version and add note pointing to stable docs --- doc/conf.py | 4 ++-- doc/index.rst | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/conf.py b/doc/conf.py index d907ae5c00..bb9df84b3c 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -61,9 +61,9 @@ # built documents. # # The short X.Y version. -version = '1.0' +version = '2.0' # The full version, including alpha/beta/rc tags. -release = '1.0' +release = '2.0.0a1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/index.rst b/doc/index.rst index deab315f75..9a72e3082c 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -3,6 +3,12 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. +.. note:: + We are working on releasing sourmash 2.0, + and this documentation reflects changes not released officially yet. + If you want to see the documentation for sourmash 1.0 check + the `stable version `__. + Welcome to sourmash! ==================== From 4c85fbdc0e125fedbae4fd726cea1a9629942823 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 3 Feb 2018 12:49:45 -0800 Subject: [PATCH 02/34] add an initial lca gather greedy search implementation --- sourmash_lib/lca/__init__.py | 1 + sourmash_lib/lca/__main__.py | 3 ++- sourmash_lib/lca/lca_utils.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sourmash_lib/lca/__init__.py b/sourmash_lib/lca/__init__.py index de2a61bfae..6ef40737b3 100644 --- a/sourmash_lib/lca/__init__.py +++ b/sourmash_lib/lca/__init__.py @@ -2,4 +2,5 @@ from .command_classify import classify from .command_summarize import summarize_main from .command_rankinfo import rankinfo_main +from .command_gather import gather_main from .__main__ import main diff --git a/sourmash_lib/lca/__main__.py b/sourmash_lib/lca/__main__.py index 2a248e31ff..9233500bfc 100644 --- a/sourmash_lib/lca/__main__.py +++ b/sourmash_lib/lca/__main__.py @@ -5,7 +5,7 @@ import sys import argparse -from . import classify, index, summarize_main, rankinfo_main +from . import classify, index, summarize_main, rankinfo_main, gather_main from .command_compare_csv import compare_csv from sourmash_lib.logging import set_quiet, error @@ -16,6 +16,7 @@ def main(sysv_args): 'index': index, 'summarize': summarize_main, 'rankinfo': rankinfo_main, + 'gather': gather_main, 'compare_csv': compare_csv} parser = argparse.ArgumentParser( diff --git a/sourmash_lib/lca/lca_utils.py b/sourmash_lib/lca/lca_utils.py index 83e8d8781c..fd99b47c30 100644 --- a/sourmash_lib/lca/lca_utils.py +++ b/sourmash_lib/lca/lca_utils.py @@ -117,7 +117,7 @@ class LCA_Database(object): Wrapper class for taxonomic database. obj.lineage_dict: key 'lineage_id' => lineage tuple [(name, rank), ...] - obj.hashval_to_lineage_id: key 'hashval' => 'lineage_id' + obj.hashval_to_lineage_id: key 'hashval' => set('lineage_id') obj.ksize: k-mer size obj.scaled: scaled value obj.signatures_to_lineage: key 'md5sum' => 'lineage_id' From f9368041df25c09180064b64f9bdd94785721e67 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 4 Feb 2018 06:24:08 -0800 Subject: [PATCH 03/34] added gather file :) --- sourmash_lib/lca/command_classify.py | 1 - sourmash_lib/lca/command_gather.py | 169 ++++++++++++++++++++++++++ sourmash_lib/lca/command_summarize.py | 1 - sourmash_lib/lca/lca_utils.py | 7 +- tests/test_lca.py | 20 +-- 5 files changed, 183 insertions(+), 15 deletions(-) create mode 100644 sourmash_lib/lca/command_gather.py diff --git a/sourmash_lib/lca/command_classify.py b/sourmash_lib/lca/command_classify.py index 721a3f3d81..f3c3d9e177 100644 --- a/sourmash_lib/lca/command_classify.py +++ b/sourmash_lib/lca/command_classify.py @@ -109,7 +109,6 @@ def classify(args): # load all the databases dblist, ksize, scaled = lca_utils.load_databases(args.db, args.scaled) - notify('ksize={} scaled={}', ksize, scaled) # find all the queries notify('finding query signatures...') diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py new file mode 100644 index 0000000000..0f015bb6aa --- /dev/null +++ b/sourmash_lib/lca/command_gather.py @@ -0,0 +1,169 @@ +#! /usr/bin/env python +""" +@@ +""" +from __future__ import print_function, division +import sys +import argparse +import csv +from collections import Counter, defaultdict, namedtuple + +import sourmash_lib +from sourmash_lib import sourmash_args +from sourmash_lib.logging import notify, error, print_results +from sourmash_lib.lca import lca_utils +from sourmash_lib.lca.lca_utils import debug, set_debug + +LCAGatherResult = namedtuple('LCAGatherResult', + 'intersect_bp, f_orig_query, f_unique_to_query, f_unique_weighted, average_abund, lineage') + + +# pretty-printing code. redundant with ../search.py; fix when refactoring. +def format_bp(bp): + bp = float(bp) + if bp < 500: + return '{:.0f} bp'.format(bp) + elif bp <= 500e3: + return '{:.1f} kbp'.format(round(bp / 1e3, 1)) + elif bp < 500e6: + return '{:.1f} Mbp'.format(round(bp / 1e6, 1)) + elif bp < 500e9: + return '{:.1f} Gbp'.format(round(bp / 1e9, 1)) + return '???' + + +def format_lineage(lineage_tup): + """ + Pretty print lineage. + """ + # list of ranks present + present = [ l.rank for l in lineage_tup if l.name ] + d = dict(lineage_tup) # rank: value + + if 'genus' in present: + if 'species' in present: + name = '{} {}'.format(d['genus'], d['species']) + else: + name = '{} sp.'.format(d['genus']) + elif len(present) < 3: + lineage_str = lca_utils.zip_lineage(lineage_tup, truncate_empty=True) + lineage_str = "; ".join(lineage_str) + name = lineage_str + ' - (no further assignment)' + elif len(present) > 1 and 'superkingdom' in present: + lowest_rank = present[-1] + name = '{}; {} {}'.format(d['superkingdom'], lowest_rank, + d[lowest_rank]) + else: + lineage_str = lca_utils.zip_lineage(lineage_tup, truncate_empty=True) + lineage_str = "; ".join(lineage_str) + name = lineage_str + + return name + + +def gather_signature(query_sig, dblist, threshold): + """ + Decompose 'query_sig' using the given list of databases. + """ + notify('loaded query: {}... (k={})', query_sig.name()[:30], + query_sig.minhash.ksize) + + # gather assignments from across all the databases + query_mins = set(query_sig.minhash.get_mins()) + n_mins = len(query_mins) + + found = [] + while 1: + # find all of the assignments for the current set of hashes + assignments = lca_utils.gather_assignments(query_mins, dblist) + + # none? quit. + if not assignments: + break + + # count 'em all + counts = Counter() + for hashval, assignment_set in assignments.items(): + for assignment in assignment_set: + counts[assignment] += 1 + + # find the most abundant assignment + top_assignment, top_count = next(iter(counts.most_common())) + + # construct 'result' object + intersect_bp = top_count * query_sig.minhash.scaled + result = LCAGatherResult(intersect_bp = intersect_bp, + f_orig_query = top_count / n_mins, + f_unique_to_query=0, + f_unique_weighted=0, + average_abund=0, + lineage=top_assignment) + + if not len(found): + print_results("") + print_results("overlap p_query") + print_results("--------- -------") + + # output! + pct_query = '{:.1f}%'.format(result.f_orig_query*100) + est_bp = format_bp(result.intersect_bp) + name = format_lineage(result.lineage) + + print_results('{:9} {:>6} {}', est_bp, pct_query, name) + + # now, remove from query mins. + for hashval, assignment_set in assignments.items(): + if top_assignment in assignment_set: + query_mins.remove(hashval) + + found.append(result) + + ## done. + + f_unassigned = len(query_mins) / n_mins + est_bp = len(query_mins) * query_sig.minhash.scaled + + if found: + print_results('') + if f_unassigned: + print_results('{:.1f}% ({}) have no assignment.', f_unassigned*100, + format_bp(est_bp)) + else: + print_results('Query is completely assigned.') + print_results('') + else: + print_results('') + print_results('No assignment for est {} of sequence.', + format_bp(est_bp)) + print_results('') + + +def gather_main(args): + """ + @@ + """ + p = argparse.ArgumentParser() + p.add_argument('query') + p.add_argument('db', nargs='+') + p.add_argument('-d', '--debug', action='store_true') + args = p.parse_args(args) + + if args.debug: + set_debug(args.debug) + + # load all the databases + dblist, ksize, scaled = lca_utils.load_databases(args.db, None) + + # for each query, gather all the matches across databases + query_sig = sourmash_args.load_query_signature(args.query, ksize, 'DNA') + debug('classifying', query_sig.name()) + + # make sure we're looking at the same scaled value as database + query_sig.minhash = query_sig.minhash.downsample_scaled(scaled) + + # do the classification, output results + gather_signature(query_sig, dblist, 0.0) + + +if __name__ == '__main__': + sys.exit(gather_main(sys.argv[1:])) diff --git a/sourmash_lib/lca/command_summarize.py b/sourmash_lib/lca/command_summarize.py index b94d8fd480..f0d43ada05 100644 --- a/sourmash_lib/lca/command_summarize.py +++ b/sourmash_lib/lca/command_summarize.py @@ -92,7 +92,6 @@ def summarize_main(args): # load all the databases dblist, ksize, scaled = lca_utils.load_databases(args.db, args.scaled) - notify('ksize={} scaled={}', ksize, scaled) # find all the queries notify('finding query signatures...') diff --git a/sourmash_lib/lca/lca_utils.py b/sourmash_lib/lca/lca_utils.py index fd99b47c30..c839c13d34 100644 --- a/sourmash_lib/lca/lca_utils.py +++ b/sourmash_lib/lca/lca_utils.py @@ -258,12 +258,13 @@ def load_databases(filenames, scaled=None): dblist.append(lca_db) - notify(u'\r\033[K', end=u'') - notify('loaded {} databases.', len(dblist)) - ksize = ksize_vals.pop() scaled = scaled_vals.pop() + notify(u'\r\033[K', end=u'') + notify('loaded {} LCA databases. ksize={}, scaled={}', len(dblist), + ksize, scaled) + return dblist, ksize, scaled diff --git a/tests/test_lca.py b/tests/test_lca.py index 917588077c..4cef22b141 100644 --- a/tests/test_lca.py +++ b/tests/test_lca.py @@ -170,7 +170,7 @@ def test_basic_index_and_classify_with_tsv_and_gz(): assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Alteromonadaceae,Alteromonas,Alteromonas_macleodii' in out assert 'classified 1 signatures total' in err - assert 'loaded 1 databases' in err + assert 'loaded 1 LCA databases' in err def test_basic_index_and_classify(): @@ -203,7 +203,7 @@ def test_basic_index_and_classify(): assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Alteromonadaceae,Alteromonas,Alteromonas_macleodii' in out assert 'classified 1 signatures total' in err - assert 'loaded 1 databases' in err + assert 'loaded 1 LCA databases' in err def test_index_traverse(): @@ -295,7 +295,7 @@ def test_single_classify(): assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Alteromonadaceae,Alteromonas,Alteromonas_macleodii' in out assert 'classified 1 signatures total' in err - assert 'loaded 1 databases' in err + assert 'loaded 1 LCA databases' in err def test_single_classify_empty(): @@ -312,7 +312,7 @@ def test_single_classify_empty(): assert 'data/GCF_000005845.2_ASM584v2_genomic.fna.gz,nomatch,,,,,,,' in out assert 'classified 1 signatures total' in err - assert 'loaded 1 databases' in err + assert 'loaded 1 LCA databases' in err def test_single_classify_traverse(): @@ -333,7 +333,7 @@ def test_single_classify_traverse(): assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Alteromonadaceae,Alteromonas,Alteromonas_macleodii' in out assert 'classified 1 signatures total' in err - assert 'loaded 1 databases' in err + assert 'loaded 1 LCA databases' in err def test_multi_query_classify_traverse(): @@ -421,7 +421,7 @@ def test_unassigned_internal_index_and_classify(): assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,unassigned,Alteromonadaceae,unassigned,Alteromonas_macleodii' in out assert 'classified 1 signatures total' in err - assert 'loaded 1 databases' in err + assert 'loaded 1 LCA databases' in err def test_unassigned_last_index_and_classify(): @@ -454,7 +454,7 @@ def test_unassigned_last_index_and_classify(): assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Alteromonadaceae,,\r\n' in out assert 'classified 1 signatures total' in err - assert 'loaded 1 databases' in err + assert 'loaded 1 LCA databases' in err def test_index_and_classify_internal_unassigned_multi(): @@ -489,7 +489,7 @@ def test_index_and_classify_internal_unassigned_multi(): assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,unassigned,unassigned,Alteromonadaceae,,\r\n' in out assert 'classified 1 signatures total' in err - assert 'loaded 1 databases' in err + assert 'loaded 1 LCA databases' in err # classify input_sig2 cmd = ['lca', 'classify', '--db', lca_db, '--query', input_sig2] @@ -502,7 +502,7 @@ def test_index_and_classify_internal_unassigned_multi(): assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out assert 'TARA_PSW_MAG_00136,found,Eukaryota,Chlorophyta,Prasinophyceae,unassigned,unassigned,Ostreococcus,\r\n' in out assert 'classified 1 signatures total' in err - assert 'loaded 1 databases' in err + assert 'loaded 1 LCA databases' in err def test_multi_db_classify(): @@ -521,7 +521,7 @@ def test_multi_db_classify(): assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,,,' in out assert 'classified 1 signatures total' in err - assert 'loaded 2 databases' in err + assert 'loaded 2 LCA databases' in err def test_classify_unknown_hashes(): From 2c1cba62c2b73b61e1063d9062f4d0d3f390aa4e Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 4 Feb 2018 06:37:06 -0800 Subject: [PATCH 04/34] cleanup, refactor --- sourmash_lib/lca/command_gather.py | 87 ++++++++++++++++++------------ 1 file changed, 53 insertions(+), 34 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 0f015bb6aa..0db318ad43 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -1,6 +1,8 @@ #! /usr/bin/env python """ -@@ +Execute a greedy search on lineages attached to hashvals in the query. + +Mimics `sourmash gather` but with tax information. """ from __future__ import print_function, division import sys @@ -61,7 +63,7 @@ def format_lineage(lineage_tup): return name -def gather_signature(query_sig, dblist, threshold): +def gather_signature(query_sig, dblist): """ Decompose 'query_sig' using the given list of databases. """ @@ -72,7 +74,6 @@ def gather_signature(query_sig, dblist, threshold): query_mins = set(query_sig.minhash.get_mins()) n_mins = len(query_mins) - found = [] while 1: # find all of the assignments for the current set of hashes assignments = lca_utils.gather_assignments(query_mins, dblist) @@ -81,7 +82,9 @@ def gather_signature(query_sig, dblist, threshold): if not assignments: break - # count 'em all + # count 'em all. note, this will combine identical lineages from + # different source genomes; the only that is counted is the lineage + # assignment. counts = Counter() for hashval, assignment_set in assignments.items(): for assignment in assignment_set: @@ -99,48 +102,33 @@ def gather_signature(query_sig, dblist, threshold): average_abund=0, lineage=top_assignment) - if not len(found): - print_results("") - print_results("overlap p_query") - print_results("--------- -------") - - # output! - pct_query = '{:.1f}%'.format(result.f_orig_query*100) - est_bp = format_bp(result.intersect_bp) - name = format_lineage(result.lineage) - - print_results('{:9} {:>6} {}', est_bp, pct_query, name) # now, remove from query mins. for hashval, assignment_set in assignments.items(): if top_assignment in assignment_set: query_mins.remove(hashval) - found.append(result) + f_unassigned = len(query_mins) / n_mins + est_bp = len(query_mins) * query_sig.minhash.scaled + + yield result, f_unassigned, est_bp ## done. - f_unassigned = len(query_mins) / n_mins - est_bp = len(query_mins) * query_sig.minhash.scaled - - if found: - print_results('') - if f_unassigned: - print_results('{:.1f}% ({}) have no assignment.', f_unassigned*100, - format_bp(est_bp)) - else: - print_results('Query is completely assigned.') - print_results('') - else: - print_results('') - print_results('No assignment for est {} of sequence.', - format_bp(est_bp)) - print_results('') def gather_main(args): """ - @@ + Do a greedy search for the hash components of a query against an LCA db. + + Here we don't actually do a least-common-ancestor search of any kind; we + do essentially the same kind of search as we do in `sourmash gather`, with + the main difference that we are implicitly combining different genomes of + identical lineages. + + This takes advantage of the structure of the LCA db, where we store the + full lineage information for each known hash, as opposed to storing only + the least-common-ancestor information for it. """ p = argparse.ArgumentParser() p.add_argument('query') @@ -162,7 +150,38 @@ def gather_main(args): query_sig.minhash = query_sig.minhash.downsample_scaled(scaled) # do the classification, output results - gather_signature(query_sig, dblist, 0.0) + found = [] + for result, f_unassigned, est_bp in gather_signature(query_sig, dblist): + # is this our first time through the loop? print headers, if so. + if not len(found): + print_results("") + print_results("overlap p_query") + print_results("--------- -------") + + # output! + pct_query = '{:.1f}%'.format(result.f_orig_query*100) + str_bp = format_bp(result.intersect_bp) + name = format_lineage(result.lineage) + + print_results('{:9} {:>6} {}', str_bp, pct_query, name) + + found.append(result) + + if found: + print_results('') + if f_unassigned: + print_results('{:.1f}% ({}) have no assignment.', f_unassigned*100, + format_bp(est_bp)) + else: + print_results('Query is completely assigned.') + print_results('') + # nothing found. + else: + est_bp = len(query_sig.minhash.get_mins()) * query_sig.minhash.scaled + print_results('') + print_results('No assignment for est {} of sequence.', + format_bp(est_bp)) + print_results('') if __name__ == '__main__': From e7cffa7f274f29ac8262785e2fb16322803d776d Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 4 Feb 2018 06:42:18 -0800 Subject: [PATCH 05/34] add some tests --- tests/test_lca.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/test_lca.py b/tests/test_lca.py index 4cef22b141..42cd2ae0ee 100644 --- a/tests/test_lca.py +++ b/tests/test_lca.py @@ -789,3 +789,52 @@ def test_compare_csv_real(): assert '13 incompatible at rank family' in err assert '0 incompatible at rank genus' in err assert '0 incompatible at rank species' in err + + +def test_single_gather(): + with utils.TempDirectory() as location: + db1 = utils.get_test_data('lca/delmont-1.lca.json') + input_sig = utils.get_test_data('lca/TARA_ASE_MAG_00031.sig') + in_dir = os.path.join(location, 'sigs') + os.mkdir(in_dir) + shutil.copyfile(input_sig, os.path.join(in_dir, 'q.sig')) + + cmd = ['lca', 'gather', input_sig, db1] + status, out, err = utils.runscript('sourmash', cmd) + + print(cmd) + print(out) + print(err) + + assert '2.0 Mbp 100.0% Alteromonas Alteromonas_macleodii' in out + assert 'Query is completely assigned.' + + +def test_gather_unknown_hashes(): + with utils.TempDirectory() as location: + taxcsv = utils.get_test_data('lca-root/tax.csv') + input_sig1 = utils.get_test_data('lca-root/TARA_MED_MAG_00029.fa.sig') + input_sig2 = utils.get_test_data('lca-root/TOBG_MED-875.fna.gz.sig') + lca_db = os.path.join(location, 'lca-root.lca.json') + + cmd = ['lca', 'index', taxcsv, lca_db, input_sig2] + status, out, err = utils.runscript('sourmash', cmd) + + print(cmd) + print(out) + print(err) + + assert os.path.exists(lca_db) + + assert '...found 1 genomes with lineage assignments!!' in err + assert '1 assigned lineages out of 2 distinct lineages in spreadsheet' in err + + cmd = ['lca', 'gather', input_sig1, lca_db] + status, out, err = utils.runscript('sourmash', cmd) + + print(cmd) + print(out) + print(err) + + assert '270.0 kbp 11.5% Archaea; family novelFamily_I' in out + assert '88.5% (2.1 Mbp) have no assignment.' in out From f1ba3bd738cbc29daaf66728f611097462f2184c Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 4 Feb 2018 06:58:19 -0800 Subject: [PATCH 06/34] fix output; add short TODO list --- sourmash_lib/lca/command_gather.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 0db318ad43..29dead95e6 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -3,6 +3,11 @@ Execute a greedy search on lineages attached to hashvals in the query. Mimics `sourmash gather` but with tax information. + +CTB TODO: +* sort out f_uniq / f_orig +* add in abundance weighting +* CSV output with full taxonomy """ from __future__ import print_function, division import sys @@ -43,10 +48,15 @@ def format_lineage(lineage_tup): d = dict(lineage_tup) # rank: value if 'genus' in present: + genus = d['genus'] if 'species' in present: - name = '{} {}'.format(d['genus'], d['species']) + species = d['species'] + if species.startswith(genus + ' '): + name = species + else: + name = '{} {}'.format(genus, species) else: - name = '{} sp.'.format(d['genus']) + name = '{} sp.'.format(genus) elif len(present) < 3: lineage_str = lca_utils.zip_lineage(lineage_tup, truncate_empty=True) lineage_str = "; ".join(lineage_str) From 35f4948a8e0c96432b9aa8ee8168d5a00e9d9a0a Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 4 Feb 2018 12:37:18 -0800 Subject: [PATCH 07/34] add output options --- sourmash_lib/commands.py | 4 +- sourmash_lib/lca/command_gather.py | 86 +++++++++++++++++++++++++----- tests/test_sourmash.py | 2 +- 3 files changed, 75 insertions(+), 17 deletions(-) diff --git a/sourmash_lib/commands.py b/sourmash_lib/commands.py index 9df24aa003..0043a00c48 100644 --- a/sourmash_lib/commands.py +++ b/sourmash_lib/commands.py @@ -978,7 +978,7 @@ def format_bp(bp): if args.output_unassigned: if not found: notify('nothing found - entire query signature unassigned.') - if not query.minhash.get_mins(): + elif not query.minhash.get_mins(): notify('no unassigned hashes! not saving.') else: outname = args.output_unassigned.name @@ -986,7 +986,7 @@ def format_bp(bp): e = sourmash_lib.MinHash(ksize=query_ksize, n=0, max_hash=new_max_hash) - e.add_many(query.minhash.get_mins()) + e.add_many(next_query.minhash.get_mins()) sig.save_signatures([ sig.SourmashSignature(e) ], args.output_unassigned) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 29dead95e6..1ea7f78c39 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -22,7 +22,7 @@ from sourmash_lib.lca.lca_utils import debug, set_debug LCAGatherResult = namedtuple('LCAGatherResult', - 'intersect_bp, f_orig_query, f_unique_to_query, f_unique_weighted, average_abund, lineage') + 'intersect_bp, f_unique_to_query, f_unique_weighted, average_abund, lineage') # pretty-printing code. redundant with ../search.py; fix when refactoring. @@ -73,17 +73,25 @@ def format_lineage(lineage_tup): return name -def gather_signature(query_sig, dblist): +def gather_signature(query_sig, dblist, ignore_abundance): """ Decompose 'query_sig' using the given list of databases. """ notify('loaded query: {}... (k={})', query_sig.name()[:30], query_sig.minhash.ksize) - # gather assignments from across all the databases + # extract the basic set of mins query_mins = set(query_sig.minhash.get_mins()) n_mins = len(query_mins) + if query_sig.minhash.track_abundance and not ignore_abundance: + orig_abunds = query_sig.minhash.get_mins(with_abundance=True) + else: + if query_sig.minhash.track_abundance and ignore_abundance: + notify('** ignoring abundance') + orig_abunds = { k: 1 for k in query_mins } + sum_abunds = sum(orig_abunds.values()) + while 1: # find all of the assignments for the current set of hashes assignments = lca_utils.gather_assignments(query_mins, dblist) @@ -103,25 +111,35 @@ def gather_signature(query_sig, dblist): # find the most abundant assignment top_assignment, top_count = next(iter(counts.most_common())) + # now, remove from query mins. + intersect_mins = set() + for hashval, assignment_set in assignments.items(): + if top_assignment in assignment_set: + query_mins.remove(hashval) + intersect_mins.add(hashval) + + # should match! + assert top_count == len(intersect_mins) + # construct 'result' object intersect_bp = top_count * query_sig.minhash.scaled + f_unique_weighted = sum((orig_abunds[k] for k in intersect_mins)) \ + / sum_abunds + average_abund = sum((orig_abunds[k] for k in intersect_mins)) \ + / len(intersect_mins) + result = LCAGatherResult(intersect_bp = intersect_bp, - f_orig_query = top_count / n_mins, - f_unique_to_query=0, - f_unique_weighted=0, - average_abund=0, + f_unique_to_query= top_count / n_mins, + f_unique_weighted=f_unique_weighted, + average_abund=average_abund, lineage=top_assignment) - # now, remove from query mins. - for hashval, assignment_set in assignments.items(): - if top_assignment in assignment_set: - query_mins.remove(hashval) f_unassigned = len(query_mins) / n_mins est_bp = len(query_mins) * query_sig.minhash.scaled - yield result, f_unassigned, est_bp + yield result, f_unassigned, est_bp, query_mins ## done. @@ -144,6 +162,12 @@ def gather_main(args): p.add_argument('query') p.add_argument('db', nargs='+') p.add_argument('-d', '--debug', action='store_true') + p.add_argument('-o', '--output', type=argparse.FileType('wt'), + help='output CSV containing matches to this file') + p.add_argument('--output-unassigned', type=argparse.FileType('wt'), + help='output unassigned portions of the query as a signature to this file') + p.add_argument('--ignore-abundance', action='store_true', + help='do NOT use k-mer abundances if present') args = p.parse_args(args) if args.debug: @@ -161,7 +185,7 @@ def gather_main(args): # do the classification, output results found = [] - for result, f_unassigned, est_bp in gather_signature(query_sig, dblist): + for result, f_unassigned, est_bp, remaining_mins in gather_signature(query_sig, dblist, args.ignore_abundance): # is this our first time through the loop? print headers, if so. if not len(found): print_results("") @@ -169,7 +193,7 @@ def gather_main(args): print_results("--------- -------") # output! - pct_query = '{:.1f}%'.format(result.f_orig_query*100) + pct_query = '{:.1f}%'.format(result.f_unique_to_query*100) str_bp = format_bp(result.intersect_bp) name = format_lineage(result.lineage) @@ -193,6 +217,40 @@ def gather_main(args): format_bp(est_bp)) print_results('') + if not found: + sys.exit(0) + + if args.output: + fieldnames = ['intersect_bp', 'f_unique_to_query', 'f_unique_weighted', + 'average_abund'] + list(lca_utils.taxlist()) + + w = csv.DictWriter(args.output, fieldnames=fieldnames) + w.writeheader() + for result in found: + lineage = result.lineage + d = dict(result._asdict()) + del d['lineage'] + + for (rank, value) in lineage: + d[rank] = value + + w.writerow(d) + + if args.output_unassigned: + if not found: + notify('nothing found - entire query signature unassigned.') + elif not remaining_mins: + notify('no unassigned hashes! not saving.') + else: + outname = args.output_unassigned.name + notify('saving unassigned hashes to "{}"', outname) + + e = query_sig.minhash.copy_and_clear() + e.add_many(remaining_mins) + + sourmash_lib.save_signatures([ sourmash_lib.SourmashSignature(e) ], + args.output_unassigned) + if __name__ == '__main__': sys.exit(gather_main(sys.argv[1:])) diff --git a/tests/test_sourmash.py b/tests/test_sourmash.py index 4c2c8f2a4d..b846ea4a42 100644 --- a/tests/test_sourmash.py +++ b/tests/test_sourmash.py @@ -2217,7 +2217,7 @@ def test_gather_metagenome_output_unassigned(): print(out) print(err) - assert '4.7 Mbp 32.1% 100.0% NC_011294.1 Salmonella enterica subsp...' in out + assert '1.3 Mbp 13.6% 28.2% NC_011294.1 Salmonella enterica subsp...' in out def test_gather_metagenome_downsample(): From 4444f2078a1b34930e8979a96cf646a3bda60352 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Tue, 6 Feb 2018 17:42:57 -0800 Subject: [PATCH 08/34] don't collapse lineages --- sourmash_lib/lca/command_gather.py | 15 ++++++++++----- sourmash_lib/lca/lca_utils.py | 6 +++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 1ea7f78c39..8ce8149354 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -43,6 +43,7 @@ def format_lineage(lineage_tup): """ Pretty print lineage. """ + return str(lineage_tup) # list of ranks present present = [ l.rank for l in lineage_tup if l.name ] d = dict(lineage_tup) # rank: value @@ -94,15 +95,19 @@ def gather_signature(query_sig, dblist, ignore_abundance): while 1: # find all of the assignments for the current set of hashes - assignments = lca_utils.gather_assignments(query_mins, dblist) - + assignments = defaultdict(set) + for hashval in query_mins: + for lca_db in dblist: + lineage_ids = lca_db.hashval_to_lineage_id.get(hashval, []) + for lid in lineage_ids: + md5 = lca_db.lineage_id_to_signature[lid] + assignments[hashval].add(md5) + # none? quit. if not assignments: break - # count 'em all. note, this will combine identical lineages from - # different source genomes; the only that is counted is the lineage - # assignment. + # count the distinct signatures. counts = Counter() for hashval, assignment_set in assignments.items(): for assignment in assignment_set: diff --git a/sourmash_lib/lca/lca_utils.py b/sourmash_lib/lca/lca_utils.py index c839c13d34..115dbcd4b6 100644 --- a/sourmash_lib/lca/lca_utils.py +++ b/sourmash_lib/lca/lca_utils.py @@ -170,7 +170,11 @@ def load(self, db_name): self.hashval_to_lineage_id = hashval_to_lineage_id self.ksize = ksize self.scaled = scaled - self.signatures_to_lineage = signatures_to_lineage + self.signature_to_lineage_id = signatures_to_lineage + lineage_id_to_signature = {} + for k, v in signatures_to_lineage.items(): + lineage_id_to_signature[v] = k + self.lineage_id_to_signature = lineage_id_to_signature def save(self, db_name): "Save to a JSON file." From 2da8a022b4817bdc4108dcc8f21424b7da7ad688 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Wed, 7 Feb 2018 08:21:09 -0800 Subject: [PATCH 09/34] reworked code a bit, still not working --- sourmash_lib/lca/command_gather.py | 56 ++++++++++++++++++++---------- sourmash_lib/lca/lca_utils.py | 5 +++ 2 files changed, 43 insertions(+), 18 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 8ce8149354..7fd4b80841 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -6,8 +6,6 @@ CTB TODO: * sort out f_uniq / f_orig -* add in abundance weighting -* CSV output with full taxonomy """ from __future__ import print_function, division import sys @@ -22,7 +20,7 @@ from sourmash_lib.lca.lca_utils import debug, set_debug LCAGatherResult = namedtuple('LCAGatherResult', - 'intersect_bp, f_unique_to_query, f_unique_weighted, average_abund, lineage') + 'intersect_bp, f_unique_to_query, f_unique_weighted, average_abund, lineage, f_match') # pretty-printing code. redundant with ../search.py; fix when refactoring. @@ -43,7 +41,6 @@ def format_lineage(lineage_tup): """ Pretty print lineage. """ - return str(lineage_tup) # list of ranks present present = [ l.rank for l in lineage_tup if l.name ] d = dict(lineage_tup) # rank: value @@ -93,6 +90,22 @@ def gather_signature(query_sig, dblist, ignore_abundance): orig_abunds = { k: 1 for k in query_mins } sum_abunds = sum(orig_abunds.values()) + # first time through, record FOO. + md5_to_lineage = {} + + # collect all mentioned lineage_ids -> md5s + x = set() + for hashval in query_mins: + for lca_db in dblist: + lineage_ids = lca_db.hashval_to_lineage_id.get(hashval, []) + for lid in lineage_ids: + md5 = lca_db.lineage_id_to_signature[lid] + x.add((lca_db, lid, md5)) + + for lca_db, lid, md5 in x: + md5_to_lineage[md5] = lca_db.lineage_dict[lid] + + # now! do the gather: while 1: # find all of the assignments for the current set of hashes assignments = defaultdict(set) @@ -101,7 +114,9 @@ def gather_signature(query_sig, dblist, ignore_abundance): lineage_ids = lca_db.hashval_to_lineage_id.get(hashval, []) for lid in lineage_ids: md5 = lca_db.lineage_id_to_signature[lid] - assignments[hashval].add(md5) + signature_size = lca_db.lineage_id_counts[lid] + assignments[hashval].add((md5, signature_size)) + print(md5, signature_size) # none? quit. if not assignments: @@ -109,37 +124,40 @@ def gather_signature(query_sig, dblist, ignore_abundance): # count the distinct signatures. counts = Counter() - for hashval, assignment_set in assignments.items(): - for assignment in assignment_set: - counts[assignment] += 1 + for hashval, md5_set in assignments.items(): + for (md5, sigsize) in md5_set: + counts[(md5, sigsize)] += 1 # find the most abundant assignment - top_assignment, top_count = next(iter(counts.most_common())) + (top_md5, top_sigsize), top_count = next(iter(counts.most_common())) # now, remove from query mins. intersect_mins = set() - for hashval, assignment_set in assignments.items(): - if top_assignment in assignment_set: + for hashval, md5_set in assignments.items(): + if (top_md5, sigsize) in md5_set: query_mins.remove(hashval) intersect_mins.add(hashval) # should match! assert top_count == len(intersect_mins) + # calculate size of match (# of hashvals belonging to that sig) + match_size = top_sigsize + # construct 'result' object intersect_bp = top_count * query_sig.minhash.scaled f_unique_weighted = sum((orig_abunds[k] for k in intersect_mins)) \ / sum_abunds average_abund = sum((orig_abunds[k] for k in intersect_mins)) \ / len(intersect_mins) + f_match = len(intersect_mins) / match_size result = LCAGatherResult(intersect_bp = intersect_bp, f_unique_to_query= top_count / n_mins, f_unique_weighted=f_unique_weighted, average_abund=average_abund, - lineage=top_assignment) - - + f_match=f_match, + lineage=md5_to_lineage[top_md5]) f_unassigned = len(query_mins) / n_mins est_bp = len(query_mins) * query_sig.minhash.scaled @@ -194,15 +212,17 @@ def gather_main(args): # is this our first time through the loop? print headers, if so. if not len(found): print_results("") - print_results("overlap p_query") - print_results("--------- -------") + print_results("overlap p_query p_match ") + print_results("--------- ------- --------") # output! pct_query = '{:.1f}%'.format(result.f_unique_to_query*100) + pct_match = '{:.1f}%'.format(result.f_match*100) str_bp = format_bp(result.intersect_bp) name = format_lineage(result.lineage) - print_results('{:9} {:>6} {}', str_bp, pct_query, name) + print_results('{:9} {:>6} {:>6} {}', str_bp, pct_query, + pct_match, name) found.append(result) @@ -226,7 +246,7 @@ def gather_main(args): sys.exit(0) if args.output: - fieldnames = ['intersect_bp', 'f_unique_to_query', 'f_unique_weighted', + fieldnames = ['intersect_bp', 'f_match', 'f_unique_to_query', 'f_unique_weighted', 'average_abund'] + list(lca_utils.taxlist()) w = csv.DictWriter(args.output, fieldnames=fieldnames) diff --git a/sourmash_lib/lca/lca_utils.py b/sourmash_lib/lca/lca_utils.py index 115dbcd4b6..7babcf1dce 100644 --- a/sourmash_lib/lca/lca_utils.py +++ b/sourmash_lib/lca/lca_utils.py @@ -161,8 +161,12 @@ def load(self, db_name): # JSON doesn't have a 64 bit type so stores them as strings) hashval_to_lineage_id_2 = load_d['hashval_assignments'] hashval_to_lineage_id = {} + lineage_id_counts = defaultdict(int) + for k, v in hashval_to_lineage_id_2.items(): hashval_to_lineage_id[int(k)] = v + for vv in v: + lineage_id_counts[vv] += 1 signatures_to_lineage = load_d['signatures_to_lineage'] @@ -175,6 +179,7 @@ def load(self, db_name): for k, v in signatures_to_lineage.items(): lineage_id_to_signature[v] = k self.lineage_id_to_signature = lineage_id_to_signature + self.lineage_id_counts = lineage_id_counts def save(self, db_name): "Save to a JSON file." From 9ff705ca547067c1474e5f82a1e685e0f5ed2c18 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 11 Feb 2018 15:24:15 -0800 Subject: [PATCH 10/34] add some docs on search, gather, and lca --- doc/classifying-signatures.md | 101 ++++++++++++++++++++++++++++++++++ doc/index.rst | 1 + 2 files changed, 102 insertions(+) create mode 100644 doc/classifying-signatures.md diff --git a/doc/classifying-signatures.md b/doc/classifying-signatures.md new file mode 100644 index 0000000000..e6563a6bde --- /dev/null +++ b/doc/classifying-signatures.md @@ -0,0 +1,101 @@ +# Classifying signatures: `search`, `gather`, and `lca` methods. + +sourmash provides several different techniques for doing +classification and breakdown of signatures. + +## Searching for similar samples with `search`. + +The `sourmash search` command is most useful when you are looking for +high similarity matches to other signatures; this is the most basic use +case for MinHash searching. The command takes a query signature and one +or more search signatures, and finds all the matches it can above a particular +threshold. + +By default `search` will find matches with high [*Jaccard +similarity*](https://en.wikipedia.org/wiki/Jaccard_index), which will +consider all of the k-mers in the union of the two samples. +Practically, this means that you will only find matches if there is +both high overlap between the samples *and* relatively few k-mers that +are disjoint between the samples. This is effective for finding genomes +or transcriptomes that are similar but rarely works well for samples +of vastly different sizes. + +One useful modification to `search` is to calculate containment with +`--containment` instead of the (default) similarity; this will find +matches where the query is contained within the subject, but the +subject may have many other k-mers in it. For example, if you are using +a plasmid as a query, you would use `--containment` to find genomes +that contained that plasmid. + +See [the main sourmash +tutorial](http://sourmash.readthedocs.io/en/latest/tutorials.html#make-and-search-a-database-quickly) +for information on using `search` with and without `--containment`. + +## Breaking down metagenomic samples with `gather` and `lca` + +Neither search option (similarity or containment) is effective when +comparing or searching with metagenomes, which typically have a +mixture of many different genomes. While you might use containment to +see if a query genome is present in one or more metagenomes, a common +question to ask is the reverse: **what genomes are in my metagenome?* + +We have implemented two algorithms in sourmash to do this. + +One, approaches based on lowest common ancestor ("LCA"), uses +taxonomic information from e.g. GenBank to classify individual k-mers, +and then infers taxonomic distributions of metagenome contents from +the presence of these individual k-mers. (This is the approach +pioneered by [Kraken](https://ccb.jhu.edu/software/kraken/) and many +other tools.) `sourmash lca` can be used to classify individual +genome bins with `classify`, or summarize metagenome taxonomy with +`summarize`. The [sourmash lca +tutorial](http://sourmash.readthedocs.io/en/latest/tutorials-lca.html) +shows how to use the `lca classify` and `summarize` commands, and also +provides guidance on building your own database. + +The other approach, `gather`, breaks a metagenome down into individual +genomes based on greedy partitioning. Essentially, it takes a query +metagenome and searches the database for the most highly contained +genome; it then subtracts that match from the metagenome, and repeats. +At the end it reports how much of the metagenome remains unknown. The +[basic sourmash +tutorial](http://sourmash.readthedocs.io/en/latest/tutorials.html#what-s-in-my-metagenome) +has some sample output from using gather with GenBank. + +Our preliminary benchmarking suggests that `gather` is the most accurate +method available for doing strain-level resolution of genomes. More on that +as we move forward! + +## To do taxonomy, or not to do taxonomy? + +By default, there is no taxonomic information provided in sourmash +signatures or SBT databases of signatures. Generally what this means +is that you will have to provide your own mapping from a match to some +taxonomic hierarchy. This is generally appropriate when you are working +with lots of genomes that have no taxonomic information. + +The `lca` subcommands, however, work with LCA databases, which can only +be built for genomes for which taxonomic information is present. This is +one of the main differences between the `sourmash lca` subcommands and the +basic `sourmash search` functionality. + +We're still thinking about how to combine taxonomy and search, so feedback +is welcome. + +## What commands should I use? + +It's not always easy to figure that out, we know! We're thinking about +better tutorials and documentation constantly. + +We suggest the following approach: + +* build some signatures and do some searches, to get some basic familiarity + with sourmash; + +* explore the available databases; + +* then ask questions [via the issue tracker](https://github.com/dib-lab/sourmash/issues) and we will do our best to help you out! + +This helps us figure out what people are actually interested in doing, and +any help we provide via the issue tracker will eventually be added into the +documentation. diff --git a/doc/index.rst b/doc/index.rst index d7cc252978..4ac686a11c 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -65,6 +65,7 @@ Contents: command-line tutorials tutorials-lca + classifying-signatures databases api api-example From e5e3c9f132a31323ed7686a308a3c95d83d8793f Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 11 Feb 2018 19:44:03 -0800 Subject: [PATCH 11/34] updated some text --- doc/classifying-signatures.md | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/doc/classifying-signatures.md b/doc/classifying-signatures.md index e6563a6bde..46ee611891 100644 --- a/doc/classifying-signatures.md +++ b/doc/classifying-signatures.md @@ -68,19 +68,25 @@ as we move forward! ## To do taxonomy, or not to do taxonomy? -By default, there is no taxonomic information provided in sourmash -signatures or SBT databases of signatures. Generally what this means -is that you will have to provide your own mapping from a match to some -taxonomic hierarchy. This is generally appropriate when you are working -with lots of genomes that have no taxonomic information. - -The `lca` subcommands, however, work with LCA databases, which can only -be built for genomes for which taxonomic information is present. This is -one of the main differences between the `sourmash lca` subcommands and the -basic `sourmash search` functionality. - -We're still thinking about how to combine taxonomy and search, so feedback -is welcome. +By default, there is no structured taxonomic information available in +sourmash signatures or SBT databases of signatures. Generally what +this means is that you will have to provide your own mapping from a +match to some taxonomic hierarchy. This is generally the case when +you are working with lots of genomes that have no taxonomic +information. + +The `lca` subcommands, however, work with LCA databases, which contain +taxonomic information by construction. This is one of the main +differences between the `sourmash lca` subcommands and the basic +`sourmash search` functionality. So the `lca` subcommands will generally +output structured taxonomic information, and these are what you should look +to if you are interested in doing classification. + +It's important to note that taxonomy based on k-mers is very, very +specific and if you get a match, it's pretty reliable. On the +converse, however, k-mer identification is very brittle with respect +to evolutionary divergence, so if you don't get a match it may only mean +that the particular species isn't known. ## What commands should I use? From 65893b2f767e814de4e74ce5928f772d9a298f0a Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Mon, 12 Feb 2018 15:53:15 -0800 Subject: [PATCH 12/34] Fix formatting error --- doc/classifying-signatures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/classifying-signatures.md b/doc/classifying-signatures.md index 46ee611891..e1702a825b 100644 --- a/doc/classifying-signatures.md +++ b/doc/classifying-signatures.md @@ -37,7 +37,7 @@ Neither search option (similarity or containment) is effective when comparing or searching with metagenomes, which typically have a mixture of many different genomes. While you might use containment to see if a query genome is present in one or more metagenomes, a common -question to ask is the reverse: **what genomes are in my metagenome?* +question to ask is the reverse: **what genomes are in my metagenome?** We have implemented two algorithms in sourmash to do this. From 18e3e5a0b3a8fc6e7f48a560828e81f4a747f679 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 19:53:36 -0800 Subject: [PATCH 13/34] pointed at search.format_bp --- sourmash_lib/lca/command_gather.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 1ea7f78c39..0f02ede2c4 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -20,25 +20,12 @@ from sourmash_lib.logging import notify, error, print_results from sourmash_lib.lca import lca_utils from sourmash_lib.lca.lca_utils import debug, set_debug +from sourmash_lib.search import format_bp LCAGatherResult = namedtuple('LCAGatherResult', 'intersect_bp, f_unique_to_query, f_unique_weighted, average_abund, lineage') -# pretty-printing code. redundant with ../search.py; fix when refactoring. -def format_bp(bp): - bp = float(bp) - if bp < 500: - return '{:.0f} bp'.format(bp) - elif bp <= 500e3: - return '{:.1f} kbp'.format(round(bp / 1e3, 1)) - elif bp < 500e6: - return '{:.1f} Mbp'.format(round(bp / 1e6, 1)) - elif bp < 500e9: - return '{:.1f} Gbp'.format(round(bp / 1e9, 1)) - return '???' - - def format_lineage(lineage_tup): """ Pretty print lineage. From 108dd768f26d99d045dafa3eb7aa14efa3508ff1 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 19:57:25 -0800 Subject: [PATCH 14/34] add check for sourmash gather fix --- tests/test_sourmash.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_sourmash.py b/tests/test_sourmash.py index f05c9c3141..d05f6314d9 100644 --- a/tests/test_sourmash.py +++ b/tests/test_sourmash.py @@ -2549,12 +2549,13 @@ def test_gather_metagenome_output_unassigned(): testdata2_glob = utils.get_test_data('gather/GCF_000009505.1*.sig') testdata2_sigs = glob.glob(testdata2_glob)[0] - cmd = 'gather {} {} -k 21'.format('unassigned.sig', testdata2_sigs) + cmd = 'gather {} {} {} -k 21'.format('unassigned.sig', testdata_sigs, testdata2_sigs) status, out, err = utils.runscript('sourmash', cmd.split(' '), in_directory=location) print(out) print(err) + assert '4.9 Mbp 33.2% 100.0% NC_003198.1' not in out assert '1.3 Mbp 13.6% 28.2% NC_011294.1 Salmonella enterica subsp...' in out From 8fc1073a1a4e0135038c4d00f2367cb4428b0a9c Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 20:01:36 -0800 Subject: [PATCH 15/34] fix argparse reporting --- sourmash_lib/lca/command_classify.py | 2 +- sourmash_lib/lca/command_compare_csv.py | 2 +- sourmash_lib/lca/command_gather.py | 2 +- sourmash_lib/lca/command_index.py | 2 +- sourmash_lib/lca/command_rankinfo.py | 4 ++-- sourmash_lib/lca/command_summarize.py | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sourmash_lib/lca/command_classify.py b/sourmash_lib/lca/command_classify.py index f3c3d9e177..2c517b8b37 100644 --- a/sourmash_lib/lca/command_classify.py +++ b/sourmash_lib/lca/command_classify.py @@ -80,7 +80,7 @@ def classify(args): """ main single-genome classification function. """ - p = argparse.ArgumentParser() + p = argparse.ArgumentParser(prog="sourmash lca classify") p.add_argument('--db', nargs='+', action='append') p.add_argument('--query', nargs='+', action='append') p.add_argument('--threshold', type=int, default=DEFAULT_THRESHOLD) diff --git a/sourmash_lib/lca/command_compare_csv.py b/sourmash_lib/lca/command_compare_csv.py index 1801c74597..9651385ad3 100644 --- a/sourmash_lib/lca/command_compare_csv.py +++ b/sourmash_lib/lca/command_compare_csv.py @@ -15,7 +15,7 @@ from sourmash_lib.lca.command_index import load_taxonomy_assignments def compare_csv(args): - p = argparse.ArgumentParser() + p = argparse.ArgumentParser(prog="sourmash lca compare_csv") p.add_argument('csv1', help='taxonomy spreadsheet output by classify') p.add_argument('csv2', help='custom taxonomy spreadsheet') p.add_argument('-d', '--debug', action='store_true') diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 0f02ede2c4..d719e80d89 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -145,7 +145,7 @@ def gather_main(args): full lineage information for each known hash, as opposed to storing only the least-common-ancestor information for it. """ - p = argparse.ArgumentParser() + p = argparse.ArgumentParser(prog="sourmash lca gather") p.add_argument('query') p.add_argument('db', nargs='+') p.add_argument('-d', '--debug', action='store_true') diff --git a/sourmash_lib/lca/command_index.py b/sourmash_lib/lca/command_index.py index 639f5f9a9b..b4b2fa8cea 100644 --- a/sourmash_lib/lca/command_index.py +++ b/sourmash_lib/lca/command_index.py @@ -99,7 +99,7 @@ def index(args): """ main function for building an LCA database. """ - p = argparse.ArgumentParser() + p = argparse.ArgumentParser(prog="sourmash lca index") p.add_argument('csv', help='taxonomy spreadsheet') p.add_argument('lca_db_out', help='name to save database to') p.add_argument('signatures', nargs='+', diff --git a/sourmash_lib/lca/command_rankinfo.py b/sourmash_lib/lca/command_rankinfo.py index 833fba84e4..40a1dd43f0 100644 --- a/sourmash_lib/lca/command_rankinfo.py +++ b/sourmash_lib/lca/command_rankinfo.py @@ -45,9 +45,9 @@ def make_lca_counts(dblist): def rankinfo_main(args): """ - main summarization function: + rankinfo! """ - p = argparse.ArgumentParser() + p = argparse.ArgumentParser(prog="sourmash lca rankinfo") p.add_argument('db', nargs='+') p.add_argument('--scaled', type=float) p.add_argument('-d', '--debug', action='store_true') diff --git a/sourmash_lib/lca/command_summarize.py b/sourmash_lib/lca/command_summarize.py index f0d43ada05..7f28dbbb60 100644 --- a/sourmash_lib/lca/command_summarize.py +++ b/sourmash_lib/lca/command_summarize.py @@ -60,7 +60,7 @@ def summarize_main(args): """ main summarization function. """ - p = argparse.ArgumentParser() + p = argparse.ArgumentParser(prog="sourmash lca summarize") p.add_argument('--db', nargs='+', action='append') p.add_argument('--query', nargs='+', action='append') p.add_argument('--threshold', type=int, default=DEFAULT_THRESHOLD) From 9a38ac663336d363a73f0d313a552292a26f8506 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 20:42:21 -0800 Subject: [PATCH 16/34] added strain output; added saving of signatures_to_name --- sourmash_lib/lca/command_gather.py | 7 ++++--- sourmash_lib/lca/command_index.py | 5 ++++- sourmash_lib/lca/lca_utils.py | 19 ++++++++++++------- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index f504cc2465..a1030475b6 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -34,7 +34,9 @@ def format_lineage(lineage_tup): if 'genus' in present: genus = d['genus'] - if 'species' in present: + if 'strain' in present: + name = d['strain'] + elif 'species' in present: species = d['species'] if species.startswith(genus + ' '): name = species @@ -103,7 +105,6 @@ def gather_signature(query_sig, dblist, ignore_abundance): md5 = lca_db.lineage_id_to_signature[lid] signature_size = lca_db.lineage_id_counts[lid] assignments[hashval].add((md5, signature_size)) - print(md5, signature_size) # none? quit. if not assignments: @@ -126,7 +127,7 @@ def gather_signature(query_sig, dblist, ignore_abundance): intersect_mins.add(hashval) # should match! - assert top_count == len(intersect_mins) + # @@CTB assert top_count == len(intersect_mins) # calculate size of match (# of hashvals belonging to that sig) match_size = top_sigsize diff --git a/sourmash_lib/lca/command_index.py b/sourmash_lib/lca/command_index.py index b4b2fa8cea..6c59411d16 100644 --- a/sourmash_lib/lca/command_index.py +++ b/sourmash_lib/lca/command_index.py @@ -163,6 +163,7 @@ def index(args): # load signatures, construct index of hashvals to lineages hashval_to_lineage = defaultdict(set) md5_to_lineage = {} + md5_to_name = {} notify('finding signatures...') if args.traverse_directory: @@ -214,6 +215,7 @@ def index(args): # store md5 -> lineage too md5_to_lineage[sig.md5sum()] = lineage_idx + md5_to_name[sig.md5sum()] = sig.name() notify(u'\r\033[K', end=u'') notify('...found {} genomes with lineage assignments!!', @@ -242,7 +244,8 @@ def index(args): db.hashval_to_lineage_id = hashval_to_lineage db.ksize = int(args.ksize) db.scaled = int(args.scaled) - db.signatures_to_lineage = md5_to_lineage + db.signatures_to_lineage_id = md5_to_lineage + db.signatures_to_name = md5_to_name db.save(db_outfile) diff --git a/sourmash_lib/lca/lca_utils.py b/sourmash_lib/lca/lca_utils.py index 7babcf1dce..fcdca0dc27 100644 --- a/sourmash_lib/lca/lca_utils.py +++ b/sourmash_lib/lca/lca_utils.py @@ -21,7 +21,7 @@ # ordered list of taxonomic ranks -def taxlist(include_strain=False): +def taxlist(include_strain=True): for k in ['superkingdom', 'phylum', 'class', 'order', 'family', 'genus', 'species']: yield k @@ -120,14 +120,16 @@ class LCA_Database(object): obj.hashval_to_lineage_id: key 'hashval' => set('lineage_id') obj.ksize: k-mer size obj.scaled: scaled value - obj.signatures_to_lineage: key 'md5sum' => 'lineage_id' + obj.signatures_to_lineage_id: key 'md5sum' => 'lineage_id' + obj.signatures_to_name: key 'md5sum' => 'name' from original signature """ def __init__(self): self.lineage_dict = None self.hashval_to_lineage_id = None self.ksize = None self.scaled = None - self.signatures_to_lineage = None + self.signatures_to_lineage_id = None + self.signatures_to_name = None def load(self, db_name): "Load from a JSON file." @@ -168,15 +170,17 @@ def load(self, db_name): for vv in v: lineage_id_counts[vv] += 1 - signatures_to_lineage = load_d['signatures_to_lineage'] + signatures_to_lineage_id = load_d['signatures_to_lineage'] + signatures_to_name = load_d.get('signatures_to_name', None) self.lineage_dict = lineage_dict self.hashval_to_lineage_id = hashval_to_lineage_id self.ksize = ksize self.scaled = scaled - self.signature_to_lineage_id = signatures_to_lineage + self.signature_to_lineage_id = signatures_to_lineage_id + self.signature_to_name = signatures_to_name lineage_id_to_signature = {} - for k, v in signatures_to_lineage.items(): + for k, v in signatures_to_lineage_id.items(): lineage_id_to_signature[v] = k self.lineage_id_to_signature = lineage_id_to_signature self.lineage_id_counts = lineage_id_counts @@ -205,7 +209,8 @@ def save(self, db_name): # convert values from sets to lists, so that JSON knows how to save save_d['hashval_assignments'] = \ dict((k, list(v)) for (k, v) in self.hashval_to_lineage_id.items()) - save_d['signatures_to_lineage'] = self.signatures_to_lineage + save_d['signatures_to_lineage'] = self.signatures_to_lineage_id + save_d['signatures_to_name'] = self.signatures_to_name json.dump(save_d, fp) def downsample_scaled(self, scaled): From ef6cd39818cc1ade17546e15b4953343aec06a36 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 20:47:01 -0800 Subject: [PATCH 17/34] update tests for strain addition --- tests/test-data/lca/classify-by-both.csv | 42 ++++++++++++------------ tests/test_lca.py | 16 +++++---- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/tests/test-data/lca/classify-by-both.csv b/tests/test-data/lca/classify-by-both.csv index fa4f55dcfc..f003b730c2 100644 --- a/tests/test-data/lca/classify-by-both.csv +++ b/tests/test-data/lca/classify-by-both.csv @@ -1,21 +1,21 @@ -ID,status,superkingdom,phylum,class,order,family,genus,species -TARA_ANE_MAG_00011,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rickettsiales,,, -TARA_ANE_MAG_00015,found,Bacteria,Chloroflexi,Dehalococcoidetes,,,, -TARA_ANE_MAG_00041,found,Bacteria,Bacteroidetes,Flavobacteriia,Flavobacteriales,,, -TARA_ANE_MAG_00044,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rickettsiales,,, -TARA_ANE_MAG_00063,found,Archaea,Euryarchaeota,,,,, -TARA_ANE_MAG_00068,found,Bacteria,Candidatus_Marinimicrobia ,,,,, -TARA_ANE_MAG_00069,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rickettsiales,,, -TARA_ANW_MAG_00005,found,Bacteria,Proteobacteria,Gammaproteobacteria,,,, -TARA_ANW_MAG_00020,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rhodospirillales,Rhodospirillaceae,, -TARA_ANW_MAG_00034,found,Bacteria,Bacteroidetes,Flavobacteriia,Flavobacteriales,,, -TARA_ANW_MAG_00051,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rickettsiales,Pelagibacteraceae,, -TARA_ANW_MAG_00083,found,Eukaryota,Haptophyta,Prymnesiophyceae,Isochrysidales,Noelaerhabdaceae,Emiliania, -TARA_ANW_MAG_00084,found,Eukaryota,Cryptophyta,Cryptophyceae,Pyrenomonadales,Geminigeraceae,Guillardia, -TARA_ANW_MAG_00085,found,Eukaryota,Haptophyta,Prymnesiophyceae,Isochrysidales,Noelaerhabdaceae,Emiliania, -TARA_ASE_MAG_00007,found,Bacteria,Proteobacteria,Gammaproteobacteria,,,, -TARA_ASE_MAG_00009,found,Archaea,Euryarchaeota,,,,, -TARA_ASE_MAG_00015,found,Bacteria,Bacteroidetes,Flavobacteriia,Flavobacteriales,,, -TARA_ASE_MAG_00018,found,Archaea,Euryarchaeota,,,,, -TARA_ASE_MAG_00028,found,Bacteria,Planctomycetes,Planctomycetia,Planctomycetales,Planctomycetaceae,, -TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Alteromonadaceae,Alteromonas,Alteromonas_macleodii +ID,status,superkingdom,phylum,class,order,family,genus,species,strain +TARA_ANE_MAG_00011,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rickettsiales,,,, +TARA_ANE_MAG_00015,found,Bacteria,Chloroflexi,Dehalococcoidetes,,,,, +TARA_ANE_MAG_00041,found,Bacteria,Bacteroidetes,Flavobacteriia,Flavobacteriales,,,, +TARA_ANE_MAG_00044,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rickettsiales,,,, +TARA_ANE_MAG_00063,found,Archaea,Euryarchaeota,,,,,, +TARA_ANE_MAG_00068,found,Bacteria,Candidatus_Marinimicrobia ,,,,,, +TARA_ANE_MAG_00069,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rickettsiales,,,, +TARA_ANW_MAG_00005,found,Bacteria,Proteobacteria,Gammaproteobacteria,,,,, +TARA_ANW_MAG_00020,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rhodospirillales,Rhodospirillaceae,,, +TARA_ANW_MAG_00034,found,Bacteria,Bacteroidetes,Flavobacteriia,Flavobacteriales,,,, +TARA_ANW_MAG_00051,found,Bacteria,Proteobacteria,Alphaproteobacteria,Rickettsiales,Pelagibacteraceae,,, +TARA_ANW_MAG_00083,found,Eukaryota,Haptophyta,Prymnesiophyceae,Isochrysidales,Noelaerhabdaceae,Emiliania,, +TARA_ANW_MAG_00084,found,Eukaryota,Cryptophyta,Cryptophyceae,Pyrenomonadales,Geminigeraceae,Guillardia,, +TARA_ANW_MAG_00085,found,Eukaryota,Haptophyta,Prymnesiophyceae,Isochrysidales,Noelaerhabdaceae,Emiliania,, +TARA_ASE_MAG_00007,found,Bacteria,Proteobacteria,Gammaproteobacteria,,,,, +TARA_ASE_MAG_00009,found,Archaea,Euryarchaeota,,,,,, +TARA_ASE_MAG_00015,found,Bacteria,Bacteroidetes,Flavobacteriia,Flavobacteriales,,,, +TARA_ASE_MAG_00018,found,Archaea,Euryarchaeota,,,,,, +TARA_ASE_MAG_00028,found,Bacteria,Planctomycetes,Planctomycetia,Planctomycetales,Planctomycetaceae,,, +TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Alteromonadaceae,Alteromonas,Alteromonas_macleodii, diff --git a/tests/test_lca.py b/tests/test_lca.py index 42cd2ae0ee..e72b73d06a 100644 --- a/tests/test_lca.py +++ b/tests/test_lca.py @@ -310,7 +310,7 @@ def test_single_classify_empty(): print(out) print(err) - assert 'data/GCF_000005845.2_ASM584v2_genomic.fna.gz,nomatch,,,,,,,' in out + assert 'data/GCF_000005845.2_ASM584v2_genomic.fna.gz,nomatch,,,,,,,,' in out assert 'classified 1 signatures total' in err assert 'loaded 1 LCA databases' in err @@ -452,7 +452,7 @@ def test_unassigned_last_index_and_classify(): print(err) assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out - assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Alteromonadaceae,,\r\n' in out + assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Alteromonadaceae,,,\r\n' in out assert 'classified 1 signatures total' in err assert 'loaded 1 LCA databases' in err @@ -487,7 +487,7 @@ def test_index_and_classify_internal_unassigned_multi(): print(err) assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out - assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,unassigned,unassigned,Alteromonadaceae,,\r\n' in out + assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,unassigned,unassigned,Alteromonadaceae,,,\r\n' in out assert 'classified 1 signatures total' in err assert 'loaded 1 LCA databases' in err @@ -500,7 +500,7 @@ def test_index_and_classify_internal_unassigned_multi(): print(err) assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out - assert 'TARA_PSW_MAG_00136,found,Eukaryota,Chlorophyta,Prasinophyceae,unassigned,unassigned,Ostreococcus,\r\n' in out + assert 'TARA_PSW_MAG_00136,found,Eukaryota,Chlorophyta,Prasinophyceae,unassigned,unassigned,Ostreococcus,,\r\n' in out assert 'classified 1 signatures total' in err assert 'loaded 1 LCA databases' in err @@ -519,7 +519,7 @@ def test_multi_db_classify(): print(err) assert 'ID,status,superkingdom,phylum,class,order,family,genus,species' in out - assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,,,' in out + assert 'TARA_ASE_MAG_00031,found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,,,,' in out assert 'classified 1 signatures total' in err assert 'loaded 2 LCA databases' in err @@ -719,6 +719,7 @@ def test_rankinfo_on_multi(): lines.remove('family: 695 (19.2%)') lines.remove('genus: 681 (18.8%)') lines.remove('species: 200 (5.5%)') + lines.remove('strain: 0 (0.0%)') assert not lines @@ -742,6 +743,7 @@ def test_rankinfo_on_single(): lines.remove('family: 695 (19.2%)') lines.remove('genus: 681 (18.8%)') lines.remove('species: 200 (5.5%)') + lines.remove('strain: 0 (0.0%)') assert not lines @@ -806,7 +808,7 @@ def test_single_gather(): print(out) print(err) - assert '2.0 Mbp 100.0% Alteromonas Alteromonas_macleodii' in out + assert '2.0 Mbp 100.0% 100.0% Alteromonas Alteromonas_macleodii' in out assert 'Query is completely assigned.' @@ -836,5 +838,5 @@ def test_gather_unknown_hashes(): print(out) print(err) - assert '270.0 kbp 11.5% Archaea; family novelFamily_I' in out + assert '270.0 kbp 11.5% 21.4% Archaea; family novelFamily_I' in out assert '88.5% (2.1 Mbp) have no assignment.' in out From 26b9d12128eef9cc84ae52cf99d2109395f6f972 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 20:48:52 -0800 Subject: [PATCH 18/34] fix genus display if _ is present --- sourmash_lib/lca/command_gather.py | 3 ++- tests/test_lca.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index a1030475b6..8235cf05e5 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -38,7 +38,8 @@ def format_lineage(lineage_tup): name = d['strain'] elif 'species' in present: species = d['species'] - if species.startswith(genus + ' '): + if species.startswith(genus + ' ') or \ + species.startswith(genus + '_'): name = species else: name = '{} {}'.format(genus, species) diff --git a/tests/test_lca.py b/tests/test_lca.py index e72b73d06a..c2c67f3322 100644 --- a/tests/test_lca.py +++ b/tests/test_lca.py @@ -808,7 +808,7 @@ def test_single_gather(): print(out) print(err) - assert '2.0 Mbp 100.0% 100.0% Alteromonas Alteromonas_macleodii' in out + assert '2.0 Mbp 100.0% 100.0% Alteromonas_macleodii' in out assert 'Query is completely assigned.' From 48f5b4cff63817f230d562a61b75a32d819c834c Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 21:00:56 -0800 Subject: [PATCH 19/34] fix very challenging error to find :) --- sourmash_lib/lca/command_gather.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 8235cf05e5..5e5f181199 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -123,12 +123,12 @@ def gather_signature(query_sig, dblist, ignore_abundance): # now, remove from query mins. intersect_mins = set() for hashval, md5_set in assignments.items(): - if (top_md5, sigsize) in md5_set: + if (top_md5, top_sigsize) in md5_set: query_mins.remove(hashval) intersect_mins.add(hashval) # should match! - # @@CTB assert top_count == len(intersect_mins) + assert top_count == len(intersect_mins) # calculate size of match (# of hashvals belonging to that sig) match_size = top_sigsize From e4a34c52005d27ebe11142260f21ed6ed1633f6b Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 21:08:47 -0800 Subject: [PATCH 20/34] added name to lca gather output --- sourmash_lib/lca/command_gather.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 5e5f181199..605fa176e7 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -2,10 +2,7 @@ """ Execute a greedy search on lineages attached to hashvals in the query. -Mimics `sourmash gather` but with tax information. - -CTB TODO: -* sort out f_uniq / f_orig +Mimics `sourmash gather` but provides taxonomic information. """ from __future__ import print_function, division import sys @@ -21,7 +18,7 @@ from sourmash_lib.search import format_bp LCAGatherResult = namedtuple('LCAGatherResult', - 'intersect_bp, f_unique_to_query, f_unique_weighted, average_abund, lineage, f_match') + 'intersect_bp, f_unique_to_query, f_unique_weighted, average_abund, lineage, f_match, name') def format_lineage(lineage_tup): @@ -80,10 +77,11 @@ def gather_signature(query_sig, dblist, ignore_abundance): orig_abunds = { k: 1 for k in query_mins } sum_abunds = sum(orig_abunds.values()) - # first time through, record FOO. - md5_to_lineage = {} - # collect all mentioned lineage_ids -> md5s + # collect all mentioned lineage_ids -> md5s, from across the databases + md5_to_lineage = {} + md5_to_name = {} + x = set() for hashval in query_mins: for lca_db in dblist: @@ -94,6 +92,10 @@ def gather_signature(query_sig, dblist, ignore_abundance): for lca_db, lid, md5 in x: md5_to_lineage[md5] = lca_db.lineage_dict[lid] + if lca_db.signature_to_name: + md5_to_name[md5] = lca_db.signature_to_name[md5] + else: + md5_to_name[md5] = '' # now! do the gather: while 1: @@ -146,7 +148,8 @@ def gather_signature(query_sig, dblist, ignore_abundance): f_unique_weighted=f_unique_weighted, average_abund=average_abund, f_match=f_match, - lineage=md5_to_lineage[top_md5]) + lineage=md5_to_lineage[top_md5], + name=md5_to_name[top_md5]) f_unassigned = len(query_mins) / n_mins est_bp = len(query_mins) * query_sig.minhash.scaled @@ -236,7 +239,7 @@ def gather_main(args): if args.output: fieldnames = ['intersect_bp', 'f_match', 'f_unique_to_query', 'f_unique_weighted', - 'average_abund'] + list(lca_utils.taxlist()) + 'average_abund', 'name'] + list(lca_utils.taxlist()) w = csv.DictWriter(args.output, fieldnames=fieldnames) w.writeheader() From 8de54aa0f39f4a263c4c3c6f4c61f64eb22876db Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 21:18:23 -0800 Subject: [PATCH 21/34] output equivalent matches --- sourmash_lib/lca/command_gather.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 605fa176e7..e6b5336cc7 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -18,7 +18,7 @@ from sourmash_lib.search import format_bp LCAGatherResult = namedtuple('LCAGatherResult', - 'intersect_bp, f_unique_to_query, f_unique_weighted, average_abund, lineage, f_match, name') + 'intersect_bp, f_unique_to_query, f_unique_weighted, average_abund, lineage, f_match, name, n_equal_matches') def format_lineage(lineage_tup): @@ -120,7 +120,15 @@ def gather_signature(query_sig, dblist, ignore_abundance): counts[(md5, sigsize)] += 1 # find the most abundant assignment - (top_md5, top_sigsize), top_count = next(iter(counts.most_common())) + common_iter = iter(counts.most_common()) + (top_md5, top_sigsize), top_count = next(common_iter) + + equiv_counts = 0 + for (_, _), count in common_iter: + if count == top_count: + equiv_counts += 1 + else: + break # now, remove from query mins. intersect_mins = set() @@ -149,7 +157,8 @@ def gather_signature(query_sig, dblist, ignore_abundance): average_abund=average_abund, f_match=f_match, lineage=md5_to_lineage[top_md5], - name=md5_to_name[top_md5]) + name=md5_to_name[top_md5], + n_equal_matches=equiv_counts) f_unassigned = len(query_mins) / n_mins est_bp = len(query_mins) * query_sig.minhash.scaled @@ -213,8 +222,12 @@ def gather_main(args): str_bp = format_bp(result.intersect_bp) name = format_lineage(result.lineage) - print_results('{:9} {:>6} {:>6} {}', str_bp, pct_query, - pct_match, name) + equal_match_str = "" + if result.n_equal_matches: + equal_match_str = " (** {} equal matches)".format(result.n_equal_matches) + + print_results('{:9} {:>6} {:>6} {}{}', str_bp, pct_query, + pct_match, name, equal_match_str) found.append(result) @@ -239,7 +252,7 @@ def gather_main(args): if args.output: fieldnames = ['intersect_bp', 'f_match', 'f_unique_to_query', 'f_unique_weighted', - 'average_abund', 'name'] + list(lca_utils.taxlist()) + 'average_abund', 'name', 'n_equal_matches'] + list(lca_utils.taxlist()) w = csv.DictWriter(args.output, fieldnames=fieldnames) w.writeheader() From e6b8e4959cb1d071e705af3f57c8365fcc53ecaa Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 21:26:22 -0800 Subject: [PATCH 22/34] add test for equivalent results display and csv output --- tests/test-data/47+63.fa.sig | 1 + tests/test-data/47.fa.sig | 1 + tests/test-data/63.fa.sig | 1 + tests/test-data/lca/47+63.lca.json | 1 + tests/test_lca.py | 25 +++++++++++++++++++++++++ 5 files changed, 29 insertions(+) create mode 100644 tests/test-data/47+63.fa.sig create mode 100644 tests/test-data/47.fa.sig create mode 100644 tests/test-data/63.fa.sig create mode 100644 tests/test-data/lca/47+63.lca.json diff --git a/tests/test-data/47+63.fa.sig b/tests/test-data/47+63.fa.sig new file mode 100644 index 0000000000..073e0bcbeb --- /dev/null +++ b/tests/test-data/47+63.fa.sig @@ -0,0 +1 @@ +[{"class":"sourmash_signature","email":"","hash_function":"0.murmur64","license":"CC0","signatures":[{"ksize":31,"max_hash":18446744073709552,"md5sum":"19e73bf529950a4a8ebd640519423b35","mins":[2925290528259,7397951382043,26390034908046,36191627174349,46822418898135,47180432856748,65325381835497,74037001801154,83631867214312,86442965329695,89858161015356,90806331781332,95108107091043,109728134835863,125296899385152,141805235471354,153783847123278,157255282423883,160902593196961,166163367169365,174979625787948,175032069345452,182141449646872,187503667710897,191814288543916,192890223167288,196037984804395,203335269479450,204822233856042,209233297808434,210990374921109,216861451361880,227683744949779,245029062906088,248581735034297,251186192464160,258255664267571,265587486568360,269368370464968,274235329360733,287831833139065,293035680952788,295357672887769,303548064148961,309969810458414,316701230964482,316897730501733,319335385321196,324290895668437,335605928681508,341001360876621,349347535027435,351258437206186,373471575728001,374188784960382,380562917179168,384016070832594,395356088720884,396054053894786,399215565767837,399215750881719,414934253467214,430191392037330,437506450440821,444273467310604,457671098462976,461477875054528,473505790593386,489519873805078,494381455384554,495601542123242,506336140549160,518803929727716,536713413896697,537757852470225,538244971589768,549192277958979,550069279000761,561316274253850,569061433009767,578397933313938,582924953100697,595681341596523,626475972546369,632243908286808,654100189449365,668365295793413,671677182717796,694523064126211,697547171219962,698360853391060,698383699159430,699304671955329,703696716274708,726292867622433,734019394597526,735119835330596,737721455578775,738543439712395,748275069435017,750168693442959,763201112060730,763669867104092,763903450865190,767121298622699,767417571203746,772051111454828,772152509572841,798319271383660,813805466325024,826077010431743,828356750400476,831736232379626,843025850509368,845050451776051,852042280696332,875246525542985,904962988643425,905308801557271,906900833647951,916185332282483,917277762192278,917334002968300,920956096920505,930950142910172,933691189676382,934117578798841,936230738064974,938188383682602,941861412444067,942726201014166,945032973428091,951217347666850,961017555998937,964218423186297,972618046502811,974637708612999,980565419407507,992940514834332,996549857630112,998926194132937,1014496787753945,1024634573363382,1028460419483054,1033874047074353,1037163054983442,1045088944681707,1048574231977270,1056506578664023,1057491059487351,1060760398971021,1061967838052170,1066520357980609,1071759691375436,1080440645655398,1086288713384900,1089204340626863,1090505634288396,1093123453947031,1093780160574614,1094807962005299,1118646614510530,1119614160374606,1130113935525204,1144614443668767,1163159397520386,1163303408022562,1174386415542665,1182168703505980,1191391064481088,1200797929442729,1208460365112124,1234453656762891,1234698668275227,1241668290204495,1243711623939695,1245003263018464,1250484435790357,1256754510605581,1264563878337445,1280559509676354,1282472909138162,1292246474868788,1296553378083571,1300214247397513,1311078551896352,1313826623773576,1314579091305857,1325524051301607,1332430917176015,1332675238905364,1334939013056183,1337600826833551,1339674524726757,1341661245836409,1341942310569850,1344850241954264,1370039456672284,1372351037556570,1383348406006914,1387385057191781,1388584147493453,1396964107951550,1401298565016323,1410486644494794,1418743862991832,1420081602859846,1424366051167663,1431140791675340,1457429906997387,1458716224614631,1459144447544839,1465076638017898,1468663744355213,1476939334625119,1480237325649862,1481088686107013,1492314148312178,1504262319315651,1505172916296130,1521780633605083,1522237249746592,1528071377900249,1546368847550532,1555637141656241,1556284449775147,1558324681023092,1560969323307091,1569318833056381,1591204462547614,1600688746972553,1603093475242546,1617237167349710,1619286790649678,1622309948672121,1628201100274523,1633815225207084,1645673596073883,1648716913052297,1652765950688817,1658743399661231,1659819081077302,1666913529898081,1679605700468270,1679921198649960,1680089532480362,1689682641477370,1705950022227142,1717459770518422,1719690455811654,1745324659468599,1747303538361662,1750530525839386,1762621869823670,1766154871452422,1768074570558590,1778201561133905,1780288814569870,1781805678833298,1787025898307575,1801404378718274,1802232213372715,1804215890133513,1813163351446427,1818925318022107,1819091566970620,1821246620845572,1831822327838518,1832408978761242,1835694527640110,1840320929072049,1842060817177608,1845664541012305,1846495837486874,1856791461736081,1860030910962345,1862153320764207,1867578456400407,1870278489144074,1910324702460153,1937494292258243,1968345824207972,1977923456470816,1979691191211071,1981752378561978,1987210877457747,1996672784729607,1999133750243675,2011354377485272,2017517839581062,2024291985865500,2030916441428059,2059880114534091,2060560658024761,2064432037950349,2083858695302000,2097280377232511,2099121913442760,2104210209064238,2107076373938295,2108459225069649,2111395821264557,2135890156111278,2147628766136779,2148277682163663,2154050039033300,2154825108832254,2157543511093753,2164107595577716,2182965638264818,2197844428920029,2204899458948058,2207484772689862,2214585329667475,2216291576857764,2249382176770011,2282851679505524,2284008883123690,2294311150128150,2295851772366195,2296330477067902,2297300047218453,2300003729256754,2307128673346491,2309328595812376,2341149645621931,2359599974602456,2360988166250281,2365100930739182,2365101583995089,2368070257601382,2391657757985839,2398709852888712,2400026944838468,2410681029165949,2412591449989948,2426508439798144,2431689886658063,2434636409776451,2434817960891416,2439360431069834,2442924938559564,2447704465950372,2451185988965285,2466530448132713,2466909570912171,2468169126671752,2469990435969385,2472082629869597,2484069800626695,2486783619425529,2498928723235105,2516300104537043,2529686136078992,2531603179656151,2535379300081535,2545009932051689,2547409441873208,2556506799873846,2573496573602154,2575271828359827,2583040424187016,2583468225494252,2594709561160407,2601526047213631,2606628075888049,2607585442845824,2611080508323464,2620375519634887,2625753537877756,2626910805885551,2633023374568506,2642503504311045,2651833968467605,2658287974480506,2668521248016496,2671313026437821,2680497019271975,2693519224664396,2707831053578465,2715915477263655,2734700729661142,2742018183825055,2751785297738513,2758720834995819,2758979243701204,2764250636697336,2787100655005297,2796704110243902,2832223063283424,2840131111024087,2848124500620503,2860695977896818,2868567544019176,2875768840498356,2881697295591721,2889740392149462,2896177891093468,2904033648694661,2905361464861211,2911124480176230,2911599257101941,2921971427799899,2946143480195981,2947035710205399,2956539890231005,2959335482526692,2959566715003402,2965352172439193,2965439340704221,2973978384800223,2975093256580654,2975414282596751,2977316941548719,2983750706789338,2985749744661602,2993577870679042,2995240248615334,3002144816290295,3005445693257298,3005543539398257,3006825969228148,3007436553703536,3037243067032125,3049610843618123,3061176921317878,3074112617890076,3076040588704705,3083176156972821,3086123334924126,3089319907683113,3101693309309556,3103506635288743,3110882600220192,3112903104807973,3126462642335525,3138943638252170,3160234728942373,3164386809673569,3175607440806275,3190439500089370,3191603569657769,3192369183577062,3193346797759720,3194861056078031,3219171897424954,3219575037594274,3224535741992415,3225652520990690,3243947082373306,3253156487699363,3257337304537355,3272928147712512,3273345746404244,3275046616104436,3275876017733599,3278668472321042,3280780868469494,3280794856819360,3285404600033524,3299027911208090,3309878495036042,3312036573217165,3333652145199727,3335087116356546,3346073604734971,3365198599599379,3365586794581106,3369243531861603,3377357612999215,3378502887959344,3379556656256325,3380683064402177,3381845747007120,3383302464154854,3402608390039987,3405149696809115,3405393044390619,3415139398115166,3415475306791216,3418693183078260,3431010040648861,3433893111687059,3443405929340821,3443814552613298,3444648483822568,3458841677994973,3463857637926984,3468005713457978,3468306935523998,3484417521606056,3485163641925480,3485345404315595,3485684351025169,3490218326835149,3501438911492802,3502652434217727,3509072379429744,3535903464263126,3539901139312850,3540376200850317,3549947024705822,3556230614643794,3569439133907194,3580260758329980,3584444323393668,3586259833614913,3600497750427469,3609452627397093,3611915615904413,3613882437854401,3624379228154857,3632115466215379,3633516585258144,3636013168823101,3644503150656777,3648590415100172,3650411848640853,3651208352182968,3663160485730853,3665217012698891,3670531861702815,3678142299238288,3679723249740163,3688280883691690,3688327457349314,3705003329123112,3718621708258333,3722526932992524,3726938239845979,3728715138302811,3737946633507459,3740458701179796,3742193997053523,3746284516790765,3750533866251628,3762751701280063,3767814128506980,3779767620249001,3786173858770873,3797500278748845,3797572839534654,3809879441266392,3821170295134013,3821630362687996,3825757657900286,3827560739565438,3856495945466312,3856632581492180,3860116438298861,3862694398476978,3869850399187705,3872628172162502,3873324719285632,3880243619746497,3887523678289264,3899793396857493,3908511683767038,3911082399615065,3917275362273600,3929160579967105,3941525993199884,3942048398609850,3949404714704001,3951447621965404,3968940236457600,3973437909773411,3977362201597748,3983919240708090,3991304962417620,3996232480056804,4001338100305267,4003000776821491,4010634521845832,4011194441900352,4012917626427041,4018474899910568,4020678940249116,4026688740814878,4037588403031850,4039922936524250,4039932863104502,4041139896587433,4044662871102224,4049703973786608,4062261174287869,4065415697051189,4071633959541762,4079083296648701,4086687744224011,4114248458913135,4123781140489537,4134892291048521,4135928574382122,4143693188392502,4154752706236746,4157669782790617,4167383773226728,4167492383925201,4168181927338698,4175996866082730,4176623816804364,4188349160298046,4199346559716278,4199937026193161,4200142600556427,4214771019264212,4225632034684502,4253320341425011,4267533238822472,4289359014707288,4295704004397925,4301841948469269,4302934567016197,4305626904573311,4312242836327385,4316505852417381,4320671705521862,4320948899808113,4332389830901236,4332584479772575,4335310014667247,4345864924315697,4356160430961353,4357880027267574,4369068622168572,4383134213334340,4393722386432944,4405185846773600,4409442890926800,4418995118878418,4421125787216995,4437545167361411,4438817177523704,4444824473102486,4454575698901762,4458728897870062,4462449521144694,4467196354294999,4474000580782956,4474046785524256,4474574743148389,4481408122328948,4486507708773899,4501876131664304,4532427908015373,4535830530899372,4552805172103424,4561703129830313,4562273139429756,4562889929649950,4577457918883209,4577958025008691,4580199770736665,4607450449118254,4620004533537053,4640301477916105,4641399081470667,4641794721319090,4645238665720809,4645621983164383,4646458337623997,4665559789434328,4671025914890237,4671062938394354,4676205735481526,4681240613933899,4696193088102148,4704195358103927,4708213524509388,4721521787903217,4723274946162868,4729163773640834,4730341942998122,4751422453008817,4755912323473330,4756833761182793,4762437486337017,4784620939372924,4784854530655115,4785601845773156,4793495469956659,4794337453617434,4800291638880957,4804645672015140,4811729290308862,4817878202402319,4819311564829320,4823251614359045,4828732317464211,4836894122787451,4859353321888294,4859467776000605,4868100857196342,4875972042816124,4879638248944748,4881531428270387,4902345078498684,4907673099841830,4912787048821119,4930034114903088,4952413633841153,4957117546097581,4962024566226233,4964966617138828,4975540053830624,4986110732910751,4995563329299788,4999915977157470,5011891458604349,5017724733800167,5021445876086138,5045163363224076,5047944681561823,5059239413878415,5082075970958360,5090517135844571,5095238786157913,5095997925642684,5101214857653244,5102026127818781,5108455108876502,5112547786374962,5127124574162351,5128951178677788,5132612621833970,5143420500944709,5145276514713692,5149437337079666,5150315306295015,5150426384165948,5154406455748760,5156461422732999,5161207050871469,5161248283909416,5164496015188591,5169183503623442,5174341244024506,5178681082547978,5185496711050665,5199397406461572,5216652140931560,5222282340592980,5236341345649495,5260023793294245,5265232429826960,5273272937856228,5277050637122870,5284015351506042,5291703312055669,5302053963299700,5314446308863251,5316323217920338,5319128074583642,5327554389775897,5334935043856488,5372175647130534,5379968233240165,5385746119086850,5394080989067132,5400291293650351,5406614253824595,5408167860716448,5408684428107176,5412454472585029,5419089032931253,5425776155703968,5433304691996431,5435448562589939,5442550985028476,5443519792343783,5458279931832152,5470523383371739,5475821882378207,5477177690474931,5484161477936466,5490569127868792,5493319803023083,5493870604473986,5494363692102912,5495499148937672,5503103710464614,5525784499514800,5536775761553566,5544364757593219,5545802799820933,5551558523406896,5554380825386759,5557919753549640,5560825696398560,5579977210132164,5593426453232836,5595805533420086,5603538322319793,5611751716804501,5613862108602356,5614909593083489,5621064494334548,5630820724993122,5637312677638017,5646619733332345,5653701086020480,5658909534123937,5667246937392321,5685769039380624,5699319238678867,5710195316669727,5712513634730123,5714049549411876,5718933939076632,5722219703153811,5759061891073762,5760917932621246,5775786807466214,5779727192598359,5782454578043069,5787478509200132,5795310516601245,5799653338299710,5817139504392687,5818962864882161,5828565941868585,5838532420889856,5846508833190611,5854937355756548,5856022939536906,5858993021903933,5870645665739004,5876393418760803,5891024028896298,5894685367317522,5905923307105350,5908696090042283,5915859656997442,5916931928833529,5924879546681533,5932662790863585,5935312555770245,5935661430493388,5947101870703205,5950972051903959,5951041949791953,5972218700939363,5973250287141740,5973677832178283,5990178361033769,6001206595929325,6002276243709531,6006897308518556,6011214467146689,6016555602340361,6027671084996298,6029374529344504,6030811056861793,6043316342842623,6045838883225433,6053804686685524,6053958863313339,6055268730727559,6085590822787717,6128284886205816,6137419131615699,6142688368084569,6144042650109511,6144095475272536,6158322788243107,6167018513092476,6167607991565253,6171707826744820,6174144459043731,6177692002705307,6181251707047392,6192358086666249,6194877677308546,6198857031919734,6200081358996517,6207302580763824,6216154454451807,6218233647565127,6218512470330013,6220604711061324,6236798857143890,6244874563473516,6249074081912395,6250557402527662,6251868356478317,6256321719332215,6264775741996340,6270623030455246,6274969421000503,6300447716613718,6307115079760207,6324812402453371,6353191312166053,6359135369542064,6368768790664617,6371090203570186,6373927709843793,6379348598089064,6385800661078082,6407210526643342,6408730838629478,6436083078959781,6436814879261326,6445879733828998,6482532068799143,6494216993344366,6499734594021057,6503186772282900,6516226128433302,6523391982496272,6546752598032205,6558599467268843,6568196183285198,6578237361036784,6578503095620162,6587654701564589,6595708386553174,6618676721046335,6621057137514784,6622760768363465,6630093742634040,6643521507427133,6662203303202718,6674364905825227,6678173806211118,6692574202860978,6699624106317412,6704989683409671,6720191931854899,6741215022206694,6742696713154438,6747763101536606,6752595765235073,6771281046319400,6788002061659117,6794299705676629,6801783177540135,6805314972544938,6845320561422543,6871074917650344,6878773843563416,6885815333874594,6888484602467342,6898143968669196,6900004638975216,6919747802868531,6925667026147338,6933453950416148,6938223955509899,6967131174911621,6968626913917078,6969879544962764,6973244897917836,6980494356161697,6993040182965693,7013532370262403,7016766698233684,7021458253363648,7038117440889701,7047751781972594,7078519684380004,7079136072514786,7090263369022454,7090827224293435,7098844983687608,7103287349340715,7112480093601650,7117602179959460,7117702213846209,7138333125007121,7140267571474431,7152477932457527,7159009930103737,7163383528300707,7163778957994361,7164516813412020,7179002153816766,7179903040144596,7182765199375506,7191096990307504,7193706102549630,7228437063271890,7229216536358274,7232125512735235,7244564678730935,7244768482327881,7245566857344055,7248035515958267,7262289934411894,7285678364340995,7286552397490444,7289711990915466,7291166276647549,7305136552146877,7312457538294268,7316330078533123,7326575126577204,7328477651553143,7338010137201066,7354010904401429,7363914809349690,7368773239687673,7369067702745463,7372069375963896,7372949260070506,7378192097899948,7384234111099756,7386045769570324,7390506088312346,7398773968230003,7407505476310295,7413103855739244,7416878995770443,7417992892826458,7418488700207131,7427800180129173,7430512069482015,7435984239692232,7436873913790602,7457626872755122,7461417070760230,7464791273301861,7465698531247575,7465989092511044,7468955978108988,7470414970130956,7476626636382557,7496125413626459,7496331600674721,7496586171914845,7499741802632764,7507971309059323,7520995594935128,7523568386509127,7524079580225271,7535413758699104,7547834066144263,7558348891266390,7562422547591358,7574807836993530,7577833848718658,7578638579275105,7583764379769101,7597146399455249,7610703887034738,7612217782008852,7612590563938043,7632486697445093,7635781595842092,7652643882172024,7658477424630193,7658594690166121,7662988662313759,7670573068797315,7692157387739297,7692684970839720,7692715035163949,7692872154514462,7700977357734436,7708512355032444,7710242527125752,7713386097094125,7716490464557575,7719367164738556,7724711616367069,7727688737658572,7728376014820122,7734200858227759,7737983217239889,7738701740734266,7748491852382750,7775101063842022,7779960077213875,7794053661517357,7800931705061909,7807627836703959,7809275090934984,7813351823453750,7818433714447086,7826881780965015,7841588711354365,7852366441407035,7855477820333867,7860940256961100,7868991532284921,7885848475582109,7888074400901569,7888500835141269,7900170751256211,7905781741383824,7915002755515393,7916680314419175,7929090546906102,7931707661135896,7932664861586881,7936886244974173,7944913299381989,7955707767338343,7957474102755475,7959145831679961,7965254194340254,7969662040440070,7980381451760704,7980587376998310,7980735420462798,7985722197062386,7987424295175338,7995443309794354,7997135431578468,8006897017337402,8006976419849250,8011722895901690,8020262137556052,8027888930993228,8028030091531706,8032268170160689,8036544756403250,8042606792528101,8059389868173903,8059450627794768,8065220473196449,8065582408992410,8077418220136860,8082463447862295,8082820682426435,8095523873680122,8097390569526238,8101747032613392,8106928489710751,8112104031271206,8136369282029634,8173481093695052,8181586463868245,8194969512324171,8201561228078010,8205287009351885,8216440810041214,8243069565420263,8246362229814725,8246716772071880,8249298655984594,8250387434460343,8255193598573136,8262954804685181,8264880757955296,8269769863632137,8284234491989688,8289349890472704,8303400292309646,8309633984147819,8322561813637125,8325237800434916,8325244982386600,8332190045511090,8333295411468735,8336794237476945,8342359556228636,8343422431629489,8348222101988490,8348990845348274,8349929839053237,8353187069342082,8355184882068744,8357480319128064,8359032487697274,8372801112194483,8378780774433401,8390262752827048,8391968117889949,8392149294258272,8397902100674760,8437064789335853,8440380356686069,8444597753784738,8451164588916518,8452834615819362,8457432590283505,8462195561662212,8462356309409364,8468076223787436,8471415745047933,8492172722223897,8513163154527267,8515344063519634,8520471745574237,8522204087666054,8526397555774454,8529230741888138,8533878116076637,8541155088407770,8550168506511268,8552407797606671,8554633315621859,8555174066389539,8558151645997922,8576579691621984,8581367096989732,8598659143101208,8599129846364328,8601522207106423,8602281558256184,8606118628054373,8609962853072397,8626391389132139,8642764308475012,8654788098657391,8656720607859172,8668647436071212,8676906171988104,8681093783245916,8681657579012301,8684040140251633,8694259890202010,8720400968274939,8723528441052177,8734134339123262,8744943197261790,8756024741015291,8765499574275666,8771763736993583,8781771689282057,8788645315265601,8789521527155337,8800564096781294,8802869383602903,8804388443116965,8833617601200992,8839028706384124,8848441586602708,8851257701148635,8861373802714789,8863519477739503,8864760219124956,8867353885504610,8868704959256862,8869726068715730,8873178736038157,8895481679956001,8896675958607703,8917771334029599,8922546229199542,8935766685372472,8941687890115326,8946727890515135,8953024300985451,8976689351398218,8981576765955511,8989003157868761,9014303703878842,9032187371857715,9037381687162545,9038550674961458,9051912387029910,9060898928960346,9064531090448266,9067993556866039,9073037543243418,9074741782974562,9079888527353695,9086751601932227,9090741520266450,9091979750057327,9108055709626815,9118451715638510,9126355422536516,9150924106375181,9154695178495413,9156606782616571,9157375841856013,9158676476944194,9162668962659557,9165398869818013,9167897025495661,9169656716086699,9170930061820260,9173729001963953,9180835981759675,9181392291811972,9218987363983060,9220215058481045,9230781676144500,9240969247386165,9249469378126723,9271020411926998,9335430691435020,9352141537262568,9355129827150685,9358554525655764,9365839127076720,9369093634111987,9380627712808545,9394976106188444,9397328261168293,9403765537033865,9408921495622508,9418107590281736,9419050885946372,9422324913293330,9423486081818391,9424880153466631,9431002060282822,9435750849137196,9438440967152456,9449340008831532,9451923415826938,9461773699588349,9481386469401705,9484371784536628,9484984344438553,9535833980442651,9538837225746487,9570293654144253,9571330378157840,9573924489710217,9575165150956720,9580743881484339,9615883008659902,9624758856235873,9630291603264391,9641362208707358,9654460153869349,9655820024254396,9657079142409314,9659932051785010,9662025225596157,9667241625101916,9672577363633156,9677328620414229,9680945785313483,9710300281092436,9725792147964753,9730102559873491,9734113097684625,9745464335501377,9765786817226776,9782799358625264,9793594547272040,9799889278686304,9810257422545913,9810585298035378,9818968963003545,9849134001046702,9852441706161363,9855206514878035,9861618221073016,9870764755744667,9906275973443018,9925919096295581,9943414292728350,9949019217971450,9954313852436822,9956729180121161,9963611887803061,9965461136179694,9971538903925806,9972659184707003,9987074046553413,9988183784680681,9989307766906661,9992489863586669,9994394125866496,9999648366321789,10000031604968879,10004925495910091,10008184940193864,10010370056943249,10023685800384052,10024518507785908,10032518948661767,10038212235930891,10040986745269183,10060828780412828,10063209359600748,10063600315370974,10065868826751899,10069449569085214,10083178186730993,10083835921342635,10087308692864238,10127093259012746,10137337268168058,10154032807160608,10154307535853042,10155542068394802,10160572363193486,10175620188550308,10176491974309391,10180241838937158,10194722954029343,10199671620517651,10199695570402626,10213139479075307,10217695934166737,10224107621925080,10232055143615071,10243488805517527,10246709309375903,10250309444905037,10263727029912731,10266820110531598,10271469102327032,10275743124733814,10281974844357620,10296558578829119,10306671241348195,10309932015401873,10334247661646447,10338954267321910,10362411781950181,10363856866900979,10364382029087166,10372218357405989,10378769233943499,10400718449268838,10401822723036473,10420088526584073,10429449856647102,10438647586807590,10440487445875223,10440838933113584,10444872472907940,10466519528405133,10467269725152768,10469454767792558,10482250308230673,10483827694271696,10488747371854077,10500385026427457,10500488552967312,10501260356111404,10512322942799654,10523297170953308,10526510768148749,10543343012752730,10545121874221728,10548308070444431,10548369311321575,10569936885011978,10570501131760442,10576973213646289,10583112117834044,10584639348411680,10594696458041961,10608578244765171,10620592192554759,10621082248937070,10628643234912171,10628921785417252,10629062237330307,10633505584587868,10646006703435010,10650028403614625,10651121348848499,10651345084987832,10654625803270603,10666212884489150,10688559968805974,10695927691488062,10699195330093884,10706304398299584,10706909043141392,10729128988836847,10766441205077631,10774595446367799,10784226394558794,10789995657189753,10802291531494117,10808364573742279,10818898059592134,10827594971106799,10839803231136688,10842762916923867,10845347885148728,10847253104607377,10852276831524456,10854428106437565,10885189706501902,10887994298217623,10894930198422418,10898755272190895,10913442039163653,10914509218958331,10917306751752594,10921844952698928,10923207650640427,10928023009400926,10929092524133184,10932202328627689,10948651072438721,10951948612195804,10965247315180552,10972909371352109,10975117317621830,10989202769093484,10990409005986868,10991558669034873,11001665093098228,11014427382218185,11024320739845292,11042536781194006,11054833551017746,11062402375665545,11069851171800453,11090552698103596,11090658585225857,11095383304270179,11099369753166044,11099551546210604,11106506387649741,11123159825527527,11127177251318180,11129859357638708,11150199869893669,11151387183049239,11151502397313142,11154110766156613,11155371761778170,11158629464450723,11159414148224323,11164777782395177,11169430954279703,11175202072568888,11175852637265303,11184082345585609,11200002087496543,11206266985990044,11226519618035312,11254820718151050,11259273102107656,11261264491503353,11265599260848364,11280555107389759,11287893566206082,11294033441021320,11294773174907559,11305713023756983,11319884533641300,11327586528497295,11328275638112363,11332552015667182,11339380783297842,11340864658831256,11345675657880008,11345676553858105,11357460555425130,11358086643159577,11364648346737734,11389085993650118,11390806798887033,11401700519195899,11409131295056209,11412775300232418,11417029279499404,11418837401792416,11425662918976551,11425674126078597,11426226096713572,11428645865887160,11438749233694215,11439459859045383,11441352104880750,11454513203644820,11461197052190285,11479308399516360,11480479501736039,11482045627548411,11504102260549809,11519358680969077,11532404505521434,11544013273650036,11549882026188551,11557042562885581,11568498682605843,11568678400586201,11578506049932280,11580137502987103,11582679596601249,11583507699894777,11585101265495681,11591047076552913,11597838643220140,11602974466808884,11611075089640896,11611748354430947,11617014574952198,11630644392646970,11635654976144153,11657305088193972,11658683525550614,11675090294053441,11675693720283985,11682179864909511,11684720239124533,11688194680736119,11693102982874445,11698756388262452,11708423865084678,11713690607980814,11715198530711638,11715865254416537,11719221642455460,11720785116417048,11720873374212079,11730215861616220,11734286258484747,11738267971902102,11741745751488248,11742706162990999,11753431031818860,11764356908364626,11764874035248246,11776764748856507,11776942132964186,11780837550785665,11785179977172715,11786257969749074,11794754868481503,11811220919611763,11812158072536409,11832905268834899,11851393982879753,11852586198115184,11853010088136902,11867361302652812,11867650483762221,11870483176868986,11898179901887368,11909747036535415,11913133672980273,11915166616058954,11926548936220126,11926805367659349,11933874408252082,11941423373859996,11943720753021897,11944383058348300,11944816331130113,11947591791853532,11950260926652836,11957777053959725,11958326503192345,11971876905384523,11975100060815344,12003675199241448,12008453650739367,12015639579945326,12017280196275791,12020813104002531,12021776657102177,12028404727423728,12038984699485340,12044509607056046,12048806622801494,12064775457651800,12068867551957576,12082781112646069,12085458622840725,12100943786761249,12103342077182428,12110485781570692,12120377787831548,12125020327675301,12130816680520314,12142933439996132,12155534792479002,12157910100394424,12180082671639635,12186122156905100,12200556590308310,12206961056205598,12216273376124566,12247196809844638,12270468054721839,12272177606302533,12278465206346582,12283300256073245,12309693411990179,12313776804764473,12315740660505432,12317737462653854,12331039831738345,12332506101262263,12334476628613713,12334531906613812,12345475198663391,12347889475047477,12347909851317459,12371619531441513,12388152182711242,12390527382979238,12399457458248220,12399946676042065,12400047520221171,12414844391454468,12419850567303984,12427118539066615,12438014718231534,12442226783163244,12454152316786214,12456127570195279,12456974565702299,12468960135907940,12474505023309244,12482618753698829,12493121285865448,12493531949000940,12496980807002515,12520510172302125,12537207717978996,12544032455101983,12549910268086697,12561212829273378,12562621625488566,12567396522160703,12574953991866005,12576978802157283,12581297128593136,12582417504397196,12593140979984180,12595025894277088,12598104253633453,12603845745843686,12606498330358134,12606901469342342,12626861709059593,12632687195472462,12639418814809649,12640167527828266,12640428361474198,12640818042674893,12640969010574572,12643494240426710,12673433235167362,12678598650222967,12686784777563923,12696892670705054,12708456140034254,12717959780809396,12726377376546299,12727033270826653,12727451946669105,12743533106187231,12771267826669947,12786352863464886,12807665721211120,12809522469790774,12818427882691906,12819996417836695,12823282271321919,12829072084255416,12834860563514747,12848207419401226,12855844760930756,12859899907121954,12868140593650867,12868775358248804,12880367229968159,12882980822794716,12887418415101226,12900385538356311,12906788489234465,12934350686066194,12946489524267653,12947522776480207,12955628525207272,12963051823146860,12965962908737325,12969038927449240,12974390471676060,12985447175738467,12985493722134421,13006729868315951,13013340987113008,13035980728818146,13036712601500114,13045600513120125,13052620397276151,13054236155028234,13072501768493061,13099158956896694,13104310576837531,13111577005851999,13114710504214063,13121909629776355,13127052312166869,13131340694012302,13136566433737611,13154198718450725,13165906763126222,13170738127259843,13174101013456127,13184920558769854,13189380579282347,13199996563430952,13201807925580353,13211066578415956,13211782471313872,13212061616770885,13212165395243922,13238503442128074,13241104178731895,13241168864292142,13241450032861794,13248655970715829,13254044124605936,13257737390535834,13267936932487740,13280579253065923,13298750975340353,13314547425279234,13334201253531043,13347417735653001,13350157202852563,13353560065022737,13357601360650186,13359331313196874,13385015528950604,13386085962502095,13392648285436965,13394551832655184,13414514599248518,13423145336408826,13423985507124709,13428472113899924,13442145389950277,13452686859689485,13466915673127210,13472766006472691,13489343668600089,13494212405375710,13495705064166062,13502956667923325,13508489645714817,13509178757772730,13511175763453019,13516547793277979,13517706451256090,13519875476747795,13544313444890724,13552576650306647,13570582888476349,13581522598681686,13588669826245287,13606027345535991,13617631557607803,13621326447410048,13621397819727220,13630191002096322,13634793775983156,13639851440986869,13641606518127186,13649712080213198,13651091819607497,13654427643263871,13669670567123455,13692915679570837,13697542413338103,13699244375297918,13700132194249732,13702229819892376,13704275954624893,13706325468204188,13711378433916464,13713126833679041,13714567785435526,13725507831112260,13732875764071009,13741640976152344,13751009984842370,13751355444615875,13752528537770243,13758183684987635,13772233025470893,13779343273469876,13806888829912490,13810189191668783,13819216056468458,13836967928987258,13841506126069216,13844723334748155,13851419674057285,13851804964013356,13855148698755421,13860370948717274,13860591920719937,13869499215642030,13885432559815038,13892745650858214,13893729230139344,13894176996423815,13899662982568281,13903640450103285,13927268834765068,13930075501042467,13944345475258344,13948849305450763,13950003362814608,13952318012300341,13957891625399498,13965952880287033,13965992746518202,13969065894497400,13982564979542470,13996482893584239,14012374992832944,14015507053297472,14020512831650303,14021767660954154,14022387662308266,14041235400538814,14050877619339410,14068336590289394,14070452446274375,14073196557139903,14079413477735954,14082060161725832,14089660453835508,14104609562657279,14110176260429603,14110846566699118,14111754638843301,14113954118968165,14115700381311298,14116084203345559,14136333045989523,14141721173215486,14155975414531428,14175692216668231,14177050809138713,14187963108760817,14188374719646123,14199253731869253,14206687970696716,14210270522420558,14215487446995196,14221732530161551,14228747898918402,14232996386333408,14240099294539079,14240931409922495,14245988562300971,14249502033018713,14249687565938747,14250698500890187,14258964967231840,14262886155232322,14274483320198377,14286491830383354,14291469615410543,14292472000295936,14295837452356585,14298173613618098,14301257753026067,14310015895186965,14312644574968166,14324162382494344,14327796466197481,14328346609794800,14330165162804822,14334872702153449,14335504292083940,14358712927579207,14373358653447165,14382653933328395,14389328610898075,14412375459733818,14419408012320654,14419921321665188,14420517295463922,14422482515005653,14428963789076396,14433829777128924,14434491585844546,14441663522114382,14447076836883551,14453826393896267,14458414754313519,14460517698166413,14474428436715615,14499310299171024,14502523747605405,14503374543528179,14540918644501586,14545143474688100,14546173469934987,14549609943559194,14559345024889908,14572798606348625,14591042865966381,14604151534357376,14606919734830311,14607574529846282,14630990679638089,14631058148494236,14651923318081732,14657604036440419,14660498729179366,14686694622392691,14690256368300896,14693014696087872,14699312209892116,14714972951681498,14727357539437919,14753483946970413,14755563140273075,14755965578235618,14764626632313599,14773705053327044,14774424971091441,14776126161075338,14777180456645831,14782806494910422,14784179132609967,14789280323954198,14796095030944430,14802524498404394,14805119697076881,14816837023868332,14819207660612212,14832874204975299,14841572903295226,14875244788896295,14880698080993082,14883492855733875,14884715585223534,14891249907937290,14899776943325306,14912124553248599,14914637529083995,14927475356531675,14939491797730666,14940182819303564,14945635561516349,14948084549356910,14948446551537791,14950087955881572,14959164006691718,14969572759318726,14972120173118520,14977645952278382,14981979822436646,14988165815323633,14993931438103578,14995330188668762,14999867324523228,15006561064342947,15014220467166698,15015143178733208,15016747917580341,15017581694255009,15027872686689687,15029223449524697,15029421099140855,15030279194177507,15036546311204155,15047851634879837,15049206174008406,15064441595557983,15066002393956736,15067340188537424,15068737776024543,15081726781697934,15083561199479055,15100586527842091,15100895887756881,15125038963644248,15125825668976374,15132962157165167,15142340753501357,15142771204200772,15144509730846110,15144908199448686,15144983031311469,15149385225563368,15163502675118430,15169763864701641,15188528526614937,15212200426217138,15227318255741609,15232762341410261,15235610343655303,15249106376606939,15250808075404806,15258347128439790,15264731568598059,15269511085038233,15275297064012400,15281435895520542,15285891219756998,15286093688825701,15289862125703132,15290148594297788,15293123874907838,15305964656672387,15320795701669972,15329295210127478,15345070383303245,15353149026108168,15353232670298897,15355335603796124,15356453151175679,15373930811061691,15397171895399395,15407310719467201,15416018244148923,15428180744186198,15430571383432346,15431617843729266,15433887937403854,15452893020203867,15453212547751568,15467422080353387,15469490756626048,15484872489499858,15485469980475937,15486304467213949,15490588941327161,15493669981706537,15500366938118891,15505519386765147,15507002730562560,15507596083915355,15510353559011411,15514535598456693,15515999929535991,15522061334524465,15544311106200778,15544548900805204,15557041324109368,15561952874606530,15572863590946325,15577133638656672,15578855835529187,15584544164633761,15585305674396933,15586021008360415,15586572984402845,15591835587885800,15600022327961011,15607922224614041,15618067512755640,15627340304611938,15638216907788849,15638858384127971,15642870227425833,15651638904781067,15659367639512437,15663152139200473,15663518386052835,15668753861818902,15669831866387505,15678947651292970,15682550662690976,15684129061048451,15684714219805662,15687701212595998,15689677439468810,15695115813510797,15700741802774887,15701006667851545,15702846415375903,15703962508930357,15721982912314664,15755103109741170,15755440794212771,15760850159052851,15763329664260405,15763347842500031,15768790414358471,15783285537872233,15783457873235222,15789976943224909,15815973513115164,15828816982020122,15840334179132579,15843352451900485,15843600775555820,15863820783079073,15866236940451977,15872362195905201,15875675232290550,15879801226947188,15890892365015163,15897401962344850,15911275554215588,15911665623700279,15915302121110625,15939128572044103,15944489120018696,15954518713119826,15964603511322079,15966264651417527,15979755963656160,16003094114347164,16004817238396021,16038301793476863,16060832251885914,16062107659438725,16069046551508727,16074486970716033,16080740588460730,16083877262816687,16090383828959085,16093240548996996,16127193854760523,16140981467932346,16144336314735217,16150040833847011,16152783913026412,16178760128679429,16181654573567669,16184318280736106,16190571409547135,16191892773280294,16211596379781820,16225653430698144,16233112123839300,16235839769165041,16240762741306135,16266712848564625,16280927247624124,16307595056946704,16309137054392802,16310681306790082,16315681986373983,16341765762990956,16347036755860703,16349624325715789,16356347789934648,16359131609074861,16362066780194864,16369281391114209,16369945946899217,16372297199748151,16373987141658826,16377409889399924,16386085273604579,16396880383990556,16398733126926655,16419509766610091,16419901644544820,16422440467412931,16432971637241688,16433327633528711,16435742390682375,16437965595938221,16447014000822092,16448682699618749,16452048761762229,16457674212534286,16458193998413945,16462708921584182,16465114761860846,16467984634116524,16483944183054084,16492537636527687,16499668866369559,16514937777288269,16515317531532600,16515763893503398,16517537506431523,16520680878383534,16549193848756349,16551638786295881,16557075823478085,16561729019896847,16568638052909005,16569637258340730,16574236353677299,16591958210106118,16594902459898391,16606580432110149,16618755587989745,16626806031696348,16629787832374700,16650212270002998,16650283216078512,16653981254978641,16654463028053744,16660067927175777,16662173317527607,16681703184890456,16682373593295548,16685180422791776,16698836185067210,16710176517292164,16724720235210872,16725294155137383,16727032133352391,16729903330833289,16738231483083309,16739182735043548,16741586841667302,16753484567013429,16755872335309848,16759630605474370,16810005023919202,16820470058192790,16843019140494565,16850886838136612,16867020968629490,16867864576520806,16868617407655959,16870410864242800,16879575300669180,16886381613931407,16887131664281014,16890451337099671,16893613954731672,16913880033664423,16942918462021910,16947503499298974,16954247022723534,16956760996707076,16966208347117891,16974976960555336,16974996106586527,16976062143580028,16977273505567584,16981100707531732,16986912710655502,16989134716990479,17001105496098528,17001625874486973,17004131992558114,17008056242821339,17011749486628658,17018029384954439,17019281824197645,17022002414706187,17023649823777761,17027024912981538,17027708820603609,17027724390296374,17028905071969344,17033234045807732,17039633394164779,17041956186643831,17043911086147728,17044227183900592,17045020641718652,17053515690985016,17065736283826551,17066204322105669,17066890141401799,17069702342298005,17072355840387059,17086180968300670,17092924242292896,17109970886679733,17115701285838058,17128001588707458,17143215310364176,17150277478457455,17156795393603011,17157898465093855,17158828067013858,17159011651238619,17164804932271093,17184647258662518,17189985997758617,17192344156604394,17196706052792205,17219161189129714,17220596644754506,17233175158773315,17246076311509922,17255087609386479,17255995767294112,17264493723089078,17270538843510702,17282090993143952,17283049372339150,17291979671712321,17293149261210524,17296137849004163,17304784741854216,17313632977406292,17329472456864413,17334864272182912,17341517372421961,17353053843653375,17378407166143928,17391219400155350,17391436242706241,17398282123693718,17400913153559823,17407246841014078,17413919734842125,17420499051739414,17422062281526649,17423105453982540,17425090194197669,17435530177003750,17440523469292889,17441789247813820,17466786275120017,17470441567829100,17476827515285484,17479085198776952,17484120239214373,17488816545423819,17496728290093656,17497098710311670,17499228377170813,17500477193853245,17517159540441318,17541513425567569,17554939460224349,17558580292594243,17559431629269263,17561448044068445,17575560135721806,17600607133597719,17602282637407016,17608993167118462,17612331367634278,17612661692978454,17624682438741740,17641686744036386,17644039113805944,17645312266322218,17659621059389953,17660743105223332,17661459152369712,17676740506186425,17697682504000309,17707842984156022,17710801222146557,17712409569723362,17712893886367554,17714216772557464,17729422012525851,17732456419233492,17741767011633464,17746510075374564,17759977925515375,17767687613087632,17770981472959907,17778432694523101,17780417672471981,17780633004635622,17800329108711822,17810904352266449,17811294904961592,17820414995546733,17824058019135158,17824692487924143,17829961694570784,17837924490120715,17838730974038612,17840541840864217,17844481483540230,17851847109708456,17853025423149005,17862392392198693,17863284124973089,17864179561603861,17864592832666958,17868918610462163,17875253398653485,17893885025675099,17896653342000979,17905797190497744,17905846546240170,17919141917693070,17922025141068374,17927103791988031,17961387047243191,17965956572473636,17983136277324499,17988399353053093,17994870382615510,18001311042217802,18006237324341425,18009042115164135,18014657110806736,18020974854298469,18021886555673319,18026004208911747,18028316562390501,18033529755426165,18055041696562277,18055087872299409,18055587125968368,18063228282000881,18068141364358640,18082663742446595,18136432192167355,18138810838881859,18139979326512529,18162150874995819,18176398171978336,18179155755591764,18196224826654508,18200162616918760,18214396067041321,18215688955701607,18219379302426418,18241422988672837,18258026885319486,18258704607599735,18265102179546859,18277532214379777,18309896670692432,18312928450191138,18320706645413560,18325796935244911,18330874810048231,18336172353658611,18337191336507655,18354768007590930,18362561943328805,18366897023001689,18379087767248948,18390199754916829,18395298635755745,18396190684827929,18400962357421119,18412761413118797,18417094802826718,18417594946606594,18423285819437783,18429692224833089,18435861506577465,18438159643459969,18444487060015322,18444666364288446],"molecule":"DNA","num":0,"seed":42}],"version":0.4}] \ No newline at end of file diff --git a/tests/test-data/47.fa.sig b/tests/test-data/47.fa.sig new file mode 100644 index 0000000000..b77a2ac2a3 --- /dev/null +++ b/tests/test-data/47.fa.sig @@ -0,0 +1 @@ +[{"class":"sourmash_signature","email":"","filename":"47.fa","hash_function":"0.murmur64","license":"CC0","name":"NC_009665.1 Shewanella baltica OS185, complete genome","signatures":[{"ksize":31,"max_hash":18446744073709552,"md5sum":"09a08691ce52952152f0e866a59f6261","mins":[2925290528259,7397951382043,9478766578752,26390034908046,31811219567311,36191627174349,39112643786682,46822418898135,47180432856748,60017138985701,60046869099761,65325381835497,73805228897455,74037001801154,75800414195236,81855770871884,83631867214312,86442965329695,89858161015356,90806331781332,95108107091043,97258972896665,109728134835863,111162670259148,113585458770972,116166720583475,121382935674939,125296899385152,141176320451685,141284968207060,141805235471354,147190179068733,149024066888166,153783847123278,157255282423883,160902593196961,162823771630571,166163367169365,174979625787948,175032069345452,182141449646872,187503667710897,191814288543916,192890223167288,195186364664284,196037984804395,197033160819668,203335269479450,204822233856042,209233297808434,210990374921109,214600505227173,216861451361880,217827490079709,224612774123844,227683744949779,228540468204721,228644441858825,228848037454334,235478348737722,240579984608212,245029062906088,248581735034297,251186192464160,258255664267571,258924003299576,265587486568360,269368370464968,274235329360733,287831833139065,293035680952788,294558365931778,295357672887769,303548064148961,303884611876696,306041902505698,307504482597750,309969810458414,316701230964482,316897730501733,318378982650332,318568418472400,318769251839299,319335385321196,324290895668437,335605928681508,339214912158009,341001360876621,349347535027435,351258437206186,360700437330047,367327558614874,373471575728001,374188784960382,380562917179168,384016070832594,386412107814027,389279696836396,393985777467936,395356088720884,396054053894786,399215565767837,399215750881719,411030707384650,414934253467214,423759820188444,430191392037330,431262729545883,437506450440821,438105428895659,438530381378884,439044119332850,444273467310604,449680755457024,450506164772110,457138551847407,457671098462976,461477875054528,473505790593386,481815788294090,487479264340595,489519873805078,494381455384554,495601542123242,500121418104925,502603922576313,506180131137999,506336140549160,516283812540815,518803929727716,536385923460112,536713413896697,537757852470225,538244971589768,540208451183188,540588787405694,542763181011925,549192277958979,550069279000761,553900351455263,554447489693319,559226934389812,561316274253850,569061433009767,578397933313938,578899728742280,582924953100697,583572058199369,589631402773527,595681341596523,615537076898013,626475972546369,632243908286808,639824119626438,645743921515803,648018730756195,654100189449365,668365295793413,670523964406925,671677182717796,671759739945458,676515376899555,677670347980377,684837528099741,687895771489510,693758846688308,694523064126211,697547171219962,698360853391060,698383699159430,699304671955329,703696716274708,706932232475763,708449170262947,726292867622433,726450649964317,727800693698567,728799639190186,734019394597526,735119835330596,737721455578775,738543439712395,741951415758063,748275069435017,750168693442959,763201112060730,763669867104092,763903450865190,767121298622699,767417571203746,770436202573059,771683466150501,772051111454828,772152509572841,787291725467630,798319271383660,802162977380527,806341566938246,813805466325024,815570804752811,816564335333987,817024725405204,817504754626588,821706687072387,826077010431743,828356750400476,831736232379626,843025850509368,843740928711723,845050451776051,852042280696332,857912135260852,871829709114624,873254290207218,875246525542985,889897273652095,894040289596463,897620767964532,904962988643425,905308801557271,906900833647951,909442865612931,912697620927191,913789208155712,916185332282483,917277762192278,917334002968300,919561883055202,920956096920505,929046426661708,930950142910172,933691189676382,934117578798841,936230738064974,938188383682602,941861412444067,942726201014166,945032973428091,947084478373286,948779805509636,951217347666850,955636489177710,961017555998937,961314440978493,964218423186297,968212926455014,968926587713112,969379511837489,972618046502811,974637708612999,980196796037373,980565419407507,983225283458250,987541215674501,992940514834332,996549857630112,998926194132937,1014496787753945,1017704359447639,1020480845863237,1024292399670426,1024634573363382,1028460419483054,1033874047074353,1035843403340873,1037163054983442,1039558325527817,1045088944681707,1045785088974313,1048574231977270,1051002783372661,1056506578664023,1057491059487351,1059437143082343,1059853068042602,1060760398971021,1061967838052170,1066520357980609,1069224019506529,1071759691375436,1072369963153950,1080440645655398,1083957482733017,1085596610204486,1086288713384900,1088705827145973,1089204340626863,1090298523330765,1090505634288396,1093123453947031,1093780160574614,1094807962005299,1096801323900100,1103535113750718,1105423537109674,1110277142974534,1113000955148039,1118646614510530,1119281509125641,1119614160374606,1120783033143617,1129279349995602,1130113935525204,1130881986044393,1132820492214112,1144614443668767,1147223276986948,1147680055727668,1158195764117399,1163159397520386,1163303408022562,1164535774717695,1174386415542665,1182168703505980,1186019430315229,1190006012882786,1191391064481088,1200797929442729,1203248128742846,1208460365112124,1225631809302250,1234453656762891,1234698668275227,1237451114108962,1241245219164313,1241546710850109,1241668290204495,1242418821754022,1243711623939695,1244290020173228,1244346278691061,1245003263018464,1250484435790357,1256754510605581,1264563878337445,1269060350975578,1270154727600023,1271923497273997,1273115659423672,1280559509676354,1282472909138162,1285880210646676,1287498565406779,1291218968991828,1292246474868788,1292487278268025,1296553378083571,1300214247397513,1311078551896352,1311449533649890,1313826623773576,1314579091305857,1322276316890973,1325524051301607,1332430917176015,1332675238905364,1334939013056183,1337600826833551,1339674524726757,1341661245836409,1341942310569850,1344850241954264,1348761416973437,1356904466129199,1369078449955986,1370039456672284,1370854092951821,1372351037556570,1376501003787476,1378471035008080,1383348406006914,1387085462947589,1387385057191781,1388584147493453,1390384276015810,1396964107951550,1401298565016323,1407230822931784,1410486644494794,1410786461048450,1414537954260326,1418743862991832,1420081602859846,1424366051167663,1431140791675340,1438960590550765,1443983103542619,1449677011803774,1457429906997387,1458641089226597,1458716224614631,1459144447544839,1461511802747479,1465076638017898,1465867789405739,1467827467674025,1468663744355213,1476939334625119,1480237325649862,1481088686107013,1483592564337201,1492314148312178,1498457281550692,1499617447616390,1503853002568292,1504262319315651,1505172916296130,1513668920373911,1519648405600154,1520931632741619,1521780633605083,1522237249746592,1522582599941917,1523518586763814,1528071377900249,1529728378502178,1531967467499308,1535306641925593,1535658178776979,1539307118095840,1546368847550532,1548019688923957,1552083355029650,1555637141656241,1555928090783844,1556284449775147,1558324681023092,1560969323307091,1569318833056381,1573222947937990,1584949879718000,1588978430427079,1591204462547614,1598261363578814,1600688746972553,1603093475242546,1605199952752847,1617237167349710,1618568234848372,1619286790649678,1621192910003941,1622309948672121,1628201100274523,1632271494883561,1633815225207084,1634399357702189,1637441524349088,1642637371934077,1643195637784435,1643598557356785,1645422696089427,1645673596073883,1645866259200502,1648716913052297,1652765950688817,1654033476941478,1658743399661231,1659819081077302,1662433005161059,1666913529898081,1679605700468270,1679921198649960,1680089532480362,1683724693448022,1689682641477370,1691706033392643,1696089597402537,1705950022227142,1714068118984789,1717459770518422,1718014979380734,1719690455811654,1734728075132632,1739172733710985,1745324659468599,1747303538361662,1749145577098552,1750021468273833,1750530525839386,1757623281396842,1758538630442116,1761579455667380,1762621869823670,1766019454242846,1766154871452422,1768074570558590,1769506068128510,1770988073934927,1778201561133905,1778315567513725,1780288814569870,1781805678833298,1786019351090790,1787025898307575,1793358709247570,1801404378718274,1802232213372715,1804215890133513,1808123394894591,1808805306365691,1810435102767883,1813163351446427,1818925318022107,1819091566970620,1821246620845572,1825289420275521,1829618500803507,1831822327838518,1832408978761242,1835694527640110,1837046808494825,1840320929072049,1842060817177608,1844561134226776,1845664541012305,1846495837486874,1846814283210937,1848195902901531,1849342199305473,1852955637970413,1853064829868822,1854709332537365,1856791461736081,1860030910962345,1862153320764207,1862209616890144,1867578456400407,1870278489144074,1871450013370760,1880743049410508,1880811582956504,1885064900552256,1888527800896759,1899912419788159,1909513665427200,1909893462067689,1910324702460153,1920155014152585,1923031184773399,1923724551213831,1928488418125995,1935392806238480,1936981590066389,1937494292258243,1941935226774825,1942786308149620,1943419695090025,1947698435893922,1947827395290642,1948000063884420,1951286173673455,1957196594968485,1961156417600790,1968345824207972,1973565525696890,1976759223622041,1977637922131648,1977923456470816,1979621033784766,1979691191211071,1981752378561978,1987210877457747,1993564537623510,1996672784729607,1999133750243675,2011354377485272,2017517839581062,2021272596821928,2024291985865500,2030916441428059,2030943399237635,2035149501864507,2047630125224977,2052394950437991,2059880114534091,2060560658024761,2064432037950349,2083858695302000,2088434760658037,2092860563281190,2095578868362462,2097280377232511,2099121913442760,2104210209064238,2107076373938295,2108459225069649,2111395821264557,2122246048824157,2123504523298871,2125171930737142,2127588293738580,2135890156111278,2147601242872786,2147628766136779,2148277682163663,2148629935713334,2148648462894137,2154050039033300,2154825108832254,2157543511093753,2159292319817060,2159391483345580,2163811550162994,2163911364872485,2164107595577716,2166610246026701,2169130162448361,2169401527323023,2182965638264818,2189902950844361,2191089458213993,2194321556975056,2197255584699767,2197550753498976,2197844428920029,2204899458948058,2207484772689862,2214585329667475,2216291576857764,2218560589085471,2222579004644118,2225440067596925,2231678593259696,2239881880935087,2246651203996116,2249382176770011,2251553784168898,2262343143065292,2269891656332884,2277357511613050,2282851679505524,2284008883123690,2294311150128150,2295851772366195,2296330477067902,2297300047218453,2299522719885844,2300003729256754,2305986746818130,2307128673346491,2309328595812376,2314348683023278,2325178911253636,2337363146012963,2338273922165178,2340650536569632,2341149645621931,2349169861378449,2350865952696907,2355373744763135,2359599974602456,2360988166250281,2364165589013103,2365100930739182,2365101583995089,2368070257601382,2379436665071024,2387981834215976,2391376217204289,2391657757985839,2398709852888712,2400026944838468,2402208725828096,2409550806440554,2410681029165949,2412591449989948,2413992919514685,2416809210551017,2420810333651625,2426508439798144,2431689886658063,2434636409776451,2434817960891416,2439360431069834,2442924938559564,2444743697540746,2447704465950372,2451185988965285,2459766139292236,2466530448132713,2466909570912171,2468169126671752,2469990435969385,2472082629869597,2484069800626695,2484707593134371,2486433068244510,2486783619425529,2489988128759413,2497895029394563,2498928723235105,2502877897637973,2507836460937176,2516300104537043,2529686136078992,2531603179656151,2535379300081535,2540748246632844,2542081767873586,2543849372306944,2545009932051689,2547409441873208,2556506799873846,2556532058925046,2570487229611126,2573496573602154,2573521798941261,2575271828359827,2583040424187016,2583468225494252,2583541506767529,2590282004204866,2594709561160407,2598736648640020,2600008000392449,2601526047213631,2604919231758350,2606628075888049,2607585442845824,2608738783833234,2611080508323464,2611611650962181,2618806127233677,2620375519634887,2623788431218018,2625753537877756,2626910805885551,2633023374568506,2641610347651893,2642503504311045,2651833968467605,2658287974480506,2661391357250546,2662023298318235,2665833107218149,2668521248016496,2671313026437821,2675525837460390,2678336928677512,2680497019271975,2693519224664396,2696615422431379,2697093257227995,2703119946699707,2707831053578465,2708218678481553,2715915477263655,2729224055534831,2731006551655845,2732055421730493,2734700729661142,2738859769218570,2742018183825055,2743081343023861,2743888467937942,2751785297738513,2757079557005164,2758720834995819,2758979243701204,2764250636697336,2766608515295278,2771029262532041,2771167327169082,2774929020087483,2787100655005297,2789215679189400,2794721456334777,2796704110243902,2822847943723684,2823690427545053,2824112773494385,2828383286324950,2832223063283424,2839310794637108,2839525055055156,2840131111024087,2845086895593857,2848124500620503,2850392763711528,2851615637093918,2852640851512226,2858440556030254,2859863407402383,2860695977896818,2868567544019176,2868722569049791,2875394822256464,2875768840498356,2876952463837377,2877071122530509,2881697295591721,2885101058817579,2888998206990875,2889740392149462,2892701240258741,2893195916828713,2893601424052339,2896177891093468,2903470979230250,2904033648694661,2905361464861211,2908444575023598,2911124480176230,2911599257101941,2921971427799899,2927511611173972,2932335002147816,2942563058582163,2946143480195981,2946208695315985,2947035710205399,2948810955001129,2950953756094034,2952664814352903,2956213777269798,2956539890231005,2958358510714643,2959335482526692,2959566715003402,2965352172439193,2965439340704221,2965855909473064,2966360689949309,2973978384800223,2975093256580654,2975414282596751,2977316941548719,2977663445217111,2983750706789338,2984126693118897,2985749744661602,2993577870679042,2995240248615334,2997216190337734,2997475303842149,2998782348202460,3002144816290295,3004601117971759,3005445693257298,3005543539398257,3006825969228148,3007008399287583,3007436553703536,3016063581505292,3024440815482041,3029401793589254,3035917551240430,3037029199949908,3037243067032125,3049610843618123,3052077662817141,3055458832740035,3061176921317878,3072032250423585,3074112617890076,3076040588704705,3079164924470365,3083176156972821,3086123334924126,3089319907683113,3098540992604022,3101693309309556,3103506635288743,3110882600220192,3112903104807973,3120960716235347,3125993645599853,3126462642335525,3127239755462313,3127515727740291,3132674664095953,3136116654223153,3138943638252170,3140104823595207,3153220014750330,3158074449437715,3160234728942373,3164386809673569,3173783571944417,3175607440806275,3180308189083804,3184825950572980,3190439500089370,3191603569657769,3192369183577062,3193298901760522,3193346797759720,3194861056078031,3196931220104868,3201112500492023,3202793460581380,3219171897424954,3219575037594274,3224535741992415,3225652520990690,3226382984631204,3230186294385431,3243947082373306,3244627180010006,3248922800662151,3253156487699363,3255370232763973,3257337304537355,3265267353090335,3272928147712512,3273345746404244,3275046616104436,3275876017733599,3276867668269439,3278668472321042,3278714300330291,3280780868469494,3280794856819360,3285404600033524,3289047034753180,3294550813104021,3298089165637310,3299027911208090,3306709449273253,3309878495036042,3312036573217165,3320827905894255,3323347352904912,3332103278994362,3333652145199727,3335087116356546,3336332604419491,3346073604734971,3346508186700073,3362515004859132,3365198599599379,3365586794581106,3366181769304978,3367829027870594,3369243531861603,3377357612999215,3378502887959344,3379556656256325,3380377839647911,3380683064402177,3381845747007120,3382728295376857,3383075891087465,3383302464154854,3383677243861212,3384640865212142,3390849838258698,3402608390039987,3404656276789459,3405149696809115,3405393044390619,3408568306290700,3409525642139599,3409848562939689,3415139398115166,3415475306791216,3417433407494643,3418693183078260,3419312829124670,3421667659970361,3425688845571110,3430483417325813,3431010040648861,3433786393292948,3433893111687059,3434270543355054,3439118720682675,3443405929340821,3443814552613298,3444188614792340,3444648483822568,3452335392026500,3454079754241547,3458841677994973,3459090134521778,3463857637926984,3466754010283942,3468005713457978,3468306935523998,3469621823753300,3484417521606056,3484887355924665,3485163641925480,3485345404315595,3485684351025169,3486271024140478,3486481363201290,3490218326835149,3493226173405941,3495557286227599,3501438911492802,3502652434217727,3509064061394091,3509072379429744,3523958917267613,3531208508664527,3532553615695946,3535903464263126,3539565874451621,3539901139312850,3540376200850317,3541349497756661,3544819360646120,3549947024705822,3556230614643794,3561873326260814,3567631654480233,3569439133907194,3569585416963919,3580260758329980,3584444323393668,3586259833614913,3598107344839577,3599693059706844,3600497750427469,3609452627397093,3611915615904413,3613882437854401,3624379228154857,3628580997551890,3632115466215379,3633516585258144,3636013168823101,3644503150656777,3645611623206895,3648590415100172,3650411848640853,3651208352182968,3659962641982274,3663160485730853,3665217012698891,3670531861702815,3678142299238288,3679412885698189,3679723249740163,3688280883691690,3688327457349314,3690688866820810,3705003329123112,3718621708258333,3722526932992524,3723634868396071,3726938239845979,3728715138302811,3734192362762123,3737946633507459,3740458701179796,3742193997053523,3746284516790765,3750533866251628,3752117756365521,3756936323992755,3757543406733882,3762486477132181,3762751701280063,3767814128506980,3773610790058654,3776595480654768,3776811730885528,3779767620249001,3786173858770873,3794100680281451,3794855359477272,3797500278748845,3797572839534654,3801836630743327,3806047581097738,3809879441266392,3810799390411918,3821170295134013,3821630362687996,3822296640796331,3823175201590864,3825757657900286,3827560739565438,3831533818899493,3835198273307888,3835558444026950,3837899280987896,3841522241190425,3842446209291097,3856495945466312,3856632581492180,3860116438298861,3862694398476978,3863189469668600,3869850399187705,3871935007496414,3872628172162502,3873324719285632,3878833882038024,3880243619746497,3880529063199350,3882311402640088,3887523678289264,3893564413662650,3899793396857493,3908511683767038,3911082399615065,3917275362273600,3921777467979712,3925362829074370,3928994435189027,3929160579967105,3929583967036139,3934142879673460,3941494939757571,3941525993199884,3942048398609850,3949319172964121,3949404714704001,3951447621965404,3968940236457600,3972341462705556,3973437909773411,3977362201597748,3980515012130917,3982398317594569,3983919240708090,3991304962417620,3996232480056804,4001338100305267,4003000776821491,4010634521845832,4011194441900352,4012917626427041,4018474899910568,4020678940249116,4020893102640326,4023604165179706,4026092267698298,4026688740814878,4034351439123543,4036574510586483,4037588403031850,4039922936524250,4039932863104502,4040392164753436,4041139896587433,4044662871102224,4049703973786608,4051543922389363,4052681338148215,4055364557376134,4062261174287869,4065415697051189,4071633959541762,4079083296648701,4086687744224011,4094432968332287,4097518435638924,4102324633120593,4103314051061542,4114248458913135,4122077681924969,4123781140489537,4132460402529320,4134892291048521,4135928574382122,4138840172908252,4139231196428117,4143693188392502,4150745968454974,4151459023776703,4154752706236746,4156105039099431,4157256439982237,4157669782790617,4166107478621219,4167383773226728,4167492383925201,4168181927338698,4175996866082730,4176623816804364,4183402718643845,4188349160298046,4195677986920473,4198198981311457,4199209071018538,4199346559716278,4199937026193161,4200142600556427,4201374728073667,4210305409366342,4211040452351221,4214771019264212,4225632034684502,4234174233250830,4245383804030219,4245913779845337,4253320341425011,4255227426589464,4257521149254292,4264631484544901,4266389306044662,4267533238822472,4275580175408244,4289359014707288,4295704004397925,4300982165488644,4301841948469269,4302934567016197,4305626904573311,4312242836327385,4316505852417381,4320671705521862,4320948899808113,4329077654347637,4330412836235513,4332389830901236,4332584479772575,4335310014667247,4337120565239620,4340454370272718,4345864924315697,4346218796838410,4352222894063447,4354953199641044,4356160430961353,4357880027267574,4367125746948875,4369068622168572,4371927952461526,4374872954793723,4377274169565988,4382694020890333,4383134213334340,4387047294147332,4388622108830575,4393722386432944,4394935128907327,4405185846773600,4409442890926800,4418995118878418,4419676464130546,4421125787216995,4425233123315500,4430853131113411,4433648774646017,4434408204046953,4435949176623047,4437545167361411,4438317402421127,4438817177523704,4443045313246981,4444824473102486,4445273578631201,4454575698901762,4458728897870062,4461351844352989,4462449521144694,4464228910638153,4467196354294999,4474000580782956,4474046785524256,4474574743148389,4481408122328948,4486507708773899,4495575342843287,4496415696378542,4501876131664304,4508459014863643,4517133177825796,4525521793503217,4528035909846301,4532427908015373,4535830530899372,4538230925800141,4539716842839588,4551316076842289,4552805172103424,4561703129830313,4562273139429756,4562889929649950,4572477816005275,4573883165195550,4577060828696911,4577457918883209,4577958025008691,4580199770736665,4582265498314074,4585370103466467,4595548152987374,4602434211109390,4607450449118254,4620004533537053,4621113398888425,4622580510893583,4630992980149087,4634141648884370,4640301477916105,4641399081470667,4641458089041250,4641794721319090,4641810465552112,4645238665720809,4645621983164383,4646458337623997,4647556566493222,4651299169613798,4663702386772812,4665559789434328,4669236331860436,4671025914890237,4671062938394354,4676205735481526,4681240613933899,4683821965014649,4689342516749982,4690119446223188,4694128337468791,4696124657031960,4696193088102148,4696638008353613,4698423835133356,4699216184918082,4704195358103927,4708213524509388,4721521787903217,4723274946162868,4729163773640834,4730341942998122,4750145321126258,4751422453008817,4755912323473330,4756833761182793,4758803188341003,4762437486337017,4762834014218571,4778822146835476,4784620939372924,4784854530655115,4785601845773156,4786683724318639,4788364915970531,4791650559342688,4792800308786051,4793495469956659,4794337453617434,4797047238512497,4800291638880957,4804645672015140,4806827593856676,4811729290308862,4813583810073804,4817878202402319,4819210711953623,4819297775674748,4819311564829320,4822240770685261,4823251614359045,4825955485244615,4828732317464211,4833444690765931,4836894122787451,4838221388703602,4848960069162027,4856643780511233,4859353321888294,4859467776000605,4861078197128753,4868100857196342,4869271395674487,4875972042816124,4879638248944748,4881531428270387,4894597037736842,4900275904853327,4902345078498684,4907673099841830,4912787048821119,4914549573455980,4930034114903088,4938885956719683,4938984906671371,4952413633841153,4957117546097581,4962024566226233,4964966617138828,4966376651170584,4973778510774167,4975540053830624,4978106676024424,4986110732910751,4995563329299788,4996212995257738,4999915977157470,5011891458604349,5012633125949878,5017724733800167,5018157783395788,5018781410893851,5019357482030347,5021445876086138,5030617336717801,5033368364296409,5038003571725954,5045163363224076,5047944681561823,5054098670441464,5057486321357458,5057790328506277,5059239413878415,5059653728314562,5075357793289723,5078143579563766,5082075970958360,5086177235816634,5090517135844571,5095238786157913,5095997925642684,5096759450835327,5097502836207144,5101214857653244,5102026127818781,5102867437873560,5108455108876502,5109339895416818,5112547786374962,5113517669186741,5113987619419017,5125513112408495,5127124574162351,5127331696245969,5128951178677788,5132612621833970,5143420500944709,5145276514713692,5146830226631178,5148881101936222,5149206177910233,5149437337079666,5149863467137139,5150315306295015,5150426384165948,5152031727525643,5154406455748760,5156461422732999,5157379504662047,5161207050871469,5161248283909416,5164496015188591,5169183503623442,5170033828188437,5172451986737288,5173899903805393,5174341244024506,5174660761082943,5178681082547978,5185496711050665,5199397406461572,5199519828192191,5216652140931560,5222047064350262,5222282340592980,5225960701910860,5230003976759540,5231985318055496,5236341345649495,5238635836185856,5239269458643567,5242274139089145,5247586236105385,5251993594243967,5256157883002967,5260023793294245,5262424254200249,5262515077905251,5265232429826960,5273272937856228,5277050637122870,5284015351506042,5291703312055669,5298034705538719,5302053963299700,5304711911200062,5313230992694743,5314446308863251,5316323217920338,5318153535798629,5319128074583642,5326372158895078,5327554389775897,5328891577748554,5333028765846132,5333952601578012,5334935043856488,5335020091722251,5340420023836909,5345704507186657,5349788779068053,5351104001242138,5358493250319346,5361787265106398,5364846600059577,5367133911213099,5367718245082904,5370226527358712,5372175647130534,5375274967884629,5379968233240165,5380736206240325,5381546956953785,5383368125410553,5385746119086850,5386810090653851,5388894770243354,5390748522455977,5394080989067132,5396868798166091,5397913443318485,5398598214938688,5400291293650351,5403110884625308,5406614253824595,5408167860716448,5408684428107176,5410632742040879,5412454472585029,5415609710834006,5419089032931253,5425776155703968,5426343929555151,5430164168254949,5433304691996431,5435448562589939,5440154526785082,5442550985028476,5443519792343783,5444690183081885,5450650932615338,5455725933689601,5458279931832152,5465378018390073,5465468293521107,5470523383371739,5470969344336539,5475821882378207,5477177690474931,5482250465546522,5484161477936466,5489284312856062,5489369658364069,5490569127868792,5491063328575234,5493319803023083,5493870604473986,5494363692102912,5495499148937672,5503103710464614,5503513389639664,5507615794296947,5508503680735494,5517653225284855,5521521718617004,5525271231853414,5525784499514800,5536775761553566,5543069752424250,5544364757593219,5545802799820933,5551558523406896,5554380825386759,5557919753549640,5559553479542169,5560825696398560,5570645491117548,5571611222021582,5575596617449768,5579977210132164,5592415623299140,5593426453232836,5595805533420086,5602700450924399,5603538322319793,5611751716804501,5613862108602356,5614909593083489,5620948070768841,5621064494334548,5624980176214575,5626090376879123,5630820724993122,5631339882742194,5637312677638017,5642756368786070,5646619733332345,5653701086020480,5656741558549497,5658909534123937,5663092617828839,5663224746690969,5663385121189069,5667246937392321,5680063203437155,5685769039380624,5697986357589265,5699319238678867,5710195316669727,5710364792755140,5712513634730123,5714049549411876,5717070125530008,5717707514404603,5718933939076632,5719318350374149,5722219703153811,5737673156168293,5740477961003848,5743439881123553,5746087812806105,5757334188672719,5759061891073762,5759605430401092,5760917932621246,5762846753375421,5768847482599071,5775786807466214,5778465954807704,5779727192598359,5782454578043069,5784207630429531,5787478509200132,5795310516601245,5799653338299710,5812168700056249,5813405909746709,5814659226632216,5815769481430106,5816254259189301,5817139504392687,5818962864882161,5820855454510934,5828565941868585,5832544070159164,5838532420889856,5842761102579491,5846508833190611,5848249740129972,5854937355756548,5856022939536906,5858993021903933,5870645665739004,5876393418760803,5876736261749158,5877001606837482,5879985416123329,5885444131631387,5891024028896298,5894685367317522,5898490390630341,5899953571983439,5903023130181011,5903484378223350,5903666264650934,5903694388453077,5905923307105350,5908696090042283,5913584686996270,5915859656997442,5915879684950182,5916931928833529,5919430186483428,5924117520799744,5924879546681533,5932662790863585,5935312555770245,5935661430493388,5937817448042430,5947101870703205,5950972051903959,5951041949791953,5951726048170658,5972218700939363,5973250287141740,5973677832178283,5977031849078959,5990178361033769,5990570628261118,6001206595929325,6002276243709531,6006751473613523,6006897308518556,6011214467146689,6016555602340361,6023708485790729,6027671084996298,6028501758004444,6029374529344504,6030811056861793,6032097611334280,6035955206980948,6036393255326821,6043316342842623,6045838883225433,6052608603431831,6053804686685524,6053958863313339,6055268730727559,6056807484550007,6058584581621317,6059626128614092,6070104051324693,6083108464119662,6085590822787717,6090956327042002,6094860440146813,6095038202403332,6096229123772452,6097073203191647,6103891026698555,6104688884599994,6107758160260988,6122246130680759,6124004526649147,6125907283269891,6128284886205816,6132924004245246,6137419131615699,6137499190958511,6139205116246240,6142105213155394,6142688368084569,6142913125046520,6144042650109511,6144095475272536,6148853279972165,6157729055897116,6158322788243107,6160835787414693,6164759784469239,6167018513092476,6167607991565253,6171707826744820,6174144459043731,6177490881631784,6177692002705307,6180599532722384,6180617553423208,6181251707047392,6182491554240294,6190932940940803,6192358086666249,6194877677308546,6198857031919734,6200081358996517,6202082397019416,6205024632916134,6207302580763824,6211423761058583,6215284878845774,6215440151333948,6216154454451807,6218233647565127,6218512470330013,6220604711061324,6227071256308643,6233498546819624,6236798857143890,6243407719027967,6244874563473516,6245142031174040,6246838555534920,6249074081912395,6249758679502616,6250557402527662,6251868356478317,6256321719332215,6261686455216337,6264775741996340,6270623030455246,6274969421000503,6280006843403268,6281149158892909,6296961749764111,6300447716613718,6304297838290460,6306042178881559,6307115079760207,6312245698368186,6322233760419356,6323173079753451,6324812402453371,6335023550154225,6353191312166053,6354692547077099,6357396963255601,6358389478584958,6359135369542064,6368768790664617,6371090203570186,6372329995436972,6373927709843793,6374693910197545,6379348598089064,6381541745622015,6385800661078082,6388937996347478,6390863793314128,6393248753656632,6407210526643342,6408730838629478,6417566655445436,6423382525818443,6425609470770570,6436083078959781,6436814879261326,6442916426075876,6445879733828998,6454320146259766,6454656458940756,6458237633544796,6459246249643680,6462957099049843,6466065562806689,6471689417982028,6482532068799143,6489722108699832,6490299073029283,6494216993344366,6499734594021057,6503186772282900,6504859169508928,6507830449842499,6510975929277435,6512429809706119,6516226128433302,6523391982496272,6534435207304569,6546595430555691,6546752598032205,6558599467268843,6559912537272461,6565025138801153,6568196183285198,6571097539012216,6578237361036784,6578503095620162,6585680325396501,6587654701564589,6595708386553174,6608001737567202,6616149821789620,6618251453481948,6618435915029628,6618676721046335,6621057137514784,6622760768363465,6623916460399609,6627687708278604,6627783782930560,6630093742634040,6633679848040650,6641201043777485,6643521507427133,6645310761621776,6648932781635955,6662203303202718,6668468822319197,6674364905825227,6678173806211118,6678617623247346,6682614209582006,6684865188797781,6688488067507556,6692574202860978,6699342662745446,6699601051457480,6699624106317412,6704989683409671,6712177752369021,6720191931854899,6721985110519865,6728831533279314,6729387689420763,6740158910360226,6740782983077394,6741215022206694,6742696713154438,6745753170262651,6747208404406959,6747763101536606,6749753901939374,6752595765235073,6754613815657166,6755291783706242,6759785636657525,6760588036724092,6771281046319400,6778747192742624,6785714707329795,6788002061659117,6788203480253865,6793843162054529,6794299705676629,6801783177540135,6803312883106461,6805314972544938,6818759912474922,6820988811787355,6823062398472026,6826362904176932,6827299283549200,6828195113056916,6828673134192974,6830256824394694,6832757900847449,6839800914177389,6844288668932623,6844336660738179,6845320561422543,6867967645790541,6871074917650344,6871762569059759,6876239502460282,6878773843563416,6885815333874594,6888484602467342,6898143968669196,6900004638975216,6905914351227176,6910834673790415,6911812457892129,6914055104334094,6919747802868531,6923486337221090,6925667026147338,6933453950416148,6938107292471175,6938223955509899,6941024220883212,6942033581849643,6943458456583346,6945905024717815,6958904824641253,6965104736708795,6966317419189633,6967131174911621,6967523404032078,6968626913917078,6969723087551023,6969879544962764,6973244897917836,6976680325243925,6979025352783650,6979370520679168,6980494356161697,6984882368689931,6991429378659097,6993040182965693,6995106444038232,7013532370262403,7016766698233684,7021458253363648,7024829388289761,7037699445900528,7038117440889701,7047751781972594,7068328396622979,7078519684380004,7079136072514786,7079683617185872,7080593167563472,7081754833089042,7090263369022454,7090827224293435,7098844983687608,7103287349340715,7106775558992670,7107670335907433,7112480093601650,7115518871031565,7117602179959460,7117702213846209,7121896123546063,7132927597129919,7134741662059672,7138333125007121,7140267571474431,7142051916052761,7151557370156782,7151630939274842,7152477932457527,7159009930103737,7163383528300707,7163778957994361,7164516813412020,7165245447295611,7179002153816766,7179903040144596,7182233643190269,7182765199375506,7184665213216156,7186047534415508,7191096990307504,7192853768347715,7193706102549630,7194390208322086,7203674420028153,7205356147061987,7205440304046385,7212278254469221,7213120783173544,7222827358840359,7224545604825492,7225295067327053,7228437063271890,7229216536358274,7229486634256081,7232125512735235,7235403866067319,7239097855225524,7242588962722849,7244564678730935,7244768482327881,7245566857344055,7246915842148466,7248035515958267,7248740619006619,7261781244132035,7262289934411894,7266821489213820,7276326602211605,7277092712154010,7277675196574359,7279500143289769,7285678364340995,7286552397490444,7289711990915466,7291166276647549,7291878183300562,7293014405240845,7293120299138230,7296021783720685,7302877510804560,7305136552146877,7308326077425136,7309526818453637,7312457538294268,7316330078533123,7326575126577204,7328477651553143,7334460645181314,7338010137201066,7344453486207090,7348071649723458,7351715416841733,7354010904401429,7358759012302734,7360258178944323,7363914809349690,7368773239687673,7368990891984284,7369067702745463,7370610419112862,7372069375963896,7372949260070506,7378192097899948,7384234111099756,7386045769570324,7390506088312346,7390710096067356,7398773968230003,7399651877743543,7407156702916619,7407505476310295,7412075044877324,7413103855739244,7416878995770443,7417889495517890,7417992892826458,7418488700207131,7425782918083640,7426542400535424,7427800180129173,7428977237077501,7430512069482015,7435984239692232,7436873913790602,7437474890639138,7443107233720726,7444471858317499,7445843328639391,7447921740402688,7457626872755122,7461417070760230,7462663569101078,7463631301411392,7464791273301861,7465698531247575,7465989092511044,7468955978108988,7470414970130956,7470691742535496,7472016146671178,7475500532623013,7476427212005998,7476626636382557,7490128336689868,7496125413626459,7496331600674721,7496586171914845,7497334675461455,7498030447626019,7498854721985035,7499741802632764,7501028258951772,7507971309059323,7513140878034397,7520995594935128,7522857939238615,7523568386509127,7524079580225271,7531837667095752,7535413758699104,7541987648743096,7547834066144263,7549509942679840,7558348891266390,7562422547591358,7567376160342247,7570266295972391,7570701292061586,7574807836993530,7575973317107614,7577088488345910,7577833848718658,7578638579275105,7580092247778121,7583079410262922,7583396165831142,7583764379769101,7590281297167973,7594145655959215,7596032551054600,7597146399455249,7598973979549112,7607301189042080,7609709905585175,7610703887034738,7612217782008852,7612590563938043,7614314828758987,7626611098574312,7632486697445093,7635361684630569,7635781595842092,7637503540227229,7652643882172024,7654546417001702,7658477424630193,7658594690166121,7658756342775449,7659221163244052,7662988662313759,7670573068797315,7670620641239355,7672952384552853,7688048940346303,7689154854909634,7692157387739297,7692684970839720,7692715035163949,7692872154514462,7699490741028377,7700977357734436,7702985130021974,7704411344416172,7708512355032444,7710242527125752,7713386097094125,7716490464557575,7719367164738556,7721077927518745,7721609917312402,7724275439905728,7724711616367069,7727393378005013,7727688737658572,7728376014820122,7729310710317073,7734200858227759,7737983217239889,7738701740734266,7739863878221100,7748491852382750,7761354279867729,7764178055458929,7766279931264675,7771590301023685,7774873548808587,7775101063842022,7779960077213875,7786006720140585,7786623092023665,7788620682842041,7789614831618262,7790698030398764,7794053661517357,7797582785345941,7799750768370576,7800931705061909,7806696954752845,7807627836703959,7809275090934984,7810562577473506,7810998696754018,7812875292301653,7813351823453750,7815570269509758,7818433714447086,7818985241100641,7820811550237674,7826881780965015,7841588711354365,7852366441407035,7855477820333867,7858337898821330,7860940256961100,7862242994456228,7868991532284921,7875449163603356,7877526742599223,7884811158802680,7885098411306234,7885848475582109,7888074400901569,7888437547783278,7888500835141269,7899000176906699,7900170751256211,7900621082983922,7905781741383824,7915002755515393,7916680314419175,7929090546906102,7930649670973791,7931707661135896,7932664861586881,7936886244974173,7944913299381989,7945929831888496,7947631560228941,7950990573236144,7954932398971022,7955707767338343,7957474102755475,7959145831679961,7961836057698682,7965048882911994,7965254194340254,7969662040440070,7980381451760704,7980587376998310,7980735420462798,7985722197062386,7987424295175338,7995443309794354,7997135431578468,8006897017337402,8006976419849250,8011722895901690,8020262137556052,8021771731265660,8022639767891247,8027888930993228,8028030091531706,8031622641498868,8032268170160689,8036544756403250,8042606792528101,8059389868173903,8059450627794768,8065220473196449,8065582408992410,8066856250710691,8071865664728388,8077418220136860,8082463447862295,8082820682426435,8089588938475723,8095523873680122,8097390569526238,8101747032613392,8105559582340911,8106928489710751,8111834837966998,8112104031271206,8114237531654532,8127670090034835,8129591252255075,8130207971385588,8136369282029634,8142129094140152,8142634926688230,8146423080936368,8147298843986804,8152440707511793,8154879940866529,8161574196354384,8170876711488279,8173481093695052,8174511269651377,8178398099602601,8180578302229082,8181586463868245,8192542128082353,8194052295501546,8194969512324171,8201561228078010,8205287009351885,8213078648151372,8214059341854817,8216440810041214,8217581100021235,8234783421929082,8243069565420263,8246362229814725,8246571670186657,8246716772071880,8249298655984594,8250387434460343,8251262500438279,8253292038013840,8255193598573136,8256150707384279,8262954804685181,8264880757955296,8269769863632137,8271331264772547,8279296087284122,8279996819873290,8282488428172923,8284234491989688,8289349890472704,8289498162240419,8302834672979549,8303400292309646,8309633984147819,8318696076968435,8322561813637125,8324890577048813,8325237800434916,8325244982386600,8325938551251775,8326972902154084,8332190045511090,8333273920187213,8333295411468735,8336642144860625,8336794237476945,8340676844945415,8342359556228636,8343138042400877,8343422431629489,8348222101988490,8348990845348274,8349203373840720,8349929839053237,8353187069342082,8355184882068744,8355216613777188,8357480319128064,8358858858741708,8359032487697274,8359937481115835,8365483157606045,8369163766277845,8369986014094300,8370512453717737,8372233568621885,8372801112194483,8378780774433401,8384716609191558,8390262752827048,8391964943990114,8391968117889949,8392149294258272,8397902100674760,8401772412872195,8408375889672914,8411174366535457,8415585315618209,8416272151484023,8422456048756653,8425746898298470,8430090272302554,8437064789335853,8438071844029923,8440380356686069,8442951603563362,8444597753784738,8451164588916518,8452143133964194,8452834615819362,8457432590283505,8457870432601145,8460876401008247,8462195561662212,8462356309409364,8462779787380437,8463894151036866,8468076223787436,8469301843796323,8471378426717330,8471415745047933,8471563440277386,8472404382970836,8478129640091772,8478656700478130,8492172722223897,8498566054392581,8499229793648454,8506577707409417,8509132075144310,8512769287132428,8513163154527267,8513504634548185,8515344063519634,8520471745574237,8522204087666054,8524148859687867,8526397555774454,8529230741888138,8532559561743484,8532654039076026,8533878116076637,8533995416155386,8534972628296620,8535864863010513,8535971593214147,8536095899242944,8541155088407770,8542730575053594,8543114315775141,8544314610710198,8550168506511268,8552407797606671,8554633315621859,8555174066389539,8557956937889635,8558151645997922,8564419827076679,8573037870741832,8576579691621984,8581367096989732,8582261197731227,8584103263448365,8586129879796676,8588390118640027,8598659143101208,8599129846364328,8601522207106423,8602281558256184,8606118628054373,8609962853072397,8614121798757181,8617181526340432,8624540329478798,8626391389132139,8637210920266035,8642764308475012,8643781560678532,8649648448925106,8654788098657391,8656720607859172,8663480084138334,8668647436071212,8676906171988104,8681093783245916,8681657579012301,8681913385441783,8684040140251633,8684751768894594,8687233995374161,8689451052146568,8694259890202010,8707543506731647,8712178326749055,8713167337349649,8720400968274939,8721624366660549,8723528441052177,8728082879135077,8729412146383037,8730722008863330,8734134339123262,8744943197261790,8752084776243496,8752229489182462,8756024741015291,8764086372954576,8765499574275666,8771763736993583,8774891003290900,8776098695299089,8781771689282057,8786064399236492,8788645315265601,8789521527155337,8800564096781294,8802869383602903,8804388443116965,8822012246032459,8824420613904824,8833617601200992,8839028706384124,8845997843748149,8848441586602708,8851257701148635,8853468904397509,8861373802714789,8863519477739503,8864760219124956,8867353885504610,8868704959256862,8869726068715730,8873178736038157,8877414428990774,8877639105413482,8888927845730161,8893272613048649,8895434307439131,8895481679956001,8896675958607703,8906632086442921,8909764344727962,8910696373745749,8914511413857104,8917771334029599,8922546229199542,8935766685372472,8941687890115326,8946727890515135,8953024300985451,8953097697609406,8973117667284369,8976689351398218,8979052050754475,8979138566806786,8981576765955511,8984458105294828,8989003157868761,8998231894652099,9003633319081270,9007488636990326,9014303703878842,9017342455231486,9017775639960192,9017891402481729,9021516015590569,9021894799811309,9026119584500749,9032187371857715,9032210357540524,9037381687162545,9038550674961458,9043118071475817,9045075196494312,9048587505711843,9051912387029910,9056929643995395,9060898928960346,9062131144374189,9064531090448266,9067993556866039,9069591997036415,9073037543243418,9073542014929237,9074741782974562,9074896498908993,9074954160428210,9079318768294079,9079888527353695,9086751601932227,9090741520266450,9091979750057327,9094268438464734,9095103196939357,9107447274695798,9108055709626815,9118451715638510,9125362263593744,9126355422536516,9129589011938145,9141233415372106,9145865355932391,9146655579064944,9150924106375181,9154695178495413,9154906598387783,9156606782616571,9157375841856013,9158676476944194,9162668962659557,9164560080137859,9164808695055580,9165398869818013,9167897025495661,9169656716086699,9170930061820260,9173729001963953,9180092141515547,9180835981759675,9181392291811972,9182988335016139,9191103445945706,9191895644403376,9192998929861767,9211473363037424,9213354462894451,9216455003394783,9218987363983060,9220215058481045,9224473925896720,9230580606053228,9230781676144500,9233097697027556,9240969247386165,9241853489961590,9244558133126668,9247060266595808,9249469378126723,9262046728311117,9263681010079025,9271020411926998,9281037194537819,9285141224306324,9286405859692622,9287536154919442,9292441630319582,9305483767431545,9307808415233512,9310504704434237,9312863640688829,9321928567260274,9335430691435020,9349870750958121,9351366438163042,9352141537262568,9355129827150685,9355940792017453,9356671043680573,9358554525655764,9365839127076720,9369093634111987,9375641216209833,9380627712808545,9391486822118482,9394976106188444,9397328261168293,9403765537033865,9404565557844940,9408921495622508,9418107590281736,9419050885946372,9422324913293330,9423486081818391,9424880153466631,9431002060282822,9431492779408494,9435750849137196,9435999454995538,9436467803114520,9438440967152456,9449047384009255,9449340008831532,9449825490510575,9450124549058915,9450266223912705,9451923415826938,9453754181386129,9455474915077424,9461773699588349,9474415802799799,9475829378737099,9475995871994700,9481386469401705,9484371784536628,9484984344438553,9488440660460028,9494545505111169,9499991472364593,9500280517945270,9506279993556395,9512690141526979,9517376601859417,9535833980442651,9538837225746487,9543648898717657,9547557360432895,9566613425099599,9570293654144253,9571330378157840,9573924489710217,9575165150956720,9575447421008044,9575885834850839,9580743881484339,9583968797309156,9584561427927733,9592438802141140,9595887445842995,9602902468421116,9606089004061910,9612716915528679,9615883008659902,9618201274077735,9624534057788017,9624758856235873,9627779818273370,9630291603264391,9635050901818979,9638553113056923,9640256664119083,9641362208707358,9645470246174746,9654460153869349,9655820024254396,9657079142409314,9659932051785010,9662025225596157,9667241625101916,9667276386502943,9670575633086786,9672577363633156,9677328620414229,9678605646922309,9680945785313483,9681067738687093,9681267064784409,9684623279089548,9692893983377486,9703534916274044,9704279295656371,9710300281092436,9713887926847430,9722172985687510,9725792147964753,9730102559873491,9731503574801034,9732040155273334,9734113097684625,9745464335501377,9759300027118446,9765786817226776,9774084603677009,9775954892341561,9781535106471005,9782799358625264,9787218473221709,9788457577027091,9790881050593378,9791716416162907,9793594547272040,9797573432707706,9799889278686304,9800030295823990,9800643300496312,9801531586161304,9806868721015896,9810257422545913,9810585298035378,9818968963003545,9827735758375406,9830504103227308,9839088699938530,9840344155855293,9842146939578796,9847076554159479,9849134001046702,9852441706161363,9855206514878035,9858589834827721,9861618221073016,9868175191633702,9870764755744667,9884359216488201,9885568741169094,9888383442614567,9889475178157085,9897712283656982,9905482398851907,9905509887050233,9906275973443018,9914537510086498,9916047888280925,9925919096295581,9927737657495008,9929573922212347,9929764483111561,9936648632787612,9936930189944836,9942546535848415,9943414292728350,9943562503792795,9943864011523125,9944926015830475,9949019217971450,9954313852436822,9956729180121161,9957485611486827,9959245907790498,9959649353025290,9963611887803061,9965461136179694,9971538903925806,9972659184707003,9977300414299533,9978079501560780,9984981814399679,9987074046553413,9988183784680681,9989307766906661,9992489863586669,9994394125866496,9999648366321789,10000031604968879,10002844747369936,10004925495910091,10008184940193864,10008461597296659,10010370056943249,10012185312140615,10013671898596744,10015492885655362,10023685800384052,10024272312740748,10024518507785908,10032518948661767,10035990167276835,10037675774604732,10038212235930891,10039680011817758,10040986745269183,10043143509796825,10059920635183403,10060828780412828,10063209359600748,10063600315370974,10065868826751899,10069449569085214,10079621948289706,10079780537607131,10083178186730993,10083835921342635,10087308692864238,10097389948237264,10099505447983235,10114762120457964,10122602940701424,10127093259012746,10137337268168058,10147088443674066,10154032807160608,10154307535853042,10155542068394802,10160572363193486,10168672086600643,10171123087736692,10175620188550308,10176491974309391,10180241838937158,10185718177412770,10194722954029343,10196461247193047,10198150880968885,10199671620517651,10199695570402626,10213139479075307,10213463533232206,10216483252367678,10217695934166737,10224107621925080,10224341861439251,10225134693123796,10228698111458386,10232055143615071,10240074124610978,10243488805517527,10246709309375903,10250309444905037,10255002992865388,10263727029912731,10264525977886481,10266632870176478,10266820110531598,10268623122698602,10270163349933746,10271469102327032,10272466256560721,10275743124733814,10276224552844118,10279570843072650,10280390537061924,10281974844357620,10296558578829119,10297624439979852,10300473582041388,10303678734793518,10306671241348195,10308330126619188,10309932015401873,10313330243851850,10322521592618940,10324994061564475,10327639436128444,10327836487278240,10328062775184436,10333141638123601,10334247661646447,10336137590649056,10338920736989409,10338954267321910,10343961504376443,10344652626799903,10345084432193915,10349133099508569,10353863721850444,10359698556732429,10362411781950181,10363323817948865,10363856866900979,10364382029087166,10372218357405989,10378769233943499,10383366177443313,10389930038194229,10391227460972667,10392794184418963,10398456973956573,10400718449268838,10401822723036473,10402496249924470,10405138061495149,10414467140029313,10416168489938655,10418627906817111,10419717389280422,10420088526584073,10427907045176189,10429449856647102,10429527060520295,10435742830395507,10437768643316041,10438557857523653,10438647586807590,10440006848965726,10440487445875223,10440675814381911,10440838933113584,10442812714871140,10444872472907940,10444918775580154,10446053077534203,10447329823526441,10447915458986158,10449478084214979,10452337317481683,10455776599349428,10466519528405133,10467269725152768,10469454767792558,10470445288089220,10475593353115645,10479056751944619,10481951551463793,10482250308230673,10483827694271696,10488747371854077,10500385026427457,10500488552967312,10501260356111404,10512322942799654,10523297170953308,10524197477213077,10526510768148749,10536793015345856,10543343012752730,10545121874221728,10548308070444431,10548369311321575,10552704438057457,10563044468102777,10564172672934646,10569936885011978,10570501131760442,10572007743658085,10573848693130061,10576973213646289,10578269597246868,10583112117834044,10584639348411680,10594696458041961,10595951863277111,10608578244765171,10614584966626439,10620592192554759,10620798042888920,10620903315872377,10621082248937070,10628643234912171,10628921785417252,10629062237330307,10633505584587868,10635387052790493,10636120887409717,10646006703435010,10647477117223054,10650028403614625,10651121348848499,10651345084987832,10654625803270603,10658173942822862,10662504984834470,10666212884489150,10674748481093869,10682941113641784,10687323304253849,10688559968805974,10691866174146243,10694995464922729,10695927691488062,10696210215422820,10699195330093884,10706304398299584,10706909043141392,10711714669403874,10718007421668166,10729128988836847,10731904283058389,10739494197398891,10739801112151611,10754362437493971,10756057668895469,10760825923948907,10766441205077631,10772046172473065,10774595446367799,10784226394558794,10788763405851951,10789995657189753,10791861050542069,10802291531494117,10808364573742279,10818898059592134,10824560278958441,10827594971106799,10829139547484424,10839803231136688,10840559858292177,10842762916923867,10845347885148728,10846960440347385,10847253104607377,10848123266416937,10852276831524456,10854428106437565,10861241406654155,10862767928581833,10885189706501902,10885610118151807,10887994298217623,10889705602128169,10889922295232389,10891169429104356,10894930198422418,10898755272190895,10899505158719250,10908847810397854,10913442039163653,10914509218958331,10917306751752594,10921844952698928,10923207650640427,10926914968716545,10928023009400926,10929092524133184,10932202328627689,10936661551264740,10948651072438721,10951948612195804,10957392874098981,10962850107056207,10965247315180552,10967958009290469,10972909371352109,10973378500551496,10974341394948959,10975117317621830,10984973432275198,10987375778918246,10989202769093484,10990409005986868,10991558669034873,10992487444525627,10993385229040135,10995462961190157,10997692366332970,10998901653014457,11001665093098228,11008808435120331,11014427382218185,11019805073365185,11022642525947194,11023763375301913,11024320739845292,11024882796236184,11026937591363346,11027888013301225,11029825398794377,11038025471456068,11042536781194006,11054833551017746,11056592382175061,11060604597813501,11062402375665545,11065372708374227,11067445870108559,11069851171800453,11078922436292795,11080633936367688,11084732592274012,11086682643753664,11090552698103596,11090658585225857,11093188409391605,11095383304270179,11097675961341227,11099369753166044,11099551546210604,11106506387649741,11107790185802013,11123159825527527,11127177251318180,11129601052279134,11129859357638708,11135583018648230,11140988948695005,11145709417931599,11150199869893669,11151387183049239,11151502397313142,11154110766156613,11155371761778170,11157295858466191,11158629464450723,11159414148224323,11164777782395177,11169430954279703,11175202072568888,11175852637265303,11182614329697619,11184082345585609,11189705813167959,11200002087496543,11206266985990044,11212811284757912,11221071832453748,11221944462355990,11226519618035312,11228541607320093,11242771850103375,11246366304663746,11247749010895948,11248516680815322,11253108954825869,11254820718151050,11259273102107656,11261264491503353,11265599260848364,11266044641422248,11273050277652437,11280555107389759,11282775695475018,11287600375177114,11287893566206082,11289098740261755,11294033441021320,11294773174907559,11296245208210814,11296470298526751,11305713023756983,11314863622778589,11315258511556799,11318554733251064,11318702654300182,11319884533641300,11327586528497295,11327962158491035,11328275638112363,11330273278512837,11332552015667182,11332697629166595,11339380783297842,11340864658831256,11341499658993269,11345417090314925,11345675657880008,11345676553858105,11347392098829511,11350409656754127,11351342558936179,11356129989349558,11357460555425130,11358086643159577,11364648346737734,11364824056279735,11375384258325108,11383750361347134,11385168267308423,11389085993650118,11390806798887033,11397120253984795,11401700519195899,11407990305495344,11409131295056209,11409539605925674,11412775300232418,11415931058237717,11417029279499404,11418837401792416,11419050457279467,11425460679750797,11425662918976551,11425674126078597,11426226096713572,11428009680185526,11428645865887160,11438749233694215,11438964462131562,11439459859045383,11441352104880750,11449215149184077,11451628260579985,11452907797520228,11454513203644820,11456881578527630,11457346667741182,11459692638425608,11461197052190285,11462322406268747,11463847343590781,11467023328231824,11475621626604237,11478518643790981,11479308399516360,11480479501736039,11481618683495992,11482045627548411,11484846169745779,11495135828909763,11495940916242717,11496597527405109,11501735487559917,11504102260549809,11519358680969077,11520326123589592,11524872224376445,11528838411980010,11529868184218561,11530775986224529,11532404505521434,11540894335577353,11542654016596156,11544013273650036,11549882026188551,11555345985992577,11557042562885581,11560241639867312,11564144512113061,11568498682605843,11568678400586201,11571509198989020,11578506049932280,11579799804334255,11580137502987103,11581727638901896,11582679596601249,11583117656203215,11583507699894777,11585101265495681,11591047076552913,11597838643220140,11599758357243289,11602974466808884,11606641527777687,11611075089640896,11611748354430947,11612441214023420,11614076397936832,11617014574952198,11619486235348603,11620240919983985,11630644392646970,11635654976144153,11647860207129349,11653989895623444,11654096880041734,11657305088193972,11658683525550614,11664834793123518,11668903396015121,11672731802674267,11675090294053441,11675693720283985,11677165015385087,11678549904666632,11682179864909511,11684720239124533,11686779979541908,11687293075071490,11688194680736119,11688237614883154,11692359880827672,11693102982874445,11698756388262452,11706304165327067,11708423865084678,11713690607980814,11715198530711638,11715865254416537,11719221642455460,11720785116417048,11720873374212079,11724825796758899,11730215861616220,11730467845423531,11731164734577661,11732952721643258,11734286258484747,11738267971902102,11741745751488248,11741795538258227,11742706162990999,11752793473682764,11753431031818860,11760357200965436,11763018637241008,11764356908364626,11764874035248246,11765704631176088,11770706878359270,11776764748856507,11776942132964186,11777247958775743,11779851101536854,11780837550785665,11784146238668811,11785019194973166,11785179977172715,11786257969749074,11788283962253789,11790027713938832,11794754868481503,11801008269183730,11805477304749933,11805878919584950,11806503727533719,11807259505447243,11807669581624359,11808975572599296,11811220919611763,11811523671191877,11812158072536409,11823032149508223,11832905268834899,11837866263209531,11840295016246440,11840740382069149,11851393982879753,11852586198115184,11853010088136902,11863824190392357,11865542872711201,11867361302652812,11867622238392053,11867650483762221,11868412894656304,11870483176868986,11898179901887368,11902610012478374,11905938593275593,11909747036535415,11913133672980273,11913579970744326,11915166616058954,11917437865006221,11921035710134156,11923308867485120,11926548936220126,11926805367659349,11927305572643559,11933874408252082,11937995919116415,11939403507435534,11941423373859996,11943720753021897,11944383058348300,11944816331130113,11947591791853532,11949017351281018,11950260926652836,11950767340516423,11952970464557834,11957777053959725,11958250094792465,11958326503192345,11958460182520420,11971876905384523,11975100060815344,11982172621189391,11983457002283111,12003675199241448,12005848174188578,12006522182584979,12008453650739367,12010943352799406,12015639579945326,12017040715051459,12017280196275791,12020813104002531,12021776657102177,12028404727423728,12031148585055714,12035410219539172,12038634615780325,12038984699485340,12044509607056046,12044968098240593,12048218812219413,12048806622801494,12058410162198406,12063913410743326,12064775457651800,12066617975736949,12068867551957576,12071821708133242,12078782315854672,12082781112646069,12085458622840725,12093768254366446,12100943786761249,12103342077182428,12107118790447412,12110485781570692,12116763440852785,12120377787831548,12125020327675301,12128081806219839,12130816680520314,12135336896340352,12142933439996132,12151932314546584,12155534792479002,12157910100394424,12160896977780321,12177544020169884,12179235809448305,12180040689184058,12180082671639635,12186122156905100,12191783234987303,12192518732233721,12194188433406465,12200556590308310,12206961056205598,12213487168281093,12216273376124566,12217037909052392,12226080030988795,12245236639338607,12247196809844638,12248146350462714,12262311222789758,12270437462627588,12270468054721839,12272177606302533,12272459725983251,12278383271194356,12278465206346582,12283300256073245,12288007619457690,12291976925956833,12293363361122131,12309693411990179,12312452990243375,12313776804764473,12315740660505432,12317737462653854,12318972117511665,12321231790044265,12331039831738345,12331300696945968,12332506101262263,12334476628613713,12334531906613812,12339633893332240,12340540257772691,12345475198663391,12347889475047477,12347909851317459,12360123775491680,12365750013844755,12370916479710467,12371561019916631,12371619531441513,12373603008943996,12376979801050250,12383499878769639,12385506900879288,12386587160860313,12388152182711242,12390527382979238,12399457458248220,12399946676042065,12400047520221171,12403402985696867,12414844391454468,12418785272430115,12419850567303984,12423854238100384,12427118539066615,12438014718231534,12442226783163244,12453429222313446,12454152316786214,12456127570195279,12456974565702299,12462037008975433,12466553139749819,12468960135907940,12474505023309244,12474737975133205,12475509972236592,12482618753698829,12484792688815182,12493121285865448,12493531949000940,12495098079276198,12496980807002515,12502404720988619,12505394079431787,12516465480475702,12520510172302125,12524882028709030,12534442305927340,12537207717978996,12537660041547670,12544032455101983,12547299118310242,12548400145943534,12549910268086697,12559911253268655,12561212829273378,12562621625488566,12567396522160703,12568269490941488,12574953991866005,12576978802157283,12579381981407506,12581297128593136,12582417504397196,12593140979984180,12595025894277088,12595568697579144,12598104253633453,12603845745843686,12606498330358134,12606901469342342,12612529707466049,12615183521565762,12626861709059593,12627315009999764,12632687195472462,12639293891627838,12639418814809649,12640167527828266,12640428361474198,12640818042674893,12640871580590329,12640969010574572,12643494240426710,12652136957477942,12652319841467466,12653336178984584,12669546391130781,12673433235167362,12675636205599614,12678598650222967,12686784777563923,12692097685841819,12694087866558340,12695944838331405,12696892670705054,12701707285742221,12702962657957826,12704004077140774,12708456140034254,12714535709904775,12715273171560431,12717959780809396,12726377376546299,12726436436675201,12727033270826653,12727451946669105,12728089463396868,12732375258004085,12733418262925777,12738924440303227,12743533106187231,12753329851400984,12755303856704861,12771267826669947,12771598737920523,12781473711050942,12783187525335089,12784227033504239,12784609326080007,12786352863464886,12801400431375545,12801458013719616,12805335924853732,12807665721211120,12809522469790774,12809632657832569,12811342685032672,12812182344672176,12818427882691906,12819996417836695,12823282271321919,12829072084255416,12830088505582363,12833367241791767,12834860563514747,12841765441041049,12846385534139025,12848207419401226,12855844760930756,12859899907121954,12865701070922173,12868140593650867,12868775358248804,12875124642594600,12876334808558683,12880367229968159,12881424980533677,12882980822794716,12885114452454742,12887418415101226,12897909619055754,12900385538356311,12906788489234465,12908599797018073,12916112665929539,12918769262556623,12926924362852450,12932353138648641,12933527428631618,12934033598192671,12934350686066194,12935326619280462,12940588789639096,12946489524267653,12947522776480207,12955628525207272,12962843219163460,12963051823146860,12965554585695816,12965962908737325,12969038927449240,12974390471676060,12979430248880345,12979490664124573,12981848516554289,12985447175738467,12985493722134421,12986155313057080,12988371356512075,12993874964553291,13006729868315951,13013340987113008,13035980728818146,13036179358537986,13036645177838759,13036712601500114,13039280823665945,13045554401715049,13045600513120125,13052620397276151,13054236155028234,13056240047123862,13072501768493061,13072617923580734,13078916872324125,13080772514935469,13084504306404264,13086192967607976,13098251820355349,13099158956896694,13104310576837531,13104339456644663,13105958370560896,13106875818164772,13111138396854003,13111577005851999,13112638257280506,13114710504214063,13121300725611891,13121909629776355,13122025064383559,13127052312166869,13131340694012302,13136566433737611,13154101095403837,13154198718450725,13154555158306370,13161267336530233,13164318985726929,13165906763126222,13167979789890447,13168110604938660,13169610591191174,13170738127259843,13174101013456127,13175983907317617,13181966685315968,13184920558769854,13185428376339990,13189380579282347,13192157399149307,13198474033954862,13199022280418750,13199996563430952,13200108351974202,13201807925580353,13204068426067383,13204462037481647,13208555149000976,13211066578415956,13211782471313872,13212061616770885,13212165395243922,13224389449907250,13233545463558187,13238503442128074,13241104178731895,13241168864292142,13241450032861794,13248655970715829,13254044124605936,13254407272590223,13257737390535834,13262295991057322,13265037473491891,13267936932487740,13268996306113479,13270587658638306,13275333794285672,13276579099396774,13277158900551235,13277894633414167,13278754087006669,13280579253065923,13298750975340353,13302754854003883,13314547425279234,13315440480385562,13334201253531043,13341251444506381,13344119991216847,13347417735653001,13350157202852563,13353560065022737,13357601360650186,13359331313196874,13371096247956838,13372563355342461,13381234858826658,13385015528950604,13386085962502095,13392333467703344,13392648285436965,13394339089063032,13394551832655184,13402693157045406,13411243783632080,13411581109556372,13412383321315676,13413384478433494,13414514599248518,13423145336408826,13423985507124709,13428472113899924,13441217894362634,13441764089885110,13442145389950277,13442492834263372,13446542370234933,13448612638765991,13452686859689485,13466915673127210,13472766006472691,13479031376600774,13485627420255013,13489343668600089,13494212405375710,13495705064166062,13498151694534672,13501680776202759,13502956667923325,13505729133720187,13508489645714817,13509178757772730,13511175763453019,13516547793277979,13517706451256090,13519875476747795,13521772043996142,13526044181112873,13532220158545162,13544313444890724,13545457425167339,13546292946364632,13552576650306647,13560284735647415,13568144225858544,13570582888476349,13572007215372631,13579292169199361,13581522598681686,13584670639804403,13588669826245287,13594750552645450,13604060080584622,13606027345535991,13617631557607803,13618539821196872,13621326447410048,13621397819727220,13630191002096322,13634793775983156,13639851440986869,13641546138989675,13641606518127186,13649712080213198,13650051593032688,13651091819607497,13654427643263871,13655297823287389,13656122678588204,13669670567123455,13679106791368898,13682988765515845,13683384323434122,13685822158536416,13689486854312196,13692915679570837,13693027758544966,13697542413338103,13698474516655449,13698940649521784,13699244375297918,13700132194249732,13700395889419752,13701739894308740,13702229819892376,13704275954624893,13704352361096222,13706325468204188,13706670591280801,13707739578231116,13711378433916464,13713126833679041,13714567785435526,13725507831112260,13732875764071009,13741640976152344,13751009984842370,13751355444615875,13752515134941761,13752528537770243,13754252433328047,13758183684987635,13761510571679661,13763495093063765,13763737248840023,13769064518094184,13769616521296557,13772233025470893,13779343273469876,13782374358651901,13784328184108875,13796714897651986,13797271737130311,13806888829912490,13810189191668783,13819216056468458,13830139162136642,13834956579150593,13836967928987258,13841506126069216,13844723334748155,13851419674057285,13851804964013356,13852009236228299,13855148698755421,13860370948717274,13860591920719937,13863190387760047,13866281554758808,13869499215642030,13872276184090322,13883742410074464,13885432559815038,13892745650858214,13893729230139344,13894176996423815,13899662982568281,13903640450103285,13915571727313717,13915751473207815,13924477533272165,13927268834765068,13927696780643085,13930075501042467,13931574119523082,13932773453065067,13944345475258344,13944744739592850,13946019636961185,13947359127055804,13948733294751772,13948849305450763,13950003362814608,13951639188915106,13952318012300341,13957499193946800,13957891625399498,13963970693218754,13965952880287033,13965992746518202,13968491336408470,13969065894497400,13982564979542470,13988336481457298,13988537842078882,13996482893584239,14008782205566643,14010800531316406,14012374992832944,14015507053297472,14020512831650303,14021767660954154,14022387662308266,14028827379125338,14033262874705267,14036809823113558,14039082912681460,14041235400538814,14050877619339410,14053671836796726,14059703515141024,14066003779541480,14068336590289394,14068514727840577,14070452446274375,14073196557139903,14077628043807881,14079413477735954,14082060161725832,14086400253454584,14089660453835508,14093701509746096,14093782787475587,14104609562657279,14105474512409513,14110176260429603,14110846566699118,14111754638843301,14113954118968165,14115700381311298,14116084203345559,14116757201838538,14126627189476844,14129104187791374,14134252052809090,14136333045989523,14141721173215486,14142180399257488,14144286736225168,14147641612048676,14155975414531428,14159319817299730,14166972826657757,14167756848708160,14168406404233927,14175692216668231,14177050809138713,14182196956346963,14182395945348617,14182522370557503,14183668773352145,14187963108760817,14188374719646123,14194895524216878,14199253731869253,14200690083582668,14206687970696716,14209853920811090,14210270522420558,14215487446995196,14221732530161551,14226640214180071,14228466984618789,14228747898918402,14232996386333408,14233668407191507,14240099294539079,14240931409922495,14241368478491777,14245988562300971,14249502033018713,14249687565938747,14250698500890187,14253371408889777,14257631509009617,14258964967231840,14262886155232322,14267007162424724,14270247164026926,14271254001084489,14274483320198377,14274835544974226,14282336913974875,14284383355599952,14286491830383354,14291469615410543,14292177888930623,14292472000295936,14295837452356585,14298173613618098,14301257753026067,14306645039357579,14310015895186965,14312644574968166,14314489483212131,14318196470777373,14324162382494344,14327796466197481,14328346609794800,14330165162804822,14331141876120768,14334872702153449,14335504292083940,14341688237268043,14355465370177113,14356635961829550,14358501668762854,14358712927579207,14371667519001998,14373358653447165,14382653933328395,14389328610898075,14396743849723041,14403258144398461,14412375459733818,14419304139943345,14419408012320654,14419921321665188,14420517295463922,14421526836577881,14422482515005653,14428672766558377,14428963789076396,14433829777128924,14434491585844546,14441663522114382,14447076836883551,14453826393896267,14458414754313519,14460517698166413,14462888447275103,14463327792076139,14466639418787131,14473045986857112,14473621415900765,14474428436715615,14499310299171024,14502523747605405,14503354640357478,14503374543528179,14503421058685682,14506805831023499,14532022272038796,14533166699323342,14533912823231087,14540918644501586,14545143474688100,14546173469934987,14549609943559194,14552911878947037,14559345024889908,14572798606348625,14577681860555800,14584989944454173,14588926759145188,14591042865966381,14604151534357376,14606919734830311,14607574529846282,14609506155169308,14611213899966353,14622201375555281,14630990679638089,14631058148494236,14642640937827937,14643031895991669,14651923318081732,14656739959494770,14657604036440419,14660498729179366,14669778228653280,14674786028678808,14679329027774886,14680624844186736,14686694622392691,14689336054562019,14690256368300896,14693014696087872,14696133465591728,14697396774309339,14699312209892116,14710079784099482,14714972951681498,14718737202293924,14723600578234977,14727357539437919,14745825891890849,14753483946970413,14755563140273075,14755965578235618,14763159151224600,14764626632313599,14767178168674763,14773705053327044,14774424971091441,14775120243637151,14776126161075338,14777180456645831,14782806494910422,14784179132609967,14789280323954198,14792259226342467,14796095030944430,14802524498404394,14805119697076881,14808357837092866,14812335544631245,14814818422854695,14814866777217318,14816837023868332,14818468476875375,14819019180401048,14819207660612212,14821775114466739,14822972850892928,14831940328373824,14832874204975299,14833648039540838,14838200055945191,14841572903295226,14844521188313039,14847956454072103,14848728342207420,14862317369956557,14875244788896295,14877010452958052,14878500342798560,14880698080993082,14883492855733875,14884715585223534,14885001023521200,14885277650679824,14885514754372569,14890608256545870,14891249907937290,14894841507741510,14896432925297083,14899776943325306,14912124553248599,14912527776416275,14914637529083995,14927475356531675,14935912020884502,14936652050795629,14939491797730666,14939629686310269,14940182819303564,14944948556154171,14945635561516349,14948084549356910,14948446551537791,14949218635729694,14950087955881572,14952347763435515,14959164006691718,14961785319983417,14969572759318726,14971749865458474,14972120173118520,14977645952278382,14981979822436646,14988165815323633,14988877042506897,14993137347899829,14993931438103578,14995330188668762,14995498956830547,14996000077091154,14999867324523228,15002117713677743,15005212809692919,15006561064342947,15014220467166698,15015143178733208,15015832834168182,15016747917580341,15017581694255009,15023369839042379,15025234321810668,15027872686689687,15027965624651774,15028626060466021,15029223449524697,15029421099140855,15030279194177507,15035193036474483,15036546311204155,15040592624783964,15045563863877798,15047851634879837,15049206174008406,15058256367816154,15061551128577232,15064441595557983,15066002393956736,15067340188537424,15068416282122043,15068737776024543,15075955407954330,15081726781697934,15083561199479055,15093027538264168,15094447720794002,15100586527842091,15100895887756881,15100923564154126,15113939304708511,15124747624370744,15125038963644248,15125825668976374,15129837287101752,15132962157165167,15142340753501357,15142771204200772,15143222831944000,15144509730846110,15144908199448686,15144983031311469,15146266898753650,15149385225563368,15151128984083655,15152827565413011,15155535079044825,15163502675118430,15163608007084548,15164714333985887,15166301729740851,15168611383865707,15169763864701641,15186748056330061,15188528526614937,15193432864725218,15194881156695303,15198814250439862,15201662707583210,15205461449086049,15212200426217138,15213176306218798,15216511057457596,15223439233922134,15223468402959842,15227318255741609,15231273354612283,15232762341410261,15235610343655303,15244577355919854,15245960594532078,15247433843914559,15249106376606939,15250808075404806,15250896481067742,15258347128439790,15259612081001691,15264731568598059,15269511085038233,15270167427090968,15275297064012400,15281435895520542,15285891219756998,15286093688825701,15289862125703132,15290148594297788,15293123874907838,15298758428575449,15302533346414874,15303593678697230,15304616612479818,15304832061714010,15304847733090522,15305964656672387,15320795701669972,15326286490335430,15329295210127478,15332234480025938,15334331246873691,15345070383303245,15353149026108168,15353232670298897,15355335603796124,15356453151175679,15373930811061691,15377210030466896,15378726728075414,15379533653675249,15379705621247200,15383101065751713,15389713624455313,15390882193918153,15397171895399395,15402636785814262,15407310719467201,15407689229789196,15408822912493961,15409962731524859,15413173941024438,15413515751683038,15416018244148923,15419969270171951,15423153342341016,15428180744186198,15430571383432346,15431617843729266,15433887937403854,15437233971050551,15450715294654043,15452893020203867,15453212547751568,15461080320924835,15462712554318219,15467422080353387,15469490756626048,15484285765017800,15484872489499858,15485469980475937,15485540626374727,15486304467213949,15489723346328738,15490588941327161,15493669981706537,15494125152072718,15500366938118891,15503520406029992,15505519386765147,15507002730562560,15507596083915355,15510353559011411,15514535598456693,15515999929535991,15522061334524465,15529140775061671,15530230344187268,15544311106200778,15544548900805204,15545602100255398,15550480026583451,15557041324109368,15559289591149294,15561564170785191,15561952874606530,15564933328360346,15569147522045783,15572863590946325,15576367136356714,15577133638656672,15578855835529187,15584544164633761,15585305674396933,15586021008360415,15586572984402845,15591835587885800,15595116715517183,15600022327961011,15605001570186520,15607870388183703,15607922224614041,15614292833802726,15618067512755640,15624018957338891,15627340304611938,15638216907788849,15638858384127971,15642870227425833,15646298279506026,15651638904781067,15652623828656547,15659367639512437,15663152139200473,15663518386052835,15668753861818902,15669831866387505,15678947651292970,15682293644901354,15682550662690976,15682651083715691,15684129061048451,15684714219805662,15687701212595998,15689677439468810,15695115813510797,15695286443123085,15700741802774887,15701006667851545,15702846415375903,15703609923212388,15703962508930357,15721982912314664,15743385922200831,15748859641437205,15754569858261273,15755103109741170,15755440794212771,15757615898310353,15760850159052851,15762209549139285,15763329664260405,15763347842500031,15764824185348051,15765990586747192,15766276644999494,15768790414358471,15778030936010985,15778073642134042,15783285537872233,15783457873235222,15783601313856694,15786952156025848,15789976943224909,15810883487535993,15812065825937453,15815973513115164,15816359902190124,15818396444990604,15822569260611075,15827802457455271,15828816982020122,15830964443377814,15840334179132579,15843352451900485,15843600775555820,15846238303690403,15863820783079073,15866236940451977,15867439138551076,15872362195905201,15875675232290550,15878101641545005,15878818841668229,15879020355620882,15879801226947188,15882817785917695,15884400676036182,15887607544869391,15890892365015163,15892366657661960,15892644929711368,15895961844448293,15896204034306061,15897401962344850,15904895288630879,15911275554215588,15911665623700279,15915302121110625,15920977380773424,15922176557778000,15927341566519732,15931653898476584,15934933731048989,15939128572044103,15944489120018696,15954518713119826,15962749062304179,15964603511322079,15966264651417527,15979755963656160,15989521035310443,15992440720931469,16003094114347164,16004817238396021,16011025198707647,16012437984901399,16018234336000847,16033495765775843,16038301793476863,16041339465547053,16049606674888102,16049891952869470,16053420407977591,16060832251885914,16062107659438725,16069046551508727,16069174976182272,16074486970716033,16080740588460730,16083877262816687,16090383828959085,16093240548996996,16098091349807463,16098172275019426,16099819217713851,16108376586576329,16125621753305299,16126978195698598,16127193854760523,16134101469312376,16140981467932346,16144336314735217,16145343445599154,16149410584199209,16150040833847011,16152783913026412,16158129834797633,16160771084575630,16176635623269431,16178760128679429,16181654573567669,16184318280736106,16188822750519283,16190571409547135,16191892773280294,16195655847208731,16198734954314842,16211596379781820,16219147118653087,16220746069769206,16225653430698144,16233112123839300,16233654384438564,16235839769165041,16240762741306135,16250616875540489,16263334721549532,16263780136827362,16266712848564625,16270015344285096,16271083150992386,16280927247624124,16281915533551056,16289174359879745,16289936972512243,16293042607710037,16299677703726115,16307595056946704,16309137054392802,16310681306790082,16315681986373983,16317875420686187,16322691175661967,16327416205924614,16330104654201385,16333887903434801,16336789007686054,16339994308760050,16341765762990956,16347036755860703,16349055180152841,16349624325715789,16356347789934648,16359131609074861,16362066780194864,16369009637282998,16369281391114209,16369945946899217,16372297199748151,16373987141658826,16375988586939943,16377409889399924,16379852130875662,16383306457978105,16386085273604579,16389519573583307,16394940965979110,16396880383990556,16398154649330003,16398733126926655,16400068126248119,16411790303732795,16417759312392243,16419509766610091,16419901644544820,16422440467412931,16426184098291933,16428705781520359,16432971637241688,16433327633528711,16435742390682375,16437965595938221,16445322365770696,16447014000822092,16448682699618749,16448829682806061,16452048761762229,16457674212534286,16458193998413945,16460001490402451,16461454427883020,16462708921584182,16465114761860846,16465741257369090,16467984634116524,16473606709399091,16482765139128458,16483944183054084,16492537636527687,16492753413249082,16495982586896225,16499668866369559,16512946688413824,16514937777288269,16515317531532600,16515515620455784,16515763893503398,16517530335877295,16517537506431523,16520680878383534,16522040144005904,16536209470153361,16549193848756349,16551638786295881,16553191501416196,16555675508895642,16556142033974396,16557075823478085,16560847038118314,16561729019896847,16568638052909005,16569637258340730,16573238078421961,16574236353677299,16578960500697920,16582822217918014,16589279792859879,16591958210106118,16594902459898391,16605131007727492,16606580432110149,16614318900004042,16615202652663010,16618755587989745,16626806031696348,16629787832374700,16631291003094984,16649312379995411,16650212270002998,16650283216078512,16651090716262974,16652944391354801,16653981254978641,16654463028053744,16654924393162193,16660067927175777,16662173317527607,16664243102641776,16666335390036133,16681703184890456,16682373593295548,16682578612688855,16685180422791776,16686094229531741,16690146533382363,16698836185067210,16705001871343701,16708636667018243,16710176517292164,16711961207359232,16724720235210872,16725294155137383,16727032133352391,16727688366022871,16729903330833289,16730086424088046,16736716353986757,16737373768108148,16738231483083309,16739182735043548,16741586841667302,16747302145863252,16753484567013429,16755872335309848,16759630605474370,16761517688376276,16762470025066864,16783509929261859,16784815745535597,16787458448627887,16788378238902865,16788943958964328,16792514152922390,16804992154815880,16810005023919202,16820470058192790,16827645998999199,16830315094868687,16834728273804865,16834972450595855,16837630758069802,16838337071218776,16843019140494565,16845510952053197,16850886838136612,16854336811041325,16858777046733835,16862894270178946,16867020968629490,16867864576520806,16868617407655959,16868967869968917,16870410864242800,16873469111493195,16879575300669180,16880613203851258,16886381613931407,16887131664281014,16888158543374642,16890451337099671,16893613954731672,16895785673304080,16897929991993805,16899560454680533,16913880033664423,16915167008196857,16919853192670914,16923906246184599,16936593144852542,16942918462021910,16945631443389494,16947503499298974,16954247022723534,16956760996707076,16966208347117891,16967956019390437,16972536001685219,16974976960555336,16974996106586527,16976062143580028,16977273505567584,16981100707531732,16983782183294117,16986912710655502,16987865244712954,16989134716990479,16989387007759710,16999582099196194,17000582419359490,17001105496098528,17001625874486973,17004131992558114,17008056242821339,17011749486628658,17014229777897844,17018029384954439,17019281824197645,17022002414706187,17023649823777761,17027024912981538,17027708820603609,17027724390296374,17028905071969344,17033234045807732,17039633394164779,17041956186643831,17043911086147728,17044227183900592,17045020641718652,17047039786296372,17048296154567372,17053515690985016,17057095725127500,17065736283826551,17066204322105669,17066614080750842,17066890141401799,17069702342298005,17070031206981939,17072355840387059,17086180968300670,17092924242292896,17104993056562977,17105192154942325,17109970886679733,17115701285838058,17117697441697646,17125687975796961,17127731933707424,17128001588707458,17138834595066375,17143215310364176,17148449573094945,17150277478457455,17156795393603011,17157898465093855,17158828067013858,17159011651238619,17164804932271093,17171938449805958,17172705597475016,17173738199873813,17179028413037838,17184647258662518,17189985997758617,17192344156604394,17196706052792205,17207135836467323,17215506044805401,17219161189129714,17220596644754506,17233175158773315,17246076311509922,17255087609386479,17255995767294112,17259853567766215,17264169344327606,17264493723089078,17270538843510702,17271660415976271,17276987541026097,17282090993143952,17283049372339150,17291560172494026,17291979671712321,17292310452468705,17293149261210524,17296137849004163,17296192463290079,17304784741854216,17308433563518540,17313632977406292,17318960805851472,17320236078883475,17321015553228474,17321174101274260,17321666593584496,17323038726279631,17329308502917698,17329472456864413,17334589990132684,17334864272182912,17341517372421961,17351099007094397,17353053843653375,17366561361017324,17374440012919698,17378407166143928,17383067517360975,17391219400155350,17391436242706241,17393048485135831,17395137850335402,17396392214119358,17398282123693718,17400913153559823,17407246841014078,17413919734842125,17420499051739414,17421399034054265,17422062281526649,17423105453982540,17424289896774390,17425090194197669,17425614571955386,17432341969660318,17435530177003750,17439323243822026,17440523469292889,17441789247813820,17466786275120017,17470441567829100,17476597996427511,17476827515285484,17479085198776952,17484120239214373,17485776963997171,17486966299030886,17486988765689599,17488816545423819,17496728290093656,17497098710311670,17499228377170813,17500477193853245,17517159540441318,17523212990532497,17523973238515804,17527155984508354,17527974390318800,17541513425567569,17544483234277015,17554939460224349,17558580292594243,17559431629269263,17561448044068445,17562043899076409,17564200744376749,17568398735638434,17572077476907682,17575183081748977,17575560135721806,17578541772101901,17582290334182417,17587104794159329,17593208073575946,17596039699851909,17599396608009249,17600395630340514,17600607133597719,17602282637407016,17608993167118462,17612331367634278,17612661692978454,17613143173683718,17620186225453340,17622683372375560,17624682438741740,17637276506512333,17638727474061409,17641686744036386,17644039113805944,17645312266322218,17650070599794961,17653795308183431,17653847556747406,17657497846454029,17659159129272154,17659621059389953,17660743105223332,17661459152369712,17675621085369441,17676740506186425,17688285802217756,17696080779036912,17697163249179507,17697682504000309,17707842984156022,17709737359906993,17710801222146557,17712409569723362,17712893886367554,17714216772557464,17716382248321539,17720864955352360,17725080861093763,17729422012525851,17732456419233492,17741767011633464,17742935181641766,17746510075374564,17747383804315050,17756105008438482,17759977925515375,17760075502845602,17762550181642638,17767687613087632,17767859597836083,17769865028645273,17770964005963097,17770981472959907,17778432694523101,17780417672471981,17780633004635622,17781695742071988,17794405366215460,17798330281681371,17800329108711822,17805181966455568,17806610508162479,17807775056747143,17810904352266449,17811294904961592,17812394543477172,17816589074280916,17820414995546733,17822270975275609,17824058019135158,17824692487924143,17829073738411995,17829961694570784,17837924490120715,17838730974038612,17840541840864217,17843709229402181,17844481483540230,17848382043638116,17851847109708456,17853025423149005,17859332251377907,17861897896064008,17862392392198693,17863284124973089,17864179561603861,17864592832666958,17868918610462163,17871331243165860,17873251325535856,17875253398653485,17877847214982476,17881080524524475,17889149793462925,17892154693253238,17893885025675099,17896653342000979,17903487860911815,17903975998539248,17905797190497744,17905846546240170,17906626648911419,17919141917693070,17922025141068374,17927103791988031,17933163310113598,17937781070124082,17948193446220343,17961387047243191,17965956572473636,17970314287831337,17970920336945917,17981163734458850,17983136277324499,17988399353053093,17988976441880620,17994870382615510,18001307487480335,18001311042217802,18006237324341425,18006674318531347,18009042115164135,18014189215438894,18014657110806736,18020974854298469,18021886555673319,18026004208911747,18026232516319011,18028316562390501,18028401974332903,18032295415917214,18033529755426165,18041417715473006,18042108482583522,18051621313730146,18055041696562277,18055087872299409,18055587125968368,18061732028717577,18063228282000881,18065517227719762,18068141364358640,18069471533986377,18075555160804033,18076181993827292,18082663742446595,18089241107640661,18096458958758462,18097497168766291,18099088172925428,18100450631735810,18103384897215847,18129411267420255,18131898498754493,18133412567042816,18136432192167355,18138184127031654,18138810838881859,18139979326512529,18143945517551573,18148249253291380,18162150874995819,18163443951512529,18176398171978336,18179155755591764,18179306742222141,18195325370888256,18196224826654508,18198481066177520,18200162616918760,18200433284258315,18201109647268708,18210889187587826,18214396067041321,18215366819351334,18215593970961402,18215688955701607,18218596306288915,18219379302426418,18219480778356908,18219492177590913,18223532024009924,18229457516235802,18230262104505569,18235829425519784,18241422988672837,18244762343715926,18257416541434878,18258026885319486,18258589056361348,18258704607599735,18265102179546859,18275143099845195,18277496942328603,18277532214379777,18306497644679138,18307189866355692,18308565966347727,18309896670692432,18310224044923199,18310260983673763,18311678202467591,18312928450191138,18316793768442045,18320199194413158,18320706645413560,18321247174629916,18325796935244911,18330874810048231,18332434291015304,18336172353658611,18337191336507655,18340192768781464,18354768007590930,18354809741903140,18361245509159168,18362561943328805,18366897023001689,18367494137613346,18377045322936582,18379087767248948,18389507703197237,18390199754916829,18395298635755745,18396190684827929,18400962357421119,18402740084326073,18403600751028920,18410807087565130,18411318682491459,18412761413118797,18417094802826718,18417594946606594,18423285819437783,18429692224833089,18434322404441043,18434966080784818,18435861506577465,18436307626060546,18438159643459969,18440518503779835,18441289041766013,18444487060015322,18444666364288446],"molecule":"DNA","num":0,"seed":42}],"version":0.4}] \ No newline at end of file diff --git a/tests/test-data/63.fa.sig b/tests/test-data/63.fa.sig new file mode 100644 index 0000000000..c17ef02315 --- /dev/null +++ b/tests/test-data/63.fa.sig @@ -0,0 +1 @@ +[{"class":"sourmash_signature","email":"","filename":"63.fa","hash_function":"0.murmur64","license":"CC0","name":"NC_011663.1 Shewanella baltica OS223, complete genome","signatures":[{"ksize":31,"max_hash":18446744073709552,"md5sum":"38729c6374925585db28916b82a6f513","mins":[2925290528259,4550472317399,7397951382043,13950946236093,18944997319943,23965553957178,26390034908046,36191627174349,39116644913079,45540178190062,46822418898135,47180432856748,47367865367011,50188964065828,65325381835497,71315379183989,74037001801154,76190207226452,76733150364607,83631867214312,86442965329695,89858161015356,90806331781332,95108107091043,101072116806558,109728134835863,117764718466551,125296899385152,126550040779683,131219583539670,135497977128744,138537198116911,141805235471354,144854809628393,153783847123278,154055696317370,157255282423883,159984546139167,160902593196961,166163367169365,173817709369233,174979625787948,175032069345452,182141449646872,186033286918724,187503667710897,189372881188038,191814288543916,192890223167288,194756913683551,196037984804395,196583081113717,197511952689884,203335269479450,204822233856042,209233297808434,210990374921109,216861451361880,220853041487844,220923489229742,227683744949779,235388211895357,244969519314153,245029062906088,248581735034297,251186192464160,256982811990450,258255664267571,265587486568360,266208269658242,269368370464968,274235329360733,287831833139065,293035680952788,295357672887769,303548064148961,307854560177526,308368577694671,309969810458414,312508185357838,316701230964482,316897730501733,319335385321196,324290895668437,328294702120808,333432074251696,335605928681508,337243852456192,337788124062930,338296399583721,341001360876621,341707613453589,349282729367235,349347535027435,351258437206186,360629153151276,364874268407945,370407120162642,370595193569972,371700279077049,373471575728001,374188784960382,380562917179168,381400955129871,384016070832594,385242214102144,394797505266453,395356088720884,396054053894786,399215565767837,399215750881719,401601210843243,411114364557568,413011122735307,414934253467214,423964724934678,426125170072817,430191392037330,431514229123485,437290714565213,437506450440821,444196295289556,444273467310604,444519598728863,457671098462976,461477875054528,473505790593386,479169447884417,489519873805078,494381455384554,495601542123242,499291264639906,502817538324491,506336140549160,514225777616243,517767750601700,518803929727716,528657857026586,531621018151405,531911437550984,536713413896697,537757852470225,538244971589768,549192277958979,550069279000761,551298730569376,553354665477159,560183238975729,561316274253850,565120453207608,569061433009767,578397933313938,582924953100697,584608245878528,595681341596523,597246199104774,598744731403748,600409846627222,618082707842705,622540719875971,623112432173232,623564286058606,626475972546369,629214339204581,630564503284386,632243908286808,635842404828277,636454008801855,637963474663087,651565303681692,654100189449365,658694830193748,659359272720991,668365295793413,670476914395432,671677182717796,681398943911705,687743951317806,693383660447783,694523064126211,697547171219962,698360853391060,698383699159430,698714184393962,699304671955329,699414001750549,702028024437135,702655743925993,703696716274708,712467878162751,715119064036805,717098217279451,720002464362774,726292867622433,727685109931740,727786563214130,732669904526146,734019394597526,734554562642182,735119835330596,736734785664407,737721455578775,738157827715680,738543439712395,748275069435017,750168693442959,755428520351338,760914553470842,763201112060730,763669867104092,763903450865190,766769547808498,767121298622699,767417571203746,772051111454828,772152509572841,772219237112224,773253991876737,773640117883594,778719831734053,788541066253130,792800620274218,793126364353395,798319271383660,801192084570519,801979719204052,806030682122869,813805466325024,826029246264765,826077010431743,828356750400476,831736232379626,833989830989481,842811510495576,843025850509368,845050451776051,850325922079257,852042280696332,852616072150159,869440701256868,871739984144307,873878962991102,875246525542985,885732713802105,900984329565111,904962988643425,905308801557271,906900833647951,916185332282483,917277762192278,917334002968300,920956096920505,923846800950923,927733683191258,930950142910172,931188320066855,933691189676382,934117578798841,934829751321026,936230738064974,938188383682602,941382244559733,941861412444067,942726201014166,945032973428091,948088536983824,950251614016922,951217347666850,953311674641424,961017555998937,964218423186297,965844189572501,972618046502811,974258465646756,974637708612999,980565419407507,986147003709405,987407484206883,992940514834332,995584120548026,996549857630112,998926194132937,1000937685539434,1013410477239192,1014496787753945,1024634573363382,1028460419483054,1033874047074353,1037163054983442,1040756065933066,1045088944681707,1048574231977270,1051364708814767,1056506578664023,1057491059487351,1057829590018958,1059199927925541,1060460577561031,1060760398971021,1061967838052170,1062598334481497,1066520357980609,1071759691375436,1075576974119467,1076194665589715,1076307473155886,1080440645655398,1086288713384900,1089204340626863,1090505634288396,1092749687333011,1093123453947031,1093780160574614,1094807962005299,1106831352465275,1118646614510530,1119614160374606,1127740241225995,1130113935525204,1141800182705337,1141957433258847,1144614443668767,1153321625273873,1154225306393882,1163159397520386,1163303408022562,1167323239732974,1171405306002670,1174386415542665,1175414485855042,1177706510708587,1182168703505980,1185081332506550,1187776202203922,1188893606724299,1191391064481088,1197375422019658,1200797929442729,1202982399470063,1208460365112124,1216183572752189,1216349299615743,1217760228928876,1229437984652935,1232027701338500,1234453656762891,1234698668275227,1241668290204495,1243711623939695,1245003263018464,1247153420491991,1250484435790357,1256754510605581,1258709409617632,1261831186742139,1264563878337445,1278259882696625,1280559509676354,1282472909138162,1292246474868788,1294492972700075,1296553378083571,1300214247397513,1300724144234399,1304554095644208,1306972413335965,1310819837267255,1310835683752449,1311078551896352,1313445683077905,1313826623773576,1314579091305857,1320340005211507,1325524051301607,1327738097851136,1332430917176015,1332675238905364,1334939013056183,1337600826833551,1338522631065263,1339674524726757,1341661245836409,1341942310569850,1344850241954264,1346444314218596,1351570661987737,1355274635861570,1358877729391906,1362862766300078,1367870608065681,1370039456672284,1370746553808697,1371431531962106,1372351037556570,1377792461855597,1383348406006914,1387385057191781,1388584147493453,1396964107951550,1400398296107299,1401298565016323,1407177952341116,1410486644494794,1414568563679456,1417984842495635,1418743862991832,1420081602859846,1423937616614171,1424366051167663,1429198692194983,1431140791675340,1432423484009425,1443327278633039,1450861996451357,1452845116328517,1455020177231177,1457429906997387,1458716224614631,1459144447544839,1465076638017898,1466391743844010,1468663744355213,1470580811951805,1472835164326678,1476939334625119,1480237325649862,1480539429325015,1481088686107013,1484226042988529,1492314148312178,1492550216115797,1497353541354036,1499289039133439,1504262319315651,1505096985478881,1505172916296130,1507126472384732,1509264042384987,1514218641840864,1519203024139040,1521780633605083,1522237249746592,1523791718968068,1528071377900249,1535451811798960,1537397570523640,1538118443000138,1545740833177405,1546368847550532,1553692785951588,1554071056896812,1555637141656241,1556284449775147,1558324681023092,1559450514209843,1560969323307091,1561680258145617,1569318833056381,1580482970750366,1588956381434551,1591204462547614,1592943214430038,1596940098556068,1599643181368601,1600494020961221,1600688746972553,1602101064988014,1603093475242546,1608467868376532,1613230042071034,1617237167349710,1619286790649678,1620827732630844,1622309948672121,1623966948730132,1624318503960075,1626639019435247,1628201100274523,1633815225207084,1638727302192255,1642353838656017,1643453621271585,1645673596073883,1648716913052297,1652765950688817,1658104204669725,1658743399661231,1659819081077302,1662485779876221,1666913529898081,1669812089421733,1679605700468270,1679921198649960,1680089532480362,1682746046505721,1686298869637573,1688481990617362,1689682641477370,1690389336617199,1691171280116985,1695663032921673,1699809983366070,1705950022227142,1709048685481388,1712457316704754,1712827460605989,1717459770518422,1719016742757524,1719690455811654,1720716306077049,1731588874078275,1737929931793243,1742230705053471,1744646337710934,1745324659468599,1747303538361662,1750530525839386,1750848466069991,1762621869823670,1766154871452422,1768074570558590,1772504621686320,1778201561133905,1780288814569870,1781805678833298,1787025898307575,1793456012680375,1797142702056877,1797145955746037,1797367475778719,1800147823225056,1800236363852916,1800292312232821,1801404378718274,1802232213372715,1804215890133513,1806220280793222,1808685369384027,1812018140268588,1813163351446427,1818925318022107,1819091566970620,1821246620845572,1831822327838518,1832408978761242,1832446933549908,1833926924520737,1835694527640110,1840320929072049,1842060817177608,1845664541012305,1846495837486874,1856791461736081,1858474922519628,1860030910962345,1862153320764207,1867578456400407,1870278489144074,1873261502540924,1885528658573969,1894756346141601,1900541751009950,1901209651803518,1901291971170255,1901876532182375,1902791616557208,1908153712615768,1910324702460153,1911464021342251,1917279203885894,1921273856324485,1930938144553240,1934075675835507,1934298906146492,1937494292258243,1939414707320138,1940094016678579,1940349446359845,1943195916125611,1946261780746826,1957568197413107,1961412299515744,1968345824207972,1977923456470816,1977965122461301,1979691191211071,1980374385622179,1981752378561978,1986523359754220,1987210877457747,1988980021478572,1996672784729607,1999133750243675,2011354377485272,2012874059058878,2014266663706516,2017517839581062,2022546455157095,2024291985865500,2026552431475137,2030916441428059,2038730607060260,2042859086816241,2050342367296606,2055202564805434,2059880114534091,2060560658024761,2061302384344128,2064432037950349,2064820419581597,2083858695302000,2087593304215351,2094083749006424,2095898151245418,2097280377232511,2099121913442760,2099462838437830,2103311335893154,2104210209064238,2105296453788320,2107076373938295,2108459225069649,2111395821264557,2111781716293290,2128337797349122,2135890156111278,2137755589431662,2142250867012638,2142644727013638,2147628766136779,2148277682163663,2151003212774236,2154050039033300,2154825108832254,2157543511093753,2159559528918973,2160176312000315,2160324368330875,2162577581063898,2164107595577716,2176988842247011,2181533165000933,2182965638264818,2187598499331444,2189722857501195,2190906838663940,2197844428920029,2199416705656232,2204899458948058,2207484772689862,2211251305477479,2214585329667475,2216291576857764,2230429649730384,2230499997873756,2233374767701498,2237267871356954,2249026723401047,2249382176770011,2252148298922995,2282851679505524,2284008883123690,2284430348204299,2289542722841620,2291237331288700,2294311150128150,2295851772366195,2296330477067902,2297300047218453,2297432045933256,2300003729256754,2307128673346491,2309328595812376,2311901346223486,2318110633163391,2318934737046572,2324238767058056,2341149645621931,2341499707179628,2347050480883180,2348231529227808,2349507317182586,2349825918922019,2350362296145783,2359599974602456,2360988166250281,2365100930739182,2365101583995089,2368070257601382,2368316853240052,2375746870819817,2377178146794550,2382084067881576,2385503149484476,2385595359290641,2386455839922464,2391657757985839,2392696292165175,2398709852888712,2400026944838468,2406393959209312,2409651860889698,2410681029165949,2412591449989948,2416801677490020,2426508439798144,2431689886658063,2432443095396045,2434636409776451,2434817960891416,2439360431069834,2442924938559564,2447704465950372,2451185988965285,2451335219119778,2466530448132713,2466909570912171,2468169126671752,2469990435969385,2472082629869597,2484069800626695,2486783619425529,2494166617182106,2496262488317655,2498928723235105,2503728397420013,2504935182899326,2510936514907563,2514588516976413,2516300104537043,2516615505374811,2529686136078992,2529757512285754,2531603179656151,2535379300081535,2536540298562196,2537131228360750,2545009932051689,2547409441873208,2556506799873846,2562322499824421,2566619437831302,2569272697162382,2573496573602154,2575271828359827,2577332320388602,2582286025195040,2583040424187016,2583468225494252,2588404706278861,2593389934385770,2594360169365119,2594709561160407,2597669806698660,2599462021052813,2600325642328760,2601526047213631,2606628075888049,2607585442845824,2611080508323464,2615637595599978,2620375519634887,2625753537877756,2626910805885551,2629378920027678,2630791796680663,2633023374568506,2636060748463825,2642503504311045,2642896503944011,2647702649265595,2651833968467605,2658287974480506,2668521248016496,2671313026437821,2671398445852750,2677246953723931,2680497019271975,2681476812723673,2681688690783031,2683246311949145,2693519224664396,2698689094049392,2707831053578465,2715915477263655,2716578540554404,2734700729661142,2737421785282245,2742018183825055,2742141972024096,2751785297738513,2752147920224584,2758379916840243,2758720834995819,2758979243701204,2759926223357146,2761431364716452,2764250636697336,2765183622501164,2771385955352873,2787100655005297,2794658818174763,2796704110243902,2798287443905216,2798322134667150,2819699168008416,2823296594306435,2825639876500433,2827393174086051,2830986947810877,2832223063283424,2840131111024087,2848124500620503,2850303080077087,2857548210960220,2859967373892809,2860695977896818,2868567544019176,2869950221815451,2874478035430398,2875768840498356,2881697295591721,2889009360623809,2889740392149462,2892327330159456,2896177891093468,2899892307914794,2904033648694661,2905361464861211,2906932245374500,2911124480176230,2911599257101941,2921971427799899,2924433965541354,2928681715178239,2932316419447329,2941649814209169,2946143480195981,2946321521010318,2947035710205399,2950640741434545,2952714905200090,2953540238859553,2956539890231005,2959335482526692,2959566715003402,2961679237758947,2965352172439193,2965439340704221,2965950633977302,2973978384800223,2974389005017021,2975093256580654,2975414282596751,2977316941548719,2983750706789338,2985749744661602,2993577870679042,2995240248615334,2999606817239118,3000133614988345,3002144816290295,3005445693257298,3005543539398257,3006068427214846,3006825969228148,3007436553703536,3009353123519576,3009879725684408,3011102094194039,3014955625381722,3035569961506260,3037243067032125,3044971913771990,3049610843618123,3056598953438835,3058282989031583,3060978444911194,3061176921317878,3063484099651207,3074112617890076,3076040588704705,3083176156972821,3083894323700064,3084542708185897,3086123334924126,3087642706090516,3089319907683113,3095652405939026,3101693309309556,3103506635288743,3103723994300125,3104057316763627,3110882600220192,3112903104807973,3114065706400821,3126462642335525,3127233513015486,3135911618150412,3138943638252170,3155618345518179,3160234728942373,3164386809673569,3173337239261818,3175607440806275,3187782335419440,3190439500089370,3191603569657769,3192369183577062,3193346797759720,3194861056078031,3199730308565073,3202842543008174,3215163473676920,3216620904572420,3219171897424954,3219575037594274,3223165789803264,3224535741992415,3225652520990690,3242521498997924,3243947082373306,3250589381907882,3251201051516647,3253156487699363,3257337304537355,3272928147712512,3273345746404244,3273455155749328,3275046616104436,3275876017733599,3276795248980256,3278668472321042,3280780868469494,3280794856819360,3282504976610485,3285404600033524,3291688382088694,3299027911208090,3309878495036042,3312036573217165,3315214714717367,3316733753186879,3320924500756368,3321523572005253,3322765801173894,3331435560359461,3333652145199727,3335087116356546,3335131382305523,3339857783542570,3346073604734971,3349764598731466,3359742817020406,3359946222588919,3362158184502934,3363044683709605,3365198599599379,3365586794581106,3369243531861603,3377357612999215,3378502887959344,3379556656256325,3380271898400315,3380683064402177,3381845747007120,3382194366074501,3383302464154854,3390004150029672,3392713809155776,3396510059796443,3402399487500761,3402608390039987,3405135139021774,3405149696809115,3405393044390619,3406073672541821,3409127489900273,3415139398115166,3415475306791216,3418693183078260,3431010040648861,3433893111687059,3442408921142835,3442892234692145,3443405929340821,3443814552613298,3444648483822568,3450598427318554,3458841677994973,3463857637926984,3466717314703766,3468005713457978,3468306935523998,3476218946140045,3477671288317241,3482209838567431,3484417521606056,3485163641925480,3485345404315595,3485684351025169,3489716365352044,3490218326835149,3496034375933097,3496927759647254,3501438911492802,3501605155319176,3502652434217727,3506373791709328,3508110471552336,3509072379429744,3522367029305364,3523617734835555,3525633782648726,3526392686886988,3535903464263126,3539901139312850,3540376200850317,3549947024705822,3552108775050946,3556230614643794,3569439133907194,3571316365062188,3574306253032309,3576162331242874,3580260758329980,3584444323393668,3586259833614913,3591860672649222,3600497750427469,3600830075661157,3609452627397093,3611915615904413,3613882437854401,3621421484619367,3622877473302676,3624379228154857,3629216192438886,3632115466215379,3633516585258144,3634906107194620,3636013168823101,3644503150656777,3647071999472194,3648486681146863,3648590415100172,3650411848640853,3651208352182968,3652128421562312,3656809320682474,3663160485730853,3665217012698891,3670531861702815,3671760492215784,3672142134405475,3675775119596083,3677241624891815,3678142299238288,3679723249740163,3681869903468458,3686489672677129,3688280883691690,3688327457349314,3693932188146288,3705003329123112,3717407943997266,3718621708258333,3719578355011258,3720637385401222,3722526932992524,3726938239845979,3728715138302811,3730126559106774,3737946633507459,3740458701179796,3742193997053523,3742234596917242,3746284516790765,3748081334630687,3750533866251628,3752113241891676,3762029049082585,3762751701280063,3764820504193506,3765408152696993,3767814128506980,3774512692458152,3779767620249001,3784106736164980,3785218675925174,3786173858770873,3791490899732442,3792618824893518,3797500278748845,3797572839534654,3807583511277136,3808139090545696,3809879441266392,3817002980250587,3821170295134013,3821583371411656,3821630362687996,3825757657900286,3827430957263349,3827560739565438,3835953940403171,3838735004282207,3854418337562031,3856495945466312,3856632581492180,3860116438298861,3862694398476978,3863738703644495,3869850399187705,3870413121329386,3872121521356678,3872628172162502,3873324719285632,3880243619746497,3887523678289264,3895543606604936,3899793396857493,3907221612214493,3908280143480975,3908511683767038,3911082399615065,3917275362273600,3919329961567492,3921698054272911,3929160579967105,3934625885954180,3935344037868472,3941525993199884,3942048398609850,3949404714704001,3951447621965404,3955893898658897,3968940236457600,3969914685581241,3973437909773411,3974439738742238,3974884051240316,3977362201597748,3979182335035265,3981349448512541,3983688318248752,3983919240708090,3988823560476515,3991304962417620,3996232480056804,4001338100305267,4003000776821491,4010634521845832,4010843628806486,4011194441900352,4012917626427041,4014500024147982,4016225827426866,4018474899910568,4020678940249116,4026688740814878,4031918591272287,4034809919461185,4037588403031850,4039922936524250,4039932863104502,4040574608674437,4041139896587433,4041872990193158,4044662871102224,4049368939697671,4049703973786608,4053851627999337,4060744208423493,4062261174287869,4065415697051189,4068573234330842,4071633959541762,4073835315653206,4076846825357774,4079083296648701,4081004427180528,4086687744224011,4089226616645108,4097469103782424,4107887608841281,4114248458913135,4114343888383846,4119621966564488,4120642288889696,4123781140489537,4132938192487530,4134892291048521,4135928574382122,4143693188392502,4146607129757067,4154333523980713,4154752706236746,4154870399231204,4157669782790617,4161040214839097,4165710956052375,4167383773226728,4167492383925201,4168181927338698,4172772824248916,4175996866082730,4176623816804364,4177011602951503,4180091758040141,4181901601551230,4183391742729367,4188349160298046,4192843946846883,4197298171025153,4199346559716278,4199937026193161,4200142600556427,4214771019264212,4215582065649959,4219986862600637,4225632034684502,4228066473660175,4228645799747418,4238632143676429,4253320341425011,4255700538587916,4256775531402776,4259508008844151,4267533238822472,4276068588949150,4289359014707288,4291309135357292,4291681176800862,4295704004397925,4297182086971339,4301841948469269,4302934567016197,4305626904573311,4312242836327385,4316505852417381,4316904893589599,4316945036052182,4317078081505616,4317422028288966,4319428928391780,4320671705521862,4320948899808113,4321895279026225,4332389830901236,4332584479772575,4335310014667247,4345864924315697,4349990949165001,4356160430961353,4357880027267574,4369068622168572,4373860960273698,4381988283585309,4383134213334340,4393722386432944,4396253792760348,4397522735467217,4405185846773600,4409442890926800,4411810134796150,4418995118878418,4421125787216995,4437545167361411,4438817177523704,4444824473102486,4445062840118079,4454575698901762,4458591608285019,4458728897870062,4462449521144694,4466692510919550,4467196354294999,4467568428111961,4473513246905919,4474000580782956,4474046785524256,4474574743148389,4481408122328948,4484145294717318,4484402946653100,4486507708773899,4486975012628738,4497702687497656,4499856296475689,4500028349770179,4500630405545048,4501876131664304,4528214817956822,4532427908015373,4535830530899372,4541577773165123,4543700870914372,4552805172103424,4561703129830313,4562273139429756,4562889929649950,4565834153211579,4573722402896435,4577457918883209,4577958025008691,4580199770736665,4580353634394552,4589368018406258,4595427440105692,4598596070144322,4606699947177076,4607450449118254,4609112952479794,4613982013879466,4620004533537053,4621781324879751,4625645650398470,4634249736656772,4638719988526137,4640301477916105,4640518507314105,4641399081470667,4641794721319090,4645238665720809,4645621983164383,4646458337623997,4652026280650077,4653873516606103,4658079460193832,4665559789434328,4665715316999671,4668242832840992,4670796977014993,4671025914890237,4671062938394354,4676205735481526,4676683626882003,4678953511037049,4681240613933899,4689320811962225,4692908964849533,4696193088102148,4704195358103927,4708213524509388,4719261186528920,4721521787903217,4723274946162868,4728819432363533,4729163773640834,4730341942998122,4730493691532331,4737131202167177,4739486119895556,4745352351350096,4745940331555049,4747354617127312,4751422453008817,4755286169023364,4755841017162123,4755912323473330,4756833761182793,4760074424405483,4762437486337017,4769979165221157,4776830747495994,4780869466523606,4784620939372924,4784854530655115,4784960269821774,4785601845773156,4793495469956659,4794337453617434,4800291638880957,4803115735233530,4804645672015140,4805893216574402,4806679764920158,4811729290308862,4817878202402319,4819311564829320,4823251614359045,4825298177502391,4827011615233835,4828117842424667,4828732317464211,4835736860545211,4836894122787451,4842656966937005,4848071008956361,4857129012656990,4859353321888294,4859467776000605,4859849392390603,4865270528419335,4867360470630358,4868100857196342,4875972042816124,4878610157475814,4879638248944748,4881531428270387,4883085485434756,4901450877660648,4902345078498684,4907673099841830,4911078209866511,4912787048821119,4913269610096771,4917312639789602,4927397100040965,4930034114903088,4934031744913600,4941067275317682,4949578709897161,4952413633841153,4953773437884696,4957117546097581,4962024566226233,4964966617138828,4975226570860151,4975540053830624,4986110732910751,4995563329299788,4999915977157470,5002056492229942,5006774552951727,5006929223505003,5009560616993369,5011891458604349,5012847090206147,5017724733800167,5021333195096243,5021445876086138,5023785116027497,5032209299980010,5045163363224076,5047944681561823,5056182885286156,5059239413878415,5066776986395776,5073647426884964,5082075970958360,5086440629066369,5087182732073845,5090517135844571,5092533829369071,5093869377835176,5095238786157913,5095997925642684,5097991563922208,5101214857653244,5102026127818781,5102715480695317,5107792502157973,5108455108876502,5111881437192243,5112547786374962,5124695659957290,5126251354950045,5127124574162351,5128951178677788,5132612621833970,5143420500944709,5145276514713692,5146076759962970,5149437337079666,5150315306295015,5150426384165948,5154406455748760,5156097648832284,5156461422732999,5159084802671573,5161207050871469,5161248283909416,5164496015188591,5168741136958562,5169183503623442,5174341244024506,5175517983450337,5178681082547978,5185496711050665,5189447618805589,5199397406461572,5210093218542459,5216652140931560,5222282340592980,5226896358843829,5232675033262932,5236341345649495,5241779126216109,5260023793294245,5260441842663055,5265232429826960,5269315881525070,5271118414757758,5272010381461258,5273272937856228,5276753284521288,5277050637122870,5284015351506042,5291703312055669,5302053963299700,5304145080779837,5304463365763770,5306712077765058,5312331308812989,5314446308863251,5316323217920338,5319128074583642,5325429115684951,5327554389775897,5329749554849635,5333350248619291,5333588429074391,5334935043856488,5344450649206065,5347417569933680,5349744287355670,5351378986429919,5360234560170868,5363374768894673,5372175647130534,5379052587485175,5379968233240165,5381644047795232,5385746119086850,5394080989067132,5396776081740647,5400291293650351,5401392461039875,5406614253824595,5408167860716448,5408684428107176,5409849367090568,5411331443175255,5412454472585029,5414566165245797,5415695371666931,5419089032931253,5419410149086480,5421212445663696,5425776155703968,5426094979776865,5426200656191416,5426776912686778,5430190436911117,5431006377098396,5432406524156108,5433304691996431,5435448562589939,5435896905179181,5441547898208015,5442550985028476,5443519792343783,5458279931832152,5469790646236118,5470523383371739,5475821882378207,5476748191248660,5477177690474931,5477215546181338,5482349529630549,5484161477936466,5490569127868792,5490578216302488,5490912405243552,5492060493233102,5493319803023083,5493870604473986,5494363692102912,5494461157119817,5495499148937672,5503103710464614,5504970710328213,5510245439146833,5525287503688276,5525784499514800,5531925548111268,5536775761553566,5544364757593219,5544889822531729,5545802799820933,5551558523406896,5554380825386759,5557919753549640,5560825696398560,5564194416776227,5565788618996121,5573849240853901,5577945889491415,5579977210132164,5593426453232836,5593438101378020,5594762061635643,5595805533420086,5601051424903560,5603538322319793,5608980121089557,5611751716804501,5611829232056058,5613862108602356,5614909593083489,5621064494334548,5630820724993122,5637312677638017,5646619733332345,5649080003160590,5650780390758170,5653701086020480,5653796862203418,5658725183825313,5658909534123937,5667246937392321,5669207929458084,5671169627021226,5672283937076147,5674772751954606,5674881982886485,5678334281220081,5681070425108334,5681381324642587,5682063334177189,5684172435072091,5685175185189040,5685769039380624,5699319238678867,5710195316669727,5712513634730123,5714049549411876,5716073879150693,5718933939076632,5722219703153811,5722341925100693,5732397687710195,5738107664095562,5743071426668400,5759061891073762,5760917932621246,5775786807466214,5779727192598359,5782454578043069,5787478509200132,5795310516601245,5796008702306245,5797972692335571,5798138329907864,5799653338299710,5815038103915452,5817139504392687,5818962864882161,5819777108642550,5828565941868585,5838532420889856,5844299901048343,5846508833190611,5852387775678533,5854217826149760,5854563651692443,5854937355756548,5855201829880411,5856022939536906,5858993021903933,5870645665739004,5871947947418314,5873135456761229,5876393418760803,5882204502376649,5883561342053177,5891024028896298,5894685367317522,5902538428609386,5905923307105350,5907421027818445,5907964555669659,5908300976016885,5908696090042283,5911342541254411,5915859656997442,5916931928833529,5924879546681533,5932662790863585,5935312555770245,5935661430493388,5936458244198872,5947101870703205,5950972051903959,5951041949791953,5959591833211920,5961453615564711,5972218700939363,5973250287141740,5973677832178283,5980413028217525,5980915072408561,5986049797838103,5990178361033769,5991408956923883,6001206595929325,6002276243709531,6006897308518556,6007168673792231,6008701405300969,6011214467146689,6016555602340361,6019980584840889,6021343266087840,6022056684496736,6027671084996298,6029374529344504,6030086882034018,6030811056861793,6037875804029086,6043316342842623,6045838883225433,6046240594537014,6053804686685524,6053958863313339,6055268730727559,6060349809324070,6064665258673946,6068333876328613,6068413376064084,6080103762457043,6080478088147904,6085590822787717,6092446030543778,6101803614000155,6117554783717693,6120258253633213,6128284886205816,6130127235214495,6132418324607306,6137419131615699,6138942623995374,6142558454313357,6142688368084569,6143696702746869,6144042650109511,6144095475272536,6146897441024279,6148741765621578,6150235479601000,6158322788243107,6167018513092476,6167607991565253,6171707826744820,6171923593198502,6174144459043731,6177692002705307,6181251707047392,6185543954775815,6192358086666249,6194877677308546,6195005368075242,6198857031919734,6200081358996517,6207302580763824,6207378542225127,6216154454451807,6218233647565127,6218512470330013,6220604711061324,6231011149213503,6233949281800277,6236798857143890,6241164988469477,6242104415956598,6244874563473516,6246083992156972,6248681770169460,6249074081912395,6249533555014967,6250557402527662,6251868356478317,6256321719332215,6259204915009277,6259490107650645,6264775741996340,6268090550897346,6270106477308228,6270623030455246,6274969421000503,6279802006819506,6287214058061018,6288468968814880,6289720240431181,6296712520206538,6299817571175342,6300447716613718,6304110312835221,6307115079760207,6324812402453371,6332989569253355,6340198968767374,6341635725848363,6349550838587158,6351329315387062,6353191312166053,6359135369542064,6368768790664617,6371090203570186,6373927709843793,6379348598089064,6381058024466487,6383412722218595,6385800661078082,6400930699922041,6407210526643342,6408730838629478,6425194770628412,6436083078959781,6436814879261326,6437833183669176,6445879733828998,6446194468328979,6458546881927714,6469735836499302,6470372839856936,6475189364234877,6481335505362132,6482532068799143,6491310187238988,6494216993344366,6499734594021057,6503186772282900,6516226128433302,6517101056822953,6517695732739152,6523391982496272,6546752598032205,6549492551082113,6551592776053236,6551734714654604,6558599467268843,6564596315827620,6568196183285198,6578237361036784,6578503095620162,6580538367081886,6581567286410558,6583498920293870,6584870489517466,6587654701564589,6595708386553174,6597195012498438,6603273865988070,6603801197985057,6610618463004567,6618676721046335,6621057137514784,6621510191241835,6622760768363465,6624459779043431,6630093742634040,6633360677360828,6633666298104507,6638722800576445,6642050646677695,6643521507427133,6645793620729168,6647201893197819,6662203303202718,6664034784936039,6669190164030483,6669210952944500,6674364905825227,6678173806211118,6692574202860978,6699624106317412,6704989683409671,6707775008358828,6708073103705065,6712531926902947,6714278367622692,6720191931854899,6724452753537983,6724547078953919,6736575983773817,6739415899010945,6739727103059450,6741215022206694,6741585788244645,6742696713154438,6743224373710056,6747763101536606,6748010265803706,6752595765235073,6758210091802458,6771281046319400,6776659810263253,6782379660111174,6788002061659117,6788800055371110,6794299705676629,6798835098061557,6801783177540135,6804076005396559,6805314972544938,6810553630647669,6820466834405823,6830268541445025,6832523371438991,6834697416576859,6838813212939647,6840422052000127,6845320561422543,6853445475844952,6855214185488087,6863430375872751,6871074917650344,6872105304806432,6877362362192847,6878773843563416,6885815333874594,6888484602467342,6898143968669196,6900004638975216,6901304183540564,6905543811188124,6906188072934282,6919747802868531,6923858050003624,6925667026147338,6931518999817042,6933453950416148,6938223955509899,6939538382301357,6945044492009436,6946506722091422,6950938208624374,6958833224242820,6961314590681632,6962254218994978,6967131174911621,6968626913917078,6969420545456348,6969879544962764,6972390154085602,6973244897917836,6980494356161697,6983701355572818,6988956838531038,6993040182965693,6994857505801835,7005617682351029,7008681951900339,7013532370262403,7016766698233684,7020516223480066,7021458253363648,7028222229541558,7032222151023244,7033834244257850,7038117440889701,7039791823564250,7041664067028645,7047751781972594,7051101474207745,7066853754241037,7074680907709588,7078519684380004,7079136072514786,7080754326247108,7088092836502881,7089736549891749,7090263369022454,7090827224293435,7098844983687608,7098947119329460,7103287349340715,7112480093601650,7117602179959460,7117702213846209,7122417539516003,7127491990243549,7131364697338399,7131708477987584,7138333125007121,7140267571474431,7145928955462648,7152477932457527,7159009930103737,7159750340676197,7161951879191571,7162737726252938,7163383528300707,7163778957994361,7164516813412020,7165802414192656,7174995651546188,7175045659768963,7179002153816766,7179903040144596,7180233253963581,7181910283448288,7182765199375506,7191096990307504,7193706102549630,7194559521713885,7200246343648885,7203819464442554,7208185024842025,7228437063271890,7229216536358274,7232125512735235,7244564678730935,7244768482327881,7245566857344055,7245574171883060,7248035515958267,7250821157176171,7251981552147018,7253494878650207,7262289934411894,7273694576417704,7278382313447813,7285678364340995,7286552397490444,7289711990915466,7291166276647549,7293749228355547,7304251828684959,7305136552146877,7308279153931179,7312457538294268,7316330078533123,7326575126577204,7328477651553143,7329499380916402,7329807274879697,7333784851848575,7338010137201066,7354010904401429,7355017730071395,7356265961127969,7363433267890641,7363914809349690,7368773239687673,7369067702745463,7372069375963896,7372949260070506,7378192097899948,7379423885191995,7382680312753356,7384234111099756,7386045769570324,7389238093282141,7390506088312346,7391350761414346,7392869637529531,7398773968230003,7403437559059845,7404428308705632,7407505476310295,7408970363179738,7411992302004671,7413103855739244,7416878995770443,7417992892826458,7418488700207131,7424981804351790,7427800180129173,7430512069482015,7432189412984237,7435984239692232,7436873913790602,7441160207213155,7454883912305228,7457626872755122,7457676720105276,7458849252908765,7461417070760230,7464791273301861,7465698531247575,7465989092511044,7468955978108988,7470414970130956,7474020170149742,7476626636382557,7480445069076273,7486839313625142,7492881688861731,7496125413626459,7496331600674721,7496586171914845,7499741802632764,7507614839065812,7507971309059323,7515642971443426,7520995594935128,7522972726042717,7523568386509127,7524079580225271,7524269576290377,7526100758240945,7535413758699104,7543114741067816,7547834066144263,7548479757390478,7551894748287854,7558348891266390,7560368518128933,7562422547591358,7573494827827009,7573960972444709,7574807836993530,7577833848718658,7578638579275105,7583610161177745,7583764379769101,7597146399455249,7597942637150096,7610703887034738,7612217782008852,7612590563938043,7621333387572882,7632486697445093,7635562158981132,7635781595842092,7638726889694521,7652643882172024,7652746090759244,7658477424630193,7658594690166121,7662918821795672,7662988662313759,7663381927516823,7669465419287648,7670573068797315,7681671824852632,7684983390580586,7686401160104927,7692157387739297,7692684970839720,7692715035163949,7692872154514462,7700450128758357,7700977357734436,7701360910594079,7702583314023198,7708512355032444,7710242527125752,7713386097094125,7715596322079470,7716490464557575,7717433898725477,7719367164738556,7721926065964333,7724711616367069,7727688737658572,7728376014820122,7733140741473168,7734200858227759,7736185792522281,7737696128793781,7737983217239889,7738013935898363,7738701740734266,7741777943023382,7741858774779160,7744489504895257,7745446514374882,7748491852382750,7749831849631228,7755681710231848,7762078342885466,7763953570263003,7765228989282823,7766386543812808,7767211022402663,7774524311327627,7775101063842022,7779960077213875,7782860521094284,7789581952394575,7794053661517357,7800931705061909,7802574315480743,7804528105537226,7805530729586763,7807627836703959,7809275090934984,7811145204113168,7813351823453750,7818433714447086,7826881780965015,7841588711354365,7852366441407035,7855477820333867,7859038279032217,7860940256961100,7862261310643205,7862674829720928,7868991532284921,7876379670914445,7880427676195188,7880565443755679,7884420955280740,7885848475582109,7887337325195822,7888074400901569,7888500835141269,7888937940310086,7900170751256211,7905781741383824,7908426346953647,7913734655033026,7915002755515393,7916235800659173,7916680314419175,7929090546906102,7931707661135896,7932664861586881,7936886244974173,7944913299381989,7950277937806623,7952207776184888,7953795569892508,7955707767338343,7957474102755475,7959145831679961,7961026550920941,7965254194340254,7965797077819465,7966607859360283,7968378065126981,7969662040440070,7969835594231926,7970712198889854,7976449267333913,7980381451760704,7980587376998310,7980735420462798,7985722197062386,7987424295175338,7990659870433573,7991803781551882,7995443309794354,7997135431578468,8004620727574476,8005398354408904,8006897017337402,8006976419849250,8011722895901690,8015488350182668,8020262137556052,8024303669159872,8027888930993228,8028030091531706,8032268170160689,8036544756403250,8039577302774424,8042606792528101,8059143994487654,8059389868173903,8059450627794768,8065220473196449,8065582408992410,8070786000530785,8071396031944763,8074839622143824,8075309354229708,8076610463040794,8077418220136860,8082463447862295,8082820682426435,8092520438536915,8095523873680122,8097390569526238,8101747032613392,8103902946642787,8106928489710751,8109224611652256,8111613278325699,8112104031271206,8115533670214246,8118745605497599,8125559994293293,8127077118203350,8133101547438502,8136369282029634,8146147122452530,8153430278421622,8155913468349843,8167731037663294,8169890334648200,8172486649475348,8173481093695052,8177258178550692,8181586463868245,8183290120256302,8194969512324171,8201561228078010,8205287009351885,8215247147279808,8216440810041214,8227083500433512,8243069565420263,8246362229814725,8246716772071880,8249298655984594,8250387434460343,8253509245362164,8255193598573136,8262954804685181,8264880757955296,8269769863632137,8270990875667143,8274176242117714,8274986624684933,8284234491989688,8284461011307366,8289349890472704,8290108606340090,8296059295412068,8303400292309646,8307300282278026,8309633984147819,8313010571574396,8316237693009389,8322561813637125,8325237800434916,8325244982386600,8332190045511090,8333295411468735,8336794237476945,8342359556228636,8343422431629489,8348222101988490,8348990845348274,8349929839053237,8350563913948977,8353187069342082,8355184882068744,8357480319128064,8359032487697274,8361648235426638,8369781975534209,8372656358571690,8372801112194483,8378780774433401,8386972491027812,8390262752827048,8391968117889949,8392149294258272,8393630583129955,8393768386118269,8394309279691674,8397902100674760,8403981740338541,8407164258966016,8408897871278743,8409167580578255,8411553661563705,8416499164135253,8425355410005479,8437064789335853,8440361071453676,8440380356686069,8444597753784738,8451164588916518,8452575040883450,8452834615819362,8457432590283505,8462195561662212,8462356309409364,8462601346948942,8463298727839656,8463870357489053,8468076223787436,8471415745047933,8476431185538894,8477713132692627,8480147732306155,8492172722223897,8495387612202410,8513163154527267,8515344063519634,8515639951840653,8519080382417862,8520471745574237,8521019872666823,8522204087666054,8526397555774454,8528661500257743,8529230741888138,8533878116076637,8538998791228153,8541155088407770,8542383026666838,8547220901137808,8547645173766124,8550168506511268,8552407797606671,8554633315621859,8555174066389539,8558151645997922,8569931984640589,8574564019658606,8576579691621984,8580540441959762,8581367096989732,8581514741937545,8592127243488072,8598659143101208,8599129846364328,8601522207106423,8602281558256184,8606118628054373,8609444821815491,8609962853072397,8624651084037382,8626391389132139,8629842463638108,8636146645526997,8640904163379570,8642764308475012,8647452929444976,8650858010075363,8651780938129367,8654788098657391,8656720607859172,8662946654635648,8668647436071212,8669031552930922,8676906171988104,8679183398969712,8681093783245916,8681657579012301,8682204342697103,8684040140251633,8684097483512102,8691127371410028,8694259890202010,8697654461669357,8699889133691465,8708531679191487,8712816602478712,8716771680701038,8720400968274939,8723528441052177,8724633171674147,8734134339123262,8734939213517479,8737898110156975,8738848475519027,8742554330928741,8744943197261790,8746710561869625,8748523887526601,8750131088989198,8753449625405863,8756024741015291,8760543221800194,8764085725594982,8765499574275666,8770160446142554,8770647022715746,8771763736993583,8781771689282057,8782517514351572,8784173941687753,8784230938553258,8784888250030492,8788645315265601,8789521527155337,8800564096781294,8802869383602903,8804388443116965,8811449372278684,8813402029006119,8830429684254879,8832496384750559,8833617601200992,8833874796390384,8838258102521647,8839028706384124,8842110080684260,8848441586602708,8851257701148635,8861373802714789,8863519477739503,8864760219124956,8865357049212759,8867353885504610,8868704959256862,8869726068715730,8870411403952522,8870975675141120,8873178736038157,8873416249089902,8881792922329529,8884591107643972,8885940282302452,8889459042870122,8895481679956001,8896675958607703,8899181735854770,8900925086486215,8902963558752899,8905988019435537,8908910033277314,8917771334029599,8920188523017581,8922546229199542,8923711240385159,8935766685372472,8936182321294398,8941687890115326,8946727890515135,8948253205690631,8950897215480549,8953024300985451,8965975649138527,8970258327898599,8974686868338460,8976689351398218,8977775722619601,8981576765955511,8989003157868761,8992303867068716,8995450059777411,8995595104860000,8998229369170752,8998333901341575,9007405002778383,9014303703878842,9017776523155640,9020092873224846,9020173374348412,9020279343602461,9026610997051785,9026963896191446,9032187371857715,9034758804495639,9036597582387230,9037381687162545,9038550674961458,9039001997861868,9051912387029910,9055987575748925,9056936895811173,9057135080376354,9060898928960346,9062482327476992,9064531090448266,9067993556866039,9069803512872245,9073037543243418,9074741782974562,9079888527353695,9080889860839475,9084555404746480,9084826088867128,9086751601932227,9087302249170271,9087576855511302,9089480345230505,9090741520266450,9091629224023527,9091979750057327,9092694428107073,9105108221601351,9108055709626815,9118451715638510,9126355422536516,9140764221167599,9142373407161024,9144094536673321,9144763081997956,9145366708442528,9150924106375181,9153419337108811,9154695178495413,9156606782616571,9157112220513543,9157375841856013,9158676476944194,9161053565831887,9161337887056687,9162668962659557,9163686286137704,9165398869818013,9167720671191036,9167897025495661,9169656716086699,9170930061820260,9173729001963953,9176741363031246,9178557764270561,9180835981759675,9181392291811972,9181647265316049,9183382094237528,9189377040357435,9192183509335590,9193828975544017,9197217346928151,9197639212324748,9199102551691123,9203464725118485,9205300319657392,9216804553823594,9218987363983060,9220053901174655,9220215058481045,9223158651063983,9224216334262965,9230781676144500,9232717679435813,9235929505977478,9240086077502048,9240969247386165,9245305719984166,9247406544769797,9249469378126723,9253137291868229,9257234088108504,9258873442401546,9259919463922290,9265832866076313,9268110165919737,9268857065896189,9269629584818881,9271020411926998,9275826854508675,9282900582141549,9287514586971559,9294005080674515,9306667536052907,9310534519872777,9310837736724043,9312102571474905,9328521019473374,9335430691435020,9336501470800389,9342185161395307,9342406668720703,9345184722377331,9346395652886793,9352141537262568,9353138111214170,9355129827150685,9358554525655764,9362733354659581,9364121803157784,9365839127076720,9369093634111987,9372297233789740,9380627712808545,9380933549226423,9394976106188444,9397328261168293,9403248687345795,9403765537033865,9408921495622508,9410138343134520,9418107590281736,9419050885946372,9420051724802624,9422324913293330,9423486081818391,9424880153466631,9431002060282822,9432374689589104,9432764163393778,9435750849137196,9438440967152456,9443709445789282,9449340008831532,9451923415826938,9453971573089998,9461773699588349,9473529131534515,9474996141555628,9481386469401705,9483868523475839,9484142791155130,9484371784536628,9484645634751184,9484984344438553,9487829549383095,9495020829401274,9495968673212120,9497284116324424,9508600366209138,9535833980442651,9535883884558145,9537366154450470,9538837225746487,9551446569230932,9551720811964044,9551725517957536,9562955436175690,9566896437282927,9570293654144253,9571330378157840,9573924489710217,9575165150956720,9580433067657888,9580743881484339,9598138185689963,9601786400945688,9615883008659902,9616163690573767,9618606069248566,9624758856235873,9630291603264391,9635200697180429,9635826108626528,9636075715404256,9637587220059630,9639877956221422,9640617546856002,9641362208707358,9642086587237218,9642337236891028,9643465351021225,9654460153869349,9655820024254396,9657079142409314,9659932051785010,9662025225596157,9667241625101916,9668769821075358,9672577363633156,9677328620414229,9680568650978196,9680945785313483,9688158907192595,9693354057581157,9696973072157205,9697428811713558,9698607611846425,9698807166117128,9709604996254756,9710300281092436,9725792147964753,9730102559873491,9731226214799060,9733007182191687,9734113097684625,9745464335501377,9754378080750969,9760103873246112,9762030899670571,9765786817226776,9776966614037415,9780333903305516,9781403088681411,9782799358625264,9790409908022705,9793594547272040,9794922532119317,9799346924173133,9799889278686304,9806805952939348,9810257422545913,9810585298035378,9811253944348670,9812581143154385,9818968963003545,9829825895615971,9834719687524431,9837155339404081,9837735072016789,9849134001046702,9852441706161363,9855152778377622,9855206514878035,9861618221073016,9863827557020603,9863849833214072,9867562002147561,9870764755744667,9906275973443018,9913889302549808,9921463461654856,9925919096295581,9938343239429508,9938930592288659,9943414292728350,9949019217971450,9950089238873519,9953036062253257,9954313852436822,9956729180121161,9962236941487274,9963611887803061,9965461136179694,9969612722104891,9971538903925806,9972659184707003,9979873792406303,9987074046553413,9988183784680681,9989307766906661,9992012151567792,9992489863586669,9994065414699288,9994394125866496,9997181429474537,9999648366321789,10000031604968879,10001967542883816,10004355354687945,10004753411179897,10004925495910091,10008184940193864,10010370056943249,10023685800384052,10024132264331194,10024518507785908,10032518948661767,10032947249799590,10037809897743304,10038212235930891,10040986745269183,10060828780412828,10063209359600748,10063600315370974,10065868826751899,10069449569085214,10071227734029562,10076125937720394,10077012618270702,10079618128399396,10083178186730993,10083835921342635,10084552716356418,10086482396608517,10087308692864238,10104690390397810,10122880171361730,10124513873425872,10126854974524407,10127093259012746,10130357815395880,10137337268168058,10141780637088783,10153687203860503,10154032807160608,10154307535853042,10155542068394802,10157935620629841,10159191120083975,10160572363193486,10172862470119258,10175620188550308,10176491974309391,10179148177005597,10179832358163856,10180241838937158,10184847409912504,10194722954029343,10196534456267718,10196953099771532,10197930644589487,10198464083483418,10199671620517651,10199695570402626,10206312343978520,10212901875202215,10213139479075307,10217695934166737,10224107621925080,10227034461812365,10232055143615071,10243488805517527,10246053140844231,10246709309375903,10250309444905037,10251928862092099,10255076774065681,10263727029912731,10266820110531598,10271469102327032,10275712382795572,10275743124733814,10279338798178278,10281974844357620,10282227974464305,10282399988125373,10296558578829119,10302531287111450,10304142630006743,10306665063854963,10306671241348195,10309932015401873,10316871801998077,10322210269356740,10322320701863881,10324442106918300,10327807866799501,10331778067925764,10334247661646447,10336141908355459,10338954267321910,10340440885802174,10343162122531277,10345027200202891,10346321946888164,10347621019337155,10351850845125227,10359452484332996,10360599392353768,10362411781950181,10363856866900979,10364382029087166,10372061926860233,10372218357405989,10378769233943499,10378785729437771,10400718449268838,10401822723036473,10402346001657631,10406767930735150,10410213171505987,10412731504017633,10416000710440513,10416079388720589,10420088526584073,10422572464663919,10423223119950014,10426807564427788,10428445873198724,10429449856647102,10438647586807590,10440487445875223,10440838933113584,10444872472907940,10449211795777491,10464407743036647,10466519528405133,10467269725152768,10469454767792558,10476986481775175,10482250308230673,10482598498169765,10483468440563572,10483827694271696,10488747371854077,10490741508258984,10500385026427457,10500488552967312,10501260356111404,10501722215268520,10506658427947222,10511491526436323,10512322942799654,10516207559148761,10522280817607587,10523297170953308,10526510768148749,10528288350222639,10538317185124237,10543343012752730,10545121874221728,10548308070444431,10548369311321575,10551722700063187,10563948380463051,10564465419174573,10569204159673697,10569936885011978,10570501131760442,10576973213646289,10583112117834044,10584639348411680,10591610358127492,10594696458041961,10595652543794428,10597827758570119,10600222809763305,10608578244765171,10617981318070703,10620592192554759,10621082248937070,10621656190299780,10628643234912171,10628921785417252,10629062237330307,10632137486945645,10633505584587868,10637542099362928,10638061479519323,10646006703435010,10649758462203594,10650028403614625,10651121348848499,10651345084987832,10654625803270603,10656235398052009,10666212884489150,10672573019071811,10679689448876826,10687860359404343,10688559968805974,10688935894510913,10695927691488062,10697244763415996,10697779432468828,10699195330093884,10701317947376546,10706304398299584,10706909043141392,10724752029096689,10726920750492941,10729128988836847,10734679576996129,10737172643669774,10738624568526464,10745410459322373,10754439973590718,10754612019663754,10754840975650305,10761458124736280,10766441205077631,10774595446367799,10778630114435824,10778869901743880,10784226394558794,10789995657189753,10799170614170616,10802291531494117,10808364573742279,10818898059592134,10822530870864592,10827594971106799,10829185368558325,10830397172609159,10836112530778301,10838960805917388,10839803231136688,10841253641469924,10842762916923867,10845347885148728,10847253104607377,10851869476873826,10852276831524456,10854428106437565,10857916072243305,10860164830890134,10861464877346456,10863865955661974,10869288228094102,10875559469012941,10882881345336643,10885189706501902,10887641846422423,10887994298217623,10889635463689148,10892582539342036,10894930198422418,10898755272190895,10900258521549713,10907247415705018,10912096677076413,10912468397273952,10913442039163653,10914509218958331,10917306751752594,10919154244168193,10921613838119163,10921844952698928,10923207650640427,10924903323766904,10925760073226515,10928023009400926,10929092524133184,10929712481962051,10932202328627689,10936209061534667,10948587907569371,10948651072438721,10951948612195804,10960839231611790,10961324577373192,10965247315180552,10969273755543103,10972909371352109,10973254456737732,10973954138229191,10975117317621830,10985120232295908,10989202769093484,10990148085591047,10990409005986868,10991558669034873,11001665093098228,11010187031870645,11014427382218185,11015340076911785,11024320739845292,11030107171117866,11033359423251282,11042536781194006,11052146708659621,11054833551017746,11059015179729846,11059724780690779,11061697713450470,11062402375665545,11069851171800453,11077507793952323,11089805668676955,11090552698103596,11090658585225857,11095383304270179,11099369753166044,11099443876685639,11099551546210604,11101013986140276,11106506387649741,11118512285647959,11118595812639787,11123159825527527,11127177251318180,11128665035036595,11129859357638708,11140065829460222,11141140926208750,11147089278236103,11147132552690535,11148812667899998,11150199869893669,11151387183049239,11151502397313142,11152017569182815,11154110766156613,11155371761778170,11156287884240722,11158612187535409,11158629464450723,11159414148224323,11161634288723506,11164777782395177,11169430954279703,11170123366563371,11173782300694681,11175202072568888,11175565813291353,11175852637265303,11181798592805054,11181991100493978,11181994897247651,11184082345585609,11200002087496543,11204988889480187,11206266985990044,11206560578270874,11208382996235211,11208848071296690,11208883644682396,11209337141935661,11211007053218650,11223651527838218,11226519618035312,11240903893878375,11254820718151050,11257541020758021,11259273102107656,11261264491503353,11265599260848364,11265748427379316,11270555388667442,11273495836304423,11275385001301449,11278181039608867,11280555107389759,11285939002885039,11287893566206082,11290096082576279,11294033441021320,11294538894871341,11294773174907559,11300136534963911,11302401895117972,11305713023756983,11308533382477988,11319884533641300,11320460996284466,11327586528497295,11327788291086163,11328275638112363,11332552015667182,11339380783297842,11340864658831256,11345675657880008,11345676553858105,11350091204264207,11357460555425130,11358086643159577,11363343901357001,11364648346737734,11373180683878968,11376187659958324,11389069542696819,11389085993650118,11390806798887033,11401700519195899,11403781057496463,11409131295056209,11412389566727105,11412775300232418,11417029279499404,11418837401792416,11421908057100484,11422650008295200,11425662918976551,11425674126078597,11426226096713572,11428645865887160,11428726096079765,11438432952800869,11438749233694215,11439459859045383,11441352104880750,11443654407917900,11449443817155297,11452383134434032,11454513203644820,11461197052190285,11467461219160217,11471896734320266,11479308399516360,11480479501736039,11481525923581615,11482045627548411,11486735344192741,11487334506766987,11492165643845175,11502614114611772,11504102260549809,11506002168816672,11508511752461603,11511943811198664,11519358680969077,11532404505521434,11544013273650036,11549882026188551,11552173788839264,11557042562885581,11563775874866474,11565733501856956,11568498682605843,11568678400586201,11577027148599435,11578506049932280,11580137502987103,11582679596601249,11583507699894777,11585101265495681,11585602648201715,11591010700913996,11591047076552913,11597838643220140,11602974466808884,11603600057077164,11607744254139892,11611075089640896,11611748354430947,11617014574952198,11618524239247374,11618542975088094,11630642998651872,11630644392646970,11633366940305309,11635654976144153,11641472090021925,11656889598074910,11657305088193972,11658290320353828,11658683525550614,11661261117256173,11669172662936110,11673471530068312,11675090294053441,11675693720283985,11678347472951403,11682179864909511,11684720239124533,11688194680736119,11693102982874445,11695198210730881,11698756388262452,11705418166137340,11708423865084678,11713690607980814,11715198530711638,11715865254416537,11719221642455460,11720785116417048,11720873374212079,11729906547745977,11730215861616220,11734135498068733,11734286258484747,11738267971902102,11741745751488248,11742706162990999,11753431031818860,11760283991541332,11764356908364626,11764874035248246,11765888369402689,11766277124024897,11774539519322805,11775224796384506,11775268638007780,11776764748856507,11776942132964186,11780837550785665,11785179977172715,11786257969749074,11794754868481503,11806924283192272,11807414633626556,11808079978291033,11811131114446293,11811220919611763,11812158072536409,11821385353119483,11829589265980831,11830306135038023,11832905268834899,11844495882926956,11847454270904827,11849673093092482,11851393982879753,11852586198115184,11853010088136902,11855549547891459,11865871168473280,11867361302652812,11867650483762221,11870483176868986,11873041640016411,11875203851983460,11894361955867873,11898179901887368,11902205768982124,11908023918868100,11909747036535415,11913133672980273,11915166616058954,11915355711841884,11915998238827549,11916592149001280,11919527016797167,11921515414457723,11924342814255502,11926548936220126,11926805367659349,11933874408252082,11941423373859996,11942641559491017,11943720753021897,11944383058348300,11944816331130113,11945878175058106,11946983372457097,11947591791853532,11949638025485827,11950260926652836,11954080001324195,11957777053959725,11958326503192345,11971151405717771,11971876905384523,11975100060815344,11977092281022112,11985901107764494,11988505539494082,11990977878901109,12002472308960452,12002640382918785,12003675199241448,12006152178822785,12008453650739367,12015639579945326,12017280196275791,12020813104002531,12021776657102177,12028404727423728,12038984699485340,12039188241767432,12044509607056046,12048806622801494,12051854023871552,12064775457651800,12068867551957576,12074697710387413,12075311552203459,12077762649844883,12082781112646069,12084574037871764,12085458622840725,12095848659926241,12100943786761249,12103181888338504,12103342077182428,12107570552158084,12110485781570692,12115465620881652,12120271099670822,12120377787831548,12125020327675301,12126157816621216,12130816680520314,12138087342617106,12142933439996132,12155534792479002,12157910100394424,12161240480327489,12180082671639635,12180585227923233,12186122156905100,12193021349236348,12195477889298302,12200556590308310,12206961056205598,12209415880387974,12209801129892265,12210314949080074,12216273376124566,12232375265126369,12232730423776242,12247196809844638,12252787846207710,12256052919408540,12258059120145898,12263515421972286,12267705797264087,12270286861002009,12270468054721839,12270555442661518,12272177606302533,12278465206346582,12283300256073245,12283401561200311,12287926682400907,12296222835104371,12296820332233663,12303801642442928,12308285254704879,12309693411990179,12313776804764473,12315202162866781,12315207049934046,12315740660505432,12317737462653854,12318619168163236,12324460369042616,12331039831738345,12332506101262263,12333514223027768,12334476628613713,12334531906613812,12338305387707689,12340480227036543,12344352953082555,12345475198663391,12347889475047477,12347909851317459,12348984482613842,12351058834484070,12370584345785125,12371619531441513,12378093444154909,12382677140019637,12388152182711242,12390527382979238,12394812233113833,12397727946590385,12397876891941263,12399457458248220,12399946676042065,12400047520221171,12405443348799387,12411872215293379,12414844391454468,12416637915847691,12419850567303984,12422291487048270,12427118539066615,12431826184921182,12433655594115296,12438014718231534,12442226783163244,12447792032805379,12451756713951097,12454152316786214,12456127570195279,12456974565702299,12459098291635081,12459682501675724,12461500353394548,12468960135907940,12474505023309244,12482618753698829,12483487650973637,12484042018246148,12493121285865448,12493531949000940,12496153179323050,12496980807002515,12507272727771134,12509925643507198,12518321496058049,12520510172302125,12520676894792717,12520923198368458,12522185666784768,12537207717978996,12544032455101983,12549910268086697,12549984233150919,12561212829273378,12562621625488566,12564478154644261,12565472974205299,12567396522160703,12574953991866005,12576978802157283,12577735179930810,12581297128593136,12582417504397196,12588761464768613,12593140979984180,12595025894277088,12598104253633453,12603845745843686,12606498330358134,12606901469342342,12612150643542099,12616328366097284,12616804915889120,12626861709059593,12632687195472462,12632877370509020,12639418814809649,12640167527828266,12640428361474198,12640818042674893,12640969010574572,12643494240426710,12648154041204525,12649728621420009,12663246977448881,12665311296655878,12672602214310202,12673433235167362,12677222041198131,12678598650222967,12686784777563923,12689491560869302,12689747806173574,12696892670705054,12699131424983717,12704873713509812,12706444340854109,12708456140034254,12708947544688479,12717959780809396,12725278628820408,12726377376546299,12727033270826653,12727451946669105,12728609040123221,12732289199228764,12743533106187231,12744154603604224,12744582863031207,12753765690440504,12757066236294652,12763333410197074,12763622227660696,12765318712019179,12767461214123574,12771267826669947,12771271434832766,12786352863464886,12791039593741032,12807665721211120,12809522469790774,12812219134042656,12815737553583106,12818427882691906,12819996417836695,12823282271321919,12829072084255416,12829476237406130,12834860563514747,12836268768934776,12839962036566577,12844733648085249,12846697038313617,12848207419401226,12849610059774631,12855844760930756,12856329358872922,12859899907121954,12862703186291722,12868140593650867,12868775358248804,12878995927947374,12880367229968159,12882980822794716,12885096273299911,12887418415101226,12891360431882375,12899091919482854,12900385538356311,12905429635634528,12905692293007666,12906788489234465,12908918208484790,12914133462565182,12916597819623486,12917606324274906,12927617411585993,12927643921060549,12930688332553359,12934350686066194,12938980103044533,12946489524267653,12946566221188718,12947498840965122,12947522776480207,12948080613899642,12955628525207272,12955751803056504,12956105567109482,12963051823146860,12965962908737325,12966841617454724,12969038927449240,12974390471676060,12977226874213721,12984262343738292,12985447175738467,12985493722134421,12992253276160962,13006729868315951,13013340987113008,13024057432246161,13024381576306167,13025387612752500,13035980728818146,13036712601500114,13045600513120125,13052620397276151,13054092485386589,13054236155028234,13064661100685731,13072501768493061,13076878689179067,13078572400562073,13087887536529400,13089196076037122,13095065334602578,13099158956896694,13100332410846032,13101953020852801,13104310576837531,13111577005851999,13114710504214063,13121909629776355,13125923793919885,13127052312166869,13131340694012302,13136566433737611,13154198718450725,13161415791524131,13165906763126222,13170738127259843,13171457864347215,13173346736287826,13174101013456127,13178301051103108,13180513572315636,13184920558769854,13189380579282347,13189931555333206,13199996563430952,13201217534286755,13201807925580353,13207338579601475,13210353545775075,13211066578415956,13211782471313872,13212061616770885,13212165395243922,13226427284217852,13234370539005730,13236634090362774,13238503442128074,13241104178731895,13241168864292142,13241450032861794,13244435867492390,13248655970715829,13254044124605936,13257737390535834,13267000919019282,13267936932487740,13271241935162677,13280579253065923,13282031195456371,13283754265526543,13291686689127392,13298750975340353,13299748738344826,13302554742173335,13314547425279234,13319948227125321,13320420872897251,13322363408500421,13334201253531043,13335658832145523,13335793951712856,13341697171605447,13347417735653001,13349762651012157,13350157202852563,13351999147017999,13353105338922322,13353560065022737,13354308078114141,13356738691919271,13357601360650186,13357777396369660,13359331313196874,13366826205821166,13368583862334403,13377783353267179,13381451339846643,13381463615587834,13385015528950604,13386085962502095,13391317927982365,13392648285436965,13394551832655184,13395404051517109,13398670081004882,13400424231648754,13414514599248518,13421468939724196,13421914072312530,13422513191685049,13423145336408826,13423985507124709,13425535532287600,13428472113899924,13432304326725595,13434089379448321,13442145389950277,13449787085268158,13450297184222915,13452686859689485,13458666141057862,13460158878440690,13460707130413039,13466324773783696,13466915673127210,13472766006472691,13475163848403231,13479722850761988,13480475246113038,13483935819663029,13489343668600089,13491793275562421,13492922551522469,13494212405375710,13495705064166062,13496578331102873,13498115501938661,13502294894809469,13502956667923325,13508489645714817,13509178757772730,13511175763453019,13516547793277979,13517096887074591,13517706451256090,13519875476747795,13534796579194791,13536760109792498,13544313444890724,13546188892694360,13550385209337680,13550826895184846,13552576650306647,13565333800457376,13566103316134218,13570582888476349,13572474456641402,13573232562684901,13573812546471498,13577556238494057,13581522598681686,13588669826245287,13589817490954814,13593552113285088,13597147770176233,13597925645597752,13599350900514499,13600455937242955,13603584733156082,13606027345535991,13616619781513376,13617631557607803,13621326447410048,13621397819727220,13624051916065155,13630191002096322,13633620941174365,13634793775983156,13639851440986869,13640894707400926,13641606518127186,13646923852005472,13649712080213198,13650210377673533,13651091819607497,13651608859118419,13654427643263871,13658284418429714,13660502914513022,13669670567123455,13678455803703467,13680384031643874,13684209880729452,13692915679570837,13697107073013916,13697542413338103,13699244375297918,13700132194249732,13702229819892376,13704275954624893,13706325468204188,13709847705415370,13711378433916464,13713126833679041,13714567785435526,13716137377044165,13725507831112260,13727719554216964,13732875764071009,13733715420630549,13741167003840776,13741640976152344,13747934773389159,13748019953915162,13751009984842370,13751355444615875,13752528537770243,13758183684987635,13761196487629879,13768364341578355,13769717386191937,13772233025470893,13775099387736730,13777389667865043,13779193834002005,13779343273469876,13783090634865873,13788511193264457,13792876019743227,13806888829912490,13810189191668783,13812724327885179,13812787107447014,13817281563439503,13819216056468458,13836967928987258,13837797409998221,13839575757828409,13841506126069216,13844723334748155,13851419674057285,13851804964013356,13855148698755421,13860370948717274,13860591920719937,13863369609343673,13869499215642030,13880535898359667,13885432559815038,13885655208775719,13888286109395766,13889067944081094,13892103020384430,13892745650858214,13893729230139344,13894176996423815,13899539385676851,13899662982568281,13900800882545442,13903640450103285,13912471423586370,13915479520055915,13927268834765068,13930075501042467,13934376089480231,13939640716669681,13943906738910314,13944345475258344,13948067910027087,13948849305450763,13950003362814608,13952318012300341,13954241713643000,13957891625399498,13962475538041667,13965952880287033,13965992746518202,13969065894497400,13973873959866261,13973975217502633,13977253714955139,13980089127547653,13980251368951520,13982564979542470,13988342852603836,13990556415047062,13994731628884224,13995788227041302,13996482893584239,13999899007027615,14003981992485830,14011910995017831,14012374992832944,14013217052263591,14014139243194211,14014245139738092,14015507053297472,14020084142502079,14020512831650303,14021767660954154,14022387662308266,14024048892876207,14028210972184975,14028413705759475,14031728644121479,14032607565016799,14040011506200800,14041235400538814,14043155616226056,14050877619339410,14054606050486682,14058900062976140,14068014186041757,14068336590289394,14070452446274375,14073196557139903,14078263357677895,14079413477735954,14080066225503973,14082060161725832,14082924359301487,14089660453835508,14097413515224558,14098134531900237,14100156126841218,14104609562657279,14108295823070985,14110176260429603,14110846566699118,14111683252929542,14111754638843301,14113954118968165,14115700381311298,14116084203345559,14116262159822071,14118499555389589,14130408476214262,14136333045989523,14140326674960210,14141721173215486,14144055360914058,14148463071587919,14153016738442982,14154977816991154,14155975414531428,14157654079691198,14164161800878394,14172509973561101,14175692216668231,14177050809138713,14178906646157311,14182748633123194,14187963108760817,14188374719646123,14195241543657573,14199253731869253,14206687970696716,14210270522420558,14215169574069725,14215487446995196,14216235072155258,14216815637469021,14221732530161551,14223983097652588,14224068397405677,14228747898918402,14232996386333408,14240099294539079,14240931409922495,14241836658261553,14245988562300971,14249502033018713,14249687565938747,14250698500890187,14252150350133713,14258964967231840,14262886155232322,14265027566645368,14269635702889801,14272184634180062,14274483320198377,14286491830383354,14288578362756140,14291469615410543,14292472000295936,14295837452356585,14298173613618098,14301257753026067,14306183975145525,14310015895186965,14312644574968166,14313406026871827,14316275813435798,14324046111985296,14324162382494344,14327796466197481,14328346609794800,14330165162804822,14334872702153449,14335504292083940,14348901888548568,14349694944734589,14354691446106556,14358712927579207,14361182737613332,14367338647715234,14373358653447165,14377687185916087,14382653933328395,14389328610898075,14394881294681167,14395773024997894,14412375459733818,14417058048931154,14419408012320654,14419543889278265,14419921321665188,14420517295463922,14422482515005653,14424431392247406,14425089420361947,14428963789076396,14430041824596695,14431778710317696,14433829777128924,14434491585844546,14441663522114382,14447076836883551,14452272957197920,14452953847840233,14453826393896267,14457911302704022,14458414754313519,14459032874392331,14460517698166413,14474428436715615,14484126976680776,14486000255831641,14486482190989317,14486688729309047,14490346112381667,14495252825099916,14499310299171024,14502523747605405,14503374543528179,14518760367352883,14520484026405910,14520523492819317,14522374602858312,14529743691651008,14530895847000131,14533293345882871,14533881753163408,14540918644501586,14541038147489782,14544565705546702,14545119728791898,14545143474688100,14546173469934987,14546950089114982,14549609943559194,14550595762050225,14556533343840630,14559345024889908,14572798606348625,14586151667610008,14591042865966381,14594358540722423,14597249351408083,14604151534357376,14605286985819094,14606919734830311,14607574529846282,14612303110337878,14615308468487258,14616719913389540,14624808109756912,14627170591637528,14629700307326754,14630990679638089,14631058148494236,14631592206687850,14634273551714656,14644503421772784,14649557850029947,14651923318081732,14653944011582470,14656311355977165,14657428090327995,14657604036440419,14660498729179366,14661525238412521,14661571640483758,14665151964517830,14667818466333059,14667887619466478,14668685675655734,14682369744095231,14686694622392691,14689136417247410,14689925418874652,14690256368300896,14693014696087872,14699312209892116,14714972951681498,14717202699896960,14718104616195713,14721121520888939,14725344942979782,14727357539437919,14731094891037597,14735849798460939,14748981659235018,14753483946970413,14755563140273075,14755965578235618,14762529320475548,14764626632313599,14773705053327044,14774424971091441,14776126161075338,14777180456645831,14778438956721458,14782806494910422,14784179132609967,14788298711427135,14789280323954198,14793729824905262,14795588947820074,14796095030944430,14802524498404394,14802871040723160,14805119697076881,14816837023868332,14817193876879236,14819207660612212,14825309849899806,14832649404008041,14832874204975299,14841572903295226,14843228258391975,14867172379036342,14870547288257970,14870966209589309,14872596463440126,14875244788896295,14875381698615063,14880698080993082,14883492855733875,14884715585223534,14886553319298264,14886760885556864,14891249907937290,14896102249534025,14899776943325306,14901170136723141,14912124553248599,14914637529083995,14923768734921150,14927475356531675,14931070622748085,14932128317822464,14936488056973006,14939491797730666,14940182819303564,14945635561516349,14946184679427012,14946461852662808,14948084549356910,14948446551537791,14950087955881572,14955259859229041,14959164006691718,14959879541079484,14965284707003980,14965423294444288,14969572759318726,14972120173118520,14977645952278382,14980399363855563,14981979822436646,14982086157893159,14983194443165565,14988165815323633,14993931438103578,14995330188668762,14999867324523228,15006561064342947,15012111756331265,15014220467166698,15015143178733208,15016747917580341,15017581694255009,15027872686689687,15029223449524697,15029421099140855,15030279194177507,15035221909747542,15036546311204155,15039016426253545,15047851634879837,15049002718573923,15049206174008406,15053346072083521,15062104346670796,15064441595557983,15066002393956736,15066248594100780,15067340188537424,15068737776024543,15074812809725285,15076415543655217,15077707600112524,15081726781697934,15083561199479055,15094135577988729,15100586527842091,15100895887756881,15102916238189824,15105535781519277,15116572812194862,15119049194648737,15119364074336061,15125038963644248,15125825668976374,15132962157165167,15136429429441543,15137082733015950,15142340753501357,15142771204200772,15144509730846110,15144908199448686,15144983031311469,15148559483986296,15149385225563368,15154630818232126,15160605890681429,15161531771304283,15162347554758104,15163502675118430,15169763864701641,15176552743308913,15180178091915825,15180542353613847,15180584383482208,15188528526614937,15189413185888776,15208520395012921,15208750046543455,15212200426217138,15227318255741609,15230987915584006,15231021927697063,15232762341410261,15235610343655303,15235940695207259,15236962250830291,15237359393424484,15246816456164871,15249106376606939,15249706293397504,15250808075404806,15258347128439790,15261325410662335,15264731568598059,15269511085038233,15270685254846067,15271999905664798,15273539450147272,15275297064012400,15278958849739502,15281435895520542,15285891219756998,15286093688825701,15287593664509791,15289216934672906,15289862125703132,15290148594297788,15293123874907838,15293182038900352,15293645217732226,15299580313640187,15305964656672387,15306717541883905,15307253298108768,15311297318614703,15312452203678738,15314450403376168,15320795701669972,15323517768047447,15327507236726425,15328510915961246,15329295210127478,15341118628483735,15345070383303245,15345125892343611,15347814684162793,15350044437706640,15353149026108168,15353232670298897,15353560384857675,15355335603796124,15356453151175679,15373930811061691,15383429430446016,15397171895399395,15397714938008717,15399047611286521,15407310719467201,15416018244148923,15420331379087852,15422639254858208,15423849348726518,15427700916526085,15428180744186198,15430571383432346,15431617843729266,15433887937403854,15435323600513692,15440395009514642,15452122315683979,15452893020203867,15453212547751568,15455501413558991,15460176292435540,15462583387869582,15467422080353387,15469490756626048,15470882985899462,15482994955456858,15484173299282197,15484872489499858,15485469980475937,15486304467213949,15487350504789638,15490588941327161,15491583096713568,15492393791023748,15493669981706537,15500366938118891,15502621595004668,15505519386765147,15505574369060822,15507002730562560,15507596083915355,15508961945139367,15509959425170992,15510353559011411,15514535598456693,15515999929535991,15520925704648893,15522061334524465,15522535607692803,15534018111390967,15535143794747681,15541941411191912,15544311106200778,15544548900805204,15546317358086874,15548524218287149,15557041324109368,15560985952069394,15561952874606530,15566576834971175,15569162342244587,15572863590946325,15577133638656672,15578342327203108,15578855835529187,15583702740356037,15584544164633761,15585305674396933,15586021008360415,15586572984402845,15589664130788769,15591725629706008,15591835587885800,15600022327961011,15607295863535585,15607922224614041,15609335762508274,15618067512755640,15622298857392805,15627058763799697,15627340304611938,15630540170717466,15632960102416693,15633826576330465,15638216907788849,15638858384127971,15642870227425833,15646398545914329,15651638904781067,15659367639512437,15663152139200473,15663328758094326,15663518386052835,15665466143502026,15668753861818902,15669831866387505,15678947651292970,15682550662690976,15684129061048451,15684714219805662,15685720052383568,15687701212595998,15689677439468810,15690787323220986,15695115813510797,15700741802774887,15701006667851545,15702846415375903,15703962508930357,15704863872433113,15708565750105863,15712661333238613,15713676720006796,15721982912314664,15724009739721668,15734864201421320,15735526608963708,15747072816599513,15755103109741170,15755440794212771,15757655394026279,15760850159052851,15763329664260405,15763347842500031,15768290846396154,15768790414358471,15771335490643202,15775430111926025,15779539730846437,15782503260567645,15783285537872233,15783457873235222,15788485549669269,15789578978089590,15789976943224909,15815973513115164,15827668242360976,15828816982020122,15836027530140851,15840334179132579,15843352451900485,15843600775555820,15850629388872569,15856599929346677,15858472897572714,15862471597714265,15863820783079073,15866236940451977,15872237508205510,15872362195905201,15875441792071432,15875675232290550,15879801226947188,15885288784193762,15886622651670213,15890892365015163,15893531204246694,15897401962344850,15906340120401315,15911275554215588,15911665623700279,15915302121110625,15929095843806677,15936857080419564,15937966068964410,15939128572044103,15942294347954403,15944489120018696,15947799685112623,15950810185660122,15951245132791578,15954518713119826,15955148149270868,15964603511322079,15966264651417527,15971851268005300,15979755963656160,15980573084169774,15988715093923408,15992587277784956,15995125981757130,15996510118296691,16003094114347164,16003140191180923,16004817238396021,16005398242861922,16011459785052628,16018446377180066,16020878297532268,16027627388696968,16029458430644052,16030694108593481,16034236792251998,16034525251814468,16034983761592996,16038301793476863,16046531724225850,16060832251885914,16061260687253150,16061782006846042,16061864710345917,16062107659438725,16062126410990904,16063267034774544,16068775512666918,16069046551508727,16074486970716033,16078205716009594,16080740588460730,16083877262816687,16090383828959085,16093240548996996,16094586933607974,16095534305784346,16100320419524573,16100367571904401,16101369009466497,16105015545889947,16112103922334415,16116526388299685,16117917347854731,16120352726850564,16127193854760523,16133443983594261,16140981467932346,16141034606926221,16144336314735217,16149265475211648,16150040833847011,16152783913026412,16161207778152920,16162431360492115,16172266596086346,16174694833891312,16175177075901135,16178760128679429,16181654573567669,16184318280736106,16187175465801236,16190571409547135,16191892773280294,16194604792338484,16197234251528011,16203717232904224,16205094133158569,16211596379781820,16214165140670292,16222085433520808,16225653430698144,16226175893934181,16232827850921026,16232879761043264,16233112123839300,16235839769165041,16238168570863362,16240238424856187,16240762741306135,16243928721228007,16244975726182655,16260035380139182,16260845001474054,16262693077001559,16264698063563820,16266712848564625,16280927247624124,16285231420960465,16307595056946704,16307951982401723,16309137054392802,16310681306790082,16312561878704069,16312770958996932,16315681986373983,16317916292886363,16318142278966024,16322992301675770,16326980298830476,16340878351385153,16341631078822258,16341765762990956,16344386984734169,16347036755860703,16347588955891873,16349624325715789,16354850499974803,16356347789934648,16356612357153481,16359131609074861,16362066780194864,16365789041511778,16366474475380606,16367467787980037,16369281391114209,16369945946899217,16371513179077382,16372297199748151,16373987141658826,16376198685113602,16376801678126739,16377409889399924,16386085273604579,16396880383990556,16398733126926655,16399995796956960,16404482717922927,16419509766610091,16419901644544820,16422440467412931,16431504741295613,16432971637241688,16433327633528711,16435742390682375,16436934401638026,16437965595938221,16442543340364424,16447014000822092,16448682699618749,16448694170228736,16449874025980925,16450690918804765,16452048761762229,16457674212534286,16458193998413945,16462708921584182,16463091501301962,16465114761860846,16465120270600982,16467984634116524,16471768032344118,16483944183054084,16492537636527687,16495989716457454,16497815380221164,16499668866369559,16511518960700260,16514937777288269,16515317531532600,16515763893503398,16517537506431523,16520680878383534,16528575556857601,16545733416918453,16549193848756349,16551638786295881,16551950824707495,16553580690041101,16557075823478085,16557622410594911,16561729019896847,16568638052909005,16569637258340730,16574236353677299,16579013171395585,16589547714857710,16589699574162660,16591958210106118,16593504637950067,16594902459898391,16597325276377050,16605918285966819,16606580432110149,16610275696347712,16613342366245440,16618755587989745,16620145335129622,16626806031696348,16627492809843158,16628850845685145,16629787832374700,16639264165576493,16640125030088682,16640885497737107,16650212270002998,16650283216078512,16651922820531350,16653981254978641,16654463028053744,16660067927175777,16662173317527607,16680510934158810,16680561622616533,16681703184890456,16682373593295548,16683370222392777,16685180422791776,16689070891238240,16690482654703766,16693110746762578,16695572956327954,16698836185067210,16701956823305074,16703748939565094,16708313260115034,16710176517292164,16710559192935968,16715146526807170,16723897963678559,16724720235210872,16725294155137383,16727032133352391,16728617677318426,16729903330833289,16738231483083309,16739182735043548,16741586841667302,16748052258655621,16753484567013429,16755872335309848,16759630605474370,16770317161224453,16781529885866521,16790832050869615,16794869894044860,16804435888556957,16806577309208351,16810005023919202,16820470058192790,16823502750640122,16830808420468113,16834585049588482,16835383911593327,16843019140494565,16843470568018147,16845624208838007,16850886838136612,16853500585157421,16867020968629490,16867864576520806,16868617407655959,16868995983462599,16870191809073980,16870410864242800,16871035110851631,16873285741528950,16879575300669180,16886381613931407,16887131664281014,16890451337099671,16893613954731672,16904808506504605,16906302534491199,16913880033664423,16927073596682644,16932303526577817,16938552604164274,16942918462021910,16943992912828536,16946796236946721,16946891861601499,16947503499298974,16954247022723534,16956760996707076,16962140177483474,16965324067224038,16966208347117891,16966288341250307,16974928251104354,16974976960555336,16974996106586527,16976062143580028,16977273505567584,16978106126234654,16981100707531732,16986912710655502,16988076401714671,16989134716990479,16993284480102555,16999277768258162,17001105496098528,17001625874486973,17004131992558114,17004653707426806,17008056242821339,17010630988250026,17011749486628658,17012043753575418,17012833537545574,17012961214609946,17018029384954439,17019281824197645,17019567982933477,17020453662805895,17022002414706187,17023649823777761,17024720259097538,17027024912981538,17027708820603609,17027724390296374,17028905071969344,17033234045807732,17039633394164779,17041956186643831,17043911086147728,17044227183900592,17045020641718652,17053515690985016,17057625560583053,17061147464856536,17065736283826551,17066204322105669,17066890141401799,17069702342298005,17072355840387059,17073899007528806,17079370707234233,17083995713147359,17086180968300670,17086729799181588,17092924242292896,17099823267028374,17109970886679733,17115609728681850,17115701285838058,17123770859038573,17126111370551570,17128001588707458,17137453008591868,17143215310364176,17148520678822028,17149911306286158,17150277478457455,17156795393603011,17157898465093855,17158828067013858,17159011651238619,17164804932271093,17166238296990702,17169462933515083,17183821169135232,17184647258662518,17186046317572781,17187089371311171,17187953830759362,17189985997758617,17192344156604394,17196706052792205,17197787441563201,17219161189129714,17220298721334363,17220596644754506,17223793252771328,17226202100493419,17229146874971723,17229711692736590,17233175158773315,17246076311509922,17253960997681551,17254418065865558,17255087609386479,17255995767294112,17259835753342812,17260765999229191,17264493723089078,17266202911425676,17270142522772385,17270315441865085,17270538843510702,17279346919275792,17282090993143952,17283049372339150,17287308980519422,17291831163747378,17291979671712321,17293149261210524,17293672805669573,17294786701918124,17296137849004163,17304784741854216,17313632977406292,17316550266876212,17318692992816441,17319678699176484,17329472456864413,17334864272182912,17341517372421961,17350493188966563,17353053843653375,17356450551100592,17361459937027549,17366983669838823,17374030449048011,17376228701452293,17378407166143928,17384549204332200,17388171487087893,17390942323634254,17391219400155350,17391436242706241,17396707198829202,17398282123693718,17400652202709747,17400913153559823,17402765624273936,17407246841014078,17407426140293546,17411561521038686,17413919734842125,17419751217564568,17420104524816546,17420485858384051,17420499051739414,17422062281526649,17423105453982540,17424603372802588,17425090194197669,17429451938052494,17434671597288182,17435530177003750,17436880586844845,17440523469292889,17441789247813820,17444828676918251,17449218340958120,17453531113236656,17455682577560844,17459797692635710,17462899646868656,17466786275120017,17469533283184289,17469793035926815,17470441567829100,17470553723629372,17476827515285484,17479085198776952,17479606979027524,17482162292356881,17484120239214373,17486065626693618,17488816545423819,17492552714657461,17495168335254171,17496728290093656,17497098710311670,17499228377170813,17499405596516174,17500477193853245,17503587588672849,17509297579594984,17517159540441318,17541513425567569,17549550257204532,17554939460224349,17557110727324424,17558580292594243,17559431629269263,17561308627872597,17561448044068445,17575560135721806,17577145952506174,17578206520670377,17578443574662836,17582264107806662,17600607133597719,17600742857183071,17602282637407016,17602421941387749,17608558726968620,17608993167118462,17609153518381219,17612331367634278,17612661692978454,17617501881367841,17624682438741740,17634636486838908,17636045194545382,17636697018575467,17641686744036386,17644039113805944,17645312266322218,17648036628500448,17648654551195334,17649827707409978,17654605406803051,17659151263914508,17659621059389953,17660743105223332,17661459152369712,17663870523590598,17669690965056750,17676740506186425,17680247160773935,17683919063883369,17684983449309621,17687312381466046,17695758922408170,17697682504000309,17701077865761339,17707842984156022,17710801222146557,17712409569723362,17712893886367554,17714216772557464,17724374962463603,17729422012525851,17732456419233492,17732883134864219,17735784358608079,17739008654014794,17741767011633464,17745817163447253,17746048334435768,17746097465586084,17746510075374564,17751474508572071,17754583581253314,17759977925515375,17767687613087632,17770981472959907,17776801117888552,17778432694523101,17780417672471981,17780633004635622,17788814020175258,17800329108711822,17804753485051696,17808423895668929,17810904352266449,17811294904961592,17820414995546733,17822389231945555,17822754688428992,17824058019135158,17824692487924143,17825578992465786,17828557450318443,17829961694570784,17837924490120715,17838730974038612,17839479752655995,17840541840864217,17844481483540230,17851847109708456,17853025423149005,17858621723903710,17862392392198693,17863284124973089,17864179561603861,17864592832666958,17868918610462163,17874140595461808,17875253398653485,17886201118232867,17889210293831194,17893885025675099,17896653342000979,17897530801963500,17899962937369458,17905797190497744,17905846546240170,17918445343593208,17919141917693070,17922025141068374,17926997493031437,17927103791988031,17937654095049111,17939317258777532,17943850737738299,17957869302232059,17960883452908748,17961387047243191,17965956572473636,17968648867149500,17982550082813185,17983136277324499,17986809951266796,17988399353053093,17992768183819834,17993406082650772,17994870382615510,17996626721764095,18001052491537957,18001311042217802,18005492007967208,18005654000109885,18006237324341425,18009042115164135,18014657110806736,18020223752353121,18020974854298469,18021886555673319,18021977349239142,18025297591294553,18025990996334243,18026004208911747,18028316562390501,18028689821463165,18028750965578870,18033529755426165,18034259808131599,18040783877464002,18041292302459796,18045296264870451,18047765377766084,18055041696562277,18055087872299409,18055202394875922,18055587125968368,18056175313091286,18063228282000881,18068141364358640,18073505561056499,18082663742446595,18103391723450706,18128418480848031,18129647245646890,18133139401742517,18136432192167355,18136446741098044,18138810838881859,18139979326512529,18144683812945242,18148112805994599,18162150874995819,18167996487849658,18171316446408821,18171388681157994,18176398171978336,18179155755591764,18192955804156397,18196133156509510,18196224826654508,18200162616918760,18202136593857712,18202307391092451,18202693116385381,18206082138173204,18212687689930990,18214396067041321,18215688955701607,18219379302426418,18219974968329184,18221275900037908,18223508196000123,18223722170355650,18224739650203902,18231210235164500,18239788102481133,18241422988672837,18251366028776903,18258026885319486,18258704607599735,18264270499497472,18265102179546859,18276178788453575,18277532214379777,18286308776218058,18292647811673026,18309896670692432,18312531677561972,18312928450191138,18318512805857755,18320706645413560,18325796935244911,18330283146493020,18330874810048231,18336172353658611,18337191336507655,18339590117968112,18345440651863510,18352607575179916,18352917019852258,18354768007590930,18355594602361787,18358922153576498,18362561943328805,18362962670225728,18366897023001689,18367801753285595,18379087767248948,18381374117454963,18387301731718687,18387581519957645,18389284618749271,18390199754916829,18395298635755745,18396190684827929,18399039864999227,18400962357421119,18404059324034888,18404723916877195,18410857770319952,18412761413118797,18414602864713505,18417094802826718,18417594946606594,18423285819437783,18429692224833089,18434895555056928,18435861506577465,18437428333588590,18438159643459969,18444487060015322,18444666364288446],"molecule":"DNA","num":0,"seed":42}],"version":0.4}] \ No newline at end of file diff --git a/tests/test-data/lca/47+63.lca.json b/tests/test-data/lca/47+63.lca.json new file mode 100644 index 0000000000..fbfc4121de --- /dev/null +++ b/tests/test-data/lca/47+63.lca.json @@ -0,0 +1 @@ +{"version": "1.0", "type": "sourmash_lca", "license": "CC0", "ksize": 31, "scaled": 10000, "lineages": {"32": {"superkingdom": "Bacteria", "phylum": "Proteobacteria", "class": "Gammaproteobacteria", "order": "Alteromonadales", "family": "Shewanellaceae", "genus": "Shewanella", "species": "Shewanella baltica", "strain": "Shewanella baltica OS185"}, "48": {"superkingdom": "Bacteria", "phylum": "Proteobacteria", "class": "Gammaproteobacteria", "order": "Alteromonadales", "family": "Shewanellaceae", "genus": "Shewanella", "species": "Shewanella baltica", "strain": "Shewanella baltica OS223"}}, "hashval_assignments": {"2925290528259": [32, 48], "7397951382043": [32, 48], "9478766578752": [32], "26390034908046": [32, 48], "31811219567311": [32], "36191627174349": [32, 48], "39112643786682": [32], "46822418898135": [32, 48], "47180432856748": [32, 48], "60017138985701": [32], "60046869099761": [32], "65325381835497": [32, 48], "73805228897455": [32], "74037001801154": [32, 48], "75800414195236": [32], "81855770871884": [32], "83631867214312": [32, 48], "86442965329695": [32, 48], "89858161015356": [32, 48], "90806331781332": [32, 48], "95108107091043": [32, 48], "97258972896665": [32], "109728134835863": [32, 48], "111162670259148": [32], "113585458770972": [32], "116166720583475": [32], "121382935674939": [32], "125296899385152": [32, 48], "141176320451685": [32], "141284968207060": [32], "141805235471354": [32, 48], "147190179068733": [32], "149024066888166": [32], "153783847123278": [32, 48], "157255282423883": [32, 48], "160902593196961": [32, 48], "162823771630571": [32], "166163367169365": [32, 48], "174979625787948": [32, 48], "175032069345452": [32, 48], "182141449646872": [32, 48], "187503667710897": [32, 48], "191814288543916": [32, 48], "192890223167288": [32, 48], "195186364664284": [32], "196037984804395": [32, 48], "197033160819668": [32], "203335269479450": [32, 48], "204822233856042": [32, 48], "209233297808434": [32, 48], "210990374921109": [32, 48], "214600505227173": [32], "216861451361880": [32, 48], "217827490079709": [32], "224612774123844": [32], "227683744949779": [32, 48], "228540468204721": [32], "228644441858825": [32], "228848037454334": [32], "235478348737722": [32], "240579984608212": [32], "245029062906088": [32, 48], "248581735034297": [32, 48], "251186192464160": [32, 48], "258255664267571": [32, 48], "258924003299576": [32], "265587486568360": [32, 48], "269368370464968": [32, 48], "274235329360733": [32, 48], "287831833139065": [32, 48], "293035680952788": [32, 48], "294558365931778": [32], "295357672887769": [32, 48], "303548064148961": [32, 48], "303884611876696": [32], "306041902505698": [32], "307504482597750": [32], "309969810458414": [32, 48], "316701230964482": [32, 48], "316897730501733": [32, 48], "318378982650332": [32], "318568418472400": [32], "318769251839299": [32], "319335385321196": [32, 48], "324290895668437": [32, 48], "335605928681508": [32, 48], "339214912158009": [32], "341001360876621": [32, 48], "349347535027435": [32, 48], "351258437206186": [32, 48], "360700437330047": [32], "367327558614874": [32], "373471575728001": [32, 48], "374188784960382": [32, 48], "380562917179168": [32, 48], "384016070832594": [32, 48], "386412107814027": [32], "389279696836396": [32], "393985777467936": [32], "395356088720884": [32, 48], "396054053894786": [32, 48], "399215565767837": [32, 48], "399215750881719": [32, 48], "411030707384650": [32], "414934253467214": [32, 48], "423759820188444": [32], "430191392037330": [32, 48], "431262729545883": [32], "437506450440821": [32, 48], "438105428895659": [32], "438530381378884": [32], "439044119332850": [32], "444273467310604": [32, 48], "449680755457024": [32], "450506164772110": [32], "457138551847407": [32], "457671098462976": [32, 48], "461477875054528": [32, 48], "473505790593386": [32, 48], "481815788294090": [32], "487479264340595": [32], "489519873805078": [32, 48], "494381455384554": [32, 48], "495601542123242": [32, 48], "500121418104925": [32], "502603922576313": [32], "506180131137999": [32], "506336140549160": [32, 48], "516283812540815": [32], "518803929727716": [32, 48], "536385923460112": [32], "536713413896697": [32, 48], "537757852470225": [32, 48], "538244971589768": [32, 48], "540208451183188": [32], "540588787405694": [32], "542763181011925": [32], "549192277958979": [32, 48], "550069279000761": [32, 48], "553900351455263": [32], "554447489693319": [32], "559226934389812": [32], "561316274253850": [32, 48], "569061433009767": [32, 48], "578397933313938": [32, 48], "578899728742280": [32], "582924953100697": [32, 48], "583572058199369": [32], "589631402773527": [32], "595681341596523": [32, 48], "615537076898013": [32], "626475972546369": [32, 48], "632243908286808": [32, 48], "639824119626438": [32], "645743921515803": [32], "648018730756195": [32], "654100189449365": [32, 48], "668365295793413": [32, 48], "670523964406925": [32], "671677182717796": [32, 48], "671759739945458": [32], "676515376899555": [32], "677670347980377": [32], "684837528099741": [32], "687895771489510": [32], "693758846688308": [32], "694523064126211": [32, 48], "697547171219962": [32, 48], "698360853391060": [32, 48], "698383699159430": [32, 48], "699304671955329": [32, 48], "703696716274708": [32, 48], "706932232475763": [32], "708449170262947": [32], "726292867622433": [32, 48], "726450649964317": [32], "727800693698567": [32], "728799639190186": [32], "734019394597526": [32, 48], "735119835330596": [32, 48], "737721455578775": [32, 48], "738543439712395": [32, 48], "741951415758063": [32], "748275069435017": [32, 48], "750168693442959": [32, 48], "763201112060730": [32, 48], "763669867104092": [32, 48], "763903450865190": [32, 48], "767121298622699": [32, 48], "767417571203746": [32, 48], "770436202573059": [32], "771683466150501": [32], "772051111454828": [32, 48], "772152509572841": [32, 48], "787291725467630": [32], "798319271383660": [32, 48], "802162977380527": [32], "806341566938246": [32], "813805466325024": [32, 48], "815570804752811": [32], "816564335333987": [32], "817024725405204": [32], "817504754626588": [32], "821706687072387": [32], "826077010431743": [32, 48], "828356750400476": [32, 48], "831736232379626": [32, 48], "843025850509368": [32, 48], "843740928711723": [32], "845050451776051": [32, 48], "852042280696332": [32, 48], "857912135260852": [32], "871829709114624": [32], "873254290207218": [32], "875246525542985": [32, 48], "889897273652095": [32], "894040289596463": [32], "897620767964532": [32], "904962988643425": [32, 48], "905308801557271": [32, 48], "906900833647951": [32, 48], "909442865612931": [32], "912697620927191": [32], "913789208155712": [32], "916185332282483": [32, 48], "917277762192278": [32, 48], "917334002968300": [32, 48], "919561883055202": [32], "920956096920505": [32, 48], "929046426661708": [32], "930950142910172": [32, 48], "933691189676382": [32, 48], "934117578798841": [32, 48], "936230738064974": [32, 48], "938188383682602": [32, 48], "941861412444067": [32, 48], "942726201014166": [32, 48], "945032973428091": [32, 48], "947084478373286": [32], "948779805509636": [32], "951217347666850": [32, 48], "955636489177710": [32], "961017555998937": [32, 48], "961314440978493": [32], "964218423186297": [32, 48], "968212926455014": [32], "968926587713112": [32], "969379511837489": [32], "972618046502811": [32, 48], "974637708612999": [32, 48], "980196796037373": [32], "980565419407507": [32, 48], "983225283458250": [32], "987541215674501": [32], "992940514834332": [32, 48], "996549857630112": [32, 48], "998926194132937": [32, 48], "1014496787753945": [32, 48], "1017704359447639": [32], "1020480845863237": [32], "1024292399670426": [32], "1024634573363382": [32, 48], "1028460419483054": [32, 48], "1033874047074353": [32, 48], "1035843403340873": [32], "1037163054983442": [32, 48], "1039558325527817": [32], "1045088944681707": [32, 48], "1045785088974313": [32], "1048574231977270": [32, 48], "1051002783372661": [32], "1056506578664023": [32, 48], "1057491059487351": [32, 48], "1059437143082343": [32], "1059853068042602": [32], "1060760398971021": [32, 48], "1061967838052170": [32, 48], "1066520357980609": [32, 48], "1069224019506529": [32], "1071759691375436": [32, 48], "1072369963153950": [32], "1080440645655398": [32, 48], "1083957482733017": [32], "1085596610204486": [32], "1086288713384900": [32, 48], "1088705827145973": [32], "1089204340626863": [32, 48], "1090298523330765": [32], "1090505634288396": [32, 48], "1093123453947031": [32, 48], "1093780160574614": [32, 48], "1094807962005299": [32, 48], "1096801323900100": [32], "1103535113750718": [32], "1105423537109674": [32], "1110277142974534": [32], "1113000955148039": [32], "1118646614510530": [32, 48], "1119281509125641": [32], "1119614160374606": [32, 48], "1120783033143617": [32], "1129279349995602": [32], "1130113935525204": [32, 48], "1130881986044393": [32], "1132820492214112": [32], "1144614443668767": [32, 48], "1147223276986948": [32], "1147680055727668": [32], "1158195764117399": [32], "1163159397520386": [32, 48], "1163303408022562": [32, 48], "1164535774717695": [32], "1174386415542665": [32, 48], "1182168703505980": [32, 48], "1186019430315229": [32], "1190006012882786": [32], "1191391064481088": [32, 48], "1200797929442729": [32, 48], "1203248128742846": [32], "1208460365112124": [32, 48], "1225631809302250": [32], "1234453656762891": [32, 48], "1234698668275227": [32, 48], "1237451114108962": [32], "1241245219164313": [32], "1241546710850109": [32], "1241668290204495": [32, 48], "1242418821754022": [32], "1243711623939695": [32, 48], "1244290020173228": [32], "1244346278691061": [32], "1245003263018464": [32, 48], "1250484435790357": [32, 48], "1256754510605581": [32, 48], "1264563878337445": [32, 48], "1269060350975578": [32], "1270154727600023": [32], "1271923497273997": [32], "1273115659423672": [32], "1280559509676354": [32, 48], "1282472909138162": [32, 48], "1285880210646676": [32], "1287498565406779": [32], "1291218968991828": [32], "1292246474868788": [32, 48], "1292487278268025": [32], "1296553378083571": [32, 48], "1300214247397513": [32, 48], "1311078551896352": [32, 48], "1311449533649890": [32], "1313826623773576": [32, 48], "1314579091305857": [32, 48], "1322276316890973": [32], "1325524051301607": [32, 48], "1332430917176015": [32, 48], "1332675238905364": [32, 48], "1334939013056183": [32, 48], "1337600826833551": [32, 48], "1339674524726757": [32, 48], "1341661245836409": [32, 48], "1341942310569850": [32, 48], "1344850241954264": [32, 48], "1348761416973437": [32], "1356904466129199": [32], "1369078449955986": [32], "1370039456672284": [32, 48], "1370854092951821": [32], "1372351037556570": [32, 48], "1376501003787476": [32], "1378471035008080": [32], "1383348406006914": [32, 48], "1387085462947589": [32], "1387385057191781": [32, 48], "1388584147493453": [32, 48], "1390384276015810": [32], "1396964107951550": [32, 48], "1401298565016323": [32, 48], "1407230822931784": [32], "1410486644494794": [32, 48], "1410786461048450": [32], "1414537954260326": [32], "1418743862991832": [32, 48], "1420081602859846": [32, 48], "1424366051167663": [32, 48], "1431140791675340": [32, 48], "1438960590550765": [32], "1443983103542619": [32], "1449677011803774": [32], "1457429906997387": [32, 48], "1458641089226597": [32], "1458716224614631": [32, 48], "1459144447544839": [32, 48], "1461511802747479": [32], "1465076638017898": [32, 48], "1465867789405739": [32], "1467827467674025": [32], "1468663744355213": [32, 48], "1476939334625119": [32, 48], "1480237325649862": [32, 48], "1481088686107013": [32, 48], "1483592564337201": [32], "1492314148312178": [32, 48], "1498457281550692": [32], "1499617447616390": [32], "1503853002568292": [32], "1504262319315651": [32, 48], "1505172916296130": [32, 48], "1513668920373911": [32], "1519648405600154": [32], "1520931632741619": [32], "1521780633605083": [32, 48], "1522237249746592": [32, 48], "1522582599941917": [32], "1523518586763814": [32], "1528071377900249": [32, 48], "1529728378502178": [32], "1531967467499308": [32], "1535306641925593": [32], "1535658178776979": [32], "1539307118095840": [32], "1546368847550532": [32, 48], "1548019688923957": [32], "1552083355029650": [32], "1555637141656241": [32, 48], "1555928090783844": [32], "1556284449775147": [32, 48], "1558324681023092": [32, 48], "1560969323307091": [32, 48], "1569318833056381": [32, 48], "1573222947937990": [32], "1584949879718000": [32], "1588978430427079": [32], "1591204462547614": [32, 48], "1598261363578814": [32], "1600688746972553": [32, 48], "1603093475242546": [32, 48], "1605199952752847": [32], "1617237167349710": [32, 48], "1618568234848372": [32], "1619286790649678": [32, 48], "1621192910003941": [32], "1622309948672121": [32, 48], "1628201100274523": [32, 48], "1632271494883561": [32], "1633815225207084": [32, 48], "1634399357702189": [32], "1637441524349088": [32], "1642637371934077": [32], "1643195637784435": [32], "1643598557356785": [32], "1645422696089427": [32], "1645673596073883": [32, 48], "1645866259200502": [32], "1648716913052297": [32, 48], "1652765950688817": [32, 48], "1654033476941478": [32], "1658743399661231": [32, 48], "1659819081077302": [32, 48], "1662433005161059": [32], "1666913529898081": [32, 48], "1679605700468270": [32, 48], "1679921198649960": [32, 48], "1680089532480362": [32, 48], "1683724693448022": [32], "1689682641477370": [32, 48], "1691706033392643": [32], "1696089597402537": [32], "1705950022227142": [32, 48], "1714068118984789": [32], "1717459770518422": [32, 48], "1718014979380734": [32], "1719690455811654": [32, 48], "1734728075132632": [32], "1739172733710985": [32], "1745324659468599": [32, 48], "1747303538361662": [32, 48], "1749145577098552": [32], "1750021468273833": [32], "1750530525839386": [32, 48], "1757623281396842": [32], "1758538630442116": [32], "1761579455667380": [32], "1762621869823670": [32, 48], "1766019454242846": [32], "1766154871452422": [32, 48], "1768074570558590": [32, 48], "1769506068128510": [32], "1770988073934927": [32], "1778201561133905": [32, 48], "1778315567513725": [32], "1780288814569870": [32, 48], "1781805678833298": [32, 48], "1786019351090790": [32], "1787025898307575": [32, 48], "1793358709247570": [32], "1801404378718274": [32, 48], "1802232213372715": [32, 48], "1804215890133513": [32, 48], "1808123394894591": [32], "1808805306365691": [32], "1810435102767883": [32], "1813163351446427": [32, 48], "1818925318022107": [32, 48], "1819091566970620": [32, 48], "1821246620845572": [32, 48], "1825289420275521": [32], "1829618500803507": [32], "1831822327838518": [32, 48], "1832408978761242": [32, 48], "1835694527640110": [32, 48], "1837046808494825": [32], "1840320929072049": [32, 48], "1842060817177608": [32, 48], "1844561134226776": [32], "4550472317399": [48], "13950946236093": [48], "18944997319943": [48], "23965553957178": [48], "39116644913079": [48], "45540178190062": [48], "47367865367011": [48], "50188964065828": [48], "71315379183989": [48], "76190207226452": [48], "76733150364607": [48], "101072116806558": [48], "117764718466551": [48], "126550040779683": [48], "131219583539670": [48], "135497977128744": [48], "138537198116911": [48], "144854809628393": [48], "154055696317370": [48], "159984546139167": [48], "173817709369233": [48], "186033286918724": [48], "189372881188038": [48], "194756913683551": [48], "196583081113717": [48], "197511952689884": [48], "220853041487844": [48], "220923489229742": [48], "235388211895357": [48], "244969519314153": [48], "256982811990450": [48], "266208269658242": [48], "307854560177526": [48], "308368577694671": [48], "312508185357838": [48], "328294702120808": [48], "333432074251696": [48], "337243852456192": [48], "337788124062930": [48], "338296399583721": [48], "341707613453589": [48], "349282729367235": [48], "360629153151276": [48], "364874268407945": [48], "370407120162642": [48], "370595193569972": [48], "371700279077049": [48], "381400955129871": [48], "385242214102144": [48], "394797505266453": [48], "401601210843243": [48], "411114364557568": [48], "413011122735307": [48], "423964724934678": [48], "426125170072817": [48], "431514229123485": [48], "437290714565213": [48], "444196295289556": [48], "444519598728863": [48], "479169447884417": [48], "499291264639906": [48], "502817538324491": [48], "514225777616243": [48], "517767750601700": [48], "528657857026586": [48], "531621018151405": [48], "531911437550984": [48], "551298730569376": [48], "553354665477159": [48], "560183238975729": [48], "565120453207608": [48], "584608245878528": [48], "597246199104774": [48], "598744731403748": [48], "600409846627222": [48], "618082707842705": [48], "622540719875971": [48], "623112432173232": [48], "623564286058606": [48], "629214339204581": [48], "630564503284386": [48], "635842404828277": [48], "636454008801855": [48], "637963474663087": [48], "651565303681692": [48], "658694830193748": [48], "659359272720991": [48], "670476914395432": [48], "681398943911705": [48], "687743951317806": [48], "693383660447783": [48], "698714184393962": [48], "699414001750549": [48], "702028024437135": [48], "702655743925993": [48], "712467878162751": [48], "715119064036805": [48], "717098217279451": [48], "720002464362774": [48], "727685109931740": [48], "727786563214130": [48], "732669904526146": [48], "734554562642182": [48], "736734785664407": [48], "738157827715680": [48], "755428520351338": [48], "760914553470842": [48], "766769547808498": [48], "772219237112224": [48], "773253991876737": [48], "773640117883594": [48], "778719831734053": [48], "788541066253130": [48], "792800620274218": [48], "793126364353395": [48], "801192084570519": [48], "801979719204052": [48], "806030682122869": [48], "826029246264765": [48], "833989830989481": [48], "842811510495576": [48], "850325922079257": [48], "852616072150159": [48], "869440701256868": [48], "871739984144307": [48], "873878962991102": [48], "885732713802105": [48], "900984329565111": [48], "923846800950923": [48], "927733683191258": [48], "931188320066855": [48], "934829751321026": [48], "941382244559733": [48], "948088536983824": [48], "950251614016922": [48], "953311674641424": [48], "965844189572501": [48], "974258465646756": [48], "986147003709405": [48], "987407484206883": [48], "995584120548026": [48], "1000937685539434": [48], "1013410477239192": [48], "1040756065933066": [48], "1051364708814767": [48], "1057829590018958": [48], "1059199927925541": [48], "1060460577561031": [48], "1062598334481497": [48], "1075576974119467": [48], "1076194665589715": [48], "1076307473155886": [48], "1092749687333011": [48], "1106831352465275": [48], "1127740241225995": [48], "1141800182705337": [48], "1141957433258847": [48], "1153321625273873": [48], "1154225306393882": [48], "1167323239732974": [48], "1171405306002670": [48], "1175414485855042": [48], "1177706510708587": [48], "1185081332506550": [48], "1187776202203922": [48], "1188893606724299": [48], "1197375422019658": [48], "1202982399470063": [48], "1216183572752189": [48], "1216349299615743": [48], "1217760228928876": [48], "1229437984652935": [48], "1232027701338500": [48], "1247153420491991": [48], "1258709409617632": [48], "1261831186742139": [48], "1278259882696625": [48], "1294492972700075": [48], "1300724144234399": [48], "1304554095644208": [48], "1306972413335965": [48], "1310819837267255": [48], "1310835683752449": [48], "1313445683077905": [48], "1320340005211507": [48], "1327738097851136": [48], "1338522631065263": [48], "1346444314218596": [48], "1351570661987737": [48], "1355274635861570": [48], "1358877729391906": [48], "1362862766300078": [48], "1367870608065681": [48], "1370746553808697": [48], "1371431531962106": [48], "1377792461855597": [48], "1400398296107299": [48], "1407177952341116": [48], "1414568563679456": [48], "1417984842495635": [48], "1423937616614171": [48], "1429198692194983": [48], "1432423484009425": [48], "1443327278633039": [48], "1450861996451357": [48], "1452845116328517": [48], "1455020177231177": [48], "1466391743844010": [48], "1470580811951805": [48], "1472835164326678": [48], "1480539429325015": [48], "1484226042988529": [48], "1492550216115797": [48], "1497353541354036": [48], "1499289039133439": [48], "1505096985478881": [48], "1507126472384732": [48], "1509264042384987": [48], "1514218641840864": [48], "1519203024139040": [48], "1523791718968068": [48], "1535451811798960": [48], "1537397570523640": [48], "1538118443000138": [48], "1545740833177405": [48], "1553692785951588": [48], "1554071056896812": [48], "1559450514209843": [48], "1561680258145617": [48], "1580482970750366": [48], "1588956381434551": [48], "1592943214430038": [48], "1596940098556068": [48], "1599643181368601": [48], "1600494020961221": [48], "1602101064988014": [48], "1608467868376532": [48], "1613230042071034": [48], "1620827732630844": [48], "1623966948730132": [48], "1624318503960075": [48], "1626639019435247": [48], "1638727302192255": [48], "1642353838656017": [48], "1643453621271585": [48], "1658104204669725": [48], "1662485779876221": [48], "1669812089421733": [48], "1682746046505721": [48], "1686298869637573": [48], "1688481990617362": [48], "1690389336617199": [48], "1691171280116985": [48], "1695663032921673": [48], "1699809983366070": [48], "1709048685481388": [48], "1712457316704754": [48], "1712827460605989": [48], "1719016742757524": [48], "1720716306077049": [48], "1731588874078275": [48], "1737929931793243": [48], "1742230705053471": [48], "1744646337710934": [48], "1750848466069991": [48], "1772504621686320": [48], "1793456012680375": [48], "1797142702056877": [48], "1797145955746037": [48], "1797367475778719": [48], "1800147823225056": [48], "1800236363852916": [48], "1800292312232821": [48], "1806220280793222": [48], "1808685369384027": [48], "1812018140268588": [48], "1832446933549908": [48], "1833926924520737": [48]}, "signatures_to_lineage": {"09a08691ce52952152f0e866a59f6261": 32, "38729c6374925585db28916b82a6f513": 48}, "signatures_to_name": {"09a08691ce52952152f0e866a59f6261": "NC_009665.1 Shewanella baltica OS185, complete genome", "38729c6374925585db28916b82a6f513": "NC_011663.1 Shewanella baltica OS223, complete genome"}} \ No newline at end of file diff --git a/tests/test_lca.py b/tests/test_lca.py index c2c67f3322..68a6029ffc 100644 --- a/tests/test_lca.py +++ b/tests/test_lca.py @@ -840,3 +840,28 @@ def test_gather_unknown_hashes(): assert '270.0 kbp 11.5% 21.4% Archaea; family novelFamily_I' in out assert '88.5% (2.1 Mbp) have no assignment.' in out + + +def test_gather_equiv_results(): + with utils.TempDirectory() as location: + query_sig = utils.get_test_data('47+63.fa.sig') + lca_db = utils.get_test_data('lca/47+63.lca.json') + + cmd = ['lca', 'gather', query_sig, lca_db, '-o', 'matches.csv'] + status, out, err = utils.runscript('sourmash', cmd, + in_directory=location) + + print(cmd) + print(out) + print(err) + + assert '2.7 Mbp 100.0%' in out + assert 'Shewanella baltica' in out + assert '(** 1 equal matches)' + assert ('OS223' in out) or ('OS185' in out) + + assert os.path.exists(lca_db) + + r = csv.DictReader(open(os.path.join(location, 'matches.csv'))) + row = next(r) + assert row['n_equal_matches'] == '1' From 151ab44d5f07b03c394c4c7c489185efd7fd5342 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 17 Feb 2018 21:38:57 -0800 Subject: [PATCH 23/34] make unassigned slightly nicer --- sourmash_lib/lca/command_gather.py | 2 +- tests/test_lca.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index e6b5336cc7..774fcd08c7 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -234,7 +234,7 @@ def gather_main(args): if found: print_results('') if f_unassigned: - print_results('{:.1f}% ({}) have no assignment.', f_unassigned*100, + print_results('{:.1f}% ({}) of hashes have no assignment.', f_unassigned*100, format_bp(est_bp)) else: print_results('Query is completely assigned.') diff --git a/tests/test_lca.py b/tests/test_lca.py index 68a6029ffc..4b2272b8c9 100644 --- a/tests/test_lca.py +++ b/tests/test_lca.py @@ -839,7 +839,7 @@ def test_gather_unknown_hashes(): print(err) assert '270.0 kbp 11.5% 21.4% Archaea; family novelFamily_I' in out - assert '88.5% (2.1 Mbp) have no assignment.' in out + assert '88.5% (2.1 Mbp) of hashes have no assignment.' in out def test_gather_equiv_results(): From e6bec205fd0666f63f35fac09e91942ce38e4955 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 07:41:09 -0800 Subject: [PATCH 24/34] update sourmash lca output --- sourmash_lib/lca/__main__.py | 39 +++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/sourmash_lib/lca/__main__.py b/sourmash_lib/lca/__main__.py index 9233500bfc..ccdc082db6 100644 --- a/sourmash_lib/lca/__main__.py +++ b/sourmash_lib/lca/__main__.py @@ -9,6 +9,23 @@ from .command_compare_csv import compare_csv from sourmash_lib.logging import set_quiet, error +usage=''' +sourmash lca [] - work with taxonomic information. + +** Commands can be: + +index - create LCA database +classify --db --query - classify genomes +gather - classify metagenomes +summarize --db --query - summarize mixture +rankinfo - database rank info +compare_csv - compare spreadsheets + +** Use '-h' to get subcommand-specific help, e.g. + +sourmash lca index -h +''' + def main(sysv_args): set_quiet(False) @@ -20,24 +37,14 @@ def main(sysv_args): 'compare_csv': compare_csv} parser = argparse.ArgumentParser( - description='lowest-common ancestor (LCA) utilities', - usage='''sourmash lca [] - -Commands can be: - -index - create LCA database -classify --db --query - classify genomes -summarize --db --query - summarize mixture -rankinfo - database rank info -compare_csv - compare spreadsheets + description='lowest-common ancestor (LCA) utilities', usage=usage) + parser.add_argument('lca_command', nargs='?') + args = parser.parse_args(sysv_args[0:1]) -Use '-h' to get subcommand-specific help, e.g. + if not args.lca_command: + print(usage) + sys.exit(1) -sourmash lca index -h -. -''') - parser.add_argument('lca_command') - args = parser.parse_args(sysv_args[0:1]) if args.lca_command not in commands: error('Unrecognized command: {}', args.lca_command) parser.print_help() From d376a07b70a6ca0c931d1c172732f2b61706fbd8 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 07:41:09 -0800 Subject: [PATCH 25/34] update sourmash lca output --- sourmash_lib/lca/__main__.py | 39 +++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/sourmash_lib/lca/__main__.py b/sourmash_lib/lca/__main__.py index 2a248e31ff..f97b5a0db9 100644 --- a/sourmash_lib/lca/__main__.py +++ b/sourmash_lib/lca/__main__.py @@ -9,6 +9,23 @@ from .command_compare_csv import compare_csv from sourmash_lib.logging import set_quiet, error +usage=''' +sourmash lca [] - work with taxonomic information. + +** Commands can be: + +index - create LCA database +classify --db --query - classify genomes +gather - classify metagenomes +summarize --db --query - summarize mixture +rankinfo - database rank info +compare_csv - compare spreadsheets + +** Use '-h' to get subcommand-specific help, e.g. + +sourmash lca index -h +''' + def main(sysv_args): set_quiet(False) @@ -19,24 +36,14 @@ def main(sysv_args): 'compare_csv': compare_csv} parser = argparse.ArgumentParser( - description='lowest-common ancestor (LCA) utilities', - usage='''sourmash lca [] - -Commands can be: - -index - create LCA database -classify --db --query - classify genomes -summarize --db --query - summarize mixture -rankinfo - database rank info -compare_csv - compare spreadsheets + description='lowest-common ancestor (LCA) utilities', usage=usage) + parser.add_argument('lca_command', nargs='?') + args = parser.parse_args(sysv_args[0:1]) -Use '-h' to get subcommand-specific help, e.g. + if not args.lca_command: + print(usage) + sys.exit(1) -sourmash lca index -h -. -''') - parser.add_argument('lca_command') - args = parser.parse_args(sysv_args[0:1]) if args.lca_command not in commands: error('Unrecognized command: {}', args.lca_command) parser.print_help() From acf11077cdba497d1e24dc0653a9d36eadf2f301 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 08:55:55 -0800 Subject: [PATCH 26/34] upgrade the documentation a bunch --- doc/command-line.md | 256 ++++++++++++++++++++++++++++++++++++--- doc/index.rst | 90 +++++++++++--- doc/tutorials-lca.md | 4 +- sourmash_lib/__main__.py | 61 ++++++---- 4 files changed, 349 insertions(+), 62 deletions(-) diff --git a/doc/command-line.md b/doc/command-line.md index b04c7dfd78..88fd9247a0 100644 --- a/doc/command-line.md +++ b/doc/command-line.md @@ -1,14 +1,14 @@ # Using sourmash from the command line +From the command line, sourmash can be used to compute +[MinHash sketches][0] from DNA sequences, compare them to each other, +and plot the results; these sketches are saved into "signature files". +These signatures allow you to estimate sequence similarity quickly and +accurately in large collections, among other capabilities. -From the command line, sourmash can be used to compute [MinHash sketches][0] from DNA -sequences, compare them to each other, and plot the results. This -allows you to estimate sequence similarity quickly and accurately. - -Please see the [mash software][1] - and the [mash paper (Ondov et al., 2016)][2] -for background -information on how and why MinHash sketches work. +Please see the [mash software][1] and the +[mash paper (Ondov et al., 2016)][2] for background information on +how and why MinHash sketches work. ______ @@ -18,7 +18,6 @@ taken. ## An example - Grab three bacterial genomes from NCBI: ``` curl -L -O ftp://ftp.ncbi.nlm.nih.gov/genomes/refseq/bacteria/Escherichia_coli/reference/GCF_000005845.2_ASM584v2/GCF_000005845.2_ASM584v2_genomic.fna.gz @@ -43,17 +42,46 @@ This will output two files, `cmp.dendro.png` and `cmp.matrix.png`, containing a clustering & dendrogram of the sequences, as well as a similarity matrix and heatmap. -## The `sourmash` command and its subcommands +![E. coli comparison plot](_static/cmp.dendro.png) +![E. coli comparison plot](_static/cmp.matrix.png) +## The `sourmash` command and its subcommands To get a list of subcommands, run `sourmash` without any arguments. -There are three main subcommands: `compute`, `compare`, and `plot`. +There are five main subcommands: `compute`, `compare`, `plot`, +`search`, and `gather`. See [the tutorial](tutorials.html) for a +walkthrough of these commands. -### `sourmash compute` +* `compute` creates signatures. +* `compare` compares signatures and builds a distance matrix. +* `plot` plots distance matrices created by `compare`. +* `search` finds matches to a query signature in a collection of signatures. +* `gather` finds non-overlapping matches to a metagenome in a collection of signatures. +There are also a number of commands that work with taxonomic +information; these are grouped under the `sourmash lca` +subcommand. See [the LCA tutorial](tutorials-lca.html) for a +walkthrough of these commands. + +* `lca classify` classifies many signatures against an LCA database. +* `lca summarize` summarizes the content of a metagenome using an LCA database. +* `lca gather` finds non-overlapping matches to a metagenome in an LCA database. +* `lca index` creates a database for use with LCA subcommands. +* `lca rankinfo` summarizes the content of a database. +* `lca compare_csv` compares lineage spreadsheets, e.g. those output by `lca classify`. + +Finally, there are a number of utility and information commands: + +* `info` shows version and software information. +* `index` indexes many signatures using a Sequence Bloom Tree (SBT). +* `sbt_combine` combines multiple SBTs. +* `categorize` is an experimental command to categorize many signatures. +* `watch` is an experimental command to classify a stream of sequencing data. + +### `sourmash compute` -The `compute` subcommand computes and saves MinHash sketches for +The `compute` subcommand computes and saves signatures for each sequence in one or more sequence files. It takes as input FASTA or FASTQ files, and these files can be uncompressed or compressed with gzip or bzip2. The output will be one or more JSON signature files @@ -68,6 +96,12 @@ Optional arguments: --ksizes K1[,K2,K3] -- one or more k-mer sizes to use; default is 31 --force -- recompute existing signatures; convert non-DNA characters to N --output -- save all the signatures to this file; can be '-' for stdout. +--track-abundance -- compute and save k-mer abundances. +--name-from-first -- name the signature based on the first sequence in the file +--singleton -- instead of computing a single signature for each input file, + compute one for each sequence +--merged -- compute a single signature for all of the input files, + naming it ``` ### `sourmash compare` @@ -78,7 +112,9 @@ The `compare` subcommand compares one or more signature files is a text display of a similarity matrix where each entry `[i, j]` contains the estimated Jaccard index between input signature `i` and input signature `j`. The output matrix can be saved to a file -with `--output` and used with the `sourmash plot` subcommand. +with `--output` and used with the `sourmash plot` subcommand (or loaded +with `numpy.load(...)`. Using `--csv` will output a CSV file that can +be loaded into other languages than Python, such as R. Usage: ``` @@ -93,7 +129,6 @@ Options: ### `sourmash plot` - The `plot` subcommand produces two plots -- a dendrogram and a dendrogram+matrix -- from a distance matrix computed by `sourmash compare --output `. The default output is two PNG files. @@ -109,16 +144,199 @@ Options: --labels -- display the signature names (by default, the filenames) on the plot --indices -- turn off index display on the plot. --vmax -- maximum value (default 1.0) for heatmap. ---vmin -- minimum value (deafult 0.0) for heatmap. +--vmin -- minimum value (default 0.0) for heatmap. --subsample= -- plot a maximum of samples, randomly chosen. --subsample-seed= -- seed for pseudorandom number generator. ``` -Example figures: - +Example output: + +![An E. coli comparison plot](_static/ecoli_cmp.matrix.png) + +### `sourmash search` + +The `search` subcommand searches a collection of signatures or SBTs for +matches to the query signature. It can search for matches with either +high [Jaccard similarity](https://en.wikipedia.org/wiki/Jaccard_index) +or containment; the default is to use Jaccard similarity, unless +`--containment` if specified. `-o/--output` will create a CSV file +containing the matches. + +`search` will load all of provided signatures into memory, which can +be slow and somewhat memory intensive for large collections. You can +use `sourmash index` to create a Sequence Bloom Tree (SBT) that can +be quickly searched on disk; this is [the same format in which we provide +GenBank and other databases](databases.html). + +Usage: +``` +sourmash search query.sig [ list of signatures or SBTs ] +``` + +Example output: + +``` +49 matches; showing first 20: +similarity match +---------- ----- + 75.4% NZ_JMGW01000001.1 Escherichia coli 1-176-05_S4_C2 e117605... + 72.2% NZ_GG774190.1 Escherichia coli MS 196-1 Scfld2538, whole ... + 71.4% NZ_JMGU01000001.1 Escherichia coli 2-011-08_S3_C2 e201108... + 70.1% NZ_JHRU01000001.1 Escherichia coli strain 100854 100854_1... + 69.0% NZ_JH659569.1 Escherichia coli M919 supercont2.1, whole g... +... +``` + +### `sourmash gather` + +The `gather` subcommand finds all non-overlapping matches to the +query. This is specifically meant for metagenome and genome bin +analysis. (See [Classifying Signatures](classifying-signatures.html) +for more information on the different approaches that can be used +here.) + +If the input signature was computed with `--track-abundance`, output +will be abundance weighted (unless `--ignore-abundances` is +specified). `-o/--output` will create a CSV file containing the +matches. + +`gather`, like `search`, will load all of provided signatures into +memory. You can use `sourmash index` to create a Sequence Bloom Tree +(SBT) that can be quickly searched on disk; this is +[the same format in which we provide GenBank and other databases](databases.html). + +Usage: +``` +sourmash gather query.sig [ list of signatures or SBTs ] +``` + +Example output: +``` +overlap p_query p_match +--------- ------- -------- +1.4 Mbp 11.0% 58.0% JANA01000001.1 Fusobacterium sp. OBRC... +1.0 Mbp 7.7% 25.9% CP001957.1 Haloferax volcanii DS2 pla... +0.9 Mbp 7.4% 11.8% BA000019.2 Nostoc sp. PCC 7120 DNA, c... +0.7 Mbp 5.9% 23.0% FOVK01000036.1 Proteiniclasticum rumi... +0.7 Mbp 5.3% 17.6% AE017285.1 Desulfovibrio vulgaris sub... +``` + +Note: + +Use `sourmash gather` to classify a metagenome against a collection of +genomes with no (or incomplete) taxonomic information. Use `sourmash +lca summarize` and `sourmash lca gather` to classify a metagenome +using a collection of genomes with taxonomic information. + +## `sourmash lca` subcommands + +These commands use LCA databases (created with `index`, below, or +prepared databases such as +[genbank-k31.lca.json.gz, from the LCA tutorial](tutorials-lca.html). + +### `sourmash lca classify` + +`sourmash lca classify` classifies one or more signatures using the given +list of LCA DBs. It is meant for classifying metagenome-assembled genome +bins (MAGs) and single-cell genomes (SAGs). + +Usage: + +``` +sourmash lca --query query.sig [query2.sig ...] --db [ ...] +``` + +Example output: + +``` +ID,status,superkingdom,phylum,class,order,family,genus,species +"NC_009665.1 Shewanella baltica OS185, complete genome",found,Bacteria,Proteobacteria,Gammaproteobacteria,Alteromonadales,Shewanellaceae,Shewanella,Shewanella baltica +``` + +### `sourmash lca summarize` + +`sourmash lca summarize` produces a Kraken-style summary of the +combined contents of the given query signatures. It is meant for +exploring metagenomes and metagenome-assembled genome bins. + +Usage: + +``` +sourmash lca summarize --query query.sig [query2.sig ...] + --db [ ...] +``` + +Example output: + +``` +100.0% 792 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella;Shewanella baltica +100.0% 792 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae;Shewanella +100.0% 792 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales;Shewanellaceae +100.0% 792 Bacteria;Proteobacteria;Gammaproteobacteria;Alteromonadales +100.0% 792 Bacteria;Proteobacteria;Gammaproteobacteria +100.0% 792 Bacteria;Proteobacteria +100.0% 792 Bacteria +``` + +### `sourmash lca gather` + +The `sourmash lca gather` command classifies finds all non-overlapping +matches to the query, similar to the `sourmash gather` command. This +is specifically meant for metagenome and genome bin analysis. (See +[Classifying Signatures](classifying-signatures.html) for more +information on the different approaches that can be used here.) + +Usage: + +``` +sourmash lca gather query.sig [ ...] +``` + +Example output: + +``` +overlap p_query p_match +--------- ------- -------- +1.8 Mbp 14.6% 9.1% Fusobacterium nucleatum +1.0 Mbp 7.8% 16.3% Proteiniclasticum ruminis +1.0 Mbp 7.7% 25.9% Haloferax volcanii +0.9 Mbp 7.4% 11.8% Nostoc sp. PCC 7120 +0.9 Mbp 7.0% 5.8% Shewanella baltica +0.8 Mbp 6.0% 8.6% Desulfovibrio vulgaris +0.6 Mbp 4.9% 12.6% Thermus thermophilus +``` + +### `sourmash lca index` + +The `sourmash lca index` command creates an LCA database from +a lineage spreadsheet and a collection of signatures. This can be used +to create LCA databases from private collections of genomes, and can +also be used to create databases for e.g. subsets of GenBank. + +See [the `sourmash lca` tutorial](tutorials-lca.html) and the blog +post +[Why are taxonomic assignments so different for Tara bins?](http://ivory.idyll.org/blog/2017-taxonomic-disagreements-in-tara-mags.html) +for some use cases. + +If you are interested in preparing lineage spreadsheets from GenBank +genomes (or building off of NCBI taxonomies more generally), please +see +[the NCBI lineage repository](https://github.com/dib-lab/2018-ncbi-lineages). + +### `sourmash lca rankinfo` + +The `sourmash lca rankinfo` command displays k-mer specificity +information for one or more LCA databases. See the blog post +[How specific are k-mers for taxonomic assignment of microbes, anyway?](http://ivory.idyll.org/blog/2017-how-specific-kmers.html) for example output. - +### `sourmash lca compare_csv` +The `sourmash lca compare_csv` command compares two lineage +spreadsheets (such as those output by `sourmash lca classify` or taken +as input by `sourmash lca index`) and summarizes their +agreement/disagreement. Please see the blog post +[Why are taxonomic assignments so different for Tara bins?](http://ivory.idyll.org/blog/2017-taxonomic-disagreements-in-tara-mags.html) +for an example use case. [0]:https://en.wikipedia.org/wiki/MinHash [1]:http://mash.readthedocs.io/en/latest/__ diff --git a/doc/index.rst b/doc/index.rst index 4ac686a11c..5ee186b42b 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,8 +1,3 @@ -.. sourmash documentation master file, created by - sphinx-quickstart on Sat Jun 4 16:35:43 2016. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - Welcome to sourmash! ==================== @@ -13,39 +8,61 @@ This allows you to estimate sequence similarity between even very large data sets quickly and accurately. sourmash can also be used to quickly search large databases of genomes -for matches to query genomes and metagenomes; see `our list of available -databases `__. +for matches to query genomes and metagenomes; see `our list of +available databases `__. + +sourmash also includes k-mer based taxonomic exploration and +classification routines for genome and metagenome analysis. These +routines can use the NCBI taxonomy but do not depend on it in any way. Please see the `mash `__ software and the `mash paper (Ondov et al., 2016) `__ for background information on how and why MinHash sketches work. +We have two tutorials available: one on `genome and metagenome searching `__, and one on `taxonomic analysis `__. + ---- To use sourmash, you must be comfortable with the UNIX command line; programmers may find the Python library and API useful as well. -In brief, +sourmash in brief +----------------- + +sourmash uses MinHash sketching to create "signatures", compressed +representations of DNA/RNA sequence. These signatures can then +be stored, searched, explored, and taxonomically annotated. * ``sourmash`` provides command line utilities for creating, comparing, - and searching MinHash sketches, as well as plotting and clustering - sketches by distance (see `the command-line docs `__). + and searching signatures, as well as plotting and clustering + signatures by similarity (see `the command-line docs `__). + +* ``sourmash`` can **search very large collections of signatures** to find matches + to a query. -* ``sourmash`` supports saving, loading, and communication of MinHash - sketches via `JSON `__, a ~human-readable & +* ``sourmash`` can also **identify parts of metagenomes that match known genomes**, + and can **taxonomically classify genomes and metagenomes** against databases + of known species. + +* ``sourmash`` can be used to **search databases of public sequences** + (e.g. all of GenBank) and can also be used to create and search databases + of **private sequencing data**. + +* ``sourmash`` supports saving, loading, and communication of signatures + via `JSON `__, a ~human-readable & editable format. -* ``sourmash`` also has a simple Python API for interacting with sketches, - including support for online updating and querying of sketches +* ``sourmash`` also has a simple Python API for interacting with signatures, + including support for online updating and querying of signatures (see `the API docs `__). -* ``sourmash`` isn't terribly slow, and relies on an underlying CPython +* ``sourmash`` isn't terribly slow, and relies on an underlying Cython module. * ``sourmash`` is developed `on GitHub - `__ and is freely and openly - available under the BSD 3-clause license. Please see `the README + `__ and is **freely and openly + available** under the BSD 3-clause license. Please see `the README `__ for more information on development, support, and contributing. @@ -56,6 +73,45 @@ and experiment with it yourself `interactively with a binder `__ at `mybinder.org `__. +Memory and speed +---------------- + +sourmash has relatively small disk and memory requirements compared to +many other software programs used for genome search and taxonomic +classification. + +First, `mash` beats sourmash in speed and memory, so if you can use mash, +more power to you :) + +`sourmash search` and `sourmash gather` can be used to search all +genbank microbial genomes ([using our prepared +databases](databases.html)) with about 20 GB of disk and in under 1 GB +of RAM. Typically a search for a single genome takes about 30 seconds +on a laptop. + +`sourmash lca` can be used to search/classify against all genbank +microbial genomes with about 200 MB of disk space and about 10 GB of +RAM. Typically a metagenome classification takes about 1 minute on a +laptop. + +Limitations +----------- + +**sourmash cannot find matches across large evolutionary distances.** + +sourmash seems to work well to search and compare data sets for +matches at the species and genus level, but does not have much +sensitivity beyond that. (It seems to be particularly good at +strain-level analysis.) You should use protein-based analyses +to do searches across larger evolutionary distances. + +**sourmash signatures can be very large.** + +We use a modification of the MinHash sketch approach that allows us +to search the contents of metagenomes and large genomes with no loss +of sensitivity, but there is a tradeoff: there is no guaranteed limit +to signature size when using 'scaled' signatures. + Contents: --------- diff --git a/doc/tutorials-lca.md b/doc/tutorials-lca.md index 1dc0a71e38..b3d0b2617d 100644 --- a/doc/tutorials-lca.md +++ b/doc/tutorials-lca.md @@ -9,9 +9,9 @@ links and details. (These `sourmash lca classify` and `sourmash lca summarize` steps require about 4 GB of RAM when using the genbank database, as below.) -First, install sourmash from the LCA branch: +First, install sourmash 2.0a4 or later. ``` -pip install -U https://github.com/dib-lab/sourmash/archive/add/lca.zip +pip install -U https://github.com/dib-lab/sourmash/archive/master.zip ``` Next, download a genbank LCA database for k=31: diff --git a/sourmash_lib/__main__.py b/sourmash_lib/__main__.py index 7fa278adbf..e2f54632f5 100644 --- a/sourmash_lib/__main__.py +++ b/sourmash_lib/__main__.py @@ -12,51 +12,64 @@ plot, watch, info, storage) from .lca import main as lca_main +usage=''' +sourmash [] -def main(): - set_quiet(False) - - commands = {'search': search, 'compute': compute, - 'compare': compare, 'plot': plot, - 'import_csv': import_csv, 'dump': dump, - 'index': index, - 'categorize': categorize, 'gather': gather, - 'watch': watch, - 'sbt_combine': sbt_combine, 'info': info, - 'storage': storage, - 'lca': lca_main} - parser = argparse.ArgumentParser( - description='work with compressed sequence representations', - usage='''sourmash [] - -Commands can be: +** Commands include: compute Compute MinHash signatures for sequences in files. compare Compute similarity matrix for multiple signatures. search Search a signature against a list of signatures. plot Plot a distance matrix made by 'compare'. +gather Search a metagenome signature for multiple + non-overlapping matches. -Sequence Bloom Tree (SBT) utilities: +** Taxonomic classification utilities: + + Run 'sourmash lca' for the taxonomic classification routines. + +** Sequence Bloom Tree (SBT) utilities: index Index a collection of signatures for fast searching. sbt_combine Combine multiple SBTs into a new one. categorize Identify best matches for many signatures using an SBT. -gather Search a metagenome signature for multiple - non-overlapping matches in the SBT. watch Classify a stream of sequences. +** Other information: + info Sourmash version and other information. Use '-h' to get subcommand-specific help, e.g. sourmash compute -h -. -''') - parser.add_argument('command') + +** Documentation is available at https://sourmash.readthedocs.io/ +''' + +def main(): + set_quiet(False) + + commands = {'search': search, 'compute': compute, + 'compare': compare, 'plot': plot, + 'import_csv': import_csv, 'dump': dump, + 'index': index, + 'categorize': categorize, 'gather': gather, + 'watch': watch, + 'sbt_combine': sbt_combine, 'info': info, + 'storage': storage, + 'lca': lca_main} + parser = argparse.ArgumentParser( + description='work with compressed sequence representations') + parser.add_argument('command', nargs='?') args = parser.parse_args(sys.argv[1:2]) + + if not args.command: + print(usage) + sys.exit(1) + if args.command not in commands: error('Unrecognized command') - parser.print_help() + print(usage) sys.exit(1) cmd = commands.get(args.command) From 5de82551308fad40d5884b7f56f962ad2f23b1f9 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 09:08:13 -0800 Subject: [PATCH 27/34] cleanup foo --- doc/command-line.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/command-line.md b/doc/command-line.md index 88fd9247a0..43c685170f 100644 --- a/doc/command-line.md +++ b/doc/command-line.md @@ -42,8 +42,9 @@ This will output two files, `cmp.dendro.png` and `cmp.matrix.png`, containing a clustering & dendrogram of the sequences, as well as a similarity matrix and heatmap. -![E. coli comparison plot](_static/cmp.dendro.png) -![E. coli comparison plot](_static/cmp.matrix.png) +Matrix: + +![Matrix](_static/cmp.matrix.png) ## The `sourmash` command and its subcommands @@ -159,7 +160,7 @@ The `search` subcommand searches a collection of signatures or SBTs for matches to the query signature. It can search for matches with either high [Jaccard similarity](https://en.wikipedia.org/wiki/Jaccard_index) or containment; the default is to use Jaccard similarity, unless -`--containment` if specified. `-o/--output` will create a CSV file +`--containment` is specified. `-o/--output` will create a CSV file containing the matches. `search` will load all of provided signatures into memory, which can From b10b49050f9e9b215ff9f710e184597d1760c784 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 09:37:15 -0800 Subject: [PATCH 28/34] address @taylorreiter comments --- doc/classifying-signatures.md | 17 ++++++++--------- doc/command-line.md | 4 ++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/doc/classifying-signatures.md b/doc/classifying-signatures.md index e1702a825b..63b92dfed9 100644 --- a/doc/classifying-signatures.md +++ b/doc/classifying-signatures.md @@ -41,15 +41,14 @@ question to ask is the reverse: **what genomes are in my metagenome?** We have implemented two algorithms in sourmash to do this. -One, approaches based on lowest common ancestor ("LCA"), uses -taxonomic information from e.g. GenBank to classify individual k-mers, -and then infers taxonomic distributions of metagenome contents from -the presence of these individual k-mers. (This is the approach -pioneered by [Kraken](https://ccb.jhu.edu/software/kraken/) and many -other tools.) `sourmash lca` can be used to classify individual -genome bins with `classify`, or summarize metagenome taxonomy with -`summarize`. The [sourmash lca -tutorial](http://sourmash.readthedocs.io/en/latest/tutorials-lca.html) +One algorithm uses taxonomic information from e.g. GenBank to classify +individual k-mers, and then infers taxonomic distributions of +metagenome contents from the presence of these individual +k-mers. (This is the approach pioneered by +[Kraken](https://ccb.jhu.edu/software/kraken/) and many other tools.) +`sourmash lca` can be used to classify individual genome bins with +`classify`, or summarize metagenome taxonomy with `summarize`. The +[sourmash lca tutorial](http://sourmash.readthedocs.io/en/latest/tutorials-lca.html) shows how to use the `lca classify` and `summarize` commands, and also provides guidance on building your own database. diff --git a/doc/command-line.md b/doc/command-line.md index 43c685170f..46d832aee4 100644 --- a/doc/command-line.md +++ b/doc/command-line.md @@ -231,7 +231,7 @@ using a collection of genomes with taxonomic information. ## `sourmash lca` subcommands -These commands use LCA databases (created with `index`, below, or +These commands use LCA databases (created with `lca index`, below, or prepared databases such as [genbank-k31.lca.json.gz, from the LCA tutorial](tutorials-lca.html). @@ -281,7 +281,7 @@ Example output: ### `sourmash lca gather` -The `sourmash lca gather` command classifies finds all non-overlapping +The `sourmash lca gather` command finds all non-overlapping matches to the query, similar to the `sourmash gather` command. This is specifically meant for metagenome and genome bin analysis. (See [Classifying Signatures](classifying-signatures.html) for more From be3660de4f26970a0aa0e9445f4735f3cb2dffb0 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 09:50:14 -0800 Subject: [PATCH 29/34] link to LCA databases --- doc/databases.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/doc/databases.md b/doc/databases.md index 747bd1562d..54cb44159a 100644 --- a/doc/databases.md +++ b/doc/databases.md @@ -1,9 +1,9 @@ # Prepared search databases -## RefSeq microbial genomes +## RefSeq microbial genomes - SBT -These database are formatted for use with `sourmash sbt_search` and -`sourmash sbt_gather`. +These database are formatted for use with `sourmash search` and +`sourmash gather`. Approximately 60,000 microbial genomes (including viral and fungal) from NCBI RefSeq. @@ -12,10 +12,10 @@ from NCBI RefSeq. * [RefSeq k=31, 2017.05.09][1] - 3.5 GB * [RefSeq k=51, 2017.05.09][2] - 3.5 GB -## Genbank microbial genomes +## Genbank microbial genomes - SBT -These database are formatted for use with `sourmash sbt_search` and -`sourmash sbt_gather`. +These database are formatted for use with `sourmash search` and +`sourmash gather`. Approximately 100,000 microbial genomes (including viral and fungal) from NCBI Genbank. @@ -49,3 +49,14 @@ sourmash compute -k 21,31,51 \ [3]:https://s3-us-west-1.amazonaws.com/spacegraphcats.ucdavis.edu/microbe-genbank-sbt-k21-2017.05.09.tar.gz [4]:https://s3-us-west-1.amazonaws.com/spacegraphcats.ucdavis.edu/microbe-genbank-sbt-k31-2017.05.09.tar.gz [5]:https://s3-us-west-1.amazonaws.com/spacegraphcats.ucdavis.edu/microbe-genbank-sbt-k51-2017.05.09.tar.gz + +## Genbank LCA Database + +These databases are formatted for use with `sourmash lca`. + +Approximately 87,000 microbial genomes (including viral and fungal) +from NCBI Genbank. + +* [Genbank k=21, 2017.11.07](https://osf.io/s3jx8/download), 105 MB +* [Genbank k=31, 2017.11.07](https://osf.io/zskb9/download), 118 MB +* [Genbank k=51, 2017.11.07](https://osf.io/md2nt/download), 123 MB From 131e3b4f24a5306182ef0ad4f349ff4be302a264 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 09:54:36 -0800 Subject: [PATCH 30/34] provide construction details --- doc/databases.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/databases.md b/doc/databases.md index 54cb44159a..5dd629c64f 100644 --- a/doc/databases.md +++ b/doc/databases.md @@ -60,3 +60,17 @@ from NCBI Genbank. * [Genbank k=21, 2017.11.07](https://osf.io/s3jx8/download), 105 MB * [Genbank k=31, 2017.11.07](https://osf.io/zskb9/download), 118 MB * [Genbank k=51, 2017.11.07](https://osf.io/md2nt/download), 123 MB + +### Details + +The above LCA databases were calculated as follows: + +``` +sourmash lca index genbank-genomes-taxonomy.2017.05.29.csv \ + genbank-k21.lca.json.gz -k 21 --scaled=10000 \ + -f --traverse-directory .sbt.genbank-k21 --split-identifiers +``` + +See +[github.com/dib-lab/2018-ncbi-lineages](https://github.com/dib-lab/2018-ncbi-lineages) +for information on preparing the genbank-genomes-taxonomy file. From fea8b7d41b26928f4cb5965cd5c9fa69c742d0f6 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 10:28:55 -0800 Subject: [PATCH 31/34] fix reST in updated docs --- doc/index.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/index.rst b/doc/index.rst index 3105ae463e..2f3e201ef9 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -86,16 +86,16 @@ sourmash has relatively small disk and memory requirements compared to many other software programs used for genome search and taxonomic classification. -First, `mash` beats sourmash in speed and memory, so if you can use mash, +First, ``mash`` beats sourmash in speed and memory, so if you can use mash, more power to you :) -`sourmash search` and `sourmash gather` can be used to search all -genbank microbial genomes ([using our prepared -databases](databases.html)) with about 20 GB of disk and in under 1 GB +``sourmash search`` and ``sourmash gather`` can be used to search all +genbank microbial genomes (`using our prepared +databases `__) with about 20 GB of disk and in under 1 GB of RAM. Typically a search for a single genome takes about 30 seconds on a laptop. -`sourmash lca` can be used to search/classify against all genbank +``sourmash lca`` can be used to search/classify against all genbank microbial genomes with about 200 MB of disk space and about 10 GB of RAM. Typically a metagenome classification takes about 1 minute on a laptop. From 774856f2dbf5d21caa074f8e8e8f996876f13e4c Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 19:46:11 -0800 Subject: [PATCH 32/34] fix typo --- doc/command-line.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/command-line.md b/doc/command-line.md index 46d832aee4..18eeec79c2 100644 --- a/doc/command-line.md +++ b/doc/command-line.md @@ -233,7 +233,7 @@ using a collection of genomes with taxonomic information. These commands use LCA databases (created with `lca index`, below, or prepared databases such as -[genbank-k31.lca.json.gz, from the LCA tutorial](tutorials-lca.html). +[genbank-k31.lca.json.gz](databases.html)). ### `sourmash lca classify` From aae3c49013331ea2a3838edcac27b1f49674af66 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 18 Feb 2018 19:49:11 -0800 Subject: [PATCH 33/34] catch parse error -> question if it's a valid LCA DB --- sourmash_lib/lca/lca_utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sourmash_lib/lca/lca_utils.py b/sourmash_lib/lca/lca_utils.py index fcdca0dc27..ffe8a8e93c 100644 --- a/sourmash_lib/lca/lca_utils.py +++ b/sourmash_lib/lca/lca_utils.py @@ -138,7 +138,10 @@ def load(self, db_name): xopen = gzip.open with xopen(db_name, 'rt') as fp: - load_d = json.load(fp) + try: + load_d = json.load(fp) + except json.decoder.JSONDecodeError: + raise ValueError("cannot parse database file '{}'; is it a valid LCA db?".format(db_name)) version = load_d['version'] assert version == '1.0' From 5407bd19771bdb1e91e7ddb8ecb9ce96ad7d3b64 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Fri, 23 Feb 2018 06:12:22 -0800 Subject: [PATCH 34/34] add in consistent display by name of match for both sourmash gather and lca gatherc --- sourmash_lib/lca/command_gather.py | 20 +++++++++++++------- sourmash_lib/search.py | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/sourmash_lib/lca/command_gather.py b/sourmash_lib/lca/command_gather.py index 774fcd08c7..dee8be128b 100644 --- a/sourmash_lib/lca/command_gather.py +++ b/sourmash_lib/lca/command_gather.py @@ -119,16 +119,22 @@ def gather_signature(query_sig, dblist, ignore_abundance): for (md5, sigsize) in md5_set: counts[(md5, sigsize)] += 1 - # find the most abundant assignment + # collect the most abundant assignments common_iter = iter(counts.most_common()) - (top_md5, top_sigsize), top_count = next(common_iter) + best_list = [] + (md5, sigsize), top_count = next(common_iter) - equiv_counts = 0 - for (_, _), count in common_iter: - if count == top_count: - equiv_counts += 1 - else: + best_list.append((md5_to_name[md5], md5, sigsize)) + for (md5, sigsize), count in common_iter: + if count != top_count: break + best_list.append((md5_to_name[md5], md5, sigsize)) + + # sort on name and pick the top (for consistency). + best_list.sort() + _, top_md5, top_sigsize = best_list[0] + + equiv_counts = len(best_list) - 1 # now, remove from query mins. intersect_mins = set() diff --git a/sourmash_lib/search.py b/sourmash_lib/search.py index 9f5f81f972..d858dcb30e 100644 --- a/sourmash_lib/search.py +++ b/sourmash_lib/search.py @@ -127,7 +127,7 @@ def find_best(dblist, query): return None, None, None # take the best result - results.sort(key=lambda x: (-x[0], x[1].md5sum())) # reverse sort on similarity + results.sort(key=lambda x: (-x[0], x[1].name())) # reverse sort on similarity, and then on name best_similarity, best_leaf = results[0] return best_similarity, best_leaf, filename