From 83797c99815146698872fc0b6bdf66288f65d6a7 Mon Sep 17 00:00:00 2001 From: Tamer Mansour Date: Thu, 19 Feb 2015 13:02:54 -0600 Subject: [PATCH 01/83] Update do.sh --- examples/stamps/do.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/stamps/do.sh b/examples/stamps/do.sh index d62a7fea32..4f5ae1b92e 100644 --- a/examples/stamps/do.sh +++ b/examples/stamps/do.sh @@ -10,7 +10,7 @@ load-into-counting.py -x 1e8 -k 20 stamps-reads.ct \ abundance-dist.py stamps-reads.ct ../../data/stamps-reads.fa.gz \ stamps-reads.hist normalize-by-median.py -k 20 -C 10 -x 1e8 ../../data/stamps-reads.fa.gz \ - --savehash stamps-dn.ct + --savetable stamps-dn.ct abundance-dist.py stamps-dn.ct stamps-reads.fa.gz.keep stamps-dn.hist do-partition.py -k 32 -x 1e8 -s 1e4 -T 8 stamps-part \ ../../data/stamps-reads.fa.gz @@ -27,7 +27,7 @@ abundance-dist.py stamps-part.g1.ct stamps-part.group0001.fa stamps-part.g1.hist filter-abund.py stamps-dn.ct stamps-reads.fa.gz.keep normalize-by-median.py -x 1e8 -k 20 -C 10 stamps-reads.fa.gz.keep.abundfilt \ - --savehash stamps-dn3.ct + --savetable stamps-dn3.ct abundance-dist.py stamps-dn3.ct stamps-reads.fa.gz.keep.abundfilt.keep \ stamps-dn3.hist From a039d495cab915b3a0f779d5876aab788a5b9db1 Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Thu, 19 Feb 2015 15:34:09 -0500 Subject: [PATCH 02/83] automate checking of do.sh script --- examples/stamps/do.sh | 0 jenkins-build.sh | 2 ++ 2 files changed, 2 insertions(+) mode change 100644 => 100755 examples/stamps/do.sh diff --git a/examples/stamps/do.sh b/examples/stamps/do.sh old mode 100644 new mode 100755 diff --git a/jenkins-build.sh b/jenkins-build.sh index 20e30f787f..3ad78f9ae5 100755 --- a/jenkins-build.sh +++ b/jenkins-build.sh @@ -64,3 +64,5 @@ if type sloccount >/dev/null 2>&1 then make sloccount.sc fi + +bash -ex 'cd examples/stamps/; ./do.sh' From 3a0636ee8174b287b5e2f4be6fb1f0145aef506b Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Thu, 19 Feb 2015 17:24:26 -0500 Subject: [PATCH 03/83] add -c to the bash command --- jenkins-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jenkins-build.sh b/jenkins-build.sh index 3ad78f9ae5..ba1984713c 100755 --- a/jenkins-build.sh +++ b/jenkins-build.sh @@ -65,4 +65,4 @@ then make sloccount.sc fi -bash -ex 'cd examples/stamps/; ./do.sh' +bash -ex -c 'cd examples/stamps/; ./do.sh' From b6c37d66755a6d7fa940ae10f55b78cbc387c43f Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Fri, 20 Feb 2015 17:40:30 -0500 Subject: [PATCH 04/83] edit the ChangeLog --- ChangeLog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 8f8039c2f1..bf64978fa4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1648,3 +1648,9 @@ project to conform to the standard layout * It is now easy to calculate code coverage. * setup.py is now PEP8 compliant + +2015-02-20 Tamer A. Mansour + +* In the do.sh script, the old argument --savehash has been updated to +--savetable + From cdc608bffdaedcbbcdd4731c2e93fb8996da6945 Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Fri, 20 Feb 2015 17:46:44 -0500 Subject: [PATCH 05/83] correct ChangeLog --- ChangeLog | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index bf64978fa4..c0bd779623 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-02-20 Tamer A. Mansour + + * In the do.sh script, the old argument --savehash has been updated to +--savetable + 2015-02-20 Titus Brown * doc/dev/scripts-and-sandbox.txt: policies for sandbox/ and scripts/ @@ -1649,8 +1654,3 @@ project to conform to the standard layout * setup.py is now PEP8 compliant -2015-02-20 Tamer A. Mansour - -* In the do.sh script, the old argument --savehash has been updated to ---savetable - From 681513e89d549916ed9f0e53e39e6ee99ecf0e9b Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Fri, 20 Feb 2015 20:25:21 -0500 Subject: [PATCH 06/83] add error message --- ChangeLog | 1 - jenkins-build.sh | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c0bd779623..5fa6f30671 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1653,4 +1653,3 @@ project to conform to the standard layout * It is now easy to calculate code coverage. * setup.py is now PEP8 compliant - diff --git a/jenkins-build.sh b/jenkins-build.sh index ba1984713c..6bf9635292 100755 --- a/jenkins-build.sh +++ b/jenkins-build.sh @@ -65,4 +65,5 @@ then make sloccount.sc fi -bash -ex -c 'cd examples/stamps/; ./do.sh' +bash -ex -c 'cd examples/stamps/; ./do.sh' || { echo examples/stamps/do.sh no longer runs; /bin/false } + From f82079a90dc74d79fe4e5d6badd3c5f5ec33dbd4 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 21 Feb 2015 10:18:30 -0500 Subject: [PATCH 07/83] initial fix for broken casava format handling in split-paired-reads --- khmer/utils.py | 34 ++++++++++++++++++++++++++++++++++ scripts/split-paired-reads.py | 35 +++++++++++++++++++++++++++-------- tests/test_functions.py | 26 +++++++++++++++++++++++++- tests/test_scripts.py | 17 +++++++++++++++++ 4 files changed, 103 insertions(+), 9 deletions(-) diff --git a/khmer/utils.py b/khmer/utils.py index d2d6b862da..6954d35fb6 100644 --- a/khmer/utils.py +++ b/khmer/utils.py @@ -52,6 +52,40 @@ def check_is_pair(record1, record2): return False +def check_is_left(name): + """ + Checks if the name belongs to a 'left' sequence (/1). Returns True or + False. + + Handles both Casava formats: seq/1 and 'seq::... 1::...' + """ + if ' ' in name: # handle '@name 1:rst' + name, rest = name.split(' ', 1) + if rest.startswith('1:'): + return True + elif name.endswith('/1'): # handle name/1 + return True + + return False + + +def check_is_right(name): + """ + Checks if the name belongs to a 'right' sequence (/2). Returns True or + False. + + Handles both Casava formats: seq/2 and 'seq::... 2::...' + """ + if ' ' in name: # handle '@name 2:rst' + name, rest = name.split(' ', 1) + if rest.startswith('2:'): + return True + elif name.endswith('/2'): # handle name/2 + return True + + return False + + def broken_paired_reader(screed_iter, min_length=None, force_single=False): """ A generator that yields singletons and pairs from a stream of FASTA/FASTQ diff --git a/scripts/split-paired-reads.py b/scripts/split-paired-reads.py index 56daf0ab3d..636a9189a8 100755 --- a/scripts/split-paired-reads.py +++ b/scripts/split-paired-reads.py @@ -22,7 +22,8 @@ import khmer from khmer.kfile import check_file_status, check_space from khmer.khmer_args import info -from khmer.utils import write_record +from khmer.utils import (write_record, check_is_left, check_is_right, + broken_paired_reader) def get_parser(): @@ -70,6 +71,8 @@ def get_parser(): parser.add_argument('-2', '--output-second', metavar='output_second', default=None, help='Output "right" reads to this ' 'file') + parser.add_argument('-p', '--force-paired', action='store_true', + help='Require that reads be interleaved') parser.add_argument('--version', action='version', version='%(prog)s ' + khmer.__version__) @@ -109,20 +112,36 @@ def main(): counter1 = 0 counter2 = 0 index = None - for index, record in enumerate(screed.open(infile)): + + screed_iter = screed.open(infile, parse_description=False) + + for index, is_pair, record1, record2 in broken_paired_reader(screed_iter): if index % 100000 == 0 and index: print >> sys.stderr, '...', index - name = record.name - if name.endswith('/1'): - write_record(record, fp_out1) + if args.force_paired and not is_pair: + print >>sys.stderr, 'ERROR, %s is not part of a pair' % \ + record1.name + + if is_pair: + write_record(record1, fp_out1) counter1 += 1 - elif name.endswith('/2'): - write_record(record, fp_out2) + write_record(record2, fp_out2) counter2 += 1 + else: + name = record.name + if check_is_left(name): + write_record(record, fp_out1) + counter1 += 1 + elif check_is_right(name): + write_record(record, fp_out2) + counter2 += 1 + else: + raise Exception( + "Unrecognized format for read pair information: %s" % name) print >> sys.stderr, "DONE; split %d sequences (%d left, %d right)" % \ - (index + 1, counter1, counter2) + (counter1 + counter2, counter1, counter2) print >> sys.stderr, "/1 reads in %s" % out1 print >> sys.stderr, "/2 reads in %s" % out2 diff --git a/tests/test_functions.py b/tests/test_functions.py index bc2572d879..c8d8ea28d2 100644 --- a/tests/test_functions.py +++ b/tests/test_functions.py @@ -9,7 +9,8 @@ import os import khmer_tst_utils as utils import collections -from khmer.utils import check_is_pair, broken_paired_reader +from khmer.utils import (check_is_pair, broken_paired_reader, check_is_left, + check_is_right) def test_forward_hash(): @@ -189,6 +190,29 @@ def test_check_is_pair_7(): assert not check_is_pair(read1, read2) +def test_check_is_right(): + assert not check_is_right('seq1/1') + assert not check_is_right('seq1 1::N') + assert check_is_right('seq1/2') + assert check_is_right('seq1 2::N') + + assert not check_is_right('seq') + assert not check_is_right('seq 2') + + +def test_check_is_left(): + assert check_is_left('seq1/1') + assert check_is_left('seq1 1::N') + assert not check_is_left('seq1/2') + assert not check_is_left('seq1 2::N') + + assert not check_is_left('seq') + assert not check_is_left('seq 1') + + assert check_is_left( + '@HWI-ST412:261:d15khacxx:8:1101:3149:2157 1:N:0:ATCACG') + + class Test_BrokenPairedReader(object): stream = [FakeFastaRead(name='seq1/1', sequence='A' * 5), FakeFastaRead(name='seq1/2', sequence='A' * 4), diff --git a/tests/test_scripts.py b/tests/test_scripts.py index f95d955f10..f936445d57 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -2247,6 +2247,23 @@ def test_trim_low_abund_keep_paired(): assert seqs[-2:] == ['pair/1', 'pair/2'], seqs +def test_trim_low_abund_keep_paired_casava18(): + infile = utils.get_temp_filename('test.fa') + in_dir = os.path.dirname(infile) + + shutil.copyfile(utils.get_test_data('test-abund-read-2.paired2.fq'), + infile) + + args = ["-k", "17", "-x", "1e7", "-N", "2", "-V", infile] + utils.runscript('trim-low-abund.py', args, in_dir) + + outfile = infile + '.abundtrim' + assert os.path.exists(outfile), outfile + + seqs = [r.name for r in screed.open(outfile)] + assert seqs[-2:] == ['pair:foo', 'pair:foo'], seqs + + def test_trim_low_abund_highfpr(): infile = utils.get_temp_filename('test.fa') in_dir = os.path.dirname(infile) From d66c459d1b3eb5b69b6b43ba9a1bbef1e11d2157 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 21 Feb 2015 10:34:04 -0500 Subject: [PATCH 08/83] change default to \!linux in setup.cfg --- ChangeLog | 7 +++++++ setup.cfg | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 70453c3900..6a3c11bf33 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-02-21 Titus Brown + + * setup.cfg: set !linux flag by default, to avoid running tests that + request too much memory when 'nosetests' is run. (This is an OS difference + where Mac OS X attempts to allocate as much memory as requested, while + on Linux it just crashes). + 2015-02-21 Rhys Kidd * sandbox/{calc-best-assembly,calc-error-profile,normalize-by-align, diff --git a/setup.cfg b/setup.cfg index 2f2955942c..d5e5068ebc 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,7 +1,7 @@ [nosetests] verbosity = 2 stop = TRUE -attr = !known_failing,!jenkins +attr = !known_failing,!jenkins,!linux #processes = -1 # breaks xunit output [build_ext] From c3ecda9a0ac7c9b47500c7a736d0789028cb29e2 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 21 Feb 2015 13:29:19 -0500 Subject: [PATCH 09/83] updated comments --- scripts/split-paired-reads.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/split-paired-reads.py b/scripts/split-paired-reads.py index 636a9189a8..7c29fd35a7 100755 --- a/scripts/split-paired-reads.py +++ b/scripts/split-paired-reads.py @@ -91,6 +91,7 @@ def main(): filenames = [infile] check_space(filenames, args.force) + # decide where to put output files - specific directory? or just default? if args.output_directory: if not os.path.exists(args.output_directory): os.makedirs(args.output_directory) @@ -100,7 +101,7 @@ def main(): out1 = os.path.basename(infile) + '.1' out2 = os.path.basename(infile) + '.2' - # OVERRIDE defaults with -1, -2 + # OVERRIDE output file locations with -1, -2 if args.output_first: out1 = args.output_first if args.output_second: @@ -115,13 +116,16 @@ def main(): screed_iter = screed.open(infile, parse_description=False) + # walk through all the reads in broken-paired mode. for index, is_pair, record1, record2 in broken_paired_reader(screed_iter): if index % 100000 == 0 and index: print >> sys.stderr, '...', index + # are we requiring pairs? if args.force_paired and not is_pair: print >>sys.stderr, 'ERROR, %s is not part of a pair' % \ record1.name + sys.exit(1) if is_pair: write_record(record1, fp_out1) From d61c9863b422284a8ee6cb294c5d0168e61a46ac Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 21 Feb 2015 13:29:33 -0500 Subject: [PATCH 10/83] fixed Casava 1.8 behavior in interleave-reads --- scripts/interleave-reads.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/scripts/interleave-reads.py b/scripts/interleave-reads.py index 5788122640..a9f9e0179e 100755 --- a/scripts/interleave-reads.py +++ b/scripts/interleave-reads.py @@ -27,7 +27,8 @@ import khmer from khmer.kfile import check_file_status, check_space from khmer.khmer_args import info -from khmer.utils import write_record +from khmer.utils import (write_record_pair, check_is_left, check_is_right, + check_is_pair) def get_parser(): @@ -91,29 +92,31 @@ def main(): print >> sys.stderr, "Interleaving:\n\t%s\n\t%s" % (s1_file, s2_file) counter = 0 - for read1, read2 in itertools.izip(screed.open(s1_file), - screed.open(s2_file)): + screed_iter_1 = screed.open(s1_file, parse_description=False) + screed_iter_2 = screed.open(s2_file, parse_description=False) + for read1, read2 in itertools.izip(screed_iter_1, screed_iter_2): if counter % 100000 == 0: print >> sys.stderr, '...', counter, 'pairs' counter += 1 name1 = read1.name - if not name1.endswith('/1'): + if not check_is_left(name1): name1 += '/1' name2 = read2.name - if not name2.endswith('/2'): + if not check_is_right(name2): name2 += '/2' - assert name1[:-2] == name2[:-2], \ - "This doesn't look like paired data! %s %s" % (name1, name2) - read1.name = name1 read2.name = name2 - write_record(read1, args.output) - write_record(read2, args.output) - print >> sys.stderr, 'final: interleaved %d pairs' % counter + if not check_is_pair(read1, read2): + print >>sys.stderr, "This doesn't look like paired data! %s %s" % \ + (read1.name, read2.name) + sys.exit(1) + write_record_pair(read1, read2, args.output) + + print >> sys.stderr, 'final: interleaved %d pairs' % counter print >> sys.stderr, 'output written to', args.output if __name__ == '__main__': From 0e06b1618390bf5d9237482e2fc5f19610f32608 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 21 Feb 2015 13:36:14 -0500 Subject: [PATCH 11/83] updated extract-paired-reads to handle Casava 1.8 --- scripts/extract-paired-reads.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/extract-paired-reads.py b/scripts/extract-paired-reads.py index c07b5abe3c..efd6e29fc9 100755 --- a/scripts/extract-paired-reads.py +++ b/scripts/extract-paired-reads.py @@ -75,7 +75,7 @@ def main(): n_pe = 0 n_se = 0 - screed_iter = screed.open(args.infile) + screed_iter = screed.open(args.infile, parse_description=False) for index, is_pair, read1, read2 in broken_paired_reader(screed_iter): if index % 100000 == 0 and index > 0: print >>sys.stderr, '...', index @@ -95,7 +95,7 @@ def main(): print >>sys.stderr, 'DONE; read %d sequences,' \ ' %d pairs and %d singletons' % \ - (index + 1, n_pe, n_se) + (n_pe * 2 + n_se, n_pe, n_se) print >> sys.stderr, 'wrote to: ' + outfile \ + '.se' + ' and ' + outfile + '.pe' From 4f9d4ee7c7462498c5e64eb2ec52b469546c1cce Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 21 Feb 2015 16:30:07 -0500 Subject: [PATCH 12/83] file needed for Casava 1.8 tests --- tests/test-data/test-abund-read-2.paired2.fq | 56 ++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/test-data/test-abund-read-2.paired2.fq diff --git a/tests/test-data/test-abund-read-2.paired2.fq b/tests/test-data/test-abund-read-2.paired2.fq new file mode 100644 index 0000000000..be8c27c5c1 --- /dev/null +++ b/tests/test-data/test-abund-read-2.paired2.fq @@ -0,0 +1,56 @@ +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@seqtrim/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCcCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@seqtrim/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCcGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@seqtrim2/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAtCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@seq +GGTTGACGGGGCTCAGGG ++ +################## +@seq +GGTTGACGGGGCTCAGGG ++ +################## +@seq +GGTTGACGGGGCTCAGGG ++ +################## +@seq +GGTTGACGGGGCTCAGGG ++ +################## +@shortseq +GAGGG ++ +##### +@pair2:fiz 1::N +GGTTGACGGGGCTCAcGG ++ +################## +@pair2:fiz 2::N +GGTTGACGGGGCTCAGGc ++ +################## +@pair:foo 1::N +GGTTGACGGGGCTCAGGG ++ +################## +@pair:foo 2::N +ATATGACATATATAGACA ++ +################## From 7fe88bddab781763e868f1ede944d665bae198c4 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sat, 21 Feb 2015 16:36:31 -0500 Subject: [PATCH 13/83] some roundtripping tests for casava 1.8 FQ format --- tests/test-data/casava_18-pe.fq | 16 ++++++++++++++ tests/test_scripts.py | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 tests/test-data/casava_18-pe.fq diff --git a/tests/test-data/casava_18-pe.fq b/tests/test-data/casava_18-pe.fq new file mode 100644 index 0000000000..9af8adc7f1 --- /dev/null +++ b/tests/test-data/casava_18-pe.fq @@ -0,0 +1,16 @@ +@HWI-ST412:261:d15khacxx:8:1101:3149:2157 1:N:0:ATCACG +GTACACTATAGTGAGATTCCTTATACCTCGCAATATGATCTCCTGTCGTTACGTCCATTGCTCTTAACAAAGAACACTCATAGAGTAGAATCGAAAAAAC ++ +@@CDAFFAHFACC?DBHIAIIICGC?AHFEEHGGIIGG>CEDHBDHDGBGGBB8B5 +@HWI-ST412:261:d15khacxx:8:1101:3149:2157 2:N:0:ATCACG +TCGTTTTCTTGTAGATTAGATTTGACATAAATGTCAATTTTTTTGTATCTACCGTCACTTGAATACTCAGTTGCAATATAAT ++ +;+=D7D?DHGHFDCAE@BCCACHHGFBHICCFCE;@D:A>EECEFF3?BD@(.6 +@HWI-ST412:261:d15khacxx:8:1101:3426:2112 1:N:0:ATCACG +CTAAACACAGCAAATTTGTCAGAGATTTAATCCGTGAAGTAACTGGTCATGCTCCTTATGAAAAACGTGCTATGGAATTGCTCAAAGTATCACAGGATA ++ +1=DDFFAFFFHFIGBHGGDHIH>GC9?FEHGFGIIIIEEBGGBFHGGEIGHICHBFGCHEGIIIIGGCEGEHCHA?@@B?@D@C@>@>CCA>(;5;AA> +@HWI-ST412:261:d15khacxx:8:1101:3426:2112 2:N:0:ATCACG +GCCCAGCCTTCTTTTCAAAAACTTCAATGCACGCTTATCCTTTGATACTTTGAGCAATTCCATAGCACGTTTTTCATAAGGAGCATGACCAGTTACTTCA ++ +@?@A=BDD;DF3CFDHGEEHI:AFAHGII>FBCFE):B;:;@C@ diff --git a/tests/test_scripts.py b/tests/test_scripts.py index f936445d57..48b81f194e 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -2368,3 +2368,42 @@ def test_trim_low_abund_trimtest_savetable(): print record.name, record.sequence assert record.sequence == \ 'GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCA' + + +def test_roundtrip_casava_format_1(): + # check to make sure that extract-paired-reads produces a file identical + # to the input file when only paired data is given. + + infile = utils.get_temp_filename('test.fq') + in_dir = os.path.dirname(infile) + + shutil.copyfile(utils.get_test_data('casava_18-pe.fq'), infile) + + _, out, err = utils.runscript('extract-paired-reads.py', [infile], in_dir) + + r = open(infile).read() + + outfile = infile + '.pe' + r2 = open(outfile).read() + assert r == r2, (r, r2) + + +def test_roundtrip_casava_format_2(): + # check that split-paired-reads -> interleave-reads produces a file + # identical to input, when only paired reads are given. + + infile = utils.get_temp_filename('test.fq') + outfile = utils.get_temp_filename('test2.fq') + in_dir = os.path.dirname(infile) + + shutil.copyfile(utils.get_test_data('casava_18-pe.fq'), infile) + + _, out, err = utils.runscript('split-paired-reads.py', [infile], in_dir) + + utils.runscript('interleave-reads.py', [infile + '.1', + infile + '.2', + '-o', outfile], in_dir) + + r = open(infile).read() + r2 = open(outfile).read() + assert r == r2, (r, r2) From 5500b5bab2a46f341b0b029a9d38c8542b8c8662 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 22 Feb 2015 13:17:56 -0500 Subject: [PATCH 14/83] use parse_description everywhere screed.open is used --- scripts/count-median.py | 2 +- scripts/extract-long-sequences.py | 2 +- scripts/fastq-to-fasta.py | 3 ++- scripts/normalize-by-median.py | 2 +- scripts/readstats.py | 2 +- scripts/sample-reads-randomly.py | 2 +- scripts/trim-low-abund.py | 5 +++-- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/scripts/count-median.py b/scripts/count-median.py index 15b62c38d0..34b9924ab5 100755 --- a/scripts/count-median.py +++ b/scripts/count-median.py @@ -77,7 +77,7 @@ def main(): print >>sys.stderr, 'writing to', output_filename output = open(output_filename, 'w') - for record in screed.open(input_filename): + for record in screed.open(input_filename, parse_description=False): seq = record.sequence.upper() if 'N' in seq: seq = seq.replace('N', 'G') diff --git a/scripts/extract-long-sequences.py b/scripts/extract-long-sequences.py index 03dc1942dd..d8165cb505 100755 --- a/scripts/extract-long-sequences.py +++ b/scripts/extract-long-sequences.py @@ -42,7 +42,7 @@ def main(): args = get_parser().parse_args() outfp = open(args.output, 'w') for filename in args.input_filenames: - for record in screed.open(filename): + for record in screed.open(filename, parse_description=False): if len(record['sequence']) >= args.length: write_record(record, outfp) print >> sys.stderr, 'wrote to: ' + args.output diff --git a/scripts/fastq-to-fasta.py b/scripts/fastq-to-fasta.py index c917e48eb4..6202d2a96c 100755 --- a/scripts/fastq-to-fasta.py +++ b/scripts/fastq-to-fasta.py @@ -42,7 +42,8 @@ def main(): print >> sys.stderr, ('fastq from ', args.input_sequence) n_count = 0 - for n, record in enumerate(screed.open(args.input_sequence)): + for n, record in enumerate(screed.open(args.input_sequence, + parse_description=False)): if n % 10000 == 0: print>>sys.stderr, '...', n diff --git a/scripts/normalize-by-median.py b/scripts/normalize-by-median.py index 20ebc76311..460c40a403 100755 --- a/scripts/normalize-by-median.py +++ b/scripts/normalize-by-median.py @@ -64,7 +64,7 @@ def normalize_by_median(input_filename, outfp, htable, args, report_fp=None): total = 0 discarded = 0 for index, batch in enumerate(batchwise(screed.open( - input_filename), batch_size)): + input_filename, parse_description=False), batch_size)): if index > 0 and index % 100000 == 0: print >>sys.stderr, '... kept {kept} of {total} or'\ ' {perc:2}%'.format(kept=total - discarded, total=total, diff --git a/scripts/readstats.py b/scripts/readstats.py index 6e60fc7bd5..f578db286a 100755 --- a/scripts/readstats.py +++ b/scripts/readstats.py @@ -58,7 +58,7 @@ def main(): seqs = 0 try: - input_iter = screed.open(filename) + input_iter = screed.open(filename, parse_description=False) except (IOError, OSError, EOFError) as exc: print >>sys.stderr, 'ERROR in opening %s:' % filename print >>sys.stderr, ' ', str(exc) diff --git a/scripts/sample-reads-randomly.py b/scripts/sample-reads-randomly.py index 8985a6f247..d49321e99f 100755 --- a/scripts/sample-reads-randomly.py +++ b/scripts/sample-reads-randomly.py @@ -127,7 +127,7 @@ def main(): # read through all the sequences and load/resample the reservoir for filename in args.filenames: print >>sys.stderr, 'opening', filename, 'for reading' - for record in screed.open(filename): + for record in screed.open(filename, parse_description=False): total += 1 if total % 10000 == 0: diff --git a/scripts/trim-low-abund.py b/scripts/trim-low-abund.py index c25ec8be09..4b54b6922c 100755 --- a/scripts/trim-low-abund.py +++ b/scripts/trim-low-abund.py @@ -154,7 +154,7 @@ def main(): pass2list.append((filename, pass2filename, trimfilename)) - screed_iter = screed.open(filename) + screed_iter = screed.open(filename, parse_description=False) pass2fp = open(pass2filename, 'w') trimfp = open(trimfilename, 'w') @@ -251,7 +251,8 @@ def main(): # to the first loop. trimfp = open(trimfilename, 'a') - for n, read in enumerate(screed.open(pass2filename)): + for n, read in enumerate(screed.open(pass2filename, + parse_description=False)): if n % 10000 == 0: print >>sys.stderr, '... x 2', n, pass2filename, \ written_reads, written_bp From fe99fdb9874b59ef0eb09e85e1da43ceffc0b133 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 22 Feb 2015 13:22:41 -0500 Subject: [PATCH 15/83] fixed trim-low-abund test to properly catch casava 1.8 formatting --- tests/test_scripts.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 48b81f194e..5b2efa3a5d 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -2260,8 +2260,8 @@ def test_trim_low_abund_keep_paired_casava18(): outfile = infile + '.abundtrim' assert os.path.exists(outfile), outfile - seqs = [r.name for r in screed.open(outfile)] - assert seqs[-2:] == ['pair:foo', 'pair:foo'], seqs + seqs = [r.name for r in screed.open(outfile, parse_description=False)] + assert seqs[-2:] == ['pair:foo 1::N', 'pair:foo 2::N'], seqs def test_trim_low_abund_highfpr(): From 71a7bcd0690956a64be3dfa8cc66214cd015f11a Mon Sep 17 00:00:00 2001 From: Tamer Mansour Date: Sun, 22 Feb 2015 15:44:23 -0500 Subject: [PATCH 16/83] Update ChangeLog --- ChangeLog | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5fa6f30671..5d6597c7b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,6 @@ 2015-02-20 Tamer A. Mansour - * In the do.sh script, the old argument --savehash has been updated to ---savetable + * examples/stamps/do.sh: the argument --savehash was updated to --savetable 2015-02-20 Titus Brown From ecbf5142f7801cf40adf5cf71293436834b6e3ed Mon Sep 17 00:00:00 2001 From: alameldin Date: Sun, 22 Feb 2015 16:06:18 -0500 Subject: [PATCH 17/83] update the changlog --- ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3e5893e15d..5bb2dec71e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-02-21 Hussien Alameldin + + * sandbox/normalize-by-align.py, read_aligner.py, lice-reads-by-coverage.py: "copyright header was added" + 2015-02-21 Hussien Alameldin * sandbox/calc-best-assembly.py, collect-variants.py, graph-size.py: Set executable bits using "chmod +x" From 2044d88da1b77ed48bd299030fba42604c2e0b72 Mon Sep 17 00:00:00 2001 From: Tamer Mansour Date: Sun, 22 Feb 2015 16:54:37 -0500 Subject: [PATCH 18/83] Update ChangeLog --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 5d6597c7b8..23afbe7b76 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 2015-02-20 Tamer A. Mansour * examples/stamps/do.sh: the argument --savehash was updated to --savetable + * jenkins-build.sh: add a test to check for the do.sh file 2015-02-20 Titus Brown From cc644f5a182ed63b106e32fd2fd99529265036d8 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 22 Feb 2015 19:42:05 -0500 Subject: [PATCH 19/83] fixed normalize-by-median pairing for casava 1.8; added tests for normalize-by-median and sample_reads_randomly --- scripts/normalize-by-median.py | 11 ++--- tests/test-data/test-abund-read-paired.fa | 4 +- tests/test-data/test-abund-read-paired.fq | 24 ++++++++++ tests/test-data/test-reads.fq.gz | Bin 0 -> 763372 bytes tests/test_scripts.py | 55 ++++++++++++++++++++++ 5 files changed, 84 insertions(+), 10 deletions(-) create mode 100644 tests/test-data/test-abund-read-paired.fq create mode 100644 tests/test-data/test-reads.fq.gz diff --git a/scripts/normalize-by-median.py b/scripts/normalize-by-median.py index 460c40a403..c826e1a5a5 100755 --- a/scripts/normalize-by-median.py +++ b/scripts/normalize-by-median.py @@ -26,7 +26,7 @@ import argparse from khmer.kfile import (check_space, check_space_for_hashtable, check_valid_file_exists) -from khmer.utils import write_record +from khmer.utils import write_record, check_is_pair DEFAULT_DESIRED_COVERAGE = 10 MAX_FALSE_POSITIVE_RATE = 0.8 # see Zhang et al., @@ -43,12 +43,6 @@ def batchwise(coll, size): # Returns true if the pair of records are properly pairs -def validpair(read0, read1): - return read0.name[-1] == "1" and \ - read1.name[-1] == "2" and \ - read0.name[0:-1] == read1.name[0:-1] - - # pylint: disable=too-many-locals,too-many-branches def normalize_by_median(input_filename, outfp, htable, args, report_fp=None): @@ -82,7 +76,7 @@ def normalize_by_median(input_filename, outfp, htable, args, report_fp=None): # If in paired mode, check that the reads are properly interleaved if args.paired: - if not validpair(batch[0], batch[1]): + if not check_is_pair(batch[0], batch[1]): raise IOError('Error: Improperly interleaved pairs \ {b0} {b1}'.format(b0=batch[0].name, b1=batch[1].name)) @@ -105,6 +99,7 @@ def normalize_by_median(input_filename, outfp, htable, args, report_fp=None): # Emit records if any passed if passed_length and passed_filter: for record in batch: + print 'XXX', record.name write_record(record, outfp) else: discarded += batch_size diff --git a/tests/test-data/test-abund-read-paired.fa b/tests/test-data/test-abund-read-paired.fa index 71bd8d7621..08055b9de1 100644 --- a/tests/test-data/test-abund-read-paired.fa +++ b/tests/test-data/test-abund-read-paired.fa @@ -2,9 +2,9 @@ GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG >895:1:37:17593:9954/2 GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ->895:1:37:17593:9954/1 +>895:1:37:17593:9954 1::FOO GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ->895:1:37:17593:9954/2 +>895:1:37:17593:9954 2::FOO GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG >895:1:37:17593:9954/1 GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG diff --git a/tests/test-data/test-abund-read-paired.fq b/tests/test-data/test-abund-read-paired.fq new file mode 100644 index 0000000000..283b1107b9 --- /dev/null +++ b/tests/test-data/test-abund-read-paired.fq @@ -0,0 +1,24 @@ +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954 1::FOO +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954 2::FOO +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## diff --git a/tests/test-data/test-reads.fq.gz b/tests/test-data/test-reads.fq.gz new file mode 100644 index 0000000000000000000000000000000000000000..d96b0a91075faf2d865521481a9ccf5afce91918 GIT binary patch literal 763372 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

}Vs0^g0s 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≧zKfGk4(QMQvf8k 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

#2 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

Svt{Q_Q|d*D^=-{W6dflC3NndskrNbBOKqo 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�gm)wGlH2M6Rr8>GzWY> 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℘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�|3>dAvBq(e4MDVecj#C4LIk8Nu@vcL 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 z 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Ⓢvj&+ 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 VWP=ai;!) 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 literal 0 HcmV?d00001 diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 5b2efa3a5d..b71ea18a3d 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -498,6 +498,34 @@ def test_normalize_by_median_paired(): assert seqs[1].startswith('GGTTGACGGGGCTCAGGG'), seqs +def test_normalize_by_median_paired_fq(): + CUTOFF = '20' + + infile = utils.get_temp_filename('test.fa') + in_dir = os.path.dirname(infile) + + shutil.copyfile(utils.get_test_data('test-abund-read-paired.fq'), infile) + + script = scriptpath('normalize-by-median.py') + args = ['-C', CUTOFF, '-p', '-k', '17', infile] + _, out, err = utils.runscript(script, args, in_dir) + print out + print err + + outfile = infile + '.keep' + assert os.path.exists(outfile), outfile + + seqs = [r.sequence for r in screed.open(outfile)] + assert len(seqs) == 6, len(seqs) + assert seqs[0].startswith('GGTTGACGGGGCTCAGGGGG'), seqs + assert seqs[1].startswith('GGTTGACGGGGCTCAGGG'), seqs + + names = [r.name for r in screed.open(outfile, parse_description=False)] + assert len(names) == 6, names + assert '895:1:37:17593:9954 1::FOO' in names, names + assert '895:1:37:17593:9954 2::FOO' in names, names + + def test_normalize_by_median_impaired(): CUTOFF = '1' @@ -1725,6 +1753,33 @@ def test_sample_reads_randomly(): '850:2:1:2065:16816/1', '850:2:1:1792:15774/2']) +def test_sample_reads_randomly_fq(): + infile = utils.get_temp_filename('test.fq.gz') + in_dir = os.path.dirname(infile) + + shutil.copyfile(utils.get_test_data('test-reads.fq.gz'), infile) + + script = scriptpath('sample-reads-randomly.py') + # fix random number seed for reproducibility + args = ['-N', '10', '-M', '12000', '-R', '1'] + args.append(infile) + utils.runscript(script, args, in_dir) + + outfile = infile + '.subset' + assert os.path.exists(outfile), outfile + + seqs = set([r.name for r in screed.open(outfile, + parse_description=False)]) + + assert seqs == set(['850:2:1:2399:20086/2', + '850:2:1:1762:5439 1::FOO', + '850:2:1:2065:16816/1', '850:2:1:2263:11143/2', + '850:2:1:1792:15774/2', '850:2:1:2691:14602/1', + '850:2:1:2503:4494 1::FOO', + '850:2:1:2084:17145/1', '850:2:1:1984:7162 1::FOO', + '850:2:1:2273:13309 1::FOO']) + + def test_fastq_to_fasta(): script = scriptpath('fastq-to-fasta.py') From 732ee3c20388dfc1e27b2e3b24136cc7c3b0f92e Mon Sep 17 00:00:00 2001 From: alameldin Date: Sun, 22 Feb 2015 20:22:09 -0500 Subject: [PATCH 20/83] ChangeLog update #797 --- ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 5bb2dec71e..f7fd4f2560 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,6 @@ 2015-02-21 Hussien Alameldin - * sandbox/normalize-by-align.py, read_aligner.py, lice-reads-by-coverage.py: "copyright header was added" + * sandbox/normalize-by-align.py, read_aligner.py, slice-reads-by-coverage.py: "copyright header was added" 2015-02-21 Hussien Alameldin From 434b5487323ab49855f35f935cd1e4d4cca489ae Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 22 Feb 2015 21:32:04 -0500 Subject: [PATCH 21/83] updated test for extract_paired_reads to handle casava 1.8 fq format --- tests/test-data/paired-mixed.fq | 4 ++-- tests/test-data/paired-mixed.fq.pe | 4 ++-- tests/test_scripts.py | 8 +++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/test-data/paired-mixed.fq b/tests/test-data/paired-mixed.fq index 9fd58e9e8a..3fd873f92e 100644 --- a/tests/test-data/paired-mixed.fq +++ b/tests/test-data/paired-mixed.fq @@ -14,11 +14,11 @@ TTAATTTTGGAAACCCTGCAATAAAGTCACAACATTGC GCGATAAAAAGTCGTTGAGATAATCCGCGATTTCTCGCA + ####################################### -@895:1:37:17593:9954/1 +@895:1:37:17593:9954 1::foo GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG + ################################################################################################################## -@895:1:37:17593:9954/2 +@895:1:37:17593:9954 2::foo GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG + ################################################################################################################## diff --git a/tests/test-data/paired-mixed.fq.pe b/tests/test-data/paired-mixed.fq.pe index c169b700e2..b1ce5db22d 100644 --- a/tests/test-data/paired-mixed.fq.pe +++ b/tests/test-data/paired-mixed.fq.pe @@ -6,11 +6,11 @@ GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCC GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG + ################################################################################################################## -@895:1:37:17593:9954/1 +@895:1:37:17593:9954 1::foo GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG + ################################################################################################################## -@895:1:37:17593:9954/2 +@895:1:37:17593:9954 2::foo GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG + ################################################################################################################## diff --git a/tests/test_scripts.py b/tests/test_scripts.py index b71ea18a3d..7adf1a3ca6 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1494,15 +1494,17 @@ def test_extract_paired_reads_2_fq(): assert os.path.exists(outfile2), outfile2 n = 0 - for r, q in zip(screed.open(ex_outfile1), screed.open(outfile1)): + for r, q in zip(screed.open(ex_outfile1, parse_description=False), + screed.open(outfile1, parse_description=False)): n += 1 - assert r.name == q.name + assert r.name == q.name, (r.name, q.name, n) assert r.sequence == q.sequence assert r.quality == q.quality assert n > 0 n = 0 - for r, q in zip(screed.open(ex_outfile2), screed.open(outfile2)): + for r, q in zip(screed.open(ex_outfile2, parse_description=False), + screed.open(outfile2, parse_description=False)): n += 1 assert r.name == q.name assert r.sequence == q.sequence From 4294fbb86c7dd8e1e3f5cca493acf570803f3320 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 22 Feb 2015 21:33:01 -0500 Subject: [PATCH 22/83] fixed old bug in test_extract_long_sequences --- tests/test_scripts.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 7adf1a3ca6..039723e85a 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1843,16 +1843,16 @@ def test_extract_long_sequences(): in_dir_fq = os.path.dirname(fq_infile) in_dir_fa = os.path.dirname(fa_infile) - args = [fq_infile, '-l', '10', '-o', 'fq_outfile'] + args = [fq_infile, '-l', '10', '-o', fq_outfile] (status, out, err) = utils.runscript(script, args, in_dir_fa) - countlines = sum(1 for line in open(fq_infile)) + countlines = sum(1 for line in open(fq_outfile)) assert countlines == 44, countlines - args = [fa_infile, '-l', '10', '-o', 'fa_outfile'] + args = [fa_infile, '-l', '10', '-o', fa_outfile] (status, out, err) = utils.runscript(script, args, in_dir_fa) - countlines = sum(1 for line in open(fa_infile)) + countlines = sum(1 for line in open(fa_outfile)) assert countlines == 22, countlines From a63eead045beee566e7320235d05d451ad808d80 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Sun, 22 Feb 2015 21:38:38 -0500 Subject: [PATCH 23/83] add test for casava 1.8 format handling in extract-long-sequences --- tests/test_scripts.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 039723e85a..a46763419a 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1849,6 +1849,10 @@ def test_extract_long_sequences(): countlines = sum(1 for line in open(fq_outfile)) assert countlines == 44, countlines + names = [r.name for r in screed.open(fq_outfile, parse_description=False)] + assert "895:1:37:17593:9954 1::foo" in names + assert "895:1:37:17593:9954 2::foo" in names + args = [fa_infile, '-l', '10', '-o', fa_outfile] (status, out, err) = utils.runscript(script, args, in_dir_fa) From 2d709af8af6b47d3dcbb0dc15b8f2533e9e95824 Mon Sep 17 00:00:00 2001 From: alameldin Date: Sun, 22 Feb 2015 21:39:37 -0500 Subject: [PATCH 24/83] add copyright header --- ChangeLog | 4 +++- sandbox/normalize-by-align.py | 5 +++++ sandbox/read_aligner.py | 6 ++++++ sandbox/slice-reads-by-coverage.py | 5 +++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index f7fd4f2560..895e02317a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2015-02-21 Hussien Alameldin - * sandbox/normalize-by-align.py, read_aligner.py, slice-reads-by-coverage.py: "copyright header was added" + * sandbox/normalize-by-align.py: "copyright header 2013-2015 was added" + * sandbob/read_aligner.py: "copyright header 2013-2015 was added" + * sandbox/slice-reads-by-coverage.py: "copyright header 2014 was added" 2015-02-21 Hussien Alameldin diff --git a/sandbox/normalize-by-align.py b/sandbox/normalize-by-align.py index 9b345de858..293156fdcd 100755 --- a/sandbox/normalize-by-align.py +++ b/sandbox/normalize-by-align.py @@ -1,4 +1,9 @@ #! /usr/bin/env python2 +# This file is part of khmer, http://github.com/ged-lab/khmer/, and is +# Copyright (C) Michigan State University, 2013-2014. It is licensed under +# the three-clause BSD license; see doc/LICENSE.txt. +# Contact: khmer-project@idyll.org + """ XXX diff --git a/sandbox/read_aligner.py b/sandbox/read_aligner.py index feb30846aa..ca8ef896d4 100755 --- a/sandbox/read_aligner.py +++ b/sandbox/read_aligner.py @@ -1,4 +1,10 @@ #! /usr/bin/env python2 + +# This file is part of khmer, http://github.com/ged-lab/khmer/, and is +# Copyright (C) Michigan State University, 2013-2015. It is licensed under +# the three-clause BSD license; see doc/LICENSE.txt. +# Contact: khmer-project@idyll.org + """ Error correct reads based on a counting hash from a diginorm step. Output sequences will be put in @@@. diff --git a/sandbox/slice-reads-by-coverage.py b/sandbox/slice-reads-by-coverage.py index 10398f9095..e1103c4e39 100755 --- a/sandbox/slice-reads-by-coverage.py +++ b/sandbox/slice-reads-by-coverage.py @@ -1,4 +1,9 @@ #! /usr/bin/env python2 +# This file is part of khmer, http://github.com/ged-lab/khmer/, and is +# Copyright (C) Michigan State University, 2014. It is licensed under +# the three-clause BSD license; see doc/LICENSE.txt. +# Contact: khmer-project@idyll.org + import argparse import screed import sys From 87b4544d571e221365b1c96bb69b6474f00cf032 Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Sun, 22 Feb 2015 23:01:39 -0500 Subject: [PATCH 25/83] remove embty line --- jenkins-build.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/jenkins-build.sh b/jenkins-build.sh index 6bf9635292..85bfa0ac9b 100755 --- a/jenkins-build.sh +++ b/jenkins-build.sh @@ -66,4 +66,3 @@ then fi bash -ex -c 'cd examples/stamps/; ./do.sh' || { echo examples/stamps/do.sh no longer runs; /bin/false } - From afe03ad813ab3345e04957f9c53c780e8b6e78db Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Sun, 22 Feb 2015 23:16:51 -0500 Subject: [PATCH 26/83] adding empty line at the top of Changelog --- ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 1eaf5b2ee2..7e558f7b4f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ + 2015-02-22 Tamer A. Mansour - * examples/stamps/do.sh: the argument --savehash was updated to --savetable + * examples/stamps/do.sh: the argument --savehash was changed to --savetable * jenkins-build.sh: add a test to check for the do.sh file 2015-02-21 Hussien Alameldin From 08297ab5d98acd2f1cfaba73f30faa2b5eb0a0ce Mon Sep 17 00:00:00 2001 From: Kevin Murray Date: Mon, 23 Feb 2015 15:18:24 +1100 Subject: [PATCH 27/83] Remove khmer.load_pe module Addresses #784 --- khmer/load_pe.py | 53 ------------------------------------------------ 1 file changed, 53 deletions(-) delete mode 100644 khmer/load_pe.py diff --git a/khmer/load_pe.py b/khmer/load_pe.py deleted file mode 100644 index faabd1a314..0000000000 --- a/khmer/load_pe.py +++ /dev/null @@ -1,53 +0,0 @@ -# -# This file is part of khmer, http://github.com/ged-lab/khmer/, and is -# Copyright (C) Michigan State University, 2009-2013. It is licensed under -# the three-clause BSD license; see doc/LICENSE.txt. -# Contact: khmer-project@idyll.org -# - - -def _is_1(name): - return name.endswith('/1') - - -def _is_2(name): - return name.endswith('/2') - - -def is_pe(name1, name2): - return name1[:-1] == name2[:-1] - - -def load_pe(screed_handle): - last_record = None - - screed_iter = iter(screed_handle) - - while True: - try: - this_record = screed_iter.next() - except StopIteration: - if last_record: - yield last_record, None - - raise StopIteration - - if _is_2(this_record.name): - # PE! - if last_record: - if is_pe(last_record.name, this_record.name): - yield last_record, this_record - last_record = None - else: - # both records exist but they do not match as PEs - yield last_record, None - yield this_record, None - last_record = None - - # first sequence (/1) is missing? - else: - yield this_record, None - else: - if last_record: - yield last_record, None - last_record = this_record From 2272ef5e9920cf8a8ce5f0bc0a6ceb2c900d1daf Mon Sep 17 00:00:00 2001 From: Kevin Murray Date: Mon, 23 Feb 2015 15:21:56 +1100 Subject: [PATCH 28/83] Add PR #828 to changelog (remove khmer/load_pe.py) --- ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3e5893e15d..aeb00e1ff3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-02-23 Kevin Murray + + * khmer/load_pe.py: Remove unused/undocumented module. See #784 + 2015-02-21 Hussien Alameldin * sandbox/calc-best-assembly.py, collect-variants.py, graph-size.py: Set executable bits using "chmod +x" From 8b72b0f01442c2d91d090d06455011a73aa8f8ab Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 09:46:20 -0500 Subject: [PATCH 29/83] fixed filter-abund*.py for casava 1.8; added tests --- khmer/thread_utils.py | 2 +- tests/test_scripts.py | 47 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/khmer/thread_utils.py b/khmer/thread_utils.py index 0045b30b28..22567da40c 100644 --- a/khmer/thread_utils.py +++ b/khmer/thread_utils.py @@ -17,7 +17,7 @@ def verbose_loader(filename): - it = screed.open(filename) + it = screed.open(filename, parse_description=False) for n, record in enumerate(it): if n % 100000 == 0: print >>sys.stderr, '... filtering', n diff --git a/tests/test_scripts.py b/tests/test_scripts.py index a46763419a..5addfce001 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -258,10 +258,33 @@ def test_filter_abund_3_fq_retained(): seqs = set([r.sequence for r in screed.open(outfile)]) assert len(seqs) == 2, seqs assert 'GGTTGACGGGGCTCAGGG' in seqs + # check for 'quality' string. - seqs = set([r.quality for r in screed.open(outfile)]) - assert len(seqs) == 2, seqs - assert '##################' in seqs + quals = set([r.quality for r in screed.open(outfile)]) + assert len(quals) == 2, quals + assert '##################' in quals + + +# make sure that FASTQ names are properly parsed, both formats. + + +def test_filter_abund_4_fq_casava_18(): + infile = utils.get_temp_filename('test.fq') + in_dir = os.path.dirname(infile) + + shutil.copyfile(utils.get_test_data('test-abund-read-2.paired2.fq'), + infile) + counting_ht = _make_counting(infile, K=17) + + script = scriptpath('filter-abund.py') + args = [counting_ht, infile, infile] + utils.runscript(script, args, in_dir) + + outfile = infile + '.abundfilt' + assert os.path.exists(outfile), outfile + + seqs = set([r.name for r in screed.open(outfile, parse_description=False)]) + assert 'pair:foo 1::N' in seqs, seqs def test_filter_abund_1_singlefile(): @@ -306,6 +329,24 @@ def test_filter_abund_2_singlefile(): assert 'GGTTGACGGGGCTCAGGG' in seqs +def test_filter_abund_2_singlefile_fq_casava_18(): + infile = utils.get_temp_filename('test.fa') + in_dir = os.path.dirname(infile) + + shutil.copyfile(utils.get_test_data('test-abund-read-2.paired2.fq'), + infile) + + script = scriptpath('filter-abund-single.py') + args = ['-x', '1e7', '-N', '2', '-k', '17', infile] + (status, out, err) = utils.runscript(script, args, in_dir) + + outfile = infile + '.abundfilt' + assert os.path.exists(outfile), outfile + + seqs = set([r.name for r in screed.open(outfile, parse_description=False)]) + assert 'pair:foo 1::N' in seqs, seqs + + def test_filter_abund_4_retain_low_abund(): # test that the -V option does not trim sequences that are low abundance infile = utils.get_temp_filename('test.fa') From 7958840a563cdb5eea3d82818ab37ae888e1c250 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 10:03:48 -0500 Subject: [PATCH 30/83] add casava 1.8 fq test for do-partition --- tests/test-data/random-20-a.fq | 4 ++-- tests/test_scripts.py | 23 +++++++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/tests/test-data/random-20-a.fq b/tests/test-data/random-20-a.fq index c45ece8f57..9823fd4b72 100644 --- a/tests/test-data/random-20-a.fq +++ b/tests/test-data/random-20-a.fq @@ -1,4 +1,4 @@ -@35 +@35 1::FOO CGCAGGCTGGATTCTAGAGGCAGAGGTGAGCTATAAGATATTGCATACGTTGAGCCAGC + ########################################################### @@ -6,7 +6,7 @@ CGCAGGCTGGATTCTAGAGGCAGAGGTGAGCTATAAGATATTGCATACGTTGAGCCAGC CGGAAGCCCAATGAGTTGTCAGAGTCACCTCCACCCCGGGCCCTGTTAGCTACGTCCGT + ########################################################### -@46 +@46 1::FIZ GGTCGTGTTGGGTTAACAAAGGATCCCTGACTCGATCCAGCTGGGTAGGGTAACTATGT + ########################################################### diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 5addfce001..106bd499ca 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1117,7 +1117,9 @@ def test_extract_partitions_fq(): dist = open(distfile).readline() assert dist.strip() == '99 1 1 99' - parts = [r.name.split('\t')[1] for r in screed.open(partfile)] + screed_iter = screed.open(partfile, parse_description=False) + parts = [r.name.split('\t')[1] for r in screed_iter] + assert len(parts) == 99, len(parts) parts = set(parts) assert len(parts) == 1, len(parts) @@ -1398,7 +1400,24 @@ def test_do_partition_2(): assert len(parts) == 99, len(parts) -# + +def test_do_partition_2_fq(): + # test with K=21 (no joining of sequences) + seqfile = utils.get_test_data('random-20-a.fq') + graphbase = utils.get_temp_filename('out') + in_dir = os.path.dirname(graphbase) + + script = scriptpath('do-partition.py') + args = ["-k", "21", graphbase, seqfile] + + utils.runscript(script, args, in_dir) + + partfile = os.path.join(in_dir, 'random-20-a.fq.part') + + screed_iter = screed.open(partfile, parse_description=False) + names = [r.name.split('\t')[0] for r in screed_iter] + assert '35 1::FOO' in names + assert '46 1::FIZ' in names def test_interleave_reads_1_fq(): From e0132296f4d36914c30bcc58fdaafe8e532b9cc9 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 10:06:27 -0500 Subject: [PATCH 31/83] added casava 1.8 tests for annotate/extract-partitions --- tests/test_scripts.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 106bd499ca..32ef8dff37 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1117,6 +1117,11 @@ def test_extract_partitions_fq(): dist = open(distfile).readline() assert dist.strip() == '99 1 1 99' + screed_iter = screed.open(partfile, parse_description=False) + names = [r.name.split('\t')[0] for r in screed_iter] + assert '35 1::FOO' in names + assert '46 1::FIZ' in names + screed_iter = screed.open(partfile, parse_description=False) parts = [r.name.split('\t')[1] for r in screed_iter] From 62ff548041b8c980eb6a370ac5f719746b8b3795 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 10:15:01 -0500 Subject: [PATCH 32/83] casava 1.8 test for fastq-to-fasta --- tests/test_scripts.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 32ef8dff37..e0e8d29722 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1867,6 +1867,10 @@ def test_fastq_to_fasta(): assert len(out.splitlines()) == 2, len(out.splitlines()) assert "No lines dropped" in err + names = [r.name for r in screed.open(clean_outfile, + parse_description=False)] + assert '895:1:1:1246:14654 1:N:0:NNNNN' in names, names + args = [n_infile, '-n', '-o', n_outfile] (status, out, err) = utils.runscript(script, args, in_dir_n) assert len(out.splitlines()) == 2 From 783acf1f96c0997db3d6f5de72a8e05bafaefaae Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 10:33:49 -0500 Subject: [PATCH 33/83] fixed bug in utils.check_is_pair; added tests --- khmer/utils.py | 2 +- tests/test_functions.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/khmer/utils.py b/khmer/utils.py index 6954d35fb6..a587c7e2ef 100644 --- a/khmer/utils.py +++ b/khmer/utils.py @@ -33,7 +33,7 @@ def check_is_pair(record1, record2): name1 = record1.name name2 = record2.name - if ' ' in name1: # handle '@name 1:rst' + if ' ' in name1 and ' ' in name2: # handle '@name 1:rst' name1, rest1 = record1.name.split(' ', 1) name2, rest2 = record2.name.split(' ', 1) diff --git a/tests/test_functions.py b/tests/test_functions.py index c8d8ea28d2..f034644580 100644 --- a/tests/test_functions.py +++ b/tests/test_functions.py @@ -140,6 +140,20 @@ def test_check_is_pair_3_fq(): assert check_is_pair(read1, read2) +def test_check_is_pair_3_broken_fq_1(): + read1 = FakeFQRead(name='seq', quality='###', sequence='AAA') + read2 = FakeFQRead(name='seq 2::', quality='###', sequence='AAA') + + assert not check_is_pair(read1, read2) + + +def test_check_is_pair_3_broken_fq_1(): + read1 = FakeFQRead(name='seq 1::', quality='###', sequence='AAA') + read2 = FakeFQRead(name='seq', quality='###', sequence='AAA') + + assert not check_is_pair(read1, read2) + + def test_check_is_pair_3_fa(): read1 = FakeFastaRead(name='seq 1::', sequence='AAA') read2 = FakeFastaRead(name='seq 2::', sequence='AAA') From 4e724c558937e013bb69cdc26b1351ae0bb79671 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 10:38:31 -0500 Subject: [PATCH 34/83] test for fastq/casava 1.8 proper handling in filter-stoptags --- tests/test-data/test-abund-read-2.fq | 4 ++-- tests/test_scripts.py | 36 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/tests/test-data/test-abund-read-2.fq b/tests/test-data/test-abund-read-2.fq index 301208f5d1..3518f14620 100644 --- a/tests/test-data/test-abund-read-2.fq +++ b/tests/test-data/test-abund-read-2.fq @@ -1,8 +1,8 @@ -@895:1:37:17593:9954/1 +@895:1:37:17593:9954 1::FOO GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG + ################################################################################################################## -@seq +@seq 1::BAR GGTTGACGGGGCTCAGGG + ################## diff --git a/tests/test_scripts.py b/tests/test_scripts.py index e0e8d29722..215f618e44 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -446,6 +446,42 @@ def test_filter_stoptags(): assert 'GGTTGACGGGGCTCAGGG' in seqs, seqs +def test_filter_stoptags_fq(): + infile = utils.get_temp_filename('test.fa') + in_dir = os.path.dirname(infile) + stopfile = utils.get_temp_filename('stoptags', in_dir) + + # first, copy test-abund-read-2.fa to 'test.fa' in the temp dir. + shutil.copyfile(utils.get_test_data('test-abund-read-2.fq'), infile) + + # now, create a file with some stop tags in it -- + K = 18 + kh = khmer.new_hashbits(K, 1, 1) + kh.add_stop_tag('GTTGACGGGGCTCAGGGG') + kh.save_stop_tags(stopfile) + del kh + + # finally, run filter-stoptags. + script = scriptpath('filter-stoptags.py') + args = ['-k', str(K), stopfile, infile, infile] + utils.runscript(script, args, in_dir) + + # verify that the basic output file exists + outfile = infile + '.stopfilt' + assert os.path.exists(outfile), outfile + + # it should contain only one unique sequence, because we've trimmed + # off everything after the beginning of the only long sequence in there. + seqs = set([r.sequence for r in screed.open(outfile)]) + assert len(seqs) == 1, seqs + assert 'GGTTGACGGGGCTCAGGG' in seqs, seqs + + # make sure that record names are carried through unparsed + names = [r.name for r in screed.open(outfile, parse_description=False)] + names = set(names) + assert 'seq 1::BAR' in names + + def test_normalize_by_median_indent(): infile = utils.get_test_data('paired-mixed.fa.pe') hashfile = utils.get_test_data('normC20k20.ct') From b66a2b02a4a1bfe36c0b4d4a6f3262c7809f3fd5 Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 11:23:58 -0500 Subject: [PATCH 35/83] fix jenkins script line --- ChangeLog | 2 +- jenkins-build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7e558f7b4f..3b065701a8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,7 @@ - 2015-02-22 Tamer A. Mansour * examples/stamps/do.sh: the argument --savehash was changed to --savetable + and change mode to u+x * jenkins-build.sh: add a test to check for the do.sh file 2015-02-21 Hussien Alameldin diff --git a/jenkins-build.sh b/jenkins-build.sh index 85bfa0ac9b..b55f720e0e 100755 --- a/jenkins-build.sh +++ b/jenkins-build.sh @@ -65,4 +65,4 @@ then make sloccount.sc fi -bash -ex -c 'cd examples/stamps/; ./do.sh' || { echo examples/stamps/do.sh no longer runs; /bin/false } +bash -ex -c 'cd examples/stamps/; ./do.sh' || bash -ex -c 'echo examples/stamps/do.sh no longer runs; /bin/false' From b5cb5be813a73b3c96fc55b3ab198ab0166b27a6 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 11:27:36 -0500 Subject: [PATCH 36/83] wrote tests for sequence name handling in count-median; added --csv option --- scripts/count-median.py | 39 ++++++++++++++++++++++++++++++------ tests/test_scripts.py | 44 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 6 deletions(-) diff --git a/scripts/count-median.py b/scripts/count-median.py index 34b9924ab5..09e6b23305 100755 --- a/scripts/count-median.py +++ b/scripts/count-median.py @@ -21,11 +21,13 @@ """ import screed import argparse -import khmer import sys +import csv +import textwrap + +import khmer from khmer.kfile import check_file_status, check_space from khmer.khmer_args import info -import textwrap def get_parser(): @@ -34,8 +36,18 @@ def get_parser(): based on the k-mer counts in the given k-mer counting table. Can be used to estimate expression levels (mRNAseq) or coverage (genomic/metagenomic). - The output file contains sequence id, median, average, stddev, and seq - length. + The output file contains sequence id, median, average, stddev, and + seq length; fields are separated by spaces. For khmer 1.x, + sequence names are split at the first space, which means that some + sequence formats (e.g. paired FASTQ in Casava 1.8 format) will yield + uninformative names. Use :option:`--csv` to fix this behavior. + + :option:`--csv` will output a comma-separated value file with column + headers, and the entire sequence name will be kept. + + Example:: + + count-median.py counts.ct tests/test-data/test-reads.fq.gz medians.txt NOTE: All 'N's in the input sequences are converted to 'G's. """ @@ -53,6 +65,8 @@ def get_parser(): + khmer.__version__) parser.add_argument('-f', '--force', default=False, action='store_true', help='Overwrite output file if it exists') + parser.add_argument('--csv', default=False, action='store_true', + help='Output CSV format with column headers') return parser @@ -77,14 +91,27 @@ def main(): print >>sys.stderr, 'writing to', output_filename output = open(output_filename, 'w') - for record in screed.open(input_filename, parse_description=False): + if args.csv: + output = csv.writer(output) + # write headers: + output.writerow(['name', 'median', 'average', 'stddev', 'seqlen']) + + parse_description = True # @legacy behavior: split seq headers + if args.csv: + parse_description = False # only enable if we're doing csv out + + for record in screed.open(input_filename, + parse_description=parse_description): seq = record.sequence.upper() if 'N' in seq: seq = seq.replace('N', 'G') if ksize <= len(seq): medn, ave, stdev = htable.get_median_count(seq) - print >> output, record.name, medn, ave, stdev, len(seq) + if args.csv: + output.writerow([record.name, medn, ave, stdev, len(seq)]) + else: + print >> output, record.name, medn, ave, stdev, len(seq) if __name__ == '__main__': main() diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 215f618e44..48ef57a15e 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -747,6 +747,50 @@ def test_count_median(): assert 'seq 1001 1001.0 0.0 18' in data assert '895:1:37:17593:9954/1 1 103.803741455 303.702941895 114' in data + +def test_count_median_fq(): + infile = utils.get_temp_filename('test.fa') + outfile = infile + '.counts' + + shutil.copyfile(utils.get_test_data('test-abund-read-2.fq'), infile) + counting_ht = _make_counting(infile, K=8) + + script = scriptpath('count-median.py') + args = [counting_ht, infile, outfile] + utils.runscript(script, args) + + assert os.path.exists(outfile), outfile + + data = [x.strip() for x in open(outfile)] + data = set(data) + assert len(data) == 2, data + assert 'seq 1001 1001.0 0.0 18' in data + assert '895:1:37:17593:9954 1 103.803741455 303.702941895 114' in data + + +def test_count_median_fq_csv(): + infile = utils.get_temp_filename('test.fa') + outfile = infile + '.counts' + + shutil.copyfile(utils.get_test_data('test-abund-read-2.fq'), infile) + counting_ht = _make_counting(infile, K=8) + + script = scriptpath('count-median.py') + args = ['--csv', counting_ht, infile, outfile] + utils.runscript(script, args) + + assert os.path.exists(outfile), outfile + + data = [x.strip() for x in open(outfile)] + data = set(data) + assert len(data) == 4, data + assert 'name,median,average,stddev,seqlen' in data + assert 'seq,1001,1001.0,0.0,18' in data + + # verify that sequence names remain unparsed with '--csv' + assert '895:1:37:17593:9954 1::FOO,1,103.803741455,303.702941895,114' \ + in data, data + # From f0baea1e0dc22ca26eb80e8d30931563ce4aabd9 Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 11:45:30 -0500 Subject: [PATCH 37/83] better jenkins syntex --- jenkins-build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jenkins-build.sh b/jenkins-build.sh index b55f720e0e..5af67976f9 100755 --- a/jenkins-build.sh +++ b/jenkins-build.sh @@ -65,4 +65,5 @@ then make sloccount.sc fi -bash -ex -c 'cd examples/stamps/; ./do.sh' || bash -ex -c 'echo examples/stamps/do.sh no longer runs; /bin/false' +bash -ex -c 'cd examples/stamps/; ./do.sh' || { echo examples/stamps/do.sh no longer runs; /bin/false; } + From 03552bce4c895355bdbbafa99e48c73689b6c03a Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 12:01:09 -0500 Subject: [PATCH 38/83] wrote up ChangeLog; eliminated mistakenly committed debugging 'print' --- ChangeLog | 25 +++++++++++++++++++++++++ scripts/normalize-by-median.py | 1 - 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index aeb00e1ff3..68336c67af 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2015-02-23 Titus Brown + + * khmer/utils.py: added 'check_is_left' and 'check_is_right' functions; + fixed bug in check_is_pair. + * tests/test_functions.py: tests for now-fixed bug in check_is_pair. + * scripts/interleave-reads.py: updated to handle Casava 1.8 formatting. + * scripts/split-paired-reads.py: fixed bug where sequences with bad names + got dropped; updated to properly handle Casava 1.8 names in FASTQ files. + * scripts/count-median.py: added '--csv' output format; updated to properly + handle Casava 1.8 FASTQ format when '--csv' is specified. + * scripts/normalize-by-median.py: replaced pair checking with + utils.check_is_pair(), which properly handles Casava 1.8 FASTQ format. + * tests/test_scripts.py: updated script tests to check Casava 1.8 + formatting; fixed extract-long-sequences.py test. + * scripts/{extract-long-sequences.py,extract-paired-reads.py, + fastq-to-fasta.py,readstats.py,sample-reads-randomly.py,trim-low-abund.py}, + khmer/thread_utils.py: updated to handle Casava 1.8 FASTQ format by + setting parse_description=False in screed.open(...). + * tests/test-data/{paired-mixed.fq,paired-mixed.fq.pe,random-20-a.fq, + test-abund-read-2.fq,test-abund-read-2.paired2.fq,test-abund-read-paired.fa, + test-abund-read-paired.fq}: switched some sequences over to Casava 1.8 + format, to test format handling. + * tests/test-data/{casava_18-pe.fq,test-reads.fq.gz}: new test file for + Casava 1.8 format handling. + 2015-02-23 Kevin Murray * khmer/load_pe.py: Remove unused/undocumented module. See #784 diff --git a/scripts/normalize-by-median.py b/scripts/normalize-by-median.py index c826e1a5a5..edea40734b 100755 --- a/scripts/normalize-by-median.py +++ b/scripts/normalize-by-median.py @@ -99,7 +99,6 @@ def normalize_by_median(input_filename, outfp, htable, args, report_fp=None): # Emit records if any passed if passed_length and passed_filter: for record in batch: - print 'XXX', record.name write_record(record, outfp) else: discarded += batch_size From 8c2dd021d215ca3a02bf9ca08295e918a52c4ea9 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 12:13:41 -0500 Subject: [PATCH 39/83] updated ChangeLog message --- ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 68336c67af..d9396065ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,7 +2,8 @@ * khmer/utils.py: added 'check_is_left' and 'check_is_right' functions; fixed bug in check_is_pair. - * tests/test_functions.py: tests for now-fixed bug in check_is_pair. + * tests/test_functions.py: added tests for now-fixed bug in check_is_pair, + as well as 'check_is_left' and 'check_is_right'. * scripts/interleave-reads.py: updated to handle Casava 1.8 formatting. * scripts/split-paired-reads.py: fixed bug where sequences with bad names got dropped; updated to properly handle Casava 1.8 names in FASTQ files. From a907d8d40f3b05a4786eb70ec95fb2028d3d5194 Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 12:16:19 -0500 Subject: [PATCH 40/83] import csv and make parser --- scripts/abundance-dist.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/abundance-dist.py b/scripts/abundance-dist.py index 49705bd934..69fd7c49b4 100755 --- a/scripts/abundance-dist.py +++ b/scripts/abundance-dist.py @@ -16,6 +16,7 @@ from __future__ import print_function import sys +import csv import khmer import argparse import os @@ -43,6 +44,8 @@ def get_parser(): parser.add_argument('-s', '--squash', dest='squash_output', default=False, action='store_true', help='Overwrite output file if it exists') + parser.add_argument('--csv', default=False, action='store_true', + help='Output CSV format with column headers') parser.add_argument('--version', action='version', version='%(prog)s ' + khmer.__version__) parser.add_argument('-f', '--force', default=False, action='store_true', From 2d8efe79c631559e5debe320cfbffec872b16a45 Mon Sep 17 00:00:00 2001 From: Tamer Mansour Date: Mon, 23 Feb 2015 12:48:58 -0500 Subject: [PATCH 41/83] Update abundance-dist.py --- scripts/abundance-dist.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/scripts/abundance-dist.py b/scripts/abundance-dist.py index 69fd7c49b4..5c3c754d91 100755 --- a/scripts/abundance-dist.py +++ b/scripts/abundance-dist.py @@ -96,7 +96,14 @@ def main(): print("\tPlease verify that the input files are valid.", file=sys.stderr) sys.exit(1) - hash_fp = open(args.output_histogram_filename, 'w') + + if args.csv: ++ hash_fp = csv.writer(args.output_histogram_filename) ++ # write headers: ++ hash_fp.writerow(['k-mer_abundance', 'K-mer_count', + 'Cumulative_count', 'Fraction_of_total_distinct_k-mers']) + else: + hash_fp = open(args.output_histogram_filename, 'w') sofar = 0 for _, i in enumerate(abundances): @@ -106,7 +113,10 @@ def main(): sofar += i frac = sofar / float(total) - print(_, i, sofar, round(frac, 3), file=hash_fp) + if args.csv: + hash_fp.writerow([_, i, sofar, round(frac, 3)]) + else: + print(_, i, sofar, round(frac, 3), file=hash_fp) if sofar == total: break From f1ed1bb15277c5192fed58e441ef6342377654d2 Mon Sep 17 00:00:00 2001 From: Tamer Mansour Date: Mon, 23 Feb 2015 13:00:49 -0500 Subject: [PATCH 42/83] Update abundance-dist.py --- scripts/abundance-dist.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/scripts/abundance-dist.py b/scripts/abundance-dist.py index 5c3c754d91..538d43e6ce 100755 --- a/scripts/abundance-dist.py +++ b/scripts/abundance-dist.py @@ -96,14 +96,13 @@ def main(): print("\tPlease verify that the input files are valid.", file=sys.stderr) sys.exit(1) - + + hash_fp = open(args.output_histogram_filename, 'w') if args.csv: -+ hash_fp = csv.writer(args.output_histogram_filename) ++ hash_fp_csv = csv.writer(hash_fp) + # write headers: -+ hash_fp.writerow(['k-mer_abundance', 'K-mer_count', ++ hash_fp_csv.writerow(['k-mer_abundance', 'K-mer_count', 'Cumulative_count', 'Fraction_of_total_distinct_k-mers']) - else: - hash_fp = open(args.output_histogram_filename, 'w') sofar = 0 for _, i in enumerate(abundances): @@ -114,7 +113,7 @@ def main(): frac = sofar / float(total) if args.csv: - hash_fp.writerow([_, i, sofar, round(frac, 3)]) + hash_fp_csv.writerow([_, i, sofar, round(frac, 3)]) else: print(_, i, sofar, round(frac, 3), file=hash_fp) From e686bb1892fcc1ffd9315772825ede54f481af70 Mon Sep 17 00:00:00 2001 From: Tamer Mansour Date: Mon, 23 Feb 2015 13:19:01 -0500 Subject: [PATCH 43/83] Update abundance-dist.py --- scripts/abundance-dist.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/abundance-dist.py b/scripts/abundance-dist.py index 538d43e6ce..13f2ed6a72 100755 --- a/scripts/abundance-dist.py +++ b/scripts/abundance-dist.py @@ -99,9 +99,9 @@ def main(): hash_fp = open(args.output_histogram_filename, 'w') if args.csv: -+ hash_fp_csv = csv.writer(hash_fp) -+ # write headers: -+ hash_fp_csv.writerow(['k-mer_abundance', 'K-mer_count', + hash_fp_csv = csv.writer(hash_fp) + # write headers: + hash_fp_csv.writerow(['k-mer_abundance', 'K-mer_count', 'Cumulative_count', 'Fraction_of_total_distinct_k-mers']) sofar = 0 From 0b0c5edb2827723ce36987ba6dfb7ba254cb437a Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 13:38:16 -0500 Subject: [PATCH 44/83] fix pep8 --- ChangeLog | 4 ++++ scripts/abundance-dist.py | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index aeb00e1ff3..cefde4fff8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-02-23 Tamer A. Mansour (drtamermansour@gmail.com) + + * abundance-dist.py: Output CSV format with column headers + 2015-02-23 Kevin Murray * khmer/load_pe.py: Remove unused/undocumented module. See #784 diff --git a/scripts/abundance-dist.py b/scripts/abundance-dist.py index 13f2ed6a72..e351717614 100755 --- a/scripts/abundance-dist.py +++ b/scripts/abundance-dist.py @@ -44,7 +44,7 @@ def get_parser(): parser.add_argument('-s', '--squash', dest='squash_output', default=False, action='store_true', help='Overwrite output file if it exists') - parser.add_argument('--csv', default=False, action='store_true', + parser.add_argument('--csv', default=False, action='store_true', help='Output CSV format with column headers') parser.add_argument('--version', action='version', version='%(prog)s ' + khmer.__version__) @@ -96,13 +96,13 @@ def main(): print("\tPlease verify that the input files are valid.", file=sys.stderr) sys.exit(1) - + hash_fp = open(args.output_histogram_filename, 'w') if args.csv: hash_fp_csv = csv.writer(hash_fp) # write headers: - hash_fp_csv.writerow(['k-mer_abundance', 'K-mer_count', - 'Cumulative_count', 'Fraction_of_total_distinct_k-mers']) + hash_fp_csv.writerow(['k-mer_abundance', 'K-mer_count', 'Cumulative + _count', 'Fraction_of_total_distinct_k-mers']) sofar = 0 for _, i in enumerate(abundances): From 5516b49f897aac0883794e70681d7cd5cc0cb22b Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 13:55:21 -0500 Subject: [PATCH 45/83] fix for test make --- scripts/abundance-dist.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/abundance-dist.py b/scripts/abundance-dist.py index e351717614..0fff3d673a 100755 --- a/scripts/abundance-dist.py +++ b/scripts/abundance-dist.py @@ -101,8 +101,9 @@ def main(): if args.csv: hash_fp_csv = csv.writer(hash_fp) # write headers: - hash_fp_csv.writerow(['k-mer_abundance', 'K-mer_count', 'Cumulative - _count', 'Fraction_of_total_distinct_k-mers']) + hash_fp_csv.writerow(['k-mer_abundance', 'K-mer_count', + 'Cumulative_count', + 'Fraction_of_total_distinct_k-mers']) sofar = 0 for _, i in enumerate(abundances): From ae6dc6ac1beb460e2da2f81ae41e685b3089c89d Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 14:27:04 -0500 Subject: [PATCH 46/83] change the csv help message --- ChangeLog | 5 +++-- scripts/abundance-dist.py | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index cefde4fff8..04604d8610 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ -2015-02-23 Tamer A. Mansour (drtamermansour@gmail.com) +2015-02-23 Tamer A. Mansour - * abundance-dist.py: Output CSV format with column headers + * abundance-dist.py: Use CSV format for the histogram. Includes column + headers. 2015-02-23 Kevin Murray diff --git a/scripts/abundance-dist.py b/scripts/abundance-dist.py index 0fff3d673a..3257ab12a8 100755 --- a/scripts/abundance-dist.py +++ b/scripts/abundance-dist.py @@ -45,7 +45,8 @@ def get_parser(): action='store_true', help='Overwrite output file if it exists') parser.add_argument('--csv', default=False, action='store_true', - help='Output CSV format with column headers') + help='Use the CSV format for the histogram. ' + 'Includes column headers.') parser.add_argument('--version', action='version', version='%(prog)s ' + khmer.__version__) parser.add_argument('-f', '--force', default=False, action='store_true', From 706074ee774cf40c2857a05cd21d697a8e8468b2 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 15:12:31 -0500 Subject: [PATCH 47/83] update help message for count-median.py --csv --- scripts/count-median.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/count-median.py b/scripts/count-median.py index 09e6b23305..023b1b9cd9 100755 --- a/scripts/count-median.py +++ b/scripts/count-median.py @@ -66,7 +66,8 @@ def get_parser(): parser.add_argument('-f', '--force', default=False, action='store_true', help='Overwrite output file if it exists') parser.add_argument('--csv', default=False, action='store_true', - help='Output CSV format with column headers') + help="Use the CSV format for the histogram." + "Includes column headers.") return parser From 7517566c90150bd87250c8c0e4215c859236ea39 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 16:00:00 -0500 Subject: [PATCH 48/83] made the test robust to some floating point errors --- tests/test_scripts.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 48ef57a15e..ac2d6a595b 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -788,8 +788,8 @@ def test_count_median_fq_csv(): assert 'seq,1001,1001.0,0.0,18' in data # verify that sequence names remain unparsed with '--csv' - assert '895:1:37:17593:9954 1::FOO,1,103.803741455,303.702941895,114' \ - in data, data + names = set([line.split(',')[0] for line in data]) + assert '895:1:37:17593:9954 1::FOO' in names, names # From 55be1730fd4a473d9c871683ec355cf82f8dca5c Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Mon, 23 Feb 2015 16:17:44 -0500 Subject: [PATCH 49/83] work around versioneer bug --- ChangeLog | 5 +++++ setup.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index cea734bc8a..3dfa46deff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-02-23 Michael R. Crusoe + + * setup.py: point to the latest screed release candidate to work around + versioneer bug. + 2015-02-23 Tamer A. Mansour * examples/stamps/do.sh: the argument --savehash was changed to --savetable diff --git a/setup.py b/setup.py index 23dd6ba69f..48685197d4 100755 --- a/setup.py +++ b/setup.py @@ -250,5 +250,5 @@ def reinitialize_command(self, command, reinit_subcommands): # remove dependency_link once screed is published to actual PyPi # pylint: disable=W0142 setup(cmdclass=CMDCLASS, dependency_links=[ - "https://testpypi.python.org/pypi/screed/0.8-rc3"], + "https://testpypi.python.org/pypi/screed/0.8-rc4"], **SETUP_METADATA) From 4f56d1740a0940f4d6e7181f698c59e5bfff0ae3 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 16:48:34 -0500 Subject: [PATCH 50/83] various fixes and cleanups for pylint and code coverage --- khmer/thread_utils.py | 4 +- scripts/interleave-reads.py | 22 +++++-- scripts/split-paired-reads.py | 15 +++-- tests/test-data/paired-mixed-broken.fq | 4 ++ tests/test_functions.py | 2 +- tests/test_scripts.py | 85 ++++++++++++++++++++++++++ 6 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 tests/test-data/paired-mixed-broken.fq diff --git a/khmer/thread_utils.py b/khmer/thread_utils.py index 22567da40c..d1cd7b76e4 100644 --- a/khmer/thread_utils.py +++ b/khmer/thread_utils.py @@ -17,8 +17,8 @@ def verbose_loader(filename): - it = screed.open(filename, parse_description=False) - for n, record in enumerate(it): + screed_iter = screed.open(filename, parse_description=False) + for n, record in enumerate(screed_iter): if n % 100000 == 0: print >>sys.stderr, '... filtering', n yield record diff --git a/scripts/interleave-reads.py b/scripts/interleave-reads.py index a9f9e0179e..f29f047da1 100755 --- a/scripts/interleave-reads.py +++ b/scripts/interleave-reads.py @@ -37,9 +37,9 @@ def get_parser(): with a read in . By default, the output goes to stdout unless :option:`-o`/:option:`--output` is specified. - As a "bonus", this file ensures that read names are formatted in a - consistent way, such that they look like the pre-1.8 Casava format - (@name/1, @name/2). + As a "bonus", this file ensures that if read names are not already + formatted properly, they are reformatted consistently, such that + they look like the pre-1.8 Casava format (@name/1, @name/2). Example:: @@ -74,6 +74,11 @@ def main(): s2_file = args.infiles[1] else: s2_file = s1_file.replace('_R1_', '_R2_') + if s1_file == s2_file: + print >>sys.stderr, ("ERROR: given only one filename, that " + "doesn't contain _R1_. Exiting.") + sys.exit(1) + print >> sys.stderr, ("given only one file; " "guessing that R2 file is %s" % s2_file) @@ -94,7 +99,12 @@ def main(): counter = 0 screed_iter_1 = screed.open(s1_file, parse_description=False) screed_iter_2 = screed.open(s2_file, parse_description=False) - for read1, read2 in itertools.izip(screed_iter_1, screed_iter_2): + for read1, read2 in itertools.izip_longest(screed_iter_1, screed_iter_2): + if read1 is None or read2 is None: + print >>sys.stderr, ("ERROR: Input files contain different number" + " of records.") + sys.exit(1) + if counter % 100000 == 0: print >> sys.stderr, '...', counter, 'pairs' counter += 1 @@ -110,8 +120,8 @@ def main(): read2.name = name2 if not check_is_pair(read1, read2): - print >>sys.stderr, "This doesn't look like paired data! %s %s" % \ - (read1.name, read2.name) + print >>sys.stderr, "ERROR: This doesn't look like paired data! " \ + "%s %s" % (read1.name, read2.name) sys.exit(1) write_record_pair(read1, read2, args.output) diff --git a/scripts/split-paired-reads.py b/scripts/split-paired-reads.py index 7c29fd35a7..f92eda1281 100755 --- a/scripts/split-paired-reads.py +++ b/scripts/split-paired-reads.py @@ -41,6 +41,9 @@ def get_parser(): :option:`-2`/:option:`--output-second`, which will override the :option:`-o`/:option:`--output-dir` setting on a file-specific basis. + :option:`-p`/:option:`--force-paired` will require the input file to + be properly interleaved; by default, this is not required. + Example:: split-paired-reads.py tests/test-data/paired.fq @@ -133,16 +136,18 @@ def main(): write_record(record2, fp_out2) counter2 += 1 else: - name = record.name + name = record1.name if check_is_left(name): - write_record(record, fp_out1) + write_record(record1, fp_out1) counter1 += 1 elif check_is_right(name): - write_record(record, fp_out2) + write_record(record1, fp_out2) counter2 += 1 else: - raise Exception( - "Unrecognized format for read pair information: %s" % name) + print >>sys.stderr, \ + "Unrecognized format for read pair information: %s" % name + print >>sys.stderr, "Exiting." + sys.exit(1) print >> sys.stderr, "DONE; split %d sequences (%d left, %d right)" % \ (counter1 + counter2, counter1, counter2) diff --git a/tests/test-data/paired-mixed-broken.fq b/tests/test-data/paired-mixed-broken.fq new file mode 100644 index 0000000000..9470b4162c --- /dev/null +++ b/tests/test-data/paired-mixed-broken.fq @@ -0,0 +1,4 @@ +@895:1:37:17593:9954 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## diff --git a/tests/test_functions.py b/tests/test_functions.py index f034644580..b0cd09c448 100644 --- a/tests/test_functions.py +++ b/tests/test_functions.py @@ -147,7 +147,7 @@ def test_check_is_pair_3_broken_fq_1(): assert not check_is_pair(read1, read2) -def test_check_is_pair_3_broken_fq_1(): +def test_check_is_pair_3_broken_fq_2(): read1 = FakeFQRead(name='seq 1::', quality='###', sequence='AAA') read2 = FakeFQRead(name='seq', quality='###', sequence='AAA') diff --git a/tests/test_scripts.py b/tests/test_scripts.py index ac2d6a595b..583ddf68d4 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1527,6 +1527,65 @@ def test_interleave_reads_1_fq(): assert r == q, (r, q) +def test_interleave_reads_broken_fq(): + # test input files + infile1 = utils.get_test_data('paired-broken.fq.1') + infile2 = utils.get_test_data('paired-broken.fq.2') + + # actual output file + outfile = utils.get_temp_filename('out.fq') + + script = scriptpath('interleave-reads.py') + args = [infile1, infile2, '-o', outfile] + + status, err, out = utils.runscript(script, args, fail_ok=True) + assert status == 1 + + +def test_interleave_reads_broken_fq_2(): + # test input files + infile1 = utils.get_test_data('paired-broken2.fq.1') + infile2 = utils.get_test_data('paired-broken2.fq.2') + + # actual output file + outfile = utils.get_temp_filename('out.fq') + + script = scriptpath('interleave-reads.py') + args = [infile1, infile2, '-o', outfile] + + status, err, out = utils.runscript(script, args, fail_ok=True) + assert status == 1 + + +def test_interleave_reads_broken_fq_3(): + # test input files + infile1 = utils.get_test_data('paired-broken3.fq.1') + infile2 = utils.get_test_data('paired-broken3.fq.2') + + # actual output file + outfile = utils.get_temp_filename('out.fq') + + script = scriptpath('interleave-reads.py') + args = [infile1, infile2, '-o', outfile] + + status, err, out = utils.runscript(script, args, fail_ok=True) + assert status == 1 + + +def test_interleave_reads_broken_fq_4(): + # test input files + infile1 = utils.get_test_data('paired-mixed-broken.fq') + + # actual output file + outfile = utils.get_temp_filename('out.fq') + + script = scriptpath('interleave-reads.py') + args = [infile1, '-o', outfile] + + status, err, out = utils.runscript(script, args, fail_ok=True) + assert status == 1 + + def test_interleave_reads_2_fa(): # test input files infile1 = utils.get_test_data('paired.fa.1') @@ -1729,6 +1788,32 @@ def test_split_paired_reads_2_fq(): assert n > 0 +def test_split_paired_reads_2_mixed_fq(): + # test input file + infile = utils.get_test_data('paired-mixed.fq') + in_dir = os.path.dirname(infile) + + script = scriptpath('split-paired-reads.py') + args = ['-p', infile] + + status, out, err = utils.runscript(script, args, in_dir, fail_ok=True) + assert status == 1 + assert "is not part of a pair" in err + + +def test_split_paired_reads_2_mixed_fq_broken_pairing_format(): + # test input file + infile = utils.get_test_data('paired-mixed-broken.fq') + in_dir = os.path.dirname(infile) + + script = scriptpath('split-paired-reads.py') + args = [infile] + + status, out, err = utils.runscript(script, args, in_dir, fail_ok=True) + assert status == 1 + assert "Unrecognized format" in err + + def test_split_paired_reads_3_output_dir(): # test input file infile = utils.get_test_data('paired.fq') From 972c36e7feffbd3bbadadf0f87b186f33af38fa7 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 16:51:21 -0500 Subject: [PATCH 51/83] added missing test files --- tests/test-data/paired-broken.fq.1 | 12 ++++++++++++ tests/test-data/paired-broken.fq.2 | 9 +++++++++ tests/test-data/paired-broken2.fq.1 | 8 ++++++++ tests/test-data/paired-broken2.fq.2 | 13 +++++++++++++ tests/test-data/paired-broken3.fq.1 | 12 ++++++++++++ tests/test-data/paired-broken3.fq.2 | 9 +++++++++ tests/test-data/paired-mixed-broken.fq.1 | 0 tests/test-data/paired-mixed-broken.fq.2 | 0 tests/test-data/paired-mixed.fq.1 | 4 ++++ tests/test-data/paired-mixed.fq.2 | 4 ++++ 10 files changed, 71 insertions(+) create mode 100644 tests/test-data/paired-broken.fq.1 create mode 100644 tests/test-data/paired-broken.fq.2 create mode 100644 tests/test-data/paired-broken2.fq.1 create mode 100644 tests/test-data/paired-broken2.fq.2 create mode 100644 tests/test-data/paired-broken3.fq.1 create mode 100644 tests/test-data/paired-broken3.fq.2 create mode 100644 tests/test-data/paired-mixed-broken.fq.1 create mode 100644 tests/test-data/paired-mixed-broken.fq.2 create mode 100644 tests/test-data/paired-mixed.fq.1 create mode 100644 tests/test-data/paired-mixed.fq.2 diff --git a/tests/test-data/paired-broken.fq.1 b/tests/test-data/paired-broken.fq.1 new file mode 100644 index 0000000000..5efe1fac03 --- /dev/null +++ b/tests/test-data/paired-broken.fq.1 @@ -0,0 +1,12 @@ +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@896:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@897:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## diff --git a/tests/test-data/paired-broken.fq.2 b/tests/test-data/paired-broken.fq.2 new file mode 100644 index 0000000000..c913526c17 --- /dev/null +++ b/tests/test-data/paired-broken.fq.2 @@ -0,0 +1,9 @@ +@895:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@896:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## + diff --git a/tests/test-data/paired-broken2.fq.1 b/tests/test-data/paired-broken2.fq.1 new file mode 100644 index 0000000000..05cd98a82a --- /dev/null +++ b/tests/test-data/paired-broken2.fq.1 @@ -0,0 +1,8 @@ +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@897:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## diff --git a/tests/test-data/paired-broken2.fq.2 b/tests/test-data/paired-broken2.fq.2 new file mode 100644 index 0000000000..7c763496c3 --- /dev/null +++ b/tests/test-data/paired-broken2.fq.2 @@ -0,0 +1,13 @@ +@895:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@896:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@897:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## + diff --git a/tests/test-data/paired-broken3.fq.1 b/tests/test-data/paired-broken3.fq.1 new file mode 100644 index 0000000000..5efe1fac03 --- /dev/null +++ b/tests/test-data/paired-broken3.fq.1 @@ -0,0 +1,12 @@ +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@896:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@897:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## diff --git a/tests/test-data/paired-broken3.fq.2 b/tests/test-data/paired-broken3.fq.2 new file mode 100644 index 0000000000..9c110baa19 --- /dev/null +++ b/tests/test-data/paired-broken3.fq.2 @@ -0,0 +1,9 @@ +@896:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@897:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## + diff --git a/tests/test-data/paired-mixed-broken.fq.1 b/tests/test-data/paired-mixed-broken.fq.1 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/test-data/paired-mixed-broken.fq.2 b/tests/test-data/paired-mixed-broken.fq.2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/test-data/paired-mixed.fq.1 b/tests/test-data/paired-mixed.fq.1 new file mode 100644 index 0000000000..c1c38736e0 --- /dev/null +++ b/tests/test-data/paired-mixed.fq.1 @@ -0,0 +1,4 @@ +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## diff --git a/tests/test-data/paired-mixed.fq.2 b/tests/test-data/paired-mixed.fq.2 new file mode 100644 index 0000000000..73bb854395 --- /dev/null +++ b/tests/test-data/paired-mixed.fq.2 @@ -0,0 +1,4 @@ +@895:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## From 28c0923ee990878820afdd27c7efd8412967de0e Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 17:03:26 -0500 Subject: [PATCH 52/83] increasing code coverage some more --- scripts/interleave-reads.py | 2 +- tests/test-data/paired-mixed.fq.1 | 28 ++++++++++++++++++++++++++++ tests/test-data/paired-mixed.fq.2 | 8 ++++++++ tests/test_scripts.py | 15 ++++++++++++++- 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/scripts/interleave-reads.py b/scripts/interleave-reads.py index f29f047da1..45917195f3 100755 --- a/scripts/interleave-reads.py +++ b/scripts/interleave-reads.py @@ -78,7 +78,7 @@ def main(): print >>sys.stderr, ("ERROR: given only one filename, that " "doesn't contain _R1_. Exiting.") sys.exit(1) - + print >> sys.stderr, ("given only one file; " "guessing that R2 file is %s" % s2_file) diff --git a/tests/test-data/paired-mixed.fq.1 b/tests/test-data/paired-mixed.fq.1 index c1c38736e0..11e9d29874 100644 --- a/tests/test-data/paired-mixed.fq.1 +++ b/tests/test-data/paired-mixed.fq.1 @@ -2,3 +2,31 @@ GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG + ################################################################################################################## +@850:2:1:1118:7944/1 +TTAATTTTGGAAACCCTGCAATAAAGTCACAACATTGC ++ +###################################### +@850:2:1:1123:19958/1 +GCGATAAAAAGTCGTTGAGATAATCCGCGATTTCTCGCA ++ +####################################### +@895:1:37:17593:9954 1::foo +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@850:2:1:1126:16664/1 +CCATGTAGCGCCGCACACCTTTGTAGGTGTTGTAATAATCTTCG ++ +############################################ +@850:2:1:1128:16434/1 +GCGGGGTCTTGCCTGCCACCCCTGGACGCCCACTGCATCCCCATGGACAC ++ +################################################## +@850:2:1:1131:10632/1 +CGTTCAGTGAAACTTTTTCCATTGCTTTGCGCGCCGCCTCAGAGGCTTTTCGAATCGCCTC ++ +############################################################# diff --git a/tests/test-data/paired-mixed.fq.2 b/tests/test-data/paired-mixed.fq.2 index 73bb854395..46bd39e8f5 100644 --- a/tests/test-data/paired-mixed.fq.2 +++ b/tests/test-data/paired-mixed.fq.2 @@ -2,3 +2,11 @@ GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG + ################################################################################################################## +@895:1:37:17593:9954 2::foo +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 583ddf68d4..3d3c136880 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1788,7 +1788,7 @@ def test_split_paired_reads_2_fq(): assert n > 0 -def test_split_paired_reads_2_mixed_fq(): +def test_split_paired_reads_2_mixed_fq_require_pair(): # test input file infile = utils.get_test_data('paired-mixed.fq') in_dir = os.path.dirname(infile) @@ -1801,6 +1801,19 @@ def test_split_paired_reads_2_mixed_fq(): assert "is not part of a pair" in err +def test_split_paired_reads_2_mixed_fq(): + # test input file + infile = utils.get_test_data('paired-mixed.fq') + in_dir = os.path.dirname(infile) + + script = scriptpath('split-paired-reads.py') + args = [infile] + + status, out, err = utils.runscript(script, args, in_dir) + assert status == 0 + assert "split 11 sequences (8 left, 3 right)" in err + + def test_split_paired_reads_2_mixed_fq_broken_pairing_format(): # test input file infile = utils.get_test_data('paired-mixed-broken.fq') From 1aad6676f1e912510cd783df03ff4028c5e9a2a2 Mon Sep 17 00:00:00 2001 From: Tamer Mansour Date: Mon, 23 Feb 2015 17:11:27 -0500 Subject: [PATCH 53/83] Update test_scripts.py --- tests/test_scripts.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/test_scripts.py b/tests/test_scripts.py index f95d955f10..58d226c139 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1194,6 +1194,19 @@ def test_abundance_dist(): assert line == '1 96 96 0.98', line line = fp.next().strip() assert line == '1001 2 98 1.0', line + + os.remove(outfile) + args = ['-z', '--csv', htfile, infile, outfile] + utils.runscript(script, args, in_dir) + + fp = iter(open(outfile)) + line = fp.next().strip() + assert line == 'k-mer_abundance,K-mer_count,Cumulative_count,Fraction_of_total_distinct_k-mers', line + line = fp.next().strip() + assert line == '1 96 96 0.98', line + line = fp.next().strip() + assert line == '1001 2 98 1.0', line + def test_abundance_dist_nobigcount(): From d4198112fa67166df4fc8675748b1e5d2cee8779 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 17:14:28 -0500 Subject: [PATCH 54/83] switched extract-paired-read tests over to using a temp dir for output --- tests/test-data/paired-mixed-2.fq | 44 +++++++++++++++++++++++++++++++ tests/test_scripts.py | 11 +++++--- 2 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 tests/test-data/paired-mixed-2.fq diff --git a/tests/test-data/paired-mixed-2.fq b/tests/test-data/paired-mixed-2.fq new file mode 100644 index 0000000000..e986962fe4 --- /dev/null +++ b/tests/test-data/paired-mixed-2.fq @@ -0,0 +1,44 @@ +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@850:2:1:1118:7944/1 +TTAATTTTGGAAACCCTGCAATAAAGTCACAACATTGC ++ +###################################### +@850:2:1:1123:19958/2 +GCGATAAAAAGTCGTTGAGATAATCCGCGATTTCTCGCA ++ +####################################### +@895:1:37:17593:9954 1::foo +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954 2::foo +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954/1 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@895:1:37:17593:9954/2 +GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG ++ +################################################################################################################## +@850:2:1:1126:16664/1 +CCATGTAGCGCCGCACACCTTTGTAGGTGTTGTAATAATCTTCG ++ +############################################ +@850:2:1:1128:16434/1 +GCGGGGTCTTGCCTGCCACCCCTGGACGCCCACTGCATCCCCATGGACAC ++ +################################################## +@850:2:1:1131:10632/1 +CGTTCAGTGAAACTTTTTCCATTGCTTTGCGCGCCGCCTCAGAGGCTTTTCGAATCGCCTC ++ +############################################################# diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 3d3c136880..4268045497 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1790,7 +1790,8 @@ def test_split_paired_reads_2_fq(): def test_split_paired_reads_2_mixed_fq_require_pair(): # test input file - infile = utils.get_test_data('paired-mixed.fq') + infile = utils.get_temp_filename('test.fq') + shutil.copyfile(utils.get_test_data('paired-mixed.fq'), infile) in_dir = os.path.dirname(infile) script = scriptpath('split-paired-reads.py') @@ -1803,7 +1804,8 @@ def test_split_paired_reads_2_mixed_fq_require_pair(): def test_split_paired_reads_2_mixed_fq(): # test input file - infile = utils.get_test_data('paired-mixed.fq') + infile = utils.get_temp_filename('test.fq') + shutil.copyfile(utils.get_test_data('paired-mixed-2.fq'), infile) in_dir = os.path.dirname(infile) script = scriptpath('split-paired-reads.py') @@ -1811,12 +1813,13 @@ def test_split_paired_reads_2_mixed_fq(): status, out, err = utils.runscript(script, args, in_dir) assert status == 0 - assert "split 11 sequences (8 left, 3 right)" in err + assert "split 11 sequences (7 left, 4 right)" in err, err def test_split_paired_reads_2_mixed_fq_broken_pairing_format(): # test input file - infile = utils.get_test_data('paired-mixed-broken.fq') + infile = utils.get_temp_filename('test.fq') + shutil.copyfile(utils.get_test_data('paired-mixed-broken.fq'), infile) in_dir = os.path.dirname(infile) script = scriptpath('split-paired-reads.py') From 9cdf47138edd761795a900f293aa5ce3bd8d60b2 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 17:22:22 -0500 Subject: [PATCH 55/83] removed two unnecessary files --- tests/test-data/paired-mixed-broken.fq.1 | 0 tests/test-data/paired-mixed-broken.fq.2 | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tests/test-data/paired-mixed-broken.fq.1 delete mode 100644 tests/test-data/paired-mixed-broken.fq.2 diff --git a/tests/test-data/paired-mixed-broken.fq.1 b/tests/test-data/paired-mixed-broken.fq.1 deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/test-data/paired-mixed-broken.fq.2 b/tests/test-data/paired-mixed-broken.fq.2 deleted file mode 100644 index e69de29bb2..0000000000 From c416b355a30bcb38b9f03837ae9ea3beb07ba619 Mon Sep 17 00:00:00 2001 From: Tamer Mansour Date: Mon, 23 Feb 2015 17:22:38 -0500 Subject: [PATCH 56/83] Update test_scripts.py --- tests/test_scripts.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_scripts.py b/tests/test_scripts.py index 58d226c139..a85ab558e8 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1203,9 +1203,9 @@ def test_abundance_dist(): line = fp.next().strip() assert line == 'k-mer_abundance,K-mer_count,Cumulative_count,Fraction_of_total_distinct_k-mers', line line = fp.next().strip() - assert line == '1 96 96 0.98', line + assert line == '1,96,96,0.98', line line = fp.next().strip() - assert line == '1001 2 98 1.0', line + assert line == '1001,2,98,1.0', line From 4848c26ec646427cd895b523f8caa2efd615126f Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 17:31:43 -0500 Subject: [PATCH 57/83] removed unused test files --- ChangeLog | 4 + tests/test-data/overlap.curve | 200 ------------- tests/test-data/paired-mixed.fq.1 | 32 --- tests/test-data/paired-mixed.fq.2 | 12 - tests/test-data/simple_1.fa | 6 - tests/test-data/simple_2.fa | 8 - tests/test-data/simple_3.fa | 4 - tests/test-data/test-colors.fa | 8 - tests/test-data/test-est.fa | 2 - tests/test-data/test-graph3.fa | 8 - tests/test-data/test-graph4.fa | 12 - tests/test-data/test-graph6.fa | 464 ------------------------------ 12 files changed, 4 insertions(+), 756 deletions(-) delete mode 100644 tests/test-data/overlap.curve delete mode 100644 tests/test-data/paired-mixed.fq.1 delete mode 100644 tests/test-data/paired-mixed.fq.2 delete mode 100644 tests/test-data/simple_1.fa delete mode 100644 tests/test-data/simple_2.fa delete mode 100644 tests/test-data/simple_3.fa delete mode 100644 tests/test-data/test-colors.fa delete mode 100644 tests/test-data/test-est.fa delete mode 100644 tests/test-data/test-graph3.fa delete mode 100644 tests/test-data/test-graph4.fa delete mode 100644 tests/test-data/test-graph6.fa diff --git a/ChangeLog b/ChangeLog index 9ea6b68d48..0c29042f42 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,6 +23,10 @@ format, to test format handling. * tests/test-data/{casava_18-pe.fq,test-reads.fq.gz}: new test file for Casava 1.8 format handling. + * tests/test-data/{overlap.curve,paired-mixed.fq.1,paired-mixed.fq.2, + simple_1.fa,simple_2.fa,simple_3.fa,test-colors.fa,test-est.fa, + test-graph3.fa,test-graph4.fa,test-graph6.fa}: removed no-longer used + test files. 2015-02-23 Tamer A. Mansour diff --git a/tests/test-data/overlap.curve b/tests/test-data/overlap.curve deleted file mode 100644 index e951b1db55..0000000000 --- a/tests/test-data/overlap.curve +++ /dev/null @@ -1,200 +0,0 @@ -6021 0 -12283 0 -18155 0 -24050 0 -29649 40 -35878 63 -42077 63 -48233 63 -54423 63 -60530 121 -66015 154 -71548 154 -77733 154 -83781 154 -89819 154 -95916 154 -101765 168 -107569 168 -112958 168 -119116 168 -125245 168 -131415 168 -137387 293 -142771 293 -148585 293 -154968 293 -161049 295 -166997 295 -173045 295 -178307 295 -184486 295 -190476 295 -196578 295 -202648 338 -208367 351 -213865 420 -220200 420 -226356 449 -232545 449 -238563 463 -244631 463 -250477 463 -255751 463 -261733 463 -267940 468 -274028 468 -280168 468 -286339 468 -292468 468 -297959 468 -304094 468 -310195 468 -316381 468 -322511 468 -328748 468 -334296 468 -340307 468 -346479 468 -352467 468 -358167 468 -364100 468 -369953 500 -376021 500 -382062 545 -388117 545 -393750 545 -398447 1430 -401544 4527 -404607 7590 -408026 11009 -413425 16408 -419262 22245 -424872 27855 -430628 33611 -436424 39407 -442091 45074 -447704 50687 -453532 56515 -459256 62239 -465319 68302 -471277 74260 -477238 80221 -483201 86184 -488559 91542 -494427 97410 -500543 103526 -506488 109471 -512256 115239 -518250 121233 -524122 127105 -529993 132976 -535602 138585 -541291 144274 -547407 150390 -553356 156339 -559303 162286 -565185 168168 -570992 173975 -576607 179590 -581866 184849 -6021 0 -12283 0 -18155 0 -24050 0 -29649 40 -35878 63 -42077 63 -48233 63 -54423 63 -60530 121 -66015 154 -71548 154 -77733 154 -83781 154 -89819 154 -95916 154 -101765 168 -107569 168 -112958 168 -119116 168 -125245 168 -131415 168 -137387 293 -142771 293 -148585 293 -154968 293 -161049 295 -166997 295 -173045 295 -178307 295 -184486 295 -190476 295 -196578 295 -202648 338 -208367 351 -213865 420 -220200 420 -226356 449 -232545 449 -238563 463 -244631 463 -250477 463 -255751 463 -261733 463 -267940 468 -274028 468 -280168 468 -286339 468 -292468 468 -297959 468 -304094 468 -310195 468 -316381 468 -322511 468 -328748 468 -334296 468 -340307 468 -346479 468 -352467 468 -358167 468 -364100 468 -369953 500 -376021 500 -382062 545 -388117 545 -393750 545 -398447 1430 -401544 4527 -404607 7590 -408026 11009 -413425 16408 -419262 22245 -424872 27855 -430628 33611 -436424 39407 -442091 45074 -447704 50687 -453532 56515 -459256 62239 -465319 68302 -471277 74260 -477238 80221 -483201 86184 -488559 91542 -494427 97410 -500543 103526 -506488 109471 -512256 115239 -518250 121233 -524122 127105 -529993 132976 -535602 138585 -541291 144274 -547407 150390 -553356 156339 -559303 162286 -565185 168168 -570992 173975 -576607 179590 -581866 184849 diff --git a/tests/test-data/paired-mixed.fq.1 b/tests/test-data/paired-mixed.fq.1 deleted file mode 100644 index 11e9d29874..0000000000 --- a/tests/test-data/paired-mixed.fq.1 +++ /dev/null @@ -1,32 +0,0 @@ -@895:1:37:17593:9954/1 -GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG -+ -################################################################################################################## -@850:2:1:1118:7944/1 -TTAATTTTGGAAACCCTGCAATAAAGTCACAACATTGC -+ -###################################### -@850:2:1:1123:19958/1 -GCGATAAAAAGTCGTTGAGATAATCCGCGATTTCTCGCA -+ -####################################### -@895:1:37:17593:9954 1::foo -GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG -+ -################################################################################################################## -@895:1:37:17593:9954/1 -GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG -+ -################################################################################################################## -@850:2:1:1126:16664/1 -CCATGTAGCGCCGCACACCTTTGTAGGTGTTGTAATAATCTTCG -+ -############################################ -@850:2:1:1128:16434/1 -GCGGGGTCTTGCCTGCCACCCCTGGACGCCCACTGCATCCCCATGGACAC -+ -################################################## -@850:2:1:1131:10632/1 -CGTTCAGTGAAACTTTTTCCATTGCTTTGCGCGCCGCCTCAGAGGCTTTTCGAATCGCCTC -+ -############################################################# diff --git a/tests/test-data/paired-mixed.fq.2 b/tests/test-data/paired-mixed.fq.2 deleted file mode 100644 index 46bd39e8f5..0000000000 --- a/tests/test-data/paired-mixed.fq.2 +++ /dev/null @@ -1,12 +0,0 @@ -@895:1:37:17593:9954/2 -GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG -+ -################################################################################################################## -@895:1:37:17593:9954 2::foo -GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG -+ -################################################################################################################## -@895:1:37:17593:9954/2 -GGTTGACGGGGCTCAGGGGGCGGCTGACTCCGAGAGACAGCAGCCGCAGCTGTCGTCAGGGGATTTCCGGGGCGGAGGCCGCAGACGCGAGTGGTGGAGGGAGAAGGCCTGACG -+ -################################################################################################################## diff --git a/tests/test-data/simple_1.fa b/tests/test-data/simple_1.fa deleted file mode 100644 index 572469886d..0000000000 --- a/tests/test-data/simple_1.fa +++ /dev/null @@ -1,6 +0,0 @@ ->1 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ->2 -tttttttttttttttttttttttttttttttttttttttt ->3 -gggggggggg diff --git a/tests/test-data/simple_2.fa b/tests/test-data/simple_2.fa deleted file mode 100644 index 2d81af7c0f..0000000000 --- a/tests/test-data/simple_2.fa +++ /dev/null @@ -1,8 +0,0 @@ ->1 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ->2 -tttttttttttttttttttttttttttttttttttttttt ->3 -gggggggggg ->4 -ggggnggggg diff --git a/tests/test-data/simple_3.fa b/tests/test-data/simple_3.fa deleted file mode 100644 index 5bec6eeda7..0000000000 --- a/tests/test-data/simple_3.fa +++ /dev/null @@ -1,4 +0,0 @@ ->1 -AAAAAAAAAA ->2 -AAAAAAAGGG diff --git a/tests/test-data/test-colors.fa b/tests/test-data/test-colors.fa deleted file mode 100644 index b93d7c3c64..0000000000 --- a/tests/test-data/test-colors.fa +++ /dev/null @@ -1,8 +0,0 @@ ->read_A -ATCGTGTAAGCTATCGTAATCGTAAGCTCTGCCTAGAGCTAGGCTAGCGTAATCGTAAGCTCTGCCTAGAGCTAGGCTAGCGTAATCGTAAGCTCTGCCTAGAGCTAGGCTAG ->read_B_overlap_A -GCGTAATCGTAAGCTCTGCCTAGAGCTAGGCTAGCTCTGCCTAGAGCTAGGCTAGGTGTTGGGGATAGATAGATAGATGACCTAGAGCTAGGCTAGGTGTTGGGGATAGATAGATAGATGA ->read_C_overlap_B -TGGGATAGATAGATAGATGACCTAGAGCTAGGCTAGGTGTTGGGGATAGATAGATAGATGACCTAGAGCTAGGCTAGGTGTTGGGGATAGATAGATAGATGAGTTGGGGATAGATAGATAGATGAGTGTAGATCCAACAACACATACA ->read_D -TATATATATAGCTAGCTAGCTAACTAGCTAGCATCGATCGATCGATC diff --git a/tests/test-data/test-est.fa b/tests/test-data/test-est.fa deleted file mode 100644 index 7b0d9db009..0000000000 --- a/tests/test-data/test-est.fa +++ /dev/null @@ -1,2 +0,0 @@ ->est -AACCGGTTAAACCCGGGTTTAAAACCCCGGGGTTTT diff --git a/tests/test-data/test-graph3.fa b/tests/test-data/test-graph3.fa deleted file mode 100644 index 1c2b23108e..0000000000 --- a/tests/test-data/test-graph3.fa +++ /dev/null @@ -1,8 +0,0 @@ ->a -GACTGGGACTCTGGGAGCACTTATCATGGAGAT ->b -GGAGCACTTTAACCCTGCAGAGTGGCCAAGGCT ->c -GGAGCACTTATCATGGAGATATATCCCGTGCTTAAACATCGCACTTTAACCCTGCAGAGT ->d -GTGAACCGCTTTCTGGCAGGGGAGGTTAAGGATCTTTCTTATACCGCATGGTACCGCAAGAGCCTTTAGGCCTTACAAG diff --git a/tests/test-data/test-graph4.fa b/tests/test-data/test-graph4.fa deleted file mode 100644 index 807625f777..0000000000 --- a/tests/test-data/test-graph4.fa +++ /dev/null @@ -1,12 +0,0 @@ ->a -GACTGGGACTCTGGGAGCACTTATCATGGAGAT ->b -GAGCACTTTAACCCTGCAGAGTGGCCAAGGCT ->c -GGAGCACTTATCATGGAGATATATCCCGTGCTTAAACATCGCACTTTAACCCTGCAGAGT ->d -GTGAACCGCTTTCTGGCAGGGGAGGTTAAGGATCTTTCTTATACCGCA ->f -CTTATACCGCATGGTACCGCAAGAGCCTTTAGGCCTTACAAGGGATATCATTCGCAGA ->e -GGGGAGGTTAAGGATCTTTCTTATACCGCATGGTACCGCAAGAGCCTTTAGG diff --git a/tests/test-data/test-graph6.fa b/tests/test-data/test-graph6.fa deleted file mode 100644 index 0b05b38c11..0000000000 --- a/tests/test-data/test-graph6.fa +++ /dev/null @@ -1,464 +0,0 @@ ->a -AACTCGATACTTACATCGCCCGATTCGACTTCAATTTAAACTCTCAGC ->a -TGCAACGCCTCGAGATTGCGCGCGGTGTCCTTGAGCGTTTCGCCTTTAGTCAGGCTCGAAGTCGTTGC ->a -GATTGTCTGGTAACGTTCATCGGTGTTTTTGCGCAAGGCCTTTTGCAGAATCGATTCGAGTTTGGCTGGA ->a -CTTGAAAACCTGATCGACGAAATGTTGGAAGGCCAGATTCTTCTAGATGAGGCCATGGCTGAATT ->a -TTTGTGAGGTGTTGCTTATGTCGGGCGAGGGCTTTCTTTATATACAGCTTTTCAAATTCAGCCATGGCCTCATCTA ->a -ACCGACGGAGCGTTAGAGTCCGAAATTATCCGGAGATTTTTGGGCGCGTTTCAAGCGATCACGCCACTGGATATCG ->a -AATTCAAAGTAGGCATTTTTGTTTTTGTAGGGTTGGCGATGTTAGGCGCGCTGGTCGTGCAATTC ->a -ATCGACAAATCATTCCGCCCATGCTGTGACCGATCAGGACGATGCGCTTGTGATTTGGGAATGCGCG ->a -ACCGACGGGCCTCTGGACGAGCGATATTTGGACCAGGTCGCCGAAATCG ->a -CACGCCTGCGTTTGCGACCTATCCTCATGACTTCCTTCGCCTTCATCTTCGGCCTTCTGCCGCTTTGGTTTGCGAG ->a -CCACTATGGAAATCGATTGAGCGGTTCAATCAGGACCCGCAAACCATCGTAGTCGTGCCGTCCATGTCCATCGACG ->a -GCCGGATGTATTCGCCGAGCCCGGGAAAATATTCTCTGCGCTGGCGC ->a -CGTATAAGCGGCATTCTTACCTCCATAGTTAGGTCAGAAGTGTAACTGACGCTCGTTCCCAAGTGAGGGCCAATC ->a -GATATGAAGTAATGATTGGCCCTCACTTGGGAACGAGCGTCAGTTACACTTCTGACCTAACTATGGAGGTAAG ->a -GATGAATGCGGTTGGACCGTCGGGAAAGTAACCGTCG ->a -AAAGGTTCCAGTTCGCGGAGCGCCTGTCGCCAACTCTCCTGGGCGGCGGCATGATCGCCGGCGAC ->a -GGTGTCTCTTCTCAAGCATTACTTTCAGTGCGTGTGCTAAGTCCTTAATTTAGAACGATTTTTGCCGGGCTTTCG ->a -GATATTGAAGCCGAAAGCCCGGCAAAAATCGTTCTAAATTAAGGACTTAGCACACGCACTGAAAGTAATGCTTGAG ->a -ACGATCTCGGTGCGCTCTCGATGATATCCTCGGACTCTCAGGCTATGGGACGGTTGGGTGAAGTCATCATCCGCAC ->a -AAATCGAAAATTCCATCGCCGGGTTCCCCCTGGCGAGCGCGATCTCACATCCAGCGACGGAGACCCAGGGACCAAC ->a -ACGATCCTGCGTCCTGTCATCCGTTTGACTCTGTTTTAAGCCAGAGGGGCCCATGAAGATTTGTCTGGTA ->a -ACTCGTTCAGCCCCCGCCGTGAGGGCGGAAAGGCACTTACCAGACAAATCTTCATGGGCCCCTCTGGCTTAAAACA ->a -ATCTCGTAAATGGGGCTGTCATGTTGAGCGAAGCGAAACATCTCTGTCTATCATTGTAGTTAGATTGGTCCATGAA ->a -AACTGCTTCGCTGTTTCGACGTAGCTCCACGCCCAACGCGCAATATCCTTCTGCTCGTCGAG ->a -ATGGACAACAAGAAGGTGAAGGCGCAGTTCGGCGGCAAGCCGAGATCGGAAGAGCGTCG ->a -TGCAAATATCTCCCATCGATCAGAAGCATCGCCCGATTCGACTTCACTTGCTAGCCGG ->a -GATGGAGGGCGATGTCTCTGTCGAGCTTCTCGAAGAACGGTATCCCATCGCCAATCAAGACCGGC ->a -GGAAATCCGGCAGTGGTGGTCAAGAAATTCAAAGGGTGAATCCTTTCAACGCCCAACGCTCAACGCCCAACGCTCA ->a -AAACAAATCCTCGACCGCGAAATAGAGACGCTCACCGAATTTATCGC ->a -AGTGGGGCGCCGAACAACCTGGCATGGATTCTGGCGACTTCTTCCGACGCTTCAATGCGCGATGGCGCACGAGCAG ->a -GAAGATTGGGTTGCTATGTCAAATAAAACCCTCAACGTCTCATTAGCATACCTGACAGGCCGCTTAAAGATTCAAG ->a -ACAACGTTAAAAAGGTTACAAAAGTTAAATCGCCGGGCGGCATGCTCAATTCTTCAACGGGCGGCGTTGTACGCAT ->a -ATGGTCACCGAAACCGACGGAGCGTTGGAGTCCGAAATTATCCGGAGATTTTTGGGCGCGTTTCAAGCGATCACGC ->a -GATCTTAAGATTGAGAGCCAAATTCCATCCAAAGTTCGGGGCCCTCAAAACAATAAGACGTCCACCCGGC ->a -CGGAAAGACTTCGGTGAACTTGCCACCACACCTGCGTTGGCTTATCTCTTTCTCGTTAGCCCGCTGAT ->a -GATATTGAAAAAACTTCTCTTGGTTGACTTGTATTGCGTGACTTCAGTGCGCCGCAGCAATTGTCGTCCGGTCAGA ->a -TGGAACCGCCTGGTGCGCCCAACACTAGAAATAGCTTGTCATCTTTCAAGAGCATGGTTGGCGTCATCGACGAAAG ->a -TGGTGCAGGGCGAAAAGAATGCGATCGCACCCGGCAAACGTTCACTTTCGTCGATGACGCCAACCATGCTCTTGAA ->a -AATATTGTTAGACCTTCACTGGTCTCTGTCGCCCTCCTTGTTCTTTTCATCCTCTGCTCTGAGATCTACGACGTC ->a -ATCGCGGTCGCCCCAGGTCCAAGACGAGCAAAATGGGCGAAAGAATTGCGCCGGCGGCC ->a -TTCGCGGCGTGCTCCGGTCCCATCGTGTACAAGTCGCCGATTGGAAGGCACGCGATGCGCGGGCGATAGAGATCCG ->a -CGTGGCACGCGCAATATTTCATTCCGCGCTGCCAATCGTCTCAGCAGTCGGCCACGAAATCGATTTCACCA ->a -AGAATTAGACTGCATCTTGCAATCTATTTCCTGCCAACTTTGACGGAAATCGCCGCCGGACGCAGCG ->a -CGACAGACAACCCTGAAGCTTACGATGCCTACCTGCGTGGCCTGGCTTATATACTGAAAGCTGGCAACACACCC ->a -TCGCACGGCACGGCGCAGCGCATCGTCGAACGCGCCGCC ->a -ACTATCGTCGATTGCTCGGTACAATTCCCGAAGGCGTAACTTTTTCCGATCGCTTGAAGTCCGATTCGAG ->a -TTACGAGGACAAAGGGCGCATGGTATTTCTCCTGTACCTCCCAACTGGAGTCGACCCGACGCGTTT ->a -TCTTCAATCGATGATGCATTTCTACCACTTCGAGGTCGAATTCAGGGCCGAGAATCTCGACGGCCTTGCGCGTGAG ->a -TGAATAAGTTCAGCGAGTTTGCCACGACACCCTGCCGTGGCTTATCTCCTTCTCGTTAGACCCATGCGTGC ->a -ACCAAAAAAGCTTGCAACTGACTTCTGCAACAAAATCGGCACTTCTCGGACCTCGGCAGATGTCCACTTGAAGTCC ->a -CTGCTCCTCACCAGAAATGCAGATTTGATTGCCGGACGCCCGCCGTAGGAAAGGCAGATCGGAAGAGCGTCGTG ->a -TCGAGGCTGGCCTCTGGTTCCCCAATGACACGAGTCTCGATTTCGATTTCGGCGACCTGGTCG ->a -AAACAGCCGGATGTATTCGTCGATTCCCGGAAAATATTCTCTGCGCTGGCGTTCATGCTGAATGCG ->a -TTCCCCGAAGCGCTGCGAAAGTTTGATCAGGTTCTCAACATCATACCGGACG ->a -TTCCGTGTTGGGTTTTATCCACTGTTTTATCCACTCGTGGAAAATTTTCGGCATTATTTGAGCGTACGTCAGATAA ->a -AATCTGTGATTCTTCACCGGGGTCTTAGCTCAGTTGGTAGAGCGCCTCAATGGCATCAATGCCCGGCTGATTTTCG ->a -CTCCGCTTTCGTCCCATCATGATGACCACCATGGCCGCGCTACTCGGTGGCCTCCCACTCGCTCTCGGCGCCGGCG ->a -TCTCGATGCTGGGCGCCTGGCGCGCGCACGAACTCGACGATGCGCTGCGCCGCGCCT ->a -GGAATCATTTTTGCGGGCTGATCTGCTTTGCTTCCAGGCGCAATGGTTTTTCGGCGAACATGACCAACGCCGAGCG ->a -TTTCCTGACGAGTGTTTTGATTCCATCGCTGTTCGTGAAGCGATCCGGCGAATATGTGCCGCCGCAATTTCCAAAG ->a -CTCTCATCTGGACAGCGGGTGTGAAACCAAGTCCGGTAATTGCATCGTTACCTTGCGAGA ->a -CCTTCTGCCGCTTTGGTTTGCGAGCGGATCGGGCGCCGTCGCCCGCC ->a -TCTCGGGCTCGCCGACGAAGTTCGTTATTCGATCCTGCCGATCTTGATTGGCGATGGGATACCGTTCTTCGAGAAG ->a -AATACGTCGAGTGTGTTTGCCACGACACCCTGCCGTGGCTTATCCCTTTCTCGTTAAGTCTAATAGTTCGCTATGA ->a -GGAATCAAGAAAAACTTCCGAGTGTTCCCACGGTTGCCCGTACCGCAATCCGACACAGGTGGGTGAGTAGAATATA ->a -GAGCGGAAACAAGATAGCTGGATAAGGAGGGGTACCACGC ->a -AGCGCATCTCTATGTTCCAAAGCGTGGTACCCCTCCTTATCCAGCTATCTTGTTTCCGCTCAGATCGGAAGAGCGT ->a -CGCCGATGGCCAGCGGCGAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTCGCCGTATCATT ->a -GCACCGCGTTCTCAGCCTCAAGCCGCAACTTCGACTTGAATGGCGAGGCCAGGAAGGCCAGCACGAAACAGAACAG ->a -ACGCCTATGTAGGCGTAGATCGGAAGAGCGTCGTGTAGG ->a -GTAACAGCGAATCGCTAATTGAAGTTCCATAAATGCAGTTAACTTTTCATCCGCACGCACAACGAAACGCTTTCCG ->a -AGTACGGTCATCCTGAGCGAAGCGATGCGGAGTCGAAGGAT ->a -TTTAACTACGGGTTTCTGCTGCACAAGCCGGAAGCGTTTTCCATTTTGAGTTTTCTCTCTGATTCGCGTCCGCTTT ->a -ATGCAATTGTCATCCTGAGCGAAGCGAAGGATCTCTGGGATTTCGCAAATAGAACCTGAGA ->a -AAAGTCATCTACTGTTCCTGGCATGGTATCTTTCTCCGGTTAGGGTTTTTAACGGTTGAAGGTATACAAATTGTTC ->a -GAGACAGATAGTCAACTTAGCAAGACCAGTTGAAATCAAAGAATATCTCCCTGAGATCACAATAACCGGAG ->a -TGTGATCTCAGGGAGATATTCTTTGATTTCAACTGGTCTTGCTAAGCTGACTTATCTGTCTCTTTCACACAGTACG ->a -CTCATATTCGCCTGAGTTATGCAGGTTGACATAAACTCTGGCGCGAGCCG ->a -TCCGGCTGATCACTTTCAGATCGGCCACTTTCGCGAGGTCAGTCAGGATCTCGTCCTGCACGCCATCGGTGAAAAA ->a -CGAAAATTCGCCGCGAGCTGACGCTCGACGAGCAGAAGGATATTGCGCGTTGGGCG ->a -CGGCGGTCTACCGCTATCAAATGCCACGATAAATATGACAACAACCACACCAAAGACACACCCGGGCGCTCCGTAT ->a -GCATTAATCGACAAATCATTCCGCCCATACTGTGACCGATCAGGACGATGCGCTTGTGATTTGGGAATGCGCGCTT ->a -CTACGAAGCGTGCTTGCTGCGCTTCCGTCCGATCATGATGACCACCATGGCCGCG ->a -CTTCTCGCGGCCTTCGCGCCGCTCGGCGATCGAGCCGCAGATCGGAAGAGCGTCGTG ->a -TTACCTTCTTTGTCTCAACTTTTATAGAAAGCTCGATGAGAAAAAATTCCGCCTATTGCTGGGACGAGTAAAACCT ->a -ACAATCTAAATTCGAAAATCTTAAATCGAAATTCCTTCTCTTGGCCGGGTTCCCCCTGGCGAGT ->a -GATATTTTCCTTCAGCAAAAGGAGAATACGGCT ->a -CGAACTCCGACGCCCCCGCTGGTAGTGTCTTCTCCTCGCTGGGGCTGTAGCTCAGTTGGTAGAGCGCTTCCATGGC ->a -CAGTGGAATAATCCCCAGCCTGGCAGCGCCTATCACCTGACGGTCAACCTGTTTAATCCTAGCTTCCAAGGCGTAC ->a -GACGTGATCAATATCGCGGCAACGACTTCGAGCCTGACTAAAGGCGAAACCCTCAAGGACACCGCGCGTAACCTGG ->a -ATAACCTACCGGAATCGCCACCAGCGGAACAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGG ->a -GCCTGCAGCAGATCGGAAGAGCGTCGTGTAG ->a -CTTGAACCCCGTAGAAGAGATCAAGTAAAAGCGCGTCAATGCAAGCCCGGTTGGC ->a -ATCGTCTGGTAACGTTCATCACTGTTTTTGCGCAAAGCCTTGTGCAGAATCGATTCGAGTTTGAGCGGAACATCCG ->a -CGTAACTGACTTCGCGAGATTGCGCGGCTGATCGACATCGGTGCCACGCTCCG ->a -CCACTCAGGCAACATTTGCAGTGGCCGGCGGCGGCGGTGAGCTCGTCATGGCCAACGGCAACGG ->a -GCGCCGACAAACTATCGTCGATTGCTAGGTACAATTCCCGAAGGCGTAACTTTTTCCGATCGCTTGAAGCCCGATT ->a -TACCGCTATCAAATGCCACGATAAATATGACAACAACCACACCAAAGACACACCCGGGCGCTCCGTATGCAAATGC ->a -CAAGATGTCGCTGGCGATCATGCCGCCGCCCAGGAAAGCTGGCG ->a -GCAACGAGATTGCCGAATTGGCGCCTACCGGATTCACCGAAGCTTTCAAAGGCAAACTACGGAATCCGTGCATCGC ->a -CATCGACCCAGAAGAGTGCGATGCACGGATTCCGTAGTTTGCCTTTGAAAGCTTC ->a -TTTGCTGCAAAAGGTTTTACTCGTTCCAGCAATAGGCGGAATTTTTTCTCATCGAGCTTCCGATAGAAATTCAGGC ->a -CTGCCGTCGCTCAGCCGGGTGGACGTCTTATT ->a -GAGCGCATCAGGATGGGCCTCGACGAGCTCCGCCAGGTCGACGTCGATCGGGGGCGACGCCTCCG ->a -AAATGTCTCGATATGAAGAGAAAGCGGTGCGGGACGGGGAGCTTAGGGAAGCGCCGAGCTATAATAGGGA ->a -GCTCTCTTTCTCATCCTCTTCCTCAGCATCGCAGCATGTGCGTTCCCTATTATAGCTCGGCGCTTCCCTAAGCTCC ->a -TCGTTTTGTTCACGATCATGCGCTTTGTGTTTTTCGTGCCCATCGAGGGC ->a -CCTTCGATCAGTTCACTGGCGATGTAATGGATTGAGTGATCCTCACCGATCTCGTAAACCGTCAGGATATTCGGAT ->a -TGGTGTTGCGGTAACTGTTGCAGTAGGCGTCGGCGTAGATCGGAAGAGCGGTTCAGCAGGAATG ->a -ACGCCGACGCCTACTGCAACAGTTACCGCAACACCAAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTC ->a -ATGAAATATTGGGAAATCATCGCTGACAATCTCAGCAAAGCCGGCTGGAGTTGGGGCTGCCTCTCAGCCG ->a -TGCGCTTTGTGTTTTTCGTTCCCATCGAGGGCAGTGTGTTCGCCATGATGTTTTCTACGCTGGTGTATGTGTTTGC ->a -TGCCGATGCACGTCCAAACAAAAGGATCGACACAATAGTATCGACATCGCTTTT ->a -ACACCGCAGGCAGGCGGTGTAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGG ->a -TCACGAGTGTAGGTTTTGGGCAGAGCGGTGAGTTGTTCAATCACGACTTCCGGCTGGGCGCGACG ->a -TAGCCCCGGCTCAGGCACTGGTTCTGATTACGCTACGATTAAGTACGACGCATCGGGCAACCAACTGTGG ->a -ATCTCCACCTCCCGCACTGGAGATAACTGGAGCTCGGCCAGGCGCGCTCTG ->a -CGCCGAAGCGTTGCATAAAGTCATCTACTGTTCCTGGCATGGTATCTTTCTCCGGTTAG ->a -CATCTTACTAGTTCCTTTCATTGGTTTTGGCCTTCCGTGAGTTCTCGTCATTGAGAACTCATTTCTGGCCGTTC ->a -CCACGCTGCCCTCCTGATAATCGCGCGAGACGATATATCCCTGCACCTGCGCATTGATCTTAGCGTTGAT ->a -CATCCAAATATCCTAACGGTTTACGAGATCGGCGAGGATCACTCAACTCACTACATCGCCAGTGAACTGATCGAAG ->a -TCAATCTTCGCGCAGGACATTTCGAAGAAAAGTTACAACGTTAAAAACGTTACAAAAGTTAAATCGCTGCGCATCG ->a -TGGAAGTATTTTCCAACTAACTTCTCGGTTTTGGTTCCCGTTTCGACTTCCATCGAACGAGAATTCGAATCTAATC ->a -CCGAGGCGATCTACCAGCGTTGGGTTTTATCCACTGTTTTATCCACCGATGGAAAAATTTCAGCGTATTTCGGCAT ->a -TGTCATTCCGAGCGAAGTCGAGGAATCCTGGAATTAATGACGAATGACAAATGTCGAATGACGAAGGAATGACG ->a -GGCTGCCTTGAATCTTTAAGCGGCCAGTCAAGTATGCCCACGGGACTTTAAGGGTTTTATTTGACATAGAAACCCA ->a -ACCACAATCGTTTGCGGGTCCTGATTGAATCGCTCGATCGATTTCCACAAAGGGACCAGCTTGTTCTGCAACCGAT ->a -CGGAACGCGCGCTGCTTCAACGTGATGAAGAACTTATCGAAGCGCAACGA ->a -GGCTGATCAGCTCTGCAATTCCGGTTCCCGCCGAGCCAGCGCCGAGAAACAGGAACCG ->a -TTCCGAAGGCGATGAATCTCTCCTTAGAAAGGAGGTGATCCAGCCGCAG ->a -ATTCCATTCCCTGGGTCTGCGTCCATTACATGGCAGCAGCATTCTCCTTTTGCTGAAGGAAAATATCTTCCAAAA ->a -AGGGCGATGAAAGCTGAAATGTCGGGGCAGCCTGAAGAGCTAGTTGGAAAATACTTCCACAGCGCAAACGAGACCA ->a -GGGCAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGTGGTC ->a -CGCTTCGCTCAACATGACAGTCCAAAAAAAAGCAGGGCACCGC ->a -GAATACATCTTACAGTATAAGTACGACGTACTTCTAGCAGTAGAACTCCAGAATCAATATTGTTAGACCTTCACTG ->a -TATTGATAGAGTCTTGTTGTTGAACAACCCGGCGCAGTTGAATACCCGTGCCGGGTTGCGCTTCAGCCCTACGCGA ->a -GCATGGCGATGTGCCGTCACGTGTAGTCCTCGACTTCGCGTAGGGCTGAAGCGCAACCCGGCACG ->a -ACCCTCGCAGCTTTACCTTCTATGTCGCTCCTCCCGGTCGC ->a -TCAAGGTCGAGATCAGAGCGCGCCTGGCCGAGCTCCAGTTATCTCCAGTG ->a -AGGAAGATGGAAGAGTGGCGTCGAGACTATTGTGTCGATCCTTTTGTTCGGCTTAACATCGGCA ->a -TCCGGTCCCATCGTGTACAAGTCGCCGATTG ->a -CGTCTAGGATGCGCATGGATGCGCGTCGTCTCCAGAAGGTTGACGAGCTTCTCACGCGACGCATCGGGCAACCAA ->a -GGTCAAAACCGGTTGCATCGATAACGCGAAAAAAATCTGGTGGGACATCAGGCTGCACCCATTCTTCGATACCTTG ->a -TCGAAGGTAAAGCTGCGAGGGTAGCGGCGAACGAC ->a -CCCGGAGTTAGGGTCGTGTGTCAGCGATTGATTCCAACGGGCGAACGATCTGGACTGCTGACGCACAAAGGCGCTA ->a -AAGGACGATGGGCGGTTCATTGTGCGCGCCGATGAAATTCTGACTGCGTTTCTGGAACTGGAATCGGCACTCACGC ->a -CACCATTTTCGGCCAGCTCATCGCACATGCTGCGGAGCCAATCAAGATCGGAAGAGCGTCGTG ->a -AAATCGCAGATGGTGAAATCGATTTCGTGGCCGACGGCTGAGACAATCGGGACAGAAGAATTAAAAATGGCGCGGG ->a -CTAATAGGCTTGGACTGCAACATGCAATCTATTCCGGGCTCCATGCAGACAGTTTGCCGGAAAACACTGCAGAACG ->a -ACGATCCCAACTCGCAAGTCGCAGATCTTTTCGACCTACAGCGATAACCAGCCGGGCGTGGAGATCAAAGTGCTTC ->a -CTGCGCACTTCTGTCGCGAAAGGCATTGAGATCATCGAAGGCCTGCGTGGCCACACCACCGGTTATGCCGTGCCGC ->a -GTAAAATTTCGCGCAAAAATGGGTAAGACCTAACGAGAAAGAGATAAGCCACGGCAGAGTATGGCG ->a -ATGATGAAGAGCATCTCATCGTGCTCCGGCG ->a -CGCTTCTTAATGAGCGTACCGACAGCTTCGAAGATTGCGCCCAGAACGCAGCTTCCACTTTCTGGC ->a -AGTATGGCCGCCAGCTCCGGGGCTATCGATTCTACAGCGCCTTGAGAAAGCACCCATTCTTCGAC ->a -GAGTCTTGCTCCAACACCTCGTTATTCTGACCAGGCGGAACTTTCCAAAGTCGAAGAATGGGTGCTTTCTCAAGGC ->a -ACATTGTTTCTGGGTCAGATGACAACACTGTGTGCATCTGGGATGTATCAACAGGACAGCTAGTTGGGTCTCCCCT ->a -AATGCAACAGATGTCACCCAGTCTGTATGTCCTTGCAGGGGAGACCCAACTAGCTGTCCTGTTG ->a -AACGCCAACATCAATGCGCAGGTGCAGGGTTACATCGTTTCGC ->a -CGGCCAGAGCGAGGGTTTACGTCAACCTGCATAACTCAGGCGAATACGAGTTACCTATTGGTTATGTTACCATTAA ->a -GGACAATCCTGAGGCTTACGATGCCTACCTGCGTGGGCTGGCTTATACACTTA ->a -AGAAGGGATCAAGTAAAAGCGCGTCAATGTGCGCAAGTAACTCGAGAAGCACGGATTGTTTCCGCTTTCCTC ->a -CGTCCGGCGTGATATTGAGAACCTGATCAAGCTTGCGTAGCGCTTCGGAGAAACGCCGAAGGTCGATATAGGAAAT ->a -TAATGCGTTCGAGCATCGAACGCAGCGCACGCGCGCCGGTGCCTTTGGTGACAGCCTGCGCGGCGAGGG ->a -GCTGGATCACCTCCTTTCTAAGGAGCACTGGCCCGCAGCTCTTCG ->a -AATCGGCGACTTCTGCAACAAAATCGGCACAAAGCCGACG ->a -ACCCCGTCAGCCGTCACGTAGTCCAGGTTGTAGATGGTGTGCTGTGAACCGCCGTAGATCGGAAGAGCGTCG ->a -CCAGATAACGCTTATTTGGCGGACGGCATTCAAGAGGAGATCCTGACGCGGCTAG ->a -TCAATGATCTCAATGCCTTTCGCGACCGCAGTACGCAGATGCGACGAGCC ->a -ACTCTTGTATGGCATTACACTCGTCCGGCTGATCACTTTCAGATCGGCCACTTTC ->a -CGCCGCATCCGGTCGGCGAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTG ->a -ACGTCAACAGCATCACCTGCATCAACACGAGCTACAACGCGCGCTGCTTCAACGACGGCTATCACATCGGCCACCA ->a -TCCAACCGGCTTTGCTGAGATTGTCAGCGCGTTCAATCGTGAGCTTTGATTGGCCCTTCG ->a -AGCATCCTTCTTCAATCGATGATGCATTTCTACCACT ->a -TCAGGATCTCCTCTTGAATACCGTCGGCGAAGTAGGCGTTATCTGGATCGCCACTCAGATTTTCAAAGGGCAGCAC ->a -AGTCCTCTCATAAAGGTCATTCCGAGCGAAGTCGAGAAATCCTAGTGCGAAACCCAGCGTCAACTGCGCGGATCTC ->a -CCTCGGCCCGCTCGCCAACGCCCTGGTGCAGATGGAGTTCGGCGAAAGCTCGCTCGGTGCGCTCTCGATGAACACG ->a -CCATTTTCCGAATCTCCTGTTCGCCGTGGCAACCGTGAATGACCGAGCCAGCGCCGAGAAACAACAGCGCTTTAAA ->a -TCGACGTTCACCAGCGCCAGGTCGACGTCGATCGACG ->a -TGGCAAAAAGCGAACTCTTCATTGAAAAAGAATTCAGGAGCCAGGAGACAGAGGCGAGCAGTCACTGCTG ->a -ATGAGAGGGCTACCCAATTTTCCGGGTGGAAACAACGGTTTTGCCACCGGAGCCAACAACTTGGGTCAGGTAGTCG ->a -GGTCCCTCCTGCCAGAAAGTGGAGGCTGCGTTCTGTGCGCAATCTTCGAAGCTGTCGGCACGCTCGTTCAGGAGCG ->a -CAGTGTAATACGTCTTAAAACCTTCACCCAGCCTGCCGAATTGCACGACCAGCGCGCCTAACATCACCAGCCCTAC ->a -GCCCGTACCGGAATCCGACACAGGTGGGTGGGCATAATTGTGCCAAGGCGCGTGAGTGAAACCTCGTTAAGGAACT ->a -CTCTTGGTTGACTTGTTTTTCGTAACTTCAGTGCGCCGCAGCAATTGTCGCCCCGTTAGAAATCGCGGTT ->a -AGTGTGTCGAAGAATGGGTGCAGCCGGATGTCCCACCAGATTTTTTTGGCGTTATCGACGCAACCGGTTT ->a -TCGTGCCGCATCATGGTAGGAATTCAGCGTTGGACGTTGGGCGTTGAGCGTTGG ->a -CGCTTCAGAAACCGCGCTCAAGTCCACCAGAGCACGATGAGATGCTCTTCATTCTCATTCATCAGACGTACGAGCT ->a -CGAGCTGACGGGTTTTAACTACGGATTTCTGTTGCACAAACCGGAAGCGTTTTCCATTTTGAGTTTTCTCTCCGAT ->a -AGGTGAACCGCGGTTCACCTAGATCGGAAGAGCGTCGTGTAGGG ->a -AAGCTGCTTGGTCAGGTGATAGGCGCTGCCGATCCCGGAGATGCCTGCACCGACGATCAGAACATCGAAGTGCTCG ->a -CAATGTGTCGGGCTGAAAGCGTTTTCGTTATGCGTGCGGATGAAAAGCTGACTGCGTTTCTGGAACTGCAAAGAGC ->a -AATGGATGATGTCTAGACGAAATTTGGGAAAAGAATTCAGGAGCCAGAATTCAGAATTCAGGAGTTTCTGAATGCG ->a -AGTGTTTTGATTCCATCGCTGTTCGTGAAGCGATCCGGCGAATATTTGCCGCCGCAATTTCCAAAGATCCGCGAAG ->a -CACGGTCCCAACGCGCAAGTCGCAGATCTTTTCAACTTACAGCGACAATCAACCCGGCGTGGAAATCAAAGTGCTC ->a -CGACGCCGACCTCGTCGAGATGGGTGCTCCAACCGATGTCGGTGGCGCGA ->a -ATAAGTGGCCCCCGGAAATGAGTTCTCAATGACGAGAAGTCGCGGAAGGCCAAACAACTCCCCCACTTC ->a -AGTTAGTGGTGTCGATCACCAGGCCTCCCTGGAAATCCGATGCCCCTC ->a -TGTCAGCGATGATTTCCCAGCAATTCAACCGACGGCGAAAGGAATCTCAACTTCGATTTTTCGCATGTAAGGCT ->a -TGAATATAGTGCCAGAAGACAGTGTGGCGTTGAACAACCTGGCATGGATTCTGGCGACTTCTTCCGACG ->a -ACAAACGCAGTCAGCTTTTCATCAGCGTGCACAACGAAACGCTTTCCGTCGTCGCGATGTGTGTCTGCGATCC ->a -CCTATCATACCGCTGTGGTGAAGGGGACGGACGTCGATCAGCCGCGCAATCTGGCAAAAT ->a -GTGGTCAACAATCCCTAGAGCCAACGGGCGAACGATCTGGATTGCTGCCGCACACCCGACAGCCGCATATAGGACC ->a -GCGGTGAGTTGTTCAATCACGACTTCAGGCTGAGCACGACTGACA ->a -GCACGGCATTTTCAGCCTCCAGCCGGATCTTCGACTTGAATGGCGAGGTCAAGGCGGCCATCACGAAACACAGAAG ->a -CCCTTCCCAAGACGAGCAAAATGGGCGAAAGAATTGCGCCGGC ->a -GCAAGCTGCAAAGCTCCTCACTTTACGAGGACAAAGGACGCATGGTATTTCTCCTGTTCCTCCC ->a -CTCGGCGTTGGTCATGTTCGCCGAAAAACCATTGCGCCTGGAAGCAAAGCAGATCAGCCCGCAAAAATGCTTCCAG ->a -CGGTATGACGGTTACTTTCCCGACGGTCCCGCCGCGTTCATCGCGCAACTACAGAAATTGCGG ->a -ACAATTAGACTGCACCTTGCAATCTATTTCTGCCTCCATACAGGCAGCTTGCCGGAAAACACTGCAGGACGTCAAC ->a -CGGATTTCCAGGGTGGCCTGGTGATCGACACCACTAACTCGTTCAGCTTCAACCCTGCGAGTAACACTATCGGTTC ->a -TGAAACCAAGTCCGGTAATTGCATCGTTACCTTGCGAGAAGGA ->a -GGAACGCGACCTTCGGCATGCATCGCGCCGACCTCGTCGAGATGCTGGCGCGCG ->a -CCACGTCGTCCGGTGTGATATTGAGAACCTGATCAAACTTCCGCAACGCTTCGGGGAAAC ->a -CCTAAGGCCGATGAGATATGTGGTTGCGCATTGACACCAGATCGGAAGAG ->a -GGTGTCAATGCGCAACCACATATCTCATCGGCCTTATGAGATCGGAAGAGCGTCGTGTAG ->a -ATTTTCTGCGTCGATATTTGGGACGCAGAAAATAGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTAGATCTCGGT ->a -GCCCACCGAACGGATTGAGTCCGATCCACTACAAGACCACAACGCAAATGGCAACTTGAATATTTGATTATAAAT ->a -TACTTGAATCCGCTAGTGAAATCATTCGCCGGAAATTGATTTATAATCAAATATTCAAGTTGCCATTTGCGTTGTG ->a -CAACGGTGAGATCGGAAGAGCGTCGTGTAGGG ->a -ACAGATGTGGATCAGCCGCGCAATCTGGCCAAGTCAGTCACGGTTGAGTAAAAACAGCCGGTGAGCCTGCCTTCCG ->a -CATGTAACGAGAATTAGACTGCATCTTGCAATCTATTTCTGGCTCCATAGAGGGAAGTCTGCGTTAAAAGGCGGCA ->a -CCGGTAACTTCCTCGATGCGACGTTGATCGGCGCCGCGGGAAAGATGTATCGCCAGGGCGACGGCTTCGCCCTAG ->a -CCCACCCAACCACCTGACCCAAGTTGTTGGCTCCGGTTGCAAAGCCGTTATTGC ->a -CGCGTTCAAGTACCCGTACGCGTTCGACGTTCCGCTCGACTCCTGGACCGAGCTCGTCATGGCCAACGC ->a -CGCGAGGCTGAAATTGAGCGGGGTGAAGTTGGACGATCTTTCGGAGCAATAAGATCGGAAGAGCGTCGTG ->a -TTCCAAGAAGATGATGCATATTGTCATTCCGAGCGAAGTCGAAGAATCTCTCGACAGCGACTCTGCAATGAGTTCG ->a -CCGGCACAGTTGGGCTGTCGGAATCGATCAGACACACCGAATCAAAACCGCACTTGAACAAATCCTCGACCGCGAA ->a -CAACAGAAACGGGGTTGATCGGCGCCGCGGGAC ->a -TATTGGGAAATCATCGCAGACAATCTCAGCAAAGCCGGTTGGAGTTGGGGCTGCGTCTCAGCGATTGATTCCAAAG ->a -CATCGAACGCAGCGCACGCGCTCCTGTACCTTTGGTGACGGCCTGCCCGGCGAG ->a -GAGCTCCTTAACGAGGTTTCACTCACGCGCCTGAGTATATTCTACTCACCCACC From 586bf890ac1ed29dd61953d57ff9e787ed4015f2 Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 17:35:33 -0500 Subject: [PATCH 58/83] document added coverage --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index f1b43811df..3968918621 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * abundance-dist.py: Use CSV format for the histogram. Includes column headers. + * tests/test_scripts.py: add coverage for the new --csv option in + abundance-dist.py 2015-02-23 Tamer A. Mansour From cc176dd6a0195ec310b061c488b6b6bb9796d998 Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Tue, 16 Dec 2014 17:18:35 -0500 Subject: [PATCH 59/83] remove unused callback code --- ChangeLog | 6 ++ khmer/__init__.py | 11 --- khmer/_khmermodule.cc | 193 +++++++++---------------------------- lib/hashbits.cc | 13 +-- lib/hashbits.hh | 6 +- lib/hashtable.cc | 111 ++------------------- lib/hashtable.hh | 28 ++---- tests/test_c_wrapper.py | 48 --------- tests/test_read_parsers.py | 4 - 9 files changed, 69 insertions(+), 351 deletions(-) delete mode 100644 tests/test_c_wrapper.py diff --git a/ChangeLog b/ChangeLog index 7cc955c17b..13669a1953 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-02-23 Michael R. Crusoe + + * khmer/{__init__.py,_khmermodule.cc},lib/{hashbits.cc,hashbits.hh, + hashtable,tests/test_{c_wrapper,read_parsers}.py: remove unused callback + functionality + 2015-02-23 Michael R. Crusoe * setup.py: point to the latest screed release candidate to work around diff --git a/khmer/__init__.py b/khmer/__init__.py index f8b1b1c566..c66140fa40 100644 --- a/khmer/__init__.py +++ b/khmer/__init__.py @@ -10,7 +10,6 @@ from khmer._khmer import _new_counting_hash from khmer._khmer import _new_hashbits -from khmer._khmer import set_reporting_callback from khmer._khmer import _LabelHash from khmer._khmer import _Hashbits from khmer._khmer import _HLLCounter @@ -100,16 +99,6 @@ def load_counting_hash(filename): return hashtable -def _default_reporting_callback(info, n_reads, other): - print '...', info, n_reads, other - - -def reset_reporting_callback(): - set_reporting_callback(_default_reporting_callback) - -reset_reporting_callback() - - def extract_hashbits_info(filename): """Open the given hashbits file and return a tuple of information. diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index caefbde074..7ca5c504e7 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -137,46 +137,6 @@ class _khmer_signal : public _khmer_exception typedef pre_partition_info _pre_partition_info; -// default callback obj; -static PyObject *_callback_obj = NULL; - -// callback function to pass into C++ functions - -void _report_fn(const char * info, void * data, unsigned long long n_reads, - unsigned long long other) -{ - // handle signals etc. (like CTRL-C) - if (PyErr_CheckSignals() != 0) { - throw _khmer_signal("PyErr_CheckSignals received a signal"); - } - - // set data to default? - if (!data && _callback_obj) { - data = _callback_obj; - } - - // if 'data' is set, it is None, or a Python callable - if (data) { - PyObject * obj = (PyObject *) data; - if (obj != Py_None) { - PyObject * args = Py_BuildValue("sKK", info, n_reads, other); - if (args != NULL) { - PyObject * r = PyObject_Call(obj, args, NULL); - Py_XDECREF(r); - } - Py_XDECREF(args); - } - } - - if (PyErr_Occurred()) { - throw _khmer_signal("PyErr_Occurred is set"); - } - - // ...allow other Python threads to do stuff... - Py_BEGIN_ALLOW_THREADS; - Py_END_ALLOW_THREADS; -} - /***********************************************************************/ // @@ -853,11 +813,8 @@ static PyObject * hash_consume_fasta(PyObject * self, PyObject * args) CountingHash * counting = me->counting; const char * filename; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple( - args, "s|O", &filename, &callback_obj - )) { + if (!PyArg_ParseTuple(args, "s", &filename)) { return NULL; } @@ -865,8 +822,7 @@ static PyObject * hash_consume_fasta(PyObject * self, PyObject * args) unsigned long long n_consumed = 0; unsigned int total_reads = 0; try { - counting->consume_fasta(filename, total_reads, n_consumed, - _report_fn, callback_obj); + counting->consume_fasta(filename, total_reads, n_consumed); } catch (_khmer_signal &e) { PyErr_SetString(PyExc_IOError, e.get_message().c_str()); return NULL; @@ -886,11 +842,8 @@ static PyObject * hash_consume_fasta_with_reads_parser( CountingHash * counting = me->counting; PyObject * rparser_obj = NULL; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple( - args, "O|O", &rparser_obj, &callback_obj - )) { + if (!PyArg_ParseTuple(args, "O", &rparser_obj)) { return NULL; } @@ -904,8 +857,7 @@ static PyObject * hash_consume_fasta_with_reads_parser( bool exc_raised = false; Py_BEGIN_ALLOW_THREADS try { - counting->consume_fasta(rparser, total_reads, n_consumed, - _report_fn, callback_obj); + counting->consume_fasta(rparser, total_reads, n_consumed); } catch (_khmer_signal &e) { exc = e.get_message().c_str(); exc_raised = true; @@ -1175,10 +1127,9 @@ static PyObject * hash_fasta_count_kmers_by_position(PyObject * self, unsigned int max_read_len = 0; long max_read_len_long; int limit_by_count_int; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "sli|O", &inputfile, &max_read_len_long, - &limit_by_count_int, &callback_obj)) { + if (!PyArg_ParseTuple(args, "sli", &inputfile, &max_read_len_long, + &limit_by_count_int)) { return NULL; } if (max_read_len_long < 0 || max_read_len_long >= pow(2, 32)) { @@ -1197,7 +1148,7 @@ static PyObject * hash_fasta_count_kmers_by_position(PyObject * self, unsigned long long * counts; counts = counting->fasta_count_kmers_by_position(inputfile, max_read_len, - (unsigned short) limit_by_count_int, _report_fn, callback_obj); + (unsigned short) limit_by_count_int); PyObject * x = PyList_New(max_read_len); if (x == NULL) { @@ -1226,17 +1177,13 @@ static PyObject * hash_fasta_dump_kmers_by_abundance(PyObject * self, const char * inputfile; int limit_by = 0; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "si|O", &inputfile, &limit_by, - &callback_obj)) { + if (!PyArg_ParseTuple(args, "si", &inputfile, &limit_by)) { return NULL; } counting->fasta_dump_kmers_by_abundance(inputfile, - limit_by, - _report_fn, callback_obj); - + limit_by); Py_RETURN_NONE; } @@ -1427,9 +1374,8 @@ static PyObject * hash_consume_fasta_and_tag(PyObject * self, PyObject * args) CountingHash * counting = me->counting; const char * filename; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "s|O", &filename, &callback_obj)) { + if (!PyArg_ParseTuple(args, "s", &filename)) { return NULL; } @@ -1439,8 +1385,7 @@ static PyObject * hash_consume_fasta_and_tag(PyObject * self, PyObject * args) unsigned int total_reads; try { - counting->consume_fasta_and_tag(filename, total_reads, n_consumed, - _report_fn, callback_obj); + counting->consume_fasta_and_tag(filename, total_reads, n_consumed); } catch (_khmer_signal &e) { PyErr_SetString(PyExc_IOError, e.get_message().c_str()); return NULL; @@ -1498,18 +1443,16 @@ static PyObject * hash_do_subset_partition_with_abundance(PyObject * self, khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; - PyObject * callback_obj = NULL; HashIntoType start_kmer = 0, end_kmer = 0; PyObject * break_on_stop_tags_o = NULL; PyObject * stop_big_traversals_o = NULL; BoundedCounterType min_count, max_count; - if (!PyArg_ParseTuple(args, "HH|KKOOO", + if (!PyArg_ParseTuple(args, "HH|KKOO", &min_count, &max_count, &start_kmer, &end_kmer, &break_on_stop_tags_o, - &stop_big_traversals_o, - &callback_obj)) { + &stop_big_traversals_o)) { return NULL; } @@ -1529,8 +1472,7 @@ static PyObject * hash_do_subset_partition_with_abundance(PyObject * self, subset_p->do_partition_with_abundance(start_kmer, end_kmer, min_count, max_count, break_on_stop_tags, - stop_big_traversals, - _report_fn, callback_obj); + stop_big_traversals); Py_END_ALLOW_THREADS } catch (_khmer_signal &e) { return NULL; @@ -1870,12 +1812,10 @@ static PyObject * hashbits_count_overlap(PyObject * self, PyObject * args) Hashbits * hashbits = me->hashbits; khmer_KHashbitsObject * ht2_argu; const char * filename; - PyObject * callback_obj = NULL; Hashbits * ht2; - if (!PyArg_ParseTuple(args, "sO!|O", &filename, &khmer_KHashbitsType, - &ht2_argu, - &callback_obj)) { + if (!PyArg_ParseTuple(args, "sO!", &filename, &khmer_KHashbitsType, + &ht2_argu)) { return NULL; } @@ -1888,8 +1828,7 @@ static PyObject * hashbits_count_overlap(PyObject * self, PyObject * args) HashIntoType curve[2][100]; try { - hashbits->consume_fasta_overlap(filename, curve, *ht2, total_reads, n_consumed, - _report_fn, callback_obj); + hashbits->consume_fasta_overlap(filename, curve, *ht2, total_reads, n_consumed); } catch (_khmer_signal &e) { PyErr_SetString(PyExc_IOError, e.get_message().c_str()); return NULL; @@ -2247,15 +2186,13 @@ static PyObject * hashbits_do_subset_partition(PyObject * self, khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; - PyObject * callback_obj = NULL; HashIntoType start_kmer = 0, end_kmer = 0; PyObject * break_on_stop_tags_o = NULL; PyObject * stop_big_traversals_o = NULL; - if (!PyArg_ParseTuple(args, "|KKOOO", &start_kmer, &end_kmer, + if (!PyArg_ParseTuple(args, "|KKOO", &start_kmer, &end_kmer, &break_on_stop_tags_o, - &stop_big_traversals_o, - &callback_obj)) { + &stop_big_traversals_o)) { return NULL; } @@ -2273,8 +2210,7 @@ static PyObject * hashbits_do_subset_partition(PyObject * self, Py_BEGIN_ALLOW_THREADS subset_p = new SubsetPartition(hashbits); subset_p->do_partition(start_kmer, end_kmer, break_on_stop_tags, - stop_big_traversals, - _report_fn, callback_obj); + stop_big_traversals); Py_END_ALLOW_THREADS } catch (_khmer_signal &e) { return NULL; @@ -2350,9 +2286,8 @@ static PyObject * hashbits_consume_fasta(PyObject * self, PyObject * args) Hashbits * hashbits = me->hashbits; const char * filename; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "s|O", &filename, &callback_obj)) { + if (!PyArg_ParseTuple(args, "s", &filename)) { return NULL; } @@ -2362,8 +2297,7 @@ static PyObject * hashbits_consume_fasta(PyObject * self, PyObject * args) unsigned int total_reads = 0; try { - hashbits->consume_fasta(filename, total_reads, n_consumed, - _report_fn, callback_obj); + hashbits->consume_fasta(filename, total_reads, n_consumed); } catch (_khmer_signal &e) { PyErr_SetString(PyExc_IOError, e.get_message().c_str()); return NULL; @@ -2383,10 +2317,9 @@ static PyObject * hashbits_consume_fasta_with_reads_parser( Hashbits * hashbits = me->hashbits; PyObject * rparser_obj = NULL; - PyObject * callback_obj = NULL; if (!PyArg_ParseTuple( - args, "O|O", &rparser_obj, &callback_obj)) { + args, "O", &rparser_obj)) { return NULL; } @@ -2399,8 +2332,7 @@ static PyObject * hashbits_consume_fasta_with_reads_parser( char const * exc = NULL; Py_BEGIN_ALLOW_THREADS try { - hashbits->consume_fasta(rparser, total_reads, n_consumed, - _report_fn, callback_obj); + hashbits->consume_fasta(rparser, total_reads, n_consumed); } catch (_khmer_signal &e) { exc = e.get_message().c_str(); } @@ -2451,9 +2383,8 @@ static PyObject * hashbits_consume_fasta_and_tag(PyObject * self, Hashbits * hashbits = me->hashbits; const char * filename; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "s|O", &filename, &callback_obj)) { + if (!PyArg_ParseTuple(args, "s", &filename)) { return NULL; } @@ -2463,8 +2394,7 @@ static PyObject * hashbits_consume_fasta_and_tag(PyObject * self, unsigned int total_reads; try { - hashbits->consume_fasta_and_tag(filename, total_reads, n_consumed, - _report_fn, callback_obj); + hashbits->consume_fasta_and_tag(filename, total_reads, n_consumed); } catch (_khmer_signal &e) { PyErr_SetString(PyExc_IOError, e.get_message().c_str()); return NULL; @@ -2484,10 +2414,9 @@ static PyObject * hashbits_consume_fasta_and_tag_with_reads_parser( Hashbits * hashbits = me->hashbits; python::ReadParser_Object * rparser_obj = NULL; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple( args, "O!|O", &python::ReadParser_Type, - &rparser_obj, &callback_obj )) { + if (!PyArg_ParseTuple( args, "O!", &python::ReadParser_Type, + &rparser_obj)) { return NULL; } @@ -2500,7 +2429,7 @@ static PyObject * hashbits_consume_fasta_and_tag_with_reads_parser( Py_BEGIN_ALLOW_THREADS try { hashbits->consume_fasta_and_tag( - rparser, total_reads, n_consumed, _report_fn, callback_obj + rparser, total_reads, n_consumed ); } catch (_khmer_signal &e) { exc = e.get_message().c_str(); @@ -2523,9 +2452,8 @@ static PyObject * hashbits_consume_fasta_and_tag_with_stoptags(PyObject * self, Hashbits * hashbits = me->hashbits; const char * filename; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "s|O", &filename, &callback_obj)) { + if (!PyArg_ParseTuple(args, "s", &filename)) { return NULL; } @@ -2536,8 +2464,7 @@ static PyObject * hashbits_consume_fasta_and_tag_with_stoptags(PyObject * self, try { hashbits->consume_fasta_and_tag_with_stoptags(filename, - total_reads, n_consumed, - _report_fn, callback_obj); + total_reads, n_consumed); } catch (_khmer_signal &e) { PyErr_SetString(PyExc_IOError, e.get_message().c_str()); return NULL; @@ -2556,9 +2483,8 @@ static PyObject * hashbits_consume_partitioned_fasta(PyObject * self, Hashbits * hashbits = me->hashbits; const char * filename; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "s|O", &filename, &callback_obj)) { + if (!PyArg_ParseTuple(args, "s", &filename)) { return NULL; } @@ -2568,8 +2494,7 @@ static PyObject * hashbits_consume_partitioned_fasta(PyObject * self, unsigned int total_reads; try { - hashbits->consume_partitioned_fasta(filename, total_reads, n_consumed, - _report_fn, callback_obj); + hashbits->consume_partitioned_fasta(filename, total_reads, n_consumed); } catch (_khmer_signal &e) { PyErr_SetString(PyExc_IOError, e.get_message().c_str()); return NULL; @@ -2729,12 +2654,10 @@ static PyObject * hashbits_output_partitions(PyObject * self, PyObject * args) const char * filename = NULL; const char * output = NULL; - PyObject * callback_obj = NULL; PyObject * output_unassigned_o = NULL; - if (!PyArg_ParseTuple(args, "ss|OO", &filename, &output, - &output_unassigned_o, - &callback_obj)) { + if (!PyArg_ParseTuple(args, "ss|O", &filename, &output, + &output_unassigned_o)) { return NULL; } @@ -2749,9 +2672,7 @@ static PyObject * hashbits_output_partitions(PyObject * self, PyObject * args) SubsetPartition * subset_p = hashbits->partition; n_partitions = subset_p->output_partitioned_file(filename, output, - output_unassigned, - _report_fn, - callback_obj); + output_unassigned); } catch (_khmer_signal &e) { PyErr_SetString(PyExc_IOError, e.get_message().c_str()); return NULL; @@ -2771,10 +2692,9 @@ static PyObject * hashbits_find_unpart(PyObject * self, PyObject * args) const char * filename = NULL; PyObject * traverse_o = NULL; PyObject * stop_big_traversals_o = NULL; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "sOO|O", &filename, &traverse_o, - &stop_big_traversals_o, &callback_obj)) { + if (!PyArg_ParseTuple(args, "sOO", &filename, &traverse_o, + &stop_big_traversals_o)) { return NULL; } @@ -2785,8 +2705,7 @@ static PyObject * hashbits_find_unpart(PyObject * self, PyObject * args) try { SubsetPartition * subset_p = hashbits->partition; n_singletons = subset_p->find_unpart(filename, traverse, - stop_big_traversals, - _report_fn, callback_obj); + stop_big_traversals); } catch (_khmer_signal &e) { return NULL; } @@ -2804,14 +2723,13 @@ static PyObject * hashbits_filter_if_present(PyObject * self, PyObject * args) const char * filename = NULL; const char * output = NULL; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "ss|O", &filename, &output, &callback_obj)) { + if (!PyArg_ParseTuple(args, "ss", &filename, &output)) { return NULL; } try { - hashbits->filter_if_present(filename, output, _report_fn, callback_obj); + hashbits->filter_if_present(filename, output); } catch (_khmer_signal &e) { return NULL; } @@ -3801,9 +3719,8 @@ static PyObject * labelhash_consume_fasta_and_tag_with_labels( std::ofstream outfile; const char * filename; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "s|O", &filename, &callback_obj)) { + if (!PyArg_ParseTuple(args, "s", &filename)) { return NULL; } @@ -3813,7 +3730,7 @@ static PyObject * labelhash_consume_fasta_and_tag_with_labels( //Py_BEGIN_ALLOW_THREADS try { hb->consume_fasta_and_tag_with_labels(filename, total_reads, - n_consumed, _report_fn, callback_obj); + n_consumed); } catch (_khmer_signal &e) { exc = e.get_message().c_str(); } catch (khmer_file_exception &e) { @@ -3836,9 +3753,8 @@ static PyObject * labelhash_consume_partitioned_fasta_and_tag_with_labels( LabelHash * labelhash = me->labelhash; const char * filename; - PyObject * callback_obj = NULL; - if (!PyArg_ParseTuple(args, "s|O", &filename, &callback_obj)) { + if (!PyArg_ParseTuple(args, "s", &filename)) { return NULL; } @@ -3849,7 +3765,7 @@ static PyObject * labelhash_consume_partitioned_fasta_and_tag_with_labels( try { labelhash->consume_partitioned_fasta_and_tag_with_labels(filename, - total_reads, n_consumed, _report_fn, callback_obj); + total_reads, n_consumed); } catch (_khmer_signal &e) { PyErr_SetString(PyExc_IOError, "error parsing in consume_partitioned_fasta_and_tag_with_labels"); @@ -4635,21 +4551,6 @@ static PyObject * murmur3_forward_hash_no_rc(PyObject * self, PyObject * args) return PyLong_FromUnsignedLongLong(_hash_murmur_forward(kmer)); } -static PyObject * set_reporting_callback(PyObject * self, PyObject * args) -{ - PyObject * o; - - if (!PyArg_ParseTuple(args, "O", &o)) { - return NULL; - } - - Py_XDECREF(_callback_obj); - Py_INCREF(o); - _callback_obj = o; - - Py_RETURN_NONE; -} - // // technique for resolving literal below found here: // https://gcc.gnu.org/onlinedocs/gcc-4.9.1/cpp/Stringification.html @@ -4721,10 +4622,6 @@ static PyMethodDef KhmerMethods[] = { "Calculate the hash value of a k-mer using MurmurHash3 " "(no reverse complement)", }, - { - "set_reporting_callback", set_reporting_callback, - METH_VARARGS, "", - }, { "get_version_cpp", get_version_cpp, METH_VARARGS, "return the VERSION c++ compiler option" diff --git a/lib/hashbits.cc b/lib/hashbits.cc index ab4694247f..045de3b8e8 100644 --- a/lib/hashbits.cc +++ b/lib/hashbits.cc @@ -163,9 +163,7 @@ unsigned int Hashbits::check_and_process_read_overlap(std::string &read, void Hashbits::consume_fasta_overlap(const std::string &filename, HashIntoType curve[2][100],Hashbits &ht2, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback, - void * callback_data) + unsigned long long &n_consumed) { total_reads = 0; n_consumed = 0; @@ -224,15 +222,6 @@ void Hashbits::consume_fasta_overlap(const std::string &filename, curve[0][total_reads/block_size-1] = n_overlap_kmers(); curve[1][total_reads/block_size-1] = n_unique_kmers(); } - // run callback, if specified - if (total_reads % CALLBACK_PERIOD == 0 && callback) { - try { - callback("consume_fasta", callback_data, total_reads, n_consumed); - } catch (...) { - throw; - } - } - } // while delete parser; diff --git a/lib/hashbits.hh b/lib/hashbits.hh index 74a7d14ccb..cd9f42b914 100644 --- a/lib/hashbits.hh +++ b/lib/hashbits.hh @@ -81,11 +81,7 @@ public: HashIntoType curve[2][100], khmer::Hashbits &ht2, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback, - void * callback_data); - - + unsigned long long &n_consumed); // just for overlap k-mer counting! unsigned int check_and_process_read_overlap(std::string &read, diff --git a/lib/hashtable.cc b/lib/hashtable.cc index 1a7bc99a6e..5bfa5c51b6 100644 --- a/lib/hashtable.cc +++ b/lib/hashtable.cc @@ -120,8 +120,7 @@ void Hashtable:: consume_fasta( std:: string const &filename, - unsigned int &total_reads, unsigned long long &n_consumed, - CallbackFn callback, void * callback_data + unsigned int &total_reads, unsigned long long &n_consumed ) { IParser * parser = @@ -129,8 +128,7 @@ consume_fasta( consume_fasta( parser, - total_reads, n_consumed, - callback, callback_data + total_reads, n_consumed ); delete parser; @@ -140,13 +138,9 @@ void Hashtable:: consume_fasta( read_parsers:: IParser * parser, - unsigned int &total_reads, unsigned long long &n_consumed, - CallbackFn callback, void * callback_data + unsigned int &total_reads, unsigned long long &n_consumed ) { -#if (0) // Note: Used with callback - currently disabled. - unsigned long long int n_consumed_LOCAL = 0; -#endif Read read; // Iterate through the reads and consume their k-mers. @@ -159,28 +153,8 @@ consume_fasta( unsigned int this_n_consumed = check_and_process_read(read.sequence, is_valid); -#if (0) // Note: Used with callback - currently disabled. - n_consumed_LOCAL = __sync_add_and_fetch( &n_consumed, this_n_consumed ); -#else __sync_add_and_fetch( &n_consumed, this_n_consumed ); -#endif __sync_add_and_fetch( &total_reads, 1 ); - - // TODO: Figure out alternative to callback into Python VM - // Cannot use in multi-threaded operation. -#if (0) - // run callback, if specified - if (callback && (0 == (total_reads_LOCAL % CALLBACK_PERIOD))) { - try { - callback( - "consume_fasta", callback_data, - total_reads_LOCAL, n_consumed_LOCAL - ); - } catch (...) { - throw; - } - } -#endif // 0 } catch (read_parsers::NoMoreReadsAvailable) { } @@ -445,8 +419,7 @@ void Hashtable:: consume_fasta_and_tag( std:: string const &filename, - unsigned int &total_reads, unsigned long long &n_consumed, - CallbackFn callback, void * callback_data + unsigned int &total_reads, unsigned long long &n_consumed ) { IParser * parser = @@ -454,8 +427,7 @@ consume_fasta_and_tag( consume_fasta_and_tag( parser, - total_reads, n_consumed, - callback, callback_data + total_reads, n_consumed ); delete parser; @@ -465,13 +437,9 @@ void Hashtable:: consume_fasta_and_tag( read_parsers:: IParser * parser, - unsigned int &total_reads, unsigned long long &n_consumed, - CallbackFn callback, void * callback_data + unsigned int &total_reads, unsigned long long &n_consumed ) { -#if (0) // Note: Used with callback - currently disabled. - unsigned long long int n_consumed_LOCAL = 0; -#endif Read read; // TODO? Delete the following assignments. @@ -487,30 +455,9 @@ consume_fasta_and_tag( unsigned long long this_n_consumed = 0; consume_sequence_and_tag( read.sequence, this_n_consumed ); -#if (0) // Note: Used with callback - currently disabled. - n_consumed_LOCAL = __sync_add_and_fetch( &n_consumed, this_n_consumed ); -#else __sync_add_and_fetch( &n_consumed, this_n_consumed ); -#endif __sync_add_and_fetch( &total_reads, 1 ); } - - // TODO: Figure out alternative to callback into Python VM - // Cannot use in multi-threaded operation. -#if (0) - // run callback, if specified - if (total_reads_TL % CALLBACK_PERIOD == 0 && callback) { - std::cout << "n tags: " << all_tags.size() << "\n"; - try { - callback("consume_fasta_and_tag", callback_data, total_reads_TL, - n_consumed); - } catch (...) { - delete parser; - throw; - } - } -#endif // 0 - } // while reads left for parser } @@ -523,9 +470,7 @@ consume_fasta_and_tag( void Hashtable::consume_fasta_and_tag_with_stoptags(const std::string &filename, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback, - void * callback_data) + unsigned long long &n_consumed) { total_reads = 0; n_consumed = 0; @@ -614,17 +559,6 @@ void Hashtable::consume_fasta_and_tag_with_stoptags(const std::string &filename, // reset the sequence info, increment read number total_reads++; - // run callback, if specified - if (total_reads % CALLBACK_PERIOD == 0 && callback) { - std::cout << "n tags: " << all_tags.size() << "\n"; - try { - callback("consume_fasta_and_tag", callback_data, total_reads, - n_consumed); - } catch (...) { - delete parser; - throw; - } - } } delete parser; } @@ -655,9 +589,7 @@ void Hashtable::divide_tags_into_subsets(unsigned int subset_size, void Hashtable::consume_partitioned_fasta(const std::string &filename, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback, - void * callback_data) + unsigned long long &n_consumed) { total_reads = 0; n_consumed = 0; @@ -696,17 +628,6 @@ void Hashtable::consume_partitioned_fasta(const std::string &filename, // reset the sequence info, increment read number total_reads++; - - // run callback, if specified - if (total_reads % CALLBACK_PERIOD == 0 && callback) { - try { - callback("consume_partitioned_fasta", callback_data, total_reads, - n_consumed); - } catch (...) { - delete parser; - throw; - } - } } delete parser; @@ -926,9 +847,7 @@ const } void Hashtable::filter_if_present(const std::string &infilename, - const std::string &outputfile, - CallbackFn callback, - void * callback_data) + const std::string &outputfile) { IParser* parser = IParser::get_parser(infilename); ofstream outfile(outputfile.c_str()); @@ -964,18 +883,6 @@ void Hashtable::filter_if_present(const std::string &infilename, } total_reads++; - - // run callback, if specified - if (total_reads % CALLBACK_PERIOD == 0 && callback) { - try { - callback("filter_if_present", callback_data,total_reads, reads_kept); - } catch (...) { - delete parser; - parser = NULL; - outfile.close(); - throw; - } - } } } diff --git a/lib/hashtable.hh b/lib/hashtable.hh index b6fa88632b..fc08c57732 100644 --- a/lib/hashtable.hh +++ b/lib/hashtable.hh @@ -281,18 +281,14 @@ public: void consume_fasta( std::string const &filename, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback = NULL, - void * callback_data = NULL + unsigned long long &n_consumed ); // Count every k-mer from a stream of FASTA or FASTQ reads, // using the supplied parser. void consume_fasta( read_parsers:: IParser * parser, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback = NULL, - void * callback_data = NULL + unsigned long long &n_consumed ); void get_median_count(const std::string &s, @@ -359,9 +355,7 @@ public: void consume_fasta_and_tag( std::string const &filename, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback = NULL, - void * callback_data = NULL + unsigned long long &n_consumed ); // Count every k-mer from a stream of FASTA or FASTQ reads, @@ -370,9 +364,7 @@ public: void consume_fasta_and_tag( read_parsers:: IParser * parser, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback = NULL, - void * callback_data = NULL + unsigned long long &n_consumed ); void consume_sequence_and_tag(const std::string& seq, @@ -382,9 +374,7 @@ public: void consume_fasta_and_tag_with_stoptags(const std::string &filename, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback = 0, - void * callback_data = 0); + unsigned long long &n_consumed); void consume_fasta_and_traverse(const std::string &filename, unsigned int distance, unsigned int big_threshold, @@ -393,17 +383,13 @@ public: void consume_partitioned_fasta(const std::string &filename, unsigned int &total_reads, - unsigned long long &n_consumed, - CallbackFn callback = 0, - void * callback_data = 0); + unsigned long long &n_consumed); virtual BoundedCounterType test_and_set_bits(const char * kmer) = 0; virtual BoundedCounterType test_and_set_bits(HashIntoType khash) = 0; void filter_if_present(const std::string &infilename, - const std::string &outputfilename, - CallbackFn callback=0, - void * callback_data=0); + const std::string &outputfilename); unsigned int count_kmers_within_radius(HashIntoType kmer_f, HashIntoType kmer_r, diff --git a/tests/test_c_wrapper.py b/tests/test_c_wrapper.py deleted file mode 100644 index 58c1f96d46..0000000000 --- a/tests/test_c_wrapper.py +++ /dev/null @@ -1,48 +0,0 @@ -# -# This file is part of khmer, http://github.com/ged-lab/khmer/, and is -# Copyright (C) Michigan State University, 2009-2013. It is licensed under -# the three-clause BSD license; see doc/LICENSE.txt. -# Contact: khmer-project@idyll.org -# -import os -import khmer - -import khmer_tst_utils as utils - -reads_filename = utils.get_test_data('test-reads.fa') - -N_READS = 25000 - - -def teardown(): - utils.cleanup() - - -class GoodException(Exception): - pass - - -def callback_raise(info, n_reads, other): - raise GoodException - - -def setup(): - khmer.set_reporting_callback(None) - - -def teardown(): - khmer.reset_reporting_callback() - - -def test_raise_in_consume_fasta(): - return # @CTB - kh = khmer.new_hashtable(4, 4 ** 4) - - try: - n, _ = kh.consume_fasta(reads_filename, 0, 0, callback_raise) - print n - assert 0 - except GoodException: - pass - except: - raise diff --git a/tests/test_read_parsers.py b/tests/test_read_parsers.py index 42c8e72ae9..4e38730dda 100644 --- a/tests/test_read_parsers.py +++ b/tests/test_read_parsers.py @@ -164,9 +164,6 @@ def test_old_illumina_pair_mating(): import threading - # Note: This file, when used in conjunction with a 65600 byte per-thread - # prefetch buffer, tests the paired read mating logic with the - # old Illumina read name format. rparser = ReadParser(utils.get_test_data("test-reads.fa")) def thread_1_runtime(rparser): @@ -177,7 +174,6 @@ def thread_2_runtime(rparser): for readnum, read in enumerate(rparser): if 0 == readnum: pass - # assert "850:2:1:1198:16820/1" == read.name, read.name t1 = threading.Thread(target=thread_1_runtime, args=[rparser]) t2 = threading.Thread(target=thread_2_runtime, args=[rparser]) From 98d7f4dc387b462fafd7187913b5220e16a3f672 Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 18:03:27 -0500 Subject: [PATCH 60/83] fix pep8 --- tests/test_scripts.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_scripts.py b/tests/test_scripts.py index a85ab558e8..e10f7c79a6 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1194,21 +1194,21 @@ def test_abundance_dist(): assert line == '1 96 96 0.98', line line = fp.next().strip() assert line == '1001 2 98 1.0', line - + os.remove(outfile) args = ['-z', '--csv', htfile, infile, outfile] utils.runscript(script, args, in_dir) fp = iter(open(outfile)) line = fp.next().strip() - assert line == 'k-mer_abundance,K-mer_count,Cumulative_count,Fraction_of_total_distinct_k-mers', line + assert (line == 'k-mer_abundance,K-mer_count,Cumulative_count' + ',Fraction_of_total_distinct_k-mers'), line line = fp.next().strip() assert line == '1,96,96,0.98', line line = fp.next().strip() assert line == '1001,2,98,1.0', line - def test_abundance_dist_nobigcount(): infile = utils.get_temp_filename('test.fa') outfile = utils.get_temp_filename('test.dist') From 595d667a9960acb9c274dfa63397baa6e09f2a46 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 18:34:47 -0500 Subject: [PATCH 61/83] text update/typos for split-paired-reads and count-median --- scripts/count-median.py | 9 +++++---- scripts/split-paired-reads.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/count-median.py b/scripts/count-median.py index 023b1b9cd9..238744cefd 100755 --- a/scripts/count-median.py +++ b/scripts/count-median.py @@ -37,10 +37,11 @@ def get_parser(): to estimate expression levels (mRNAseq) or coverage (genomic/metagenomic). The output file contains sequence id, median, average, stddev, and - seq length; fields are separated by spaces. For khmer 1.x, - sequence names are split at the first space, which means that some - sequence formats (e.g. paired FASTQ in Casava 1.8 format) will yield - uninformative names. Use :option:`--csv` to fix this behavior. + seq length; fields are separated by spaces. For khmer 1.x + count-median.py will split sequence names at the first space which + means that some sequence formats (e.g. paired FASTQ in Casava 1.8 + format) will yield uninformative names. Use :option:`--csv` to + fix this behavior. :option:`--csv` will output a comma-separated value file with column headers, and the entire sequence name will be kept. diff --git a/scripts/split-paired-reads.py b/scripts/split-paired-reads.py index f92eda1281..4ee8d1ce48 100755 --- a/scripts/split-paired-reads.py +++ b/scripts/split-paired-reads.py @@ -52,7 +52,7 @@ def get_parser(): split-paired-reads.py -o ~/reads-go-here tests/test-data/paired.fq - Example:: + Example:: split-paired-reads.py -1 reads.1 -2 reads.2 tests/test-data/paired.fq """ From 8c709433405c39713848b05ba19302c27c0ca568 Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 18:43:11 -0500 Subject: [PATCH 62/83] change column names --- ChangeLog | 4 ++-- scripts/abundance-dist.py | 5 ++--- tests/test_scripts.py | 3 +-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0709990528..5965cd6051 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,8 +18,8 @@ 2015-02-23 Tamer A. Mansour - * abundance-dist.py: Use CSV format for the histogram. Includes column - headers. + * scripts/abundance-dist.py: Use CSV format for the histogram. Includes + column headers. * tests/test_scripts.py: add coverage for the new --csv option in abundance-dist.py diff --git a/scripts/abundance-dist.py b/scripts/abundance-dist.py index 3257ab12a8..f63496691d 100755 --- a/scripts/abundance-dist.py +++ b/scripts/abundance-dist.py @@ -102,9 +102,8 @@ def main(): if args.csv: hash_fp_csv = csv.writer(hash_fp) # write headers: - hash_fp_csv.writerow(['k-mer_abundance', 'K-mer_count', - 'Cumulative_count', - 'Fraction_of_total_distinct_k-mers']) + hash_fp_csv.writerow(['abundance', 'count', 'cumulative', + 'cumulative_fraction']) sofar = 0 for _, i in enumerate(abundances): diff --git a/tests/test_scripts.py b/tests/test_scripts.py index e10f7c79a6..137eba5e7e 100644 --- a/tests/test_scripts.py +++ b/tests/test_scripts.py @@ -1201,8 +1201,7 @@ def test_abundance_dist(): fp = iter(open(outfile)) line = fp.next().strip() - assert (line == 'k-mer_abundance,K-mer_count,Cumulative_count' - ',Fraction_of_total_distinct_k-mers'), line + assert (line == 'abundance,count,cumulative,cumulative_fraction'), line line = fp.next().strip() assert line == '1,96,96,0.98', line line = fp.next().strip() From cb1874ae1a695b8af54aec247b4242617e1d32d1 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 23 Feb 2015 18:49:45 -0500 Subject: [PATCH 63/83] remove redundant --csv explanation --- scripts/count-median.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/count-median.py b/scripts/count-median.py index 238744cefd..d72f8b24ce 100755 --- a/scripts/count-median.py +++ b/scripts/count-median.py @@ -43,9 +43,6 @@ def get_parser(): format) will yield uninformative names. Use :option:`--csv` to fix this behavior. - :option:`--csv` will output a comma-separated value file with column - headers, and the entire sequence name will be kept. - Example:: count-median.py counts.ct tests/test-data/test-reads.fq.gz medians.txt From 893c90a25ef42738cf1fc66dea3363154facdfc6 Mon Sep 17 00:00:00 2001 From: Kevin Murray Date: Mon, 23 Feb 2015 14:32:52 +1100 Subject: [PATCH 64/83] Make interleave-reads.py print output name nicely Currently, interleave-reads.py just prints the open file object. Now, it will print output.name, i.e. the file path (or '' for stdout) --- scripts/interleave-reads.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/interleave-reads.py b/scripts/interleave-reads.py index 45917195f3..1a51a00035 100755 --- a/scripts/interleave-reads.py +++ b/scripts/interleave-reads.py @@ -127,7 +127,7 @@ def main(): write_record_pair(read1, read2, args.output) print >> sys.stderr, 'final: interleaved %d pairs' % counter - print >> sys.stderr, 'output written to', args.output + print >> sys.stderr, 'output written to', args.output.name if __name__ == '__main__': main() From 4bc942a14895786cb8e6537fcb55759215002e42 Mon Sep 17 00:00:00 2001 From: Kevin Murray Date: Mon, 23 Feb 2015 14:35:54 +1100 Subject: [PATCH 65/83] Document #827 in the changelog --- ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ChangeLog b/ChangeLog index 706d3f92a0..45fdbdd1d2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-02-24 Kevin Murray + + * scripts/interleave-reads.py: Make the output file name print nicely. + 2015-02-23 Titus Brown * khmer/utils.py: added 'check_is_left' and 'check_is_right' functions; From 45785182acfcf478c1bba3183721e3850c6c5d75 Mon Sep 17 00:00:00 2001 From: "Michael R. Crusoe" Date: Mon, 23 Feb 2015 23:42:52 -0500 Subject: [PATCH 66/83] remove examples/stamps testing for now --- ChangeLog | 5 +++++ jenkins-build.sh | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 45fdbdd1d2..0524fdf81a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2015-02-24 Michael R. Crusoe + + * jenkins-build.sh: remove examples/stamps/do.sh testing for now; takes too + long to run on every build. Related to #836 + 2015-02-24 Kevin Murray * scripts/interleave-reads.py: Make the output file name print nicely. diff --git a/jenkins-build.sh b/jenkins-build.sh index 5af67976f9..23e731f836 100755 --- a/jenkins-build.sh +++ b/jenkins-build.sh @@ -65,5 +65,6 @@ then make sloccount.sc fi -bash -ex -c 'cd examples/stamps/; ./do.sh' || { echo examples/stamps/do.sh no longer runs; /bin/false; } +# takes too long to run on every build +#bash -ex -c 'cd examples/stamps/; ./do.sh' || { echo examples/stamps/do.sh no longer runs; /bin/false; } From bb771ac9e921df635301d2afeeb6e66a2c81813b Mon Sep 17 00:00:00 2001 From: drtamermansour Date: Mon, 23 Feb 2015 23:53:35 -0500 Subject: [PATCH 67/83] update Changelog --- ChangeLog | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5965cd6051..66379e534c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-02-23 Tamer A. Mansour + + * scripts/abundance-dist.py: Use CSV format for the histogram. Includes + column headers. + * tests/test_scripts.py: add coverage for the new --csv option in + abundance-dist.py + 2015-02-23 Titus Brown * setup.cfg: set !linux flag by default, to avoid running tests that @@ -16,13 +23,6 @@ * setup.py: point to the latest screed release candidate to work around versioneer bug. -2015-02-23 Tamer A. Mansour - - * scripts/abundance-dist.py: Use CSV format for the histogram. Includes - column headers. - * tests/test_scripts.py: add coverage for the new --csv option in - abundance-dist.py - 2015-02-23 Tamer A. Mansour * examples/stamps/do.sh: the argument --savehash was changed to --savetable From 6f1af9146cf0ad5c8182de93bf6403a0274afba9 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Sun, 15 Feb 2015 20:35:19 -0500 Subject: [PATCH 68/83] PyInt/PyLong changes --- khmer/_khmermodule.cc | 83 ++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 37 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 7ca5c504e7..39ea0bc5f3 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -26,6 +26,15 @@ using namespace khmer; +// +// Python 2/3 compatibility: PyInt and PyLong +// + +#if (PY_MAJOR_VERSION >= 3) +#define PyInt_Check(arg) PyLong_Check(arg) +#define PyInt_AsLong(arg) PyLong_AsLong(arg) +#endif + // // Function necessary for Python loading: // @@ -550,7 +559,7 @@ _init_ReadParser_Type( ) // Place pair mode constants into class dictionary. int result; - PyObject * value = PyInt_FromLong( IParser:: PAIR_MODE_ALLOW_UNPAIRED ); + PyObject * value = PyLong_FromLong( IParser:: PAIR_MODE_ALLOW_UNPAIRED ); result = PyDict_SetItemString(cls_attrs_DICT, "PAIR_MODE_ALLOW_UNPAIRED", value); Py_XDECREF(value); @@ -559,7 +568,7 @@ _init_ReadParser_Type( ) return; } - value = PyInt_FromLong( IParser:: PAIR_MODE_IGNORE_UNPAIRED ); + value = PyLong_FromLong( IParser:: PAIR_MODE_IGNORE_UNPAIRED ); result = PyDict_SetItemString(cls_attrs_DICT, "PAIR_MODE_IGNORE_UNPAIRED", value ); Py_XDECREF(value); @@ -568,7 +577,7 @@ _init_ReadParser_Type( ) return; } - value = PyInt_FromLong( IParser:: PAIR_MODE_ERROR_ON_UNPAIRED ); + value = PyLong_FromLong( IParser:: PAIR_MODE_ERROR_ON_UNPAIRED ); result = PyDict_SetItemString(cls_attrs_DICT, "PAIR_MODE_ERROR_ON_UNPAIRED", value); Py_XDECREF(value); @@ -786,7 +795,7 @@ static PyObject * hash_count(PyObject * self, PyObject * args) counting->count(kmer); - return PyInt_FromLong(1); + return PyLong_FromLong(1); } static PyObject * hash_output_fasta_kmer_pos_freq(PyObject * self, @@ -804,7 +813,7 @@ static PyObject * hash_output_fasta_kmer_pos_freq(PyObject * self, counting->output_fasta_kmer_pos_freq(infile, outfile); - return PyInt_FromLong(0); + return PyLong_FromLong(0); } static PyObject * hash_consume_fasta(PyObject * self, PyObject * args) @@ -891,7 +900,7 @@ static PyObject * hash_consume(PyObject * self, PyObject * args) unsigned int n_consumed; n_consumed = counting->consume_string(long_str); - return PyInt_FromLong(n_consumed); + return PyLong_FromLong(n_consumed); } static PyObject * hash_get_min_count(PyObject * self, PyObject * args) @@ -914,7 +923,7 @@ static PyObject * hash_get_min_count(PyObject * self, PyObject * args) BoundedCounterType c = counting->get_min_count(long_str); unsigned int N = c; - return PyInt_FromLong(N); + return PyLong_FromLong(N); } static PyObject * hash_get_max_count(PyObject * self, PyObject * args) @@ -937,7 +946,7 @@ static PyObject * hash_get_max_count(PyObject * self, PyObject * args) BoundedCounterType c = counting->get_max_count(long_str); unsigned int N = c; - return PyInt_FromLong(N); + return PyLong_FromLong(N); } static PyObject * hash_get_median_count(PyObject * self, PyObject * args) @@ -1018,7 +1027,7 @@ static PyObject * hash_get(PyObject * self, PyObject * args) count = counting->get_count(s.c_str()); } - return PyInt_FromLong(count); + return PyLong_FromLong(count); } static PyObject * count_trim_on_abundance(PyObject * self, PyObject * args) @@ -1111,7 +1120,7 @@ static PyObject * count_find_spectral_error_positions(PyObject * self, return NULL; } for (Py_ssize_t i = 0; i < posns_size; i++) { - PyList_SET_ITEM(x, i, PyInt_FromLong(posns[i])); + PyList_SET_ITEM(x, i, PyLong_FromLong(posns[i])); } return x; @@ -1236,7 +1245,7 @@ static PyObject * hash_get_ksize(PyObject * self, PyObject * args) unsigned int k = counting->ksize(); - return PyInt_FromLong(k); + return PyLong_FromLong(k); } static PyObject * hash_get_hashsizes(PyObject * self, PyObject * args) @@ -1621,10 +1630,10 @@ static PyObject* _new_counting_hash(PyObject * self, PyObject * args) } for (Py_ssize_t i = 0; i < sizes_list_o_length; i++) { PyObject * size_o = PyList_GET_ITEM(sizes_list_o, i); - if (PyInt_Check(size_o)) { - sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); - } else if (PyLong_Check(size_o)) { + if (PyLong_Check(size_o)) { sizes.push_back((HashIntoType) PyLong_AsUnsignedLongLong(size_o)); + } else if (PyInt_Check(size_o)) { + sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); } else if (PyFloat_Check(size_o)) { sizes.push_back((HashIntoType) PyFloat_AS_DOUBLE(size_o)); } else { @@ -1873,7 +1882,7 @@ static PyObject * hashbits_n_tags(PyObject * self, PyObject * args) return NULL; } - return PyInt_FromSize_t(hashbits->n_tags()); + return PyLong_FromSize_t(hashbits->n_tags()); } static PyObject * hashbits_count(PyObject * self, PyObject * args) @@ -1895,7 +1904,7 @@ static PyObject * hashbits_count(PyObject * self, PyObject * args) hashbits->count(kmer); - return PyInt_FromLong(1); + return PyLong_FromLong(1); } static PyObject * hashbits_consume(PyObject * self, PyObject * args) @@ -1918,7 +1927,7 @@ static PyObject * hashbits_consume(PyObject * self, PyObject * args) unsigned int n_consumed; n_consumed = hashbits->consume_string(long_str); - return PyInt_FromLong(n_consumed); + return PyLong_FromLong(n_consumed); } static PyObject * hashbits_print_stop_tags(PyObject * self, PyObject * args) @@ -2044,7 +2053,7 @@ static PyObject * hashbits_repartition_largest_partition(PyObject * self, unsigned long next_largest = subset_p->repartition_largest_partition(distance, threshold, frequency, *counting); - return PyInt_FromLong(next_largest); + return PyLong_FromLong(next_largest); } static PyObject * hashbits_get(PyObject * self, PyObject * args) @@ -2078,7 +2087,7 @@ static PyObject * hashbits_get(PyObject * self, PyObject * args) return NULL; } - return PyInt_FromLong(count); + return PyLong_FromLong(count); } static PyObject * hashbits_calc_connected_graph_size(PyObject * self, @@ -2121,7 +2130,7 @@ static PyObject * hashbits_kmer_degree(PyObject * self, PyObject * args) return NULL; } - return PyInt_FromLong(hashbits->kmer_degree(kmer_s)); + return PyLong_FromLong(hashbits->kmer_degree(kmer_s)); } static PyObject * hashbits_trim_on_stoptags(PyObject * self, PyObject * args) @@ -2566,7 +2575,7 @@ static PyObject * hashbits_assign_partition_id(PyObject * self, PyObject *args) p = hashbits->partition->assign_partition_id(ppi->kmer, ppi->tagged_kmers); - return PyInt_FromLong(p); + return PyLong_FromLong(p); } static PyObject * hashbits_add_tag(PyObject * self, PyObject *args) @@ -2681,7 +2690,7 @@ static PyObject * hashbits_output_partitions(PyObject * self, PyObject * args) return NULL; } - return PyInt_FromLong(n_partitions); + return PyLong_FromLong(n_partitions); } static PyObject * hashbits_find_unpart(PyObject * self, PyObject * args) @@ -2710,7 +2719,7 @@ static PyObject * hashbits_find_unpart(PyObject * self, PyObject * args) return NULL; } - return PyInt_FromLong(n_singletons); + return PyLong_FromLong(n_singletons); // Py_INCREF(Py_None); // return Py_None; @@ -3032,7 +3041,7 @@ static PyObject * hashbits__get_tag_density(PyObject * self, PyObject * args) unsigned int d = hashbits->_get_tag_density(); - return PyInt_FromLong(d); + return PyLong_FromLong(d); } static PyObject * hashbits__validate_subset_partitionmap(PyObject * self, @@ -3081,7 +3090,7 @@ static PyObject * hashbits_join_partitions(PyObject * self, PyObject * args) p1 = hashbits->partition->join_partitions(p1, p2); - return PyInt_FromLong(p1); + return PyLong_FromLong(p1); } static PyObject * hashbits_get_partition_id(PyObject * self, PyObject * args) @@ -3098,7 +3107,7 @@ static PyObject * hashbits_get_partition_id(PyObject * self, PyObject * args) PartitionID partition_id; partition_id = hashbits->partition->get_partition_id(kmer); - return PyInt_FromLong(partition_id); + return PyLong_FromLong(partition_id); } static PyObject * hashbits_is_single_partition(PyObject * self, @@ -3190,7 +3199,7 @@ static PyObject * hashbits_get_ksize(PyObject * self, PyObject * args) unsigned int k = hashbits->ksize(); - return PyInt_FromLong(k); + return PyLong_FromLong(k); } @@ -3364,10 +3373,10 @@ static PyObject* khmer_hashbits_new(PyTypeObject * type, PyObject * args, Py_ssize_t sizes_list_o_length = PyList_GET_SIZE(sizes_list_o); for (Py_ssize_t i = 0; i < sizes_list_o_length; i++) { PyObject * size_o = PyList_GET_ITEM(sizes_list_o, i); - if (PyInt_Check(size_o)) { - sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); - } else if (PyLong_Check(size_o)) { + if (PyLong_Check(size_o)) { sizes.push_back((HashIntoType) PyLong_AsUnsignedLongLong(size_o)); + } else if (PyInt_Check(size_o)) { + sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); } else if (PyFloat_Check(size_o)) { sizes.push_back((HashIntoType) PyFloat_AS_DOUBLE(size_o)); } else { @@ -3645,10 +3654,10 @@ static PyObject * khmer_labelhash_new(PyTypeObject *type, PyObject *args, Py_ssize_t sizes_list_o_length = PyList_GET_SIZE(sizes_list_o); for (Py_ssize_t i = 0; i < sizes_list_o_length; i++) { PyObject * size_o = PyList_GET_ITEM(sizes_list_o, i); - if (PyInt_Check(size_o)) { - sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); - } else if (PyLong_Check(size_o)) { + if (PyLong_Check(size_o)) { sizes.push_back((HashIntoType) PyLong_AsUnsignedLongLong(size_o)); + } else if (PyInt_Check(size_o)) { + sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); } else if (PyFloat_Check(size_o)) { sizes.push_back((HashIntoType) PyFloat_AS_DOUBLE(size_o)); } else { @@ -3969,7 +3978,7 @@ static PyObject * labelhash_n_labels(PyObject * self, PyObject * args) return NULL; } - return PyInt_FromSize_t(labelhash->n_labels()); + return PyLong_FromSize_t(labelhash->n_labels()); } static PyMethodDef khmer_labelhash_methods[] = { @@ -4155,10 +4164,10 @@ static PyObject* _new_hashbits(PyObject * self, PyObject * args) Py_ssize_t sizes_list_o_length = PyList_GET_SIZE(sizes_list_o); for (Py_ssize_t i = 0; i < sizes_list_o_length; i++) { PyObject * size_o = PyList_GET_ITEM(sizes_list_o, i); - if (PyInt_Check(size_o)) { - sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); - } else if (PyLong_Check(size_o)) { + if (PyLong_Check(size_o)) { sizes.push_back((HashIntoType) PyLong_AsUnsignedLongLong(size_o)); + } else if (PyInt_Check(size_o)) { + sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); } else if (PyFloat_Check(size_o)) { sizes.push_back((HashIntoType) PyFloat_AS_DOUBLE(size_o)); } else { From f8a6e57d2f1505f0ecb911c00f7d19df938626c6 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Mon, 16 Feb 2015 17:02:12 -0500 Subject: [PATCH 69/83] PyBytes and PyString compat --- khmer/_khmermodule.cc | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 39ea0bc5f3..a879055822 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -35,6 +35,15 @@ using namespace khmer; #define PyInt_AsLong(arg) PyLong_AsLong(arg) #endif +// +// Python 2/3 compatibility: PyBytes and PyString +// https://docs.python.org/2/howto/cporting.html#str-unicode-unification +// + +#include "bytesobject.h" + +using namespace khmer; + // // Function necessary for Python loading: // @@ -114,7 +123,7 @@ _debug_class_attrs( PyTypeObject &tobj ) _trace_logger( TraceLogger:: TLVL_DEBUG5, "\ttype '%s' dictionary key %d: '%s'\n", - tobj.tp_name, pos, PyString_AsString( key ) + tobj.tp_name, pos, PyBytes_AsString( key ) ); } #endif // WITH_INTERNAL_TRACING @@ -181,7 +190,7 @@ _Read_dealloc( PyObject * self ) #define KHMER_READ_STRING_GETTER( SELF, ATTR_NAME ) \ - PyString_FromString( \ + PyBytes_FromString( \ ((((Read_Object *)(SELF))->read)->ATTR_NAME).c_str( ) \ ) @@ -1015,8 +1024,8 @@ static PyObject * hash_get(PyObject * self, PyObject * args) if (PyInt_Check(arg)) { long pos = PyInt_AsLong(arg); count = counting->get_count((unsigned int) pos); - } else if (PyString_Check(arg)) { - std::string s = PyString_AsString(arg); + } else if (PyBytes_Check(arg)) { + std::string s = PyBytes_AsString(arg); if (strlen(s.c_str()) != counting->ksize()) { PyErr_SetString(PyExc_ValueError, @@ -1051,7 +1060,7 @@ static PyObject * count_trim_on_abundance(PyObject * self, PyObject * args) Py_END_ALLOW_THREADS; - PyObject * trim_seq = PyString_FromStringAndSize(seq, trim_at); + PyObject * trim_seq = PyBytes_FromStringAndSize(seq, trim_at); if (trim_seq == NULL) { return NULL; } @@ -1081,7 +1090,7 @@ static PyObject * count_trim_below_abundance(PyObject * self, PyObject * args) Py_END_ALLOW_THREADS; - PyObject * trim_seq = PyString_FromStringAndSize(seq, trim_at); + PyObject * trim_seq = PyBytes_FromStringAndSize(seq, trim_at); if (trim_seq == NULL) { return NULL; } @@ -2072,8 +2081,8 @@ static PyObject * hashbits_get(PyObject * self, PyObject * args) if (PyInt_Check(arg)) { long pos = PyInt_AsLong(arg); count = hashbits->get_count((unsigned int) pos); - } else if (PyString_Check(arg)) { - std::string s = PyString_AsString(arg); + } else if (PyBytes_Check(arg)) { + std::string s = PyBytes_AsString(arg); if (strlen(s.c_str()) < hashbits->ksize()) { PyErr_SetString(PyExc_ValueError, @@ -2151,7 +2160,7 @@ static PyObject * hashbits_trim_on_stoptags(PyObject * self, PyObject * args) Py_END_ALLOW_THREADS; - PyObject * trim_seq = PyString_FromStringAndSize(seq, trim_at); + PyObject * trim_seq = PyBytes_FromStringAndSize(seq, trim_at); if (trim_seq == NULL) { return NULL; } @@ -3244,7 +3253,7 @@ static PyObject * hashbits_extract_unique_paths(PyObject * self, } for (unsigned int i = 0; i < results.size(); i++) { - PyList_SET_ITEM(x, i, PyString_FromString(results[i].c_str())); + PyList_SET_ITEM(x, i, PyBytes_FromString(results[i].c_str())); } return x; @@ -4535,7 +4544,7 @@ static PyObject * reverse_hash(PyObject * self, PyObject * args) return NULL; } - return PyString_FromString(_revhash(val, ksize).c_str()); + return PyBytes_FromString(_revhash(val, ksize).c_str()); } static PyObject * murmur3_forward_hash(PyObject * self, PyObject * args) @@ -4572,7 +4581,7 @@ get_version_cpp( PyObject * self, PyObject * args ) #define xstr(s) str(s) #define str(s) #s std::string dVersion = xstr(VERSION); - return PyString_FromString(dVersion.c_str()); + return PyBytes_FromString(dVersion.c_str()); } From 6c1b038b8bb57b2a33571c1fbd3f13033a6304f3 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Mon, 16 Feb 2015 16:47:12 -0500 Subject: [PATCH 70/83] Change object initialization --- khmer/_khmermodule.cc | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index a879055822..029cb2ae9f 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -99,8 +99,6 @@ _common_init_Type( throw khmer_exception(); } - tobj.ob_size = 0; - tobj.ob_type = &PyType_Type; tobj.tp_name = name; tobj.tp_basicsize = sizeof( OBJECT ); tobj.tp_alloc = PyType_GenericAlloc; @@ -168,7 +166,7 @@ namespace python { -static PyTypeObject Read_Type = { PyObject_HEAD_INIT( NULL ) }; +static PyTypeObject Read_Type = { PyVarObject_HEAD_INIT(NULL, 0) }; typedef struct { @@ -285,8 +283,8 @@ _init_Read_Type( ) static PyTypeObject ReadParser_Type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("ReadParser_Object") - = { PyObject_HEAD_INIT( NULL ) }; -static PyTypeObject ReadPairIterator_Type = { PyObject_HEAD_INIT( NULL ) }; + = { PyVarObject_HEAD_INIT(NULL, 0) }; +static PyTypeObject ReadPairIterator_Type = { PyVarObject_HEAD_INIT(NULL, 0) }; typedef struct { @@ -678,8 +676,7 @@ static void khmer_subset_dealloc(PyObject *); static PyObject * khmer_subset_getattr(PyObject * obj, char * name); static PyTypeObject khmer_KSubsetPartitionType = { - PyObject_HEAD_INIT(NULL) - 0, + PyVarObject_HEAD_INIT(NULL, 0) "KSubset", sizeof(khmer_KSubsetPartitionObject), 0, khmer_subset_dealloc, /*tp_dealloc*/ @@ -1561,13 +1558,12 @@ khmer_counting_getattr(PyObject * obj, char * name) return Py_FindMethod(khmer_counting_methods, obj, name); } -#define is_counting_obj(v) ((v)->ob_type == &khmer_KCountingHashType) +#define is_counting_obj(v) (Py_TYPE(v) == &khmer_KCountingHashType) static PyTypeObject khmer_KCountingHashType CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCountingHashObject") = { - PyObject_HEAD_INIT(NULL) - 0, + PyVarObject_HEAD_INIT(NULL, 0) "KCountingHash", sizeof(khmer_KCountingHashObject), 0, khmer_counting_dealloc, /*tp_dealloc*/ @@ -1682,8 +1678,7 @@ static PyObject * khmer_hashbits_getattr(PyObject * obj, char * name); static PyTypeObject khmer_KHashbitsType CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashbitsObject") = { - PyObject_HEAD_INIT(NULL) - 0, + PyVarObject_HEAD_INIT(NULL, 0) "Hashbits", sizeof(khmer_KHashbitsObject), 0, (destructor)khmer_hashbits_dealloc, /*tp_dealloc*/ @@ -3412,7 +3407,7 @@ static int khmer_hashbits_init(khmer_KHashbitsObject * self, PyObject * args, return 0; } -#define is_hashbits_obj(v) ((v)->ob_type == &khmer_KHashbitsType) +#define is_hashbits_obj(v) (Py_TYPE(v) == &khmer_KHashbitsType) //////////////////////////////////////////////////////////////////////////// @@ -3624,7 +3619,7 @@ static int khmer_labelhash_init(khmer_KLabelHashObject * self, PyObject *args, static PyObject * khmer_labelhash_new(PyTypeObject * type, PyObject *args, PyObject *kwds); -#define is_labelhash_obj(v) ((v)->ob_type == &khmer_KLabelHashType) +#define is_labelhash_obj(v) (Py_TYPE(v) == &khmer_KLabelHashType) // // khmer_labelhash_dealloc -- clean up a labelhash object. @@ -3637,7 +3632,7 @@ static void khmer_labelhash_dealloc(PyObject* obj) delete self->labelhash; self->labelhash = NULL; - obj->ob_type->tp_free((PyObject*)self); + Py_TYPE(obj)->tp_free((PyObject*)obj); //PyObject_Del((PyObject *) obj); } @@ -4004,8 +3999,7 @@ static PyMethodDef khmer_labelhash_methods[] = { }; static PyTypeObject khmer_KLabelHashType = { - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ + PyVarObject_HEAD_INIT(NULL, 0) "_LabelHash", /* tp_name */ sizeof(khmer_KLabelHashObject), /* tp_basicsize */ 0, /* tp_itemsize */ @@ -4264,7 +4258,7 @@ static void khmer_hashbits_dealloc(PyObject* obj) delete self->hashbits; self->hashbits = NULL; - self->ob_type->tp_free((PyObject*)obj); + Py_TYPE(obj)->tp_free((PyObject*)obj); //PyObject_Del((PyObject *) obj); } @@ -4337,7 +4331,7 @@ static void khmer_hllcounter_dealloc(khmer_KHLLCounter_Object * obj) delete obj->hllcounter; obj->hllcounter = NULL; - obj->ob_type->tp_free((PyObject*)obj); + Py_TYPE(obj)->tp_free((PyObject*)obj); } static @@ -4443,8 +4437,7 @@ static PyMethodDef khmer_hllcounter_methods[] = { }; static PyTypeObject khmer_KHLLCounter_Type = { - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ + PyVarObject_HEAD_INIT(NULL, 0) "khmer.KHLLCounter", /* tp_name */ sizeof(khmer_KHLLCounter_Object), /* tp_basicsize */ 0, /* tp_itemsize */ @@ -4484,7 +4477,7 @@ static PyTypeObject khmer_KHLLCounter_Type = { khmer_hllcounter_new, /* tp_new */ }; -#define is_hllcounter_obj(v) ((v)->ob_type == &khmer_KHLLCounter_Type) +#define is_hllcounter_obj(v) (Py_TYPE(v) == &khmer_KHLLCounter_Type) ////////////////////////////// From 9f0f1aa5ab9de366bf27c240ec1acdc1f8cbac92 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Mon, 16 Feb 2015 23:41:23 -0500 Subject: [PATCH 71/83] Don't use getattr/Py_FindMethod anymore, proper initialization with PyType_Ready --- khmer/_khmermodule.cc | 66 +++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 029cb2ae9f..62e6e5ccc5 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -673,7 +673,6 @@ typedef struct { } khmer_KHashbitsObject; static void khmer_subset_dealloc(PyObject *); -static PyObject * khmer_subset_getattr(PyObject * obj, char * name); static PyTypeObject khmer_KSubsetPartitionType = { PyVarObject_HEAD_INIT(NULL, 0) @@ -681,7 +680,7 @@ static PyTypeObject khmer_KSubsetPartitionType = { 0, khmer_subset_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ - khmer_subset_getattr, /*tp_getattr*/ + 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ @@ -1552,12 +1551,6 @@ static PyMethodDef khmer_counting_methods[] = { {NULL, NULL, 0, NULL} /* sentinel */ }; -static PyObject * -khmer_counting_getattr(PyObject * obj, char * name) -{ - return Py_FindMethod(khmer_counting_methods, obj, name); -} - #define is_counting_obj(v) (Py_TYPE(v) == &khmer_KCountingHashType) static PyTypeObject khmer_KCountingHashType @@ -1568,7 +1561,7 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCountingHashObject") 0, khmer_counting_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ - khmer_counting_getattr, /*tp_getattr*/ + 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ @@ -1583,6 +1576,13 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCountingHashObject") 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ "counting hash object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + khmer_counting_methods, /* tp_methods */ }; // @@ -1673,7 +1673,6 @@ static PyObject* khmer_hashbits_new(PyTypeObject * type, PyObject * args, PyObject * kwds); static int khmer_hashbits_init(khmer_KHashbitsObject * self, PyObject * args, PyObject * kwds); -static PyObject * khmer_hashbits_getattr(PyObject * obj, char * name); static PyTypeObject khmer_KHashbitsType CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashbitsObject") @@ -1683,7 +1682,7 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashbitsObject") 0, (destructor)khmer_hashbits_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ - khmer_hashbits_getattr, /*tp_getattr*/ + 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ @@ -3348,12 +3347,6 @@ static PyMethodDef khmer_hashbits_methods[] = { {NULL, NULL, 0, NULL} /* sentinel */ }; -static PyObject * -khmer_hashbits_getattr(PyObject * obj, char * name) -{ - return Py_FindMethod(khmer_hashbits_methods, obj, name); -} - // __new__ for hashbits; necessary for proper subclassing // This will essentially do what the old factory function did. Unlike many __new__ // methods, we take our arguments here, because there's no "uninitialized" hashbits @@ -3596,12 +3589,6 @@ static PyMethodDef khmer_subset_methods[] = { {NULL, NULL, 0, NULL} /* sentinel */ }; -static PyObject * -khmer_subset_getattr(PyObject * obj, char * name) -{ - return Py_FindMethod(khmer_subset_methods, obj, name); -} - ///////////////// // LabelHash ///////////////// @@ -4115,7 +4102,7 @@ static PyTypeObject khmer_ReadAlignerType = { 0, /*tp_itemsize*/ (destructor)khmer_readaligner_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ - 0, /*tp_getattr*/ + 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ @@ -4130,21 +4117,21 @@ static PyTypeObject khmer_ReadAlignerType = { 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ "ReadAligner object", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - khmer_ReadAligner_methods, /* tp_methods */ - 0, /* tp_members */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + khmer_ReadAligner_methods, /* tp_methods */ + 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ - 0, /* tp_init */ + 0, /* tp_init */ 0, /* tp_alloc */ khmer_ReadAligner_new, /* tp_new */ }; @@ -4645,7 +4632,14 @@ init_khmer(void) { using namespace python; - khmer_KCountingHashType.ob_type = &PyType_Type; + if (PyType_Ready(&khmer_KCountingHashType) < 0) { + return; + } + + khmer_KSubsetPartitionType.tp_methods = khmer_subset_methods; + if (PyType_Ready(&khmer_KSubsetPartitionType) < 0) { + return; + } // implemented __new__ for Hashbits; keeping factory func around as well // for backwards compat with old scripts @@ -4662,6 +4656,10 @@ init_khmer(void) return; } + if (PyType_Ready(&khmer_ReadAlignerType) < 0) { + return; + } + if (PyType_Ready(&khmer_KHLLCounter_Type) < 0) { return; } From 50cf810bca2f278880bc9ac6f9c422bdf81d246e Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Thu, 19 Feb 2015 17:52:01 -0500 Subject: [PATCH 72/83] ReadType converted --- khmer/_khmermodule.cc | 137 ++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 71 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 62e6e5ccc5..926cf2a919 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -25,6 +25,7 @@ #include "hllcounter.hh" using namespace khmer; +using namespace read_parsers; // // Python 2/3 compatibility: PyInt and PyLong @@ -165,70 +166,59 @@ namespace khmer namespace python { - -static PyTypeObject Read_Type = { PyVarObject_HEAD_INIT(NULL, 0) }; - - typedef struct { PyObject_HEAD //! Pointer to the low-level genomic read object. read_parsers:: Read * read; -} Read_Object; +} khmer_Read_Object; static void -_Read_dealloc( PyObject * self ) +khmer_Read_dealloc(khmer_Read_Object * obj) { - Read_Object * myself = (Read_Object *)self; - delete myself->read; - myself->read = NULL; - Read_Type.tp_free( self ); + delete obj->read; + obj->read = NULL; + Py_TYPE(obj)->tp_free((PyObject*)obj); } -#define KHMER_READ_STRING_GETTER( SELF, ATTR_NAME ) \ - PyBytes_FromString( \ - ((((Read_Object *)(SELF))->read)->ATTR_NAME).c_str( ) \ - ) - - static PyObject * -Read_get_name( PyObject * self, void * closure ) +Read_get_name(khmer_Read_Object * obj, void * closure ) { - return KHMER_READ_STRING_GETTER( self, name ); + return PyBytes_FromString(obj->read->name.c_str()) ; } static PyObject * -Read_get_sequence( PyObject * self, void * closure ) +Read_get_sequence(khmer_Read_Object * obj, void * closure) { - return KHMER_READ_STRING_GETTER( self, sequence ); + return PyBytes_FromString(obj->read->sequence.c_str()) ; } static PyObject * -Read_get_quality( PyObject * self, void * closure ) +Read_get_quality(khmer_Read_Object * obj, void * closure) { - return KHMER_READ_STRING_GETTER( self, quality ); + return PyBytes_FromString(obj->read->quality.c_str()) ; } static PyObject * -Read_get_annotations( PyObject * self, void * closure ) +Read_get_annotations(khmer_Read_Object * obj, void * closure) { - return KHMER_READ_STRING_GETTER( self, annotations ); + return PyBytes_FromString(obj->read->annotations.c_str()) ; } // TODO? Implement setters. -static PyGetSetDef _Read_accessors [ ] = { +static PyGetSetDef khmer_Read_accessors [ ] = { { (char *)"name", (getter)Read_get_name, (setter)NULL, @@ -254,24 +244,38 @@ static PyGetSetDef _Read_accessors [ ] = { }; -static -void -_init_Read_Type( ) -{ - using namespace read_parsers; - - _common_init_Type( - Read_Type, "Read", "A FASTQ record plus some metadata." - ); - Read_Type.tp_dealloc = (destructor)_Read_dealloc; - - Read_Type.tp_getset = (PyGetSetDef *)_Read_accessors; - - PyType_Ready( &Read_Type ); - - _debug_class_attrs( Read_Type ); -} - +static PyTypeObject khmer_Read_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "khmer.Read", /* tp_name */ + sizeof(khmer_Read_Object), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)khmer_Read_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "A FASTQ record plus some metadata.", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + (PyGetSetDef *)khmer_Read_accessors, /* tp_getset */ +}; /***********************************************************************/ @@ -332,8 +336,6 @@ static PyObject * _ReadParser_new( PyTypeObject * subtype, PyObject * args, PyObject * kwds ) { - using namespace read_parsers; - const char * ifile_name_CSTR; if (!PyArg_ParseTuple(args, "s", &ifile_name_CSTR )) { @@ -363,8 +365,6 @@ static PyObject * _ReadParser_iternext( PyObject * self ) { - using namespace read_parsers; - ReadParser_Object * myself = (ReadParser_Object *)self; IParser * parser = myself->parser; @@ -403,8 +403,8 @@ _ReadParser_iternext( PyObject * self ) return NULL; } - PyObject * the_read_OBJECT = Read_Type.tp_alloc( &Read_Type, 1 ); - ((Read_Object *)the_read_OBJECT)->read = the_read_PTR; + PyObject * the_read_OBJECT = khmer_Read_Type.tp_alloc( &khmer_Read_Type, 1 ); + ((khmer_Read_Object *)the_read_OBJECT)->read = the_read_PTR; return the_read_OBJECT; } @@ -413,8 +413,6 @@ static PyObject * _ReadPairIterator_iternext( PyObject * self ) { - using namespace read_parsers; - ReadPairIterator_Object * myself = (ReadPairIterator_Object *)self; ReadParser_Object * parent = (ReadParser_Object *)(myself->parent); @@ -465,17 +463,17 @@ _ReadPairIterator_iternext( PyObject * self ) // Copy elements of 'ReadPair' object into Python tuple. // TODO? Replace dummy reads with 'None' object. - PyObject * read_1_OBJECT = Read_Type.tp_alloc( &Read_Type, 1 ); + PyObject * read_1_OBJECT = khmer_Read_Type.tp_alloc( &khmer_Read_Type, 1 ); try { - ((Read_Object *)read_1_OBJECT)->read = new Read( the_read_pair.first ); + ((khmer_Read_Object *)read_1_OBJECT)->read = new Read( the_read_pair.first ); } catch (std::bad_alloc &e) { return PyErr_NoMemory(); } - PyObject * read_2_OBJECT = Read_Type.tp_alloc( &Read_Type, 1 ); + PyObject * read_2_OBJECT = khmer_Read_Type.tp_alloc( &khmer_Read_Type, 1 ); try { - ((Read_Object *)read_2_OBJECT)->read = new Read( the_read_pair.second ); + ((khmer_Read_Object *)read_2_OBJECT)->read = new Read( the_read_pair.second ); } catch (std::bad_alloc &e) { - delete ((Read_Object *)read_1_OBJECT)->read; + delete ((khmer_Read_Object *)read_1_OBJECT)->read; return PyErr_NoMemory(); } PyObject * tup = PyTuple_Pack( 2, read_1_OBJECT, read_2_OBJECT ); @@ -497,8 +495,6 @@ static PyObject * ReadParser_iter_read_pairs( PyObject * self, PyObject * args ) { - using namespace read_parsers; - int pair_mode = IParser:: PAIR_MODE_ERROR_ON_UNPAIRED; if (!PyArg_ParseTuple( args, "|i", &pair_mode )) { @@ -542,8 +538,6 @@ static void _init_ReadParser_Type( ) { - using namespace read_parsers; - _common_init_Type( ReadParser_Type, "_khmer.ReadParser", @@ -623,7 +617,6 @@ _init_ReadPairIterator_Type( ) } // _init_ReadPairIterator_Type - } // namespace python } // namespace khmer @@ -4667,26 +4660,28 @@ init_khmer(void) return; } + _init_ReadParser_Type( ); + if (PyType_Ready( &ReadParser_Type ) < 0) { + return; + } + + if (PyType_Ready(&khmer_Read_Type ) < 0) { + return; + } + + _init_ReadPairIterator_Type( ); + PyObject * m; m = Py_InitModule3( "_khmer", KhmerMethods, "interface for the khmer module low-level extensions" ); if (m == NULL) { return; } - _init_Read_Type( ); - _init_ReadParser_Type( ); - if (PyType_Ready( &ReadParser_Type ) < 0) { - return; - } - _init_ReadPairIterator_Type( ); - // TODO: Finish initialization of other types. + Py_INCREF(&ReadParser_Type); if (PyModule_AddObject( m, "ReadParser", (PyObject *)&ReadParser_Type ) < 0) { return; } - Py_INCREF(&ReadParser_Type); - // TODO: Add other types here as their 'new' methods are implemented. - // Then, remove the corresponding factory functions. Py_INCREF(&khmer_KHashbitsType); PyModule_AddObject(m, "_Hashbits", (PyObject *)&khmer_KHashbitsType); From ae56e22b5c02c9686d3edc3b065e88b6453e5815 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Thu, 19 Feb 2015 18:17:40 -0500 Subject: [PATCH 73/83] ReadPairIterator converted --- khmer/_khmermodule.cc | 85 ++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 926cf2a919..8ecb2c9a02 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -288,7 +288,6 @@ static PyTypeObject khmer_Read_Type = { static PyTypeObject ReadParser_Type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("ReadParser_Object") = { PyVarObject_HEAD_INIT(NULL, 0) }; -static PyTypeObject ReadPairIterator_Type = { PyVarObject_HEAD_INIT(NULL, 0) }; typedef struct { @@ -304,7 +303,7 @@ typedef struct { PyObject * parent; //! Persistent value of pair mode across invocations. int pair_mode; -} ReadPairIterator_Object; +} khmer_ReadPairIterator_Object; static @@ -322,13 +321,11 @@ _ReadParser_dealloc( PyObject * self ) static void -_ReadPairIterator_dealloc( PyObject * self ) +khmer_ReadPairIterator_dealloc(khmer_ReadPairIterator_Object * obj) { - ReadPairIterator_Object * myself = (ReadPairIterator_Object *)self; - - Py_DECREF( myself->parent ); - myself->parent = NULL; - ReadPairIterator_Type.tp_free( self ); + Py_DECREF(obj->parent); + obj->parent = NULL; + Py_TYPE(obj)->tp_free((PyObject*)obj); } @@ -411,11 +408,9 @@ _ReadParser_iternext( PyObject * self ) static PyObject * -_ReadPairIterator_iternext( PyObject * self ) +_ReadPairIterator_iternext(khmer_ReadPairIterator_Object * myself) { - ReadPairIterator_Object * myself = (ReadPairIterator_Object *)self; - ReadParser_Object * parent = - (ReadParser_Object *)(myself->parent); + ReadParser_Object * parent = (ReadParser_Object*)myself->parent; IParser * parser = parent->parser; uint8_t pair_mode = myself->pair_mode; @@ -482,6 +477,37 @@ _ReadPairIterator_iternext( PyObject * self ) return tup; } +static PyTypeObject khmer_ReadPairIterator_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "khmer.ReadPairIterator", /* tp_name */ + sizeof(khmer_ReadPairIterator_Object), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)khmer_ReadPairIterator_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "Iterates over 'ReadParser' objects and returns read pairs.", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc)_ReadPairIterator_iternext, /* tp_iternext */ +}; + + static PyObject * @@ -502,13 +528,13 @@ ReadParser_iter_read_pairs( PyObject * self, PyObject * args ) } // Capture existing read parser. - PyObject * obj = ReadPairIterator_Type.tp_alloc( - &ReadPairIterator_Type, 1 + PyObject * obj = khmer_ReadPairIterator_Type.tp_alloc( + &khmer_ReadPairIterator_Type, 1 ); if (obj == NULL) { return NULL; } - ReadPairIterator_Object * rpi = (ReadPairIterator_Object *)obj; + khmer_ReadPairIterator_Object * rpi = (khmer_ReadPairIterator_Object *)obj; rpi->parent = self; rpi->pair_mode = pair_mode; @@ -592,31 +618,6 @@ _init_ReadParser_Type( ) } // _init_ReadParser_Type - -static -void -_init_ReadPairIterator_Type( ) -{ - - _common_init_Type( - ReadPairIterator_Type, - "ReadParser-pair-iterator", - "Iterates over 'ReadParser' objects and returns read pairs." - ); - //ReadPairIterator_Type.tp_new = (newfunc)_ReadPairIterator_new; - ReadPairIterator_Type.tp_dealloc = - (destructor)_ReadPairIterator_dealloc; - - ReadPairIterator_Type.tp_iter = PyObject_SelfIter; - ReadPairIterator_Type.tp_iternext = - (iternextfunc)_ReadPairIterator_iternext; - - PyType_Ready( &ReadPairIterator_Type ); - - _debug_class_attrs( ReadPairIterator_Type ); - -} // _init_ReadPairIterator_Type - } // namespace python } // namespace khmer @@ -4669,7 +4670,9 @@ init_khmer(void) return; } - _init_ReadPairIterator_Type( ); + if (PyType_Ready(&khmer_ReadPairIterator_Type ) < 0) { + return; + } PyObject * m; m = Py_InitModule3( "_khmer", KhmerMethods, From 56f66b68fd6c9b00627965fb82759718dcf08617 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Thu, 19 Feb 2015 18:26:58 -0500 Subject: [PATCH 74/83] ReadParser converted, removed _common_init_Type. --- khmer/_khmermodule.cc | 147 +++++++++++++++++------------------------- 1 file changed, 60 insertions(+), 87 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 8ecb2c9a02..40adabcefe 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -87,48 +87,6 @@ static void _trace_logger( #endif -template < typename OBJECT > -void -_common_init_Type( - PyTypeObject &tobj, char const * name, char const * doc -) -{ - if (!name) { - throw khmer_exception(); - } - if (!doc) { - throw khmer_exception(); - } - - tobj.tp_name = name; - tobj.tp_basicsize = sizeof( OBJECT ); - tobj.tp_alloc = PyType_GenericAlloc; - tobj.tp_free = PyObject_Free; - tobj.tp_getattro = PyObject_GenericGetAttr; - tobj.tp_flags = Py_TPFLAGS_DEFAULT; - tobj.tp_doc = doc; -} - - -static inline -void -_debug_class_attrs( PyTypeObject &tobj ) -{ -#ifdef WITH_INTERNAL_TRACING - PyObject *key, *val; - Py_ssize_t pos = 0; - - while (PyDict_Next( tobj.tp_dict, &pos, &key, &val )) { - _trace_logger( - TraceLogger:: TLVL_DEBUG5, - "\ttype '%s' dictionary key %d: '%s'\n", - tobj.tp_name, pos, PyBytes_AsString( key ) - ); - } -#endif // WITH_INTERNAL_TRACING -} - - } // namespace python } // namespace khmer @@ -285,16 +243,11 @@ static PyTypeObject khmer_Read_Type = { // -static PyTypeObject ReadParser_Type -CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("ReadParser_Object") - = { PyVarObject_HEAD_INIT(NULL, 0) }; - - typedef struct { PyObject_HEAD //! Pointer to the low-level parser object. read_parsers:: IParser * parser; -} ReadParser_Object; +} khmer_ReadParser_Object; typedef struct { @@ -308,14 +261,11 @@ typedef struct { static void -_ReadParser_dealloc( PyObject * self ) +_ReadParser_dealloc(khmer_ReadParser_Object * obj) { - - ReadParser_Object * myself = (ReadParser_Object *)self; - delete myself->parser; - myself->parser = NULL; - ReadParser_Type.tp_free( self ); - + Py_DECREF(obj->parser); + obj->parser = NULL; + Py_TYPE(obj)->tp_free((PyObject*)obj); } @@ -344,7 +294,7 @@ _ReadParser_new( PyTypeObject * subtype, PyObject * args, PyObject * kwds ) if (self == NULL) { return NULL; } - ReadParser_Object * myself = (ReadParser_Object *)self; + khmer_ReadParser_Object * myself = (khmer_ReadParser_Object *)self; // Wrap the low-level parser object. try { @@ -362,7 +312,7 @@ static PyObject * _ReadParser_iternext( PyObject * self ) { - ReadParser_Object * myself = (ReadParser_Object *)self; + khmer_ReadParser_Object * myself = (khmer_ReadParser_Object *)self; IParser * parser = myself->parser; bool stop_iteration = false; @@ -410,7 +360,7 @@ static PyObject * _ReadPairIterator_iternext(khmer_ReadPairIterator_Object * myself) { - ReadParser_Object * parent = (ReadParser_Object*)myself->parent; + khmer_ReadParser_Object * parent = (khmer_ReadParser_Object*)myself->parent; IParser * parser = parent->parser; uint8_t pair_mode = myself->pair_mode; @@ -560,24 +510,49 @@ static PyMethodDef _ReadParser_methods [ ] = { }; -static -void -_init_ReadParser_Type( ) -{ - _common_init_Type( - ReadParser_Type, - "_khmer.ReadParser", - "Parses streams from various file formats, " \ - "such as FASTA and FASTQ." - ); - ReadParser_Type.tp_new = (newfunc)_ReadParser_new; - ReadParser_Type.tp_dealloc = (destructor)_ReadParser_dealloc; - - ReadParser_Type.tp_iter = PyObject_SelfIter; - ReadParser_Type.tp_iternext = (iternextfunc)_ReadParser_iternext; - - ReadParser_Type.tp_methods = (PyMethodDef *)_ReadParser_methods; +static PyTypeObject khmer_ReadParser_Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "khmer.ReadParser", /* tp_name */ + sizeof(khmer_ReadParser_Object), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)_ReadParser_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "Parses streams from various file formats, " \ + "such as FASTA and FASTQ.", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc)_ReadParser_iternext, /* tp_iternext */ + _ReadParser_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + _ReadParser_new, /* tp_new */ +}; +/* PyObject * cls_attrs_DICT = PyDict_New( ); if (cls_attrs_DICT == NULL) { return; @@ -614,9 +589,7 @@ _init_ReadParser_Type( ) } ReadParser_Type.tp_dict = cls_attrs_DICT; - _debug_class_attrs( ReadParser_Type ); - -} // _init_ReadParser_Type +*/ } // namespace python @@ -629,7 +602,7 @@ _PyObject_to_khmer_ReadParser( PyObject * py_object ) { // TODO: Add type-checking. - return ((python:: ReadParser_Object *)py_object)->parser; + return ((python:: khmer_ReadParser_Object *)py_object)->parser; } @@ -1716,10 +1689,10 @@ static PyObject * hash_abundance_distribution_with_reads_parser( khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; - khmer :: python :: ReadParser_Object * rparser_obj = NULL; + khmer :: python :: khmer_ReadParser_Object * rparser_obj = NULL; khmer_KHashbitsObject *tracking_obj = NULL; - if (!PyArg_ParseTuple(args, "O!O!", &python::ReadParser_Type, + if (!PyArg_ParseTuple(args, "O!O!", &python::khmer_ReadParser_Type, &rparser_obj, &khmer_KHashbitsType, &tracking_obj)) { return NULL; } @@ -2419,9 +2392,9 @@ static PyObject * hashbits_consume_fasta_and_tag_with_reads_parser( khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; - python::ReadParser_Object * rparser_obj = NULL; + python::khmer_ReadParser_Object * rparser_obj = NULL; - if (!PyArg_ParseTuple( args, "O!", &python::ReadParser_Type, + if (!PyArg_ParseTuple( args, "O!", &python::khmer_ReadParser_Type, &rparser_obj)) { return NULL; } @@ -4661,8 +4634,7 @@ init_khmer(void) return; } - _init_ReadParser_Type( ); - if (PyType_Ready( &ReadParser_Type ) < 0) { + if (PyType_Ready( &khmer_ReadParser_Type ) < 0) { return; } @@ -4681,8 +4653,9 @@ init_khmer(void) return; } - Py_INCREF(&ReadParser_Type); - if (PyModule_AddObject( m, "ReadParser", (PyObject *)&ReadParser_Type ) < 0) { + Py_INCREF(&khmer_ReadParser_Type); + if (PyModule_AddObject( m, "ReadParser", + (PyObject *)&khmer_ReadParser_Type ) < 0) { return; } From 64d6e0fdf57e6a1272e6f354272eda3a2d030135 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Fri, 20 Feb 2015 11:48:39 -0500 Subject: [PATCH 75/83] Read passes CPython checklist --- khmer/_khmermodule.cc | 60 +++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 40adabcefe..330bc42fa4 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -203,36 +203,36 @@ static PyGetSetDef khmer_Read_accessors [ ] = { static PyTypeObject khmer_Read_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "khmer.Read", /* tp_name */ - sizeof(khmer_Read_Object), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)khmer_Read_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - "A FASTQ record plus some metadata.", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - 0, /* tp_members */ - (PyGetSetDef *)khmer_Read_accessors, /* tp_getset */ + PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ + "khmer.Read", /* tp_name */ + sizeof(khmer_Read_Object), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)khmer_Read_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "A FASTQ record plus some metadata.", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + (PyGetSetDef *)khmer_Read_accessors, /* tp_getset */ }; /***********************************************************************/ From f8b8adb12872b9c646747be65752e9a88d02e45f Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Fri, 20 Feb 2015 11:48:53 -0500 Subject: [PATCH 76/83] ReadParser passes CPython checklist --- khmer/_khmermodule.cc | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 330bc42fa4..5dd8e45e44 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -461,7 +461,7 @@ static PyTypeObject khmer_ReadPairIterator_Type = { static PyObject * -ReadParser_iter_reads( PyObject * self, PyObject * args ) +ReadParser_iter_reads(PyObject * self, PyObject * args ) { return PyObject_SelfIter( self ); } @@ -469,7 +469,7 @@ ReadParser_iter_reads( PyObject * self, PyObject * args ) static PyObject * -ReadParser_iter_read_pairs( PyObject * self, PyObject * args ) +ReadParser_iter_read_pairs(PyObject * self, PyObject * args ) { int pair_mode = IParser:: PAIR_MODE_ERROR_ON_UNPAIRED; @@ -511,11 +511,11 @@ static PyMethodDef _ReadParser_methods [ ] = { static PyTypeObject khmer_ReadParser_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "khmer.ReadParser", /* tp_name */ - sizeof(khmer_ReadParser_Object), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)_ReadParser_dealloc, /* tp_dealloc */ + PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ + "khmer.ReadParser", /* tp_name */ + sizeof(khmer_ReadParser_Object), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)_ReadParser_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ @@ -530,16 +530,16 @@ static PyTypeObject khmer_ReadParser_Type = { 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ "Parses streams from various file formats, " \ "such as FASTA and FASTQ.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ - PyObject_SelfIter, /* tp_iter */ - (iternextfunc)_ReadParser_iternext, /* tp_iternext */ - _ReadParser_methods, /* tp_methods */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc)_ReadParser_iternext, /* tp_iternext */ + _ReadParser_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ @@ -549,10 +549,11 @@ static PyTypeObject khmer_ReadParser_Type = { 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ - _ReadParser_new, /* tp_new */ + _ReadParser_new, /* tp_new */ }; -/* +void _init_ReadParser_Type_constants() +{ PyObject * cls_attrs_DICT = PyDict_New( ); if (cls_attrs_DICT == NULL) { return; @@ -588,8 +589,8 @@ static PyTypeObject khmer_ReadParser_Type = { return; } - ReadParser_Type.tp_dict = cls_attrs_DICT; -*/ + khmer_ReadParser_Type.tp_dict = cls_attrs_DICT; +} } // namespace python @@ -4634,6 +4635,7 @@ init_khmer(void) return; } + _init_ReadParser_Type_constants(); if (PyType_Ready( &khmer_ReadParser_Type ) < 0) { return; } From 09cefd0f9976e1658cc01c1c9fcb9842a093141f Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Fri, 20 Feb 2015 13:06:34 -0500 Subject: [PATCH 77/83] ReadPairIterator passes CPython checklist --- khmer/_khmermodule.cc | 54 +++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 5dd8e45e44..811e6282eb 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -428,33 +428,33 @@ _ReadPairIterator_iternext(khmer_ReadPairIterator_Object * myself) } static PyTypeObject khmer_ReadPairIterator_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "khmer.ReadPairIterator", /* tp_name */ - sizeof(khmer_ReadPairIterator_Object), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)khmer_ReadPairIterator_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - "Iterates over 'ReadParser' objects and returns read pairs.", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - PyObject_SelfIter, /* tp_iter */ - (iternextfunc)_ReadPairIterator_iternext, /* tp_iternext */ + PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ + "khmer.ReadPairIterator", /* tp_name */ + sizeof(khmer_ReadPairIterator_Object), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)khmer_ReadPairIterator_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "Iterates over 'ReadParser' objects and returns read pairs.", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + PyObject_SelfIter, /* tp_iter */ + (iternextfunc)_ReadPairIterator_iternext, /* tp_iternext */ }; From e2ad3607aaedba5b4ea8efac7e33db90e60d83d4 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Fri, 20 Feb 2015 13:07:06 -0500 Subject: [PATCH 78/83] KSubsetPartition passes CPython checklist --- khmer/_khmermodule.cc | 147 +++++++++++++++++++++++++----------------- 1 file changed, 89 insertions(+), 58 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 811e6282eb..cb1f988db4 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -633,36 +633,37 @@ typedef struct { typedef struct { PyObject_HEAD SubsetPartition * subset; -} khmer_KSubsetPartitionObject; +} khmer_KSubsetPartition_Object; typedef struct { PyObject_HEAD Hashbits * hashbits; } khmer_KHashbitsObject; -static void khmer_subset_dealloc(PyObject *); - -static PyTypeObject khmer_KSubsetPartitionType = { - PyVarObject_HEAD_INIT(NULL, 0) - "KSubset", sizeof(khmer_KSubsetPartitionObject), - 0, - khmer_subset_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - "subset object", /* tp_doc */ +static void khmer_subset_dealloc(khmer_KSubsetPartition_Object * obj); + +static PyTypeObject khmer_KSubsetPartition_Type = { + PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ + "khmer.KSubsetPartition", /* tp_name */ + sizeof(khmer_KSubsetPartition_Object), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)khmer_subset_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "subset object", /* tp_doc */ }; typedef struct { @@ -1462,8 +1463,8 @@ static PyObject * hash_do_subset_partition_with_abundance(PyObject * self, return PyErr_NoMemory(); } - khmer_KSubsetPartitionObject * subset_obj = (khmer_KSubsetPartitionObject *)\ - PyObject_New(khmer_KSubsetPartitionObject, &khmer_KSubsetPartitionType); + khmer_KSubsetPartition_Object * subset_obj = (khmer_KSubsetPartition_Object *)\ + PyObject_New(khmer_KSubsetPartition_Object, &khmer_KSubsetPartition_Type); if (subset_obj == NULL) { delete subset_p; @@ -3372,10 +3373,10 @@ static int khmer_hashbits_init(khmer_KHashbitsObject * self, PyObject * args, //////////////////////////////////////////////////////////////////////////// -static PyObject * subset_count_partitions(PyObject * self, - PyObject * args) +static +PyObject * +subset_count_partitions(khmer_KSubsetPartition_Object * me, PyObject * args) { - khmer_KSubsetPartitionObject * me = (khmer_KSubsetPartitionObject *) self; SubsetPartition * subset_p = me->subset; if (!PyArg_ParseTuple(args, "")) { @@ -3389,10 +3390,10 @@ static PyObject * subset_count_partitions(PyObject * self, (Py_ssize_t) n_unassigned); } -static PyObject * subset_report_on_partitions(PyObject * self, - PyObject * args) +static +PyObject * +subset_report_on_partitions(khmer_KSubsetPartition_Object * me, PyObject * args) { - khmer_KSubsetPartitionObject * me = (khmer_KSubsetPartitionObject *) self; SubsetPartition * subset_p = me->subset; if (!PyArg_ParseTuple(args, "")) { @@ -3404,10 +3405,10 @@ static PyObject * subset_report_on_partitions(PyObject * self, Py_RETURN_NONE; } -static PyObject * subset_compare_partitions(PyObject * self, - PyObject * args) +static +PyObject * +subset_compare_partitions(khmer_KSubsetPartition_Object * me, PyObject * args) { - khmer_KSubsetPartitionObject * me = (khmer_KSubsetPartitionObject *) self; SubsetPartition * subset1_p = me->subset; PyObject * subset2_obj = NULL; @@ -3418,8 +3419,8 @@ static PyObject * subset_compare_partitions(PyObject * self, return NULL; } - khmer_KSubsetPartitionObject *other = (khmer_KSubsetPartitionObject *) - subset2_obj; + khmer_KSubsetPartition_Object *other = (khmer_KSubsetPartition_Object *) + subset2_obj; SubsetPartition * subset2_p = other->subset; unsigned int n_only1 = 0, n_only2 = 0, n_shared = 0; @@ -3429,10 +3430,11 @@ static PyObject * subset_compare_partitions(PyObject * self, return Py_BuildValue("III", n_only1, n_only2, n_shared); } -static PyObject * subset_partition_size_distribution(PyObject * self, - PyObject * args) +static +PyObject * +subset_partition_size_distribution(khmer_KSubsetPartition_Object * me, + PyObject * args) { - khmer_KSubsetPartitionObject * me = (khmer_KSubsetPartitionObject *) self; SubsetPartition * subset_p = me->subset; if (!PyArg_ParseTuple(args, "")) { @@ -3467,10 +3469,10 @@ static PyObject * subset_partition_size_distribution(PyObject * self, return ret; } -static PyObject * subset_partition_sizes(PyObject * self, - PyObject * args) +static +PyObject * +subset_partition_sizes(khmer_KSubsetPartition_Object * me, PyObject * args) { - khmer_KSubsetPartitionObject * me = (khmer_KSubsetPartitionObject *) self; SubsetPartition * subset_p = me->subset; unsigned int min_size = 0; @@ -3513,10 +3515,11 @@ static PyObject * subset_partition_sizes(PyObject * self, return ret; } -static PyObject * subset_partition_average_coverages(PyObject * self, - PyObject * args) +static +PyObject * +subset_partition_average_coverages(khmer_KSubsetPartition_Object * me, + PyObject * args) { - khmer_KSubsetPartitionObject * me = (khmer_KSubsetPartitionObject *) self; SubsetPartition * subset_p = me->subset; khmer_KCountingHashObject * counting_o; @@ -3548,12 +3551,42 @@ static PyObject * subset_partition_average_coverages(PyObject * self, } static PyMethodDef khmer_subset_methods[] = { - { "count_partitions", subset_count_partitions, METH_VARARGS, "" }, - { "report_on_partitions", subset_report_on_partitions, METH_VARARGS, "" }, - { "compare_partitions", subset_compare_partitions, METH_VARARGS, "" }, - { "partition_size_distribution", subset_partition_size_distribution, METH_VARARGS, "" }, - { "partition_sizes", subset_partition_sizes, METH_VARARGS, "" }, - { "partition_average_coverages", subset_partition_average_coverages, METH_VARARGS, "" }, + { + "count_partitions", + (PyCFunction)subset_count_partitions, + METH_VARARGS, + "" + }, + { + "report_on_partitions", + (PyCFunction)subset_report_on_partitions, + METH_VARARGS, + "" + }, + { + "compare_partitions", + (PyCFunction)subset_compare_partitions, + METH_VARARGS, + "" + }, + { + "partition_size_distribution", + (PyCFunction)subset_partition_size_distribution, + METH_VARARGS, + "" + }, + { + "partition_sizes", + (PyCFunction)subset_partition_sizes, + METH_VARARGS, + "" + }, + { + "partition_average_coverages", + (PyCFunction)subset_partition_average_coverages, + METH_VARARGS, + "" + }, {NULL, NULL, 0, NULL} /* sentinel */ }; @@ -4222,13 +4255,11 @@ static void khmer_hashbits_dealloc(PyObject* obj) // khmer_subset_dealloc -- clean up a hashbits object. // -static void khmer_subset_dealloc(PyObject* self) +static void khmer_subset_dealloc(khmer_KSubsetPartition_Object * obj) { - khmer_KSubsetPartitionObject * obj = (khmer_KSubsetPartitionObject *) self; delete obj->subset; obj->subset = NULL; - - PyObject_Del((PyObject *) obj); + Py_TYPE(obj)->tp_free((PyObject*)obj); } @@ -4604,8 +4635,8 @@ init_khmer(void) return; } - khmer_KSubsetPartitionType.tp_methods = khmer_subset_methods; - if (PyType_Ready(&khmer_KSubsetPartitionType) < 0) { + khmer_KSubsetPartition_Type.tp_methods = khmer_subset_methods; + if (PyType_Ready(&khmer_KSubsetPartition_Type) < 0) { return; } From f6a45fd1b6768694fcccdb08984a84da60736532 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Fri, 20 Feb 2015 14:59:19 -0500 Subject: [PATCH 79/83] KCountingHash passes CPython checklist --- khmer/__init__.py | 6 +- khmer/_khmermodule.cc | 466 ++++++++++++++++++++---------------- tests/test_counting_hash.py | 18 +- 3 files changed, 273 insertions(+), 217 deletions(-) diff --git a/khmer/__init__.py b/khmer/__init__.py index c66140fa40..308625738c 100644 --- a/khmer/__init__.py +++ b/khmer/__init__.py @@ -8,7 +8,7 @@ This is khmer; please see http://khmer.readthedocs.org/. """ -from khmer._khmer import _new_counting_hash +from khmer._khmer import CountingHash from khmer._khmer import _new_hashbits from khmer._khmer import _LabelHash from khmer._khmer import _Hashbits @@ -72,7 +72,7 @@ def new_counting_hash(k, starting_size, n_tables=2): """ primes = get_n_primes_above_x(n_tables, starting_size) - return _new_counting_hash(k, primes) + return CountingHash(k, primes) def load_hashbits(filename): @@ -93,7 +93,7 @@ def load_counting_hash(filename): Keyword argument: filename -- the name of the counting_hash file """ - hashtable = _new_counting_hash(1, [1]) + hashtable = CountingHash(1, [1]) hashtable.load(filename) return hashtable diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index cb1f988db4..2692c00097 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -628,7 +628,7 @@ void free_subset_partition_info(void * p) typedef struct { PyObject_HEAD CountingHash * counting; -} khmer_KCountingHashObject; +} khmer_KCountingHash_Object; typedef struct { PyObject_HEAD @@ -671,18 +671,21 @@ typedef struct { ReadAligner * aligner; } khmer_ReadAligner_Object; -static void khmer_counting_dealloc(PyObject *); +static void khmer_counting_dealloc(khmer_KCountingHash_Object * obj); -static PyObject * hash_abundance_distribution(PyObject * self, - PyObject * args); +static +PyObject * +hash_abundance_distribution(khmer_KCountingHash_Object * me, PyObject * args); -static PyObject * hash_abundance_distribution_with_reads_parser( - PyObject * self, - PyObject * args); +static +PyObject * +hash_abundance_distribution_with_reads_parser(khmer_KCountingHash_Object * me, + PyObject * args); -static PyObject * hash_set_use_bigcount(PyObject * self, PyObject * args) +static +PyObject * +hash_set_use_bigcount(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; PyObject * x; @@ -698,9 +701,10 @@ static PyObject * hash_set_use_bigcount(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hash_get_use_bigcount(PyObject * self, PyObject * args) +static +PyObject * +hash_get_use_bigcount(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; if (!PyArg_ParseTuple(args, "")) { @@ -712,9 +716,10 @@ static PyObject * hash_get_use_bigcount(PyObject * self, PyObject * args) return PyBool_FromLong((int)val); } -static PyObject * hash_n_occupied(PyObject * self, PyObject * args) +static +PyObject * +hash_n_occupied(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; HashIntoType start = 0, stop = 0; @@ -728,9 +733,10 @@ static PyObject * hash_n_occupied(PyObject * self, PyObject * args) return PyLong_FromUnsignedLongLong(n); } -static PyObject * hash_n_unique_kmers(PyObject * self, PyObject * args) +static +PyObject * +hash_n_unique_kmers(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; HashIntoType n = counting->n_unique_kmers(); @@ -738,9 +744,10 @@ static PyObject * hash_n_unique_kmers(PyObject * self, PyObject * args) return PyLong_FromUnsignedLongLong(n); } -static PyObject * hash_n_entries(PyObject * self, PyObject * args) +static +PyObject * +hash_n_entries(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; if (!PyArg_ParseTuple(args, "")) { @@ -750,9 +757,10 @@ static PyObject * hash_n_entries(PyObject * self, PyObject * args) return PyLong_FromUnsignedLongLong(counting->n_entries()); } -static PyObject * hash_count(PyObject * self, PyObject * args) +static +PyObject * +hash_count(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * kmer; @@ -772,10 +780,11 @@ static PyObject * hash_count(PyObject * self, PyObject * args) return PyLong_FromLong(1); } -static PyObject * hash_output_fasta_kmer_pos_freq(PyObject * self, - PyObject *args) +static +PyObject * +hash_output_fasta_kmer_pos_freq(khmer_KCountingHash_Object * me, + PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * infile; @@ -790,9 +799,10 @@ static PyObject * hash_output_fasta_kmer_pos_freq(PyObject * self, return PyLong_FromLong(0); } -static PyObject * hash_consume_fasta(PyObject * self, PyObject * args) +static +PyObject * +hash_consume_fasta(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * filename; @@ -817,11 +827,11 @@ static PyObject * hash_consume_fasta(PyObject * self, PyObject * args) return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * hash_consume_fasta_with_reads_parser( - PyObject * self, PyObject * args -) +static +PyObject * +hash_consume_fasta_with_reads_parser(khmer_KCountingHash_Object * me, + PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; PyObject * rparser_obj = NULL; @@ -854,9 +864,10 @@ static PyObject * hash_consume_fasta_with_reads_parser( return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * hash_consume(PyObject * self, PyObject * args) +static +PyObject * +hash_consume(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * long_str; @@ -877,9 +888,10 @@ static PyObject * hash_consume(PyObject * self, PyObject * args) return PyLong_FromLong(n_consumed); } -static PyObject * hash_get_min_count(PyObject * self, PyObject * args) +static +PyObject * +hash_get_min_count(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * long_str; @@ -900,9 +912,10 @@ static PyObject * hash_get_min_count(PyObject * self, PyObject * args) return PyLong_FromLong(N); } -static PyObject * hash_get_max_count(PyObject * self, PyObject * args) +static +PyObject * +hash_get_max_count(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * long_str; @@ -923,9 +936,10 @@ static PyObject * hash_get_max_count(PyObject * self, PyObject * args) return PyLong_FromLong(N); } -static PyObject * hash_get_median_count(PyObject * self, PyObject * args) +static +PyObject * +hash_get_median_count(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * long_str; @@ -948,9 +962,10 @@ static PyObject * hash_get_median_count(PyObject * self, PyObject * args) return Py_BuildValue("iff", med, average, stddev); } -static PyObject * hash_get_kadian_count(PyObject * self, PyObject * args) +static +PyObject * +hash_get_kadian_count(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * long_str; @@ -973,9 +988,10 @@ static PyObject * hash_get_kadian_count(PyObject * self, PyObject * args) return Py_BuildValue("i", kad); } -static PyObject * hash_get(PyObject * self, PyObject * args) +static +PyObject * +hash_get(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; PyObject * arg; @@ -1004,9 +1020,10 @@ static PyObject * hash_get(PyObject * self, PyObject * args) return PyLong_FromLong(count); } -static PyObject * count_trim_on_abundance(PyObject * self, PyObject * args) +static +PyObject * +count_trim_on_abundance(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * seq = NULL; @@ -1034,9 +1051,11 @@ static PyObject * count_trim_on_abundance(PyObject * self, PyObject * args) return ret; } -static PyObject * count_trim_below_abundance(PyObject * self, PyObject * args) + +static +PyObject * +count_trim_below_abundance(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * seq = NULL; @@ -1065,10 +1084,11 @@ static PyObject * count_trim_below_abundance(PyObject * self, PyObject * args) return ret; } -static PyObject * count_find_spectral_error_positions(PyObject * self, - PyObject * args) +static +PyObject * +count_find_spectral_error_positions(khmer_KCountingHash_Object * me, + PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; khmer::CountingHash * counting = me->counting; char * seq = NULL; @@ -1100,10 +1120,11 @@ static PyObject * count_find_spectral_error_positions(PyObject * self, return x; } -static PyObject * hash_fasta_count_kmers_by_position(PyObject * self, - PyObject * args) +static +PyObject * +hash_fasta_count_kmers_by_position(khmer_KCountingHash_Object * me, + PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * inputfile; @@ -1152,10 +1173,11 @@ static PyObject * hash_fasta_count_kmers_by_position(PyObject * self, return x; } -static PyObject * hash_fasta_dump_kmers_by_abundance(PyObject * self, - PyObject * args) +static +PyObject * +hash_fasta_dump_kmers_by_abundance(khmer_KCountingHash_Object * me, + PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * inputfile; @@ -1171,9 +1193,10 @@ static PyObject * hash_fasta_dump_kmers_by_abundance(PyObject * self, Py_RETURN_NONE; } -static PyObject * hash_load(PyObject * self, PyObject * args) +static +PyObject * +hash_load(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * filename = NULL; @@ -1192,9 +1215,10 @@ static PyObject * hash_load(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hash_save(PyObject * self, PyObject * args) +static +PyObject * +hash_save(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * filename = NULL; @@ -1208,9 +1232,10 @@ static PyObject * hash_save(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hash_get_ksize(PyObject * self, PyObject * args) +static +PyObject * +hash_get_ksize(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; if (!PyArg_ParseTuple(args, "")) { @@ -1222,9 +1247,10 @@ static PyObject * hash_get_ksize(PyObject * self, PyObject * args) return PyLong_FromLong(k); } -static PyObject * hash_get_hashsizes(PyObject * self, PyObject * args) +static +PyObject * +hash_get_hashsizes(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; @@ -1242,12 +1268,15 @@ static PyObject * hash_get_hashsizes(PyObject * self, PyObject * args) return x; } -static PyObject * hash_collect_high_abundance_kmers(PyObject * self, - PyObject * args); +static +PyObject * +hash_collect_high_abundance_kmers(khmer_KCountingHash_Object * me, + PyObject * args); -static PyObject * hash_consume_and_tag(PyObject * self, PyObject * args) +static +PyObject * +hash_consume_and_tag(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * seq; @@ -1270,9 +1299,10 @@ static PyObject * hash_consume_and_tag(PyObject * self, PyObject * args) return Py_BuildValue("K", n_consumed); } -static PyObject * hash_get_tags_and_positions(PyObject * self, PyObject * args) +static +PyObject * +hash_get_tags_and_positions(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * seq; @@ -1307,9 +1337,10 @@ static PyObject * hash_get_tags_and_positions(PyObject * self, PyObject * args) return posns_list; } -static PyObject * hash_find_all_tags_list(PyObject * self, PyObject *args) +static +PyObject * +hash_find_all_tags_list(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * kmer_s = NULL; @@ -1351,9 +1382,10 @@ static PyObject * hash_find_all_tags_list(PyObject * self, PyObject *args) return x; } -static PyObject * hash_consume_fasta_and_tag(PyObject * self, PyObject * args) +static +PyObject * +hash_consume_fasta_and_tag(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * filename; @@ -1377,10 +1409,11 @@ static PyObject * hash_consume_fasta_and_tag(PyObject * self, PyObject * args) return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * hash_find_all_tags_truncate_on_abundance(PyObject * self, - PyObject *args) +static +PyObject * +hash_find_all_tags_truncate_on_abundance(khmer_KCountingHash_Object * me, + PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * kmer_s = NULL; @@ -1420,10 +1453,11 @@ static PyObject * hash_find_all_tags_truncate_on_abundance(PyObject * self, return PyCObject_FromVoidPtr(ppi, free_pre_partition_info); } -static PyObject * hash_do_subset_partition_with_abundance(PyObject * self, - PyObject * args) +static +PyObject * +hash_do_subset_partition_with_abundance(khmer_KCountingHash_Object * me, + PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; HashIntoType start_kmer = 0, end_kmer = 0; @@ -1477,83 +1511,102 @@ static PyObject * hash_do_subset_partition_with_abundance(PyObject * self, } static PyMethodDef khmer_counting_methods[] = { - { "ksize", hash_get_ksize, METH_VARARGS, "" }, - { "hashsizes", hash_get_hashsizes, METH_VARARGS, "" }, - { "set_use_bigcount", hash_set_use_bigcount, METH_VARARGS, "" }, - { "get_use_bigcount", hash_get_use_bigcount, METH_VARARGS, "" }, - { "n_unique_kmers", hash_n_unique_kmers, METH_VARARGS, "Count the number of unique kmers" }, - { "n_occupied", hash_n_occupied, METH_VARARGS, "Count the number of occupied bins" }, - { "n_entries", hash_n_entries, METH_VARARGS, "" }, - { "count", hash_count, METH_VARARGS, "Count the given kmer" }, - { "consume", hash_consume, METH_VARARGS, "Count all k-mers in the given string" }, - { "consume_fasta", hash_consume_fasta, METH_VARARGS, "Count all k-mers in a given file" }, { - "consume_fasta_with_reads_parser", hash_consume_fasta_with_reads_parser, + "ksize", + (PyCFunction)hash_get_ksize, + METH_VARARGS, + "" + }, + { "hashsizes", (PyCFunction)hash_get_hashsizes, METH_VARARGS, "" }, + { "set_use_bigcount", (PyCFunction)hash_set_use_bigcount, METH_VARARGS, "" }, + { "get_use_bigcount", (PyCFunction)hash_get_use_bigcount, METH_VARARGS, "" }, + { "n_unique_kmers", (PyCFunction)hash_n_unique_kmers, METH_VARARGS, "Count the number of unique kmers" }, + { "n_occupied", (PyCFunction)hash_n_occupied, METH_VARARGS, "Count the number of occupied bins" }, + { "n_entries", (PyCFunction)hash_n_entries, METH_VARARGS, "" }, + { "count", (PyCFunction)hash_count, METH_VARARGS, "Count the given kmer" }, + { "consume", (PyCFunction)hash_consume, METH_VARARGS, "Count all k-mers in the given string" }, + { "consume_fasta", (PyCFunction)hash_consume_fasta, METH_VARARGS, "Count all k-mers in a given file" }, + { + "consume_fasta_with_reads_parser", (PyCFunction)hash_consume_fasta_with_reads_parser, METH_VARARGS, "Count all k-mers using a given reads parser" }, - { "output_fasta_kmer_pos_freq", hash_output_fasta_kmer_pos_freq, METH_VARARGS, "" }, - { "get", hash_get, METH_VARARGS, "Get the count for the given k-mer" }, - { "get_min_count", hash_get_min_count, METH_VARARGS, "Get the smallest count of all the k-mers in the string" }, - { "get_max_count", hash_get_max_count, METH_VARARGS, "Get the largest count of all the k-mers in the string" }, - { "get_median_count", hash_get_median_count, METH_VARARGS, "Get the median, average, and stddev of the k-mer counts in the string" }, - { "get_kadian_count", hash_get_kadian_count, METH_VARARGS, "Get the kadian (abundance of k-th rank-ordered k-mer) of the k-mer counts in the string" }, - { "trim_on_abundance", count_trim_on_abundance, METH_VARARGS, "Trim on >= abundance" }, - { "trim_below_abundance", count_trim_below_abundance, METH_VARARGS, "Trim on >= abundance" }, - { "find_spectral_error_positions", count_find_spectral_error_positions, METH_VARARGS, "Identify positions of low-abundance k-mers" }, - { "abundance_distribution", hash_abundance_distribution, METH_VARARGS, "" }, - { "abundance_distribution_with_reads_parser", hash_abundance_distribution_with_reads_parser, METH_VARARGS, "" }, - { "fasta_count_kmers_by_position", hash_fasta_count_kmers_by_position, METH_VARARGS, "" }, - { "fasta_dump_kmers_by_abundance", hash_fasta_dump_kmers_by_abundance, METH_VARARGS, "" }, - { "load", hash_load, METH_VARARGS, "" }, - { "save", hash_save, METH_VARARGS, "" }, + { "output_fasta_kmer_pos_freq", (PyCFunction)hash_output_fasta_kmer_pos_freq, METH_VARARGS, "" }, + { "get", (PyCFunction)hash_get, METH_VARARGS, "Get the count for the given k-mer" }, + { "get_min_count", (PyCFunction)hash_get_min_count, METH_VARARGS, "Get the smallest count of all the k-mers in the string" }, + { "get_max_count", (PyCFunction)hash_get_max_count, METH_VARARGS, "Get the largest count of all the k-mers in the string" }, + { "get_median_count", (PyCFunction)hash_get_median_count, METH_VARARGS, "Get the median, average, and stddev of the k-mer counts in the string" }, + { "get_kadian_count", (PyCFunction)hash_get_kadian_count, METH_VARARGS, "Get the kadian (abundance of k-th rank-ordered k-mer) of the k-mer counts in the string" }, + { "trim_on_abundance", (PyCFunction)count_trim_on_abundance, METH_VARARGS, "Trim on >= abundance" }, + { "trim_below_abundance", (PyCFunction)count_trim_below_abundance, METH_VARARGS, "Trim on >= abundance" }, + { "find_spectral_error_positions", (PyCFunction)count_find_spectral_error_positions, METH_VARARGS, "Identify positions of low-abundance k-mers" }, + { "abundance_distribution", (PyCFunction)hash_abundance_distribution, METH_VARARGS, "" }, + { "abundance_distribution_with_reads_parser", (PyCFunction)hash_abundance_distribution_with_reads_parser, METH_VARARGS, "" }, + { "fasta_count_kmers_by_position", (PyCFunction)hash_fasta_count_kmers_by_position, METH_VARARGS, "" }, + { "fasta_dump_kmers_by_abundance", (PyCFunction)hash_fasta_dump_kmers_by_abundance, METH_VARARGS, "" }, + { "load", (PyCFunction)hash_load, METH_VARARGS, "" }, + { "save", (PyCFunction)hash_save, METH_VARARGS, "" }, { - "collect_high_abundance_kmers", hash_collect_high_abundance_kmers, + "collect_high_abundance_kmers", (PyCFunction)hash_collect_high_abundance_kmers, METH_VARARGS, "" }, - { "consume_and_tag", hash_consume_and_tag, METH_VARARGS, "Consume a sequence and tag it" }, - { "get_tags_and_positions", hash_get_tags_and_positions, METH_VARARGS, "Retrieve tags and their positions in a sequence." }, - { "find_all_tags_list", hash_find_all_tags_list, METH_VARARGS, "Find all tags within range of the given k-mer, return as list" }, - { "consume_fasta_and_tag", hash_consume_fasta_and_tag, METH_VARARGS, "Count all k-mers in a given file" }, - { "do_subset_partition_with_abundance", hash_do_subset_partition_with_abundance, METH_VARARGS, "" }, - { "find_all_tags_truncate_on_abundance", hash_find_all_tags_truncate_on_abundance, METH_VARARGS, "" }, + { "consume_and_tag", (PyCFunction)hash_consume_and_tag, METH_VARARGS, "Consume a sequence and tag it" }, + { "get_tags_and_positions", (PyCFunction)hash_get_tags_and_positions, METH_VARARGS, "Retrieve tags and their positions in a sequence." }, + { "find_all_tags_list", (PyCFunction)hash_find_all_tags_list, METH_VARARGS, "Find all tags within range of the given k-mer, return as list" }, + { "consume_fasta_and_tag", (PyCFunction)hash_consume_fasta_and_tag, METH_VARARGS, "Count all k-mers in a given file" }, + { "do_subset_partition_with_abundance", (PyCFunction)hash_do_subset_partition_with_abundance, METH_VARARGS, "" }, + { "find_all_tags_truncate_on_abundance", (PyCFunction)hash_find_all_tags_truncate_on_abundance, METH_VARARGS, "" }, {NULL, NULL, 0, NULL} /* sentinel */ }; -#define is_counting_obj(v) (Py_TYPE(v) == &khmer_KCountingHashType) +static PyObject* _new_counting_hash(PyTypeObject * type, PyObject * args, + PyObject * kwds); -static PyTypeObject khmer_KCountingHashType -CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCountingHashObject") +static PyTypeObject khmer_KCountingHash_Type +CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KCountingHash_Object") = { - PyVarObject_HEAD_INIT(NULL, 0) - "KCountingHash", sizeof(khmer_KCountingHashObject), - 0, - khmer_counting_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - "counting hash object", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - khmer_counting_methods, /* tp_methods */ + PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ + "_khmer.KCountingHash", /*tp_name*/ + sizeof(khmer_KCountingHash_Object), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)khmer_counting_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "counting hash object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + khmer_counting_methods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + _new_counting_hash, /* tp_new */ }; +#define is_counting_obj(v) (Py_TYPE(v) == &khmer_KCountingHash_Type) + // // new_hashtable // @@ -1567,8 +1620,8 @@ static PyObject* new_hashtable(PyObject * self, PyObject * args) return NULL; } - khmer_KCountingHashObject * kcounting_obj = (khmer_KCountingHashObject *) \ - PyObject_New(khmer_KCountingHashObject, &khmer_KCountingHashType); + khmer_KCountingHash_Object * kcounting_obj = (khmer_KCountingHash_Object *) \ + PyObject_New(khmer_KCountingHash_Object, &khmer_KCountingHash_Type); if (kcounting_obj == NULL) { return NULL; @@ -1587,50 +1640,53 @@ static PyObject* new_hashtable(PyObject * self, PyObject * args) // new_counting_hash // -static PyObject* _new_counting_hash(PyObject * self, PyObject * args) +static PyObject* _new_counting_hash(PyTypeObject * type, PyObject * args, + PyObject * kwds) { - WordLength k = 0; - PyListObject * sizes_list_o = NULL; + khmer_KCountingHash_Object * self; - if (!PyArg_ParseTuple(args, "bO!", &k, &PyList_Type, &sizes_list_o)) { - return NULL; - } + self = (khmer_KCountingHash_Object *)type->tp_alloc(type, 0); - std::vector sizes; - Py_ssize_t sizes_list_o_length = PyList_GET_SIZE(sizes_list_o); - if (sizes_list_o_length == -1) { - PyErr_SetString(PyExc_ValueError, "error with hashtable primes!"); - return NULL; - } - for (Py_ssize_t i = 0; i < sizes_list_o_length; i++) { - PyObject * size_o = PyList_GET_ITEM(sizes_list_o, i); - if (PyLong_Check(size_o)) { - sizes.push_back((HashIntoType) PyLong_AsUnsignedLongLong(size_o)); - } else if (PyInt_Check(size_o)) { - sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); - } else if (PyFloat_Check(size_o)) { - sizes.push_back((HashIntoType) PyFloat_AS_DOUBLE(size_o)); - } else { - PyErr_SetString(PyExc_TypeError, - "2nd argument must be a list of ints, longs, or floats"); + if (self != NULL) { + WordLength k = 0; + PyListObject * sizes_list_o = NULL; + + if (!PyArg_ParseTuple(args, "bO!", &k, &PyList_Type, &sizes_list_o)) { + Py_DECREF(self); return NULL; } - } - khmer_KCountingHashObject * kcounting_obj = (khmer_KCountingHashObject *) \ - PyObject_New(khmer_KCountingHashObject, &khmer_KCountingHashType); - - if (kcounting_obj == NULL) { - return NULL; - } + std::vector sizes; + Py_ssize_t sizes_list_o_length = PyList_GET_SIZE(sizes_list_o); + if (sizes_list_o_length == -1) { + Py_DECREF(self); + PyErr_SetString(PyExc_ValueError, "error with hashtable primes!"); + return NULL; + } + for (Py_ssize_t i = 0; i < sizes_list_o_length; i++) { + PyObject * size_o = PyList_GET_ITEM(sizes_list_o, i); + if (PyLong_Check(size_o)) { + sizes.push_back((HashIntoType) PyLong_AsUnsignedLongLong(size_o)); + } else if (PyInt_Check(size_o)) { + sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); + } else if (PyFloat_Check(size_o)) { + sizes.push_back((HashIntoType) PyFloat_AS_DOUBLE(size_o)); + } else { + Py_DECREF(self); + PyErr_SetString(PyExc_TypeError, + "2nd argument must be a list of ints, longs, or floats"); + return NULL; + } + } - try { - kcounting_obj->counting = new CountingHash(k, sizes); - } catch (std::bad_alloc &e) { - return PyErr_NoMemory(); + try { + self->counting = new CountingHash(k, sizes); + } catch (std::bad_alloc &e) { + return PyErr_NoMemory(); + } } - return (PyObject *) kcounting_obj; + return (PyObject *) self; } // @@ -1684,11 +1740,11 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashbitsObject") 0, /* tp_alloc */ }; -static PyObject * hash_abundance_distribution_with_reads_parser( - PyObject * self, - PyObject * args) +static +PyObject * +hash_abundance_distribution_with_reads_parser(khmer_KCountingHash_Object * me, + PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; khmer :: python :: khmer_ReadParser_Object * rparser_obj = NULL; @@ -1731,9 +1787,10 @@ static PyObject * hash_abundance_distribution_with_reads_parser( return x; } -static PyObject * hash_abundance_distribution(PyObject * self, PyObject * args) +static +PyObject * +hash_abundance_distribution(khmer_KCountingHash_Object * me, PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * filename = NULL; @@ -1984,10 +2041,10 @@ static PyObject * hashbits_traverse_from_tags(PyObject * self, PyObject * args) khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; - khmer_KCountingHashObject * counting_o = NULL; + khmer_KCountingHash_Object * counting_o = NULL; unsigned int distance, threshold, frequency; - if (!PyArg_ParseTuple(args, "O!III", &khmer_KCountingHashType, &counting_o, + if (!PyArg_ParseTuple(args, "O!III", &khmer_KCountingHash_Type, &counting_o, &distance, &threshold, &frequency)) { return NULL; } @@ -2004,11 +2061,11 @@ static PyObject * hashbits_repartition_largest_partition(PyObject * self, khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; - khmer_KCountingHashObject * counting_o = NULL; + khmer_KCountingHash_Object * counting_o = NULL; PyObject * subset_o = NULL; unsigned int distance, threshold, frequency; - if (!PyArg_ParseTuple(args, "OO!III", &subset_o, &khmer_KCountingHashType, + if (!PyArg_ParseTuple(args, "OO!III", &subset_o, &khmer_KCountingHash_Type, &counting_o, &distance, &threshold, &frequency)) { return NULL; } @@ -2335,11 +2392,11 @@ static PyObject * hashbits_consume_fasta_and_traverse(PyObject * self, const char * filename; unsigned int radius, big_threshold, transfer_threshold; - khmer_KCountingHashObject * counting_o = NULL; + khmer_KCountingHash_Object * counting_o = NULL; if (!PyArg_ParseTuple(args, "sIIIO!", &filename, &radius, &big_threshold, &transfer_threshold, - &khmer_KCountingHashType, &counting_o)) { + &khmer_KCountingHash_Type, &counting_o)) { return NULL; } @@ -3522,9 +3579,9 @@ subset_partition_average_coverages(khmer_KSubsetPartition_Object * me, { SubsetPartition * subset_p = me->subset; - khmer_KCountingHashObject * counting_o; + khmer_KCountingHash_Object * counting_o; - if (!PyArg_ParseTuple(args, "O!", &khmer_KCountingHashType, &counting_o)) { + if (!PyArg_ParseTuple(args, "O!", &khmer_KCountingHash_Type, &counting_o)) { return NULL; } @@ -4079,11 +4136,11 @@ static PyObject* khmer_ReadAligner_new(PyTypeObject *type, PyObject * args, self = (khmer_ReadAligner_Object *)type->tp_alloc(type, 0); if (self != NULL) { - khmer_KCountingHashObject * ch = NULL; + khmer_KCountingHash_Object * ch = NULL; unsigned short int trusted_cov_cutoff = 2; double bits_theta = 1; - if(!PyArg_ParseTuple(args, "O!Hd", &khmer_KCountingHashType, &ch, + if(!PyArg_ParseTuple(args, "O!Hd", &khmer_KCountingHash_Type, &ch, &trusted_cov_cutoff, &bits_theta)) { Py_DECREF(self); return NULL; @@ -4185,10 +4242,9 @@ static PyObject* _new_hashbits(PyObject * self, PyObject * args) return (PyObject *) khashbits_obj; } -static PyObject * hash_collect_high_abundance_kmers(PyObject * self, - PyObject * args) +static PyObject * hash_collect_high_abundance_kmers(khmer_KCountingHash_Object * + me , PyObject * args) { - khmer_KCountingHashObject * me = (khmer_KCountingHashObject *) self; CountingHash * counting = me->counting; const char * filename = NULL; @@ -4227,13 +4283,11 @@ static PyObject * hash_collect_high_abundance_kmers(PyObject * self, // khmer_counting_dealloc -- clean up a counting hash object. // -static void khmer_counting_dealloc(PyObject* self) +static void khmer_counting_dealloc(khmer_KCountingHash_Object * obj) { - khmer_KCountingHashObject * obj = (khmer_KCountingHashObject *) self; delete obj->counting; obj->counting = NULL; - - PyObject_Del((PyObject *) obj); + Py_TYPE(obj)->tp_free((PyObject*)obj); } // @@ -4585,10 +4639,6 @@ static PyMethodDef KhmerMethods[] = { "new_hashtable", new_hashtable, METH_VARARGS, "Create an empty single-table counting hash" }, - { - "_new_counting_hash", _new_counting_hash, - METH_VARARGS, "Create an empty counting hash" - }, { "_new_hashbits", _new_hashbits, METH_VARARGS, "Create an empty hashbits table" @@ -4631,7 +4681,7 @@ init_khmer(void) { using namespace python; - if (PyType_Ready(&khmer_KCountingHashType) < 0) { + if (PyType_Ready(&khmer_KCountingHash_Type) < 0) { return; } @@ -4692,6 +4742,12 @@ init_khmer(void) return; } + Py_INCREF(&khmer_KCountingHash_Type); + if (PyModule_AddObject( m, "CountingHash", + (PyObject *)&khmer_KCountingHash_Type ) < 0) { + return; + } + Py_INCREF(&khmer_KHashbitsType); PyModule_AddObject(m, "_Hashbits", (PyObject *)&khmer_KHashbitsType); diff --git a/tests/test_counting_hash.py b/tests/test_counting_hash.py index a3ec2bb2c9..ef3221e722 100644 --- a/tests/test_counting_hash.py +++ b/tests/test_counting_hash.py @@ -37,7 +37,7 @@ def teardown(): class Test_CountingHash(object): def setup(self): - self.hi = khmer._new_counting_hash(12, PRIMES_1m) + self.hi = khmer.CountingHash(12, PRIMES_1m) def test_collision_1(self): @@ -114,7 +114,7 @@ def test_3_tables(): x = list(PRIMES_1m) x.append(1000005) - hi = khmer._new_counting_hash(12, x) + hi = khmer.CountingHash(12, x) GG = 'G' * 12 # forward_hash: 11184810 assert khmer.forward_hash(GG, 12) == 11184810 @@ -284,11 +284,11 @@ def test_save_load(): sizes = list(PRIMES_1m) sizes.append(1000005) - hi = khmer._new_counting_hash(12, sizes) + hi = khmer.CountingHash(12, sizes) hi.consume_fasta(inpath) hi.save(savepath) - ht = khmer._new_counting_hash(12, sizes) + ht = khmer.CountingHash(12, sizes) ht.load(savepath) tracking = khmer._new_hashbits(12, sizes) @@ -311,7 +311,7 @@ def test_load_gz(): sizes.append(1000005) # save uncompressed hashtable. - hi = khmer._new_counting_hash(12, sizes) + hi = khmer.CountingHash(12, sizes) hi.consume_fasta(inpath) hi.save(savepath) @@ -323,7 +323,7 @@ def test_load_gz(): in_file.close() # load compressed hashtable. - ht = khmer._new_counting_hash(12, sizes) + ht = khmer.CountingHash(12, sizes) ht.load(loadpath) tracking = khmer._new_hashbits(12, sizes) @@ -343,11 +343,11 @@ def test_save_load_gz(): sizes = list(PRIMES_1m) sizes.append(1000005) - hi = khmer._new_counting_hash(12, sizes) + hi = khmer.CountingHash(12, sizes) hi.consume_fasta(inpath) hi.save(savepath) - ht = khmer._new_counting_hash(12, sizes) + ht = khmer.CountingHash(12, sizes) ht.load(savepath) tracking = khmer._new_hashbits(12, sizes) @@ -752,7 +752,7 @@ def test_counting_gz_file_type_check(): def test_counting_bad_primes_list(): try: - ht = khmer._new_counting_hash(12, ["a", "b", "c"], 1) + ht = khmer.CountingHash(12, ["a", "b", "c"], 1) assert 0, "bad list of primes should fail" except TypeError as e: print str(e) From 414303802df9f8512be7c11a8fb0c1c6a8d654ac Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Mon, 23 Feb 2015 13:18:27 -0500 Subject: [PATCH 80/83] Hashbits passes CPython checklist --- khmer/__init__.py | 4 +- khmer/_khmermodule.cc | 1215 +++++++++++++++++------------------ scripts/abundance-dist.py | 2 +- tests/test_counting_hash.py | 12 +- tests/test_hashbits.py | 2 +- 5 files changed, 617 insertions(+), 618 deletions(-) diff --git a/khmer/__init__.py b/khmer/__init__.py index 308625738c..59f2dc5245 100644 --- a/khmer/__init__.py +++ b/khmer/__init__.py @@ -58,7 +58,7 @@ def new_hashbits(k, starting_size, n_tables=2): """ primes = get_n_primes_above_x(n_tables, starting_size) - return _new_hashbits(k, primes) + return _Hashbits(k, primes) def new_counting_hash(k, starting_size, n_tables=2): @@ -81,7 +81,7 @@ def load_hashbits(filename): Keyword argument: filename -- the name of the hashbits file """ - hashtable = _new_hashbits(1, [1]) + hashtable = _Hashbits(1, [1]) hashtable.load(filename) return hashtable diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 2692c00097..a4b8c0299d 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -638,7 +638,7 @@ typedef struct { typedef struct { PyObject_HEAD Hashbits * hashbits; -} khmer_KHashbitsObject; +} khmer_KHashbits_Object; static void khmer_subset_dealloc(khmer_KSubsetPartition_Object * obj); @@ -1693,18 +1693,19 @@ static PyObject* _new_counting_hash(PyTypeObject * type, PyObject * args, // hashbits stuff // -static void khmer_hashbits_dealloc(PyObject * obj); +static void khmer_hashbits_dealloc(khmer_KHashbits_Object * obj); static PyObject* khmer_hashbits_new(PyTypeObject * type, PyObject * args, PyObject * kwds); -static int khmer_hashbits_init(khmer_KHashbitsObject * self, PyObject * args, +static int khmer_hashbits_init(khmer_KHashbits_Object * self, PyObject * args, PyObject * kwds); -static PyTypeObject khmer_KHashbitsType -CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashbitsObject") +static PyTypeObject khmer_KHashbits_Type +CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashbits_Object") = { - PyVarObject_HEAD_INIT(NULL, 0) - "Hashbits", sizeof(khmer_KHashbitsObject), - 0, + PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ + "_khmer.Hashbits", /* tp_name */ + sizeof(khmer_KHashbits_Object), /* tp_basicsize */ + 0, /* tp_itemsize */ (destructor)khmer_hashbits_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ @@ -1738,6 +1739,7 @@ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("khmer_KHashbitsObject") 0, /* tp_dictoffset */ (initproc)khmer_hashbits_init, /* tp_init */ 0, /* tp_alloc */ + khmer_hashbits_new, /* tp_new */ }; static @@ -1748,10 +1750,10 @@ hash_abundance_distribution_with_reads_parser(khmer_KCountingHash_Object * me, CountingHash * counting = me->counting; khmer :: python :: khmer_ReadParser_Object * rparser_obj = NULL; - khmer_KHashbitsObject *tracking_obj = NULL; + khmer_KHashbits_Object *tracking_obj = NULL; if (!PyArg_ParseTuple(args, "O!O!", &python::khmer_ReadParser_Type, - &rparser_obj, &khmer_KHashbitsType, &tracking_obj)) { + &rparser_obj, &khmer_KHashbits_Type, &tracking_obj)) { return NULL; } @@ -1794,8 +1796,8 @@ hash_abundance_distribution(khmer_KCountingHash_Object * me, PyObject * args) CountingHash * counting = me->counting; const char * filename = NULL; - khmer_KHashbitsObject * tracking_obj = NULL; - if (!PyArg_ParseTuple(args, "sO!", &filename, &khmer_KHashbitsType, + khmer_KHashbits_Object * tracking_obj = NULL; + if (!PyArg_ParseTuple(args, "sO!", &filename, &khmer_KHashbits_Type, &tracking_obj)) { return NULL; } @@ -1833,9 +1835,10 @@ hash_abundance_distribution(khmer_KCountingHash_Object * me, PyObject * args) return x; } -static PyObject * hashbits_n_unique_kmers(PyObject * self, PyObject * args) +static +PyObject * +hashbits_n_unique_kmers(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; HashIntoType n = hashbits->n_unique_kmers(); @@ -1844,580 +1847,599 @@ static PyObject * hashbits_n_unique_kmers(PyObject * self, PyObject * args) } -static PyObject * hashbits_count_overlap(PyObject * self, PyObject * args) +static +PyObject * +hashbits_count_overlap(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; - khmer_KHashbitsObject * ht2_argu; + khmer_KHashbits_Object * ht2_argu; const char * filename; Hashbits * ht2; - if (!PyArg_ParseTuple(args, "sO!", &filename, &khmer_KHashbitsType, + if (!PyArg_ParseTuple(args, "sO!", &filename, &khmer_KHashbits_Type, &ht2_argu)) { - return NULL; - } + return NULL; +} - ht2 = ht2_argu->hashbits; +ht2 = ht2_argu->hashbits; - // call the C++ function, and trap signals => Python +// call the C++ function, and trap signals => Python - unsigned long long n_consumed; - unsigned int total_reads; - HashIntoType curve[2][100]; +unsigned long long n_consumed; +unsigned int total_reads; +HashIntoType curve[2][100]; - try { - hashbits->consume_fasta_overlap(filename, curve, *ht2, total_reads, n_consumed); - } catch (_khmer_signal &e) { - PyErr_SetString(PyExc_IOError, e.get_message().c_str()); - return NULL; - } +try { + hashbits->consume_fasta_overlap(filename, curve, *ht2, total_reads, n_consumed); +} catch (_khmer_signal &e) { + PyErr_SetString(PyExc_IOError, e.get_message().c_str()); + return NULL; +} - HashIntoType n = hashbits->n_unique_kmers(); - HashIntoType n_overlap = hashbits->n_overlap_kmers(); +HashIntoType n = hashbits->n_unique_kmers(); +HashIntoType n_overlap = hashbits->n_overlap_kmers(); - PyObject * x = PyList_New(200); +PyObject * x = PyList_New(200); - for (unsigned int i = 0; i < 100; i++) { - PyList_SetItem(x, i, Py_BuildValue("K", curve[0][i])); - } - for (unsigned int i = 0; i < 100; i++) { - PyList_SetItem(x, i + 100, Py_BuildValue("K", curve[1][i])); - } - return Py_BuildValue("KKO", n, n_overlap, x); +for (unsigned int i = 0; i < 100; i++) { + PyList_SetItem(x, i, Py_BuildValue("K", curve[0][i])); +} +for (unsigned int i = 0; i < 100; i++) { + PyList_SetItem(x, i + 100, Py_BuildValue("K", curve[1][i])); +} +return Py_BuildValue("KKO", n, n_overlap, x); } -static PyObject * hashbits_n_occupied(PyObject * self, PyObject * args) +static +PyObject * +hashbits_n_occupied(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - HashIntoType start = 0, stop = 0; +HashIntoType start = 0, stop = 0; - if (!PyArg_ParseTuple(args, "|KK", &start, &stop)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "|KK", &start, &stop)) { + return NULL; +} - HashIntoType n = hashbits->n_occupied(start, stop); +HashIntoType n = hashbits->n_occupied(start, stop); - return PyLong_FromUnsignedLongLong(n); +return PyLong_FromUnsignedLongLong(n); } -static PyObject * hashbits_n_tags(PyObject * self, PyObject * args) +static +PyObject * +hashbits_n_tags(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - if (!PyArg_ParseTuple(args, "")) { - return NULL; - } +if (!PyArg_ParseTuple(args, "")) { + return NULL; +} - return PyLong_FromSize_t(hashbits->n_tags()); +return PyLong_FromSize_t(hashbits->n_tags()); } -static PyObject * hashbits_count(PyObject * self, PyObject * args) +static +PyObject * +hashbits_count(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * kmer; +const char * kmer; - if (!PyArg_ParseTuple(args, "s", &kmer)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s", &kmer)) { + return NULL; +} - if (strlen(kmer) != hashbits->ksize()) { - PyErr_SetString(PyExc_ValueError, - "k-mer length must equal the presence table k-mer size"); - return NULL; - } +if (strlen(kmer) != hashbits->ksize()) { + PyErr_SetString(PyExc_ValueError, + "k-mer length must equal the presence table k-mer size"); + return NULL; +} - hashbits->count(kmer); +hashbits->count(kmer); - return PyLong_FromLong(1); +return PyLong_FromLong(1); } -static PyObject * hashbits_consume(PyObject * self, PyObject * args) +static +PyObject * +hashbits_consume(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * long_str; +const char * long_str; - if (!PyArg_ParseTuple(args, "s", &long_str)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s", &long_str)) { + return NULL; +} - if (strlen(long_str) < hashbits->ksize()) { - PyErr_SetString(PyExc_ValueError, - "string length must >= the hashbits k-mer size"); - return NULL; - } +if (strlen(long_str) < hashbits->ksize()) { + PyErr_SetString(PyExc_ValueError, + "string length must >= the hashbits k-mer size"); + return NULL; +} - unsigned int n_consumed; - n_consumed = hashbits->consume_string(long_str); +unsigned int n_consumed; +n_consumed = hashbits->consume_string(long_str); - return PyLong_FromLong(n_consumed); +return PyLong_FromLong(n_consumed); } -static PyObject * hashbits_print_stop_tags(PyObject * self, PyObject * args) +static +PyObject * +hashbits_print_stop_tags(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * filename = NULL; +const char * filename = NULL; - if (!PyArg_ParseTuple(args, "s", &filename)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s", &filename)) { + return NULL; +} - hashbits->print_stop_tags(filename); +hashbits->print_stop_tags(filename); - Py_RETURN_NONE; +Py_RETURN_NONE; } -static PyObject * hashbits_print_tagset(PyObject * self, PyObject * args) +static +PyObject * +hashbits_print_tagset(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * filename = NULL; +const char * filename = NULL; - if (!PyArg_ParseTuple(args, "s", &filename)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s", &filename)) { + return NULL; +} - hashbits->print_tagset(filename); +hashbits->print_tagset(filename); - Py_RETURN_NONE; +Py_RETURN_NONE; } -static PyObject * hashbits_load_stop_tags(PyObject * self, PyObject * args) +static +PyObject * +hashbits_load_stop_tags(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * filename = NULL; - PyObject * clear_tags_o = NULL; +const char * filename = NULL; +PyObject * clear_tags_o = NULL; - if (!PyArg_ParseTuple(args, "s|O", &filename, &clear_tags_o)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s|O", &filename, &clear_tags_o)) { + return NULL; +} - bool clear_tags = true; - if (clear_tags_o && !PyObject_IsTrue(clear_tags_o)) { - clear_tags = false; - } +bool clear_tags = true; +if (clear_tags_o && !PyObject_IsTrue(clear_tags_o)) { + clear_tags = false; +} - try { - hashbits->load_stop_tags(filename, clear_tags); - } catch (khmer_file_exception &e) { - PyErr_SetString(PyExc_IOError, e.what()); - return NULL; - } +try { + hashbits->load_stop_tags(filename, clear_tags); +} catch (khmer_file_exception &e) { + PyErr_SetString(PyExc_IOError, e.what()); + return NULL; +} - Py_RETURN_NONE; +Py_RETURN_NONE; } -static PyObject * hashbits_save_stop_tags(PyObject * self, PyObject * args) +static +PyObject * +hashbits_save_stop_tags(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * filename = NULL; +const char * filename = NULL; - if (!PyArg_ParseTuple(args, "s", &filename)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s", &filename)) { + return NULL; +} - hashbits->save_stop_tags(filename); +hashbits->save_stop_tags(filename); - Py_RETURN_NONE; +Py_RETURN_NONE; } -static PyObject * hashbits_traverse_from_tags(PyObject * self, PyObject * args) +static +PyObject * +hashbits_traverse_from_tags(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - khmer_KCountingHash_Object * counting_o = NULL; - unsigned int distance, threshold, frequency; +khmer_KCountingHash_Object * counting_o = NULL; +unsigned int distance, threshold, frequency; - if (!PyArg_ParseTuple(args, "O!III", &khmer_KCountingHash_Type, &counting_o, - &distance, &threshold, &frequency)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "O!III", &khmer_KCountingHash_Type, &counting_o, + &distance, &threshold, &frequency)) { + return NULL; +} - hashbits->traverse_from_tags(distance, threshold, frequency, - * counting_o->counting); +hashbits->traverse_from_tags(distance, threshold, frequency, + * counting_o->counting); - Py_RETURN_NONE; +Py_RETURN_NONE; } -static PyObject * hashbits_repartition_largest_partition(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_repartition_largest_partition(khmer_KHashbits_Object * me, + PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - khmer_KCountingHash_Object * counting_o = NULL; - PyObject * subset_o = NULL; - unsigned int distance, threshold, frequency; +khmer_KCountingHash_Object * counting_o = NULL; +PyObject * subset_o = NULL; +unsigned int distance, threshold, frequency; - if (!PyArg_ParseTuple(args, "OO!III", &subset_o, &khmer_KCountingHash_Type, - &counting_o, &distance, &threshold, &frequency)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "OO!III", &subset_o, &khmer_KCountingHash_Type, + &counting_o, &distance, &threshold, &frequency)) { + return NULL; +} - SubsetPartition * subset_p; - if (subset_o != Py_None) { - subset_p = (SubsetPartition *) PyCObject_AsVoidPtr(subset_o); - } else { - subset_p = hashbits->partition; - } +SubsetPartition * subset_p; +if (subset_o != Py_None) { + subset_p = (SubsetPartition *) PyCObject_AsVoidPtr(subset_o); +} else { + subset_p = hashbits->partition; +} - CountingHash * counting = counting_o->counting; +CountingHash * counting = counting_o->counting; - unsigned long next_largest = subset_p->repartition_largest_partition(distance, - threshold, frequency, *counting); +unsigned long next_largest = subset_p->repartition_largest_partition(distance, + threshold, frequency, *counting); - return PyLong_FromLong(next_largest); +return PyLong_FromLong(next_largest); } -static PyObject * hashbits_get(PyObject * self, PyObject * args) +static +PyObject * +hashbits_get(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; - - PyObject * arg; +Hashbits * hashbits = me->hashbits; - if (!PyArg_ParseTuple(args, "O", &arg)) { - return NULL; - } +PyObject * arg; - unsigned long count = 0; +if (!PyArg_ParseTuple(args, "O", &arg)) { + return NULL; +} - if (PyInt_Check(arg)) { - long pos = PyInt_AsLong(arg); - count = hashbits->get_count((unsigned int) pos); - } else if (PyBytes_Check(arg)) { - std::string s = PyBytes_AsString(arg); +unsigned long count = 0; - if (strlen(s.c_str()) < hashbits->ksize()) { - PyErr_SetString(PyExc_ValueError, - "string length must equal the presence table k-mer size"); - return NULL; - } +if (PyInt_Check(arg)) { + long pos = PyInt_AsLong(arg); + count = hashbits->get_count((unsigned int) pos); +} else if (PyBytes_Check(arg)) { + std::string s = PyBytes_AsString(arg); - count = hashbits->get_count(s.c_str()); - } else { - PyErr_SetString(PyExc_ValueError, "must pass in an int or string"); + if (strlen(s.c_str()) < hashbits->ksize()) { + PyErr_SetString(PyExc_ValueError, + "string length must equal the presence table k-mer size"); return NULL; } - return PyLong_FromLong(count); + count = hashbits->get_count(s.c_str()); +} else { + PyErr_SetString(PyExc_ValueError, "must pass in an int or string"); + return NULL; } -static PyObject * hashbits_calc_connected_graph_size(PyObject * self, - PyObject * args) +return PyLong_FromLong(count); +} + +static +PyObject * +hashbits_calc_connected_graph_size(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * _kmer; - unsigned int max_size = 0; - PyObject * break_on_circum_o = NULL; - if (!PyArg_ParseTuple(args, "s|IO", &_kmer, &max_size, &break_on_circum_o)) { - return NULL; - } +const char * _kmer; +unsigned int max_size = 0; +PyObject * break_on_circum_o = NULL; +if (!PyArg_ParseTuple(args, "s|IO", &_kmer, &max_size, &break_on_circum_o)) { + return NULL; +} - bool break_on_circum = false; - if (break_on_circum_o && PyObject_IsTrue(break_on_circum_o)) { - break_on_circum = true; - } +bool break_on_circum = false; +if (break_on_circum_o && PyObject_IsTrue(break_on_circum_o)) { + break_on_circum = true; +} - unsigned long long size = 0; +unsigned long long size = 0; - Py_BEGIN_ALLOW_THREADS - SeenSet keeper; - hashbits->calc_connected_graph_size(_kmer, size, keeper, max_size, - break_on_circum); - Py_END_ALLOW_THREADS +Py_BEGIN_ALLOW_THREADS +SeenSet keeper; +hashbits->calc_connected_graph_size(_kmer, size, keeper, max_size, + break_on_circum); +Py_END_ALLOW_THREADS - return PyLong_FromUnsignedLongLong(size); +return PyLong_FromUnsignedLongLong(size); } -static PyObject * hashbits_kmer_degree(PyObject * self, PyObject * args) +static +PyObject * +hashbits_kmer_degree(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * kmer_s = NULL; +const char * kmer_s = NULL; - if (!PyArg_ParseTuple(args, "s", &kmer_s)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s", &kmer_s)) { + return NULL; +} - return PyLong_FromLong(hashbits->kmer_degree(kmer_s)); +return PyLong_FromLong(hashbits->kmer_degree(kmer_s)); } -static PyObject * hashbits_trim_on_stoptags(PyObject * self, PyObject * args) +static +PyObject * +hashbits_trim_on_stoptags(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * seq = NULL; +const char * seq = NULL; - if (!PyArg_ParseTuple(args, "s", &seq)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s", &seq)) { + return NULL; +} - size_t trim_at; - Py_BEGIN_ALLOW_THREADS +size_t trim_at; +Py_BEGIN_ALLOW_THREADS - trim_at = hashbits->trim_on_stoptags(seq); +trim_at = hashbits->trim_on_stoptags(seq); - Py_END_ALLOW_THREADS; +Py_END_ALLOW_THREADS; - PyObject * trim_seq = PyBytes_FromStringAndSize(seq, trim_at); - if (trim_seq == NULL) { - return NULL; - } - PyObject * ret = Py_BuildValue("Ok", trim_seq, (unsigned long) trim_at); - Py_DECREF(trim_seq); +PyObject * trim_seq = PyBytes_FromStringAndSize(seq, trim_at); +if (trim_seq == NULL) { + return NULL; +} +PyObject * ret = Py_BuildValue("Ok", trim_seq, (unsigned long) trim_at); +Py_DECREF(trim_seq); - return ret; +return ret; } -static PyObject * hashbits_identify_stoptags_by_position(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_identify_stoptags_by_position(khmer_KHashbits_Object * me, + PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * seq = NULL; +const char * seq = NULL; - if (!PyArg_ParseTuple(args, "s", &seq)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s", &seq)) { + return NULL; +} - std::vector posns; - Py_BEGIN_ALLOW_THREADS +std::vector posns; +Py_BEGIN_ALLOW_THREADS - hashbits->identify_stop_tags_by_position(seq, posns); +hashbits->identify_stop_tags_by_position(seq, posns); - Py_END_ALLOW_THREADS; +Py_END_ALLOW_THREADS; - PyObject * x = PyList_New(posns.size()); +PyObject * x = PyList_New(posns.size()); - for (unsigned int i = 0; i < posns.size(); i++) { - PyList_SET_ITEM(x, i, Py_BuildValue("I", posns[i])); - } +for (unsigned int i = 0; i < posns.size(); i++) { + PyList_SET_ITEM(x, i, Py_BuildValue("I", posns[i])); +} - return x; +return x; } -static PyObject * hashbits_do_subset_partition(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_do_subset_partition(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - HashIntoType start_kmer = 0, end_kmer = 0; - PyObject * break_on_stop_tags_o = NULL; - PyObject * stop_big_traversals_o = NULL; +HashIntoType start_kmer = 0, end_kmer = 0; +PyObject * break_on_stop_tags_o = NULL; +PyObject * stop_big_traversals_o = NULL; - if (!PyArg_ParseTuple(args, "|KKOO", &start_kmer, &end_kmer, - &break_on_stop_tags_o, - &stop_big_traversals_o)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "|KKOO", &start_kmer, &end_kmer, + &break_on_stop_tags_o, + &stop_big_traversals_o)) { + return NULL; +} - bool break_on_stop_tags = false; - if (break_on_stop_tags_o && PyObject_IsTrue(break_on_stop_tags_o)) { - break_on_stop_tags = true; - } - bool stop_big_traversals = false; - if (stop_big_traversals_o && PyObject_IsTrue(stop_big_traversals_o)) { - stop_big_traversals = true; - } +bool break_on_stop_tags = false; +if (break_on_stop_tags_o && PyObject_IsTrue(break_on_stop_tags_o)) { + break_on_stop_tags = true; +} +bool stop_big_traversals = false; +if (stop_big_traversals_o && PyObject_IsTrue(stop_big_traversals_o)) { + stop_big_traversals = true; +} - SubsetPartition * subset_p = NULL; - try { - Py_BEGIN_ALLOW_THREADS - subset_p = new SubsetPartition(hashbits); - subset_p->do_partition(start_kmer, end_kmer, break_on_stop_tags, - stop_big_traversals); - Py_END_ALLOW_THREADS - } catch (_khmer_signal &e) { - return NULL; - } catch (std::bad_alloc &e) { - return PyErr_NoMemory(); - } +SubsetPartition * subset_p = NULL; +try { + Py_BEGIN_ALLOW_THREADS + subset_p = new SubsetPartition(hashbits); + subset_p->do_partition(start_kmer, end_kmer, break_on_stop_tags, + stop_big_traversals); + Py_END_ALLOW_THREADS +} catch (_khmer_signal &e) { + return NULL; +} catch (std::bad_alloc &e) { + return PyErr_NoMemory(); +} - return PyCObject_FromVoidPtr(subset_p, free_subset_partition_info); +return PyCObject_FromVoidPtr(subset_p, free_subset_partition_info); } -static PyObject * hashbits_join_partitions_by_path(PyObject * self, - PyObject *args) +static +PyObject * +hashbits_join_partitions_by_path(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * sequence = NULL; - if (!PyArg_ParseTuple(args, "s", &sequence)) { - return NULL; - } +const char * sequence = NULL; +if (!PyArg_ParseTuple(args, "s", &sequence)) { + return NULL; +} - hashbits->partition->join_partitions_by_path(sequence); +hashbits->partition->join_partitions_by_path(sequence); - Py_RETURN_NONE; +Py_RETURN_NONE; } -static PyObject * hashbits_merge_subset(PyObject * self, PyObject *args) +static +PyObject * +hashbits_merge_subset(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - PyObject * subset_obj; - if (!PyArg_ParseTuple(args, "O", &subset_obj)) { - return NULL; - } +PyObject * subset_obj; +if (!PyArg_ParseTuple(args, "O", &subset_obj)) { + return NULL; +} - if (!PyCObject_Check(subset_obj)) { - PyErr_SetString( PyExc_ValueError, "invalid subset"); - return NULL; - } +if (!PyCObject_Check(subset_obj)) { + PyErr_SetString( PyExc_ValueError, "invalid subset"); + return NULL; +} - SubsetPartition * subset_p; - subset_p = (SubsetPartition *) PyCObject_AsVoidPtr(subset_obj); +SubsetPartition * subset_p; +subset_p = (SubsetPartition *) PyCObject_AsVoidPtr(subset_obj); - hashbits->partition->merge(subset_p); +hashbits->partition->merge(subset_p); - Py_RETURN_NONE; +Py_RETURN_NONE; } -static PyObject * hashbits_merge_from_disk(PyObject * self, PyObject *args) +static +PyObject * +hashbits_merge_from_disk(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * filename = NULL; - if (!PyArg_ParseTuple(args, "s", &filename)) { - return NULL; - } +const char * filename = NULL; +if (!PyArg_ParseTuple(args, "s", &filename)) { + return NULL; +} - try { - hashbits->partition->merge_from_disk(filename); - } catch (khmer_file_exception &e) { - PyErr_SetString(PyExc_IOError, e.what()); - return NULL; - } +try { + hashbits->partition->merge_from_disk(filename); +} catch (khmer_file_exception &e) { + PyErr_SetString(PyExc_IOError, e.what()); + return NULL; +} - Py_RETURN_NONE; +Py_RETURN_NONE; } -static PyObject * hashbits_consume_fasta(PyObject * self, PyObject * args) +static +PyObject * +hashbits_consume_fasta(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * filename; +const char * filename; - if (!PyArg_ParseTuple(args, "s", &filename)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "s", &filename)) { + return NULL; +} - // call the C++ function, and trap signals => Python +// call the C++ function, and trap signals => Python - unsigned long long n_consumed = 0; - unsigned int total_reads = 0; +unsigned long long n_consumed = 0; +unsigned int total_reads = 0; - try { - hashbits->consume_fasta(filename, total_reads, n_consumed); - } catch (_khmer_signal &e) { - PyErr_SetString(PyExc_IOError, e.get_message().c_str()); - return NULL; - } catch (khmer_file_exception &e) { - PyErr_SetString(PyExc_IOError, e.what()); - return NULL; - } +try { + hashbits->consume_fasta(filename, total_reads, n_consumed); +} catch (_khmer_signal &e) { + PyErr_SetString(PyExc_IOError, e.get_message().c_str()); + return NULL; +} catch (khmer_file_exception &e) { + PyErr_SetString(PyExc_IOError, e.what()); + return NULL; +} - return Py_BuildValue("IK", total_reads, n_consumed); +return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * hashbits_consume_fasta_with_reads_parser( - PyObject * self, PyObject * args -) +static +PyObject * +hashbits_consume_fasta_with_reads_parser(khmer_KHashbits_Object * me, + PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - PyObject * rparser_obj = NULL; +PyObject * rparser_obj = NULL; - if (!PyArg_ParseTuple( - args, "O", &rparser_obj)) { - return NULL; - } +if (!PyArg_ParseTuple( + args, "O", &rparser_obj)) { + return NULL; +} - read_parsers:: IParser * rparser = - _PyObject_to_khmer_ReadParser( rparser_obj ); +read_parsers:: IParser * rparser = + _PyObject_to_khmer_ReadParser( rparser_obj ); - // call the C++ function, and trap signals => Python - unsigned long long n_consumed = 0; - unsigned int total_reads = 0; - char const * exc = NULL; - Py_BEGIN_ALLOW_THREADS - try { - hashbits->consume_fasta(rparser, total_reads, n_consumed); - } catch (_khmer_signal &e) { - exc = e.get_message().c_str(); - } +// call the C++ function, and trap signals => Python +unsigned long long n_consumed = 0; +unsigned int total_reads = 0; +char const * exc = NULL; +Py_BEGIN_ALLOW_THREADS +try { + hashbits->consume_fasta(rparser, total_reads, n_consumed); +} catch (_khmer_signal &e) { + exc = e.get_message().c_str(); +} - Py_END_ALLOW_THREADS - if (exc != NULL) { - PyErr_SetString(PyExc_IOError, exc); - return NULL; - } +Py_END_ALLOW_THREADS +if (exc != NULL) { + PyErr_SetString(PyExc_IOError, exc); + return NULL; +} - return Py_BuildValue("IK", total_reads, n_consumed); +return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * hashbits_consume_fasta_and_traverse(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_consume_fasta_and_traverse(khmer_KHashbits_Object * me, + PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; - Hashbits * hashbits = me->hashbits; +Hashbits * hashbits = me->hashbits; - const char * filename; - unsigned int radius, big_threshold, transfer_threshold; - khmer_KCountingHash_Object * counting_o = NULL; +const char * filename; +unsigned int radius, big_threshold, transfer_threshold; +khmer_KCountingHash_Object * counting_o = NULL; - if (!PyArg_ParseTuple(args, "sIIIO!", &filename, - &radius, &big_threshold, &transfer_threshold, - &khmer_KCountingHash_Type, &counting_o)) { - return NULL; - } +if (!PyArg_ParseTuple(args, "sIIIO!", &filename, + &radius, &big_threshold, &transfer_threshold, + &khmer_KCountingHash_Type, &counting_o)) { + return NULL; +} - CountingHash * counting = counting_o->counting; +CountingHash * counting = counting_o->counting; - hashbits->consume_fasta_and_traverse(filename, radius, big_threshold, - transfer_threshold, *counting); +hashbits->consume_fasta_and_traverse(filename, radius, big_threshold, + transfer_threshold, *counting); - Py_RETURN_NONE; +Py_RETURN_NONE; } void sig(unsigned int total_reads, unsigned int n_consumed) { - std::cout << total_reads << " " << n_consumed << std::endl; +std::cout << total_reads << " " << n_consumed << std::endl; } -static PyObject * hashbits_consume_fasta_and_tag(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_consume_fasta_and_tag(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename; @@ -2444,11 +2466,11 @@ static PyObject * hashbits_consume_fasta_and_tag(PyObject * self, return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * hashbits_consume_fasta_and_tag_with_reads_parser( - PyObject * self, PyObject * args -) +static +PyObject * +hashbits_consume_fasta_and_tag_with_reads_parser(khmer_KHashbits_Object * me, + PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; python::khmer_ReadParser_Object * rparser_obj = NULL; @@ -2483,10 +2505,11 @@ static PyObject * hashbits_consume_fasta_and_tag_with_reads_parser( return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * hashbits_consume_fasta_and_tag_with_stoptags(PyObject * self, +static +PyObject * +hashbits_consume_fasta_and_tag_with_stoptags(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename; @@ -2514,10 +2537,10 @@ static PyObject * hashbits_consume_fasta_and_tag_with_stoptags(PyObject * self, return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * hashbits_consume_partitioned_fasta(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_consume_partitioned_fasta(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename; @@ -2544,9 +2567,10 @@ static PyObject * hashbits_consume_partitioned_fasta(PyObject * self, return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * hashbits_find_all_tags(PyObject * self, PyObject *args) +static +PyObject * +hashbits_find_all_tags(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * kmer_s = NULL; @@ -2582,9 +2606,10 @@ static PyObject * hashbits_find_all_tags(PyObject * self, PyObject *args) return PyCObject_FromVoidPtr(ppi, free_pre_partition_info); } -static PyObject * hashbits_assign_partition_id(PyObject * self, PyObject *args) +static +PyObject * +hashbits_assign_partition_id(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; PyObject * ppi_obj; @@ -2607,9 +2632,10 @@ static PyObject * hashbits_assign_partition_id(PyObject * self, PyObject *args) return PyLong_FromLong(p); } -static PyObject * hashbits_add_tag(PyObject * self, PyObject *args) +static +PyObject * +hashbits_add_tag(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * kmer_s = NULL; @@ -2623,9 +2649,10 @@ static PyObject * hashbits_add_tag(PyObject * self, PyObject *args) Py_RETURN_NONE; } -static PyObject * hashbits_add_stop_tag(PyObject * self, PyObject *args) +static +PyObject * +hashbits_add_stop_tag(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * kmer_s = NULL; @@ -2639,9 +2666,10 @@ static PyObject * hashbits_add_stop_tag(PyObject * self, PyObject *args) Py_RETURN_NONE; } -static PyObject * hashbits_get_stop_tags(PyObject * self, PyObject * args) +static +PyObject * +hashbits_get_stop_tags(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; if (!PyArg_ParseTuple(args, "")) { @@ -2662,9 +2690,10 @@ static PyObject * hashbits_get_stop_tags(PyObject * self, PyObject * args) return x; } -static PyObject * hashbits_get_tagset(PyObject * self, PyObject * args) +static +PyObject * +hashbits_get_tagset(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; if (!PyArg_ParseTuple(args, "")) { @@ -2685,9 +2714,10 @@ static PyObject * hashbits_get_tagset(PyObject * self, PyObject * args) return x; } -static PyObject * hashbits_output_partitions(PyObject * self, PyObject * args) +static +PyObject * +hashbits_output_partitions(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -2722,9 +2752,10 @@ static PyObject * hashbits_output_partitions(PyObject * self, PyObject * args) return PyLong_FromLong(n_partitions); } -static PyObject * hashbits_find_unpart(PyObject * self, PyObject * args) +static +PyObject * +hashbits_find_unpart(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -2754,9 +2785,10 @@ static PyObject * hashbits_find_unpart(PyObject * self, PyObject * args) // return Py_None; } -static PyObject * hashbits_filter_if_present(PyObject * self, PyObject * args) +static +PyObject * +hashbits_filter_if_present(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -2775,9 +2807,10 @@ static PyObject * hashbits_filter_if_present(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hashbits_save_partitionmap(PyObject * self, PyObject * args) +static +PyObject * +hashbits_save_partitionmap(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -2791,9 +2824,10 @@ static PyObject * hashbits_save_partitionmap(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hashbits_load_partitionmap(PyObject * self, PyObject * args) +static +PyObject * +hashbits_load_partitionmap(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -2807,10 +2841,10 @@ static PyObject * hashbits_load_partitionmap(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hashbits__validate_partitionmap(PyObject * self, - PyObject * args) +static +PyObject * +hashbits__validate_partitionmap(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; if (!PyArg_ParseTuple(args, "")) { @@ -2822,9 +2856,10 @@ static PyObject * hashbits__validate_partitionmap(PyObject * self, Py_RETURN_NONE; } -static PyObject * hashbits_count_partitions(PyObject * self, PyObject * args) +static +PyObject * +hashbits_count_partitions(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; if (!PyArg_ParseTuple(args, "")) { @@ -2838,8 +2873,9 @@ static PyObject * hashbits_count_partitions(PyObject * self, PyObject * args) (Py_ssize_t) n_unassigned); } -static PyObject * hashbits_subset_count_partitions(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_subset_count_partitions(khmer_KHashbits_Object * me, PyObject * args) { PyObject * subset_obj = NULL; @@ -2857,7 +2893,9 @@ static PyObject * hashbits_subset_count_partitions(PyObject * self, (Py_ssize_t) n_unassigned); } -static PyObject * hashbits_subset_partition_size_distribution(PyObject * self, +static +PyObject * +hashbits_subset_partition_size_distribution(khmer_KHashbits_Object * me, PyObject * args) { PyObject * subset_obj = NULL; @@ -2900,9 +2938,10 @@ static PyObject * hashbits_subset_partition_size_distribution(PyObject * self, return returnValue; } -static PyObject * hashbits_load(PyObject * self, PyObject * args) +static +PyObject * +hashbits_load(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -2921,9 +2960,10 @@ static PyObject * hashbits_load(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hashbits_save(PyObject * self, PyObject * args) +static +PyObject * +hashbits_save(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -2937,9 +2977,10 @@ static PyObject * hashbits_save(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hashbits_load_tagset(PyObject * self, PyObject * args) +static +PyObject * +hashbits_load_tagset(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -2964,9 +3005,10 @@ static PyObject * hashbits_load_tagset(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hashbits_save_tagset(PyObject * self, PyObject * args) +static +PyObject * +hashbits_save_tagset(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -2980,8 +3022,9 @@ static PyObject * hashbits_save_tagset(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hashbits_save_subset_partitionmap(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_save_subset_partitionmap(khmer_KHashbits_Object * me, PyObject * args) { const char * filename = NULL; PyObject * subset_obj = NULL; @@ -3002,10 +3045,10 @@ static PyObject * hashbits_save_subset_partitionmap(PyObject * self, Py_RETURN_NONE; } -static PyObject * hashbits_load_subset_partitionmap(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_load_subset_partitionmap(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * filename = NULL; @@ -3044,9 +3087,10 @@ static PyObject * hashbits_load_subset_partitionmap(PyObject * self, } } -static PyObject * hashbits__set_tag_density(PyObject * self, PyObject * args) +static +PyObject * +hashbits__set_tag_density(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; unsigned int d; @@ -3059,9 +3103,10 @@ static PyObject * hashbits__set_tag_density(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hashbits__get_tag_density(PyObject * self, PyObject * args) +static +PyObject * +hashbits__get_tag_density(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; if (!PyArg_ParseTuple(args, "")) { @@ -3073,8 +3118,10 @@ static PyObject * hashbits__get_tag_density(PyObject * self, PyObject * args) return PyLong_FromLong(d); } -static PyObject * hashbits__validate_subset_partitionmap(PyObject * self, - PyObject * args) +static +PyObject * +hashbits__validate_subset_partitionmap(khmer_KHashbits_Object * me, + PyObject * args) { PyObject * subset_obj = NULL; @@ -3089,9 +3136,10 @@ static PyObject * hashbits__validate_subset_partitionmap(PyObject * self, Py_RETURN_NONE; } -static PyObject * hashbits_set_partition_id(PyObject * self, PyObject * args) +static +PyObject * +hashbits_set_partition_id(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * kmer = NULL; @@ -3106,9 +3154,10 @@ static PyObject * hashbits_set_partition_id(PyObject * self, PyObject * args) Py_RETURN_NONE; } -static PyObject * hashbits_join_partitions(PyObject * self, PyObject * args) +static +PyObject * +hashbits_join_partitions(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; PartitionID p1 = 0, p2 = 0; @@ -3122,9 +3171,10 @@ static PyObject * hashbits_join_partitions(PyObject * self, PyObject * args) return PyLong_FromLong(p1); } -static PyObject * hashbits_get_partition_id(PyObject * self, PyObject * args) +static +PyObject * +hashbits_get_partition_id(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * kmer = NULL; @@ -3139,10 +3189,10 @@ static PyObject * hashbits_get_partition_id(PyObject * self, PyObject * args) return PyLong_FromLong(partition_id); } -static PyObject * hashbits_is_single_partition(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_is_single_partition(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * seq = NULL; @@ -3164,10 +3214,10 @@ static PyObject * hashbits_is_single_partition(PyObject * self, return val; } -static PyObject * hashbits_divide_tags_into_subsets(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_divide_tags_into_subsets(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; unsigned int subset_size = 0; @@ -3189,10 +3239,10 @@ static PyObject * hashbits_divide_tags_into_subsets(PyObject * self, return x; } -static PyObject * hashbits_count_kmers_within_radius(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_count_kmers_within_radius(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * kmer = NULL; @@ -3217,9 +3267,10 @@ static PyObject * hashbits_count_kmers_within_radius(PyObject * self, return PyLong_FromUnsignedLong(n); } -static PyObject * hashbits_get_ksize(PyObject * self, PyObject * args) +static +PyObject * +hashbits_get_ksize(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; if (!PyArg_ParseTuple(args, "")) { @@ -3232,9 +3283,10 @@ static PyObject * hashbits_get_ksize(PyObject * self, PyObject * args) } -static PyObject * hashbits_get_hashsizes(PyObject * self, PyObject * args) +static +PyObject * +hashbits_get_hashsizes(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; if (!PyArg_ParseTuple(args, "")) { @@ -3251,10 +3303,10 @@ static PyObject * hashbits_get_hashsizes(PyObject * self, PyObject * args) return x; } -static PyObject * hashbits_extract_unique_paths(PyObject * self, - PyObject * args) +static +PyObject * +hashbits_extract_unique_paths(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * sequence = NULL; @@ -3279,9 +3331,10 @@ static PyObject * hashbits_extract_unique_paths(PyObject * self, return x; } -static PyObject * hashbits_get_median_count(PyObject * self, PyObject * args) +static +PyObject * +hashbits_get_median_count(khmer_KHashbits_Object * me, PyObject * args) { - khmer_KHashbitsObject * me = (khmer_KHashbitsObject *) self; Hashbits * hashbits = me->hashbits; const char * long_str; @@ -3305,71 +3358,71 @@ static PyObject * hashbits_get_median_count(PyObject * self, PyObject * args) } static PyMethodDef khmer_hashbits_methods[] = { - { "extract_unique_paths", hashbits_extract_unique_paths, METH_VARARGS, "" }, - { "ksize", hashbits_get_ksize, METH_VARARGS, "" }, - { "hashsizes", hashbits_get_hashsizes, METH_VARARGS, "" }, - { "n_occupied", hashbits_n_occupied, METH_VARARGS, "Count the number of occupied bins" }, - { "n_unique_kmers", hashbits_n_unique_kmers, METH_VARARGS, "Count the number of unique kmers" }, - { "count", hashbits_count, METH_VARARGS, "Count the given kmer" }, - { "count_overlap", hashbits_count_overlap, METH_VARARGS, "Count overlap kmers in two datasets" }, - { "consume", hashbits_consume, METH_VARARGS, "Count all k-mers in the given string" }, - { "load_stop_tags", hashbits_load_stop_tags, METH_VARARGS, "" }, - { "save_stop_tags", hashbits_save_stop_tags, METH_VARARGS, "" }, - { "print_stop_tags", hashbits_print_stop_tags, METH_VARARGS, "" }, - { "print_tagset", hashbits_print_tagset, METH_VARARGS, "" }, - { "get", hashbits_get, METH_VARARGS, "Get the count for the given k-mer" }, - { "calc_connected_graph_size", hashbits_calc_connected_graph_size, METH_VARARGS, "" }, - { "kmer_degree", hashbits_kmer_degree, METH_VARARGS, "" }, - { "trim_on_stoptags", hashbits_trim_on_stoptags, METH_VARARGS, "" }, - { "identify_stoptags_by_position", hashbits_identify_stoptags_by_position, METH_VARARGS, "" }, - { "do_subset_partition", hashbits_do_subset_partition, METH_VARARGS, "" }, - { "find_all_tags", hashbits_find_all_tags, METH_VARARGS, "" }, - { "assign_partition_id", hashbits_assign_partition_id, METH_VARARGS, "" }, - { "output_partitions", hashbits_output_partitions, METH_VARARGS, "" }, - { "find_unpart", hashbits_find_unpart, METH_VARARGS, "" }, - { "filter_if_present", hashbits_filter_if_present, METH_VARARGS, "" }, - { "add_tag", hashbits_add_tag, METH_VARARGS, "" }, - { "add_stop_tag", hashbits_add_stop_tag, METH_VARARGS, "" }, - { "get_stop_tags", hashbits_get_stop_tags, METH_VARARGS, "" }, - { "get_tagset", hashbits_get_tagset, METH_VARARGS, "" }, - { "load", hashbits_load, METH_VARARGS, "" }, - { "save", hashbits_save, METH_VARARGS, "" }, - { "load_tagset", hashbits_load_tagset, METH_VARARGS, "" }, - { "save_tagset", hashbits_save_tagset, METH_VARARGS, "" }, - { "n_tags", hashbits_n_tags, METH_VARARGS, "" }, - { "divide_tags_into_subsets", hashbits_divide_tags_into_subsets, METH_VARARGS, "" }, - { "load_partitionmap", hashbits_load_partitionmap, METH_VARARGS, "" }, - { "save_partitionmap", hashbits_save_partitionmap, METH_VARARGS, "" }, - { "_validate_partitionmap", hashbits__validate_partitionmap, METH_VARARGS, "" }, - { "_get_tag_density", hashbits__get_tag_density, METH_VARARGS, "" }, - { "_set_tag_density", hashbits__set_tag_density, METH_VARARGS, "" }, - { "consume_fasta", hashbits_consume_fasta, METH_VARARGS, "Count all k-mers in a given file" }, - { "consume_fasta_with_reads_parser", hashbits_consume_fasta_with_reads_parser, METH_VARARGS, "Count all k-mers in a given file" }, - { "consume_fasta_and_tag", hashbits_consume_fasta_and_tag, METH_VARARGS, "Count all k-mers in a given file" }, + { "extract_unique_paths", (PyCFunction)hashbits_extract_unique_paths, METH_VARARGS, "" }, + { "ksize", (PyCFunction)hashbits_get_ksize, METH_VARARGS, "" }, + { "hashsizes", (PyCFunction)hashbits_get_hashsizes, METH_VARARGS, "" }, + { "n_occupied", (PyCFunction)hashbits_n_occupied, METH_VARARGS, "Count the number of occupied bins" }, + { "n_unique_kmers", (PyCFunction)hashbits_n_unique_kmers, METH_VARARGS, "Count the number of unique kmers" }, + { "count", (PyCFunction)hashbits_count, METH_VARARGS, "Count the given kmer" }, + { "count_overlap", (PyCFunction)hashbits_count_overlap, METH_VARARGS, "Count overlap kmers in two datasets" }, + { "consume", (PyCFunction)hashbits_consume, METH_VARARGS, "Count all k-mers in the given string" }, + { "load_stop_tags", (PyCFunction)hashbits_load_stop_tags, METH_VARARGS, "" }, + { "save_stop_tags", (PyCFunction)hashbits_save_stop_tags, METH_VARARGS, "" }, + { "print_stop_tags", (PyCFunction)hashbits_print_stop_tags, METH_VARARGS, "" }, + { "print_tagset", (PyCFunction)hashbits_print_tagset, METH_VARARGS, "" }, + { "get", (PyCFunction)hashbits_get, METH_VARARGS, "Get the count for the given k-mer" }, + { "calc_connected_graph_size", (PyCFunction)hashbits_calc_connected_graph_size, METH_VARARGS, "" }, + { "kmer_degree", (PyCFunction)hashbits_kmer_degree, METH_VARARGS, "" }, + { "trim_on_stoptags", (PyCFunction)hashbits_trim_on_stoptags, METH_VARARGS, "" }, + { "identify_stoptags_by_position", (PyCFunction)hashbits_identify_stoptags_by_position, METH_VARARGS, "" }, + { "do_subset_partition", (PyCFunction)hashbits_do_subset_partition, METH_VARARGS, "" }, + { "find_all_tags", (PyCFunction)hashbits_find_all_tags, METH_VARARGS, "" }, + { "assign_partition_id", (PyCFunction)hashbits_assign_partition_id, METH_VARARGS, "" }, + { "output_partitions", (PyCFunction)hashbits_output_partitions, METH_VARARGS, "" }, + { "find_unpart", (PyCFunction)hashbits_find_unpart, METH_VARARGS, "" }, + { "filter_if_present", (PyCFunction)hashbits_filter_if_present, METH_VARARGS, "" }, + { "add_tag", (PyCFunction)hashbits_add_tag, METH_VARARGS, "" }, + { "add_stop_tag", (PyCFunction)hashbits_add_stop_tag, METH_VARARGS, "" }, + { "get_stop_tags", (PyCFunction)hashbits_get_stop_tags, METH_VARARGS, "" }, + { "get_tagset", (PyCFunction)hashbits_get_tagset, METH_VARARGS, "" }, + { "load", (PyCFunction)hashbits_load, METH_VARARGS, "" }, + { "save", (PyCFunction)hashbits_save, METH_VARARGS, "" }, + { "load_tagset", (PyCFunction)hashbits_load_tagset, METH_VARARGS, "" }, + { "save_tagset", (PyCFunction)hashbits_save_tagset, METH_VARARGS, "" }, + { "n_tags", (PyCFunction)hashbits_n_tags, METH_VARARGS, "" }, + { "divide_tags_into_subsets", (PyCFunction)hashbits_divide_tags_into_subsets, METH_VARARGS, "" }, + { "load_partitionmap", (PyCFunction)hashbits_load_partitionmap, METH_VARARGS, "" }, + { "save_partitionmap", (PyCFunction)hashbits_save_partitionmap, METH_VARARGS, "" }, + { "_validate_partitionmap", (PyCFunction)hashbits__validate_partitionmap, METH_VARARGS, "" }, + { "_get_tag_density", (PyCFunction)hashbits__get_tag_density, METH_VARARGS, "" }, + { "_set_tag_density", (PyCFunction)hashbits__set_tag_density, METH_VARARGS, "" }, + { "consume_fasta", (PyCFunction)hashbits_consume_fasta, METH_VARARGS, "Count all k-mers in a given file" }, + { "consume_fasta_with_reads_parser", (PyCFunction)hashbits_consume_fasta_with_reads_parser, METH_VARARGS, "Count all k-mers in a given file" }, + { "consume_fasta_and_tag", (PyCFunction)hashbits_consume_fasta_and_tag, METH_VARARGS, "Count all k-mers in a given file" }, { - "consume_fasta_and_tag_with_reads_parser", hashbits_consume_fasta_and_tag_with_reads_parser, + "consume_fasta_and_tag_with_reads_parser", (PyCFunction)hashbits_consume_fasta_and_tag_with_reads_parser, METH_VARARGS, "Count all k-mers using a given reads parser" }, - { "consume_fasta_and_traverse", hashbits_consume_fasta_and_traverse, METH_VARARGS, "" }, - { "consume_fasta_and_tag_with_stoptags", hashbits_consume_fasta_and_tag_with_stoptags, METH_VARARGS, "Count all k-mers in a given file" }, - { "consume_partitioned_fasta", hashbits_consume_partitioned_fasta, METH_VARARGS, "Count all k-mers in a given file" }, - { "join_partitions_by_path", hashbits_join_partitions_by_path, METH_VARARGS, "" }, - { "merge_subset", hashbits_merge_subset, METH_VARARGS, "" }, - { "merge_subset_from_disk", hashbits_merge_from_disk, METH_VARARGS, "" }, - { "count_partitions", hashbits_count_partitions, METH_VARARGS, "" }, - { "subset_count_partitions", hashbits_subset_count_partitions, METH_VARARGS, "" }, - { "subset_partition_size_distribution", hashbits_subset_partition_size_distribution, METH_VARARGS, "" }, - { "save_subset_partitionmap", hashbits_save_subset_partitionmap, METH_VARARGS }, - { "load_subset_partitionmap", hashbits_load_subset_partitionmap, METH_VARARGS }, - { "_validate_subset_partitionmap", hashbits__validate_subset_partitionmap, METH_VARARGS, "" }, - { "set_partition_id", hashbits_set_partition_id, METH_VARARGS, "" }, - { "join_partitions", hashbits_join_partitions, METH_VARARGS, "" }, - { "get_partition_id", hashbits_get_partition_id, METH_VARARGS, "" }, - { "is_single_partition", hashbits_is_single_partition, METH_VARARGS, "" }, - { "count_kmers_within_radius", hashbits_count_kmers_within_radius, METH_VARARGS, "" }, - { "traverse_from_tags", hashbits_traverse_from_tags, METH_VARARGS, "" }, - { "repartition_largest_partition", hashbits_repartition_largest_partition, METH_VARARGS, "" }, - { "get_median_count", hashbits_get_median_count, METH_VARARGS, "Get the median, average, and stddev of the k-mer counts in the string" }, + { "consume_fasta_and_traverse", (PyCFunction)hashbits_consume_fasta_and_traverse, METH_VARARGS, "" }, + { "consume_fasta_and_tag_with_stoptags", (PyCFunction)hashbits_consume_fasta_and_tag_with_stoptags, METH_VARARGS, "Count all k-mers in a given file" }, + { "consume_partitioned_fasta", (PyCFunction)hashbits_consume_partitioned_fasta, METH_VARARGS, "Count all k-mers in a given file" }, + { "join_partitions_by_path", (PyCFunction)hashbits_join_partitions_by_path, METH_VARARGS, "" }, + { "merge_subset", (PyCFunction)hashbits_merge_subset, METH_VARARGS, "" }, + { "merge_subset_from_disk", (PyCFunction)hashbits_merge_from_disk, METH_VARARGS, "" }, + { "count_partitions", (PyCFunction)hashbits_count_partitions, METH_VARARGS, "" }, + { "subset_count_partitions", (PyCFunction)hashbits_subset_count_partitions, METH_VARARGS, "" }, + { "subset_partition_size_distribution", (PyCFunction)hashbits_subset_partition_size_distribution, METH_VARARGS, "" }, + { "save_subset_partitionmap", (PyCFunction)hashbits_save_subset_partitionmap, METH_VARARGS }, + { "load_subset_partitionmap", (PyCFunction)hashbits_load_subset_partitionmap, METH_VARARGS }, + { "_validate_subset_partitionmap", (PyCFunction)hashbits__validate_subset_partitionmap, METH_VARARGS, "" }, + { "set_partition_id", (PyCFunction)hashbits_set_partition_id, METH_VARARGS, "" }, + { "join_partitions", (PyCFunction)hashbits_join_partitions, METH_VARARGS, "" }, + { "get_partition_id", (PyCFunction)hashbits_get_partition_id, METH_VARARGS, "" }, + { "is_single_partition", (PyCFunction)hashbits_is_single_partition, METH_VARARGS, "" }, + { "count_kmers_within_radius", (PyCFunction)hashbits_count_kmers_within_radius, METH_VARARGS, "" }, + { "traverse_from_tags", (PyCFunction)hashbits_traverse_from_tags, METH_VARARGS, "" }, + { "repartition_largest_partition", (PyCFunction)hashbits_repartition_largest_partition, METH_VARARGS, "" }, + { "get_median_count", (PyCFunction)hashbits_get_median_count, METH_VARARGS, "Get the median, average, and stddev of the k-mer counts in the string" }, {NULL, NULL, 0, NULL} /* sentinel */ }; @@ -3380,8 +3433,8 @@ static PyMethodDef khmer_hashbits_methods[] = { static PyObject* khmer_hashbits_new(PyTypeObject * type, PyObject * args, PyObject * kwds) { - khmer_KHashbitsObject * self; - self = (khmer_KHashbitsObject *)type->tp_alloc(type, 0); + khmer_KHashbits_Object * self; + self = (khmer_KHashbits_Object *)type->tp_alloc(type, 0); if (self != NULL) { WordLength k = 0; @@ -3420,13 +3473,13 @@ static PyObject* khmer_hashbits_new(PyTypeObject * type, PyObject * args, } // there are no attributes that we need at this time, so we'll just return 0 -static int khmer_hashbits_init(khmer_KHashbitsObject * self, PyObject * args, +static int khmer_hashbits_init(khmer_KHashbits_Object * self, PyObject * args, PyObject * kwds) { return 0; } -#define is_hashbits_obj(v) (Py_TYPE(v) == &khmer_KHashbitsType) +#define is_hashbits_obj(v) (Py_TYPE(v) == &khmer_KHashbits_Type) //////////////////////////////////////////////////////////////////////////// @@ -3654,7 +3707,7 @@ static PyMethodDef khmer_subset_methods[] = { // LabelHash addition typedef struct { //PyObject_HEAD - khmer_KHashbitsObject khashbits; + khmer_KHashbits_Object khashbits; LabelHash * labelhash; } khmer_KLabelHashObject; @@ -3735,7 +3788,7 @@ static PyObject * khmer_labelhash_new(PyTypeObject *type, PyObject *args, static int khmer_labelhash_init(khmer_KLabelHashObject * self, PyObject *args, PyObject *kwds) { - if (khmer_KHashbitsType.tp_init((PyObject *)self, args, kwds) < 0) { + if (khmer_KHashbits_Type.tp_init((PyObject *)self, args, kwds) < 0) { return -1; } //std::cout << "testing my pointer ref to hashbits: " << self->khashbits.hashbits->n_tags() << std::endl; @@ -4194,54 +4247,6 @@ static PyTypeObject khmer_ReadAlignerType = { khmer_ReadAligner_new, /* tp_new */ }; - -// -// new_hashbits -// - -static PyObject* _new_hashbits(PyObject * self, PyObject * args) -{ - WordLength k = 0; - PyListObject * sizes_list_o = NULL; - - if (!PyArg_ParseTuple(args, "bO!", &k, &PyList_Type, &sizes_list_o)) { - return NULL; - } - - std::vector sizes; - Py_ssize_t sizes_list_o_length = PyList_GET_SIZE(sizes_list_o); - for (Py_ssize_t i = 0; i < sizes_list_o_length; i++) { - PyObject * size_o = PyList_GET_ITEM(sizes_list_o, i); - if (PyLong_Check(size_o)) { - sizes.push_back((HashIntoType) PyLong_AsUnsignedLongLong(size_o)); - } else if (PyInt_Check(size_o)) { - sizes.push_back((HashIntoType) PyInt_AsLong(size_o)); - } else if (PyFloat_Check(size_o)) { - sizes.push_back((HashIntoType) PyFloat_AS_DOUBLE(size_o)); - } else { - PyErr_SetString(PyExc_TypeError, - "2nd argument must be a list of ints, longs, or floats"); - return NULL; - } - } - - - khmer_KHashbitsObject * khashbits_obj = (khmer_KHashbitsObject *) \ - PyObject_New(khmer_KHashbitsObject, &khmer_KHashbitsType); - - if (khashbits_obj == NULL) { - return NULL; - } - - try { - khashbits_obj->hashbits = new Hashbits(k, sizes); - } catch (std::bad_alloc &e) { - return PyErr_NoMemory(); - } - - return (PyObject *) khashbits_obj; -} - static PyObject * hash_collect_high_abundance_kmers(khmer_KCountingHash_Object * me , PyObject * args) { @@ -4262,8 +4267,8 @@ static PyObject * hash_collect_high_abundance_kmers(khmer_KCountingHash_Object * std::vector sizes; sizes.push_back(1); - khmer_KHashbitsObject * khashbits_obj = (khmer_KHashbitsObject *) \ - PyObject_New(khmer_KHashbitsObject, &khmer_KHashbitsType); + khmer_KHashbits_Object * khashbits_obj = (khmer_KHashbits_Object *) \ + PyObject_New(khmer_KHashbits_Object, &khmer_KHashbits_Type); if (khashbits_obj == NULL) { return NULL; } @@ -4293,15 +4298,12 @@ static void khmer_counting_dealloc(khmer_KCountingHash_Object * obj) // // khmer_hashbits_dealloc -- clean up a hashbits object. // -static void khmer_hashbits_dealloc(PyObject* obj) +static void khmer_hashbits_dealloc(khmer_KHashbits_Object * obj) { - khmer_KHashbitsObject * self = (khmer_KHashbitsObject *) obj; - - delete self->hashbits; - self->hashbits = NULL; + delete obj->hashbits; + obj->hashbits = NULL; Py_TYPE(obj)->tp_free((PyObject*)obj); - //PyObject_Del((PyObject *) obj); } @@ -4639,10 +4641,6 @@ static PyMethodDef KhmerMethods[] = { "new_hashtable", new_hashtable, METH_VARARGS, "Create an empty single-table counting hash" }, - { - "_new_hashbits", _new_hashbits, - METH_VARARGS, "Create an empty hashbits table" - }, { "forward_hash", forward_hash, METH_VARARGS, "", @@ -4692,14 +4690,13 @@ init_khmer(void) // implemented __new__ for Hashbits; keeping factory func around as well // for backwards compat with old scripts - khmer_KHashbitsType.tp_new = khmer_hashbits_new; - khmer_KHashbitsType.tp_methods = khmer_hashbits_methods; - if (PyType_Ready(&khmer_KHashbitsType) < 0) { + khmer_KHashbits_Type.tp_methods = khmer_hashbits_methods; + if (PyType_Ready(&khmer_KHashbits_Type) < 0) { return; } // add LabelHash - khmer_KLabelHashType.tp_base = &khmer_KHashbitsType; + khmer_KLabelHashType.tp_base = &khmer_KHashbits_Type; khmer_KLabelHashType.tp_new = khmer_labelhash_new; if (PyType_Ready(&khmer_KLabelHashType) < 0) { return; @@ -4748,8 +4745,10 @@ init_khmer(void) return; } - Py_INCREF(&khmer_KHashbitsType); - PyModule_AddObject(m, "_Hashbits", (PyObject *)&khmer_KHashbitsType); + Py_INCREF(&khmer_KHashbits_Type); + if (PyModule_AddObject(m, "_Hashbits", (PyObject *)&khmer_KHashbits_Type) < 0) { + return; + } Py_INCREF(&khmer_KLabelHashType); PyModule_AddObject(m, "_LabelHash", (PyObject *)&khmer_KLabelHashType); diff --git a/scripts/abundance-dist.py b/scripts/abundance-dist.py index 49705bd934..b706fa4b25 100755 --- a/scripts/abundance-dist.py +++ b/scripts/abundance-dist.py @@ -65,7 +65,7 @@ def main(): kmer_size = counting_hash.ksize() hashsizes = counting_hash.hashsizes() - tracking = khmer._new_hashbits( # pylint: disable=protected-access + tracking = khmer._Hashbits( # pylint: disable=protected-access kmer_size, hashsizes) print ('K:', kmer_size, file=sys.stderr) diff --git a/tests/test_counting_hash.py b/tests/test_counting_hash.py index ef3221e722..65055ef695 100644 --- a/tests/test_counting_hash.py +++ b/tests/test_counting_hash.py @@ -291,10 +291,10 @@ def test_save_load(): ht = khmer.CountingHash(12, sizes) ht.load(savepath) - tracking = khmer._new_hashbits(12, sizes) + tracking = khmer._Hashbits(12, sizes) x = hi.abundance_distribution(inpath, tracking) - tracking = khmer._new_hashbits(12, sizes) + tracking = khmer._Hashbits(12, sizes) y = ht.abundance_distribution(inpath, tracking) assert sum(x) == 3966, sum(x) @@ -326,10 +326,10 @@ def test_load_gz(): ht = khmer.CountingHash(12, sizes) ht.load(loadpath) - tracking = khmer._new_hashbits(12, sizes) + tracking = khmer._Hashbits(12, sizes) x = hi.abundance_distribution(inpath, tracking) - tracking = khmer._new_hashbits(12, sizes) + tracking = khmer._Hashbits(12, sizes) y = ht.abundance_distribution(inpath, tracking) assert sum(x) == 3966, sum(x) @@ -350,10 +350,10 @@ def test_save_load_gz(): ht = khmer.CountingHash(12, sizes) ht.load(savepath) - tracking = khmer._new_hashbits(12, sizes) + tracking = khmer._Hashbits(12, sizes) x = hi.abundance_distribution(inpath, tracking) - tracking = khmer._new_hashbits(12, sizes) + tracking = khmer._Hashbits(12, sizes) y = ht.abundance_distribution(inpath, tracking) assert sum(x) == 3966, sum(x) diff --git a/tests/test_hashbits.py b/tests/test_hashbits.py index 019d606b5c..5ab6401fe6 100644 --- a/tests/test_hashbits.py +++ b/tests/test_hashbits.py @@ -742,7 +742,7 @@ def test_tagset_filetype_check(): def test_bad_primes_list(): try: - coutingtable = khmer._new_hashbits(31, ["a", "b", "c"], 1) + coutingtable = khmer._Hashbits(31, ["a", "b", "c"], 1) assert 0, "Bad primes list should fail" except TypeError as e: print str(e) From cafc28a143ac21e269ccdd1195b13df793d70f7d Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Mon, 23 Feb 2015 13:46:02 -0500 Subject: [PATCH 81/83] LabelHash passes CPython checklist --- khmer/_khmermodule.cc | 116 +++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 57 deletions(-) diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index a4b8c0299d..195cee0546 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -3709,29 +3709,25 @@ typedef struct { //PyObject_HEAD khmer_KHashbits_Object khashbits; LabelHash * labelhash; -} khmer_KLabelHashObject; +} khmer_KLabelHash_Object; -static void khmer_labelhash_dealloc(PyObject *); -static int khmer_labelhash_init(khmer_KLabelHashObject * self, PyObject *args, +static int khmer_labelhash_init(khmer_KLabelHash_Object * self, PyObject *args, PyObject *kwds); static PyObject * khmer_labelhash_new(PyTypeObject * type, PyObject *args, PyObject *kwds); -#define is_labelhash_obj(v) (Py_TYPE(v) == &khmer_KLabelHashType) +#define is_labelhash_obj(v) (Py_TYPE(v) == &khmer_KLabelHash_Type) // // khmer_labelhash_dealloc -- clean up a labelhash object. // -static void khmer_labelhash_dealloc(PyObject* obj) +static void khmer_labelhash_dealloc(khmer_KLabelHash_Object * obj) { - khmer_KLabelHashObject * self = (khmer_KLabelHashObject *) obj; - - delete self->labelhash; - self->labelhash = NULL; + delete obj->labelhash; + obj->labelhash = NULL; Py_TYPE(obj)->tp_free((PyObject*)obj); - //PyObject_Del((PyObject *) obj); } // a little weird; we don't actually want to call Hashbits' new method. Rather, we @@ -3740,8 +3736,8 @@ static void khmer_labelhash_dealloc(PyObject* obj) static PyObject * khmer_labelhash_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { - khmer_KLabelHashObject *self; - self = (khmer_KLabelHashObject*)type->tp_alloc(type, 0); + khmer_KLabelHash_Object *self; + self = (khmer_KLabelHash_Object*)type->tp_alloc(type, 0); if (self != NULL) { WordLength k = 0; @@ -3785,7 +3781,7 @@ static PyObject * khmer_labelhash_new(PyTypeObject *type, PyObject *args, return (PyObject *) self; } -static int khmer_labelhash_init(khmer_KLabelHashObject * self, PyObject *args, +static int khmer_labelhash_init(khmer_KLabelHash_Object * self, PyObject *args, PyObject *kwds) { if (khmer_KHashbits_Type.tp_init((PyObject *)self, args, kwds) < 0) { @@ -3797,9 +3793,10 @@ static int khmer_labelhash_init(khmer_KLabelHashObject * self, PyObject *args, return 0; } -static PyObject * labelhash_get_label_dict(PyObject * self, PyObject * args) +static +PyObject * +labelhash_get_label_dict(khmer_KLabelHash_Object * me, PyObject * args) { - khmer_KLabelHashObject * me = (khmer_KLabelHashObject *) self; LabelHash * hb = me->labelhash; PyObject * d = PyDict_New(); @@ -3821,10 +3818,11 @@ static PyObject * labelhash_get_label_dict(PyObject * self, PyObject * args) return d; } -static PyObject * labelhash_consume_fasta_and_tag_with_labels( - PyObject * self, PyObject * args) +static +PyObject * +labelhash_consume_fasta_and_tag_with_labels(khmer_KLabelHash_Object * me, + PyObject * args) { - khmer_KLabelHashObject * me = (khmer_KLabelHashObject *) self; LabelHash * hb = me->labelhash; std::ofstream outfile; @@ -3857,10 +3855,11 @@ static PyObject * labelhash_consume_fasta_and_tag_with_labels( } -static PyObject * labelhash_consume_partitioned_fasta_and_tag_with_labels( - PyObject * self, PyObject * args) +static +PyObject * +labelhash_consume_partitioned_fasta_and_tag_with_labels( + khmer_KLabelHash_Object * me, PyObject * args) { - khmer_KLabelHashObject * me = (khmer_KLabelHashObject *) self; LabelHash * labelhash = me->labelhash; const char * filename; @@ -3888,10 +3887,11 @@ static PyObject * labelhash_consume_partitioned_fasta_and_tag_with_labels( return Py_BuildValue("IK", total_reads, n_consumed); } -static PyObject * labelhash_consume_sequence_and_tag_with_labels( - PyObject * self, PyObject * args) +static +PyObject * +labelhash_consume_sequence_and_tag_with_labels(khmer_KLabelHash_Object * me, + PyObject * args) { - khmer_KLabelHashObject * me = (khmer_KLabelHashObject *) self; LabelHash * hb = me->labelhash; const char * seq = NULL; unsigned long long c = 0; @@ -3909,10 +3909,11 @@ static PyObject * labelhash_consume_sequence_and_tag_with_labels( return Py_BuildValue("K", n_consumed); } -static PyObject * labelhash_sweep_label_neighborhood(PyObject * self, - PyObject * args) +static +PyObject * +labelhash_sweep_label_neighborhood(khmer_KLabelHash_Object * me, + PyObject * args) { - khmer_KLabelHashObject * me = (khmer_KLabelHashObject *) self; LabelHash * hb = me->labelhash; const char * seq = NULL; @@ -3980,10 +3981,11 @@ static PyObject * labelhash_sweep_label_neighborhood(PyObject * self, // Similar to find_all_tags, but returns tags in a way actually usable by python // need a tags_in_sequence iterator or function in c++ land for reuse in all // these functions -static PyObject * labelhash_sweep_tag_neighborhood(PyObject * self, - PyObject *args) + +static +PyObject * +labelhash_sweep_tag_neighborhood(khmer_KLabelHash_Object * me, PyObject * args) { - khmer_KLabelHashObject * me = (khmer_KLabelHashObject *) self; LabelHash * labelhash = me->labelhash; const char * seq = NULL; @@ -4042,11 +4044,10 @@ static PyObject * labelhash_sweep_tag_neighborhood(PyObject * self, return x; } - -static PyObject * labelhash_get_tag_labels(PyObject * self, PyObject * args) +static +PyObject * +labelhash_get_tag_labels(khmer_KLabelHash_Object * me, PyObject * args) { - - khmer_KLabelHashObject * me = (khmer_KLabelHashObject *) self; LabelHash * labelhash = me->labelhash; HashIntoType tag; @@ -4071,9 +4072,10 @@ static PyObject * labelhash_get_tag_labels(PyObject * self, PyObject * args) return x; } -static PyObject * labelhash_n_labels(PyObject * self, PyObject * args) +static +PyObject * +labelhash_n_labels(khmer_KLabelHash_Object * me, PyObject * args) { - khmer_KLabelHashObject * me = (khmer_KLabelHashObject *) self; LabelHash * labelhash = me->labelhash; if (!PyArg_ParseTuple(args, "")) { @@ -4084,26 +4086,25 @@ static PyObject * labelhash_n_labels(PyObject * self, PyObject * args) } static PyMethodDef khmer_labelhash_methods[] = { - { "consume_fasta_and_tag_with_labels", labelhash_consume_fasta_and_tag_with_labels, METH_VARARGS, "" }, - { "sweep_label_neighborhood", labelhash_sweep_label_neighborhood, METH_VARARGS, "" }, - {"consume_partitioned_fasta_and_tag_with_labels", labelhash_consume_partitioned_fasta_and_tag_with_labels, METH_VARARGS, "" }, - {"sweep_tag_neighborhood", labelhash_sweep_tag_neighborhood, METH_VARARGS, "" }, - {"get_tag_labels", labelhash_get_tag_labels, METH_VARARGS, ""}, - {"consume_sequence_and_tag_with_labels", labelhash_consume_sequence_and_tag_with_labels, METH_VARARGS, "" }, - {"n_labels", labelhash_n_labels, METH_VARARGS, ""}, - {"get_label_dict", labelhash_get_label_dict, METH_VARARGS, "" }, - + { "consume_fasta_and_tag_with_labels", (PyCFunction)labelhash_consume_fasta_and_tag_with_labels, METH_VARARGS, "" }, + { "sweep_label_neighborhood", (PyCFunction)labelhash_sweep_label_neighborhood, METH_VARARGS, "" }, + {"consume_partitioned_fasta_and_tag_with_labels", (PyCFunction)labelhash_consume_partitioned_fasta_and_tag_with_labels, METH_VARARGS, "" }, + {"sweep_tag_neighborhood", (PyCFunction)labelhash_sweep_tag_neighborhood, METH_VARARGS, "" }, + {"get_tag_labels", (PyCFunction)labelhash_get_tag_labels, METH_VARARGS, ""}, + {"consume_sequence_and_tag_with_labels", (PyCFunction)labelhash_consume_sequence_and_tag_with_labels, METH_VARARGS, "" }, + {"n_labels", (PyCFunction)labelhash_n_labels, METH_VARARGS, ""}, + {"get_label_dict", (PyCFunction)labelhash_get_label_dict, METH_VARARGS, "" }, {NULL, NULL, 0, NULL} /* sentinel */ }; -static PyTypeObject khmer_KLabelHashType = { - PyVarObject_HEAD_INIT(NULL, 0) - "_LabelHash", /* tp_name */ - sizeof(khmer_KLabelHashObject), /* tp_basicsize */ +static PyTypeObject khmer_KLabelHash_Type = { + PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ + "_khmer._LabelHash", /* tp_name */ + sizeof(khmer_KLabelHash_Object), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)khmer_labelhash_dealloc, /* tp_dealloc */ 0, /* tp_print */ - 0, /* khmer_labelhash_getattr, tp_getattr */ + 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ 0, /* tp_repr */ @@ -4134,6 +4135,7 @@ static PyTypeObject khmer_KLabelHashType = { 0, /* tp_dictoffset */ (initproc)khmer_labelhash_init, /* tp_init */ 0, /* tp_alloc */ + khmer_labelhash_new, /* tp_new */ }; static PyObject * readaligner_align(khmer_ReadAligner_Object * me, @@ -4688,17 +4690,14 @@ init_khmer(void) return; } - // implemented __new__ for Hashbits; keeping factory func around as well - // for backwards compat with old scripts khmer_KHashbits_Type.tp_methods = khmer_hashbits_methods; if (PyType_Ready(&khmer_KHashbits_Type) < 0) { return; } // add LabelHash - khmer_KLabelHashType.tp_base = &khmer_KHashbits_Type; - khmer_KLabelHashType.tp_new = khmer_labelhash_new; - if (PyType_Ready(&khmer_KLabelHashType) < 0) { + khmer_KLabelHash_Type.tp_base = &khmer_KHashbits_Type; + if (PyType_Ready(&khmer_KLabelHash_Type) < 0) { return; } @@ -4750,8 +4749,11 @@ init_khmer(void) return; } - Py_INCREF(&khmer_KLabelHashType); - PyModule_AddObject(m, "_LabelHash", (PyObject *)&khmer_KLabelHashType); + Py_INCREF(&khmer_KLabelHash_Type); + if (PyModule_AddObject(m, "_LabelHash", + (PyObject *)&khmer_KLabelHash_Type) < 0) { + return; + } Py_INCREF(&khmer_KHLLCounter_Type); PyModule_AddObject(m, "_HLLCounter", (PyObject *)&khmer_KHLLCounter_Type); From 4ba2aa3296c5fb9031b6913db9515fce8e778502 Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Mon, 23 Feb 2015 14:01:01 -0500 Subject: [PATCH 82/83] Fix tp_name and import for _khmer extension --- khmer/__init__.py | 7 +++---- khmer/_khmermodule.cc | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/khmer/__init__.py b/khmer/__init__.py index 59f2dc5245..abc408edd3 100644 --- a/khmer/__init__.py +++ b/khmer/__init__.py @@ -9,10 +9,9 @@ """ from khmer._khmer import CountingHash -from khmer._khmer import _new_hashbits -from khmer._khmer import _LabelHash -from khmer._khmer import _Hashbits -from khmer._khmer import _HLLCounter +from khmer._khmer import LabelHash as _LabelHash +from khmer._khmer import Hashbits as _Hashbits +from khmer._khmer import HLLCounter as _HLLCounter from khmer._khmer import ReadAligner from khmer._khmer import forward_hash # figuregen/*.py diff --git a/khmer/_khmermodule.cc b/khmer/_khmermodule.cc index 195cee0546..b5e83fef85 100644 --- a/khmer/_khmermodule.cc +++ b/khmer/_khmermodule.cc @@ -204,7 +204,7 @@ static PyGetSetDef khmer_Read_accessors [ ] = { static PyTypeObject khmer_Read_Type = { PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ - "khmer.Read", /* tp_name */ + "_khmer.Read", /* tp_name */ sizeof(khmer_Read_Object), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)khmer_Read_dealloc, /* tp_dealloc */ @@ -429,7 +429,7 @@ _ReadPairIterator_iternext(khmer_ReadPairIterator_Object * myself) static PyTypeObject khmer_ReadPairIterator_Type = { PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ - "khmer.ReadPairIterator", /* tp_name */ + "_khmer.ReadPairIterator", /* tp_name */ sizeof(khmer_ReadPairIterator_Object), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)khmer_ReadPairIterator_dealloc, /* tp_dealloc */ @@ -512,7 +512,7 @@ static PyMethodDef _ReadParser_methods [ ] = { static PyTypeObject khmer_ReadParser_Type = { PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ - "khmer.ReadParser", /* tp_name */ + "_khmer.ReadParser", /* tp_name */ sizeof(khmer_ReadParser_Object), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)_ReadParser_dealloc, /* tp_dealloc */ @@ -644,7 +644,7 @@ static void khmer_subset_dealloc(khmer_KSubsetPartition_Object * obj); static PyTypeObject khmer_KSubsetPartition_Type = { PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ - "khmer.KSubsetPartition", /* tp_name */ + "_khmer.KSubsetPartition", /* tp_name */ sizeof(khmer_KSubsetPartition_Object), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)khmer_subset_dealloc, /*tp_dealloc*/ @@ -4099,7 +4099,7 @@ static PyMethodDef khmer_labelhash_methods[] = { static PyTypeObject khmer_KLabelHash_Type = { PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ - "_khmer._LabelHash", /* tp_name */ + "_khmer.LabelHash", /* tp_name */ sizeof(khmer_KLabelHash_Object), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)khmer_labelhash_dealloc, /* tp_dealloc */ @@ -4210,7 +4210,7 @@ static PyObject* khmer_ReadAligner_new(PyTypeObject *type, PyObject * args, static PyTypeObject khmer_ReadAlignerType = { PyVarObject_HEAD_INIT(NULL, 0) /* init & ob_size */ - "khmer.ReadAligner", /*tp_name*/ + "_khmer.ReadAligner", /*tp_name*/ sizeof(khmer_ReadAligner_Object), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)khmer_readaligner_dealloc, /*tp_dealloc*/ @@ -4482,7 +4482,7 @@ static PyMethodDef khmer_hllcounter_methods[] = { static PyTypeObject khmer_KHLLCounter_Type = { PyVarObject_HEAD_INIT(NULL, 0) - "khmer.KHLLCounter", /* tp_name */ + "_khmer.KHLLCounter", /* tp_name */ sizeof(khmer_KHLLCounter_Object), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)khmer_hllcounter_dealloc, /* tp_dealloc */ @@ -4745,18 +4745,18 @@ init_khmer(void) } Py_INCREF(&khmer_KHashbits_Type); - if (PyModule_AddObject(m, "_Hashbits", (PyObject *)&khmer_KHashbits_Type) < 0) { + if (PyModule_AddObject(m, "Hashbits", (PyObject *)&khmer_KHashbits_Type) < 0) { return; } Py_INCREF(&khmer_KLabelHash_Type); - if (PyModule_AddObject(m, "_LabelHash", + if (PyModule_AddObject(m, "LabelHash", (PyObject *)&khmer_KLabelHash_Type) < 0) { return; } Py_INCREF(&khmer_KHLLCounter_Type); - PyModule_AddObject(m, "_HLLCounter", (PyObject *)&khmer_KHLLCounter_Type); + PyModule_AddObject(m, "HLLCounter", (PyObject *)&khmer_KHLLCounter_Type); Py_INCREF(&khmer_ReadAlignerType); PyModule_AddObject(m, "ReadAligner", (PyObject *)&khmer_ReadAlignerType); } From f1fa48589c9ec47c07ac470f778718676da2cf7f Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Mon, 23 Feb 2015 15:44:41 -0500 Subject: [PATCH 83/83] Add ChangeLog --- ChangeLog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ChangeLog b/ChangeLog index 0524fdf81a..65cff9d244 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-02-24 Luiz Irber + + * khmer/_khmermodule.cc: Update extension to use recommended practices, + PyLong instead of PyInt, Type initialization, PyBytes instead of PyString. + Replace common initialization with explicit type structs, and all types + conform to the CPython checklist. + 2015-02-24 Michael R. Crusoe * jenkins-build.sh: remove examples/stamps/do.sh testing for now; takes too