Index: /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 23707)
+++ /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 23708)
@@ -4,5 +4,5 @@
 
 #ifdef HAVE_CONFIG_H
-	#include <config.h>
+#include <config.h>
 #else
 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
@@ -22,13 +22,23 @@
 
 	/*return internal value: */
-	if      (PyFloat_Check(py_float))
+	#if _PYTHON_MAJOR_ == 3
+	if (PyFloat_Check(py_float))
 		dscalar=PyFloat_AsDouble(py_float);
-	else if (PyLong_Check(py_float)){
-		#if _PYTHON_MAJOR_ == 3
+	else if (PyLong_Check(py_float))
 		dscalar=(double)PyLong_AsLong(py_float);
-		#else
+	else if (PyBool_Check(py_float))
+		dscalar=(double)PyLong_AsLong(py_float);
+	else if (PyTuple_Check(py_float) && (int)PyTuple_Size(py_float)==1)
+		FetchData(&dscalar,PyTuple_GetItem(py_float,(Py_ssize_t)0));
+	else if (PyList_Check(py_float) && (int)PyList_Size(py_float)==1)
+		FetchData(&dscalar,PyList_GetItem(py_float,(Py_ssize_t)0));
+	else
+		_error_("unrecognized float type in input!");
+
+	#else
+	if (PyFloat_Check(py_float))
+		dscalar=PyFloat_AsDouble(py_float);
+	else if (PyLong_Check(py_float))
 		dscalar=PyLong_AsDouble(py_float);
-		#endif
-	}
 	else if (PyInt_Check(py_float))
 		dscalar=(double)PyInt_AsLong(py_float);
@@ -41,5 +51,5 @@
 	else
 		_error_("unrecognized float type in input!");
-
+	#endif
 	/*output: */
 	*pscalar=dscalar;
@@ -52,24 +62,33 @@
 
 	/*return internal value: */
+	#if _PYTHON_MAJOR_ == 3
 	if  (PyFloat_Check(py_float))
 	 fscalar=PyFloat_AsDouble(py_float);
-	else if (PyLong_Check(py_float)){
-		#if _PYTHON_MAJOR_ == 3
+	else if (PyLong_Check(py_float))
 		fscalar=(float)PyLong_AsLong(py_float);
-		#else
+	else if (PyBool_Check(py_float))
+		fscalar=(float)PyLong_AsLong(py_float);
+	else if (PyTuple_Check(py_float) && (int)PyTuple_Size(py_float)==1)
+		FetchData(&fscalar,PyTuple_GetItem(py_float,(Py_ssize_t)0));
+	else if (PyList_Check(py_float) && (int)PyList_Size(py_float)==1)
+		FetchData(&fscalar,PyList_GetItem(py_float,(Py_ssize_t)0));
+	else
+		_error_("unrecognized float type in input!");
+	#else
+	if  (PyFloat_Check(py_float))
+		fscalar=PyFloat_AsDouble(py_float);
+	else if (PyLong_Check(py_float))
 		fscalar=(float)PyLong_AsDouble(py_float);
-		#endif
-	}
 	else if (PyInt_Check(py_float))
-	 fscalar=(float)PyInt_AsLong(py_float);
+		fscalar=(float)PyInt_AsLong(py_float);
 	else if (PyBool_Check(py_float))
-	 fscalar=(float)PyLong_AsLong(py_float);
+		fscalar=(float)PyLong_AsLong(py_float);
 	else if (PyTuple_Check(py_float) && (int)PyTuple_Size(py_float)==1)
-	 FetchData(&fscalar,PyTuple_GetItem(py_float,(Py_ssize_t)0));
+		FetchData(&fscalar,PyTuple_GetItem(py_float,(Py_ssize_t)0));
 	else if (PyList_Check(py_float) && (int)PyList_Size(py_float)==1)
-	 FetchData(&fscalar,PyList_GetItem(py_float,(Py_ssize_t)0));
+		FetchData(&fscalar,PyList_GetItem(py_float,(Py_ssize_t)0));
 	else
-	 _error_("unrecognized float type in input!");
-
+		_error_("unrecognized float type in input!");
+	#endif
 	/*output: */
 	*pscalar=fscalar;
@@ -82,5 +101,20 @@
 
 	/*return internal value: */
