From 0416323a7c81324507823216efb667f971b3f5cc Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Tue, 14 Dec 2021 17:03:19 -0500 Subject: fixes for python 3.10 --- pyisda/curve.pyx | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file 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): 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) -- cgit v1.2.3-70-g09d2