summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyisda/credit_index.pyx98
1 files changed, 48 insertions, 50 deletions
diff --git a/pyisda/credit_index.pyx b/pyisda/credit_index.pyx
index a809567..afe441d 100644
--- a/pyisda/credit_index.pyx
+++ b/pyisda/credit_index.pyx
@@ -45,9 +45,6 @@ cdef TContingentLeg* copyContingentLeg(TContingentLeg* leg) nogil:
memcpy(new_leg, leg, sizeof(TContingentLeg))
return new_leg
-cdef inline void double_free(double* ptr) nogil:
- free(ptr)
-
@cython.auto_pickle(False)
cdef class CurveList:
@@ -179,27 +176,27 @@ cdef class CurveList:
self._weights.clear()
CurveList.__init__(self, l)
- def __deepcopy__(self, memo):
- cdef:
- shared_ptr[TCurve] sc
- double* temp
- size_t i = 0
- TCurve* copy_sc
- CurveList copy = CurveList.__new__(CurveList)
- copy._weights = self._weights
- copy.T = self.T
- copy.base_date = self.base_date
+ # def __deepcopy__(self, memo):
+ # cdef:
+ # shared_ptr[TCurve] sc
+ # double* temp
+ # size_t i = 0
+ # TCurve* copy_sc
+ # CurveList copy = CurveList.__new__(CurveList)
+ # copy._weights = self._weights
+ # copy.T = self.T
+ # copy.base_date = self.base_date
- for sc in self._curves:
- copy_sc = sc.get()
- copy._curves.push_back(make_shared(JpmcdsCopyCurve(copy_sc)))
- temp = <double*>malloc(copy_sc.fNumItems * sizeof(double))
- if temp != NULL:
- memcpy(<void*>temp, self.recovery_rates[i].get(),
- copy_sc.fNumItems * sizeof(double))
- copy.recovery_rates.push_back(shared_ptr[double](temp, double_free))
- copy.tickers = self.tickers
- return copy
+ # for sc in self._curves:
+ # copy_sc = sc.get()
+ # copy._curves.push_back(make_shared(JpmcdsCopyCurve(copy_sc)))
+ # temp = <double*>malloc(copy_sc.fNumItems * sizeof(double))
+ # if temp != NULL:
+ # memcpy(<void*>temp, self.recovery_rates[i].get(),
+ # copy_sc.fNumItems * sizeof(double))
+ # copy.recovery_rates.push_back(shared_ptr[double](temp, double_free))
+ # copy.tickers = self.tickers
+ # return copy
def __reduce__(self):
return (self.__class__, (self.curves, self.weights,
@@ -233,34 +230,34 @@ cdef class CreditIndex(CurveList):
for i in range(self._maturities.size()):
JpmcdsFeeLegFree(self.fee_legs[i])
- def __deepcopy__(self, memo):
- cdef:
- shared_ptr[TCurve] sc
- double* temp
- size_t i = 0
- TCurve* copy_sc
- CreditIndex copy = CreditIndex.__new__(CreditIndex)
- copy._weights = self._weights
- copy.T = self.T
- copy.base_date = self.base_date
- copy.start_date = self.start_date
- copy._maturities = self._maturities
- for sc in self._curves:
- copy_sc = sc.get()
- copy._curves.push_back(make_shared(JpmcdsCopyCurve(copy_sc)))
- temp = <double*>malloc(copy_sc.fNumItems * sizeof(double))
- if temp != NULL:
- memcpy(<void*>temp, self.recovery_rates[i].get(),
- copy_sc.fNumItems * sizeof(double))
- copy.recovery_rates.push_back(shared_ptr[double](temp, double_free))
+ # def __deepcopy__(self, memo):
+ # cdef:
+ # shared_ptr[TCurve] sc
+ # double* temp
+ # size_t i = 0
+ # TCurve* copy_sc
+ # CreditIndex copy = CreditIndex.__new__(CreditIndex)
+ # copy._weights = self._weights
+ # copy.T = self.T
+ # copy.base_date = self.base_date
+ # copy.start_date = self.start_date
+ # copy._maturities = self._maturities
+ # for sc in self._curves:
+ # copy_sc = sc.get()
+ # copy._curves.push_back(make_shared(JpmcdsCopyCurve(copy_sc)))
+ # temp = <double*>malloc(copy_sc.fNumItems * sizeof(double))
+ # if temp != NULL:
+ # memcpy(<void*>temp, self.recovery_rates[i].get(),
+ # copy_sc.fNumItems * sizeof(double))
+ # copy.recovery_rates.push_back(shared_ptr[double](temp, double_free))
- copy.tickers = self.tickers
- copy.contingent_legs = <TContingentLeg**>malloc(sizeof(TContingentLeg*) * self._maturities.size())
- copy.fee_legs = <TFeeLeg**>malloc(sizeof(TFeeLeg*) * self._maturities.size())
- for i in range(self._maturities.size()):
- copy.fee_legs[i] = copyFeeLeg(self.fee_legs[i])
- copy.contingent_legs[i] = copyContingentLeg(self.contingent_legs[i])
- return copy
+ # copy.tickers = self.tickers
+ # copy.contingent_legs = <TContingentLeg**>malloc(sizeof(TContingentLeg*) * self._maturities.size())
+ # copy.fee_legs = <TFeeLeg**>malloc(sizeof(TFeeLeg*) * self._maturities.size())
+ # for i in range(self._maturities.size()):
+ # copy.fee_legs[i] = copyFeeLeg(self.fee_legs[i])
+ # copy.contingent_legs[i] = copyContingentLeg(self.contingent_legs[i])
+ # return copy
def __reduce__(self):
return (self.__class__,
@@ -292,6 +289,7 @@ cdef class CreditIndex(CurveList):
cursor += 8
memcpy(cursor, self.recovery_rates[p.second].get(), curve.fNumItems * sizeof(double))
h ^= Hash64(<char*>buf, buf_size)
+
free(buf)
h = Hash64WithSeed(<char*>&self.start_date, sizeof(TDate), h)
h = Hash64WithSeed(<char*>&self.base_date, sizeof(TDate), h)