3 \# � @sZdZd dd�ZeZd dd�ZeZddd�Zdd d �Zy dd lTWnek rTYnXdS)zBisection algorithms.�NcCsd|dkrtd��|dkr t|�}x2||krR||d}|||krH|}q"|d}q"W|j||�dS)z�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. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. rzlo must be non-negativeN��)� ValueError�len�insert)�a�x�lo�hi�mid�r �/usr/lib64/python3.6/bisect.py� insort_rights     rcCsX|dkrtd��|dkr t|�}x2||krR||d}|||krH|}q"|d}q"W|S)a�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 a[i:] have e > x. So if x already appears in the list, a.insert(x) will insert just after the rightmost x already there. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. rzlo must be non-negativeNrr)rr)rrr r r r r r � bisect_rights     rcCsd|dkrtd��|dkr t|�}x2||krR||d}|||krL|d}q"|}q"W|j||�dS)z�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. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. rzlo must be non-negativeNrr)rrr)rrr r r r r r � insort_left/s    rcCsX|dkrtd��|dkr t|�}x2||krR||d}|||krL|d}q"|}q"W|S)a�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 a[i:] have e >= x. So if x already appears in the list, a.insert(x) will insert just before the leftmost x already there. Optional args lo (default 0) and hi (default len(a)) bound the slice of a to be searched. rzlo must be non-negativeNrr)rr)rrr r r r r r � bisect_leftCs    r)�*)rN)rN)rN)rN) �__doc__rZinsortrZbisectrrZ_bisect� ImportErrorr r r r �s