[Biopython-dev] [Bug 2348] New: Slicing the Seq object (returns a string when use a stride)
bugzilla-daemon at portal.open-bio.org
bugzilla-daemon at portal.open-bio.org
Thu Aug 16 21:15:11 UTC 2007
http://bugzilla.open-bio.org/show_bug.cgi?id=2348
Summary: Slicing the Seq object (returns a string when use a
stride)
Product: Biopython
Version: 1.43
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: Main Distribution
AssignedTo: biopython-dev at biopython.org
ReportedBy: biopython-bugzilla at maubp.freeserve.co.uk
I think this is a bug introduced to changes in how python deals with splicing.
Currently we have the following in Bio/Seq/Seq.py:
class Seq:
...
def __getitem__(self, i): return self.data[i] # Seq API requirement
def __getslice__(self, i, j): # Seq API requirement
i = max(i, 0); j = max(j, 0)
return Seq(self.data[i:j], self.alphabet)
Quoting: http://docs.python.org/ref/sequence-methods.html
> __getslice__
> Deprecated since release 2.0. Support slice objects as parameters
> to the > __getitem__() method.
Here is an example of how the current code can fail on any Python 2.x version.
These all work:
from Bio.Seq import Seq
x = Seq('ACTATCGTAGTACGGCT')
assert isinstance(x[0], str)
assert isinstance(x[1], str)
assert isinstance(x[2], str)
assert isinstance(x[-1], str)
assert isinstance(x[1:5], Seq)
assert isinstance(x[0:-1], Seq)
assert isinstance(x[:], Seq)
But, the following variants using a stride will give a string because they are
handled by our old fashioned __getitem__ method:
x[1:2:3]
x[slice(1, 2)]
x[slice(1, 2, 3)]
x[slice(None)]
x[slice(None, None)]
x[slice(None, None, None)]
x[::-1]
x[slice(None, None, -1)]
The last two return a reversed string (rather than a reversed Seq)
I propose we remove the Seq object's __getslice__ method, and replace the
__getitem__ method with a slice aware version. I'll prepare a patch...
--
Configure bugmail: http://bugzilla.open-bio.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
More information about the Biopython-dev
mailing list