Changeset 14317
- Timestamp:
- 02/04/13 11:07:47 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp
r14316 r14317 103 103 long* lmatrix=NULL; 104 104 bool* bmatrix=NULL; 105 int i,j,k,ipt=0; 106 int mstride,nstride; 107 npy_intp* strides=NULL; 108 // PyObject* py_matrix2; 105 int i; 106 PyObject* py_matrix2=NULL; 109 107 110 108 if (PyArray_Check((PyArrayObject*)py_matrix)) { … … 114 112 dims=PyArray_DIMS((PyArrayObject*)py_matrix); 115 113 M=dims[0]; N=dims[1]; 116 strides=PyArray_STRIDES((PyArrayObject*)py_matrix);117 mstride=strides[0]; nstride=strides[1];118 114 } 119 115 else if (ndim==1) { 120 116 dims=PyArray_DIMS((PyArrayObject*)py_matrix); 121 117 M=dims[0]; N=1; 122 strides=PyArray_STRIDES((PyArrayObject*)py_matrix);123 mstride=strides[0]; nstride=1;124 118 } 125 119 else 126 120 _error_("expecting an MxN matrix or M vector in input!"); 127 121 128 // _printf_(1,"M=%d, N=%d\n",M,N);129 // _printf_(1,"mstride=%d, nstride=%d\n",mstride,nstride);130 // _printf_(1,"py_matrix: FLAGS=%d, NPY_ARRAY_C_CONTIGUOUS=%d, FLAGS & NPY_ARRAY_C_CONTIGUOUS=%d\n",PyArray_FLAGS((PyArrayObject*)py_matrix),NPY_ARRAY_C_CONTIGUOUS,PyArray_FLAGS((PyArrayObject*)py_matrix) & NPY_ARRAY_C_CONTIGUOUS);131 // _printf_(1,"NPY_SIZEOF_DOUBLE=%d\n",NPY_SIZEOF_DOUBLE);132 // _printf_(1,"NPY_SIZEOF_INT64=%d\n",NPY_SIZEOF_INT64);133 // _printf_(1,"NPY_SIZEOF_BOOL=%d\n",NPY_SIZEOF_BOOL);134 // _printf_(1,"NPY_LONG=%d\n",NPY_LONG);135 // _printf_(1,"NPY_INT64=%d\n",NPY_INT64);136 // _printf_(1,"NPY_BOOL=%d\n",NPY_BOOL);137 // _printf_(1,"NPY_CHAR=%d\n",NPY_CHAR);138 139 122 if (M && N) { 123 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) { 124 py_matrix2=PyArray_ContiguousFromAny(py_matrix,NPY_DOUBLE,ndim,ndim); 125 py_matrix=py_matrix2; 126 } 127 140 128 if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) { 141 129 /*retrieve internal value: */ … … 144 132 /*copy matrix: */ 145 133 matrix=xNew<double>(M*N); 146 if (PyArray_FLAGS((PyArrayObject*)py_matrix) & NPY_ARRAY_C_CONTIGUOUS) {134 // if (PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) { 147 135 memcpy(matrix,dmatrix,(M*N)*sizeof(double)); 148 } 149 else { 150 mstride/=PyArray_ITEMSIZE((PyArrayObject*)py_matrix); 151 nstride/=PyArray_ITEMSIZE((PyArrayObject*)py_matrix); 152 for (i=0; i<M; i++) { 153 k=i*mstride; 154 for (j=0; j<N; j++) { 155 matrix[ipt++]=dmatrix[k]; 156 k+=nstride; 157 } 158 } 159 // py_matrix2=PyArray_FromObject(py_matrix,NPY_DOUBLE,PyArray_NDIM((const PyArrayObject*)py_matrix),PyArray_NDIM((const PyArrayObject*)py_matrix)); 160 // _printf_(1,"py_matrix2: FLAGS=%d, NPY_ARRAY_C_CONTIGUOUS=%d, FLAGS & NPY_ARRAY_C_CONTIGUOUS=%d\n",PyArray_FLAGS((PyArrayObject*)py_matrix2),NPY_ARRAY_C_CONTIGUOUS,PyArray_FLAGS((PyArrayObject*)py_matrix2) & NPY_ARRAY_C_CONTIGUOUS); 161 // dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix2); 162 // memcpy(matrix,dmatrix,(M*N)*sizeof(double)); 163 } 136 // } 137 138 // else { 139 // int j,k,ipt=0; 140 // int mstride,nstride; 141 // mstride=(int)PyArray_STRIDE((PyArrayObject*)py_matrix,0)/PyArray_ITEMSIZE((PyArrayObject*)py_matrix); 142 // if (ndim > 1) 143 // nstride=(int)PyArray_STRIDE((PyArrayObject*)py_matrix,1)/PyArray_ITEMSIZE((PyArrayObject*)py_matrix); 144 // else 145 // nstride=1; 146 // for (i=0; i<M; i++) { 147 // k=i*mstride; 148 // for (j=0; j<N; j++) { 149 // matrix[ipt++]=dmatrix[k]; 150 // k+=nstride; 151 // } 152 // } 153 // } 164 154 } 165 155 … … 184 174 else 185 175 _error_("unrecognized double pyarray type in input!"); 176 177 if (py_matrix2) 178 delete(py_matrix2); 186 179 } 187 180 else … … 216 209 bool* bmatrix=NULL; 217 210 int i; 211 PyObject* py_matrix2=NULL; 218 212 219 213 if (PyArray_Check((PyArrayObject*)py_matrix)) { … … 232 226 233 227 if (M && N) { 228 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) { 229 py_matrix2=PyArray_ContiguousFromAny(py_matrix,NPY_LONG,ndim,ndim); 230 py_matrix=py_matrix2; 231 } 232 234 233 if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) { 235 234 /*retrieve internal value: */ … … 261 260 else 262 261 _error_("unrecognized int pyarray type in input!"); 262 263 if (py_matrix2) 264 delete(py_matrix2); 263 265 } 264 266 else … … 293 295 long* lmatrix=NULL; 294 296 int i; 297 PyObject* py_matrix2=NULL; 295 298 296 299 if (PyArray_Check((PyArrayObject*)py_matrix)) { … … 309 312 310 313 if (M && N) { 314 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) { 315 py_matrix2=PyArray_ContiguousFromAny(py_matrix,NPY_BOOL,ndim,ndim); 316 py_matrix=py_matrix2; 317 } 318 311 319 if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) { 312 320 /*retrieve internal value: */ … … 338 346 else 339 347 _error_("unrecognized bool pyarray type in input!"); 348 349 if (py_matrix2) 350 delete(py_matrix2); 340 351 } 341 352 else … … 370 381 bool* bvector=NULL; 371 382 int i; 383 PyObject* py_vector2=NULL; 372 384 373 385 if (PyArray_Check((PyArrayObject*)py_vector)) { … … 389 401 390 402 if (M) { 403 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) { 404 py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_DOUBLE,ndim,ndim); 405 py_vector=py_vector2; 406 } 407 391 408 if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) { 392 409 /*retrieve internal value: */ … … 418 435 else 419 436 _error_("unrecognized double pyarray type in input!"); 437 438 if (py_vector2) 439 delete(py_vector2); 420 440 } 421 441 else … … 448 468 double* dvector=NULL; 449 469 int i; 470 PyObject* py_vector2=NULL; 450 471 451 472 if (PyArray_Check((PyArrayObject*)py_vector)) { … … 467 488 468 489 if (M) { 490 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) { 491 py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_LONG,ndim,ndim); 492 py_vector=py_vector2; 493 } 494 469 495 if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) { 470 496 /*retrieve internal value: */ … … 496 522 else 497 523 _error_("unrecognized int pyarray type in input!"); 524 525 if (py_vector2) 526 delete(py_vector2); 498 527 } 499 528 else … … 526 555 long* lvector=NULL; 527 556 int i; 557 PyObject* py_vector2=NULL; 528 558 529 559 if (PyArray_Check((PyArrayObject*)py_vector)) { … … 545 575 546 576 if (M) { 577 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) { 578 py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_BOOL,ndim,ndim); 579 py_vector=py_vector2; 580 } 581 547 582 if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) { 548 583 /*retrieve internal value: */ … … 574 609 else 575 610 _error_("unrecognized bool pyarray type in input!"); 611 612 if (py_vector2) 613 delete(py_vector2); 576 614 } 577 615 else
Note:
See TracChangeset
for help on using the changeset viewer.