def test_comparison(self): alignment = self.alignment self.assertEqual(alignment.shape, (7, 156)) sequences = alignment.sequences coordinates = numpy.array(alignment.coordinates) other = Align.Alignment(sequences, coordinates) self.assertEqual(alignment, other) self.assertLessEqual(alignment, other) self.assertGreaterEqual(other, alignment) other = Align.Alignment(sequences, coordinates[:, 1:]) self.assertNotEqual(alignment, other) self.assertLess(alignment, other) self.assertLessEqual(alignment, other) self.assertGreater(other, alignment) self.assertGreaterEqual(other, alignment)
def test_target_query_properties(self): target = "ABCD" query = "XYZ" sequences = [target, query] coordinates = numpy.array([[0, 3, 4], [0, 3, 3]]) alignment = Align.Alignment(sequences, coordinates) self.assertEqual(alignment.sequences[0], target) self.assertEqual(alignment.sequences[1], query) self.assertEqual(alignment.target, target) self.assertEqual(alignment.query, query) target = "EFGH" query = "UVW" sequences = [target, query] alignment.sequences = sequences self.assertEqual(alignment.sequences[0], target) self.assertEqual(alignment.sequences[1], query) self.assertEqual(alignment.target, target) self.assertEqual(alignment.query, query) target = "IJKL" query = "RST" sequences = [target, query] alignment.sequences = sequences self.assertEqual(alignment.sequences[0], target) self.assertEqual(alignment.sequences[1], query) self.assertEqual(alignment.target, target) self.assertEqual(alignment.query, query)
def test_indexing_slicing(self): target = "AACCGGGACCG" query = "ACGGAAC" sequences = (target, query) coordinates = numpy.array([[0, 1, 2, 3, 4, 6, 7, 8, 8, 9, 11], [0, 1, 1, 2, 2, 4, 4, 5, 6, 7, 7]]) alignment = Align.Alignment(sequences, coordinates) alignment.score = 6.0 msg = "forward strand" self.check_indexing_slicing(alignment, msg) query = reverse_complement(query) sequences = (target, query) coordinates = numpy.array([[0, 1, 2, 3, 4, 6, 7, 8, 8, 9, 11], [7, 6, 6, 5, 5, 3, 3, 2, 1, 0, 0]]) alignment = Align.Alignment(sequences, coordinates) alignment.score = 6.0 msg = "reverse strand" self.check_indexing_slicing(alignment, msg)
def test_indexing_slicing(self): target = "AACCGGGACCG" query = "ACGGAAC" query_rc = reverse_complement(query) sequences = (target, query) forward_coordinates = numpy.array([[0, 1, 2, 3, 4, 6, 7, 8, 8, 9, 11], [0, 1, 1, 2, 2, 4, 4, 5, 6, 7, 7]]) alignment = Align.Alignment(sequences, forward_coordinates) alignment.score = 6.0 msg = "str, forward strand" self.check_indexing_slicing(alignment, msg) sequences = (target, query_rc) reverse_coordinates = numpy.array([[0, 1, 2, 3, 4, 6, 7, 8, 8, 9, 11], [7, 6, 6, 5, 5, 3, 3, 2, 1, 0, 0]]) alignment = Align.Alignment(sequences, reverse_coordinates) alignment.score = 6.0 msg = "str, reverse strand" self.check_indexing_slicing(alignment, msg) target = Seq(target) query = Seq(query) query_rc = Seq(query_rc) sequences = (target, query) alignment = Align.Alignment(sequences, forward_coordinates) alignment.score = 6.0 msg = "Seq, forward strand" self.check_indexing_slicing(alignment, msg) sequences = (target, query_rc) alignment = Align.Alignment(sequences, reverse_coordinates) alignment.score = 6.0 msg = "Seq, reverse strand" self.check_indexing_slicing(alignment, msg) target = SeqRecord(target) query = SeqRecord(query) query_rc = SeqRecord(query_rc) sequences = (target, query) alignment = Align.Alignment(sequences, forward_coordinates) alignment.score = 6.0 msg = "SeqRecord, forward strand" self.check_indexing_slicing(alignment, msg) sequences = (target, query_rc) alignment = Align.Alignment(sequences, reverse_coordinates) alignment.score = 6.0 msg = "SeqRecord, reverse strand" self.check_indexing_slicing(alignment, msg)
def test_substitutions(self): path = os.path.join("Align", "ecoli.fa") record = SeqIO.read(path, "fasta") target = record.seq path = os.path.join("Align", "bsubtilis.fa") record = SeqIO.read(path, "fasta") query = record.seq coordinates = numpy.array([ [ 503, 744, 744, 747, 748, 820, 820, 822, 822, 823, 823, 828, 828, 833, 833, 845, 848, 850, 851, 854, 857, 1003, 1004, 1011, 1011, 1017, 1017, 1020, 1021, 1116, 1116, 1119, 1120, 1132, 1133, 1242, 1243, 1246, 1246, 1289, 1289, 1292, 1293, 1413, ], [ 512, 753, 754, 757, 757, 829, 831, 833, 834, 835, 838, 843, 844, 849, 850, 862, 862, 864, 864, 867, 867, 1013, 1013, 1020, 1021, 1027, 1028, 1031, 1031, 1126, 1127, 1130, 1130, 1142, 1142, 1251, 1251, 1254, 1255, 1298, 1299, 1302, 1302, 1422, ], ]) sequences = (target, query) forward_alignment = Align.Alignment(sequences, coordinates) sequences = (target, query.reverse_complement()) coordinates = coordinates.copy() coordinates[1, :] = len(query) - coordinates[1, :] reverse_alignment = Align.Alignment(sequences, coordinates) for alignment in (forward_alignment, reverse_alignment): m = alignment.substitutions self.assertEqual( str(m), """\ A C G T A 191.0 3.0 15.0 13.0 C 5.0 186.0 9.0 14.0 G 12.0 11.0 248.0 8.0 T 11.0 19.0 6.0 145.0 """, ) self.assertAlmostEqual(m["T", "C"], 19.0) self.assertAlmostEqual(m["C", "T"], 14.0) m += m.transpose() m /= 2.0 self.assertEqual( str(m), """\ A C G T A 191.0 4.0 13.5 12.0 C 4.0 186.0 10.0 16.5 G 13.5 10.0 248.0 7.0 T 12.0 16.5 7.0 145.0 """, ) self.assertAlmostEqual(m["C", "T"], 16.5) self.assertAlmostEqual(m["T", "C"], 16.5)
def test_sort(self): target = Seq("ACTT") query = Seq("ACCT") sequences = (target, query) coordinates = numpy.array([[0, 4], [0, 4]]) alignment = Align.Alignment(sequences, coordinates) self.assertEqual( str(alignment), """\ ACTT ||.| ACCT """, ) alignment.sort() self.assertEqual( str(alignment), """\ ACCT ||.| ACTT """, ) alignment.sort(reverse=True) self.assertEqual( str(alignment), """\ ACTT ||.| ACCT """, ) target.id = "seq1" query.id = "seq2" alignment.sort() self.assertEqual( str(alignment), """\ ACTT ||.| ACCT """, ) alignment.sort(reverse=True) self.assertEqual( str(alignment), """\ ACCT ||.| ACTT """, ) alignment.sort(key=GC) self.assertEqual( str(alignment), """\ ACTT ||.| ACCT """, ) alignment.sort(key=GC, reverse=True) self.assertEqual( str(alignment), """\ ACCT ||.| ACTT """, )