33#undef _POSIX_C_SOURCE
44#undef _XOPEN_SOURCE
55
6- #ifdef _DEBUG
7- #undef _DEBUG
86#include <Python.h>
97#ifdef HAVE_NUMPY
10- #include <numpy/ndarrayobject.h>
11- #endif
12- #define _DEBUG
13- #else
14- #include <Python.h>
15- #include <numpy/ndarrayobject.h>
8+ #include <_numpy/ndarrayobject.h>
169#endif
1710
1811#include <epicsVersion.h>
2922#endif
3023
3124#ifdef HAVE_NUMPY
25+ /* See https://numpy.org/devdocs/reference/c-api/array.html */
26+ /* Allow compiling on NumPy 1.x */
27+ #if NPY_ABI_VERSION < 0x02000000
28+ #define PyArray_DescrProto PyArray_Descr
29+ #endif
3230static const int dbf2np_map [DBF_MENU + 1 ] = {
3331 NPY_STRING , // DBF_STRING
3432 NPY_BYTE , // DBF_CHAR
@@ -46,7 +44,7 @@ static const int dbf2np_map[DBF_MENU+1] = {
4644 NPY_INT16 , // DBF_ENUM
4745 NPY_INT16 , // DBF_MENU
4846};
49- static PyArray_Descr * dbf2np [DBF_MENU + 1 ];
47+ static PyArray_DescrProto * dbf2np [DBF_MENU + 1 ];
5048#endif
5149
5250typedef struct {
@@ -126,23 +124,24 @@ static int assign_array(DBADDR *paddr, PyObject *arr)
126124#ifdef HAVE_NUMPY
127125 void * rawfield = paddr -> pfield ;
128126 rset * prset ;
129- PyObject * aval ;
127+ PyArrayObject * aval ;
128+ PyArrayObject * array = (PyArrayObject * )arr ;
130129 unsigned elemsize = dbValueSize (paddr -> field_type );
131130 unsigned long maxlen = paddr -> no_elements , insize ;
132131 PyArray_Descr * desc = dbf2np [paddr -> field_type ];
133132
134133 if (paddr -> field_type == DBF_STRING &&
135- (PyArray_NDIM (arr )!= 2 || PyArray_DIM (arr ,0 )> maxlen || PyArray_DIM (arr ,1 )!= MAX_STRING_SIZE ))
134+ (PyArray_NDIM (array )!= 2 || PyArray_DIM (array ,0 )> maxlen || PyArray_DIM (array ,1 )!= MAX_STRING_SIZE ))
136135 {
137136 PyErr_Format (PyExc_ValueError , "String array has incorrect shape or is too large" );
138137 return 1 ;
139138
140- } else if (PyArray_NDIM (arr )!= 1 || PyArray_DIM (arr ,0 )> maxlen ) {
139+ } else if (PyArray_NDIM (array )!= 1 || PyArray_DIM (array ,0 )> maxlen ) {
141140 PyErr_Format (PyExc_ValueError , "Array has incorrect shape or is too large" );
142141 return 1 ;
143142 }
144143
145- insize = PyArray_DIM (arr , 0 );
144+ insize = PyArray_DIM (array , 0 );
146145
147146 if (paddr -> special == SPC_DBADDR &&
148147 (prset = dbGetRset (paddr )) &&
0 commit comments