-	if      (PyLong_Check(py_long))
+	#if _PYTHON_MAJOR_ == 3
+	if (PyLong_Check(py_long))
+		iscalar=(int)PyLong_AsLong(py_long);
+	else if (PyFloat_Check(py_long))
+		iscalar=(int)PyFloat_AsDouble(py_long);
+	else if (PyBool_Check(py_long))
+		iscalar=(int)PyLong_AsLong(py_long);
+	else if (PyTuple_Check(py_long) && (int)PyTuple_Size(py_long)==1)
+		FetchData(&iscalar,PyTuple_GetItem(py_long,(Py_ssize_t)0));
+	else if (PyList_Check(py_long) && (int)PyList_Size(py_long)==1)
+		FetchData(&iscalar,PyList_GetItem(py_long,(Py_ssize_t)0));
+	else
+		_error_("unrecognized long type in input!");
+
+	#else
+	if (PyLong_Check(py_long))
 		iscalar=(int)PyLong_AsLong(py_long);
 	else if (PyInt_Check(py_long))
@@ -96,5 +130,5 @@
 	else
 		_error_("unrecognized long type in input!");
-
+	#endif
 	/*output: */
 	*pscalar=iscalar;
@@ -107,4 +141,19 @@
 
 	/*return internal value: */
+	#if _PYTHON_MAJOR_ == 3
+	if      (PyBool_Check(py_boolean))
+		bscalar=(bool)PyLong_AsLong(py_boolean);
+	else if (PyLong_Check(py_boolean))
+		bscalar=(bool)PyLong_AsLong(py_boolean);
+	else if (PyLong_Check(py_boolean))
+		bscalar=(bool)PyLong_AsLong(py_boolean);
+	else if (PyTuple_Check(py_boolean) && (int)PyTuple_Size(py_boolean)==1)
+		FetchData(&bscalar,PyTuple_GetItem(py_boolean,(Py_ssize_t)0));
+	else if (PyList_Check(py_boolean) && (int)PyList_Size(py_boolean)==1)
+		FetchData(&bscalar,PyList_GetItem(py_boolean,(Py_ssize_t)0));
+	else
+		_error_("unrecognized boolean type in input!");
+
+	#else
 	if      (PyBool_Check(py_boolean))
 		bscalar=(bool)PyLong_AsLong(py_boolean);
@@ -121,5 +170,5 @@
 	else
 		_error_("unrecognized boolean type in input!");
-
+	#endif
 	/*output: */
 	*pscalar=bscalar;
@@ -189,5 +238,5 @@
 //					}
 //				}
-			
+
 			}
 
