summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyisda/curve.pyx63
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)