summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pyisda/curve.pyx12
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)