From 7620847811e085b46cdfa74b4a9d755be2c5317a Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Mon, 20 Nov 2017 16:18:16 -0500 Subject: trying to fix the memoryview --- pyisda/curve.pyx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index aad22e8..260ac4f 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -22,7 +22,7 @@ cdef extern from "Python.h": int PyMemoryView_Check(object) Py_buffer *PyMemoryView_GET_BUFFER(object) object PyMemoryView_FromMemory(char* mem, Py_ssize_t data, int flags) - cdef int PyBUF_READ + cdef int PyBUF_WRITE cdef extern from "numpy/arrayobject.h": void PyArray_ENABLEFLAGS(np.ndarray arr, int flags) @@ -534,6 +534,7 @@ cdef class SpreadCurve(Curve): survival_probability = Curve.__forward_zero_price + @cython.boundscheck(False) @cython.initializedcheck(False) def __getstate__(self): cdef: @@ -548,20 +549,21 @@ cdef class SpreadCurve(Curve): memcpy(cursor, &size, sizeof(size_t)) cursor += sizeof(size_t) cursor += self.ticker.copy(cursor, size, 0) - size = self.recovery_rates.size + size = self.recovery_rates.shape[0] memcpy(cursor, &size, sizeof(size_t)) cursor += sizeof(size_t) memcpy(cursor, &self.recovery_rates[0], sizeof(double) * self.recovery_rates.shape[0]) return buf[:buf_size] @cython.initializedcheck(False) + @cython.cdivision(True) def __setstate__(self, bytes state): cdef: TCurve* curve = malloc(sizeof(TCurve)) unsigned char* cursor = state size_t ticker_length np.npy_intp size - + double* temp cursor = deserialize(cursor, curve) self._thisptr = make_shared(curve) memcpy(&ticker_length, cursor, sizeof(size_t)) @@ -569,8 +571,10 @@ cdef class SpreadCurve(Curve): self.ticker = string(cursor, ticker_length) cursor += ticker_length memcpy(&size, cursor, sizeof(size_t)) + temp = malloc(size * sizeof(char)) cursor += sizeof(size_t) - self.recovery_rates = PyMemoryView_FromMemory(cursor, size, PyBUF_READ) + memcpy(temp, cursor, size) + self.recovery_rates = (temp) def __deepcopy__(self, dict memo): cdef SpreadCurve sc = SpreadCurve.__new__(SpreadCurve) -- cgit v1.2.3-70-g09d2