# Copyright 2022 by Michiel de Hoon.  All rights reserved.
# This code is part of the Biopython distribution and governed by its
# license.  Please see the LICENSE file that should have been included
# as part of this package.
"""Tests for Align.bed module."""
import os
import tempfile
import unittest
from io import StringIO

import numpy as np

from Bio import Align
from Bio import SeqIO
from Bio.Align import Alignment
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord


class TestAlign_dna_rna(unittest.TestCase):
    # The BED file dna_rna.bed was generated using this command:
    # pslToBed dna_rna.psl dna_rna.bed

    def setUp(self):
        data = {}
        records = SeqIO.parse("Blat/dna.fa", "fasta")
        for record in records:
            name, start_end = record.id.split(":")
            assert name == "chr3"
            start, end = start_end.split("-")
            start = int(start)
            end = int(end)
            sequence = str(record.seq)
            assert len(sequence) == end - start
            data[start] = sequence
        self.dna = Seq(data, length=198295559)  # hg38 chr3
        records = SeqIO.parse("Blat/rna.fa", "fasta")
        self.rna = {record.id: record.seq for record in records}

    def check_alignments(self, alignments):
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 1711))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr3")
        self.assertEqual(alignment.query.id, "NR_046654.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[42530895, 42530958, 42532020,
                           42532095, 42532563, 42532606],
                          [     181,      118,      118,
                                 43,       43,        0]])
                # fmt: on
            )
        )
        alignment.target.seq = self.dna
        alignment.query.seq = self.rna[alignment.query.id]
        self.assertTrue(
            np.array_equal(
                alignment.substitutions,
                # fmt: off
            np.array([[36.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
                      [ 0., 40.,  0.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  0., 57.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  0.,  0., 42.,  0.,  0.,  0.,  0.],
                      [ 2.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  0.,  3.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
                     ])
            )
        )
        self.assertEqual(alignment.substitutions.alphabet, "ACGTacgt")
        self.assertEqual(
            str(alignment),
            """\
chr3       42530895 CGGAAGTACTTCTGGGGGTACATACTCATCGGCTGGGGTATGGTACCAGGGAGGGCTTCC
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NR_046654       181 CGGAAGTACTTCTGGGGGTACATACTCATCGGCTGGGGTATGGTACCAGGGAGGGCTTCC

chr3       42530955 AGGCTGGGGACAGAGGGGGCAAGGCCTGGAGAACTCCCTAGGGGGAGGGTGCCAACCCAG
                 60 |||---------------------------------------------------------
NR_046654       121 AGG---------------------------------------------------------

chr3       42531015 CTTGCAGTCCTACGTCTTGCTTAGCTGCAGGTCCTGCCTGCAAGGATATCAGCCAAGGGT
                120 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531075 CAAGAAAGTCCTCAAAATGTCTGATCCCAGGACAAGTCCCTCAGGTTGCAGCTGCACCTA
                180 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531135 GGGCTGACCTGTGGGACAGATTTTGTGAACATCTTTCCATTTCCCTTTAGTTCCCGAAAT
                240 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531195 ACAcagggccactgctaatctataaagggcctctgtcacaattagaaagagaatgtccgt
                300 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531255 ctaggtagacacagcccttcaggcatacagcttCACCCCCTCAGTGGAGCATCCCTCCGT
                360 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531315 GGTGAACAACCTATGCAACCAAAGACAGCAGACTGACAACCCACCCTTTtctctctccct
                420 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531375 ccctctccctgcttttctccaaaatctctccctcatgccctctacccctgcttcctgtgc
                480 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531435 cctctctgctctttcactctccctGGGCCTGACAGGGGTACCCAGCACATTCACCATGGT
                540 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531495 GTGGACCATCGCCAGGATCCATTTTGAGGATTATGGGTGAGCTGCTGCCCCACACACTCC
                600 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531555 CCCGGCCGCCATCACTTGGGCAGGCCCCCTGGGTGGGATGATAATGCCATCTGGCCTTGG
                660 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531615 TGAGTGGACAAAAACCACAGCTCTCGGGCCAGAGGGGAGGCTGGAGGAGGACCTGGGGAG
                720 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531675 CAACAGACTCTGGGCCCGGGGTTGCTAAAGTGCTCAGGAGCAGAGCTGGGGACAACTGGG
                780 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531735 GGAGGTGCTGCTGAGTCTCTCTCTGGCTGAGGACAATCCCTCTCATTCCTCCCCACGGTC
                840 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531795 TGCTCAGGTGCTGGGACACCATCAACTCCTCACTGTGGTGGATCATAAAGGGCCCCATCC
                900 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531855 TCACCTCCATCTTGGTAAGATaccctcccaccacctagagatggggaaacaggcccaaag
                960 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531915 ggcaggcaacttagcccaaggtcacatgggaaattagtatctaggtcagaactgaaacgt
               1020 ------------------------------------------------------------
NR_046654       118 ------------------------------------------------------------

chr3       42531975 agcttcctaatgcccaatgcaggatcatccccacccctgtcctaccagTTCTTCCTTGAG
               1080 ---------------------------------------------...||||||||||||
NR_046654       118 ---------------------------------------------CAGTTCTTCCTTGAG

chr3       42532035 CGTAAGCGGATTGGGAGCACAGTCCTTAGGGATTTGAAGGAGGTAGAGTTCCCGGATGAC
               1140 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NR_046654       103 CGTAAGCGGATTGGGAGCACAGTCCTTAGGGATTTGAAGGAGGTAGAGTTCCCGGATGAC

chr3       42532095 CTGCCCAAAGGGGAAATGCCAGAGGAGAGGTAAGATAGAGAGAGGGGCAGCAGGACCCTG
               1200 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532155 GGAAAGAAGACAGGCCAGCAGTCAAGGGGCCTGAACACCTCAGCCTTCCCGCTCTGACTG
               1260 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532215 CCCGAACTCGGGTCCCCACCCACTAGGTAAACTTCATCCTGTTTATTTGCATCATCCGAA
               1320 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532275 TCCTGCTTCAGAAACTGCGGCCCCCAGATATCAGGAAGAGTGACAGCAGTCCATACTCGT
               1380 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532335 GAGTGTGGGCCTAGTGCCTCAGCCCCCAGTACCTCCATCCCCAGTCCTCAAATCATCCCA
               1440 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532395 CATCTCCTTGAAGTCCTCCCACCCCAAACATCCAGAGTCACCAAAGAGCCACATTGTTCT
               1500 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532455 TTCCCACCTCCACCATGGCCTGGCTcagcccaccaccatcccctgctccagccccaccct
               1560 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532515 caCCAGGCTGCACTCAGAGCCCTGCATGCTTCTCCTGCCCACACTCACCTAGCATCCTTC
               1620 ------------------------------------------------||||||||||||
NR_046654        43 ------------------------------------------------CTAGCATCCTTC

chr3       42532575 CCAGGTATGCATCTGCTGCCAAGCCAGGgag 42532606
               1680 ||||||||||||||||||||||||||||...     1711
NR_046654        31 CCAGGTATGCATCTGCTGCCAAGCCAGGGAG        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr3	42530895	42532606	NR_046654.1	1000	-	42530895	42532606	0	3	63,75,43,	0,1125,1668,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 978)
        self.assertEqual(alignment.shape, (2, 1711))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr3")
        self.assertEqual(alignment.query.id, "NR_046654.1_modified")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[42530895, 42530922, 42530958, 42532020, 42532037,
                           42532039, 42532095, 42532563, 42532606],
                          [     179,      152,      116,      116,       99,
                                 99,       43,       43,        0]])
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr3       42530895 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NR_046654       179 ????????????????????????????????????????????????????????????

chr3       42530955 ????????????????????????????????????????????????????????????
                 60 |||---------------------------------------------------------
NR_046654       119 ???---------------------------------------------------------

chr3       42531015 ????????????????????????????????????????????????????????????
                120 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531075 ????????????????????????????????????????????????????????????
                180 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531135 ????????????????????????????????????????????????????????????
                240 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531195 ????????????????????????????????????????????????????????????
                300 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531255 ????????????????????????????????????????????????????????????
                360 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531315 ????????????????????????????????????????????????????????????
                420 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531375 ????????????????????????????????????????????????????????????
                480 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531435 ????????????????????????????????????????????????????????????
                540 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531495 ????????????????????????????????????????????????????????????
                600 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531555 ????????????????????????????????????????????????????????????
                660 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531615 ????????????????????????????????????????????????????????????
                720 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531675 ????????????????????????????????????????????????????????????
                780 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531735 ????????????????????????????????????????????????????????????
                840 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531795 ????????????????????????????????????????????????????????????
                900 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531855 ????????????????????????????????????????????????????????????
                960 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531915 ????????????????????????????????????????????????????????????
               1020 ------------------------------------------------------------
NR_046654       116 ------------------------------------------------------------

chr3       42531975 ????????????????????????????????????????????????????????????
               1080 ---------------------------------------------|||||||||||||||
NR_046654       116 ---------------------------------------------???????????????

chr3       42532035 ????????????????????????????????????????????????????????????
               1140 ||--||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NR_046654       101 ??--????????????????????????????????????????????????????????

chr3       42532095 ????????????????????????????????????????????????????????????
               1200 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532155 ????????????????????????????????????????????????????????????
               1260 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532215 ????????????????????????????????????????????????????????????
               1320 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532275 ????????????????????????????????????????????????????????????
               1380 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532335 ????????????????????????????????????????????????????????????
               1440 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532395 ????????????????????????????????????????????????????????????
               1500 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532455 ????????????????????????????????????????????????????????????
               1560 ------------------------------------------------------------
NR_046654        43 ------------------------------------------------------------

chr3       42532515 ????????????????????????????????????????????????????????????
               1620 ------------------------------------------------||||||||||||
NR_046654        43 ------------------------------------------------????????????

chr3       42532575 ??????????????????????????????? 42532606
               1680 |||||||||||||||||||||||||||||||     1711
NR_046654        31 ???????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr3	42530895	42532606	NR_046654.1_modified	978	-	42530895	42532606	0	5	27,36,17,56,43,	0,27,1125,1144,1668,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 5407))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr3")
        self.assertEqual(alignment.query.id, "NR_111921.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[48663767, 48663813, 48665640,
                           48665722, 48669098, 48669174],
                          [       0,       46,       46,
                                128,      128,      204]])
                # fmt: on
            )
        )
        alignment.target.seq = self.dna
        alignment.query.seq = self.rna[alignment.query.id]
        self.assertTrue(
            np.array_equal(
                alignment.substitutions,
                # fmt: off
            np.array([[53.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
                      [ 0., 35.,  0.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  0., 50.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  0.,  0., 27.,  0.,  0.,  0.,  0.],
                      [ 9.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  7.,  0.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  0., 16.,  0.,  0.,  0.,  0.,  0.],
                      [ 0.,  0.,  0.,  7.,  0.,  0.,  0.,  0.],
                     ])
            )
        )
        self.assertEqual(alignment.substitutions.alphabet, "ACGTacgt")
        self.assertEqual(
            str(alignment),
            """\
chr3       48663767 CACGAGAGGAGCGGAGGCGAGGGGTGAACGCGGAGCACTCCAATCGGTCAGTCATTGTTT
                  0 ||||||||||||||||||||||||||||||||||||||||||||||--------------
NR_111921         0 CACGAGAGGAGCGGAGGCGAGGGGTGAACGCGGAGCACTCCAATCG--------------

chr3       48663827 CTATTGGCACAATGGGAGGCCCCGCCCCTCACGGCGGACTCATCGCATGGGGGAGGGGGC
                 60 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48663887 TCCGCGGGTTGCCGGCTAACCGTGAGAGAGTCCGGGAGGTACACTATACGGACCGGCCTC
                120 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48663947 CAAAGGCGGAATCGATAACGAGCTGCAGCGCCGGGTGCAGAGGACGCGGGCATCCCGAAG
                180 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664007 CCCAGGAAGAGGTCAGGGCCGGGACCCCAGAACGCTCCACAGGGTGCGGCTCCCGCGATG
                240 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664067 GGGTGGATCCTGGTTCTAACAGGCGAGGAACTCCTGGCCAAGGCCTCTGGCCCGCCCCGA
                300 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664127 ACGGTCCCTATGACATCACCATCAACCAATCAGTCGGCGCATCCTTTCGCCCCTTGACTG
                360 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664187 CTCCGCTTCCGGGAGGCGGGGCTTCTGCGGGTTCCACCTCCCGAGCGCCCCTTGTGGCTA
                420 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664247 CCAAGGTCAGGCAACAGGTGTCCAGTTGTTCCCTCTCCTGTCTACGAATCTGAGGACCTC
                480 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664307 CCCAGGATCAGAGCTCTGGGCCTGATACACGGCCGGGGTTCCTACGGGTTTGTGAGTGGG
                540 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664367 GGTGGAAGATCTGCAGAGGCACTTAGGGCTGAACTCCTTTGAATGGGAGCCAATCGGTGC
                600 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664427 AGGGGCTGGAGGAGCGAGTCCCCCAAAGTAGttttatttatctatttagagacaaggtct
                660 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664487 cactctttcggagtgcagtggtgatcacagctcaccgtagcctcgaactccccaggcgat
                720 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664547 tctctcacctcagcctcccgagtagctgggactacgggtacatgtcatcacacttggcta
                780 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664607 atttttgcattttttatagagacagggtctcaccatgtaggccagattagtcttgaactc
                840 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664667 ctgggctcaagcaatccgcccatcttggcctcccaaagtgctgggattataggtgtgagc
                900 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664727 caccgcgcccggcAACCCAGAAGTGGTTTTGACAGCAccagcgctttctgtgtccacaat
                960 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664787 ctagtgagtagagggcacaaaacctgacaccacggaggcagacaggcaggggctctgccg
               1020 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664847 gggaagggtgttggagtcccaaaggaggcgtctgagtcaccttcgcaacctgggacgcct
               1080 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664907 tcttgcataagatgcctgagcagtgccttgaatgaccaaggggagatccgcatctgcaaa
               1140 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48664967 ggaagggcagggagggatagggattgggggtgggcatcctaggtcttggagactgtgtgg
               1200 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665027 gcaaatgtgcagagacataaagggactatggctgagggaaatcaagCCCTGCCCTCTCAC
               1260 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665087 CAATAGGGCTGGCGCTGGTCCCAGCTAACACTCCTTTTGGAGAGCAAAGCTCCTCACTTC
               1320 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665147 TGAGTAGTGAGATTGATTGCGGATCACTCTCCATGTTGCTGCCTGCTGTGTGTCATCCCA
               1380 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665207 CTGTCATCCTCCCTTTGTGGCTGTTCTGTGGAGCCCCTCTCCCTCAATCTGCACTCACCT
               1440 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665267 CTATGCCCCAGCCCCATTGGCAGCTCCTAATGCACTCCCGGTaaaaaaaaaaaaacaaaa
               1500 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665327 aCCAGATGTTAGTGATAGTGGTGGTAGTTCTTCTCTCCACCTCCAAATCTTGCCCTTGCC
               1560 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665387 TCCTAATAAGACCCCTATGTGGTTTAACCTCAttttttttttttttttttttttttgaga
               1620 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665447 tggagtttcactctgtcacccaggctggagtgaagtggtgtgatGGGGCTTCACCATGTg
               1680 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665507 atggggcttcaccatgttggccaggctggtatcaaactcctgacctctagtgatctgccc
               1740 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665567 gcctcagcctcccaaagtgctgggattaccggcatgaggcaccgtgcccagccTATCCTC
               1800 ------------------------------------------------------------
NR_111921        46 ------------------------------------------------------------

chr3       48665627 CTTCTCTTATCAGCTCCCAACTAGAGGTCCACCCAGGACCCAGAGACCTGGATTTGAGGC
               1860 -------------|||||||||||||||||||||||||||||||||||||||||||||||
NR_111921        46 -------------CTCCCAACTAGAGGTCCACCCAGGACCCAGAGACCTGGATTTGAGGC

chr3       48665687 TGCTGGGCGGCAGATGGAGCGATCAGAAGACCAGGGTAAGGGTGTGGCAGATACTGCCAC
               1920 |||||||||||||||||||||||||||||||||||-------------------------
NR_111921        93 TGCTGGGCGGCAGATGGAGCGATCAGAAGACCAGG-------------------------

chr3       48665747 TAACACTTCTCAGCCTTTCCTTCTCCTGCCTTTTCCACCCCACCCTGTGTTTGTCTACTC
               1980 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48665807 CCAGCCAGGTGTACCTTTCCAGGGGAAGACCTGGCCAACCTGTCCAGCTCAATTAtccag
               2040 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48665867 cagttctttgacctcactgagatctcgagtccattgttcatcacctcagctattgacctg
               2100 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48665927 tgtcattagccttatagagttcagtgccacggaaactccctgccctgttctttttctttt
               2160 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48665987 tctttttttttttttttttgagacagagccttgctctgtcgcccaggctggagtgcagtg
               2220 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666047 gcgcgatctcggctcactgcaagctctgcctcccaggttcacaccattctcctgactcag
               2280 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666107 cctcccgagtagctgggactacaggcgtccaccaccatgcccagctaatttttttttttg
               2340 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666167 tatttttagtagagacggcgtttcaccgtgttagccaggctggtctcgatctcctgacct
               2400 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666227 tgtgatgctcccgcctcggcctcccaaagtgctgggattacaggcatgagccattgtgcc
               2460 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666287 cggcctgccctgttcttcttagacaaacttgctgggctaaaatctaaccccgttaaaata
               2520 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666347 gactatttacgtattgtttgcctctagcgcagcagaacattgctggagaaaaacaaacaa
               2580 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666407 ccgtgctaattggtctcattttatattcatgaccacaagcctcagtattatatcggaggg
               2640 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666467 cctatccagtgcagtagggcaagaaaaataataagttatgaagattggaagggaaaaaaa
               2700 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666527 actaattcacaagcagtaggattgtatatgtaaaaatttcaaaggaacctataggtaagt
               2760 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666587 tgttagaatgagttcagcaaagttgttggacacaagatcaatatataaaaatcagttgca
               2820 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666647 atttctatatgtcaccaacagttagaaaataaatttcttgcctgggcatgttggctcaag
               2880 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666707 cctgtaatcccagcactttgggtggccaaggcgggcagatcacctgaggtcaggagtttg
               2940 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666767 agaccagtttggccaacatggtgaaatcccgtctctactaaaaatacagaaattagccgg
               3000 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666827 gcgtggtggtgggcacctgtagtcccagctactgaggaggctgaggcaggagaatcactt
               3060 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666887 gaacctgggaggcagaggttgcagtgaacgagaaaaaaaaattttttttcttaaaaacaa
               3120 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48666947 tgatgtttacaatagcatcaagtaatatcaaatgctgaggaataaacctaatgaaagatg
               3180 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667007 tgcaaagactacatacacacatacaaaaaaactataaaacattattgagggaaataaaga
               3240 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667067 cataggcctggcattggtggctcatgcctgaaatctcagcactttggagggccaaggtgg
               3300 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667127 gtggatcatttgaggtcaggagttagagatcagtccggccaacatggtgaaacctcatct
               3360 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667187 ctactaaaaatacaaaaaaattagcttggccaggtgcagtggctcacacctgtaatccca
               3420 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667247 gcactttgggaggctgaggcgggcggatcatgaggtcaggagatcgagaccatcctggct
               3480 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667307 aacacggtgaaaccctgtctctactaaaaatacaaaaaaaaattagccgggcctgatggc
               3540 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667367 gggcgcccgtagtcccagctactcgggaggctgaggtagcagaatggcgtgaacctggga
               3600 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667427 ggtgcagcttgcagtgagcctaaattgcgccactgcactccagcctgggtaacagagcga
               3660 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667487 gactccgtttcaaaaaaaaaaaaaaaaattagctgggcatgctgttgtgcacctgcaatc
               3720 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667547 ccagctactctggaggatgaggcagaagtgcctgaacctgggacacagaggttgcagtga
               3780 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667607 gccaagatcatgccattgcactccagcctggacaacacagccagacgctatctgaaaaaa
               3840 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667667 aaaaaaaaaaaaaaagtaaaaaaaatgagaaataaagacataaataaagtgaaaaattgt
               3900 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667727 tccaatattggaaaagtcaatattataaaggtgccaattttcccaaattgatatatggat
               3960 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667787 tcgatgcaacttcagttaaaaatcccactaaattttggctgggtgcggtggctcacacct
               4020 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667847 gtaatcccagcactttgggaggctgaggcgggcggatcacaaggtcaggagatcgagacc
               4080 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667907 atcttggctaacatggtgaaaccgtctctactaaaaatacaaaagttagccgggtgtggt
               4140 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48667967 ggcgggcacctgtagtcccagctacttgggaggctgagacagaatggcgtgaacctgggg
               4200 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668027 aggcggagcttgcagtgagccaagttgacgccactgcactccagcctgggcgacagagca
               4260 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668087 agactctgtctcaaaaaaaaaaaaaaaaaaaTCCCACTAGATTTTGTGTGTGTGTAAACT
               4320 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668147 GACAAACTAGATTTAGcagcctgagcaacacagcaaaaccccatctctacaaaaaataca
               4380 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668207 aaaattttgcacatgcctgtatagtcccagctacttgggaggctgaagtgggaggatcat
               4440 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668267 gtgagctctggggaggtcgaggctgtagtgagctatgatcacatgctgcactctagcctg
               4500 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668327 ggcaacagagcaagagaccctgtatctaaaaaaagaatgaaaattaaaaaataaaaaGAa
               4560 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668387 accaagattgtgtggtactggtacgaggataggaagactaaaggaacgaaatccagagac
               4620 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668447 aggcctgaagatgtgtggaaacttgaattttgacaagggtgGTTCTTCAGAGCTAACATG
               4680 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668507 AAGAAAGGGTTGTTTTCTTTTTTTTGTTTCCCcaggagcaactctattaactgaaagaat
               4740 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668567 aggcttttcaataaatgatgctgggtcagttggatatccatatagaaaaaattaaatgag
               4800 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668627 atctctatttcacactgcttgcataatcaattccatataaatttgacatctgaaaatata
               4860 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668687 cagtttctagaaaacagtatTAAGACCttgttttgttttttgttgttgttgttttttgtt
               4920 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668747 ttgttttttgttttttgagacagagtctcgctctgtcgccaggctggaatacagtggtgc
               4980 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668807 aaccttggctcactgcaacctctgactccctagttcaagcaattctcctgcctcagcctc
               5040 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668867 ccgagtagctgcgattacaggcacatgccaccacgcccagctaatttttgtatttttagt
               5100 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668927 agagatgggggtttcaccatgttggccaggatggtctcgatctcctgaccctgtaatccg
               5160 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48668987 cccacctcggcctcccaaagtgctgggattacaggcgtgagccactgcacctggccAAGA
               5220 ------------------------------------------------------------
NR_111921       128 ------------------------------------------------------------

chr3       48669047 GAAGATCTTAAAGGTGACTTTAAGCAAACttttttttttttttttttacagagacgggag
               5280 ---------------------------------------------------.........
NR_111921       128 ---------------------------------------------------AGACGGGAG

chr3       48669107 ctggagtgcagtggctgttcacaagcgtgaAAGCAAAGATTAAAAAATTTGTTTTTATAT
               5340 ..............................||||||||||||||||||||||||||||||
NR_111921       137 CTGGAGTGCAGTGGCTGTTCACAAGCGTGAAAGCAAAGATTAAAAAATTTGTTTTTATAT

chr3       48669167 TAAAAAA 48669174
               5400 |||||||     5407
NR_111921       197 TAAAAAA      204
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr3	48663767	48669174	NR_111921.1	1000	+	48663767	48669174	0	3	46,82,76,	0,1873,5331,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 972)
        self.assertEqual(alignment.shape, (2, 5407))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr3")
        self.assertEqual(alignment.query.id, "NR_111921.1_modified")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[48663767, 48663795, 48663796, 48663813, 48665640,
                           48665716, 48665722, 48669098, 48669174],
                          [       0,       28,       28,       45,       45,
                                121,      127,      127,      203]])
                # fmt: on
            )
        )
        # The modified RNAs have gaps in their sequence. As this information is
        # not stored in a BED file, we cannot calculate the substitution matrix.
        self.assertEqual(
            str(alignment),
            """\
chr3       48663767 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||-|||||||||||||||||--------------
NR_111921         0 ????????????????????????????-?????????????????--------------

chr3       48663827 ????????????????????????????????????????????????????????????
                 60 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48663887 ????????????????????????????????????????????????????????????
                120 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48663947 ????????????????????????????????????????????????????????????
                180 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664007 ????????????????????????????????????????????????????????????
                240 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664067 ????????????????????????????????????????????????????????????
                300 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664127 ????????????????????????????????????????????????????????????
                360 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664187 ????????????????????????????????????????????????????????????
                420 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664247 ????????????????????????????????????????????????????????????
                480 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664307 ????????????????????????????????????????????????????????????
                540 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664367 ????????????????????????????????????????????????????????????
                600 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664427 ????????????????????????????????????????????????????????????
                660 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664487 ????????????????????????????????????????????????????????????
                720 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664547 ????????????????????????????????????????????????????????????
                780 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664607 ????????????????????????????????????????????????????????????
                840 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664667 ????????????????????????????????????????????????????????????
                900 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664727 ????????????????????????????????????????????????????????????
                960 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664787 ????????????????????????????????????????????????????????????
               1020 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664847 ????????????????????????????????????????????????????????????
               1080 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664907 ????????????????????????????????????????????????????????????
               1140 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48664967 ????????????????????????????????????????????????????????????
               1200 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665027 ????????????????????????????????????????????????????????????
               1260 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665087 ????????????????????????????????????????????????????????????
               1320 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665147 ????????????????????????????????????????????????????????????
               1380 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665207 ????????????????????????????????????????????????????????????
               1440 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665267 ????????????????????????????????????????????????????????????
               1500 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665327 ????????????????????????????????????????????????????????????
               1560 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665387 ????????????????????????????????????????????????????????????
               1620 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665447 ????????????????????????????????????????????????????????????
               1680 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665507 ????????????????????????????????????????????????????????????
               1740 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665567 ????????????????????????????????????????????????????????????
               1800 ------------------------------------------------------------
NR_111921        45 ------------------------------------------------------------

chr3       48665627 ????????????????????????????????????????????????????????????
               1860 -------------|||||||||||||||||||||||||||||||||||||||||||||||
NR_111921        45 -------------???????????????????????????????????????????????

chr3       48665687 ????????????????????????????????????????????????????????????
               1920 |||||||||||||||||||||||||||||||||||-------------------------
NR_111921        92 ???????????????????????????????????-------------------------

chr3       48665747 ????????????????????????????????????????????????????????????
               1980 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48665807 ????????????????????????????????????????????????????????????
               2040 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48665867 ????????????????????????????????????????????????????????????
               2100 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48665927 ????????????????????????????????????????????????????????????
               2160 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48665987 ????????????????????????????????????????????????????????????
               2220 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666047 ????????????????????????????????????????????????????????????
               2280 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666107 ????????????????????????????????????????????????????????????
               2340 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666167 ????????????????????????????????????????????????????????????
               2400 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666227 ????????????????????????????????????????????????????????????
               2460 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666287 ????????????????????????????????????????????????????????????
               2520 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666347 ????????????????????????????????????????????????????????????
               2580 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666407 ????????????????????????????????????????????????????????????
               2640 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666467 ????????????????????????????????????????????????????????????
               2700 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666527 ????????????????????????????????????????????????????????????
               2760 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666587 ????????????????????????????????????????????????????????????
               2820 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666647 ????????????????????????????????????????????????????????????
               2880 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666707 ????????????????????????????????????????????????????????????
               2940 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666767 ????????????????????????????????????????????????????????????
               3000 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666827 ????????????????????????????????????????????????????????????
               3060 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666887 ????????????????????????????????????????????????????????????
               3120 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48666947 ????????????????????????????????????????????????????????????
               3180 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667007 ????????????????????????????????????????????????????????????
               3240 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667067 ????????????????????????????????????????????????????????????
               3300 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667127 ????????????????????????????????????????????????????????????
               3360 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667187 ????????????????????????????????????????????????????????????
               3420 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667247 ????????????????????????????????????????????????????????????
               3480 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667307 ????????????????????????????????????????????????????????????
               3540 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667367 ????????????????????????????????????????????????????????????
               3600 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667427 ????????????????????????????????????????????????????????????
               3660 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667487 ????????????????????????????????????????????????????????????
               3720 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667547 ????????????????????????????????????????????????????????????
               3780 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667607 ????????????????????????????????????????????????????????????
               3840 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667667 ????????????????????????????????????????????????????????????
               3900 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667727 ????????????????????????????????????????????????????????????
               3960 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667787 ????????????????????????????????????????????????????????????
               4020 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667847 ????????????????????????????????????????????????????????????
               4080 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667907 ????????????????????????????????????????????????????????????
               4140 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48667967 ????????????????????????????????????????????????????????????
               4200 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668027 ????????????????????????????????????????????????????????????
               4260 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668087 ????????????????????????????????????????????????????????????
               4320 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668147 ????????????????????????????????????????????????????????????
               4380 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668207 ????????????????????????????????????????????????????????????
               4440 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668267 ????????????????????????????????????????????????????????????
               4500 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668327 ????????????????????????????????????????????????????????????
               4560 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668387 ????????????????????????????????????????????????????????????
               4620 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668447 ????????????????????????????????????????????????????????????
               4680 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668507 ????????????????????????????????????????????????????????????
               4740 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668567 ????????????????????????????????????????????????????????????
               4800 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668627 ????????????????????????????????????????????????????????????
               4860 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668687 ????????????????????????????????????????????????????????????
               4920 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668747 ????????????????????????????????????????????????????????????
               4980 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668807 ????????????????????????????????????????????????????????????
               5040 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668867 ????????????????????????????????????????????????????????????
               5100 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668927 ????????????????????????????????????????????????????????????
               5160 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48668987 ????????????????????????????????????????????????????????????
               5220 ------------------------------------------------------------
NR_111921       127 ------------------------------------------------------------

chr3       48669047 ????????????????????????????????????????????????????????????
               5280 ---------------------------------------------------|||||||||
NR_111921       127 ---------------------------------------------------?????????

chr3       48669107 ????????????????????????????????????????????????????????????
               5340 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NR_111921       136 ????????????????????????????????????????????????????????????

chr3       48669167 ??????? 48669174
               5400 |||||||     5407
NR_111921       196 ???????      203
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr3	48663767	48669174	NR_111921.1_modified	972	+	48663767	48669174	0	5	28,17,76,6,76,	0,29,1873,1949,5331,
""",
        )
        self.assertRaises(StopIteration, next, alignments)

    def test_reading(self):
        """Test parsing dna_rna.bed."""
        path = "Blat/dna_rna.bed"
        alignments = Align.parse(path, "bed")
        self.check_alignments(alignments)
        alignments = iter(alignments)
        self.check_alignments(alignments)
        with Align.parse(path, "bed") as alignments:
            self.check_alignments(alignments)
        with self.assertRaises(AttributeError):
            alignments._stream
        with Align.parse(path, "bed") as alignments:
            pass
        with self.assertRaises(AttributeError):
            alignments._stream

    def test_writing(self):
        """Test writing the alignments in dna_rna.bed."""
        path = "Blat/dna_rna.bed"
        with open(path) as stream:
            original_data = stream.read()
        alignments = Align.parse(path, "bed")
        stream = StringIO()
        n = Align.write(alignments, stream, "bed")
        self.assertEqual(n, 4)
        stream.seek(0)
        written_data = stream.read()
        stream.close()
        self.assertEqual(original_data, written_data)


