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)
Ejemplo n.º 3
0
 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
""",
        )