def setUp(self): self.pynast_test1_input_fp = get_tmp_filename( prefix='PyNastAlignerTests_', suffix='.fasta') open(self.pynast_test1_input_fp, 'w').write(pynast_test1_input_fasta) self.pynast_test1_template_fp = get_tmp_filename( prefix='PyNastAlignerTests_', suffix='template.fasta') open(self.pynast_test1_template_fp, 'w').\ write(pynast_test1_template_fasta) self.pynast_test_template_w_dots_fp = get_tmp_filename( prefix='PyNastAlignerTests_', suffix='template.fasta') open(self.pynast_test_template_w_dots_fp, 'w').\ write(pynast_test1_template_fasta.replace('-', '.')) self.pynast_test_template_w_u_fp = get_tmp_filename( prefix='PyNastAlignerTests_', suffix='template.fasta') open(self.pynast_test_template_w_u_fp, 'w').\ write(pynast_test1_template_fasta.replace('T', 'U')) self.pynast_test_template_w_lower_fp = get_tmp_filename( prefix='PyNastAlignerTests_', suffix='template.fasta') open(self.pynast_test_template_w_lower_fp, 'w').\ write(pynast_test1_template_fasta.lower()) # create temp file names (and touch them so we can reliably # clean them up) self.result_fp = get_tmp_filename( prefix='PyNastAlignerTests_', suffix='.fasta') open(self.result_fp, 'w').close() self.failure_fp = get_tmp_filename( prefix='PyNastAlignerTests_', suffix='.fasta') open(self.failure_fp, 'w').close() self.log_fp = get_tmp_filename( prefix='PyNastAlignerTests_', suffix='.log') open(self.log_fp, 'w').close() self._paths_to_clean_up = [ self.pynast_test1_input_fp, self.result_fp, self.failure_fp, self.log_fp, self.pynast_test1_template_fp, self.pynast_test_template_w_dots_fp, self.pynast_test_template_w_u_fp, self.pynast_test_template_w_lower_fp ] self.pynast_test1_aligner = PyNastAligner({ 'template_filepath': self.pynast_test1_template_fp, 'min_len': 15, }) self.pynast_test1_expected_aln = \ LoadSeqs( data=pynast_test1_expected_alignment, aligned=DenseAlignment) self.pynast_test1_expected_fail = \ LoadSeqs(data=pynast_test1_expected_failure, aligned=False)
def test_call_pynast_template_aln_with_U(self): """PyNastAligner: error message when template contains bad char """ pynast_aligner = PyNastAligner({ 'template_filepath': self.pynast_test_template_w_u_fp, 'min_len': 15, }) self.assertRaises(KeyError, pynast_aligner, self.pynast_test1_input_fp)
def test_call_pynast_alt_pairwise_method(self): """PyNastAligner: alternate pairwise alignment method produces correct alignment """ aligner = PyNastAligner({ 'pairwise_alignment_method': 'muscle', 'template_filepath': self.pynast_test1_template_fp, 'min_len': 15, }) actual_aln = aligner(self.pynast_test1_input_fp) expected_aln = self.pynast_test1_expected_aln self.assertEqual(actual_aln, expected_aln)
def test_call_pynast_test1_alt_min_len(self): """PyNastAligner: returns no result when min_len too high """ aligner = PyNastAligner({ 'template_filepath': self.pynast_test1_template_fp, 'min_len': 1000 }) actual_aln = aligner(self.pynast_test1_input_fp) expected_aln = Alignment([]) self.assertEqual(actual_aln, expected_aln)
def test_call_pynast_template_aln_with_lower(self): """PyNastAligner: functions when template alignment contains lower case """ pynast_aligner = PyNastAligner({ 'template_filepath': self.pynast_test_template_w_lower_fp, 'min_len': 15, }) actual_aln = pynast_aligner(self.pynast_test1_input_fp) expected_aln = self.pynast_test1_expected_aln expected_names = ['1 description field 1..23', '2 1..23'] self.assertEqual(actual_aln.Names, expected_names) self.assertEqual(actual_aln, expected_aln)
def test_call_pynast_test1_file_output_alt_params(self): """PyNastAligner writes correct output files when no seqs align """ aligner = PyNastAligner({ 'template_filepath': self.pynast_test1_template_fp, 'min_len': 1000}) actual = aligner( self.pynast_test1_input_fp, result_path=self.result_fp, log_path=self.log_fp, failure_path=self.failure_fp) self.assertTrue(actual is None, "Result should be None when result path provided.") self.assertEqual(getsize(self.result_fp), 0, "No alignable seqs should result in an empty file.") # all seqs reported to fail actual_fail = LoadSeqs(self.failure_fp, aligned=False) self.assertEqual(actual_fail.getNumSeqs(), 3)
def test_call_pynast_test1_file_output_alt_params(self): """PyNastAligner writes correct output files when no seqs align """ aligner = PyNastAligner({ 'template_filepath': self.pynast_test1_template_fp, 'min_len': 1000}) actual = aligner( self.pynast_test1_input_fp, result_path=self.result_fp, log_path=self.log_fp, failure_path=self.failure_fp) self.assertTrue(actual is None, "Result should be None when result path provided.") self.assertEqual(getsize(self.result_fp), 0, "No alignable seqs should result in an empty file.") # all seqs reported to fail with open(self.failure_fp) as failure_f: actual_fail = SequenceCollection.from_fasta_records( parse_fasta(failure_f), DNA) self.assertEqual(actual_fail.sequence_count(), 3)
def setUp(self): fd, self.pynast_test1_input_fp = mkstemp(prefix='PyNastAlignerTests_', suffix='.fasta') close(fd) with open(self.pynast_test1_input_fp, 'w') as f: f.write(pynast_test1_input_fasta) fd, self.pynast_test1_template_fp = mkstemp( prefix='PyNastAlignerTests_', suffix='template.fasta') close(fd) with open(self.pynast_test1_template_fp, 'w') as f: f.write(pynast_test1_template_fasta) fd, self.pynast_test_template_w_dots_fp = mkstemp( prefix='PyNastAlignerTests_', suffix='template.fasta') close(fd) with open(self.pynast_test_template_w_dots_fp, 'w') as f: f.write(pynast_test1_template_fasta.replace('-', '.')) fd, self.pynast_test_template_w_u_fp = mkstemp( prefix='PyNastAlignerTests_', suffix='template.fasta') close(fd) with open(self.pynast_test_template_w_u_fp, 'w') as f: f.write(pynast_test1_template_fasta.replace('T', 'U')) fd, self.pynast_test_template_w_lower_fp = mkstemp( prefix='PyNastAlignerTests_', suffix='template.fasta') close(fd) with open(self.pynast_test_template_w_lower_fp, 'w') as f: f.write(pynast_test1_template_fasta.lower()) # create temp file names (and touch them so we can reliably # clean them up) fd, self.result_fp = mkstemp(prefix='PyNastAlignerTests_', suffix='.fasta') close(fd) open(self.result_fp, 'w').close() fd, self.failure_fp = mkstemp(prefix='PyNastAlignerTests_', suffix='.fasta') close(fd) open(self.failure_fp, 'w').close() fd, self.log_fp = mkstemp(prefix='PyNastAlignerTests_', suffix='.log') close(fd) open(self.log_fp, 'w').close() self._paths_to_clean_up = [ self.pynast_test1_input_fp, self.result_fp, self.failure_fp, self.log_fp, self.pynast_test1_template_fp, self.pynast_test_template_w_dots_fp, self.pynast_test_template_w_u_fp, self.pynast_test_template_w_lower_fp ] self.pynast_test1_aligner = PyNastAligner({ 'template_filepath': self.pynast_test1_template_fp, 'min_len': 15, }) self.pynast_test1_expected_aln = Alignment.from_fasta_records( parse_fasta(pynast_test1_expected_alignment), DNA) self.pynast_test1_expected_fail = SequenceCollection.from_fasta_records( parse_fasta(pynast_test1_expected_failure), DNA)