class TestAlign_dna(unittest.TestCase):
    def test_reading_psl_34_001(self):
        """Test parsing psl_34_001.bed."""
        path = "Blat/psl_34_001.bed"
        alignments = Align.parse(path, "bed")
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 16))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr4")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[61646095, 61646111],
                          [       0,       16]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr4       61646095 ???????????????? 61646111
                  0 ||||||||||||||||       16
hg19_dna          0 ????????????????       16
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr4	61646095	61646111	hg19_dna	1000	+	61646095	61646111	0	1	16,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 33))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[10271783, 10271816],
                          [       0,       33]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1       10271783 ????????????????????????????????? 10271816
                  0 |||||||||||||||||||||||||||||||||       33
hg19_dna          0 ?????????????????????????????????       33
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	10271783	10271816	hg19_dna	1000	+	10271783	10271816	0	1	33,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 17))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[53575980, 53575997],
                          [      17,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr2       53575980 ????????????????? 53575997
                  0 |||||||||||||||||       17
hg19_dna         17 ?????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr2	53575980	53575997	hg19_dna	1000	-	53575980	53575997	0	1	17,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 854)
        self.assertEqual(alignment.shape, (2, 41))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr9")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[85737865, 85737906],
                          [       0,       41]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr9       85737865 ????????????????????????????????????????? 85737906
                  0 |||||||||||||||||||||||||||||||||||||||||       41
hg19_dna          0 ?????????????????????????????????????????       41
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr9	85737865	85737906	hg19_dna	854	+	85737865	85737906	0	1	41,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 41))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr8")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[95160479, 95160520],
                          [       0,       41]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr8       95160479 ????????????????????????????????????????? 95160520
                  0 |||||||||||||||||||||||||||||||||||||||||       41
hg19_dna          0 ?????????????????????????????????????????       41
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr8	95160479	95160520	hg19_dna	1000	+	95160479	95160520	0	1	41,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 834)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr22")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[42144400, 42144436],
                          [       0,       36]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr22      42144400 ???????????????????????????????????? 42144436
                  0 ||||||||||||||||||||||||||||||||||||       36
hg19_dna          0 ????????????????????????????????????       36
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr22	42144400	42144436	hg19_dna	834	+	42144400	42144436	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 682)
        self.assertEqual(alignment.shape, (2, 44))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[183925984, 183925990, 183926028],
                          [        0,         6,        44]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr2      183925984 ???????????????????????????????????????????? 183926028
                  0 ||||||||||||||||||||||||||||||||||||||||||||        44
hg19_dna          0 ????????????????????????????????????????????        44
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr2	183925984	183926028	hg19_dna	682	+	183925984	183926028	0	2	6,38,	0,6,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 890)
        self.assertEqual(alignment.shape, (2, 170))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr19")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[35483340, 35483365, 35483499, 35483510],
                          [       0,       25,       25,       36]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr19      35483340 ????????????????????????????????????????????????????????????
                  0 |||||||||||||||||||||||||-----------------------------------
hg19_dna          0 ?????????????????????????-----------------------------------

chr19      35483400 ????????????????????????????????????????????????????????????
                 60 ------------------------------------------------------------
hg19_dna         25 ------------------------------------------------------------

