aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics')
-rw-r--r--python/analytics/basket_index.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/python/analytics/basket_index.py b/python/analytics/basket_index.py
index 6517b632..5fbdd60c 100644
--- a/python/analytics/basket_index.py
+++ b/python/analytics/basket_index.py
@@ -34,6 +34,15 @@ class BasketIndex(CreditIndex):
value_date: pd.Timestamp
tweaks: List[float]
+ __cache = {}
+
+ def __new__(cls, index_type, series, tenors, *, value_date):
+ k = (index_type, series, tuple(tenors))
+ if k in cls.__cache:
+ return cls.__cache[k]
+ else:
+ return super().__new__(cls)
+
def __init__(
self,
index_type: str,
@@ -42,6 +51,8 @@ class BasketIndex(CreditIndex):
*,
value_date: pd.Timestamp = pd.Timestamp.today().normalize() - BDay(),
):
+ k = (index_type, series, tuple(tenors))
+ self.__cache[k] = self
self.index_type = index_type
self.series = series
if index_type in ("HY", "HY.BB"):
@@ -160,6 +171,8 @@ class BasketIndex(CreditIndex):
@value_date.setter
def value_date(self, d: pd.Timestamp):
+ if d == self.value_date:
+ return
conn = serenitas_pool.getconn()
self.curves = get_singlenames_curves_prebuilt(
conn, self.index_type, self.series, d