Skip to content

Commit 1ff87c1

Browse files
authored
Merge pull request #66 from chaimleib/dev
faster interval overlaps #56
2 parents 2d1b463 + ce4b52a commit 1ff87c1

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Version 3.0.0
44
- Dropped support for Python 2.6, 3.2, and 3.3
55
- Add support for Python 3.5 and 3.6
6+
- Faster `Interval` overlap checking (@tuxzz, #56)
67
- Updated README:
78
- new restructuring methods from 2.1.0
89
- example of `from_tuples()` added

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ Version 3.0.0
372372

373373
- Dropped support for Python 2.6, 3.2, and 3.3
374374
- Add support for Python 3.5 and 3.6
375+
- Faster ``Interval`` overlap checking (@tuxzz, #56)
375376
- Updated README:
376377

377378
- new restructuring methods from 2.1.0

intervaltree/interval.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ def overlaps(self, begin, end=None):
3939
:rtype: bool
4040
"""
4141
if end is not None:
42-
return (
43-
(begin <= self.begin < end) or
44-
(begin < self.end <= end) or
45-
(self.begin <= begin < self.end) or
46-
(self.begin < end <= self.end)
47-
)
42+
# An overlap means that some C exists that is inside both ranges:
43+
# begin <= C < end
44+
# and
45+
# self.begin <= C < self.end
46+
# See https://stackoverflow.com/questions/3269434/whats-the-most-efficient-way-to-test-two-integer-ranges-for-overlap/3269471#3269471
47+
return begin < self.end and end > self.begin
4848
try:
4949
return self.overlaps(begin.begin, begin.end)
5050
except:

0 commit comments

Comments
 (0)