chr19      35483460 ?????????????????????????????????????????????????? 35483510
                120 ---------------------------------------|||||||||||      170
hg19_dna         25 ---------------------------------------???????????       36
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr19	35483340	35483510	hg19_dna	890	+	35483340	35483510	0	2	25,11,	0,159,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 39))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr18")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[23891310, 23891349],
                          [       0,       39]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr18      23891310 ??????????????????????????????????????? 23891349
                  0 |||||||||||||||||||||||||||||||||||||||       39
hg19_dna          0 ???????????????????????????????????????       39
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr18	23891310	23891349	hg19_dna	1000	+	23891310	23891349	0	1	39,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 930)
        self.assertEqual(alignment.shape, (2, 28))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr18")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[43252217, 43252245],
                          [       0,       28]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr18      43252217 ???????????????????????????? 43252245
                  0 ||||||||||||||||||||||||||||       28
hg19_dna          0 ????????????????????????????       28
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr18	43252217	43252245	hg19_dna	930	+	43252217	43252245	0	1	28,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 912)
        self.assertEqual(alignment.shape, (2, 51))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr13")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[52759147, 52759154, 52759160, 52759198],
                          [       0,        7,        7,       45]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr13      52759147 ??????????????????????????????????????????????????? 52759198
                  0 |||||||------||||||||||||||||||||||||||||||||||||||       51
hg19_dna          0 ???????------??????????????????????????????????????       45
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr13	52759147	52759198	hg19_dna	912	+	52759147	52759198	0	2	7,38,	0,13,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 50))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[1207056, 1207106],
                          [      0,      50]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1        1207056 ?????????????????????????????????????????????????? 1207106
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||      50
hg19_dna          0 ??????????????????????????????????????????????????      50
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	1207056	1207106	hg19_dna	1000	+	1207056	1207106	0	1	50,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 824)
        self.assertEqual(alignment.shape, (2, 34))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[61700837, 61700871],
                          [       0,       34]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1       61700837 ?????????????????????????????????? 61700871
                  0 ||||||||||||||||||||||||||||||||||       34
hg19_dna          0 ??????????????????????????????????       34
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	61700837	61700871	hg19_dna	824	+	61700837	61700871	0	1	34,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 572)
        self.assertEqual(alignment.shape, (2, 34))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr4")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[37558157, 37558167, 37558173, 37558191],
                          [      28,       18,       18,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr4       37558157 ?????????????????????????????????? 37558191
                  0 ||||||||||------||||||||||||||||||       34
hg19_dna         28 ??????????------??????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr4	37558157	37558191	hg19_dna	572	-	37558157	37558191	0	2	10,18,	0,16,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 892)
        self.assertEqual(alignment.shape, (2, 37))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr22")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[48997405, 48997442],
                          [      37,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr22      48997405 ????????????????????????????????????? 48997442
                  0 |||||||||||||||||||||||||||||||||||||       37
hg19_dna         37 ?????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr22	48997405	48997442	hg19_dna	892	-	48997405	48997442	0	1	37,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 946)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[120641740, 120641776],
                          [       36,         0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr2      120641740 ???????????????????????????????????? 120641776
                  0 ||||||||||||||||||||||||||||||||||||        36
hg19_dna         36 ????????????????????????????????????         0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr2	120641740	120641776	hg19_dna	946	-	120641740	120641776	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 39))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr19")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[54017130, 54017169],
                          [      39,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr19      54017130 ??????????????????????????????????????? 54017169
                  0 |||||||||||||||||||||||||||||||||||||||       39
hg19_dna         39 ???????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr19	54017130	54017169	hg19_dna	1000	-	54017130	54017169	0	1	39,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 848)
        self.assertEqual(alignment.shape, (2, 39))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr19")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[553742, 553781],
                          [    39,      0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr19        553742 ??????????????????????????????????????? 553781
                  0 |||||||||||||||||||||||||||||||||||||||     39
hg19_dna         39 ???????????????????????????????????????      0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr19	553742	553781	hg19_dna	848	-	553742	553781	0	1	39,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 834)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr10")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[99388555, 99388591],
                          [      36,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr10      99388555 ???????????????????????????????????? 99388591
                  0 ||||||||||||||||||||||||||||||||||||       36
hg19_dna         36 ????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr10	99388555	99388591	hg19_dna	834	-	99388555	99388591	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 920)
        self.assertEqual(alignment.shape, (2, 25))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr10")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[112178171, 112178196],
                          [       25,         0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr10     112178171 ????????????????????????? 112178196
                  0 |||||||||||||||||||||||||        25
hg19_dna         25 ?????????????????????????         0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr10	112178171	112178196	hg19_dna	920	-	112178171	112178196	0	1	25,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 946)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[39368490, 39368526],
                          [      36,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1       39368490 ???????????????????????????????????? 39368526
                  0 ||||||||||||||||||||||||||||||||||||       36
hg19_dna         36 ????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	39368490	39368526	hg19_dna	946	-	39368490	39368526	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 942)
        self.assertEqual(alignment.shape, (2, 34))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[220325687, 220325721],
                          [       34,         0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1      220325687 ?????????????????????????????????? 220325721
                  0 ||||||||||||||||||||||||||||||||||        34
hg19_dna         34 ??????????????????????????????????         0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	220325687	220325721	hg19_dna	942	-	220325687	220325721	0	1	34,	0,
""",
        )
        self.assertRaises(StopIteration, next, alignments)

    def test_writing_psl_34_001(self):
        """Test writing the alignments in psl_34_001.bed."""
        path = "Blat/psl_34_001.bed"
        with open(path) as stream:
            original_data = stream.read()
        alignments = Align.parse(path, "bed")
        stream = StringIO()
        n = Align.write(alignments, stream, "bed")
        self.assertEqual(n, 22)
        stream.seek(0)
        written_data = stream.read()
        stream.close()
        self.assertEqual(original_data, written_data)

    def test_reading_psl_34_003(self):
        """Test parsing psl_34_003.bed."""
        path = "Blat/psl_34_003.bed"
        alignments = Align.parse(path, "bed")
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 16))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr4")
        self.assertEqual(alignment.query.id, "hg18_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[61646095, 61646111],
                          [       0,       16]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr4       61646095 ???????????????? 61646111
                  0 ||||||||||||||||       16
hg18_dna          0 ????????????????       16
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr4	61646095	61646111	hg18_dna	1000	+	61646095	61646111	0	1	16,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 33))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg18_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[10271783, 10271816],
                          [       0,       33]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1       10271783 ????????????????????????????????? 10271816
                  0 |||||||||||||||||||||||||||||||||       33
hg18_dna          0 ?????????????????????????????????       33
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	10271783	10271816	hg18_dna	1000	+	10271783	10271816	0	1	33,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 17))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "hg18_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[53575980, 53575997],
                          [      17,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr2       53575980 ????????????????? 53575997
                  0 |||||||||||||||||       17
hg18_dna         17 ?????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr2	53575980	53575997	hg18_dna	1000	-	53575980	53575997	0	1	17,	0,
""",
        )
        self.assertRaises(StopIteration, next, alignments)

    def test_writing_psl_34_003(self):
        """Test writing the alignments in psl_34_003.bed."""
        path = "Blat/psl_34_003.bed"
        with open(path) as stream:
            original_data = stream.read()
        alignments = Align.parse(path, "bed")
        stream = StringIO()
        n = Align.write(alignments, stream, "bed")
        self.assertEqual(n, 3)
        stream.seek(0)
        written_data = stream.read()
        stream.close()
        self.assertEqual(original_data, written_data)

    def test_reading_psl_34_004(self):
        """Test parsing psl_34_004.bed."""
        path = "Blat/psl_34_004.bed"
        alignments = Align.parse(path, "bed")
        alignment = next(alignments)
        self.assertEqual(alignment.score, 854)
        self.assertEqual(alignment.shape, (2, 41))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr9")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[85737865, 85737906],
                          [       0,       41]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr9       85737865 ????????????????????????????????????????? 85737906
                  0 |||||||||||||||||||||||||||||||||||||||||       41
hg19_dna          0 ?????????????????????????????????????????       41
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr9	85737865	85737906	hg19_dna	854	+	85737865	85737906	0	1	41,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 41))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr8")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[95160479, 95160520],
                          [       0,       41]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr8       95160479 ????????????????????????????????????????? 95160520
                  0 |||||||||||||||||||||||||||||||||||||||||       41
hg19_dna          0 ?????????????????????????????????????????       41
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr8	95160479	95160520	hg19_dna	1000	+	95160479	95160520	0	1	41,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 834)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr22")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[42144400, 42144436],
                          [       0,       36]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr22      42144400 ???????????????????????????????????? 42144436
                  0 ||||||||||||||||||||||||||||||||||||       36
hg19_dna          0 ????????????????????????????????????       36
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr22	42144400	42144436	hg19_dna	834	+	42144400	42144436	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 682)
        self.assertEqual(alignment.shape, (2, 44))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[183925984, 183925990, 183926028],
                          [        0,         6,        44]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr2      183925984 ???????????????????????????????????????????? 183926028
                  0 ||||||||||||||||||||||||||||||||||||||||||||        44
hg19_dna          0 ????????????????????????????????????????????        44
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr2	183925984	183926028	hg19_dna	682	+	183925984	183926028	0	2	6,38,	0,6,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 890)
        self.assertEqual(alignment.shape, (2, 170))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr19")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[35483340, 35483365, 35483499, 35483510],
                          [       0,       25,       25,       36]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr19      35483340 ????????????????????????????????????????????????????????????
                  0 |||||||||||||||||||||||||-----------------------------------
hg19_dna          0 ?????????????????????????-----------------------------------

chr19      35483400 ????????????????????????????????????????????????????????????
                 60 ------------------------------------------------------------
hg19_dna         25 ------------------------------------------------------------

chr19      35483460 ?????????????????????????????????????????????????? 35483510
                120 ---------------------------------------|||||||||||      170
hg19_dna         25 ---------------------------------------???????????       36
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr19	35483340	35483510	hg19_dna	890	+	35483340	35483510	0	2	25,11,	0,159,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 39))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr18")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[23891310, 23891349],
                          [       0,       39]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr18      23891310 ??????????????????????????????????????? 23891349
                  0 |||||||||||||||||||||||||||||||||||||||       39
hg19_dna          0 ???????????????????????????????????????       39
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr18	23891310	23891349	hg19_dna	1000	+	23891310	23891349	0	1	39,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 930)
        self.assertEqual(alignment.shape, (2, 28))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr18")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[43252217, 43252245],
                          [       0,       28]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr18      43252217 ???????????????????????????? 43252245
                  0 ||||||||||||||||||||||||||||       28
hg19_dna          0 ????????????????????????????       28
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr18	43252217	43252245	hg19_dna	930	+	43252217	43252245	0	1	28,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 912)
        self.assertEqual(alignment.shape, (2, 51))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr13")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[52759147, 52759154, 52759160, 52759198],
                          [       0,        7,        7,       45]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr13      52759147 ??????????????????????????????????????????????????? 52759198
                  0 |||||||------||||||||||||||||||||||||||||||||||||||       51
hg19_dna          0 ???????------??????????????????????????????????????       45
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr13	52759147	52759198	hg19_dna	912	+	52759147	52759198	0	2	7,38,	0,13,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 50))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[1207056, 1207106],
                          [      0,      50]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1        1207056 ?????????????????????????????????????????????????? 1207106
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||      50
hg19_dna          0 ??????????????????????????????????????????????????      50
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	1207056	1207106	hg19_dna	1000	+	1207056	1207106	0	1	50,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 824)
        self.assertEqual(alignment.shape, (2, 34))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[61700837, 61700871],
                          [       0,       34]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1       61700837 ?????????????????????????????????? 61700871
                  0 ||||||||||||||||||||||||||||||||||       34
