From 98148416eb49a9b327175c1a3103ef4f0f977a0d Mon Sep 17 00:00:00 2001 From: Jason Gross Date: Fri, 11 Aug 2017 16:38:49 -0400 Subject: Add memoize.py to zinc compiler folder --- etc/compile-by-zinc/memoize.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 etc/compile-by-zinc/memoize.py (limited to 'etc/compile-by-zinc') diff --git a/etc/compile-by-zinc/memoize.py b/etc/compile-by-zinc/memoize.py new file mode 100644 index 000000000..d5908390d --- /dev/null +++ b/etc/compile-by-zinc/memoize.py @@ -0,0 +1,17 @@ + +# from http://code.activestate.com/recipes/578231-probably-the-fastest-memoization-decorator-in-the-/ + +__all__ = ["memoize"] + +def memoize(f): + """ Memoization decorator for a function taking one or more arguments. """ + class memodict(dict): + def __getitem__(self, *key, **kwkey): + return dict.__getitem__(self, (tuple(key), tuple((k, kwkey[k]) for k in sorted(kwkey.keys())))) + + def __missing__(self, key): + args, kwargs = key + self[key] = ret = f(*args, **dict(kwargs)) + return ret + + return memodict().__getitem__ -- cgit v1.2.3