diff --git a/segpy/caching.py b/segpy/caching.py deleted file mode 100644 index ae95d6f..0000000 --- a/segpy/caching.py +++ /dev/null @@ -1,48 +0,0 @@ -def lfu_cache(maxsize=100): - '''Least-frequently-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/Least_Frequently_Used - - ''' - def decorating_function(user_function): - cache = {} # mapping of args to results - use_count = Counter() # times each key has been accessed - kwd_mark = object() # separate positional and keyword args - - @functools.wraps(user_function) - def wrapper(*args, **kwds): - key = args - if kwds: - key += (kwd_mark,) + tuple(sorted(kwds.items())) - use_count[key] += 1 - - # get cache entry or compute if not found - try: - result = cache[key] - wrapper.hits += 1 - except KeyError: - result = user_function(*args, **kwds) - cache[key] = result - wrapper.misses += 1 - - # purge least frequently used cache entry - if len(cache) > maxsize: - for key, _ in nsmallest(maxsize // 10, - use_count.iteritems(), - key=itemgetter(1)): - del cache[key], use_count[key] - - return result - - def clear(): - cache.clear() - use_count.clear() - wrapper.hits = wrapper.misses = 0 - - wrapper.hits = wrapper.misses = 0 - wrapper.clear = clear - return wrapper - return decorating_function