--- /usr/lib/python2.5/bisect.py 2008-05-15 14:34:08.000000000 -0300 +++ /tmp/b.py 2008-05-23 18:50:34.206263595 -0300 @@ -1,6 +1,6 @@ """Bisection algorithms.""" -def insort_right(a, x, lo=0, hi=None): +def insort_right(a, x, lo=0, hi=None, cmp=cmp): """Insert item x in list a, and keep it sorted assuming a is sorted. If x is already in a, insert it to the right of the rightmost x. @@ -13,13 +13,13 @@ def insort_right(a, x, lo=0, hi=None): hi = len(a) while lo < hi: mid = (lo+hi)//2 - if x < a[mid]: hi = mid + if cmp(x, a[mid]) < 0: hi = mid else: lo = mid+1 a.insert(lo, x) insort = insort_right # backward compatibility -def bisect_right(a, x, lo=0, hi=None): +def bisect_right(a, x, lo=0, hi=None, cmp=cmp): """Return the index where to insert item x in list a, assuming a is sorted. The return value i is such that all e in a[:i] have e <= x, and all e in @@ -34,13 +34,13 @@ def bisect_right(a, x, lo=0, hi=None): hi = len(a) while lo < hi: mid = (lo+hi)//2 - if x < a[mid]: hi = mid + if cmp(x, a[mid]) < 0: hi = mid else: lo = mid+1 return lo bisect = bisect_right # backward compatibility -def insort_left(a, x, lo=0, hi=None): +def insort_left(a, x, lo=0, hi=None, cmp=cmp): """Insert item x in list a, and keep it sorted assuming a is sorted. If x is already in a, insert it to the left of the leftmost x. @@ -53,12 +53,12 @@ def insort_left(a, x, lo=0, hi=None): hi = len(a) while lo < hi: mid = (lo+hi)//2 - if a[mid] < x: lo = mid+1 + if cmp(a[mid], x) < 0: lo = mid+1 else: hi = mid a.insert(lo, x) -def bisect_left(a, x, lo=0, hi=None): +def bisect_left(a, x, lo=0, hi=None, cmp=cmp): """Return the index where to insert item x in list a, assuming a is sorted. The return value i is such that all e in a[:i] have e < x, and all e in @@ -73,12 +73,7 @@ def bisect_left(a, x, lo=0, hi=None): hi = len(a) while lo < hi: mid = (lo+hi)//2 - if a[mid] < x: lo = mid+1 + if cmp(a[mid], x) < 0: lo = mid+1 else: hi = mid return lo -# Overwrite above definitions with a fast C implementation -try: - from _bisect import bisect_right, bisect_left, insort_left, insort_right, insort, bisect -except ImportError: - pass