264ValueHolder
makeArray(PyObject* obj_ptr, Bool copyData) {
266 throw AipsError(
"PycArray: python object is not an array");
268 PyArrayObject* po = (PyArrayObject*)obj_ptr;
269 boost::python::object obj;
270 bool docopy = copyData;
271 if (!PyArray_ISCONTIGUOUS(po) || !PyArray_ISALIGNED(po) || PyArray_ISBYTESWAPPED(po)) {
272 boost::python::handle<> py_hdl(obj_ptr);
273 boost::python::object py_obj(py_hdl);
275 boost::python::incref(obj_ptr);
276 obj = py_obj.attr(
"copy")();
277 po = (PyArrayObject*)(obj.ptr());
282 int nd = PyArray_NDIM(po);
286 for (
int i = 0; i < nd; i++) {
287 shp[i] = PyArray_DIMS(po)[nd - i - 1];
292 if (shp.product() > 0) {
295 && !PyArray_ISBYTESWAPPED(po),
299 switch (PyArray_TYPE(po)) {
328 if (PyArray_TYPE(po) == NPY_UINT64) {
330 Array<Int64> res(arr.shape());
331 convertArray(res, arr);
332 return ValueHolder(res);
333 }
else if (PyArray_TYPE(po) == NPY_INT8) {
335 Array<Short> res(arr.shape());
336 convertArray(res, arr);
337 return ValueHolder(res);
338 }
else if (PyArray_TYPE(po) == NPY_UINT8) {
341 Array<Short> res(arr.shape());
343 Array<uChar>* uarr =
static_cast<Array<uChar>*
>(varr);
344 convertArray(res, *uarr);
345 return ValueHolder(res);
346 }
else if (PyArray_TYPE(po) == NPY_STRING) {
349 slen = PyArray_STRIDES(po)[nd - 1];
352 }
else if (PyArray_TYPE(po) == NPY_UNICODE) {
355 slen = PyArray_STRIDES(po)[nd - 1];
361 throw AipsError(
"PycArray: unknown python array data type");