2016-01-02 13 views
5

mam ten kod (funkcję głównego w moim c modułu ++ python):Migracja do NumPy API 1.7

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; 
} 

ja dostaję ostrzeżenie

#warning "Using deprecated NumPy API, 

chciałbym migrować do NumPy api 1.7:

#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION 

Jak mogę zmodyfikować moją funkcję, aby powielić wynik w nowej wersji c-api? Czy możesz skierować mnie do dowolnego przykładu?

Odpowiedz

0

Cóż, to było proste:

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; 
}