diff options
| author | Guillaume Horel <guillaume.horel@gmail.com> | 2023-04-28 14:05:46 -0400 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@gmail.com> | 2023-04-28 14:05:46 -0400 |
| commit | 3cbd0d4a7b00463a440c39ab354e19fb0388c019 (patch) | |
| tree | 6b23cd6ebb2d53662ae4f57f1a5687720281bef8 | |
| parent | 118999607e463c22d0ebfa031146ac7cf054b072 (diff) | |
| download | pyisda-3cbd0d4a7b00463a440c39ab354e19fb0388c019.tar.gz | |
update par_spread
| -rw-r--r-- | pyisda/curve.pyx | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index 5ae18b8..9df876b 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -960,8 +960,9 @@ cdef class SpreadCurve(Curve): # 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, + def par_spread(self, today, step_in_date, start_date, YieldCurve yc not None, + list end_dates=None, + const double[:] recovery_rates=None, bint pay_accrued_on_default=True, str calendar="NONE"): """ @@ -972,11 +973,21 @@ cdef class SpreadCurve(Curve): 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 size_t i, n_dates + cdef const TCurve* curve = self.get_TCurve() + cdef const double* recoveries + if end_dates is None: + n_dates = curve.fNumItems + end_dates_c = <TDate*>malloc(n_dates * sizeof(TDate)) + for i in range(n_dates): + end_dates_c[i] = curve.fArray[i].fDate + recoveries = self.recovery_rates_ptr() + else: + n_dates = len(end_dates) + end_dates_c = <TDate*>malloc(n_dates * sizeof(TDate)) + for i, d in enumerate(end_dates): + end_dates_c[i] = pydate_to_TDate(d) + recoveries = &recovery_rates[0] cdef double* par_spreads cdef const char* c_cal = calendar @@ -1000,8 +1011,8 @@ cdef class SpreadCurve(Curve): MODIFIED, c_cal, yc.get_TCurve(), - self.get_TCurve(), - &recovery_rates[0], + curve, + recoveries, par_spreads) free(end_dates_c) cdef list r = [] |
