#include #ifdef __CINT__ struct _object; typedef _object PyObject; #else #if defined(linux) #include #ifdef _POSIX_C_SOURCE #undef _POSIX_C_SOURCE #endif #ifdef _FILE_OFFSET_BITS #undef _FILE_OFFSET_BITS #endif #ifdef _XOPEN_SOURCE #undef _XOPEN_SOURCE #endif #endif #include "Python.h" #include "numpy/arrayobject.h" #endif #ifndef __CINT__ struct TStdvectorToNPYInitArray { TStdvectorToNPYInitArray() { _import_array(); } } gStdvectorToNPYInitArray; #endif #define DECLARE_STDVECTOR_TO_NPY(vtype) \ PyObject* vec2numpy(const std::vector& v); #define DEFINE_STDVECTOR_TO_NPY(vtype, npytype) \ PyObject* vec2numpy(const std::vector& v) \ { \ npy_intp dims = v.size(); \ PyObject* pyarr = PyArray_SimpleNew( 1, &dims, npytype ); \ vtype* carr = (vtype*)PyArray_DATA((PyArrayObject*)pyarr); \ for ( std::vector::size_type i = 0; i < v.size(); ++i ) carr[i] = v[i]; \ return pyarr; \ } #ifdef __CINT__ DECLARE_STDVECTOR_TO_NPY(int) DECLARE_STDVECTOR_TO_NPY(float) DECLARE_STDVECTOR_TO_NPY(double) #else DEFINE_STDVECTOR_TO_NPY(int, NPY_INT) DEFINE_STDVECTOR_TO_NPY(float, NPY_FLOAT) DEFINE_STDVECTOR_TO_NPY(double, NPY_DOUBLE) #endif