from collections import deque
from itertools import islice, chain

def iwindow(iterable, window_size=3, pad = False, padding_value = None):
    """iwindow(iterable, window_size=3, pad = False, padding_value = None) --> iwindow object
    """

    if pad:
        real_iter = chain(iter(iterable), [padding_value] * (window_size - 1))
        w = deque([padding_value] * window_size)
    else:
        real_iter = iter(iterable)
        w = deque(islice(real_iter, window_size - 1))
        w.appendleft(None)
        if len(w) < window_size:
            return
        
    for item in real_iter:
        w.rotate(-1)
        w[-1] = item
        yield list(w)

    
