aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/utils.py')
-rw-r--r--python/analytics/utils.py15
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 = []