diff options
| author | Guillaume Horel <guillaume.horel@gmail.com> | 2017-11-20 16:18:16 -0500 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@gmail.com> | 2017-11-20 16:18:16 -0500 |
| commit | 7620847811e085b46cdfa74b4a9d755be2c5317a (patch) | |
| tree | 0a89a497dd8be9ffb58a3786d7be77a2fd26d000 | |
| parent | a972241805699489b2d827a95f65ee9ebb9551b0 (diff) | |
| download | pyisda-7620847811e085b46cdfa74b4a9d755be2c5317a.tar.gz | |
trying to fix the memoryview
| -rw-r--r-- | pyisda/curve.pyx | 12 |
1 files 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(<char*>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 <bytes>buf[:buf_size] @cython.initializedcheck(False) + @cython.cdivision(True) def __setstate__(self, bytes state): cdef: TCurve* curve = <TCurve*>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(<char*>cursor, ticker_length) cursor += ticker_length memcpy(&size, cursor, sizeof(size_t)) + temp = <double*>malloc(size * sizeof(char)) cursor += sizeof(size_t) - self.recovery_rates = PyMemoryView_FromMemory(<char*>cursor, size, PyBUF_READ) + memcpy(temp, cursor, size) + self.recovery_rates = <double[:size/sizeof(double)]>(temp) def __deepcopy__(self, dict memo): cdef SpreadCurve sc = SpreadCurve.__new__(SpreadCurve) |
