def test_degenerate(self): SAMPLE_DATA_PATH = os.path.join( os.path.abspath(os.path.dirname(__file__)), 'sample_data.txt') with open(SAMPLE_DATA_PATH, 'r') as handle: sample_data = json.loads(handle.read()) data = [] append = data.append for i in sample_data: seq_record = SeqRecordExpanded(i['seq'], voucher_code=i['voucher_code'], taxonomy=i['taxonomy'], gene_code=i['gene_code'], reading_frame=i['reading_frame'], table=i['table']) append(seq_record) with open(os.path.join(NEXUS_DATA_PATH, 'dataset_degenerated.nex'), 'r') as handle: expected = handle.read().strip() dataset = Dataset(data, format='NEXUS', codon_positions='ALL', partitioning='by gene', degenerate='S') result = dataset.dataset_str self.assertEqual(expected, result)
def test_extract_number_of_taxa(self): dataset = Dataset(self.test_data, format='NEXUS', partitioning='by gene') expected = '10' result = dataset.number_taxa self.assertEqual(expected, result)
def test_using_outgroup(self): dataset = Dataset(self.test_data, format='NEXUS', codon_positions='ALL', outgroup='CP100-19') expected = 'outgroup CP100_19_Aus_jus;' result = dataset.dataset_str self.assertTrue(expected in result)
def test_dataset_nexus(self): dataset = Dataset(self.test_data, format='NEXUS', partitioning='by gene') test_data_file = os.path.join(NEXUS_DATA_PATH, 'dataset.nex') expected = open(test_data_file, 'r').read() result = dataset.dataset_str self.assertEqual(expected.strip(), result)
def test_extract_number_of_chars_first_and_second_codon_positions(self): dataset = Dataset(self.test_data, format='NEXUS', partitioning='by gene', codon_positions='1st-2nd') expected = '3155' result = dataset.number_chars self.assertEqual(expected, result)
def test_extract_number_of_chars_third_codon_positions(self): dataset = Dataset(self.test_data, format='NEXUS', partitioning='by gene', codon_positions='3rd') expected = '1573' result = dataset.number_chars self.assertEqual(expected, result)
def test_dataset_nexus_all_codon_positions_partitioned_as_1st2nd_3rd(self): dataset = Dataset(self.test_data, format='NEXUS', codon_positions='ALL', partitioning='1st-2nd, 3rd') test_data_file = os.path.join(NEXUS_DATA_PATH, 'dataset_partitioned_as_1st2nd_3rd.nex') expected = open(test_data_file, 'r').read() result = dataset.dataset_str self.assertEqual(expected, result)
def test_dataset_nexus_3rd_codon_position(self): dataset = Dataset(self.test_data_numbers, format='NEXUS', codon_positions='3rd', partitioning='by codon position') test_data_file = os.path.join(NEXUS_DATA_PATH, 'dataset_3rd_codon_numbers.nex') expected = open(test_data_file, 'r').read() result = dataset.dataset_str self.assertEqual(expected, result)
def test_prepared_data(self): dataset = Dataset(self.test_data, format='NEXUS', partitioning='by gene') expected = [ 'ArgKin', 'COI-begin', 'COI_end', 'ef1a', 'RpS2', 'RpS5', 'wingless' ] result = dataset.data.gene_codes self.assertEqual(expected, result)
def test_dataset_nexus_all_codon_positions_partitioned_by_codon_positions( self): dataset = Dataset(self.test_data, format='NEXUS', codon_positions='ALL', partitioning='by codon position') test_data_file = os.path.join(NEXUS_DATA_PATH, 'dataset_partitioned_as_each.nex') expected = open(test_data_file, 'r').read() result = dataset.dataset_str self.assertEqual(expected.strip(), result)
def create_dataset(self): if not self.codon_positions: return '' error_msg = None if self.degen_translations is not None and self.codon_positions != [ 'ALL' ]: error_msg = 'Cannot degenerate codons if you have not selected all codon positions' self.errors.append(error_msg) elif self.degen_translations is not None and self.partition_by_positions != 'by gene': error_msg = 'Cannot degenerate codons if they go to different partitions' self.errors.append(error_msg) if error_msg: return '' self.voucher_codes = get_voucher_codes(self.cleaned_data) self.gene_codes = get_gene_codes(self.cleaned_data) self.create_seq_objs() if self.file_format in [ 'NEXUS', 'GenBankFASTA', 'FASTA', 'MEGA', 'TNT', 'PHYLIP' ]: try: dataset = Dataset( self.seq_objs, format=self.file_format, partitioning=self.partition_by_positions, codon_positions=self.codon_positions[0], aminoacids=self.aminoacids, degenerate=self.degen_translations, outgroup=self.outgroup, ) except (MissingParameterError, ValueError, TranslationErrorMixedGappedSeq) as e: self.errors.append(e) dataset = None except NexusError as e: self.errors.append(e.__str__()) dataset = None if not dataset: return "" self.warnings += dataset.warnings dataset_handler = DatasetHandler(dataset.dataset_str, self.file_format) self.dataset_file = dataset_handler.dataset_file if self.file_format == 'PHYLIP': self.charset_block = dataset.extra_dataset_str return dataset.dataset_str
def test_dataset_nexus_using_default_parameters(self): dataset = Dataset(self.test_data, format='NEXUS') test_data_file = os.path.join(NEXUS_DATA_PATH, 'dataset.nex') expected = open(test_data_file, 'r').read() result = dataset.dataset_str self.assertEqual(expected.strip(), result)
def test_sorting_seq_records(self): """Test SeqRecordExpanded objects are sorted by gene_code and then by voucher_code. """ my_list = [ { 'seq': 'CTgCacGgTCaagacGTGCtGgaTgaggctGccGacTTttcggtCtGTAgGCGACGCCTTGAAGGACGGCTTCGACGGAGCGTCGCGGGTTATGATGCCCAATACGGAGTTGGAAGCACCAGCTCAGCGAAACGATGCCGCTCCGCACAGAGTCCCGCGACGAGACCGATACAGATTTCAACTwCGGCCGCACAATCCTGACCACAAAACACCCGGAGTCAAGGACCTAGTGTACTTGGAATCATCGCCGGGTTTCTGCGAAAAGAACCCGCGGCTGGGCATTCCAGGCACGCACGGGCGTTCCTGCAATGACACGAGTATCGGCGTCGACGGCTGCGACCTCATGTGCTGTGGCCGTGGCTACCGGACCGAGACAATGTTCGTTGTGGAGCGATGCAAC', 'voucher_code': "CP100-11", 'taxonomy': { 'genus': 'Aus', 'species': 'bus' }, 'gene_code': 'wingless', 'reading_frame': 2, 'table': 1 }, { 'seq': '???????????????????????????????????????????TCTGTAGGCGATGCCTTGAAGGACGGCTTCGACGGAGCGTCGCGGGTCATGATGCCCAATACGGAGTTAGAAGCGCCTGCTCAGCGAAACGACGCCGCCCCGCACAGAGTCCCGCGACGAGACCGATACAGATTTCAACTTCGGCCGCACAATCCTGACCACAAAACACCCGGA?TCAAGGACCTAGTGTACTTGGAATCATCGCCGGGTTTCTGCGAAAAGAACCCGCGGCTGGGCATTCCCGGCACGCACGGGCGTGCCTGCAACGACACGAGTATCGGCGTCGACGGCTGCGACCTCATGTGCTGCGGCCGTGGCTACCGGACCGAGACAATGTTCGTCGTGGAGCGATGCAAC', 'voucher_code': "CP100-10", 'taxonomy': { 'genus': 'Aus', 'species': 'aus' }, 'gene_code': 'wingless', 'reading_frame': 2, 'table': 1 }, { 'seq': '???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????', 'voucher_code': "CP100-11", 'taxonomy': { 'genus': 'Aus', 'species': 'bus' }, 'gene_code': 'RpS2', 'reading_frame': 3, 'table': 1 }, { 'seq': '???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????', 'voucher_code': "CP100-10", 'taxonomy': { 'genus': 'Aus', 'species': 'aus' }, 'gene_code': 'RpS2', 'reading_frame': 3, 'table': 1 }, { 'seq': '??????????????????????????????????????????????????????????????????????????AAAAAGAAACTTTTGGAAATTTaggtataATTTATGCTATATTAGCAATTGGATTATTAGGATTTATTGTGTGAGCTCATCATATATTTACTGTAGGTATAGATATTGATACTCGAGCTTATTTTACCTCTGCTACAATAATTATTGCAGTCCCAACAGGAATTAAAATTTTTAGTTGATTAGCAACTCTACATGGAACACAAATTAATTATAGTCCTTCCATACTTTGAAGACTAGGATTTATTTTTTTATTTACAGTAGGAGGATTAACTGGTGTAATTTTAGCTAATTCTTCAATTGATATTGCTCTTCATGATACTTATTATGTAgTAgCCCACTTTCATTATGTATTGTCTATAGGAGCAGTATTTGCTATTTTTGGAGGATTTGTCCATTGATATCCTTTATTTACAGGATTAATATTAAATCCATATTTATTAAAAATTCAATTTATTTCAATATTTATTGGAGTTAACTTAACTTTTTTCCCACAACATTTTTTAGGTTTAGCTGGTATACCTCGACGTTACTCAGATTACCCAGATAATTTTTTATCTTGAAATATTATTTCATCATTAGGATCTTATATTTCTCTATTTTCTATAATAATAATAaTTATTATTATATGAGAATCAATAACTTATCAACGTATAATTTTATTTTCATTAAATATACctTCTTCAATTGAGTGATATCAAAAaTTACCACCTGCCGAACATTCTTATAAtGAAC', 'voucher_code': "CP100-10", 'taxonomy': { 'genus': 'Aus', 'species': 'aus' }, 'gene_code': 'COI_end', 'reading_frame': 2, 'table': 5 }, { 'seq': '?????????????????????????????????????????????????????????????????????????AAAAAAGAAACTTTCGGAAGCTTAGGTATAATTTACGCTATATTAGCTATTGGATTATTAGGATtTATTGTATGAGCTCATCATATATTTACAGTAGGAATAGATATTGATACCCGAGCTTATTTTACTTCTGCTACAATAATTATTGCCGTACCAACAGGAATTAAAATTTTTAGCTGATTAGCAACTCTTCACGGAACTCAAATCAATTATAGTCCTTCCATACTTTGAAGATTAGGATTTATTTTTTTATTTACAGTAGGAGGACTAACTGGTGTAATTTTAGCTAATTCTTCAATTGATATTACTCTCCATGATACTTATTATGTTGTAGCTCATTTTCATTATGTTCTATCTATAGGAGCAGTATTTGCTATTTTCGGAGGATTTATCCACTGATACCCCTTATTTACAGGATTAATATTAAACCCATATTTATTAAAAATTCAATTCATTTCAATATTTATTGGAGTTAATTTAACTTTTTTTCCACAACATTTTTTAGGGTTAGCTGGTATACCTCGTCGTTATTCAGATTACCCAGATAATTTTTTATCTTGAAATATTATTTCATCATTAGGATCTTATATTTCATTATTTTCTATAATAATAATAATTATTATTATTTGAGAATCAATAATTTATCAACGTATAATTTTATTTACATTAAATATACCCTCTTCAATTGAATGATATCAAAATTTACCTCCTGCCGAACATTCTTATAATGAAC', 'voucher_code': "CP100-11", 'taxonomy': { 'genus': 'Aus', 'species': 'bus' }, 'gene_code': 'COI_end', 'reading_frame': 2, 'table': 5 }, { 'seq': '????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????', 'voucher_code': "CP100-10", 'taxonomy': { 'genus': 'Aus', 'species': 'aus' }, 'gene_code': 'ef1a', 'reading_frame': 2, 'table': 1 }, { 'seq': '????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????', 'voucher_code': "CP100-11", 'taxonomy': { 'genus': 'Aus', 'species': 'bus' }, 'gene_code': 'ef1a', 'reading_frame': 2, 'table': 1 }, ] seq_records = [] append = seq_records.append for i in my_list: seq_record = SeqRecordExpanded( i['seq'], voucher_code=i['voucher_code'], taxonomy=i['taxonomy'], gene_code=i['gene_code'], reading_frame=i['reading_frame'], table=i['table'], ) append(seq_record) expected = [ 'COI_end', 'COI_end', 'ef1a', 'ef1a', 'RpS2', 'RpS2', 'wingless', 'wingless' ] result = Dataset(seq_records).seq_records self.assertEqual(expected, [i.gene_code for i in result]) expected = [ 'CP100_10', 'CP100_11', 'CP100_10', 'CP100_11', 'CP100_10', 'CP100_11', 'CP100_10', 'CP100_11' ] self.assertEqual(expected, [i.voucher_code for i in result])