From d0373658e1a95fe3e9d9ddb8e90e53c13f1833ae Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Fri, 16 Jun 2017 15:05:28 -0400 Subject: small speedup --- pyisda/cdsone.pyx | 7 ++++--- pyisda/credit_index.pyx | 9 ++++++--- pyisda/date.pxd | 11 ++++++----- 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 -- cgit v1.2.3-70-g09d2