diff options
| author | Guillaume Horel <guillaume.horel@gmail.com> | 2017-02-14 18:04:27 -0500 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@gmail.com> | 2017-02-14 18:04:27 -0500 |
| commit | a6ff61d333c61d826199444661ab94f46f3e453f (patch) | |
| tree | 0112764344c533642ebad6d955e54e144663ebea | |
| parent | 4353bc7fa5a20afedb7d40767114b8a7b25767c4 (diff) | |
| download | pyisda-a6ff61d333c61d826199444661ab94f46f3e453f.tar.gz | |
fixes
| -rw-r--r-- | pyisda/curve.pyx | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index aa8a40b..6224b77 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -15,6 +15,17 @@ cdef extern from "numpy/arrayobject.h": cdef int SUCCESS = 0 +cdef inline TCurve* copy(const TCurve* curve): + cdef TCurve* newcurve = <TCurve*>malloc(sizeof(TCurve)) + newcurve.fNumItems = curve.fNumItems + newcurve.fBaseDate = curve.fBaseDate + newcurve.fDayCountConv = curve.fDayCountConv + newcurve.fArray = <TRatePt*>malloc(sizeof(TRatePt) * curve.fNumItems) + newcurve.fBasis = curve.fBasis + memcpy(newcurve.fArray, <char*>curve.fArray, + sizeof(TRatePt) * curve.fNumItems) + return newcurve + cpdef public enum BadDay: FOLLOW = <long>'F' PREVIOUS = <long>'P' @@ -61,15 +72,7 @@ cdef class Curve(object): def __deepcopy__(self, memo): cdef Curve sc = type(self).__new__(type(self)) - cdef TCurve* newcurve = <TCurve*>malloc(sizeof(TCurve)) - newcurve.fNumItems = self._thisptr.fNumItems - newcurve.fBaseDate = self._thisptr.fBaseDate - newcurve.fDayCountConv = self._thisptr.fDayCountConv - newcurve.fArray = <TRatePt*>malloc(sizeof(TRatePt) * newcurve.fNumItems) - newcurve.fBasis = self._thisptr.fBasis - memcpy(newcurve.fArray, <char*>self._thisptr.fArray, - sizeof(TRatePt) * newcurve.fNumItems) - sc._thisptr = newcurve + sc._thisptr = copy(self._thisptr) return sc @property @@ -393,13 +396,7 @@ cdef class SpreadCurve(Curve): cdef int num_items = self._thisptr.fNumItems if not inplace: sc = SpreadCurve.__new__(SpreadCurve) - newcurve = <TCurve*>malloc(sizeof(TCurve)) - newcurve.fNumItems = num_items - newcurve.fBaseDate = self._thisptr.fBaseDate - newcurve.fDayCountConv = self._thisptr.fDayCountConv - newcurve.fArray = <TRatePt*>malloc(sizeof(TRatePt) * num_items) - newcurve.fBasis = self._thisptr.fBasis - sc._thisptr = newcurve + sc._thisptr = copy(self._thisptr) t1 = 0 h1 = 0 @@ -419,7 +416,7 @@ cdef class SpreadCurve(Curve): t1 = 0 cdef double c = 0 cdef TRatePt* update - if not inplace: + if inplace: update = self._thisptr.fArray else: update = sc._thisptr.fArray @@ -430,5 +427,7 @@ cdef class SpreadCurve(Curve): t1 = T[i] free(h) free(T) - if not inplace: + if inplace: + return self + else: return sc |