hg19_dna          0 ??????????????????????????????????       34
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	61700837	61700871	hg19_dna	824	+	61700837	61700871	0	1	34,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 572)
        self.assertEqual(alignment.shape, (2, 34))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr4")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[37558157, 37558167, 37558173, 37558191],
                          [      28,       18,       18,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr4       37558157 ?????????????????????????????????? 37558191
                  0 ||||||||||------||||||||||||||||||       34
hg19_dna         28 ??????????------??????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr4	37558157	37558191	hg19_dna	572	-	37558157	37558191	0	2	10,18,	0,16,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 892)
        self.assertEqual(alignment.shape, (2, 37))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr22")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[48997405, 48997442],
                          [      37,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr22      48997405 ????????????????????????????????????? 48997442
                  0 |||||||||||||||||||||||||||||||||||||       37
hg19_dna         37 ?????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr22	48997405	48997442	hg19_dna	892	-	48997405	48997442	0	1	37,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 946)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[120641740, 120641776],
                          [       36,         0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr2      120641740 ???????????????????????????????????? 120641776
                  0 ||||||||||||||||||||||||||||||||||||        36
hg19_dna         36 ????????????????????????????????????         0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr2	120641740	120641776	hg19_dna	946	-	120641740	120641776	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 39))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr19")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[54017130, 54017169],
                          [      39,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr19      54017130 ??????????????????????????????????????? 54017169
                  0 |||||||||||||||||||||||||||||||||||||||       39
hg19_dna         39 ???????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr19	54017130	54017169	hg19_dna	1000	-	54017130	54017169	0	1	39,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 848)
        self.assertEqual(alignment.shape, (2, 39))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr19")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[553742, 553781],
                          [    39,      0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr19        553742 ??????????????????????????????????????? 553781
                  0 |||||||||||||||||||||||||||||||||||||||     39
hg19_dna         39 ???????????????????????????????????????      0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr19	553742	553781	hg19_dna	848	-	553742	553781	0	1	39,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 834)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr10")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[99388555, 99388591],
                          [      36,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr10      99388555 ???????????????????????????????????? 99388591
                  0 ||||||||||||||||||||||||||||||||||||       36
hg19_dna         36 ????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr10	99388555	99388591	hg19_dna	834	-	99388555	99388591	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 920)
        self.assertEqual(alignment.shape, (2, 25))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr10")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[112178171, 112178196],
                          [       25,         0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr10     112178171 ????????????????????????? 112178196
                  0 |||||||||||||||||||||||||        25
hg19_dna         25 ?????????????????????????         0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr10	112178171	112178196	hg19_dna	920	-	112178171	112178196	0	1	25,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 946)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[39368490, 39368526],
                          [      36,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1       39368490 ???????????????????????????????????? 39368526
                  0 ||||||||||||||||||||||||||||||||||||       36
hg19_dna         36 ????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	39368490	39368526	hg19_dna	946	-	39368490	39368526	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 942)
        self.assertEqual(alignment.shape, (2, 34))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[220325687, 220325721],
                          [       34,         0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1      220325687 ?????????????????????????????????? 220325721
                  0 ||||||||||||||||||||||||||||||||||        34
hg19_dna         34 ??????????????????????????????????         0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	220325687	220325721	hg19_dna	942	-	220325687	220325721	0	1	34,	0,
""",
        )
        self.assertRaises(StopIteration, next, alignments)

    def test_writing_psl_34_004(self):
        """Test writing the alignments in psl_34_004.bed."""
        path = "Blat/psl_34_004.bed"
        with open(path) as stream:
            original_data = stream.read()
        alignments = Align.parse(path, "bed")
        stream = StringIO()
        n = Align.write(alignments, stream, "bed")
        self.assertEqual(n, 19)
        stream.seek(0)
        written_data = stream.read()
        stream.close()
        self.assertEqual(original_data, written_data)

    def test_reading_psl_34_005(self):
        """Test parsing psl_34_005.bed."""
        path = "Blat/psl_34_005.bed"
        alignments = Align.parse(path, "bed")
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 16))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr4")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[61646095, 61646111],
                          [       0,       16]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr4       61646095 ???????????????? 61646111
                  0 ||||||||||||||||       16
hg19_dna          0 ????????????????       16
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr4	61646095	61646111	hg19_dna	1000	+	61646095	61646111	0	1	16,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 33))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[10271783, 10271816],
                          [       0,       33]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1       10271783 ????????????????????????????????? 10271816
                  0 |||||||||||||||||||||||||||||||||       33
hg19_dna          0 ?????????????????????????????????       33
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	10271783	10271816	hg19_dna	1000	+	10271783	10271816	0	1	33,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 17))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[53575980, 53575997],
                          [      17,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr2       53575980 ????????????????? 53575997
                  0 |||||||||||||||||       17
hg19_dna         17 ?????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr2	53575980	53575997	hg19_dna	1000	-	53575980	53575997	0	1	17,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 854)
        self.assertEqual(alignment.shape, (2, 41))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr9")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[85737865, 85737906],
                          [       0,       41]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr9       85737865 ????????????????????????????????????????? 85737906
                  0 |||||||||||||||||||||||||||||||||||||||||       41
hg19_dna          0 ?????????????????????????????????????????       41
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr9	85737865	85737906	hg19_dna	854	+	85737865	85737906	0	1	41,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 41))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr8")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[95160479, 95160520],
                          [       0,       41]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr8       95160479 ????????????????????????????????????????? 95160520
                  0 |||||||||||||||||||||||||||||||||||||||||       41
hg19_dna          0 ?????????????????????????????????????????       41
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr8	95160479	95160520	hg19_dna	1000	+	95160479	95160520	0	1	41,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 834)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr22")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[42144400, 42144436],
                          [       0,       36]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr22      42144400 ???????????????????????????????????? 42144436
                  0 ||||||||||||||||||||||||||||||||||||       36
hg19_dna          0 ????????????????????????????????????       36
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr22	42144400	42144436	hg19_dna	834	+	42144400	42144436	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 682)
        self.assertEqual(alignment.shape, (2, 44))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[183925984, 183925990, 183926028],
                          [        0,         6,        44]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr2      183925984 ???????????????????????????????????????????? 183926028
                  0 ||||||||||||||||||||||||||||||||||||||||||||        44
hg19_dna          0 ????????????????????????????????????????????        44
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr2	183925984	183926028	hg19_dna	682	+	183925984	183926028	0	2	6,38,	0,6,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 890)
        self.assertEqual(alignment.shape, (2, 170))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr19")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[35483340, 35483365, 35483499, 35483510],
                          [       0,       25,       25,       36]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr19      35483340 ????????????????????????????????????????????????????????????
                  0 |||||||||||||||||||||||||-----------------------------------
hg19_dna          0 ?????????????????????????-----------------------------------

chr19      35483400 ????????????????????????????????????????????????????????????
                 60 ------------------------------------------------------------
hg19_dna         25 ------------------------------------------------------------

chr19      35483460 ?????????????????????????????????????????????????? 35483510
                120 ---------------------------------------|||||||||||      170
hg19_dna         25 ---------------------------------------???????????       36
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr19	35483340	35483510	hg19_dna	890	+	35483340	35483510	0	2	25,11,	0,159,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 39))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr18")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[23891310, 23891349],
                          [       0,       39]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr18      23891310 ??????????????????????????????????????? 23891349
                  0 |||||||||||||||||||||||||||||||||||||||       39
hg19_dna          0 ???????????????????????????????????????       39
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr18	23891310	23891349	hg19_dna	1000	+	23891310	23891349	0	1	39,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 930)
        self.assertEqual(alignment.shape, (2, 28))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr18")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[43252217, 43252245],
                          [       0,       28]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr18      43252217 ???????????????????????????? 43252245
                  0 ||||||||||||||||||||||||||||       28
hg19_dna          0 ????????????????????????????       28
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr18	43252217	43252245	hg19_dna	930	+	43252217	43252245	0	1	28,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 912)
        self.assertEqual(alignment.shape, (2, 51))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr13")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[52759147, 52759154, 52759160, 52759198],
                          [       0,        7,        7,       45]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr13      52759147 ??????????????????????????????????????????????????? 52759198
                  0 |||||||------||||||||||||||||||||||||||||||||||||||       51
hg19_dna          0 ???????------??????????????????????????????????????       45
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr13	52759147	52759198	hg19_dna	912	+	52759147	52759198	0	2	7,38,	0,13,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 50))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[1207056, 1207106],
                          [      0,      50]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1        1207056 ?????????????????????????????????????????????????? 1207106
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||      50
hg19_dna          0 ??????????????????????????????????????????????????      50
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	1207056	1207106	hg19_dna	1000	+	1207056	1207106	0	1	50,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 824)
        self.assertEqual(alignment.shape, (2, 34))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[61700837, 61700871],
                          [       0,       34]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1       61700837 ?????????????????????????????????? 61700871
                  0 ||||||||||||||||||||||||||||||||||       34
hg19_dna          0 ??????????????????????????????????       34
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	61700837	61700871	hg19_dna	824	+	61700837	61700871	0	1	34,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 572)
        self.assertEqual(alignment.shape, (2, 34))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr4")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[37558157, 37558167, 37558173, 37558191],
                          [      28,       18,       18,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr4       37558157 ?????????????????????????????????? 37558191
                  0 ||||||||||------||||||||||||||||||       34
hg19_dna         28 ??????????------??????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr4	37558157	37558191	hg19_dna	572	-	37558157	37558191	0	2	10,18,	0,16,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 892)
        self.assertEqual(alignment.shape, (2, 37))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr22")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[48997405, 48997442],
                          [      37,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr22      48997405 ????????????????????????????????????? 48997442
                  0 |||||||||||||||||||||||||||||||||||||       37
hg19_dna         37 ?????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr22	48997405	48997442	hg19_dna	892	-	48997405	48997442	0	1	37,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 946)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[120641740, 120641776],
                          [       36,         0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr2      120641740 ???????????????????????????????????? 120641776
                  0 ||||||||||||||||||||||||||||||||||||        36
hg19_dna         36 ????????????????????????????????????         0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr2	120641740	120641776	hg19_dna	946	-	120641740	120641776	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertEqual(alignment.shape, (2, 39))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr19")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[54017130, 54017169],
                          [      39,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr19      54017130 ??????????????????????????????????????? 54017169
                  0 |||||||||||||||||||||||||||||||||||||||       39
hg19_dna         39 ???????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr19	54017130	54017169	hg19_dna	1000	-	54017130	54017169	0	1	39,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 848)
        self.assertEqual(alignment.shape, (2, 39))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr19")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[553742, 553781],
                          [    39,      0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr19        553742 ??????????????????????????????????????? 553781
                  0 |||||||||||||||||||||||||||||||||||||||     39
hg19_dna         39 ???????????????????????????????????????      0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr19	553742	553781	hg19_dna	848	-	553742	553781	0	1	39,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 834)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr10")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[99388555, 99388591],
                          [      36,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr10      99388555 ???????????????????????????????????? 99388591
                  0 ||||||||||||||||||||||||||||||||||||       36
hg19_dna         36 ????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr10	99388555	99388591	hg19_dna	834	-	99388555	99388591	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 920)
        self.assertEqual(alignment.shape, (2, 25))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr10")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[112178171, 112178196],
                          [       25,         0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr10     112178171 ????????????????????????? 112178196
                  0 |||||||||||||||||||||||||        25
hg19_dna         25 ?????????????????????????         0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr10	112178171	112178196	hg19_dna	920	-	112178171	112178196	0	1	25,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 946)
        self.assertEqual(alignment.shape, (2, 36))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[39368490, 39368526],
                          [      36,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1       39368490 ???????????????????????????????????? 39368526
                  0 ||||||||||||||||||||||||||||||||||||       36
hg19_dna         36 ????????????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	39368490	39368526	hg19_dna	946	-	39368490	39368526	0	1	36,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 942)
        self.assertEqual(alignment.shape, (2, 34))
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "hg19_dna")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[220325687, 220325721],
                          [       34,         0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr1      220325687 ?????????????????????????????????? 220325721
                  0 ||||||||||||||||||||||||||||||||||        34
hg19_dna         34 ??????????????????????????????????         0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr1	220325687	220325721	hg19_dna	942	-	220325687	220325721	0	1	34,	0,
""",
        )
        self.assertRaises(StopIteration, next, alignments)

    def test_writing_psl_34_005(self):
        """Test writing the alignments in psl_34_005.bed."""
        path = "Blat/psl_34_005.bed"
        with open(path) as stream:
            original_data = stream.read()
        alignments = Align.parse(path, "bed")
        stream = StringIO()
        n = Align.write(alignments, stream, "bed")
        self.assertEqual(n, 22)
        stream.seek(0)
        written_data = stream.read()
        stream.close()
        self.assertEqual(original_data, written_data)


class TestAlign_dnax_prot(unittest.TestCase):
    def test_reading_psl_35_001(self):
        """Test parsing psl_35_001.bed."""
        path = "Blat/psl_35_001.bed"
        alignments = Align.parse(path, "bed")
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr13")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[75566694, 75566850],
                          [       0,      156]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr13      75566694 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.         0 ????????????????????????????????????????????????????????????

chr13      75566754 ????????????????????????????????????????????????????????????
                 60 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.        60 ????????????????????????????????????????????????????????????

chr13      75566814 ???????????????????????????????????? 75566850
                120 ||||||||||||||||||||||||||||||||||||      156
CAG33136.       120 ????????????????????????????????????      156
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr13	75566694	75566850	CAG33136.1	1000	+	75566694	75566850	0	1	156,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr13")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[75560749, 75560881],
                          [       0,      132]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr13      75560749 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.         0 ????????????????????????????????????????????????????????????

chr13      75560809 ????????????????????????????????????????????????????????????
                 60 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.        60 ????????????????????????????????????????????????????????????

chr13      75560869 ???????????? 75560881
                120 ||||||||||||      132
CAG33136.       120 ????????????      132
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr13	75560749	75560881	CAG33136.1	1000	+	75560749	75560881	0	1	132,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 986)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr13")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[75549820, 75549865, 75567225, 75567312],
                          [       0,       45,       45,      132]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr13      75549820 ????????????????????????????????????????????????????????????
                  0 |||||||||||||||||||||||||||||||||||||||||||||---------------
CAG33136.         0 ?????????????????????????????????????????????---------------

chr13      75549880 ????????????????????????????????????????????????????????????
                 60 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75549940 ????????????????????????????????????????????????????????????
                120 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550000 ????????????????????????????????????????????????????????????
                180 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550060 ????????????????????????????????????????????????????????????
                240 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550120 ????????????????????????????????????????????????????????????
                300 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550180 ????????????????????????????????????????????????????????????
                360 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550240 ????????????????????????????????????????????????????????????
                420 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550300 ????????????????????????????????????????????????????????????
                480 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550360 ????????????????????????????????????????????????????????????
                540 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550420 ????????????????????????????????????????????????????????????
                600 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550480 ????????????????????????????????????????????????????????????
                660 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550540 ????????????????????????????????????????????????????????????
                720 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550600 ????????????????????????????????????????????????????????????
                780 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550660 ????????????????????????????????????????????????????????????
                840 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550720 ????????????????????????????????????????????????????????????
                900 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550780 ????????????????????????????????????????????????????????????
                960 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550840 ????????????????????????????????????????????????????????????
               1020 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550900 ????????????????????????????????????????????????????????????
               1080 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75550960 ????????????????????????????????????????????????????????????
               1140 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551020 ????????????????????????????????????????????????????????????
               1200 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551080 ????????????????????????????????????????????????????????????
               1260 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551140 ????????????????????????????????????????????????????????????
               1320 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551200 ????????????????????????????????????????????????????????????
               1380 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551260 ????????????????????????????????????????????????????????????
               1440 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551320 ????????????????????????????????????????????????????????????
               1500 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551380 ????????????????????????????????????????????????????????????
               1560 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551440 ????????????????????????????????????????????????????????????
               1620 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551500 ????????????????????????????????????????????????????????????
               1680 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551560 ????????????????????????????????????????????????????????????
               1740 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551620 ????????????????????????????????????????????????????????????
               1800 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551680 ????????????????????????????????????????????????????????????
               1860 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551740 ????????????????????????????????????????????????????????????
               1920 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551800 ????????????????????????????????????????????????????????????
               1980 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551860 ????????????????????????????????????????????????????????????
               2040 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551920 ????????????????????????????????????????????????????????????
               2100 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75551980 ????????????????????????????????????????????????????????????
               2160 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552040 ????????????????????????????????????????????????????????????
               2220 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552100 ????????????????????????????????????????????????????????????
               2280 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552160 ????????????????????????????????????????????????????????????
               2340 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552220 ????????????????????????????????????????????????????????????
               2400 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552280 ????????????????????????????????????????????????????????????
               2460 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552340 ????????????????????????????????????????????????????????????
               2520 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552400 ????????????????????????????????????????????????????????????
               2580 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552460 ????????????????????????????????????????????????????????????
               2640 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552520 ????????????????????????????????????????????????????????????
               2700 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552580 ????????????????????????????????????????????????????????????
               2760 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552640 ????????????????????????????????????????????????????????????
               2820 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552700 ????????????????????????????????????????????????????????????
               2880 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552760 ????????????????????????????????????????????????????????????
               2940 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552820 ????????????????????????????????????????????????????????????
               3000 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552880 ????????????????????????????????????????????????????????????
               3060 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75552940 ????????????????????????????????????????????????????????????
               3120 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553000 ????????????????????????????????????????????????????????????
               3180 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553060 ????????????????????????????????????????????????????????????
               3240 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553120 ????????????????????????????????????????????????????????????
               3300 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553180 ????????????????????????????????????????????????????????????
               3360 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553240 ????????????????????????????????????????????????????????????
               3420 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553300 ????????????????????????????????????????????????????????????
               3480 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553360 ????????????????????????????????????????????????????????????
               3540 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553420 ????????????????????????????????????????????????????????????
               3600 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553480 ????????????????????????????????????????????????????????????
               3660 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553540 ????????????????????????????????????????????????????????????
               3720 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553600 ????????????????????????????????????????????????????????????
               3780 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553660 ????????????????????????????????????????????????????????????
               3840 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553720 ????????????????????????????????????????????????????????????
               3900 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553780 ????????????????????????????????????????????????????????????
               3960 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553840 ????????????????????????????????????????????????????????????
               4020 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553900 ????????????????????????????????????????????????????????????
               4080 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75553960 ????????????????????????????????????????????????????????????
               4140 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554020 ????????????????????????????????????????????????????????????
               4200 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554080 ????????????????????????????????????????????????????????????
               4260 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554140 ????????????????????????????????????????????????????????????
               4320 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554200 ????????????????????????????????????????????????????????????
               4380 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554260 ????????????????????????????????????????????????????????????
               4440 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554320 ????????????????????????????????????????????????????????????
               4500 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554380 ????????????????????????????????????????????????????????????
               4560 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554440 ????????????????????????????????????????????????????????????
               4620 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554500 ????????????????????????????????????????????????????????????
               4680 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554560 ????????????????????????????????????????????????????????????
               4740 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554620 ????????????????????????????????????????????????????????????
               4800 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554680 ????????????????????????????????????????????????????????????
               4860 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554740 ????????????????????????????????????????????????????????????
               4920 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554800 ????????????????????????????????????????????????????????????
               4980 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554860 ????????????????????????????????????????????????????????????
               5040 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554920 ????????????????????????????????????????????????????????????
               5100 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75554980 ????????????????????????????????????????????????????????????
               5160 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555040 ????????????????????????????????????????????????????????????
               5220 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555100 ????????????????????????????????????????????????????????????
               5280 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555160 ????????????????????????????????????????????????????????????
               5340 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555220 ????????????????????????????????????????????????????????????
               5400 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555280 ????????????????????????????????????????????????????????????
               5460 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555340 ????????????????????????????????????????????????????????????
               5520 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555400 ????????????????????????????????????????????????????????????
               5580 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555460 ????????????????????????????????????????????????????????????
               5640 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555520 ????????????????????????????????????????????????????????????
               5700 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555580 ????????????????????????????????????????????????????????????
               5760 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555640 ????????????????????????????????????????????????????????????
               5820 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555700 ????????????????????????????????????????????????????????????
               5880 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555760 ????????????????????????????????????????????????????????????
               5940 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555820 ????????????????????????????????????????????????????????????
               6000 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555880 ????????????????????????????????????????????????????????????
               6060 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75555940 ????????????????????????????????????????????????????????????
               6120 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556000 ????????????????????????????????????????????????????????????
               6180 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556060 ????????????????????????????????????????????????????????????
               6240 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556120 ????????????????????????????????????????????????????????????
               6300 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556180 ????????????????????????????????????????????????????????????
               6360 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556240 ????????????????????????????????????????????????????????????
               6420 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556300 ????????????????????????????????????????????????????????????
               6480 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556360 ????????????????????????????????????????????????????????????
               6540 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556420 ????????????????????????????????????????????????????????????
               6600 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556480 ????????????????????????????????????????????????????????????
               6660 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556540 ????????????????????????????????????????????????????????????
               6720 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556600 ????????????????????????????????????????????????????????????
               6780 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556660 ????????????????????????????????????????????????????????????
               6840 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556720 ????????????????????????????????????????????????????????????
               6900 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556780 ????????????????????????????????????????????????????????????
               6960 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556840 ????????????????????????????????????????????????????????????
               7020 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556900 ????????????????????????????????????????????????????????????
               7080 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75556960 ????????????????????????????????????????????????????????????
               7140 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557020 ????????????????????????????????????????????????????????????
               7200 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557080 ????????????????????????????????????????????????????????????
               7260 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557140 ????????????????????????????????????????????????????????????
               7320 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557200 ????????????????????????????????????????????????????????????
               7380 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557260 ????????????????????????????????????????????????????????????
               7440 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557320 ????????????????????????????????????????????????????????????
               7500 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557380 ????????????????????????????????????????????????????????????
               7560 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557440 ????????????????????????????????????????????????????????????
               7620 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557500 ????????????????????????????????????????????????????????????
               7680 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557560 ????????????????????????????????????????????????????????????
               7740 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557620 ????????????????????????????????????????????????????????????
               7800 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557680 ????????????????????????????????????????????????????????????
               7860 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557740 ????????????????????????????????????????????????????????????
               7920 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557800 ????????????????????????????????????????????????????????????
               7980 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557860 ????????????????????????????????????????????????????????????
               8040 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557920 ????????????????????????????????????????????????????????????
               8100 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75557980 ????????????????????????????????????????????????????????????
               8160 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558040 ????????????????????????????????????????????????????????????
               8220 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558100 ????????????????????????????????????????????????????????????
               8280 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558160 ????????????????????????????????????????????????????????????
               8340 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558220 ????????????????????????????????????????????????????????????
               8400 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558280 ????????????????????????????????????????????????????????????
               8460 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558340 ????????????????????????????????????????????????????????????
               8520 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558400 ????????????????????????????????????????????????????????????
               8580 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558460 ????????????????????????????????????????????????????????????
               8640 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558520 ????????????????????????????????????????????????????????????
               8700 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558580 ????????????????????????????????????????????????????????????
               8760 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558640 ????????????????????????????????????????????????????????????
               8820 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558700 ????????????????????????????????????????????????????????????
               8880 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558760 ????????????????????????????????????????????????????????????
               8940 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558820 ????????????????????????????????????????????????????????????
               9000 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558880 ????????????????????????????????????????????????????????????
               9060 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75558940 ????????????????????????????????????????????????????????????
               9120 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559000 ????????????????????????????????????????????????????????????
               9180 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559060 ????????????????????????????????????????????????????????????
               9240 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559120 ????????????????????????????????????????????????????????????
               9300 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559180 ????????????????????????????????????????????????????????????
               9360 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559240 ????????????????????????????????????????????????????????????
               9420 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559300 ????????????????????????????????????????????????????????????
               9480 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559360 ????????????????????????????????????????????????????????????
               9540 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559420 ????????????????????????????????????????????????????????????
               9600 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559480 ????????????????????????????????????????????????????????????
               9660 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559540 ????????????????????????????????????????????????????????????
               9720 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559600 ????????????????????????????????????????????????????????????
               9780 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559660 ????????????????????????????????????????????????????????????
               9840 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559720 ????????????????????????????????????????????????????????????
               9900 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559780 ????????????????????????????????????????????????????????????
               9960 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559840 ????????????????????????????????????????????????????????????
              10020 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559900 ????????????????????????????????????????????????????????????
              10080 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75559960 ????????????????????????????????????????????????????????????
              10140 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560020 ????????????????????????????????????????????????????????????
              10200 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560080 ????????????????????????????????????????????????????????????
              10260 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560140 ????????????????????????????????????????????????????????????
              10320 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560200 ????????????????????????????????????????????????????????????
              10380 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560260 ????????????????????????????????????????????????????????????
              10440 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560320 ????????????????????????????????????????????????????????????
              10500 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560380 ????????????????????????????????????????????????????????????
              10560 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560440 ????????????????????????????????????????????????????????????
              10620 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560500 ????????????????????????????????????????????????????????????
              10680 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560560 ????????????????????????????????????????????????????????????
              10740 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560620 ????????????????????????????????????????????????????????????
              10800 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560680 ????????????????????????????????????????????????????????????
              10860 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560740 ????????????????????????????????????????????????????????????
              10920 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560800 ????????????????????????????????????????????????????????????
              10980 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560860 ????????????????????????????????????????????????????????????
              11040 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560920 ????????????????????????????????????????????????????????????
              11100 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75560980 ????????????????????????????????????????????????????????????
              11160 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561040 ????????????????????????????????????????????????????????????
              11220 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561100 ????????????????????????????????????????????????????????????
              11280 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561160 ????????????????????????????????????????????????????????????
              11340 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561220 ????????????????????????????????????????????????????????????
              11400 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561280 ????????????????????????????????????????????????????????????
              11460 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561340 ????????????????????????????????????????????????????????????
              11520 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561400 ????????????????????????????????????????????????????????????
              11580 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561460 ????????????????????????????????????????????????????????????
              11640 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561520 ????????????????????????????????????????????????????????????
              11700 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561580 ????????????????????????????????????????????????????????????
              11760 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561640 ????????????????????????????????????????????????????????????
              11820 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561700 ????????????????????????????????????????????????????????????
              11880 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561760 ????????????????????????????????????????????????????????????
              11940 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561820 ????????????????????????????????????????????????????????????
              12000 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561880 ????????????????????????????????????????????????????????????
              12060 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75561940 ????????????????????????????????????????????????????????????
              12120 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562000 ????????????????????????????????????????????????????????????
              12180 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562060 ????????????????????????????????????????????????????????????
              12240 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562120 ????????????????????????????????????????????????????????????
              12300 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562180 ????????????????????????????????????????????????????????????
              12360 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562240 ????????????????????????????????????????????????????????????
              12420 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562300 ????????????????????????????????????????????????????????????
              12480 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562360 ????????????????????????????????????????????????????????????
              12540 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562420 ????????????????????????????????????????????????????????????
              12600 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562480 ????????????????????????????????????????????????????????????
              12660 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562540 ????????????????????????????????????????????????????????????
              12720 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562600 ????????????????????????????????????????????????????????????
              12780 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562660 ????????????????????????????????????????????????????????????
              12840 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562720 ????????????????????????????????????????????????????????????
              12900 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562780 ????????????????????????????????????????????????????????????
              12960 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562840 ????????????????????????????????????????????????????????????
              13020 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562900 ????????????????????????????????????????????????????????????
              13080 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75562960 ????????????????????????????????????????????????????????????
              13140 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563020 ????????????????????????????????????????????????????????????
              13200 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563080 ????????????????????????????????????????????????????????????
              13260 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563140 ????????????????????????????????????????????????????????????
              13320 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563200 ????????????????????????????????????????????????????????????
              13380 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563260 ????????????????????????????????????????????????????????????
              13440 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563320 ????????????????????????????????????????????????????????????
              13500 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563380 ????????????????????????????????????????????????????????????
              13560 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563440 ????????????????????????????????????????????????????????????
              13620 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563500 ????????????????????????????????????????????????????????????
              13680 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563560 ????????????????????????????????????????????????????????????
              13740 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563620 ????????????????????????????????????????????????????????????
              13800 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563680 ????????????????????????????????????????????????????????????
              13860 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563740 ????????????????????????????????????????????????????????????
              13920 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563800 ????????????????????????????????????????????????????????????
              13980 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563860 ????????????????????????????????????????????????????????????
              14040 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563920 ????????????????????????????????????????????????????????????
              14100 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75563980 ????????????????????????????????????????????????????????????
              14160 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564040 ????????????????????????????????????????????????????????????
              14220 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564100 ????????????????????????????????????????????????????????????
              14280 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564160 ????????????????????????????????????????????????????????????
              14340 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564220 ????????????????????????????????????????????????????????????
              14400 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564280 ????????????????????????????????????????????????????????????
              14460 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564340 ????????????????????????????????????????????????????????????
              14520 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564400 ????????????????????????????????????????????????????????????
              14580 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564460 ????????????????????????????????????????????????????????????
              14640 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564520 ????????????????????????????????????????????????????????????
              14700 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564580 ????????????????????????????????????????????????????????????
              14760 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564640 ????????????????????????????????????????????????????????????
              14820 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564700 ????????????????????????????????????????????????????????????
              14880 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564760 ????????????????????????????????????????????????????????????
              14940 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564820 ????????????????????????????????????????????????????????????
              15000 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564880 ????????????????????????????????????????????????????????????
              15060 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75564940 ????????????????????????????????????????????????????????????
              15120 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565000 ????????????????????????????????????????????????????????????
              15180 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565060 ????????????????????????????????????????????????????????????
              15240 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565120 ????????????????????????????????????????????????????????????
              15300 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565180 ????????????????????????????????????????????????????????????
              15360 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565240 ????????????????????????????????????????????????????????????
              15420 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565300 ????????????????????????????????????????????????????????????
              15480 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565360 ????????????????????????????????????????????????????????????
              15540 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565420 ????????????????????????????????????????????????????????????
              15600 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565480 ????????????????????????????????????????????????????????????
              15660 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565540 ????????????????????????????????????????????????????????????
              15720 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565600 ????????????????????????????????????????????????????????????
              15780 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565660 ????????????????????????????????????????????????????????????
              15840 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565720 ????????????????????????????????????????????????????????????
              15900 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565780 ????????????????????????????????????????????????????????????
              15960 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565840 ????????????????????????????????????????????????????????????
              16020 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565900 ????????????????????????????????????????????????????????????
              16080 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75565960 ????????????????????????????????????????????????????????????
              16140 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566020 ????????????????????????????????????????????????????????????
              16200 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566080 ????????????????????????????????????????????????????????????
              16260 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566140 ????????????????????????????????????????????????????????????
              16320 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566200 ????????????????????????????????????????????????????????????
              16380 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566260 ????????????????????????????????????????????????????????????
              16440 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566320 ????????????????????????????????????????????????????????????
              16500 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566380 ????????????????????????????????????????????????????????????
              16560 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566440 ????????????????????????????????????????????????????????????
              16620 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566500 ????????????????????????????????????????????????????????????
              16680 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566560 ????????????????????????????????????????????????????????????
              16740 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566620 ????????????????????????????????????????????????????????????
              16800 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566680 ????????????????????????????????????????????????????????????
              16860 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566740 ????????????????????????????????????????????????????????????
              16920 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566800 ????????????????????????????????????????????????????????????
              16980 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566860 ????????????????????????????????????????????????????????????
              17040 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566920 ????????????????????????????????????????????????????????????
              17100 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75566980 ????????????????????????????????????????????????????????????
              17160 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75567040 ????????????????????????????????????????????????????????????
              17220 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75567100 ????????????????????????????????????????????????????????????
              17280 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75567160 ????????????????????????????????????????????????????????????
              17340 ------------------------------------------------------------
