278  ValueHolder 
makeArray (PyObject* obj_ptr, Bool copyData)
 
  281      throw AipsError (
"PycArray: python object is not an array");
 
  283    PyArrayObject* po = (PyArrayObject*)obj_ptr;
 
  284    boost::python::object obj;
 
  285    bool docopy = copyData;               
 
  286    if (! PyArray_ISCONTIGUOUS(po)
 
  287    ||  ! PyArray_ISALIGNED(po)
 
  288    ||  PyArray_ISBYTESWAPPED(po)) {
 
  289      boost::python::handle<> py_hdl(obj_ptr);
 
  290      boost::python::object py_obj(py_hdl);
 
  292      boost::python::incref(obj_ptr);
 
  293      obj = py_obj.attr(
"copy")();
 
  294      po = (PyArrayObject*)(obj.ptr());
 
  299    int nd = PyArray_NDIM(po);
 
  303      for (
int i=0; i<nd; i++) {
 
  304    shp[i] = PyArray_DIMS(po)[nd-i-1];
 
  309    if (shp.product() > 0) {
 
  312            &&  !PyArray_ISBYTESWAPPED(po), AipsError);
 
  315    switch (PyArray_TYPE(po)) {
 
  344      if (PyArray_TYPE(po) == NPY_UINT64) {
 
  346    Array<Int64> res(arr.shape());
 
  347    convertArray (res, arr);
 
  348    return ValueHolder(res);
 
  349      } 
else if (PyArray_TYPE(po) == NPY_INT8) {
 
  351    Array<Short> res(arr.shape());
 
  352    convertArray (res, arr);
 
  353    return ValueHolder(res);
 
  354      } 
else if (PyArray_TYPE(po) == NPY_UINT8) {
 
  357    Array<Short> res(arr.shape());
 
  359        Array<uChar>* uarr = 
static_cast<Array<uChar>*
>(varr);
 
  360    convertArray (res, *uarr);
 
  361    return ValueHolder(res);
 
  362      } 
else if (PyArray_TYPE(po) == NPY_STRING) {
 
  365      slen = PyArray_STRIDES(po)[nd-1];
 
  368      } 
else if (PyArray_TYPE(po) == NPY_UNICODE) {
 
  371      slen = PyArray_STRIDES(po)[nd-1];
 
  377    throw AipsError (
"PycArray: unknown python array data type");