With boost python, how to pass a tuple of lists from python to C++ ? Code
attached : line 12 crashes ?! Googling but no fix for now.

Expected results should look like this:
>> make; python dummyTest.py
g++ -I/usr/include/python2.7 -o dummy.so -shared -fPIC dummy.cpp
-lboost_python -lboost_numpy
doStuffs
nbInt 3
ptrInt ......
ptrInt[0] = 1
ptrInt[1] = 2
ptrInt[2] = 3
nbfloat 3
ptrFloat ....
ptrFloat[0] = 1.2
ptrFloat[1] = 2.3
ptrFloat[2] = 3.4

-- 
Bonne journée,

Franck HOUSSEN
#!/usr/bin/env python

import numpy as np
lsInt = np.array([1, 2, 3], dtype='int32')
lsFloat = np.array([1.2, 2.3, 3.4], dtype='float32')

t = (lsInt, lsFloat)
import dummy
dummy.doStuffs(t)

Attachment: Makefile
Description: Binary data

#include <iostream>

#include <boost/python.hpp>
#include <boost/python/numpy.hpp>

namespace bp = boost::python;
namespace np = boost::python::numpy;

void doStuffs(boost::python::tuple & t) {
  std::cout << "doStuffs" << std::endl;

  np::ndarray lsInt = boost::python::extract<np::ndarray>(t[0]);
  int nbInt = lsInt.shape(0);
  std::cout << "nbInt " << nbInt << std::endl;
  int * ptrInt = reinterpret_cast<int*>(lsInt.get_data());
  std::cout << "ptrInt " << ptrInt << std::endl;
  for(auto k = 0; ptrInt && k < nbInt; k++) {std::cout << "ptrInt[" << k << "] = " << ptrInt[k] << std::endl;};

  np::ndarray lsFloat = boost::python::extract<np::ndarray>(t[1]);
  int nbFloat = lsFloat.shape(0);
  std::cout << "nbFloat " << nbFloat << std::endl;
  float * ptrFloat = reinterpret_cast<float*>(lsFloat.get_data());
  std::cout << "ptrFloat " << ptrFloat << std::endl;
  for(auto k = 0; k < nbFloat; k++) {std::cout << "ptrFloat[" << k << "] = " << ptrFloat[k] << std::endl;};
}

BOOST_PYTHON_MODULE(dummy) {
  def("doStuffs", doStuffs);
}
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
https://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to