CAG33136.        45 ------------------------------------------------------------

chr13      75567220 ????????????????????????????????????????????????????????????
              17400 -----|||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.        45 -----???????????????????????????????????????????????????????

chr13      75567280 ???????????????????????????????? 75567312
              17460 ||||||||||||||||||||||||||||||||    17492
CAG33136.       100 ????????????????????????????????      132
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr13	75549820	75567312	CAG33136.1	986	+	75549820	75567312	0	2	45,87,	0,17405,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr13")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[75604767, 75604827, 75605728, 75605809],
                          [       0,       60,       60,      141]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr13      75604767 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.         0 ????????????????????????????????????????????????????????????

chr13      75604827 ????????????????????????????????????????????????????????????
                 60 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75604887 ????????????????????????????????????????????????????????????
                120 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75604947 ????????????????????????????????????????????????????????????
                180 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605007 ????????????????????????????????????????????????????????????
                240 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605067 ????????????????????????????????????????????????????????????
                300 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605127 ????????????????????????????????????????????????????????????
                360 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605187 ????????????????????????????????????????????????????????????
                420 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605247 ????????????????????????????????????????????????????????????
                480 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605307 ????????????????????????????????????????????????????????????
                540 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605367 ????????????????????????????????????????????????????????????
                600 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605427 ????????????????????????????????????????????????????????????
                660 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605487 ????????????????????????????????????????????????????????????
                720 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605547 ????????????????????????????????????????????????????????????
                780 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605607 ????????????????????????????????????????????????????????????
                840 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605667 ????????????????????????????????????????????????????????????
                900 ------------------------------------------------------------
CAG33136.        60 ------------------------------------------------------------

chr13      75605727 ????????????????????????????????????????????????????????????
                960 -|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.        60 -???????????????????????????????????????????????????????????

chr13      75605787 ?????????????????????? 75605809
               1020 ||||||||||||||||||||||     1042
CAG33136.       119 ??????????????????????      141
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr13	75604767	75605809	CAG33136.1	1000	+	75604767	75605809	0	2	60,81,	0,961,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr13")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[75594914, 75594989],
                          [       0,       75]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr13      75594914 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.         0 ????????????????????????????????????????????????????????????

chr13      75594974 ??????????????? 75594989
                 60 |||||||||||||||       75
CAG33136.        60 ???????????????       75
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr13	75594914	75594989	CAG33136.1	1000	+	75594914	75594989	0	1	75,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1000)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr13")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[75569459, 75569507],
                          [       0,       48]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr13      75569459 ???????????????????????????????????????????????? 75569507
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||       48
CAG33136.         0 ????????????????????????????????????????????????       48
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr13	75569459	75569507	CAG33136.1	1000	+	75569459	75569507	0	1	48,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 530)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr4")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[41260685, 41260787],
                          [       0,      102]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr4       41260685 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.         0 ????????????????????????????????????????????????????????????

chr4       41260745 ?????????????????????????????????????????? 41260787
                 60 ||||||||||||||||||||||||||||||||||||||||||      102
CAG33136.        60 ??????????????????????????????????????????      102
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr4	41260685	41260787	CAG33136.1	530	+	41260685	41260787	0	1	102,	0,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 166)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr4")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[41257605, 41257731, 41263227, 41263290],
                          [       0,      126,      126,      189]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
chr4       41257605 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.         0 ????????????????????????????????????????????????????????????

chr4       41257665 ????????????????????????????????????????????????????????????
                 60 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.        60 ????????????????????????????????????????????????????????????

chr4       41257725 ????????????????????????????????????????????????????????????
                120 ||||||------------------------------------------------------
CAG33136.       120 ??????------------------------------------------------------

chr4       41257785 ????????????????????????????????????????????????????????????
                180 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41257845 ????????????????????????????????????????????????????????????
                240 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41257905 ????????????????????????????????????????????????????????????
                300 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41257965 ????????????????????????????????????????????????????????????
                360 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258025 ????????????????????????????????????????????????????????????
                420 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258085 ????????????????????????????????????????????????????????????
                480 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258145 ????????????????????????????????????????????????????????????
                540 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258205 ????????????????????????????????????????????????????????????
                600 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258265 ????????????????????????????????????????????????????????????
                660 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258325 ????????????????????????????????????????????????????????????
                720 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258385 ????????????????????????????????????????????????????????????
                780 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258445 ????????????????????????????????????????????????????????????
                840 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258505 ????????????????????????????????????????????????????????????
                900 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258565 ????????????????????????????????????????????????????????????
                960 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258625 ????????????????????????????????????????????????????????????
               1020 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258685 ????????????????????????????????????????????????????????????
               1080 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258745 ????????????????????????????????????????????????????????????
               1140 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258805 ????????????????????????????????????????????????????????????
               1200 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258865 ????????????????????????????????????????????????????????????
               1260 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258925 ????????????????????????????????????????????????????????????
               1320 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41258985 ????????????????????????????????????????????????????????????
               1380 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259045 ????????????????????????????????????????????????????????????
               1440 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259105 ????????????????????????????????????????????????????????????
               1500 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259165 ????????????????????????????????????????????????????????????
               1560 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259225 ????????????????????????????????????????????????????????????
               1620 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259285 ????????????????????????????????????????????????????????????
               1680 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259345 ????????????????????????????????????????????????????????????
               1740 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259405 ????????????????????????????????????????????????????????????
               1800 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259465 ????????????????????????????????????????????????????????????
               1860 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259525 ????????????????????????????????????????????????????????????
               1920 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259585 ????????????????????????????????????????????????????????????
               1980 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259645 ????????????????????????????????????????????????????????????
               2040 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259705 ????????????????????????????????????????????????????????????
               2100 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259765 ????????????????????????????????????????????????????????????
               2160 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259825 ????????????????????????????????????????????????????????????
               2220 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259885 ????????????????????????????????????????????????????????????
               2280 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41259945 ????????????????????????????????????????????????????????????
               2340 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260005 ????????????????????????????????????????????????????????????
               2400 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260065 ????????????????????????????????????????????????????????????
               2460 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260125 ????????????????????????????????????????????????????????????
               2520 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260185 ????????????????????????????????????????????????????????????
               2580 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260245 ????????????????????????????????????????????????????????????
               2640 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260305 ????????????????????????????????????????????????????????????
               2700 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260365 ????????????????????????????????????????????????????????????
               2760 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260425 ????????????????????????????????????????????????????????????
               2820 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260485 ????????????????????????????????????????????????????????????
               2880 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260545 ????????????????????????????????????????????????????????????
               2940 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260605 ????????????????????????????????????????????????????????????
               3000 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260665 ????????????????????????????????????????????????????????????
               3060 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260725 ????????????????????????????????????????????????????????????
               3120 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260785 ????????????????????????????????????????????????????????????
               3180 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260845 ????????????????????????????????????????????????????????????
               3240 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260905 ????????????????????????????????????????????????????????????
               3300 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41260965 ????????????????????????????????????????????????????????????
               3360 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261025 ????????????????????????????????????????????????????????????
               3420 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261085 ????????????????????????????????????????????????????????????
               3480 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261145 ????????????????????????????????????????????????????????????
               3540 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261205 ????????????????????????????????????????????????????????????
               3600 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261265 ????????????????????????????????????????????????????????????
               3660 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261325 ????????????????????????????????????????????????????????????
               3720 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261385 ????????????????????????????????????????????????????????????
               3780 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261445 ????????????????????????????????????????????????????????????
               3840 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261505 ????????????????????????????????????????????????????????????
               3900 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261565 ????????????????????????????????????????????????????????????
               3960 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261625 ????????????????????????????????????????????????????????????
               4020 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261685 ????????????????????????????????????????????????????????????
               4080 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261745 ????????????????????????????????????????????????????????????
               4140 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261805 ????????????????????????????????????????????????????????????
               4200 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261865 ????????????????????????????????????????????????????????????
               4260 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261925 ????????????????????????????????????????????????????????????
               4320 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41261985 ????????????????????????????????????????????????????????????
               4380 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262045 ????????????????????????????????????????????????????????????
               4440 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262105 ????????????????????????????????????????????????????????????
               4500 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262165 ????????????????????????????????????????????????????????????
               4560 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262225 ????????????????????????????????????????????????????????????
               4620 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262285 ????????????????????????????????????????????????????????????
               4680 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262345 ????????????????????????????????????????????????????????????
               4740 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262405 ????????????????????????????????????????????????????????????
               4800 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262465 ????????????????????????????????????????????????????????????
               4860 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262525 ????????????????????????????????????????????????????????????
               4920 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262585 ????????????????????????????????????????????????????????????
               4980 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262645 ????????????????????????????????????????????????????????????
               5040 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262705 ????????????????????????????????????????????????????????????
               5100 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262765 ????????????????????????????????????????????????????????????
               5160 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262825 ????????????????????????????????????????????????????????????
               5220 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262885 ????????????????????????????????????????????????????????????
               5280 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41262945 ????????????????????????????????????????????????????????????
               5340 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41263005 ????????????????????????????????????????????????????????????
               5400 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41263065 ????????????????????????????????????????????????????????????
               5460 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41263125 ????????????????????????????????????????????????????????????
               5520 ------------------------------------------------------------
