parameters: (a, x, lo=0, hi=None)
return_statement: return lo
docstring: 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.
docstring_summary: Return the index where to insert item x in list a, assuming a is sorted.
docstring_tokens: Return the index where to insert item x in list a assuming a is sorted .
function: def bisect_left(a, x, lo=0, hi=None):
      """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.
      """
  
      if lo < 0:
          raise ValueError('lo must be non-negative')
      if hi is None:
          hi = len(a)
      while lo < hi:
          mid = (lo+hi)//2
          if a[mid] < x: lo = mid+1
          else: hi = mid
      return lo
function_tokens: def bisect_left ( a , x , lo = 0 , hi = None ) : if lo < 0 : raise ValueError ( 'lo must be non-negative' ) if hi is None : hi = len ( a ) while lo < hi : mid = ( lo + hi ) // 2 if a [ mid ] < x : lo = mid + 1 else : hi = mid return lo