Skip to content

Commit

Permalink
fix bug single nucleotide TwoBit (biopython#3539)
Browse files Browse the repository at this point in the history
  • Loading branch information
mdehoon authored and JoaoRodrigues committed Jun 3, 2021
1 parent c770cdd commit 4defb75
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
11 changes: 9 additions & 2 deletions Bio/SeqIO/TwoBitIO.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,13 +104,17 @@ def __init__(self, stream, offset, length):
super().__init__()

def __getitem__(self, key):
length = self.length
if isinstance(key, slice):
length = self.length
start, end, step = key.indices(length)
size = len(range(start, end, step))
if size == 0:
return b""
else:
if key < 0:
key += length
if key < 0:
raise IndexError("index out of range")
start = key
end = key + 1
step = 1
Expand All @@ -129,7 +133,10 @@ def __getitem__(self, key):
sequence = _twoBitIO.convert(
data, start, end, step, self.nBlocks, self.maskBlocks
)
return sequence
if isinstance(key, slice):
return sequence
else: # single nucleotide
return ord(sequence)

def __len__(self):
return self.length
Expand Down
10 changes: 10 additions & 0 deletions Tests/test_SeqIO_TwoBitIO.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,16 @@ def setUp(self):
def tearDown(self):
self.stream.close()

def test_getitem(self):
self.assertEqual(self.seq1_twobit, self.seq1_fasta)
self.assertEqual(self.seq2_twobit, self.seq2_fasta)
self.assertEqual(self.seq1_twobit[:], self.seq1_fasta[:])
self.assertEqual(self.seq2_twobit[:], self.seq2_fasta[:])
self.assertEqual(self.seq1_twobit[30], self.seq1_fasta[30])
self.assertEqual(self.seq2_twobit[30], self.seq2_fasta[30])
self.assertEqual(self.seq1_twobit[-30], self.seq1_fasta[-30])
self.assertEqual(self.seq2_twobit[-30], self.seq2_fasta[-30])

def test_bytes(self):
b = bytes(self.seq1_twobit)
self.assertIsInstance(b, bytes)
Expand Down

0 comments on commit 4defb75

Please sign in to comment.