8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11 #define PY_ARRAY_UNIQUE_SYMBOL PythonIOSymbol
15 #include "../../c/shared/shared.h"
19 void WriteData(PyObject* py_tuple,
int index,
int integer){
21 #if _PYTHON_MAJOR_ >= 3
22 PyTuple_SetItem(py_tuple, index, PyLong_FromSsize_t((Py_ssize_t)integer));
24 PyTuple_SetItem(py_tuple, index, PyInt_FromSsize_t((Py_ssize_t)integer));
29 void WriteData(PyObject* py_tuple,
int index,
char*
string){
31 PyTuple_SetItem(py_tuple, index, PyUnicode_FromString(
string));
35 void WriteData(PyObject* tuple,
int index,
double* matrix,
int M,
int N){
37 npy_intp dims[2]={0,0};
41 double* matrix_python=xNew<double>(M*N);
42 memcpy(matrix_python,matrix,M*N*
sizeof(
double));
46 array=PyArray_SimpleNewFromData(2,dims,NPY_DOUBLE,matrix_python);
48 PyTuple_SetItem(tuple, index, array);
51 void WriteData(PyObject* tuple,
int index,
int* matrix,
int M,
int N){
53 npy_intp dims[2]={0,0};
57 long* lmatrix=xNew<long>(M*N);
58 for(
int i=0;i<M*N;i++)lmatrix[i]=(
long)matrix[i];
62 array=PyArray_SimpleNewFromData(2,dims,NPY_INT64,lmatrix);
64 PyTuple_SetItem(tuple, index, array);
67 void WriteData(PyObject* tuple,
int index,
bool* matrix,
int M,
int N){
69 npy_intp dims[2]={0,0};
73 bool* matrix_python=xNew<bool>(M*N);
74 memcpy(matrix_python,matrix,M*N*
sizeof(
bool));
78 array=PyArray_SimpleNewFromData(2,dims,NPY_BOOL,matrix_python);
80 PyTuple_SetItem(tuple, index, array);
83 void WriteData(PyObject* py_tuple,
int index,
double* vector,
int M){
86 PyObject *array = NULL;
90 double* vector_python=xNew<double>(M);
91 memcpy(vector_python,vector,M*
sizeof(
double));
94 array=PyArray_SimpleNewFromData(1,&dim,NPY_DOUBLE,vector_python);
96 PyTuple_SetItem(py_tuple, index, array);
100 void WriteData(PyObject* py_tuple,
int index,
short* vector,
int M){
104 PyObject* array=NULL;
107 lvector=xNew<long>(M);
108 for(
int i=0;i<M;i++)lvector[i]=(
long)vector[i];
111 array=PyArray_SimpleNewFromData(1,&dim,NPY_INT64,lvector);
113 PyTuple_SetItem(py_tuple, index, array);
117 void WriteData(PyObject* py_tuple,
int index,
int* vector,
int M){
121 PyObject* array=NULL;
124 lvector=xNew<long>(M);
125 for(
int i=0;i<M;i++)lvector[i]=(
long)vector[i];
128 array=PyArray_SimpleNewFromData(1,&dim,NPY_INT64,lvector);
130 PyTuple_SetItem(py_tuple, index, array);
136 PyTuple_SetItem(py_tuple, index, Py_None);
157 PyTuple_SetItem(py_tuple, index, dict);
183 PyTuple_SetItem(py_tuple, index, dict);
191 npy_intp dims[2]={0,0};
192 PyObject* array=NULL;
199 array=PyArray_SimpleNewFromData(2,dims,NPY_DOUBLE,buffer);
201 PyTuple_SetItem(py_tuple, index, array);
210 PyObject* array=NULL;
216 array=PyArray_SimpleNewFromData(1,&dim,NPY_DOUBLE,buffer);
218 PyTuple_SetItem(py_tuple, index, array);
228 list=PyList_New((Py_ssize_t)0);
230 for (i=0; i<riftstruct->
numrifts; i++) {
233 #if _PYTHON_MAJOR_ >= 3
234 PyDict_SetItemString(dict,
"numsegs" ,PyLong_FromSsize_t((Py_ssize_t)riftstruct->
riftsnumsegments[i]));
235 PyDict_SetItemString(dict,
"fill" ,PyUnicode_FromString(
"Ice"));
236 PyDict_SetItemString(dict,
"friction" ,PyLong_FromSsize_t((Py_ssize_t)0));
238 PyDict_SetItemString(dict,
"numsegs" ,PyInt_FromSsize_t((Py_ssize_t)riftstruct->
riftsnumsegments[i]));
239 PyDict_SetItemString(dict,
"fill" ,PyString_FromString(
"Ice"));
240 PyDict_SetItemString(dict,
"friction" ,PyInt_FromSsize_t((Py_ssize_t)0));
247 PyDict_SetItemString(dict,
"fraction" ,PyFloat_FromDouble(0.));
248 PyDict_SetItemString(dict,
"fractionincrement",PyFloat_FromDouble(0.1));
251 PyList_Append(list, dict);
254 PyTuple_SetItem(py_tuple, index, list);
263 npy_intp pydims[2]={0,0};
268 pydims[0]=(npy_intp)dims[0];
269 pydims[1]=(npy_intp)dims[1];
270 pydata=xNew<IssmDouble>(dims[0]*dims[1]);
271 memcpy(pydata,data,dims[0]*dims[1]*
sizeof(
double));
272 return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
279 npy_intp pydims[2]={0,0};
284 pydims[0]=(npy_intp)dimi;
285 pydims[1]=(npy_intp)dimj;
286 pydata=xNew<IssmDouble>(dimi*dimj);
287 memcpy(pydata,data,dimi*dimj*
sizeof(
double));
288 return PyArray_SimpleNewFromData(2,pydims,NPY_DOUBLE,pydata);
295 npy_intp pydims[2]={0,0};
300 pydims[0]=(npy_intp)dimi;
301 pydims[1]=(npy_intp)dimj;
302 pydata=xNew<long>(dimi*dimj);
303 for(
int i=0;i<dimi*dimj;i++) pydata[i]=(
long)data[i];
304 return PyArray_SimpleNewFromData(2,pydims,NPY_INT64,pydata);
311 npy_intp pydims[2]={0,0};
316 pydims[0]=(npy_intp)dimi;
317 pydims[1]=(npy_intp)dimj;
318 pydata=xNew<bool>(dimi*dimj);
319 memcpy(pydata,data,dimi*dimj*
sizeof(
bool));
320 return PyArray_SimpleNewFromData(2,pydims,NPY_BOOL,pydata);