code: def popwhile(cond, queue, *, side):
      
      if side not in ('left', 'right'):
          raise ValueError("`side` must be one of 'left' or 'right'")
  
      out = deque()
  
      if side == 'left':
          popnext = queue.popleft
          pushnext = out.append
          nextidx = 0
      else:
          popnext = queue.pop
          pushnext = out.appendleft
          nextidx = -1
  
      while queue:
          if not cond(queue[nextidx]):
              break
          pushnext(popnext())
      return out
docs: Pop elements off a queue while `cond(nextelem)` is True.
  
      Parameters
      ----------
      cond : predicate
      queue : deque
      side : {'left', 'right'}
  
      Returns
      -------
      popped : deque
  
      Examples
      --------
      >>> from collections import deque
      >>> d = deque([1, 2, 3, 2, 1])
      >>> popwhile(lambda x: x < 3, d, side='left')
      deque([1, 2])
      >>> d
      deque([3, 2, 1])
      >>> popwhile(lambda x: x < 3, d, side='right')
      deque([2, 1])
      >>> d
      deque([3])