summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyisda/curve.pyx29
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 = []