File: fix_BIN_OFFSETS_MAX

package info (click to toggle)
python-bx 0.13.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 5,000 kB
  • sloc: python: 17,136; ansic: 2,326; makefile: 24; sh: 8
file content (33 lines) | stat: -rw-r--r-- 1,327 bytes parent folder | download
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):