def test_left_and_right_soft_clip(self): assert parse_cigar(100, '+', '1S1M1S') == (99, 100, 100, 101) assert parse_cigar(100, '-', '1S1M1S') == (101, 100, 100, 99) assert parse_cigar(100, '+', '1S101M1S') == (99, 100, 200, 201) assert parse_cigar(100, '-', '1S101M1S') == (201, 200, 100, 99) assert parse_cigar(100, '+', '10S1M10S') == (90, 100, 100, 110) assert parse_cigar(100, '-', '10S1M10S') == (110, 100, 100, 90) assert parse_cigar(100, '+', '10S101M10S') == (90, 100, 200, 210) assert parse_cigar(100, '-', '10S101M10S') == (210, 200, 100, 90)
def test_left_soft_clip(self): assert parse_cigar(100, '+', '1S1M') == (99, 100, 100, 100) assert parse_cigar(100, '-', '1S1M') == (100, 100, 100, 99) assert parse_cigar(100, '+', '1S101M') == (99, 100, 200, 200) assert parse_cigar(100, '-', '1S101M') == (200, 200, 100, 99) assert parse_cigar(100, '+', '10S1M') == (90, 100, 100, 100) assert parse_cigar(100, '-', '10S1M') == (100, 100, 100, 90) assert parse_cigar(100, '+', '10S101M') == (90, 100, 200, 200) assert parse_cigar(100, '-', '10S101M') == (200, 200, 100, 90)
def test_right_soft_clip(self): assert parse_cigar(100, '+', '1M1S') == (100, 100, 100, 101) assert parse_cigar(100, '-', '1M1S') == (101, 100, 100, 100) assert parse_cigar(100, '+', '101M1S') == (100, 100, 200, 201) assert parse_cigar(100, '-', '101M1S') == (201, 200, 100, 100) assert parse_cigar(100, '+', '1M10S') == (100, 100, 100, 110) assert parse_cigar(100, '-', '1M10S') == (110, 100, 100, 100) assert parse_cigar(100, '+', '101M10S') == (100, 100, 200, 210) assert parse_cigar(100, '-', '101M10S') == (210, 200, 100, 100)
def test_sam_format_spec(self): # See 'Sequence Alignment/Map Format Specification', 2 Sep 2016. # Specifically, these are taken from the SAM file format specification, # section 1.1 ("An example"). # +r001/1 assert parse_cigar(7, '+', '8M2I4M1D3M') == (7, 7, 22, 22) # +r002 assert parse_cigar(9, '+', '3S6M1P1I4M') == (6, 9, 18, 18) # +r003 assert parse_cigar(9, '+', '5S6M') == (4, 9, 14, 14) # +r004 assert parse_cigar(16, '+', '6M14N5M') == (16, 16, 40, 40) # -r003, hard clipping, we don't support it... with pytest.raises( HardClippingNotSupportedException, message= 'Dupligänger does not support hard-clipping. cigar: 6H5M, left pos: 29, strand: -' ): parse_cigar(29, '-', '6H5M') == (16, 16, 40, 40) # -r001/2 assert parse_cigar(37, '-', '9M') == (45, 45, 37, 37)
def test_simple(self): assert parse_cigar(100, '+', '1M') == (100, 100, 100, 100) assert parse_cigar(100, '-', '1M') == (100, 100, 100, 100) assert parse_cigar(100, '+', '101M') == (100, 100, 200, 200) assert parse_cigar(100, '-', '101M') == (200, 200, 100, 100)