Porting to numpy api 1.7

I have this code (main function in my python C ++ module):

static PyObject* FMM(PyObject* self, PyObject* args) { PyObject *model_obj; PyObject *time_obj; PyObject *accepted_obj; PyObject *lat_obj; PyObject *lon_obj; PyObject *h_obj; int N; if (!PyArg_ParseTuple(args, "OOOOOOi", &model_obj, &time_obj, &accepted_obj, &lat_obj, &lon_obj, &h_obj, &N)) { Py_INCREF(Py_None); return Py_None; } PyObject *model = PyArray_FROM_OTF(model_obj, NPY_FLOAT, NPY_INOUT_ARRAY); PyObject *time = PyArray_FROM_OTF(time_obj, NPY_FLOAT, NPY_INOUT_ARRAY); PyObject *accepted = PyArray_FROM_OTF(accepted_obj, NPY_BOOL, NPY_INOUT_ARRAY); PyObject *lat = PyArray_FROM_OTF(lon_obj, NPY_DOUBLE, NPY_INOUT_ARRAY); PyObject *lon = PyArray_FROM_OTF(lon_obj, NPY_DOUBLE, NPY_INOUT_ARRAY); PyObject *h = PyArray_FROM_OTF(h_obj, NPY_DOUBLE, NPY_INOUT_ARRAY); float *MODEL = static_cast<float *>(PyArray_DATA(model)); float *TIME = static_cast<float *>(PyArray_DATA(time)); bool *ACCEPTED = static_cast<bool *>(PyArray_DATA(accepted)); double *LAT = static_cast<double *>(PyArray_DATA(lat)); double *LON = static_cast<double *>(PyArray_DATA(lon)); double *H = static_cast<double *>(PyArray_DATA(h)); _FMM(MODEL, TIME, ACCEPTED, LAT, LON, H, N); Py_INCREF(Py_None); return Py_None; } 

I get a warning

 #warning "Using deprecated NumPy API, 

I want to upgrade to numpy api 1.7:

 #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION 

How can I change my function to replicate the result in the new version of c-api? Can you direct me to any example?

+5
source share
1 answer

Well, that was easy:

 static PyObject* FMM(PyObject* self, PyObject* args) { PyArrayObject *model_obj; PyArrayObject *time_obj; PyArrayObject *accepted_obj; PyArrayObject *lat_obj; PyArrayObject *lon_obj; PyArrayObject *h_obj; int N; if (!PyArg_ParseTuple(args, "OOOOOOi", &model_obj, &time_obj, &accepted_obj, &lat_obj, &lon_obj, &h_obj, &N)) { Py_INCREF(Py_None); return Py_None; } //PyObject *model = PyArray_FROM_OTF(model_obj, NPY_FLOAT, NPY_INOUT_ARRAY); //PyObject *time = PyArray_FROM_OTF(time_obj, NPY_FLOAT, NPY_INOUT_ARRAY); //PyObject *accepted = PyArray_FROM_OTF(accepted_obj, NPY_BOOL, NPY_INOUT_ARRAY); //PyObject *lat = PyArray_FROM_OTF(lon_obj, NPY_DOUBLE, NPY_INOUT_ARRAY); //PyObject *lon = PyArray_FROM_OTF(lon_obj, NPY_DOUBLE, NPY_INOUT_ARRAY); //PyObject *h = PyArray_FROM_OTF(h_obj, NPY_DOUBLE, NPY_INOUT_ARRAY); float *MODEL = static_cast<float *>(PyArray_DATA(model_obj)); float *TIME = static_cast<float *>(PyArray_DATA(time_obj)); bool *ACCEPTED = static_cast<bool *>(PyArray_DATA(accepted_obj)); double *LAT = static_cast<double *>(PyArray_DATA(lat_obj)); double *LON = static_cast<double *>(PyArray_DATA(lon_obj)); double *H = static_cast<double *>(PyArray_DATA(h_obj)); _FMM(MODEL, TIME, ACCEPTED, LAT, LON, H, N); Py_INCREF(Py_None); return Py_None; } 
0
source

Source: https://habr.com/ru/post/1239697/


All Articles