38 #include <type_traits>
43 #if PY_MAJOR_VERSION == 2
64 #if PY_MAJOR_VERSION == 2
65 py::object capsule(py::handle<>(PyCObject_FromVoidPtr(
68 py::object capsule(py::handle<>(
70 (PyCapsule_Destructor)&CapsuleDestructor<T>)));
73 py::incref(np::from_data(arr.data(), np::dtype::get_builtin<T>(),
74 py::make_tuple(arr.size()),
75 py::make_tuple(
sizeof(T)), capsule)
86 py::converter::registry::push_back(&convertible, &construct,
93 py::object obj((py::handle<>(py::borrowed(objPtr))));
94 np::ndarray array = py::extract<np::ndarray>(obj);
98 np::dtype::get_builtin<typename boost::remove_const<T>::type>();
99 if (dtype != array.get_dtype())
105 if (array.get_nd() != 1)
110 catch (boost::python::error_already_set &)
112 py::handle_exception();
122 if (!Py_IsInitialized())
131 py::decref((PyObject *)objPtr);
135 py::converter::rvalue_from_python_stage1_data *data)
139 py::object obj((py::handle<>(py::borrowed(objPtr))));
140 np::ndarray array = py::extract<np::ndarray>(obj);
145 py::object base = array.get_base();
148 #if PY_MAJOR_VERSION == 2
149 if (PyCObject_Check(base.ptr()))
152 PyCObject_AsVoidPtr(base.ptr()));
155 if (PyCapsule_CheckExact(base.ptr()))
158 PyCapsule_GetPointer(base.ptr(), 0));
163 ((py::converter::rvalue_from_python_storage<Array<OneD, T>> *)data)
165 data->convertible = storage;
184 ptr->ToPythonArray((
void *)objPtr, &decrement);
186 array.set_base(py::object());
191 using nonconst_t =
typename std::remove_const<T>::type;
194 (
void *)objPtr, &decrement);
template void export_SharedArray< double >()
void CapsuleDestructor(PyObject *ptr)
void export_SharedArray()
The above copyright notice and this permission notice shall be included.
static PyObject * convert(Array< OneD, T > const &arr)
static void * convertible(PyObject *objPtr)
static void construct(PyObject *objPtr, py::converter::rvalue_from_python_stage1_data *data)
static void decrement(void *objPtr)