aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/utils.py')
-rw-r--r--python/analytics/utils.py17
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