CAG33136.       126 ------------------------------------------------------------

chr4       41263185 ????????????????????????????????????????????????????????????
               5580 ------------------------------------------||||||||||||||||||
CAG33136.       126 ------------------------------------------??????????????????

chr4       41263245 ????????????????????????????????????????????? 41263290
               5640 |||||||||||||||||||||||||||||||||||||||||||||     5685
CAG33136.       144 ?????????????????????????????????????????????      189
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
chr4	41257605	41263290	CAG33136.1	166	+	41257605	41263290	0	2	126,63,	0,5622,
""",
        )
        self.assertRaises(StopIteration, next, alignments)

    def test_writing_psl_35_001(self):
        """Test writing the alignments in psl_35_001.bed."""
        path = "Blat/psl_35_001.bed"
        with open(path) as stream:
            original_data = stream.read()
        alignments = Align.parse(path, "bed")
        stream = StringIO()
        n = Align.write(alignments, stream, "bed")
        self.assertEqual(n, 8)
        stream.seek(0)
        written_data = stream.read()
        stream.close()
        self.assertEqual(original_data, written_data)

    def test_reading_psl_35_002(self):
        """Test parsing psl_35_002.bed."""
        path = "Blat/psl_35_002.bed"
        alignments = Align.parse(path, "bed")
        alignment = next(alignments)
        self.assertEqual(alignment.score, 972)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "KI537979")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[9712654, 9712786, 9715941, 9716097, 9716445, 9716532, 9718374,
                           9718422, 9739264, 9739339, 9743706, 9743766, 9744511, 9744592],
                          [      0,     132,     132,     288,     288,     375,     375,
                               423,     423,     498,     498,     558,     558,     639]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
KI537979    9712654 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.         0 ????????????????????????????????????????????????????????????

KI537979    9712714 ????????????????????????????????????????????????????????????
                 60 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.        60 ????????????????????????????????????????????????????????????

KI537979    9712774 ????????????????????????????????????????????????????????????
                120 ||||||||||||------------------------------------------------
CAG33136.       120 ????????????------------------------------------------------

KI537979    9712834 ????????????????????????????????????????????????????????????
                180 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9712894 ????????????????????????????????????????????????????????????
                240 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9712954 ????????????????????????????????????????????????????????????
                300 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713014 ????????????????????????????????????????????????????????????
                360 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713074 ????????????????????????????????????????????????????????????
                420 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713134 ????????????????????????????????????????????????????????????
                480 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713194 ????????????????????????????????????????????????????????????
                540 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713254 ????????????????????????????????????????????????????????????
                600 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713314 ????????????????????????????????????????????????????????????
                660 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713374 ????????????????????????????????????????????????????????????
                720 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713434 ????????????????????????????????????????????????????????????
                780 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713494 ????????????????????????????????????????????????????????????
                840 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713554 ????????????????????????????????????????????????????????????
                900 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713614 ????????????????????????????????????????????????????????????
                960 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713674 ????????????????????????????????????????????????????????????
               1020 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713734 ????????????????????????????????????????????????????????????
               1080 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713794 ????????????????????????????????????????????????????????????
               1140 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713854 ????????????????????????????????????????????????????????????
               1200 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713914 ????????????????????????????????????????????????????????????
               1260 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9713974 ????????????????????????????????????????????????????????????
               1320 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714034 ????????????????????????????????????????????????????????????
               1380 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714094 ????????????????????????????????????????????????????????????
               1440 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714154 ????????????????????????????????????????????????????????????
               1500 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714214 ????????????????????????????????????????????????????????????
               1560 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714274 ????????????????????????????????????????????????????????????
               1620 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714334 ????????????????????????????????????????????????????????????
               1680 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714394 ????????????????????????????????????????????????????????????
               1740 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714454 ????????????????????????????????????????????????????????????
               1800 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714514 ????????????????????????????????????????????????????????????
               1860 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714574 ????????????????????????????????????????????????????????????
               1920 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714634 ????????????????????????????????????????????????????????????
               1980 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714694 ????????????????????????????????????????????????????????????
               2040 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714754 ????????????????????????????????????????????????????????????
               2100 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714814 ????????????????????????????????????????????????????????????
               2160 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714874 ????????????????????????????????????????????????????????????
               2220 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714934 ????????????????????????????????????????????????????????????
               2280 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9714994 ????????????????????????????????????????????????????????????
               2340 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715054 ????????????????????????????????????????????????????????????
               2400 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715114 ????????????????????????????????????????????????????????????
               2460 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715174 ????????????????????????????????????????????????????????????
               2520 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715234 ????????????????????????????????????????????????????????????
               2580 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715294 ????????????????????????????????????????????????????????????
               2640 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715354 ????????????????????????????????????????????????????????????
               2700 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715414 ????????????????????????????????????????????????????????????
               2760 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715474 ????????????????????????????????????????????????????????????
               2820 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715534 ????????????????????????????????????????????????????????????
               2880 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715594 ????????????????????????????????????????????????????????????
               2940 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715654 ????????????????????????????????????????????????????????????
               3000 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715714 ????????????????????????????????????????????????????????????
               3060 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715774 ????????????????????????????????????????????????????????????
               3120 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715834 ????????????????????????????????????????????????????????????
               3180 ------------------------------------------------------------
CAG33136.       132 ------------------------------------------------------------

KI537979    9715894 ????????????????????????????????????????????????????????????
               3240 -----------------------------------------------|||||||||||||
CAG33136.       132 -----------------------------------------------?????????????

KI537979    9715954 ????????????????????????????????????????????????????????????
               3300 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       145 ????????????????????????????????????????????????????????????

KI537979    9716014 ????????????????????????????????????????????????????????????
               3360 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       205 ????????????????????????????????????????????????????????????

KI537979    9716074 ????????????????????????????????????????????????????????????
               3420 |||||||||||||||||||||||-------------------------------------
CAG33136.       265 ???????????????????????-------------------------------------

KI537979    9716134 ????????????????????????????????????????????????????????????
               3480 ------------------------------------------------------------
CAG33136.       288 ------------------------------------------------------------

KI537979    9716194 ????????????????????????????????????????????????????????????
               3540 ------------------------------------------------------------
CAG33136.       288 ------------------------------------------------------------

KI537979    9716254 ????????????????????????????????????????????????????????????
               3600 ------------------------------------------------------------
CAG33136.       288 ------------------------------------------------------------

KI537979    9716314 ????????????????????????????????????????????????????????????
               3660 ------------------------------------------------------------
CAG33136.       288 ------------------------------------------------------------

KI537979    9716374 ????????????????????????????????????????????????????????????
               3720 ------------------------------------------------------------
CAG33136.       288 ------------------------------------------------------------

KI537979    9716434 ????????????????????????????????????????????????????????????
               3780 -----------|||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       288 -----------?????????????????????????????????????????????????

KI537979    9716494 ????????????????????????????????????????????????????????????
               3840 ||||||||||||||||||||||||||||||||||||||----------------------
CAG33136.       337 ??????????????????????????????????????----------------------

KI537979    9716554 ????????????????????????????????????????????????????????????
               3900 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9716614 ????????????????????????????????????????????????????????????
               3960 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9716674 ????????????????????????????????????????????????????????????
               4020 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9716734 ????????????????????????????????????????????????????????????
               4080 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9716794 ????????????????????????????????????????????????????????????
               4140 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9716854 ????????????????????????????????????????????????????????????
               4200 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9716914 ????????????????????????????????????????????????????????????
               4260 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9716974 ????????????????????????????????????????????????????????????
               4320 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717034 ????????????????????????????????????????????????????????????
               4380 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717094 ????????????????????????????????????????????????????????????
               4440 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717154 ????????????????????????????????????????????????????????????
               4500 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717214 ????????????????????????????????????????????????????????????
               4560 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717274 ????????????????????????????????????????????????????????????
               4620 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717334 ????????????????????????????????????????????????????????????
               4680 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717394 ????????????????????????????????????????????????????????????
               4740 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717454 ????????????????????????????????????????????????????????????
               4800 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717514 ????????????????????????????????????????????????????????????
               4860 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717574 ????????????????????????????????????????????????????????????
               4920 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717634 ????????????????????????????????????????????????????????????
               4980 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717694 ????????????????????????????????????????????????????????????
               5040 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717754 ????????????????????????????????????????????????????????????
               5100 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717814 ????????????????????????????????????????????????????????????
               5160 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717874 ????????????????????????????????????????????????????????????
               5220 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717934 ????????????????????????????????????????????????????????????
               5280 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9717994 ????????????????????????????????????????????????????????????
               5340 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9718054 ????????????????????????????????????????????????????????????
               5400 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9718114 ????????????????????????????????????????????????????????????
               5460 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9718174 ????????????????????????????????????????????????????????????
               5520 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9718234 ????????????????????????????????????????????????????????????
               5580 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9718294 ????????????????????????????????????????????????????????????
               5640 ------------------------------------------------------------
CAG33136.       375 ------------------------------------------------------------

KI537979    9718354 ????????????????????????????????????????????????????????????
               5700 --------------------||||||||||||||||||||||||||||||||||||||||
CAG33136.       375 --------------------????????????????????????????????????????

KI537979    9718414 ????????????????????????????????????????????????????????????
               5760 ||||||||----------------------------------------------------
CAG33136.       415 ????????----------------------------------------------------

KI537979    9718474 ????????????????????????????????????????????????????????????
               5820 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9718534 ????????????????????????????????????????????????????????????
               5880 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9718594 ????????????????????????????????????????????????????????????
               5940 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9718654 ????????????????????????????????????????????????????????????
               6000 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9718714 ????????????????????????????????????????????????????????????
               6060 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9718774 ????????????????????????????????????????????????????????????
               6120 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9718834 ????????????????????????????????????????????????????????????
               6180 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9718894 ????????????????????????????????????????????????????????????
               6240 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9718954 ????????????????????????????????????????????????????????????
               6300 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719014 ????????????????????????????????????????????????????????????
               6360 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719074 ????????????????????????????????????????????????????????????
               6420 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719134 ????????????????????????????????????????????????????????????
               6480 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719194 ????????????????????????????????????????????????????????????
               6540 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719254 ????????????????????????????????????????????????????????????
               6600 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719314 ????????????????????????????????????????????????????????????
               6660 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719374 ????????????????????????????????????????????????????????????
               6720 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719434 ????????????????????????????????????????????????????????????
               6780 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719494 ????????????????????????????????????????????????????????????
               6840 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719554 ????????????????????????????????????????????????????????????
               6900 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719614 ????????????????????????????????????????????????????????????
               6960 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719674 ????????????????????????????????????????????????????????????
               7020 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719734 ????????????????????????????????????????????????????????????
               7080 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719794 ????????????????????????????????????????????????????????????
               7140 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719854 ????????????????????????????????????????????????????????????
               7200 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719914 ????????????????????????????????????????????????????????????
               7260 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9719974 ????????????????????????????????????????????????????????????
               7320 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720034 ????????????????????????????????????????????????????????????
               7380 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720094 ????????????????????????????????????????????????????????????
               7440 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720154 ????????????????????????????????????????????????????????????
               7500 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720214 ????????????????????????????????????????????????????????????
               7560 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720274 ????????????????????????????????????????????????????????????
               7620 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720334 ????????????????????????????????????????????????????????????
               7680 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720394 ????????????????????????????????????????????????????????????
               7740 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720454 ????????????????????????????????????????????????????????????
               7800 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720514 ????????????????????????????????????????????????????????????
               7860 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720574 ????????????????????????????????????????????????????????????
               7920 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720634 ????????????????????????????????????????????????????????????
               7980 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720694 ????????????????????????????????????????????????????????????
               8040 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720754 ????????????????????????????????????????????????????????????
               8100 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720814 ????????????????????????????????????????????????????????????
               8160 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720874 ????????????????????????????????????????????????????????????
               8220 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720934 ????????????????????????????????????????????????????????????
               8280 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9720994 ????????????????????????????????????????????????????????????
               8340 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721054 ????????????????????????????????????????????????????????????
               8400 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721114 ????????????????????????????????????????????????????????????
               8460 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721174 ????????????????????????????????????????????????????????????
               8520 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721234 ????????????????????????????????????????????????????????????
               8580 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721294 ????????????????????????????????????????????????????????????
               8640 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721354 ????????????????????????????????????????????????????????????
               8700 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721414 ????????????????????????????????????????????????????????????
               8760 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721474 ????????????????????????????????????????????????????????????
               8820 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721534 ????????????????????????????????????????????????????????????
               8880 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721594 ????????????????????????????????????????????????????????????
               8940 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721654 ????????????????????????????????????????????????????????????
               9000 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721714 ????????????????????????????????????????????????????????????
               9060 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721774 ????????????????????????????????????????????????????????????
               9120 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721834 ????????????????????????????????????????????????????????????
               9180 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721894 ????????????????????????????????????????????????????????????
               9240 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9721954 ????????????????????????????????????????????????????????????
               9300 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722014 ????????????????????????????????????????????????????????????
               9360 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722074 ????????????????????????????????????????????????????????????
               9420 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722134 ????????????????????????????????????????????????????????????
               9480 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722194 ????????????????????????????????????????????????????????????
               9540 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722254 ????????????????????????????????????????????????????????????
               9600 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722314 ????????????????????????????????????????????????????????????
               9660 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722374 ????????????????????????????????????????????????????????????
               9720 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722434 ????????????????????????????????????????????????????????????
               9780 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722494 ????????????????????????????????????????????????????????????
               9840 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722554 ????????????????????????????????????????????????????????????
               9900 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722614 ????????????????????????????????????????????????????????????
               9960 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722674 ????????????????????????????????????????????????????????????
              10020 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722734 ????????????????????????????????????????????????????????????
              10080 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722794 ????????????????????????????????????????????????????????????
              10140 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722854 ????????????????????????????????????????????????????????????
              10200 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722914 ????????????????????????????????????????????????????????????
              10260 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9722974 ????????????????????????????????????????????????????????????
              10320 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723034 ????????????????????????????????????????????????????????????
              10380 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723094 ????????????????????????????????????????????????????????????
              10440 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723154 ????????????????????????????????????????????????????????????
              10500 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723214 ????????????????????????????????????????????????????????????
              10560 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723274 ????????????????????????????????????????????????????????????
              10620 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723334 ????????????????????????????????????????????????????????????
              10680 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723394 ????????????????????????????????????????????????????????????
              10740 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723454 ????????????????????????????????????????????????????????????
              10800 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723514 ????????????????????????????????????????????????????????????
              10860 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723574 ????????????????????????????????????????????????????????????
              10920 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723634 ????????????????????????????????????????????????????????????
              10980 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723694 ????????????????????????????????????????????????????????????
              11040 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723754 ????????????????????????????????????????????????????????????
              11100 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723814 ????????????????????????????????????????????????????????????
              11160 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723874 ????????????????????????????????????????????????????????????
              11220 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723934 ????????????????????????????????????????????????????????????
              11280 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9723994 ????????????????????????????????????????????????????????????
              11340 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724054 ????????????????????????????????????????????????????????????
              11400 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724114 ????????????????????????????????????????????????????????????
              11460 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724174 ????????????????????????????????????????????????????????????
              11520 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724234 ????????????????????????????????????????????????????????????
              11580 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724294 ????????????????????????????????????????????????????????????
              11640 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724354 ????????????????????????????????????????????????????????????
              11700 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724414 ????????????????????????????????????????????????????????????
              11760 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724474 ????????????????????????????????????????????????????????????
              11820 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724534 ????????????????????????????????????????????????????????????
              11880 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724594 ????????????????????????????????????????????????????????????
              11940 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724654 ????????????????????????????????????????????????????????????
              12000 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724714 ????????????????????????????????????????????????????????????
              12060 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724774 ????????????????????????????????????????????????????????????
              12120 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724834 ????????????????????????????????????????????????????????????
              12180 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724894 ????????????????????????????????????????????????????????????
              12240 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9724954 ????????????????????????????????????????????????????????????
              12300 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725014 ????????????????????????????????????????????????????????????
              12360 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725074 ????????????????????????????????????????????????????????????
              12420 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725134 ????????????????????????????????????????????????????????????
              12480 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725194 ????????????????????????????????????????????????????????????
              12540 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725254 ????????????????????????????????????????????????????????????
              12600 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725314 ????????????????????????????????????????????????????????????
              12660 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725374 ????????????????????????????????????????????????????????????
              12720 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725434 ????????????????????????????????????????????????????????????
              12780 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725494 ????????????????????????????????????????????????????????????
              12840 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725554 ????????????????????????????????????????????????????????????
              12900 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725614 ????????????????????????????????????????????????????????????
              12960 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725674 ????????????????????????????????????????????????????????????
              13020 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725734 ????????????????????????????????????????????????????????????
              13080 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725794 ????????????????????????????????????????????????????????????
              13140 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725854 ????????????????????????????????????????????????????????????
              13200 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725914 ????????????????????????????????????????????????????????????
              13260 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9725974 ????????????????????????????????????????????????????????????
              13320 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726034 ????????????????????????????????????????????????????????????
              13380 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726094 ????????????????????????????????????????????????????????????
              13440 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726154 ????????????????????????????????????????????????????????????
              13500 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726214 ????????????????????????????????????????????????????????????
              13560 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726274 ????????????????????????????????????????????????????????????
              13620 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726334 ????????????????????????????????????????????????????????????
              13680 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726394 ????????????????????????????????????????????????????????????
              13740 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726454 ????????????????????????????????????????????????????????????
              13800 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726514 ????????????????????????????????????????????????????????????
              13860 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726574 ????????????????????????????????????????????????????????????
              13920 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726634 ????????????????????????????????????????????????????????????
              13980 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726694 ????????????????????????????????????????????????????????????
              14040 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726754 ????????????????????????????????????????????????????????????
              14100 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726814 ????????????????????????????????????????????????????????????
              14160 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726874 ????????????????????????????????????????????????????????????
              14220 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726934 ????????????????????????????????????????????????????????????
              14280 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9726994 ????????????????????????????????????????????????????????????
              14340 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727054 ????????????????????????????????????????????????????????????
              14400 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727114 ????????????????????????????????????????????????????????????
              14460 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727174 ????????????????????????????????????????????????????????????
              14520 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727234 ????????????????????????????????????????????????????????????
              14580 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727294 ????????????????????????????????????????????????????????????
              14640 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727354 ????????????????????????????????????????????????????????????
              14700 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727414 ????????????????????????????????????????????????????????????
              14760 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727474 ????????????????????????????????????????????????????????????
              14820 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727534 ????????????????????????????????????????????????????????????
              14880 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727594 ????????????????????????????????????????????????????????????
              14940 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727654 ????????????????????????????????????????????????????????????
              15000 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727714 ????????????????????????????????????????????????????????????
              15060 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727774 ????????????????????????????????????????????????????????????
              15120 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727834 ????????????????????????????????????????????????????????????
              15180 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727894 ????????????????????????????????????????????????????????????
              15240 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9727954 ????????????????????????????????????????????????????????????
              15300 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728014 ????????????????????????????????????????????????????????????
              15360 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728074 ????????????????????????????????????????????????????????????
              15420 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728134 ????????????????????????????????????????????????????????????
              15480 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728194 ????????????????????????????????????????????????????????????
              15540 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728254 ????????????????????????????????????????????????????????????
              15600 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728314 ????????????????????????????????????????????????????????????
              15660 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728374 ????????????????????????????????????????????????????????????
              15720 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728434 ????????????????????????????????????????????????????????????
              15780 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728494 ????????????????????????????????????????????????????????????
              15840 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728554 ????????????????????????????????????????????????????????????
              15900 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728614 ????????????????????????????????????????????????????????????
              15960 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728674 ????????????????????????????????????????????????????????????
              16020 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728734 ????????????????????????????????????????????????????????????
              16080 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728794 ????????????????????????????????????????????????????????????
              16140 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728854 ????????????????????????????????????????????????????????????
              16200 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728914 ????????????????????????????????????????????????????????????
              16260 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9728974 ????????????????????????????????????????????????????????????
              16320 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729034 ????????????????????????????????????????????????????????????
              16380 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729094 ????????????????????????????????????????????????????????????
              16440 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729154 ????????????????????????????????????????????????????????????
              16500 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729214 ????????????????????????????????????????????????????????????
              16560 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729274 ????????????????????????????????????????????????????????????
              16620 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729334 ????????????????????????????????????????????????????????????
              16680 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729394 ????????????????????????????????????????????????????????????
              16740 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729454 ????????????????????????????????????????????????????????????
              16800 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729514 ????????????????????????????????????????????????????????????
              16860 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729574 ????????????????????????????????????????????????????????????
              16920 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729634 ????????????????????????????????????????????????????????????
              16980 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729694 ????????????????????????????????????????????????????????????
              17040 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729754 ????????????????????????????????????????????????????????????
              17100 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729814 ????????????????????????????????????????????????????????????
              17160 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729874 ????????????????????????????????????????????????????????????
              17220 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729934 ????????????????????????????????????????????????????????????
              17280 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9729994 ????????????????????????????????????????????????????????????
              17340 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730054 ????????????????????????????????????????????????????????????
              17400 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730114 ????????????????????????????????????????????????????????????
              17460 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730174 ????????????????????????????????????????????????????????????
              17520 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730234 ????????????????????????????????????????????????????????????
              17580 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730294 ????????????????????????????????????????????????????????????
              17640 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730354 ????????????????????????????????????????????????????????????
              17700 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730414 ????????????????????????????????????????????????????????????
              17760 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730474 ????????????????????????????????????????????????????????????
              17820 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730534 ????????????????????????????????????????????????????????????
              17880 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730594 ????????????????????????????????????????????????????????????
              17940 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730654 ????????????????????????????????????????????????????????????
              18000 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730714 ????????????????????????????????????????????????????????????
              18060 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730774 ????????????????????????????????????????????????????????????
              18120 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730834 ????????????????????????????????????????????????????????????
              18180 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730894 ????????????????????????????????????????????????????????????
              18240 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9730954 ????????????????????????????????????????????????????????????
              18300 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731014 ????????????????????????????????????????????????????????????
              18360 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731074 ????????????????????????????????????????????????????????????
              18420 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731134 ????????????????????????????????????????????????????????????
              18480 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731194 ????????????????????????????????????????????????????????????
              18540 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731254 ????????????????????????????????????????????????????????????
              18600 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731314 ????????????????????????????????????????????????????????????
              18660 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731374 ????????????????????????????????????????????????????????????
              18720 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731434 ????????????????????????????????????????????????????????????
              18780 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731494 ????????????????????????????????????????????????????????????
              18840 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731554 ????????????????????????????????????????????????????????????
              18900 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731614 ????????????????????????????????????????????????????????????
              18960 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731674 ????????????????????????????????????????????????????????????
              19020 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731734 ????????????????????????????????????????????????????????????
              19080 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731794 ????????????????????????????????????????????????????????????
              19140 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731854 ????????????????????????????????????????????????????????????
              19200 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731914 ????????????????????????????????????????????????????????????
              19260 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9731974 ????????????????????????????????????????????????????????????
              19320 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732034 ????????????????????????????????????????????????????????????
              19380 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732094 ????????????????????????????????????????????????????????????
              19440 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732154 ????????????????????????????????????????????????????????????
              19500 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732214 ????????????????????????????????????????????????????????????
              19560 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732274 ????????????????????????????????????????????????????????????
              19620 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732334 ????????????????????????????????????????????????????????????
              19680 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732394 ????????????????????????????????????????????????????????????
              19740 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732454 ????????????????????????????????????????????????????????????
              19800 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732514 ????????????????????????????????????????????????????????????
              19860 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732574 ????????????????????????????????????????????????????????????
              19920 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732634 ????????????????????????????????????????????????????????????
              19980 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732694 ????????????????????????????????????????????????????????????
              20040 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732754 ????????????????????????????????????????????????????????????
              20100 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732814 ????????????????????????????????????????????????????????????
              20160 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732874 ????????????????????????????????????????????????????????????
              20220 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732934 ????????????????????????????????????????????????????????????
              20280 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9732994 ????????????????????????????????????????????????????????????
              20340 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733054 ????????????????????????????????????????????????????????????
              20400 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733114 ????????????????????????????????????????????????????????????
              20460 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733174 ????????????????????????????????????????????????????????????
              20520 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733234 ????????????????????????????????????????????????????????????
              20580 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733294 ????????????????????????????????????????????????????????????
              20640 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733354 ????????????????????????????????????????????????????????????
              20700 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733414 ????????????????????????????????????????????????????????????
              20760 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733474 ????????????????????????????????????????????????????????????
              20820 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733534 ????????????????????????????????????????????????????????????
              20880 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733594 ????????????????????????????????????????????????????????????
              20940 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733654 ????????????????????????????????????????????????????????????
              21000 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733714 ????????????????????????????????????????????????????????????
              21060 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733774 ????????????????????????????????????????????????????????????
              21120 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733834 ????????????????????????????????????????????????????????????
              21180 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733894 ????????????????????????????????????????????????????????????
              21240 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9733954 ????????????????????????????????????????????????????????????
              21300 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734014 ????????????????????????????????????????????????????????????
              21360 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734074 ????????????????????????????????????????????????????????????
              21420 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734134 ????????????????????????????????????????????????????????????
              21480 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734194 ????????????????????????????????????????????????????????????
              21540 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734254 ????????????????????????????????????????????????????????????
              21600 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734314 ????????????????????????????????????????????????????????????
              21660 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734374 ????????????????????????????????????????????????????????????
              21720 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734434 ????????????????????????????????????????????????????????????
              21780 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734494 ????????????????????????????????????????????????????????????
              21840 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734554 ????????????????????????????????????????????????????????????
              21900 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734614 ????????????????????????????????????????????????????????????
              21960 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734674 ????????????????????????????????????????????????????????????
              22020 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734734 ????????????????????????????????????????????????????????????
              22080 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734794 ????????????????????????????????????????????????????????????
              22140 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734854 ????????????????????????????????????????????????????????????
              22200 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734914 ????????????????????????????????????????????????????????????
              22260 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9734974 ????????????????????????????????????????????????????????????
              22320 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735034 ????????????????????????????????????????????????????????????
              22380 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735094 ????????????????????????????????????????????????????????????
              22440 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735154 ????????????????????????????????????????????????????????????
              22500 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735214 ????????????????????????????????????????????????????????????
              22560 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735274 ????????????????????????????????????????????????????????????
              22620 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735334 ????????????????????????????????????????????????????????????
              22680 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735394 ????????????????????????????????????????????????????????????
              22740 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735454 ????????????????????????????????????????????????????????????
              22800 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735514 ????????????????????????????????????????????????????????????
              22860 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735574 ????????????????????????????????????????????????????????????
              22920 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735634 ????????????????????????????????????????????????????????????
              22980 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735694 ????????????????????????????????????????????????????????????
              23040 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735754 ????????????????????????????????????????????????????????????
              23100 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735814 ????????????????????????????????????????????????????????????
              23160 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735874 ????????????????????????????????????????????????????????????
              23220 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735934 ????????????????????????????????????????????????????????????
              23280 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9735994 ????????????????????????????????????????????????????????????
              23340 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736054 ????????????????????????????????????????????????????????????
              23400 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736114 ????????????????????????????????????????????????????????????
              23460 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736174 ????????????????????????????????????????????????????????????
              23520 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736234 ????????????????????????????????????????????????????????????
              23580 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736294 ????????????????????????????????????????????????????????????
              23640 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736354 ????????????????????????????????????????????????????????????
              23700 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736414 ????????????????????????????????????????????????????????????
              23760 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736474 ????????????????????????????????????????????????????????????
              23820 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736534 ????????????????????????????????????????????????????????????
              23880 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736594 ????????????????????????????????????????????????????????????
              23940 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736654 ????????????????????????????????????????????????????????????
              24000 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736714 ????????????????????????????????????????????????????????????
              24060 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736774 ????????????????????????????????????????????????????????????
              24120 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736834 ????????????????????????????????????????????????????????????
              24180 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736894 ????????????????????????????????????????????????????????????
              24240 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9736954 ????????????????????????????????????????????????????????????
              24300 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737014 ????????????????????????????????????????????????????????????
              24360 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737074 ????????????????????????????????????????????????????????????
              24420 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737134 ????????????????????????????????????????????????????????????
              24480 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737194 ????????????????????????????????????????????????????????????
              24540 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737254 ????????????????????????????????????????????????????????????
              24600 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737314 ????????????????????????????????????????????????????????????
              24660 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737374 ????????????????????????????????????????????????????????????
              24720 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737434 ????????????????????????????????????????????????????????????
              24780 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737494 ????????????????????????????????????????????????????????????
              24840 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737554 ????????????????????????????????????????????????????????????
              24900 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737614 ????????????????????????????????????????????????????????????
              24960 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737674 ????????????????????????????????????????????????????????????
              25020 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737734 ????????????????????????????????????????????????????????????
              25080 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737794 ????????????????????????????????????????????????????????????
              25140 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737854 ????????????????????????????????????????????????????????????
              25200 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737914 ????????????????????????????????????????????????????????????
              25260 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9737974 ????????????????????????????????????????????????????????????
              25320 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738034 ????????????????????????????????????????????????????????????
              25380 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738094 ????????????????????????????????????????????????????????????
              25440 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738154 ????????????????????????????????????????????????????????????
              25500 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738214 ????????????????????????????????????????????????????????????
              25560 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738274 ????????????????????????????????????????????????????????????
              25620 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738334 ????????????????????????????????????????????????????????????
              25680 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738394 ????????????????????????????????????????????????????????????
              25740 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738454 ????????????????????????????????????????????????????????????
              25800 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738514 ????????????????????????????????????????????????????????????
              25860 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738574 ????????????????????????????????????????????????????????????
              25920 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738634 ????????????????????????????????????????????????????????????
              25980 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738694 ????????????????????????????????????????????????????????????
              26040 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738754 ????????????????????????????????????????????????????????????
              26100 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738814 ????????????????????????????????????????????????????????????
              26160 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738874 ????????????????????????????????????????????????????????????
              26220 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738934 ????????????????????????????????????????????????????????????
              26280 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9738994 ????????????????????????????????????????????????????????????
              26340 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9739054 ????????????????????????????????????????????????????????????
              26400 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9739114 ????????????????????????????????????????????????????????????
              26460 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9739174 ????????????????????????????????????????????????????????????
              26520 ------------------------------------------------------------
CAG33136.       423 ------------------------------------------------------------

KI537979    9739234 ????????????????????????????????????????????????????????????
              26580 ------------------------------||||||||||||||||||||||||||||||
CAG33136.       423 ------------------------------??????????????????????????????

KI537979    9739294 ????????????????????????????????????????????????????????????
              26640 |||||||||||||||||||||||||||||||||||||||||||||---------------
CAG33136.       453 ?????????????????????????????????????????????---------------

KI537979    9739354 ????????????????????????????????????????????????????????????
              26700 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739414 ????????????????????????????????????????????????????????????
              26760 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739474 ????????????????????????????????????????????????????????????
              26820 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739534 ????????????????????????????????????????????????????????????
              26880 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739594 ????????????????????????????????????????????????????????????
              26940 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739654 ????????????????????????????????????????????????????????????
              27000 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739714 ????????????????????????????????????????????????????????????
              27060 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739774 ????????????????????????????????????????????????????????????
              27120 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739834 ????????????????????????????????????????????????????????????
              27180 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739894 ????????????????????????????????????????????????????????????
              27240 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9739954 ????????????????????????????????????????????????????????????
              27300 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740014 ????????????????????????????????????????????????????????????
              27360 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740074 ????????????????????????????????????????????????????????????
              27420 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740134 ????????????????????????????????????????????????????????????
              27480 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740194 ????????????????????????????????????????????????????????????
              27540 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740254 ????????????????????????????????????????????????????????????
              27600 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740314 ????????????????????????????????????????????????????????????
              27660 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740374 ????????????????????????????????????????????????????????????
              27720 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740434 ????????????????????????????????????????????????????????????
              27780 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740494 ????????????????????????????????????????????????????????????
              27840 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740554 ????????????????????????????????????????????????????????????
              27900 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740614 ????????????????????????????????????????????????????????????
              27960 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740674 ????????????????????????????????????????????????????????????
              28020 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740734 ????????????????????????????????????????????????????????????
              28080 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740794 ????????????????????????????????????????????????????????????
              28140 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740854 ????????????????????????????????????????????????????????????
              28200 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740914 ????????????????????????????????????????????????????????????
              28260 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9740974 ????????????????????????????????????????????????????????????
              28320 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741034 ????????????????????????????????????????????????????????????
              28380 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741094 ????????????????????????????????????????????????????????????
              28440 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741154 ????????????????????????????????????????????????????????????
              28500 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741214 ????????????????????????????????????????????????????????????
              28560 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741274 ????????????????????????????????????????????????????????????
              28620 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741334 ????????????????????????????????????????????????????????????
              28680 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741394 ????????????????????????????????????????????????????????????
              28740 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741454 ????????????????????????????????????????????????????????????
              28800 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741514 ????????????????????????????????????????????????????????????
              28860 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741574 ????????????????????????????????????????????????????????????
              28920 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741634 ????????????????????????????????????????????????????????????
              28980 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741694 ????????????????????????????????????????????????????????????
              29040 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741754 ????????????????????????????????????????????????????????????
              29100 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741814 ????????????????????????????????????????????????????????????
              29160 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741874 ????????????????????????????????????????????????????????????
              29220 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741934 ????????????????????????????????????????????????????????????
              29280 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9741994 ????????????????????????????????????????????????????????????
              29340 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742054 ????????????????????????????????????????????????????????????
              29400 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742114 ????????????????????????????????????????????????????????????
              29460 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742174 ????????????????????????????????????????????????????????????
              29520 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742234 ????????????????????????????????????????????????????????????
              29580 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742294 ????????????????????????????????????????????????????????????
              29640 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742354 ????????????????????????????????????????????????????????????
              29700 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742414 ????????????????????????????????????????????????????????????
              29760 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742474 ????????????????????????????????????????????????????????????
              29820 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742534 ????????????????????????????????????????????????????????????
              29880 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742594 ????????????????????????????????????????????????????????????
              29940 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742654 ????????????????????????????????????????????????????????????
              30000 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742714 ????????????????????????????????????????????????????????????
              30060 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742774 ????????????????????????????????????????????????????????????
              30120 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742834 ????????????????????????????????????????????????????????????
              30180 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742894 ????????????????????????????????????????????????????????????
              30240 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9742954 ????????????????????????????????????????????????????????????
              30300 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743014 ????????????????????????????????????????????????????????????
              30360 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743074 ????????????????????????????????????????????????????????????
              30420 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743134 ????????????????????????????????????????????????????????????
              30480 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743194 ????????????????????????????????????????????????????????????
              30540 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743254 ????????????????????????????????????????????????????????????
              30600 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743314 ????????????????????????????????????????????????????????????
              30660 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743374 ????????????????????????????????????????????????????????????
              30720 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743434 ????????????????????????????????????????????????????????????
              30780 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743494 ????????????????????????????????????????????????????????????
              30840 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743554 ????????????????????????????????????????????????????????????
              30900 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743614 ????????????????????????????????????????????????????????????
              30960 ------------------------------------------------------------
CAG33136.       498 ------------------------------------------------------------

KI537979    9743674 ????????????????????????????????????????????????????????????
              31020 --------------------------------||||||||||||||||||||||||||||
CAG33136.       498 --------------------------------????????????????????????????

KI537979    9743734 ????????????????????????????????????????????????????????????
              31080 ||||||||||||||||||||||||||||||||----------------------------
CAG33136.       526 ????????????????????????????????----------------------------

KI537979    9743794 ????????????????????????????????????????????????????????????
              31140 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9743854 ????????????????????????????????????????????????????????????
              31200 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9743914 ????????????????????????????????????????????????????????????
              31260 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9743974 ????????????????????????????????????????????????????????????
              31320 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9744034 ????????????????????????????????????????????????????????????
              31380 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9744094 ????????????????????????????????????????????????????????????
              31440 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9744154 ????????????????????????????????????????????????????????????
              31500 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9744214 ????????????????????????????????????????????????????????????
              31560 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9744274 ????????????????????????????????????????????????????????????
              31620 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9744334 ????????????????????????????????????????????????????????????
              31680 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9744394 ????????????????????????????????????????????????????????????
              31740 ------------------------------------------------------------
CAG33136.       558 ------------------------------------------------------------

KI537979    9744454 ????????????????????????????????????????????????????????????
              31800 ---------------------------------------------------------|||
CAG33136.       558 ---------------------------------------------------------???

KI537979    9744514 ????????????????????????????????????????????????????????????
              31860 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       561 ????????????????????????????????????????????????????????????

KI537979    9744574 ?????????????????? 9744592
              31920 ||||||||||||||||||   31938
CAG33136.       621 ??????????????????     639
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
KI537979	9712654	9744592	CAG33136.1	972	+	9712654	9744592	0	7	132,156,87,48,75,60,81,	0,3287,3791,5720,26610,31052,31857,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 792)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertLess(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "KI538594")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[2103463, 2103523, 2103522, 2104149],
                          [      0,      60,      60,     687]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
KI538594    2103463 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.         0 ????????????????????????????????????????????????????????????

KI538594    2103523 
                 60 
CAG33136.        60 

KI538594    2103522 ????????????????????????????????????????????????????????????
                 60 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.        60 ????????????????????????????????????????????????????????????

KI538594    2103582 ????????????????????????????????????????????????????????????
                120 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       120 ????????????????????????????????????????????????????????????

KI538594    2103642 ????????????????????????????????????????????????????????????
                180 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       180 ????????????????????????????????????????????????????????????

KI538594    2103702 ????????????????????????????????????????????????????????????
                240 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       240 ????????????????????????????????????????????????????????????

KI538594    2103762 ????????????????????????????????????????????????????????????
                300 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       300 ????????????????????????????????????????????????????????????

KI538594    2103822 ????????????????????????????????????????????????????????????
                360 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       360 ????????????????????????????????????????????????????????????

KI538594    2103882 ????????????????????????????????????????????????????????????
                420 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       420 ????????????????????????????????????????????????????????????

KI538594    2103942 ????????????????????????????????????????????????????????????
                480 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       480 ????????????????????????????????????????????????????????????

KI538594    2104002 ????????????????????????????????????????????????????????????
                540 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       540 ????????????????????????????????????????????????????????????

KI538594    2104062 ????????????????????????????????????????????????????????????
                600 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       600 ????????????????????????????????????????????????????????????

KI538594    2104122 ??????????????????????????? 2104149
                660 |||||||||||||||||||||||||||     687
CAG33136.       660 ???????????????????????????     687
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
KI538594	2103463	2104149	CAG33136.1	792	+	2103463	2104149	0	2	60,627,	0,59,
""",
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 902)
        self.assertLess(alignment.coordinates[0, 0], alignment.coordinates[0, -1])
        self.assertGreater(alignment.coordinates[1, 0], alignment.coordinates[1, -1])
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "KI537194")
        self.assertEqual(alignment.query.id, "CAG33136.1")
        self.assertTrue(
            np.array_equal(
                alignment.coordinates,
                # fmt: off
                np.array([[20872390, 20872471, 20872472, 20873021],
                          [     630,      549,      549,        0]]),
                # fmt: on
            )
        )
        self.assertEqual(
            str(alignment),
            """\
KI537194   20872390 ????????????????????????????????????????????????????????????
                  0 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       630 ????????????????????????????????????????????????????????????

KI537194   20872450 ????????????????????????????????????????????????????????????
                 60 |||||||||||||||||||||-||||||||||||||||||||||||||||||||||||||
CAG33136.       570 ?????????????????????-??????????????????????????????????????

KI537194   20872510 ????????????????????????????????????????????????????????????
                120 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       511 ????????????????????????????????????????????????????????????

KI537194   20872570 ????????????????????????????????????????????????????????????
                180 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       451 ????????????????????????????????????????????????????????????

KI537194   20872630 ????????????????????????????????????????????????????????????
                240 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       391 ????????????????????????????????????????????????????????????

KI537194   20872690 ????????????????????????????????????????????????????????????
                300 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       331 ????????????????????????????????????????????????????????????

KI537194   20872750 ????????????????????????????????????????????????????????????
                360 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       271 ????????????????????????????????????????????????????????????

KI537194   20872810 ????????????????????????????????????????????????????????????
                420 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       211 ????????????????????????????????????????????????????????????

KI537194   20872870 ????????????????????????????????????????????????????????????
                480 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.       151 ????????????????????????????????????????????????????????????

KI537194   20872930 ????????????????????????????????????????????????????????????
                540 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CAG33136.        91 ????????????????????????????????????????????????????????????

KI537194   20872990 ??????????????????????????????? 20873021
                600 |||||||||||||||||||||||||||||||      631
CAG33136.        31 ???????????????????????????????        0
""",
        )
        self.assertEqual(
            format(alignment, "bed"),
            """\
KI537194	20872390	20873021	CAG33136.1	902	-	20872390	20873021	0	2	81,549,	0,82,
""",
        )
        self.assertRaises(StopIteration, next, alignments)

    def test_writing_psl_35_002(self):
        """Test writing the alignments in psl_35_002.bed."""
        path = "Blat/psl_35_002.bed"
        with open(path) as stream:
            original_data = stream.read()
        alignments = Align.parse(path, "bed")
        stream = StringIO()
        n = Align.write(alignments, stream, "bed")
        self.assertEqual(n, 3)
        stream.seek(0)
        written_data = stream.read()
        stream.close()
        self.assertEqual(original_data, written_data)


