Index: /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 13989)
+++ /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 13990)
@@ -67,5 +67,10 @@
 	npy_intp*  dims=NULL;
 
-	/*retrive dimensions: */
+	/*intermediary:*/
+	long* lmatrix=NULL;
+	bool* bmatrix=NULL;
+	int i;
+
+	/*retrieve dimensions: */
 	ndim=PyArray_NDIM((const PyArrayObject*)py_matrix);
 	if(ndim!=2)_error_("expecting an MxN matrix in input!");
@@ -74,10 +79,33 @@
 
 	if (M && N) {
-		/*retrieve internal value: */
-		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
-
-		/*copy matrix: */
-		matrix=xNew<double>(M*N);
-		memcpy(matrix,dmatrix,(M*N)*sizeof(double));
+		if      (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
+			/*retrieve internal value: */
+			dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
+
+			/*copy matrix: */
+			matrix=xNew<double>(M*N);
+			memcpy(matrix,dmatrix,(M*N)*sizeof(double));
+		}
+
+		else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_INT64) {
+			/*retrieve internal value: */
+			lmatrix=(long*)PyArray_DATA((PyArrayObject*)py_matrix);
+
+			/*transform into double matrix: */
+			matrix=xNew<double>(M*N);
+			for(i=0;i<M*N;i++)matrix[i]=(double)lmatrix[i];
+		}
+
+		else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_BOOL) {
+			/*retrieve internal value: */
+			bmatrix=(bool*)PyArray_DATA((PyArrayObject*)py_matrix);
+
+			/*transform into double matrix: */
+			matrix=xNew<double>(M*N);
+			for(i=0;i<M*N;i++)matrix[i]=(double)bmatrix[i];
+		}
+
+		else
+			_error_("unrecognized matrix type in input!");
 	}
 	else
@@ -94,14 +122,16 @@
 
 	/*output: */
-	double* dmatrix=NULL;
 	int* matrix=NULL;
 	int M,N;
-
-	/*intermediary:*/
-	int i;
 	int ndim;
 	npy_intp*  dims=NULL;
 
-	/*retrive dimensions: */
+	/*intermediary:*/
+	double* dmatrix=NULL;
+	long* lmatrix=NULL;
+	bool* bmatrix=NULL;
+	int i;
+
+	/*retrieve dimensions: */
 	ndim=PyArray_NDIM((const PyArrayObject*)py_matrix);
 	if(ndim!=2)_error_("expecting an MxN matrix in input!");
@@ -110,10 +140,33 @@
 
 	if (M && N) {
-		/*retrieve internal value: */
-		dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
-
-		/*transform into integer matrix: */
-		matrix=xNew<int>(M*N);
-		for(i=0;i<M*N;i++)matrix[i]=(int)dmatrix[i];
+		if      (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
+			/*retrieve internal value: */
+			dmatrix=(double*)PyArray_DATA((PyArrayObject*)py_matrix);
+
+			/*transform into integer matrix: */
+			matrix=xNew<int>(M*N);
+			for(i=0;i<M*N;i++)matrix[i]=(int)dmatrix[i];
+		}
+
+		else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_INT64) {
+			/*retrieve internal value: */
+			lmatrix=(long*)PyArray_DATA((PyArrayObject*)py_matrix);
+
+			/*transform into integer matrix: */
+			matrix=xNew<int>(M*N);
+			for(i=0;i<M*N;i++)matrix[i]=(int)lmatrix[i];
+		}
+
+		else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_BOOL) {
+			/*retrieve internal value: */
+			bmatrix=(bool*)PyArray_DATA((PyArrayObject*)py_matrix);
+
+			/*transform into integer matrix: */
+			matrix=xNew<int>(M*N);
+			for(i=0;i<M*N;i++)matrix[i]=(int)bmatrix[i];
+		}
+
+		else
+			_error_("unrecognized matrix type in input!");
 	}
 	else
@@ -136,5 +189,10 @@
 	npy_intp*  dims=NULL;
 
-	/*retrive dimensions: */
+	/*intermediary:*/
+	long* lvector=NULL;
+	bool* bvector=NULL;
+	int i;
+
+	/*retrieve dimensions: */
 	ndim=PyArray_NDIM((const PyArrayObject*)py_vector);
 	if(ndim!=1)_error_("expecting an Mx1 vector in input!");
@@ -143,10 +201,33 @@
 
 	if (M) {
-		/*retrieve internal value: */
-		dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
-
-		/*copy vector: */
-		vector=xNew<double>(M);
-		memcpy(vector,dvector,(M)*sizeof(double));
+		if      (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
+			/*retrieve internal value: */
+			dvector=(double*)PyArray_DATA((PyArrayObject*)py_vector);
+
+			/*copy vector: */
+			vector=xNew<double>(M);
+			memcpy(vector,dvector,(M)*sizeof(double));
+		}
+
+		else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_INT64) {
+			/*retrieve internal value: */
+			lvector=(long*)PyArray_DATA((PyArrayObject*)py_vector);
+
+			/*transform into double vector: */
+			vector=xNew<double>(M);
+			for(i=0;i<M;i++)vector[i]=(double)lvector[i];
+		}
+
+		else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_BOOL) {
+			/*retrieve internal value: */
+			bvector=(bool*)PyArray_DATA((PyArrayObject*)py_vector);
+
+			/*transform into double vector: */
+			vector=xNew<double>(M);
+			for(i=0;i<M;i++)vector[i]=(double)bvector[i];
+		}
+
+		else
+			_error_("unrecognized vector type in input!");
 	}
 	else
