summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@gmail.com>2017-02-14 18:04:27 -0500
committerGuillaume Horel <guillaume.horel@gmail.com>2017-02-14 18:04:27 -0500
commita6ff61d333c61d826199444661ab94f46f3e453f (patch)
tree0112764344c533642ebad6d955e54e144663ebea
parent4353bc7fa5a20afedb7d40767114b8a7b25767c4 (diff)
downloadpyisda-a6ff61d333c61d826199444661ab94f46f3e453f.tar.gz
fixes
-rw-r--r--pyisda/curve.pyx35
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