aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/analytics/tranche_basket.py2
-rw-r--r--python/analytics/utils.py32
2 files changed, 16 insertions, 18 deletions
diff --git a/python/analytics/tranche_basket.py b/python/analytics/tranche_basket.py
index 1db327ee..1d58219c 100644
--- a/python/analytics/tranche_basket.py
+++ b/python/analytics/tranche_basket.py
@@ -98,7 +98,7 @@ class DualCorrTranche():
self.cs = credit_schedule(d, None, 1., self._index.yc, self._index.maturities[0])
self._accrued = cds_accrued(d, self.tranche_running * 1e-4)
- @memoize(lambda args: (hash(args[0]._index), *args[1:]))
+ @memoize(hasher=lambda args: (hash(args[0]._index), *args[1:]))
def tranche_legs(self, K, rho):
if K == 0.:
return 0., 0.
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