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)
Exemple #11
0
    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])