class TestAlign_bed12(unittest.TestCase):
    def test_reading(self):
        """Test parsing alignments in file formats BED3 through BED12."""
        for bedN in (3, 4, 5, 6, 7, 8, 9, 12):
            filename = "bed%d.bed" % bedN
            path = os.path.join("Blat", filename)
            alignments = Align.parse(path, "bed")
            alignment = next(alignments)
            if bedN >= 5:
                self.assertEqual(alignment.score, 960, msg=filename)
            self.assertEqual(alignment.shape, (2, 4000), msg=filename)
            self.assertLess(
                alignment.coordinates[0, 0], alignment.coordinates[0, -1], msg=filename
            )
            self.assertLess(
                alignment.coordinates[1, 0], alignment.coordinates[1, -1], msg=filename
            )
            self.assertEqual(len(alignment), 2, msg=filename)
            self.assertIs(alignment.sequences[0], alignment.target, msg=filename)
            self.assertIs(alignment.sequences[1], alignment.query, msg=filename)
            self.assertEqual(alignment.target.id, "chr22", msg=filename)
            if bedN >= 4:
                self.assertEqual(alignment.query.id, "mRNA1", msg=filename)
            else:
                self.assertIsNone(alignment.query.id, msg=filename)
            if bedN == 12:
                self.assertTrue(
                    np.array_equal(
                        alignment.coordinates,
                        # fmt: off
                        np.array([[1000, 1567, 4512, 5000],
                                  [   0,  567,  567, 1055]]),
                        # fmt: on
                    ),
                    msg=filename,
                )
            else:
                self.assertTrue(
                    np.array_equal(
                        alignment.coordinates,
                        np.array([[1000, 5000], [0, 4000]]),
                    ),
                    msg=filename,
                )
            if bedN >= 7:
                self.assertEqual(alignment.thickStart, 1200, msg=filename)
            if bedN >= 8:
                self.assertEqual(alignment.thickEnd, 4900, msg=filename)
            if bedN >= 9:
                self.assertEqual(alignment.itemRgb, "255,0,0", msg=filename)
            words = [
                "chr22",
                "1000",
                "5000",
                "mRNA1",
                "960",
                "+",
                "1200",
                "4900",
                "255,0,0",
                "2",
                "567,488,",
                "0,3512,",
            ]
            self.assertEqual(
                alignment.format("bed", bedN), "\t".join(words[:bedN]) + "\n"
            )
            alignment = next(alignments)
            if bedN >= 5:
                self.assertEqual(alignment.score, 900, msg=filename)
            self.assertEqual(alignment.shape, (2, 4000), msg=filename)
            self.assertLess(
                alignment.coordinates[0, 0], alignment.coordinates[0, -1], msg=filename
            )
            if bedN >= 6:
                self.assertGreater(
                    alignment.coordinates[1, 0],
                    alignment.coordinates[1, -1],
                    msg=filename,
                )
            else:
                self.assertLess(
                    alignment.coordinates[1, 0],
                    alignment.coordinates[1, -1],
                    msg=filename,
                )
            self.assertEqual(len(alignment), 2, msg=filename)
            self.assertIs(alignment.sequences[0], alignment.target, msg=filename)
            self.assertIs(alignment.sequences[1], alignment.query, msg=filename)
            self.assertEqual(alignment.target.id, "chr22", msg=filename)
            if bedN >= 4:
                self.assertEqual(alignment.query.id, "mRNA2", msg=filename)
            else:
                self.assertIsNone(alignment.query.id, msg=filename)
            if bedN == 12:
                self.assertTrue(
                    np.array_equal(
                        alignment.coordinates,
                        # fmt: off
                        np.array([[2000, 2433, 5601, 6000],
                                  [ 832,  399,  399,    0]])
                        # fmt: on
                    ),
                    msg=filename,
                )
            elif bedN >= 6:
                self.assertTrue(
                    np.array_equal(
                        alignment.coordinates,
                        np.array([[2000, 6000], [4000, 0]]),
                    ),
                    msg=filename,
                )
            else:
                self.assertTrue(
                    np.array_equal(
                        alignment.coordinates,
                        np.array([[2000, 6000], [0, 4000]]),
                    ),
                    msg=filename,
                )
            if bedN >= 7:
                self.assertEqual(alignment.thickStart, 2300, msg=filename)
            if bedN >= 8:
                self.assertEqual(alignment.thickEnd, 5960, msg=filename)
            if bedN >= 9:
                self.assertEqual(alignment.itemRgb, "0,255,0", msg=filename)
            words = [
                "chr22",
                "2000",
                "6000",
                "mRNA2",
                "900",
                "-",
                "2300",
                "5960",
                "0,255,0",
                "2",
                "433,399,",
                "0,3601,",
            ]
            self.assertEqual(
                alignment.format("bed", bedN), "\t".join(words[:bedN]) + "\n"
            )
            with self.assertRaises(StopIteration) as cm:
                next(alignments)
                self.fail(f"More than two alignments reported in {filename}")

    def test_writing(self):
        """Test writing the alignments in bed12.bed as BED3 through BED12."""
        for bedN in (3, 4, 5, 6, 7, 8, 9, 12):
            filename = "bed%d.bed" % bedN
            path = os.path.join("Blat", filename)
            with open(path) as stream:
                original_data = stream.read()
            alignments = Align.parse(path, "bed")
            stream = StringIO()
            n = Align.write(alignments, stream, "bed", bedN=bedN)
            self.assertEqual(n, 2, msg=filename)
            stream.seek(0)
            written_data = stream.read()
            stream.close()
            self.assertEqual(original_data, written_data, msg=filename)


