from collections import deque

def localize(sequence, width, padding):
  """
  Groups values and pads them to a fixed length
  """
      
  assert 0 <= width
  padding = [ padding ] * width
      
  padded = padding + sequence + padding
  d = deque( iterable = padded[ : 2 * width ], maxlen = 2 * width + 1 )
  
  for v in padded[ 2 * width : ]:
    d.append( v )
    yield d


def split(sequence, consecutivity):
  """
  Breaks up sequences where elements are not consecutive according to a
  property
  """
              
  if sequence:
    it = enumerate( sequence )
    
    ( left, prev ) = it.next()
    
    for ( index, elem ) in it:
      if consecutivity( left = prev, right = elem ):
        prev = elem
        continue
      
      yield sequence[ left : index ]
      left = index
      prev = elem
      
    yield sequence[ left : ]
