diff options
| -rw-r--r-- | python/analytics/index.py | 21 | ||||
| -rw-r--r-- | python/analytics/option.py | 3 |
2 files changed, 17 insertions, 7 deletions
diff --git a/python/analytics/index.py b/python/analytics/index.py index 5fa1ed48..265e470d 100644 --- a/python/analytics/index.py +++ b/python/analytics/index.py @@ -17,8 +17,9 @@ from db import dbengine from sqlalchemy import exc from pyisda.curve import SpreadCurve from .utils import previous_twentieth, build_table -from yieldcurve import YC, ql_to_jp, roll_yc, rate_helpers from bbg_helpers import BBG_IP, retrieve_data, init_bbg_session +from yieldcurve import YC, ql_to_jp, roll_yc, rate_helpers +from weakref import WeakSet engine = dbengine('serenitasdb') @@ -90,12 +91,19 @@ class Index(object): self._accrued = None self._dl_pv, self._pv, self._clean_pv = None, None, None self._original_clean_pv, self._original_trade_date = None, None - self._observed = [] - + self._observed = WeakSet() def __hash__(self): return hash(tuple(getattr(self, k) for k in self.__slots__[:-1])) + def __getstate__(self): + return {k: getattr(self, k) for k in self.__slots__[:-1]} + + def __setstate__(self, state): + for name, value in state.items(): + setattr(self, name, value) + self._observed = WeakSet() + @property def start_date(self): return self._start_date @@ -347,7 +355,7 @@ class Index(object): obj._update() def observe(self, obj): - self._observed.append(obj) + self._observed.add(obj) def mark(self): index_type, series, tenor = _key_from_index(self) @@ -485,7 +493,7 @@ class ForwardIndex(object): __slots__ = ['index', 'forward_date', 'exercise_date_settle', 'df', '_forward_annuity', '_forward_pv', '_forward_spread', '__weakref__'] - def __init__(self, index, forward_date): + def __init__(self, index, forward_date, observer=True): self.index = index if isinstance(forward_date, pd.Timestamp): self.forward_date = forward_date.date() @@ -494,7 +502,8 @@ class ForwardIndex(object): self.exercise_date_settle = pd.Timestamp(forward_date) + 3* BDay() self.df = index._yc.discount_factor(self.exercise_date_settle) self._update() - self.index.observe(self) + if observer: + self.index.observe(self) @classmethod def from_name(cls, index_type, series, tenor, forward_date, diff --git a/python/analytics/option.py b/python/analytics/option.py index 9d7cab0e..a0c00167 100644 --- a/python/analytics/option.py +++ b/python/analytics/option.py @@ -74,7 +74,7 @@ class BlackSwaption(ForwardIndex): def __init__(self, index, exercise_date, strike, option_type="payer", direction="Long"): - ForwardIndex.__init__(self, index, exercise_date) + ForwardIndex.__init__(self, index, exercise_date, False) self._forward_yc = roll_yc(index._yc, exercise_date) self._T = None self.strike = strike @@ -83,6 +83,7 @@ class BlackSwaption(ForwardIndex): self.sigma = None self._original_pv = None self.direction = direction + index.observe(self) @classmethod def from_tradeid(cls, trade_id, index=None): |
