3
0
mirror of https://github.com/triqs/dft_tools synced 2024-12-24 13:23:37 +01:00

Fix import array in extensions.

- import arrays in extensions (mako file).
- put import_arrays in converter,
  along the lines of our own objects (numpy and triqs uses
  the same capsule technique, i.e. the standard technique from python
  doc.)
This commit is contained in:
Olivier Parcollet 2014-06-12 17:26:08 +02:00
parent cbf6092956
commit 842274003f
4 changed files with 20 additions and 4 deletions

View File

@ -1001,6 +1001,9 @@ ${f.code};
PyMODINIT_FUNC
init${module.name}(void)
{
// import numpy
import_array();
PyObject* m;
%for c in module.classes.values() :

View File

@ -31,7 +31,7 @@ namespace triqs { namespace arrays { namespace numpy_interface {
template<typename ArrayViewType >
PyObject * array_view_to_python ( ArrayViewType const & A, bool copy=false) {
_import_array();
//_import_array();
typedef typename ArrayViewType::value_type value_type;
static const int rank = ArrayViewType::rank;
const int elementsType (numpy_to_C_type<typename boost::remove_const<value_type>::type>::arraytype);

View File

@ -130,7 +130,7 @@ namespace triqs { namespace arrays { namespace storages { //namespace details {
static_assert(!std::is_const<ValueType>::value, "internal error");
#ifdef TRIQS_WITH_PYTHON_SUPPORT
static void import_numpy_array() { if (_import_array()!=0) TRIQS_RUNTIME_ERROR <<"Internal Error in importing numpy";}
static void import_numpy_array() {}// if (_import_array()!=0) TRIQS_RUNTIME_ERROR <<"Internal Error in importing numpy";}
#endif
//Construct to state 0

View File

@ -366,14 +366,27 @@ template <typename T, int N> struct py_converter<triqs::utility::mini_vector<T,N
}
};
// --- array
// --- array
inline void import_numpy() {
static bool init = false;
if (!init) {
_import_array();
std::cerr << "importing array"<<std::endl;
init = true;
}
}
template <typename ArrayType> struct py_converter_array {
static PyObject *c2py(ArrayType const &x) { return x.to_python(); }
static PyObject *c2py(ArrayType const &x) {
import_numpy();
return x.to_python();
}
static ArrayType py2c(PyObject *ob) {
return ArrayType (ob);
}
static bool is_convertible(PyObject *ob, bool raise_exception) {
import_numpy();
try {
py2c(ob);
return true;