Commit 3679dca7 authored by scoder's avatar scoder Committed by GitHub

Merge pull request #2528 from mattip/numpy-base-access

WIP: MAINT: avoid numpy internals in {sg}et_array_base
parents 3d36766f b8c4fc58
...@@ -74,6 +74,8 @@ Other changes ...@@ -74,6 +74,8 @@ Other changes
package size to about half of its previous size. This makes the compiler package size to about half of its previous size. This makes the compiler
slightly slower, by about 5-7%. slightly slower, by about 5-7%.
* ``set_array_base`` now calls ``PyArray_SetBaseObject``. Also modified
``get_array_base`` to remove direct access to NumPy internals.
0.28.5 (2018-08-03) 0.28.5 (2018-08-03)
=================== ===================
......
...@@ -395,7 +395,7 @@ cdef extern from "numpy/arrayobject.h": ...@@ -395,7 +395,7 @@ cdef extern from "numpy/arrayobject.h":
npy_intp PyArray_DIM(ndarray, size_t) npy_intp PyArray_DIM(ndarray, size_t)
npy_intp PyArray_STRIDE(ndarray, size_t) npy_intp PyArray_STRIDE(ndarray, size_t)
# object PyArray_BASE(ndarray) wrong refcount semantics object PyArray_BASE(ndarray) #wrong refcount semantics?
# dtype PyArray_DESCR(ndarray) wrong refcount semantics # dtype PyArray_DESCR(ndarray) wrong refcount semantics
int PyArray_FLAGS(ndarray) int PyArray_FLAGS(ndarray)
npy_intp PyArray_ITEMSIZE(ndarray) npy_intp PyArray_ITEMSIZE(ndarray)
...@@ -719,6 +719,7 @@ cdef extern from "numpy/arrayobject.h": ...@@ -719,6 +719,7 @@ cdef extern from "numpy/arrayobject.h":
object PyArray_CheckAxis (ndarray, int *, int) object PyArray_CheckAxis (ndarray, int *, int)
npy_intp PyArray_OverflowMultiplyList (npy_intp *, int) npy_intp PyArray_OverflowMultiplyList (npy_intp *, int)
int PyArray_CompareString (char *, char *, size_t) int PyArray_CompareString (char *, char *, size_t)
int PyArray_SetBaseObject(ndarray, object)
# Typedefs that matches the runtime dtype objects in # Typedefs that matches the runtime dtype objects in
...@@ -973,23 +974,13 @@ cdef extern from "numpy/ufuncobject.h": ...@@ -973,23 +974,13 @@ cdef extern from "numpy/ufuncobject.h":
int _import_umath() except -1 int _import_umath() except -1
cdef inline void set_array_base(ndarray arr, object base): cdef inline void set_array_base(ndarray arr, object base):
cdef PyObject* baseptr Py_INCREF(base) # important to do this before decref below!
if base is None: PyArray_SetBaseObject(arr, base)
baseptr = NULL
else:
Py_INCREF(base) # important to do this before decref below!
baseptr = <PyObject*>base
Py_XDECREF(arr.base)
arr.base = baseptr
cdef inline object get_array_base(ndarray arr): cdef inline object get_array_base(ndarray arr):
if arr.base is NULL: base = PyArray_BASE(arr)
return None return <object>base
else:
return <object>arr.base
# Versions of the import_* functions which are more suitable for # Versions of the import_* functions which are more suitable for
# Cython code. # Cython code.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment