diff options
Diffstat (limited to 'python/analytics/credit_default_swap.py')
| -rw-r--r-- | python/analytics/credit_default_swap.py | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/python/analytics/credit_default_swap.py b/python/analytics/credit_default_swap.py index dfba07ca..d489f453 100644 --- a/python/analytics/credit_default_swap.py +++ b/python/analytics/credit_default_swap.py @@ -6,6 +6,7 @@ import pandas as pd import warnings from dateutil.relativedelta import relativedelta +from itertools import chain from pandas.tseries.offsets import BDay from pyisda.curve import SpreadCurve from pyisda.date import previous_twentieth @@ -21,13 +22,13 @@ class CreditDefaultSwap(): __slots__ = ('_observed', 'fixed_rate', 'notional', '_start_date', '_end_date', 'recovery', '_version', '_fee_leg', '_default_leg', '_value_date', '_yc', '_sc', '_risky_annuity', - '_spread', '_price', 'name', 'issue_date', '_quote_is_price', + '_spread', '_price', 'name', 'issue_date', '_direction', 'currency', '_step_in_date', '_accrued', '_cash_settle_date', '_dl_pv', '_pv', '_clean_pv', '_original_clean_pv', '_trade_date', '_factor') def __init__(self, start_date, end_date, recovery, fixed_rate, - notional=10e6, quote_is_price=False, issue_date=None): + notional=10e6, issue_date=None): """ start_date : :class:`datetime.date` index start_date (Could be issue date, or last imm date) @@ -52,7 +53,6 @@ class CreditDefaultSwap(): self._spread, self._price = None, None self.name = None self.issue_date = issue_date - self._quote_is_price = quote_is_price self._direction = -1. if notional > 0 else 1. self._factor = 1 for attr in ['currency', '_step_in_date', '_cash_settle_date', @@ -62,10 +62,17 @@ class CreditDefaultSwap(): self._observed = WeakSet() def __hash__(self): - return hash(tuple(getattr(self, k) for k in self.__slots__[1:])) + return hash(tuple(getattr(self, k) for k in self._getslots())) + + def _getslots(self): + classes = reversed(self.__class__.__mro__) + next(classes) # skip object + slots = chain.from_iterable(cls.__slots__ for cls in classes) + next(slots) # skip _observed + yield from slots def __getstate__(self): - return {k: getattr(self, k) for k in self.__slots__[1:]} + return {k: getattr(self, k) for k in self._getslots()} def __setstate__(self, state): for name, value in state.items(): |
