Changeset 13990


Ignore:
Timestamp:
11/20/12 11:57:30 (12 years ago)
Author:
jschierm
Message:

NEW: Allow FetchPythonData to read double inputs from float, int, or bool.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp

    r13749 r13990  
    6767        npy_intp*  dims=NULL;
    6868
    69         /*retrive dimensions: */
     69        /*intermediary:*/
     70        long* lmatrix=NULL;
     71        bool* bmatrix=NULL;
     72        int i;
     73
     74        /*retrieve dimensions: */
    7075        ndim=PyArray_NDIM((const PyArrayObject*)py_matrix);
    7176        if(ndim!=2)_error_("expecting an MxN matrix in input!");
     
    7479
    7580        if (M && N) {
    76                 /*retrieve internal value: */
    77                 dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
    78 
    79                 /*copy matrix: */
    80                 matrix=xNew<double>(M*N);
    81                 memcpy(matrix,dmatrix,(M*N)*sizeof(double));
     81                if      (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
     82                        /*retrieve internal value: */
     83                        dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
     84
     85                        /*copy matrix: */
     86                        matrix=xNew<double>(M*N);
     87                        memcpy(matrix,dmatrix,(M*N)*sizeof(double));
     88                }
     89
     90                else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_INT64) {
     91                        /*retrieve internal value: */
     92                        lmatrix=(long*)PyArray_DATA((PyArrayObject*)py_matrix);
     93
     94                        /*transform into double matrix: */
     95                        matrix=xNew<double>(M*N);
     96                        for(i=0;i<M*N;i++)matrix[i]=(double)lmatrix[i];
     97                }
     98
     99                else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_BOOL) {
     100                        /*retrieve internal value: */
     101                        bmatrix=(bool*)PyArray_DATA((PyArrayObject*)py_matrix);
     102
     103                        /*transform into double matrix: */
     104                        matrix=xNew<double>(M*N);
     105                        for(i=0;i<M*N;i++)matrix[i]=(double)bmatrix[i];
     106                }
     107
     108                else
     109                        _error_("unrecognized matrix type in input!");
    82110        }
    83111        else
     
    94122
    95123        /*output: */
    96         double* dmatrix=NULL;
    97124        int* matrix=NULL;
    98125        int M,N;
    99 
    100         /*intermediary:*/
    101         int i;
    102126        int ndim;
    103127        npy_intp*  dims=NULL;
    104128
    105         /*retrive dimensions: */
     129        /*intermediary:*/
     130        double* dmatrix=NULL;
     131        long* lmatrix=NULL;
     132        bool* bmatrix=NULL;
     133        int i;
     134
     135        /*retrieve dimensions: */
    106136        ndim=PyArray_NDIM((const PyArrayObject*)py_matrix);
    107137        if(ndim!=2)_error_("expecting an MxN matrix in input!");
     
    110140
    111141        if (M && N) {
    112                 /*retrieve internal value: */
    113                 dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
    114 
    115                 /*transform into integer matrix: */
    116                 matrix=xNew<int>(M*N);
    117                 for(i=0;i<M*N;i++)matrix[i]=(int)dmatrix[i];
     142                if      (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
     143                        /*retrieve internal value: */
     144                        dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
     145
     146                        /*transform into integer matrix: */
     147                        matrix=xNew<int>(M*N);
     148                        for(i=0;i<M*N;i++)matrix[i]=(int)dmatrix[i];
     149                }
     150
     151                else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_INT64) {
     152                        /*retrieve internal value: */
     153                        lmatrix=(long*)PyArray_DATA((PyArrayObject*)py_matrix);
     154
     155                        /*transform into integer matrix: */
     156                        matrix=xNew<int>(M*N);
     157                        for(i=0;i<M*N;i++)matrix[i]=(int)lmatrix[i];
     158                }
     159
     160                else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_BOOL) {
     161                        /*retrieve internal value: */
     162                        bmatrix=(bool*)PyArray_DATA((PyArrayObject*)py_matrix);
     163
     164                        /*transform into integer matrix: */
     165                        matrix=xNew<int>(M*N);
     166                        for(i=0;i<M*N;i++)matrix[i]=(int)bmatrix[i];
     167                }
     168
     169                else
     170                        _error_("unrecognized matrix type in input!");
    118171        }
    119172        else
     
    136189        npy_intp*  dims=NULL;
    137190
    138         /*retrive dimensions: */
     191        /*intermediary:*/
     192        long* lvector=NULL;
     193        bool* bvector=NULL;
     194        int i;
     195
     196        /*retrieve dimensions: */
    139197        ndim=PyArray_NDIM((const PyArrayObject*)py_vector);
    140198        if(ndim!=1)_error_("expecting an Mx1 vector in input!");
     
    143201
    144202        if (M) {
    145                 /*retrieve internal value: */
    146                 dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
    147 
    148                 /*copy vector: */
    149                 vector=xNew<double>(M);
    150                 memcpy(vector,dvector,(M)*sizeof(double));
     203                if      (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
     204                        /*retrieve internal value: */
     205                        dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
     206
     207                        /*copy vector: */
     208                        vector=xNew<double>(M);
     209                        memcpy(vector,dvector,(M)*sizeof(double));
     210                }
     211
     212                else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_INT64) {
     213                        /*retrieve internal value: */
     214                        lvector=(long*)PyArray_DATA((PyArrayObject*)py_vector);
     215
     216                        /*transform into double vector: */
     217                        vector=xNew<double>(M);
     218                        for(i=0;i<M;i++)vector[i]=(double)lvector[i];
     219                }
     220
     221                else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_BOOL) {
     222                        /*retrieve internal value: */
     223                        bvector=(bool*)PyArray_DATA((PyArrayObject*)py_vector);
     224
     225                        /*transform into double vector: */
     226                        vector=xNew<double>(M);
     227                        for(i=0;i<M;i++)vector[i]=(double)bvector[i];
     228                }
     229
     230                else
     231                        _error_("unrecognized vector type in input!");
    151232        }
    152233        else
Note: See TracChangeset for help on using the changeset viewer.