diff options
Diffstat (limited to 'python/analytics/utils.py')
| -rw-r--r-- | python/analytics/utils.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/python/analytics/utils.py b/python/analytics/utils.py index 07975af8..bd390255 100644 --- a/python/analytics/utils.py +++ b/python/analytics/utils.py @@ -3,6 +3,7 @@ import pandas as pd from scipy.special import h_roots from dateutil.relativedelta import relativedelta import datetime +from pyisda.date import pydate_to_TDate def GHquad(n): """Gauss-Hermite quadrature weights""" @@ -27,7 +28,7 @@ def next_twentieth(d): r += relativedelta(months=3 - mod) return r -def roll_date(d, tenor): +def roll_date(d, tenor, nd_array=False): """ roll date d to the next CDS maturity""" cutoff = pd.Timestamp('2015-12-20') if not isinstance(d, pd.Timestamp): @@ -37,7 +38,11 @@ def roll_date(d, tenor): d_rolled = d + relativedelta(years=tenor, days=1) return next_twentieth(d_rolled) elif hasattr(tenor, '__iter__'): - d_rolled = [next_twentieth(d + relativedelta(years=t, days=1)) for t in tenor] + v = [next_twentieth(d + relativedelta(years=t, days=1)) for t in tenor] + if nd_array: + return np.array([pydate_to_TDate(d) for d in v]) + else: + return v else: raise TypeError('tenor is not a number nor an iterable') else: #semi-annual rolling starting 2015-12-20 @@ -57,7 +62,11 @@ def roll_date(d, tenor): if isinstance(tenor, (int, float)): return d_rolled else: - return [d_rolled + relativedelta(years=t-1) for t in tenor] + v = [d_rolled + relativedelta(years=t-1) for t in tenor] + if nd_array: + return np.array([pydate_to_TDate(d) for d in v]) + else: + return v def build_table(rows, format_strings, row_format): r = [] |
