summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@gmail.com>2017-06-16 15:05:28 -0400
committerGuillaume Horel <guillaume.horel@gmail.com>2017-06-16 15:05:28 -0400
commitd0373658e1a95fe3e9d9ddb8e90e53c13f1833ae (patch)
tree1961c7cc2f5dd209743480fe28609aec4677671c
parenta49c6f237762bfb686f68bb58fa69b40f8faf79f (diff)
downloadpyisda-d0373658e1a95fe3e9d9ddb8e90e53c13f1833ae.tar.gz
small speedup
-rw-r--r--pyisda/cdsone.pyx7
-rw-r--r--pyisda/credit_index.pyx9
-rw-r--r--pyisda/date.pxd11
3 files changed, 16 insertions, 11 deletions
diff --git a/pyisda/cdsone.pyx b/pyisda/cdsone.pyx
index 074c4ad..af811d2 100644
--- a/pyisda/cdsone.pyx
+++ b/pyisda/cdsone.pyx
@@ -1,5 +1,5 @@
from curve cimport YieldCurve
-from date cimport JpmcdsStringToDateInterval, pydate_to_TDate, dcc
+from date cimport JpmcdsMakeDateInterval, pydate_to_TDate, dcc
cdef int SUCCESS = 0
@@ -54,7 +54,8 @@ def upfront_charge(date, value_date, benchmark_start_date, stepin_date,
if JpmcdsStringToStubMethod(b"f/s", &stub) != SUCCESS:
raise ValueError("can't convert stub")
- if JpmcdsStringToDateInterval(b"3M", routine, &ivl) != SUCCESS:
+
+ if JpmcdsMakeDateInterval(3, "M", &ivl) != SUCCESS:
raise ValueError("can't convert to date interval")
if JpmcdsCdsoneUpfrontCharge(today, value_date_c, benchmark_start_date_c, stepin_date_c,
start_date_c, end_date_c, coupon_rate, pay_accrued_on_default,
@@ -116,7 +117,7 @@ def spread_from_upfront(date, value_date, benchmark_start_date, stepin_date,
if JpmcdsStringToStubMethod(b"f/s", &stub) != SUCCESS:
raise ValueError("can't convert stub")
- if JpmcdsStringToDateInterval(b"3M", routine, &ivl) != SUCCESS:
+ if JpmcdsMakeDateInterval(3, "M", &ivl) != SUCCESS:
raise ValueError("can't convert to date interval")
if JpmcdsCdsoneSpread(today, value_date_c, benchmark_start_date_c, stepin_date_c,
start_date_c, end_date_c, coupon_rate, pay_accrued_on_default,
diff --git a/pyisda/credit_index.pyx b/pyisda/credit_index.pyx
index 609d733..f0be482 100644
--- a/pyisda/credit_index.pyx
+++ b/pyisda/credit_index.pyx
@@ -8,10 +8,10 @@ from legs cimport (JpmcdsCdsContingentLegMake, JpmcdsCdsFeeLegMake,
JpmcdsContingentLegPV, JpmcdsFeeLegPV, FeeLegAI, JpmcdsFeeLegFree)
from curve cimport (SpreadCurve, JpmcdsCopyCurve, tweak_curve, YieldCurve,
JpmcdsFreeTCurve)
-from date cimport pydate_to_TDate, TDate_to_pydate, ACT_365F
+from date cimport (pydate_to_TDate, TDate_to_pydate, ACT_365F, JpmcdsDtFwdAny,
+ TDateInterval, JpmcdsMakeDateInterval)
from cdsone cimport JpmcdsStringToStubMethod, TStubMethod
from date cimport ACT_365F
-from dateutil.relativedelta import relativedelta
cimport numpy as np
np.import_array()
import pandas as pd
@@ -240,6 +240,7 @@ cdef class CreditIndex(CurveList):
TDate maturity_c = pydate_to_TDate(maturity)
vector[double] h
pair[TContingentLeg,TFeeLeg] legs
+ TDateInterval ivl
if old_pv != old_pv:
legs = get_legs(maturity_c,
@@ -252,7 +253,9 @@ cdef class CreditIndex(CurveList):
recovery_rate, fixed_rate, self.weights,
0., h, self.T, 0)
- maturity_c = pydate_to_TDate(maturity - relativedelta(years=1))
+ maturity_c = pydate_to_TDate(maturity)
+ JpmcdsMakeDateInterval(-1, "Y", &ivl)
+ JpmcdsDtFwdAny(maturity_c, &ivl, &maturity_c)
legs = get_legs(maturity_c,
self.start_date,
self.contingent_legs,
diff --git a/pyisda/date.pxd b/pyisda/date.pxd
index 7c4fbda..dda35d0 100644
--- a/pyisda/date.pxd
+++ b/pyisda/date.pxd
@@ -18,21 +18,22 @@ cdef extern from "isda/mdydate.h":
ctypedef long TDate
-cdef extern from "isda/convert.h":
+cdef extern from "isda/convert.h" nogil:
int JpmcdsStringToDateInterval(char* input, char* label, TDateInterval* interval)
int JpmcdsMakeDateInterval(int num_periods, char period_type, TDateInterval* interval)
char* JpmcdsFormatDate(TDate date)
-cdef extern from "isda/date_sup.h":
+cdef extern from "isda/date_sup.h" nogil:
int JpmcdsDateIntervalToFreq(TDateInterval* interval, double* freq)
-cdef extern from "isda/dateconv.h":
+cdef extern from "isda/dateconv.h" nogil:
TDate JpmcdsDate(long year, long month, long day)
int JpmcdsDateToMDY(TDate date, TMonthDayYear *mdyDate)
-cdef extern from "isda/ldate.h":
+cdef extern from "isda/ldate.h" nogil:
int JpmcdsDateFwdThenAdjust(TDate date, TDateInterval* interval, long badDayMethod,
- char* holidayFile, TDate *advAdjustedDate) nogil
+ char* holidayFile, TDate *advAdjustedDate)
+ int JpmcdsDtFwdAny(TDate date, TDateInterval* interval, TDate* sumDate)
cdef enum DCC:
ACT_365 = 1L