1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
From: Michael R. Crusoe <crusoe@debian.org>
Subject: fix off by one error on 32 bit systems
Forwarded: https://github.com/bxlab/bx-python/pull/54
--- python-bx.orig/lib/bx/interval_index_file.py
+++ python-bx/lib/bx/interval_index_file.py
@@ -124,7 +124,7 @@
BIN_OFFSETS_MAX.insert(0, (BIN_OFFSETS_MAX[0] << BIN_NEXT_SHIFT))
# The maximum size for the top bin is actually bigger than the signed integers
# we use to store positions in the file, so we'll change it to prevent confusion
-BIN_OFFSETS_MAX[0] = sys.maxsize
+BIN_OFFSETS_MAX[0] = 2**63
# Constants for the minimum and maximum size of the overall interval
MIN = 0
@@ -137,12 +137,14 @@
"""
Return the subset of offsets needed to contain intervals over (0,max_size)
"""
- for i, max in enumerate(reversed(BIN_OFFSETS_MAX)):
- if max_size < max:
+ offset_index = None
+ for i, off_max in enumerate(reversed(BIN_OFFSETS_MAX)):
+ if max_size <= off_max:
+ offset_index = i
break
- else:
+ if offset_index is None:
raise Exception("%d is larger than the maximum possible size (%d)" % (max_size, BIN_OFFSETS_MAX[0]))
- return BIN_OFFSETS[(len(BIN_OFFSETS) - i - 1) :]
+ return BIN_OFFSETS[(len(BIN_OFFSETS) - offset_index - 1):]
def bin_for_range(start, end, offsets=None):
|