38 #include <type_traits>
43 #if PY_MAJOR_VERSION == 2
67 #if PY_MAJOR_VERSION == 2
69 py::handle<>(PyCObject_FromVoidPtr(
73 py::handle<>(PyCapsule_New(
75 (PyCapsule_Destructor)&CapsuleDestructor<T>)));
77 PyObject *tmp = py::incref(
79 arr.data(), np::dtype::get_builtin<T>(),
80 py::make_tuple(arr.size()), py::make_tuple(
sizeof(T)),
92 py::converter::registry::push_back(
99 py::object obj((py::handle<>(py::borrowed(objPtr))));
100 np::ndarray array = py::extract<np::ndarray>(obj);
103 np::dtype dtype = np::dtype::get_builtin<
104 typename boost::remove_const<T>::type>();
105 if (dtype != array.get_dtype())
111 if (array.get_nd() != 1)
116 catch (boost::python::error_already_set&)
118 py::handle_exception();
128 if (!Py_IsInitialized())
137 py::decref((PyObject *)objPtr);
142 py::converter::rvalue_from_python_stage1_data* data)
146 py::object obj((py::handle<>(py::borrowed(objPtr))));
147 np::ndarray array = py::extract<np::ndarray>(obj);
152 py::object base = array.get_base();
155 #if PY_MAJOR_VERSION == 2
156 if (PyCObject_Check(base.ptr()))
159 PyCObject_AsVoidPtr(base.ptr()));
162 if (PyCapsule_CheckExact(base.ptr()))
165 PyCapsule_GetPointer(base.ptr(), 0));
170 (py::converter::rvalue_from_python_storage<Array<OneD, T> >*)
171 data)->storage.bytes;
172 data->convertible = storage;
191 ptr->ToPythonArray((
void *)objPtr, &decrement);
193 array.set_base(py::object());
198 using nonconst_t =
typename std::remove_const<T>::type;
200 array.shape(0), (nonconst_t *)array.get_data(),
201 (
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)