diff options
| author | Guillaume Horel <guillaume.horel@gmail.com> | 2017-02-15 17:01:44 -0500 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@gmail.com> | 2017-02-15 17:01:44 -0500 |
| commit | b4128a6906e1d42946e8b1152ad87f7028209688 (patch) | |
| tree | e338edd737814b793343775244d7087a063906de | |
| parent | 768c6dd8e08ba0e2cb04fd5561270eac51835716 (diff) | |
| download | pyisda-b4128a6906e1d42946e8b1152ad87f7028209688.tar.gz | |
better typing
| -rw-r--r-- | pyisda/curve.pyx | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index 46dac79..1afb9f9 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -38,11 +38,17 @@ cdef class Curve(object): self._thisptr.fDayCountConv) def __setstate__(self, state): + cdef: + int num_items + char* rates + TDate base_date + double basis + long dcc num_items, rates, base_date, basis, dcc = state self._thisptr = <TCurve*>malloc(sizeof(TCurve)) self._thisptr.fNumItems = num_items self._thisptr.fArray = <TRatePt*>malloc(sizeof(TRatePt) * num_items) - memcpy(self._thisptr.fArray, <char*> rates, sizeof(TRatePt) * num_items) + memcpy(self._thisptr.fArray, rates, sizeof(TRatePt) * num_items) self._thisptr.fBaseDate = base_date self._thisptr.fBasis = basis self._thisptr.fDayCountConv = dcc @@ -61,13 +67,13 @@ cdef class Curve(object): 'day_count_convention': dcc_tostring(self._thisptr.fDayCountConv), 'data': fArray_to_list(self._thisptr.fArray, self._thisptr.fNumItems)} - def __deepcopy__(self, memo): cdef Curve sc = type(self).__new__(type(self)) sc._thisptr = JpmcdsCopyCurve(self._thisptr) return sc @property + @cython.cdivision(True) def forward_hazard_rates(self): cdef double t1, h1, t2, h2 cdef np.npy_intp shape = self._thisptr.fNumItems @@ -170,8 +176,9 @@ cdef class YieldCurve(Curve): char* routine = 'zerocurve' TDate value_date = pydate_to_TDate(date) - self._dates = <TDate*>malloc(len(periods) * sizeof(TDate)) self._ninstr = len(periods) + self._dates = <TDate*>malloc(self._ninstr * sizeof(TDate)) + cdef TDate settle_date if JpmcdsDateFromBusDaysOffset(value_date, 2, "None", &settle_date)!= SUCCESS: @@ -186,16 +193,16 @@ cdef class YieldCurve(Curve): if types[i] == 'M': period_adjust = MODIFIED else: - priod_adjust = NONE + period_adjust = NONE if JpmcdsDateFwdThenAdjust(settle_date, &tmp, period_adjust, "None", &self._dates[i]) != SUCCESS: raise ValueError('Invalid interval') - fixed_bytes = fixed_swap_period.encode('utf-8') - float_bytes = float_swap_period.encode('utf-8') - types_bytes = types.encode('utf-8') + cdef bytes fixed_bytes = fixed_swap_period.encode('utf-8') + cdef bytes float_bytes = float_swap_period.encode('utf-8') + cdef bytes types_bytes = types.encode('utf-8') - if JpmcdsStringToDateInterval(fixed_bytes, routine, &ivl) != SUCCESS: + if JpmcdsStringToDateInterval(<char*>fixed_bytes, routine, &ivl) != SUCCESS: raise ValueError if JpmcdsDateIntervalToFreq(&ivl, &fixed_freq) != SUCCESS: raise ValueError @@ -206,7 +213,7 @@ cdef class YieldCurve(Curve): self._thisptr = JpmcdsBuildIRZeroCurve( value_date, types_bytes, self._dates, - &rates[0], len(periods), dcc(mm_dcc), <long> fixed_freq, + &rates[0], self._ninstr, dcc(mm_dcc), <long> fixed_freq, <long> float_freq, dcc(fixed_swap_dcc), dcc(float_swap_dcc), bad_day_conv, b"None" ) @@ -233,10 +240,10 @@ cdef class YieldCurve(Curve): """ build a yield curve from a list of discount factors """ cdef TDate base_date_c = pydate_to_TDate(base_date) cdef YieldCurve yc = cls.__new__(cls) - yc._dates = <TDate*>malloc(sizeof(TDate) * len(dates)) - cdef size_t i - cdef double* rates = <double*>malloc(sizeof(double) * len(dfs)) yc._ninstr = len(dates) + yc._dates = <TDate*>malloc(sizeof(TDate) * yc._ninstr) + cdef size_t i + cdef double* rates = <double*>malloc(sizeof(double) * yc._ninstr) for i, d in enumerate(dates): yc._dates[i] = pydate_to_TDate(d) JpmcdsDiscountToRateYearFrac(dfs[i], <double>(yc._dates[i]-base_date_c)/365., @@ -375,8 +382,9 @@ cdef class SpreadCurve(Curve): <double>basis, dcc(day_count_conv)) return sc + @cython.cdivision(True) def tweak_curve(self, double epsilon, bint multiplicative=True, - bint[:] mask=None, inplace=True): + bint[:] mask=None, bint inplace=False): """ Tweak the survival curve in place. |
