diff options
Diffstat (limited to 'python/analytics')
| -rw-r--r-- | python/analytics/credit_default_swap.py | 17 | ||||
| -rw-r--r-- | python/analytics/index.py | 8 |
2 files changed, 16 insertions, 9 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(): diff --git a/python/analytics/index.py b/python/analytics/index.py index 0541c727..3130398a 100644 --- a/python/analytics/index.py +++ b/python/analytics/index.py @@ -38,7 +38,7 @@ def g(index, spread, exercise_date, pv=None): class CreditIndex(CreditDefaultSwap): - __slots__ = ('_indic', '_version', 'index_type', 'series', 'tenor') + __slots__ = ('_indic', '_version', 'index_type', 'series', 'tenor', '_quote_is_price') def __init__(self, index_type=None, series=None, tenor=None, value_date=datetime.date.today(), notional=10_000_000, @@ -151,7 +151,7 @@ class CreditIndex(CreditDefaultSwap): self._version = version else: self._factor = 1. - self._version = None + self._version = 1 @property def factor(self): @@ -180,7 +180,7 @@ class ForwardIndex(): @classmethod def from_name(cls, index_type, series, tenor, forward_date, value_date=datetime.date.today(), notional=10e6): - index = Index.from_name(index_type, series, tenor, value_date, notional) + index = CreditIndex(index_type, series, tenor, value_date, notional) return cls(index, forward_date) @property @@ -204,7 +204,7 @@ class ForwardIndex(): self.index.ref = val def __hash__(self): - return hash(tuple(getattr(self, k) for k in ForwardIndex.__slots__ if k != '__weakref__')) + return hash(tuple(getattr(self, k) for k in ForwardIndex.__slots__[:-1])) def _update(self, *args): if self.index.value_date > self.forward_date: |
