diff options
| -rw-r--r-- | pyisda/credit_index.pyx | 98 |
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) |