class TestAlign_strand(unittest.TestCase):
    def test_format(self):
        """Test alignment with the target on the opposite strand."""
        sequences = ["AACAGCAGCGTGTCG", "CAGCTAGCGAA"]
        coordinates = np.array(
            [[0, 2, 2, 3, 4, 6, 6, 9, 10, 12, 15], [11, 11, 9, 8, 8, 6, 5, 2, 2, 0, 0]]
        )
        alignment = Alignment(sequences, coordinates)
        alignment.score = 8
        line = """\
target	2	12	query	8	-	2	12	0	4	1,2,3,2,	0,2,4,8,
"""
        self.assertEqual(
            str(alignment),
            """\
target            0 AA--CAGC-AGCGTGTCG 15
                  0 ----|-||-|||-||--- 18
query            11 --TTC-GCTAGC-TG---  0
""",
        )
        self.assertEqual(format(alignment, "bed"), line)
        alignment.coordinates = alignment.coordinates[:, ::-1]
        self.assertEqual(
            str(alignment),
            """\
target           15 CGACACGCT-GCTG--TT  0
                  0 ---||-|||-||-|---- 18
query             0 ---CA-GCTAGC-GAA-- 11
""",
        )
        self.assertEqual(format(alignment, "bed"), line)
        alignment.coordinates = alignment.coordinates[:, ::-1]
        line = """\
target	3	13	query	0	-	3	13	0	4	2,3,2,1,	0,3,6,9,
"""
        alignment = alignment.reverse_complement()
        self.assertEqual(
            str(alignment),
            """\
target            0 CGACACGCT-GCTG--TT 15
                  0 ---||-|||-||-|---- 18
query            11 ---CA-GCTAGC-GAA--  0
""",
        )
        self.assertEqual(format(alignment, "bed"), line)
        alignment.coordinates = alignment.coordinates[:, ::-1]
        self.assertEqual(
            str(alignment),
            """\
target           15 AA--CAGC-AGCGTGTCG  0
                  0 ----|-||-|||-||--- 18
query             0 --TTC-GCTAGC-TG--- 11
""",
        )
        self.assertEqual(format(alignment, "bed"), line)


class TestAlign_searching(unittest.TestCase):
    path = "Blat/bigbedtest.bed"

    def check_alignments(self, alignments):
        alignment = next(alignments)
        self.assertEqual(alignment.score, 1)
        self.assertEqual(alignment.shape, (2, 90))
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "name1")
        self.assertTrue(
            np.array_equal(alignment.coordinates, np.array([[10, 100], [0, 90]]))
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 2)
        self.assertEqual(alignment.shape, (2, 10))
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "name2")
        self.assertTrue(
            np.array_equal(alignment.coordinates, np.array([[29, 39], [10, 0]]))
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 3)
        self.assertEqual(alignment.shape, (2, 100))
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr1")
        self.assertEqual(alignment.query.id, "name3")
        self.assertTrue(
            np.array_equal(alignment.coordinates, np.array([[200, 300], [0, 100]]))
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 6)
        self.assertEqual(alignment.shape, (2, 0))
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "name4")
        self.assertTrue(
            np.array_equal(alignment.coordinates, np.array([[50, 50], [0, 0]]))
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 4)
        self.assertEqual(alignment.shape, (2, 10))
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "name5")
        self.assertTrue(
            np.array_equal(alignment.coordinates, np.array([[100, 110], [0, 10]]))
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 5)
        self.assertEqual(alignment.shape, (2, 10))
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "name6")
        self.assertTrue(
            np.array_equal(alignment.coordinates, np.array([[200, 210], [0, 10]]))
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 6)
        self.assertEqual(alignment.shape, (2, 0))
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr2")
        self.assertEqual(alignment.query.id, "name7")
        self.assertTrue(
            np.array_equal(alignment.coordinates, np.array([[220, 220], [0, 0]]))
        )
        alignment = next(alignments)
        self.assertEqual(alignment.score, 7)
        self.assertEqual(alignment.shape, (2, 0))
        self.assertEqual(len(alignment), 2)
        self.assertIs(alignment.sequences[0], alignment.target)
        self.assertIs(alignment.sequences[1], alignment.query)
        self.assertEqual(alignment.target.id, "chr3")
        self.assertEqual(alignment.query.id, "name8")
        self.assertTrue(
            np.array_equal(alignment.coordinates, np.array([[0, 0], [0, 0]]))
        )

    def test_reading(self):
        """Test reading bigbedtest.bed."""
        alignments = Align.parse(self.path, "bed")
        self.check_alignments(alignments)

    def test_writing(self):
        """Test writing bigbedtest.bed."""
        alignments = Align.parse(self.path, "bed")
        with tempfile.TemporaryFile("w+t") as output:
            Align.write(alignments, output, "bed", bedN=6)
            output.seek(0)
            alignments = Align.parse(output, "bed")
            self.check_alignments(alignments)


if __name__ == "__main__":
    runner = unittest.TextTestRunner(verbosity=2)
    unittest.main(testRunner=runner)
