diff options
Diffstat (limited to 'python/analytics/utils.py')
| -rw-r--r-- | python/analytics/utils.py | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/python/analytics/utils.py b/python/analytics/utils.py index 0100f5bc..fd7779e1 100644 --- a/python/analytics/utils.py +++ b/python/analytics/utils.py @@ -3,7 +3,7 @@ import numpy as np import pandas as pd from scipy.special import h_roots from dateutil.relativedelta import relativedelta, FR -from functools import wraps +from functools import partial, wraps from pyisda.date import pydate_to_TDate from pandas.api.types import CategoricalDtype from quantlib.time.date import nth_weekday, Wednesday, Date @@ -102,19 +102,17 @@ def build_table(rows, format_strings, row_format): return r -def memoize(hasher=lambda args: (hash(args),)): - - def memoize_(f): - @wraps(f) - def cached_f(*args, **kwargs): - self = args[0] - key = (f.__name__, *hasher(args)) - if key in self._cache: - return self._cache[key] - else: - v = f(*args, **kwargs) - self._cache[key] = v - return v - return cached_f - - return memoize_ +def memoize(f=None, *, hasher=lambda args: (hash(args),)): + if f is None: + return partial(memoize, hasher=hasher) + @wraps(f) + def cached_f(*args, **kwargs): + self = args[0] + key = (f.__name__, *hasher(args)) + if key in self._cache: + return self._cache[key] + else: + v = f(*args, **kwargs) + self._cache[key] = v + return v + return cached_f |
