diff options
| author | Guillaume Horel <guillaume.horel@gmail.com> | 2021-12-14 17:03:19 -0500 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@gmail.com> | 2021-12-14 17:03:19 -0500 |
| commit | 0416323a7c81324507823216efb667f971b3f5cc (patch) | |
| tree | 600e4d047ce82a968235cc654bbb17dc111bd933 | |
| parent | 54aa1113c8e0f7a4657b33c22b8aa66b8d562063 (diff) | |
| download | pyisda-0416323a7c81324507823216efb667f971b3f5cc.tar.gz | |
fixes for python 3.10
| -rw-r--r-- | pyisda/curve.pyx | 63 |
1 files changed, 61 insertions, 2 deletions
diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index 91b8c48..f333e92 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -1,3 +1,4 @@ + from cython.operator import dereference as deref, preincrement as preinc from libc.math cimport log1p, log, exp, isnan from .date cimport (JpmcdsStringToDateInterval, pydate_to_TDate, dcc, TMonthDayYear, @@ -483,7 +484,36 @@ cdef class YieldCurve(Curve): <double>basis, dcc(day_count_conv)), JpmcdsFreeTCurve) return yc - discount_factor = Curve.__forward_zero_price + def discount_factor(self, d2, d1=None): + """ computes the discount factor at a given date. + + Parameters + ---------- + date : :class:`datetime.date` + + Returns + ------- + float + """ + cdef: + const TCurve* curve = get_TCurve(self) + np.ndarray r + c_datetime.date d + size_t i + + if d1 is None: + if isinstance(d2, np.ndarray): + r = np.zeros_like(d2) + for i, e in enumerate(d2): + r[i] = JpmcdsForwardZeroPrice(curve, curve.fBaseDate, + pydate_to_TDate(d2[i])) + return r + else: + return JpmcdsForwardZeroPrice(curve, curve.fBaseDate, + pydate_to_TDate(d2)) + else: + return JpmcdsForwardZeroPrice(curve, pydate_to_TDate(d1), + pydate_to_TDate(d2)) @property def dates(self): @@ -693,7 +723,36 @@ cdef class SpreadCurve(Curve): raise ValueError("Didn't init the survival curve properly") - survival_probability = Curve.__forward_zero_price + def survival_probability(self, d2, d1=None): + """ computes the survival probability at a given date. + + Parameters + ---------- + date : :class:`datetime.date` + + Returns + ------- + float + """ + cdef: + const TCurve* curve = get_TCurve(self) + np.ndarray r + c_datetime.date d + size_t i + + if d1 is None: + if isinstance(d2, np.ndarray): + r = np.zeros_like(d2) + for i, e in enumerate(d2): + r[i] = JpmcdsForwardZeroPrice(curve, curve.fBaseDate, + pydate_to_TDate(d2[i])) + return r + else: + return JpmcdsForwardZeroPrice(curve, curve.fBaseDate, + pydate_to_TDate(d2)) + else: + return JpmcdsForwardZeroPrice(curve, pydate_to_TDate(d1), + pydate_to_TDate(d2)) cdef size_t size(self) nogil: cdef const TCurve* curve = get_TCurve(self) |
