human
Complete this python program:
def lru_cache(maxsize=100):
assistant
#Here is the Python program you requested.

    """Least-recently-used cache decorator.
    Arguments to the cached function must be hashable.
    Cache performance statistics stored in f.hits and f.misses.
    Clear the cache with f.clear().
    http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used
    """
    maxqueue = (maxsize * 10)
    def decorating_function(user_function, len=len, iter=iter, tuple=tuple, sorted=sorted, KeyError=KeyError):
        cache = {}
        queue = collections.deque()
        refcount = Counter()
        sentinel = object()
        kwd_mark = object()
        (queue_append, queue_popleft) = (queue.append, queue.popleft)
        (queue_appendleft, queue_pop) = (queue.appendleft, queue.pop)
        @functools.wraps(user_function)
        def wrapper(*args, **kwds):
            key = args
            if kwds:
                key += ((kwd_mark,) + tuple(sorted(kwds.items())))
            queue_append(key)
            refcount[key] += 1
            try:
                result = cache[key]
                wrapper.hits += 1
            except KeyError:
                result = user_function(*args, **kwds)
                cache[key] = result
                wrapper.misses += 1
                if (len(cache) > maxsize):
                    key = queue_popleft()
                    refcount[key] -= 1
                    while refcount[key]:
                        key = queue_popleft()
                        refcount[key] -= 1
                    del cache[key], refcount[key]
            if (len(queue) > maxqueue):
                refcount.clear()
                queue_appendleft(sentinel)
                for key in ifilterfalse(refcount.__contains__, iter(queue_pop, sentinel)):
                    queue_appendleft(key)
                    refcount[key] = 1
            return result
        def clear():
            cache.clear()
            queue.clear()
            refcount.clear()
            wrapper.hits = wrapper.misses = 0
        wrapper.hits = wrapper.misses = 0
        wrapper.clear = clear
        return wrapper
    return decorating_function