diff options
Diffstat (limited to 'python/analytics/utils.py')
| -rw-r--r-- | python/analytics/utils.py | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/python/analytics/utils.py b/python/analytics/utils.py index 51061e79..fab94397 100644 --- a/python/analytics/utils.py +++ b/python/analytics/utils.py @@ -1,8 +1,9 @@ +import datetime import numpy as np import pandas as pd from scipy.special import h_roots from dateutil.relativedelta import relativedelta, FR -import datetime +from functools import wraps from pyisda.date import pydate_to_TDate from pandas.api.types import CategoricalDtype from quantlib.time.date import nth_weekday, Wednesday, Date @@ -99,3 +100,17 @@ def build_table(rows, format_strings, row_format): row = [f.format(r) if f else r for r, f in zip(row, format_string)] r.append(row_format.format(*row)) return r + + +def memoize(f): + @wraps(f) + def cached_f(*args, **kwargs): + obj = args[0] + key = (f.__name__, hash(args)) + if key in obj._cache: + return obj._cache[key] + else: + v = f(*args, **kwargs) + obj._cache[key] = v + return v + return cached_f |
