summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@gmail.com>2023-01-25 23:32:42 -0500
committerGuillaume Horel <guillaume.horel@gmail.com>2023-01-25 23:32:42 -0500
commit91f3637b0ca5c543fe288dfd9c1d7312dcafeda9 (patch)
tree281f5ee5f751d12ea3b3269043b1633b38ffc6a3
parent4c9228b51dbf06e2f932368400f6a34fea324f31 (diff)
downloadpyisda-91f3637b0ca5c543fe288dfd9c1d7312dcafeda9.tar.gz
bring back par_spread method
-rw-r--r--pyisda/curve.pyx100
1 files changed, 50 insertions, 50 deletions
diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx
index a3821c2..924eeb8 100644
--- a/pyisda/curve.pyx
+++ b/pyisda/curve.pyx
@@ -950,58 +950,58 @@ cdef class SpreadCurve(Curve):
# tweak_curve(curve_orig, curve_tweaked, epsilon, mask)
# return sc
-# @cython.boundscheck(False)
-# def par_spread(self, today, step_in_date, start_date, end_dates,
-# const double[:] recovery_rates, YieldCurve yc not None,
-# bint pay_accrued_on_default=True):
-# """
-# Parameters
-# ----------
-# recovery_rates : should be same length as end_dates
-# """
-# cdef TDate today_c = pydate_to_TDate(today)
-# cdef TDate step_in_date_c = pydate_to_TDate(step_in_date)
-# cdef TDate start_date_c = pydate_to_TDate(start_date)
-# cdef int n_dates = len(end_dates)
-# cdef TDate* end_dates_c = <TDate*>malloc(n_dates * sizeof(TDate))
-# cdef size_t i
-# for i, d in enumerate(end_dates):
-# end_dates_c[i] = pydate_to_TDate(d)
-# cdef double* par_spreads
+ @cython.boundscheck(False)
+ def par_spread(self, today, step_in_date, start_date, end_dates,
+ const double[:] recovery_rates, YieldCurve yc not None,
+ bint pay_accrued_on_default=True):
+ """
+ Parameters
+ ----------
+ recovery_rates : should be same length as end_dates
+ """
+ cdef TDate today_c = pydate_to_TDate(today)
+ cdef TDate step_in_date_c = pydate_to_TDate(step_in_date)
+ cdef TDate start_date_c = pydate_to_TDate(start_date)
+ cdef int n_dates = len(end_dates)
+ cdef TDate* end_dates_c = <TDate*>malloc(n_dates * sizeof(TDate))
+ cdef size_t i
+ for i, d in enumerate(end_dates):
+ end_dates_c[i] = pydate_to_TDate(d)
+ cdef double* par_spreads
-# cdef TStubMethod stub_type
-# if JpmcdsStringToStubMethod(b"f/s", &stub_type) != 0:
-# free(end_dates_c)
-# raise ValueError("can't convert stub")
+ cdef TStubMethod stub_type
+ if JpmcdsStringToStubMethod(b"f/s", &stub_type) != 0:
+ free(end_dates_c)
+ raise ValueError("can't convert stub")
-# cdef int result
-# with nogil:
-# par_spreads = <double*>malloc(n_dates * sizeof(double))
-# result = JpmcdsCdsParSpreads(today_c,
-# step_in_date_c,
-# start_date_c,
-# n_dates,
-# end_dates_c,
-# pay_accrued_on_default,
-# NULL,
-# &stub_type,
-# ACT_360,
-# MODIFIED,
-# b'NONE',
-# get_TCurve(yc),
-# get_TCurve(self),
-# &recovery_rates[0],
-# par_spreads)
-# free(end_dates_c)
-# cdef list r = []
-# if result != SUCCESS:
-# free(par_spreads)
-# raise ValueError("can't compute par spread")
-# else:
-# for i in range(n_dates):
-# r.append(par_spreads[i])
-# free(par_spreads)
-# return r
+ cdef int result
+ with nogil:
+ par_spreads = <double*>malloc(n_dates * sizeof(double))
+ result = JpmcdsCdsParSpreads(today_c,
+ step_in_date_c,
+ start_date_c,
+ n_dates,
+ end_dates_c,
+ pay_accrued_on_default,
+ NULL,
+ &stub_type,
+ ACT_360,
+ MODIFIED,
+ b'NONE',
+ yc.get_TCurve(),
+ self.get_TCurve(),
+ &recovery_rates[0],
+ par_spreads)
+ free(end_dates_c)
+ cdef list r = []
+ if result != SUCCESS:
+ free(par_spreads)
+ raise ValueError("can't compute par spread")
+ else:
+ for i in range(n_dates):
+ r.append(par_spreads[i])
+ free(par_spreads)
+ return r
@property
def recovery_rates(self):