@@ -5,7 +5,6 @@ from numpy cimport (
5
5
NPY_ARRAY_OWNDATA,
6
6
NPY_ARRAY_WRITEABLE,
7
7
PyArray_New,
8
- PyArray_SimpleNewFromData,
9
8
import_array,
10
9
ndarray,
11
10
npy_intp,
@@ -34,8 +33,13 @@ cpdef ndarray claim_buffer(ffi, cdata, size_t size, dtype):
34
33
cdef:
35
34
npy_intp dims = size
36
35
uintptr_t ptr = int (ffi.cast(" uintptr_t" , cdata))
37
- ndarray array = PyArray_SimpleNewFromData(1 , & dims, dtype.num, < void * > ptr)
36
+ ndarray array = PyArray_New(
37
+ ndarray, 1 , & dims, dtype.num, NULL , < void * > ptr, dtype.itemsize,
38
+ NPY_ARRAY_WRITEABLE, < object > NULL
39
+ )
38
40
PyArray_ENABLEFLAGS(array, NPY_ARRAY_OWNDATA)
41
+ if dtype.num == 20 : # void type, so most likely a UDT
42
+ array = array.view(dtype)
39
43
return array
40
44
41
45
@@ -45,18 +49,20 @@ cpdef ndarray claim_buffer_2d(ffi, cdata, size_t cdata_size, size_t nrows, size_
45
49
ndarray array
46
50
uintptr_t ptr
47
51
npy_intp dims[2 ]
52
+ int flags = NPY_ARRAY_WRITEABLE
48
53
if cdata_size == size:
49
54
ptr = int (ffi.cast(" uintptr_t" , cdata))
50
55
dims[0 ] = nrows
51
56
dims[1 ] = ncols
52
- if is_c_order:
53
- array = PyArray_SimpleNewFromData(2 , dims, dtype.num, < void * > ptr)
54
- else :
55
- array = PyArray_New(
56
- ndarray, 2 , dims, dtype.num, NULL , < void * > ptr, - 1 ,
57
- NPY_ARRAY_F_CONTIGUOUS | NPY_ARRAY_WRITEABLE, < object > NULL
58
- )
57
+ if not is_c_order:
58
+ flags |= NPY_ARRAY_F_CONTIGUOUS
59
+ array = PyArray_New(
60
+ ndarray, 2 , dims, dtype.num, NULL , < void * > ptr, dtype.itemsize,
61
+ flags, < object > NULL
62
+ )
59
63
PyArray_ENABLEFLAGS(array, NPY_ARRAY_OWNDATA)
64
+ if dtype.num == 20 : # void type, so most likely a UDT
65
+ array = array.view(dtype)
60
66
elif cdata_size > size: # pragma: no cover
61
67
array = claim_buffer(ffi, cdata, cdata_size, dtype)
62
68
if is_c_order:
0 commit comments