@@ -429,10 +478,10 @@
 		if      (ndim==1) {
 			dims=PyArray_DIMS((PyArrayObject*)py_vector);
-			M=dims[0]; 
+			M=dims[0];
 		}
 		else if (ndim==2) {
 			dims=PyArray_DIMS((PyArrayObject*)py_vector);
 			if (dims[1]==1)
-				M=dims[0]; 
+				M=dims[0];
 			else
 				_error_("expecting an Mx1 matrix or M vector in input!");
@@ -518,10 +567,10 @@
 		if      (ndim==1) {
 			dims=PyArray_DIMS((PyArrayObject*)py_vector);
-			M=dims[0]; 
+			M=dims[0];
 		}
 		else if (ndim==2) {
 			dims=PyArray_DIMS((PyArrayObject*)py_vector);
 			if (dims[1]==1)
-			 M=dims[0]; 
+			 M=dims[0];
 			else
 			 _error_("expecting an Mx1 matrix or M vector in input!");
@@ -603,10 +652,10 @@
 		if      (ndim==1) {
 			dims=PyArray_DIMS((PyArrayObject*)py_vector);
-			M=dims[0]; 
+			M=dims[0];
 		}
 		else if (ndim==2) {
 			dims=PyArray_DIMS((PyArrayObject*)py_vector);
 			if (dims[1]==1)
-				M=dims[0]; 
+				M=dims[0];
 			else
 				_error_("expecting an Mx1 matrix or M vector in input!");
@@ -690,10 +739,10 @@
 		if      (ndim==1) {
 			dims=PyArray_DIMS((PyArrayObject*)py_vector);
-			M=dims[0]; 
+			M=dims[0];
 		}
 		else if (ndim==2) {
 			dims=PyArray_DIMS((PyArrayObject*)py_vector);
 			if (dims[1]==1)
-				M=dims[0]; 
+				M=dims[0];
 			else
 				_error_("expecting an Mx1 matrix or M vector in input!");
@@ -941,5 +990,5 @@
 	int* mwadjacency = xNewZeroInit<int>(nzmax);
 	pyGetIr(a,nvtxs,nzmax,mwadjacency);
-	
+
 	int* start = xNew<int>(nvtxs+1);
 	for(int i=0;i<nvtxs+1;i++) start[i]=(int)mwstart[i];
@@ -1012,17 +1061,34 @@
 
 /*Python version dependent: */
-#if _PYTHON_MAJOR_ >= 3 
-/*FUNCTION FetchData(char** pstring,PyObject* py_unicode){{{*/
-void FetchData(char** pstring,PyObject* py_unicode){
-
-	PyObject* py_bytes;
+/* #if _PYTHON_MAJOR_ >= 3 */
+/* /\*FUNCTION FetchData(char** pstring,PyObject* py_unicode){{{*\/ */
+/* void FetchData(char** pstring,PyObject* py_unicode){ */
+
+/* 	PyObject* py_bytes; */
+/* 	char* string=NULL; */
+
+/* 	/\*convert to bytes format: *\/ */
+/* 	PyUnicode_FSConverter(py_unicode,&py_bytes); */
+
+/* 	/\*convert from bytes to string: *\/ */
+/* 	string=PyBytes_AsUTF8(py_bytes); */
+
+/* 	/\*copy string (note strlen does not include trailing NULL): *\/ */
+/* 	*pstring=xNew<char>(strlen(string)+1); */
+/* 	memcpy(*pstring,string,(strlen(string)+1)*sizeof(char)); */
+/* } */
+/* /\*}}}*\/ */
+/* #else */
+/*FUNCTION FetchData(char** pstring,PyObject* py_string){{{*/
+void FetchData(char** pstring,PyObject* py_string){
+
 	char* string=NULL;
 
-	/*convert to bytes format: */
-	PyUnicode_FSConverter(py_unicode,&py_bytes);
-
-	/*convert from bytes to string: */
-	string=PyBytes_AS_STRING(py_bytes);
-
+	/*extract internal string: */
+	#if _PYTHON_MAJOR_ == 3
+	string=PyUnicode_AsUTF8(py_string);
+	#else
+	string=PyString_AsString(py_string);
+	#endif
 	/*copy string (note strlen does not include trailing NULL): */
 	*pstring=xNew<char>(strlen(string)+1);
@@ -1030,17 +1096,3 @@
 }
 /*}}}*/
-#else
-/*FUNCTION FetchData(char** pstring,PyObject* py_string){{{*/
-void FetchData(char** pstring,PyObject* py_string){
-
-	char* string=NULL;
-
-	/*extract internal string: */
-	string=PyString_AsString(py_string);
-
-	/*copy string (note strlen does not include trailing NULL): */
-	*pstring=xNew<char>(strlen(string)+1);
-	memcpy(*pstring,string,(strlen(string)+1)*sizeof(char));
-}
-/*}}}*/
-#endif
+//#endif
Index: /issm/trunk-jpl/src/wrappers/python/io/WritePythonData.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/python/io/WritePythonData.cpp	(revision 23707)
+++ /issm/trunk-jpl/src/wrappers/python/io/WritePythonData.cpp	(revision 23708)
@@ -233,6 +233,10 @@
 		#if _PYTHON_MAJOR_ >= 3
 		PyDict_SetItemString(dict,"numsegs"          ,PyLong_FromSsize_t((Py_ssize_t)riftstruct->riftsnumsegments[i]));
+		PyDict_SetItemString(dict,"fill"             ,PyUnicode_FromString("Ice"));
+		PyDict_SetItemString(dict,"friction"         ,PyLong_FromSsize_t((Py_ssize_t)0));
 		#else
 		PyDict_SetItemString(dict,"numsegs"          ,PyInt_FromSsize_t((Py_ssize_t)riftstruct->riftsnumsegments[i]));
+		PyDict_SetItemString(dict,"fill"             ,PyString_FromString("Ice"));
+		PyDict_SetItemString(dict,"friction"         ,PyInt_FromSsize_t((Py_ssize_t)0));
 		#endif
 
@@ -241,11 +245,4 @@
 		PyDict_SetItemString(dict,"tips"             ,PyArrayFromCopiedData(1                                  ,2,&riftstruct->riftstips[2*i]));
 		PyDict_SetItemString(dict,"penaltypairs"     ,PyArrayFromCopiedData(riftstruct->riftsnumpenaltypairs[i],7,riftstruct->riftspenaltypairs[i]));
-		#if _PYTHON_MAJOR_ >= 3
-		PyDict_SetItemString(dict,"fill"             ,PyString_FromString("Ice"));
-		PyDict_SetItemString(dict,"friction"         ,PyLong_FromSsize_t((Py_ssize_t)0));
-		#else
-		PyDict_SetItemString(dict,"fill"             ,PyString_FromString("Ice"));
-		PyDict_SetItemString(dict,"friction"         ,PyInt_FromSsize_t((Py_ssize_t)0));
-		#endif
 		PyDict_SetItemString(dict,"fraction"         ,PyFloat_FromDouble(0.));
 		PyDict_SetItemString(dict,"fractionincrement",PyFloat_FromDouble(0.1));
