SWIG devuelve PyObject como objeto python?

Supongamos que tengo una clase envuelta en SWIG cuidando de un puntero a algunos datos, como se muestra en el siguiente código. Me gustaría construir un objeto ndarray ndarray partir de los datos y devolverlo al usuario. Quiero que use los datos como su búfer, pero no tome la propiedad. Si tengo razón, usaré la api de C ++ PyArray_SimpleNewFromData . Sin embargo, mi pregunta es ¿cómo puedo devolver esto a python? Si escribo la siguiente función de get , ¿SWIG la devolverá automáticamente como un objeto python? Si no, ¿qué debo hacer?

 class Test { public: Test () { ptr_ = new uint8_t[200]; } ~Test() { delete [] ptr_; } PyObject* get() { npy_intp dims[1] = {25}; return PyArray_SimpleNewFromData(1, dims, NPY_DOUBLE, ptr_); } private: uint8_t* ptr_; }; 

Por cierto, también estoy luchando para encontrar los archivos de cabecera y los archivos de biblioteca para la API anterior. Si lo sabes por favor dímelo también. Gracias.

ACTUALIZAR:

Intenté SWIG envolver esta clase. Todo lo demás funciona bien, excepto cuando llamo a la función de get en python (como la siguiente), tengo una falla de segmentación. Cualquier ayuda es apreciada.

 x = Test() y = x.get() 

ACTUALIZACIÓN 2:

Parece que PyArray_SimpleNewFromData es una función en desuso. Entonces, ¿esto todavía es compatible o hay alguna otra forma más recomendada de hacer esto?

Descubrí la solución usando typemap en swig:

 %typemap(out) double* { npy_intp dims[1] = {25}; $result = PyArray_SimpleNewFromData(1, dims, PyArray_DOUBLE, $1); } class Test { public: Test () { ptr_ = new uint8_t[200]; } ~Test() { delete [] ptr_; } double* get() { return (double*) ptr_; } private: uint8_t* ptr_; };