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"
24 #if _PYTHON_MAJOR_ == 3
25 if (PyFloat_Check(py_float))
26 dscalar=PyFloat_AsDouble(py_float);
27 else if (PyLong_Check(py_float))
28 dscalar=(double)PyLong_AsLong(py_float);
29 else if (PyBool_Check(py_float))
30 dscalar=(
double)PyLong_AsLong(py_float);
31 else if (PyTuple_Check(py_float) && (
int)PyTuple_Size(py_float)==1)
32 FetchData(&dscalar,PyTuple_GetItem(py_float,(Py_ssize_t)0));
33 else if (PyList_Check(py_float) && (
int)PyList_Size(py_float)==1)
34 FetchData(&dscalar,PyList_GetItem(py_float,(Py_ssize_t)0));
36 _error_(
"unrecognized float type py3 in input!");
39 if (PyFloat_Check(py_float))
40 dscalar=PyFloat_AsDouble(py_float);
41 else if (PyLong_Check(py_float))
42 dscalar=PyLong_AsDouble(py_float);
43 else if (PyInt_Check(py_float))
44 dscalar=(double)PyInt_AsLong(py_float);
45 else if (PyBool_Check(py_float))
46 dscalar=(
double)PyLong_AsLong(py_float);
47 else if (PyTuple_Check(py_float) && (
int)PyTuple_Size(py_float)==1)
48 FetchData(&dscalar,PyTuple_GetItem(py_float,(Py_ssize_t)0));
49 else if (PyList_Check(py_float) && (
int)PyList_Size(py_float)==1)
50 FetchData(&dscalar,PyList_GetItem(py_float,(Py_ssize_t)0));
52 _error_(
"unrecognized float type in py2 input!");
64 #if _PYTHON_MAJOR_ == 3
65 if (PyFloat_Check(py_float))
66 fscalar=PyFloat_AsDouble(py_float);
67 else if (PyLong_Check(py_float))
68 fscalar=(float)PyLong_AsLong(py_float);
69 else if (PyBool_Check(py_float))
70 fscalar=(
float)PyLong_AsLong(py_float);
71 else if (PyTuple_Check(py_float) && (
int)PyTuple_Size(py_float)==1)
72 FetchData(&fscalar,PyTuple_GetItem(py_float,(Py_ssize_t)0));
73 else if (PyList_Check(py_float) && (
int)PyList_Size(py_float)==1)
74 FetchData(&fscalar,PyList_GetItem(py_float,(Py_ssize_t)0));
76 _error_(
"unrecognized float type in input!");
78 if (PyFloat_Check(py_float))
79 fscalar=PyFloat_AsDouble(py_float);
80 else if (PyLong_Check(py_float))
81 fscalar=(float)PyLong_AsDouble(py_float);
82 else if (PyInt_Check(py_float))
83 fscalar=(
float)PyInt_AsLong(py_float);
84 else if (PyBool_Check(py_float))
85 fscalar=(float)PyLong_AsLong(py_float);
86 else if (PyTuple_Check(py_float) && (int)PyTuple_Size(py_float)==1)
87 FetchData(&fscalar,PyTuple_GetItem(py_float,(Py_ssize_t)0));
88 else if (PyList_Check(py_float) && (int)PyList_Size(py_float)==1)
89 FetchData(&fscalar,PyList_GetItem(py_float,(Py_ssize_t)0));
91 _error_(
"unrecognized float type in input!");
103 #if _PYTHON_MAJOR_ == 3
104 if (PyLong_Check(py_long))
105 iscalar=(int)PyLong_AsLong(py_long);
106 else if (PyFloat_Check(py_long))
107 iscalar=(
int)PyFloat_AsDouble(py_long);
108 else if (PyBool_Check(py_long))
109 iscalar=(int)PyLong_AsLong(py_long);
110 else if (PyTuple_Check(py_long) && (int)PyTuple_Size(py_long)==1)
111 FetchData(&iscalar,PyTuple_GetItem(py_long,(Py_ssize_t)0));
112 else if (PyList_Check(py_long) && (int)PyList_Size(py_long)==1)
113 FetchData(&iscalar,PyList_GetItem(py_long,(Py_ssize_t)0));
115 _error_(
"unrecognized long type in input!");
118 if (PyLong_Check(py_long))
119 iscalar=(int)PyLong_AsLong(py_long);
120 else if (PyInt_Check(py_long))
121 iscalar=(
int)PyInt_AsLong(py_long);
122 else if (PyFloat_Check(py_long))
123 iscalar=(int)PyFloat_AsDouble(py_long);
124 else if (PyBool_Check(py_long))
125 iscalar=(
int)PyLong_AsLong(py_long);
126 else if (PyTuple_Check(py_long) && (
int)PyTuple_Size(py_long)==1)
127 FetchData(&iscalar,PyTuple_GetItem(py_long,(Py_ssize_t)0));
128 else if (PyList_Check(py_long) && (
int)PyList_Size(py_long)==1)
129 FetchData(&iscalar,PyList_GetItem(py_long,(Py_ssize_t)0));
131 _error_(
"unrecognized long type in input!");
143 #if _PYTHON_MAJOR_ == 3
144 if (PyBool_Check(py_boolean))
145 bscalar=(bool)PyLong_AsLong(py_boolean);
146 else if (PyLong_Check(py_boolean))
147 bscalar=(
bool)PyLong_AsLong(py_boolean);
148 else if (PyLong_Check(py_boolean))
149 bscalar=(bool)PyLong_AsLong(py_boolean);
150 else if (PyTuple_Check(py_boolean) && (int)PyTuple_Size(py_boolean)==1)
151 FetchData(&bscalar,PyTuple_GetItem(py_boolean,(Py_ssize_t)0));
152 else if (PyList_Check(py_boolean) && (int)PyList_Size(py_boolean)==1)
153 FetchData(&bscalar,PyList_GetItem(py_boolean,(Py_ssize_t)0));
155 _error_(
"unrecognized boolean type in input!");
158 if (PyBool_Check(py_boolean))
159 bscalar=(bool)PyLong_AsLong(py_boolean);
160 else if (PyLong_Check(py_boolean))
161 bscalar=(
bool)PyLong_AsLong(py_boolean);
162 else if (PyLong_Check(py_boolean))
163 bscalar=(bool)PyLong_AsLong(py_boolean);
164 else if (PyInt_Check(py_boolean))
165 bscalar=(
bool)PyInt_AsLong(py_boolean);
166 else if (PyTuple_Check(py_boolean) && (
int)PyTuple_Size(py_boolean)==1)
167 FetchData(&bscalar,PyTuple_GetItem(py_boolean,(Py_ssize_t)0));
168 else if (PyList_Check(py_boolean) && (
int)PyList_Size(py_boolean)==1)
169 FetchData(&bscalar,PyList_GetItem(py_boolean,(Py_ssize_t)0));
171 _error_(
"unrecognized boolean type in input!");
178 void FetchData(
double** pmatrix,
int* pM,
int *pN,PyObject* py_matrix){
181 double* dmatrix=NULL;
192 PyObject* py_matrix2=NULL;
194 if (PyArray_Check((PyArrayObject*)py_matrix)) {
196 ndim=PyArray_NDIM((
const PyArrayObject*)py_matrix);
198 dims=PyArray_DIMS((PyArrayObject*)py_matrix);
199 M=dims[0]; N=dims[1];
202 dims=PyArray_DIMS((PyArrayObject*)py_matrix);
206 _error_(
"expecting an MxN matrix or M vector in input!");
209 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) {
210 py_matrix2=PyArray_ContiguousFromAny(py_matrix,NPY_DOUBLE,ndim,ndim);
211 py_matrix=py_matrix2;
214 if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
216 dmatrix=(
double*)PyArray_DATA((PyArrayObject*)py_matrix);
219 matrix=xNew<double>(M*N);
220 memcpy(matrix,dmatrix,(M*N)*
sizeof(
double));
223 else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_LONG) {
225 lmatrix=(
long*)PyArray_DATA((PyArrayObject*)py_matrix);
228 matrix=xNew<double>(M*N);
229 for(i=0;i<M*N;i++)matrix[i]=(
double)lmatrix[i];
232 else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_BOOL) {
234 bmatrix=(
bool*)PyArray_DATA((PyArrayObject*)py_matrix);
237 matrix=xNew<double>(M*N);
238 for(i=0;i<M*N;i++)matrix[i]=(
double)bmatrix[i];
242 _error_(
"unrecognized double pyarray type in input!");
249 else if (PyList_Check(py_matrix)) {
251 M=(int)PyList_Size(py_matrix);
254 matrix=xNew<double>(M);
255 for (
int index = 0; index < M; index++) {
257 item = PyList_GetItem(py_matrix, index);
258 if ((
int)PyList_Size(item)>1)
259 _error_(
"2D lists are not suported");
267 else if (PyTuple_Check(py_matrix)) {
269 M=(int)PyTuple_Size(py_matrix);
272 matrix=xNew<double>(M);
273 for (
int index = 0; index < M; index++) {
275 item = PyTuple_GetItem(py_matrix, index);
276 if ((
int)PyTuple_Size(item)>1)
277 _error_(
"2D tuple are not suported");
289 matrix=xNew<double>(M*N);
296 if(pmatrix)*pmatrix=matrix;
300 void FetchData(
int** pmatrix,
int* pM,
int *pN,PyObject* py_matrix){
310 double* dmatrix=NULL;
314 PyObject* py_matrix2=NULL;
316 if (PyArray_Check((PyArrayObject*)py_matrix)) {
318 ndim=PyArray_NDIM((
const PyArrayObject*)py_matrix);
320 dims=PyArray_DIMS((PyArrayObject*)py_matrix);
321 M=dims[0]; N=dims[1];
324 dims=PyArray_DIMS((PyArrayObject*)py_matrix);
328 _error_(
"expecting an MxN matrix or M vector in input!");
331 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) {
332 py_matrix2=PyArray_ContiguousFromAny(py_matrix,NPY_LONG,ndim,ndim);
333 py_matrix=py_matrix2;
336 if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
338 dmatrix=(
double*)PyArray_DATA((PyArrayObject*)py_matrix);
341 matrix=xNew<int>(M*N);
342 for(i=0;i<M*N;i++)matrix[i]=(
int)dmatrix[i];
345 else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_LONG) {
347 lmatrix=(
long*)PyArray_DATA((PyArrayObject*)py_matrix);
350 matrix=xNew<int>(M*N);
351 for(i=0;i<M*N;i++)matrix[i]=(
int)lmatrix[i];
354 else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_BOOL) {
356 bmatrix=(
bool*)PyArray_DATA((PyArrayObject*)py_matrix);
359 matrix=xNew<int>(M*N);
360 for(i=0;i<M*N;i++)matrix[i]=(
int)bmatrix[i];
364 _error_(
"unrecognized int pyarray type in input!");
374 else if (PyList_Check(py_matrix)) {
376 M=(int)PyList_Size(py_matrix);
380 for (
int index = 0; index < M; index++) {
382 item = PyList_GetItem(py_matrix, index);
383 if ((
int)PyList_Size(item)>1)
384 _error_(
"2D lists are not suported");
391 else if (PyTuple_Check(py_matrix)) {
393 M=(int)PyTuple_Size(py_matrix);
397 for (
int index = 0; index < M; index++) {
399 item = PyTuple_GetItem(py_matrix, index);
400 if ((
int)PyTuple_Size(item)>1)
401 _error_(
"2D tuple are not suported");
413 matrix=xNew<int>(M*N);
420 if(pmatrix)*pmatrix=matrix;
424 void FetchData(
bool** pmatrix,
int* pM,
int *pN,PyObject* py_matrix){
435 double* dmatrix=NULL;
438 PyObject* py_matrix2=NULL;
440 if (PyArray_Check((PyArrayObject*)py_matrix)) {
442 ndim=PyArray_NDIM((
const PyArrayObject*)py_matrix);
444 dims=PyArray_DIMS((PyArrayObject*)py_matrix);
445 M=dims[0]; N=dims[1];
448 dims=PyArray_DIMS((PyArrayObject*)py_matrix);
452 _error_(
"expecting an MxN matrix or M vector in input!");
455 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_matrix)) {
456 py_matrix2=PyArray_ContiguousFromAny(py_matrix,NPY_BOOL,ndim,ndim);
457 py_matrix=py_matrix2;
460 if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_DOUBLE) {
462 dmatrix=(
double*)PyArray_DATA((PyArrayObject*)py_matrix);
465 matrix=xNew<bool>(M*N);
466 for(i=0;i<M*N;i++)matrix[i]=(
bool)dmatrix[i];
469 else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_LONG) {
471 lmatrix=(
long*)PyArray_DATA((PyArrayObject*)py_matrix);
474 matrix=xNew<bool>(M*N);
475 for(i=0;i<M*N;i++)matrix[i]=(
bool)lmatrix[i];
478 else if (PyArray_TYPE((PyArrayObject*)py_matrix) == NPY_BOOL) {
480 bmatrix=(
bool*)PyArray_DATA((PyArrayObject*)py_matrix);
483 matrix=xNew<bool>(M*N);
484 memcpy(matrix,bmatrix,(M*N)*
sizeof(
bool));
488 _error_(
"unrecognized bool pyarray type in input!");
498 else if (PyList_Check(py_matrix)) {
500 M=(int)PyList_Size(py_matrix);
503 matrix=xNew<bool>(M);
504 for (
int index = 0; index < M; index++) {
506 item = PyList_GetItem(py_matrix, index);
507 if ((
int)PyList_Size(item)>1)
508 _error_(
"2D lists are not suported");
515 else if (PyTuple_Check(py_matrix)) {
517 M=(int)PyTuple_Size(py_matrix);
520 matrix=xNew<bool>(M);
521 for (
int index = 0; index < M; index++) {
523 item = PyTuple_GetItem(py_matrix, index);
524 if ((
int)PyTuple_Size(item)>1)
525 _error_(
"2D tuples are not suported");
537 matrix=xNew<bool>(M*N);
544 if(pmatrix)*pmatrix=matrix;
548 void FetchData(
double** pvector,
int* pM,PyObject* py_vector){
551 double* dvector=NULL;
561 PyObject* py_vector2=NULL;
563 if (PyArray_Check((PyArrayObject*)py_vector)) {
565 ndim=PyArray_NDIM((
const PyArrayObject*)py_vector);
567 dims=PyArray_DIMS((PyArrayObject*)py_vector);
571 dims=PyArray_DIMS((PyArrayObject*)py_vector);
575 _error_(
"expecting an Mx1 matrix or M vector in input!");
578 _error_(
"expecting an Mx1 matrix or M vector in input!");
581 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) {
582 py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_DOUBLE,ndim,ndim);
583 py_vector=py_vector2;
586 if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
588 dvector=(
double*)PyArray_DATA((PyArrayObject*)py_vector);
591 vector=xNew<double>(M);
592 memcpy(vector,dvector,(M)*
sizeof(
double));
595 else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_LONG) {
597 lvector=(
long*)PyArray_DATA((PyArrayObject*)py_vector);
600 vector=xNew<double>(M);
601 for(i=0;i<M;i++)vector[i]=(
double)lvector[i];
604 else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_BOOL) {
606 bvector=(
bool*)PyArray_DATA((PyArrayObject*)py_vector);
609 vector=xNew<double>(M);
610 for(i=0;i<M;i++)vector[i]=(
double)bvector[i];
614 _error_(
"unrecognized double pyarray type in input!");
624 else if (PyList_Check(py_vector)) {
626 M=(int)PyList_Size(py_vector);
629 vector=xNew<double>(M);
630 for (
int index = 0; index < M; index++) {
632 item = PyList_GetItem(py_vector, index);
639 else if (PyTuple_Check(py_vector)) {
641 M=(int)PyTuple_Size(py_vector);
644 vector=xNew<double>(M);
645 for (
int index = 0; index < M; index++) {
647 item = PyTuple_GetItem(py_vector, index);
658 vector=xNew<double>(M);
664 if(pvector)*pvector=vector;
668 void FetchData(
float** pvector,
int* pM,PyObject* py_vector){
679 double* dvector=NULL;
681 PyObject* py_vector2=NULL;
683 if (PyArray_Check((PyArrayObject*)py_vector)) {
685 ndim=PyArray_NDIM((
const PyArrayObject*)py_vector);
687 dims=PyArray_DIMS((PyArrayObject*)py_vector);
691 dims=PyArray_DIMS((PyArrayObject*)py_vector);
695 _error_(
"expecting an Mx1 matrix or M vector in input!");
698 _error_(
"expecting an Mx1 matrix or M vector in input!");
701 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) {
702 py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_LONG,ndim,ndim);
703 py_vector=py_vector2;
706 if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
708 dvector=(
double*)PyArray_DATA((PyArrayObject*)py_vector);
711 vector=xNew<float>(M);
712 for(i=0;i<M;i++)vector[i]=(
float)dvector[i];
715 else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_LONG) {
717 lvector=(
long*)PyArray_DATA((PyArrayObject*)py_vector);
720 vector=xNew<float>(M);
721 for(i=0;i<M;i++)vector[i]=(
float)lvector[i];
724 else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_BOOL) {
726 bvector=(
bool*)PyArray_DATA((PyArrayObject*)py_vector);
729 vector=xNew<float>(M);
730 for(i=0;i<M;i++)vector[i]=(
float)bvector[i];
734 _error_(
"unrecognized int pyarray type in input!");
736 if(py_vector2)
delete(py_vector2);
741 else if (PyList_Check(py_vector)) {
743 M=(int)PyList_Size(py_vector);
746 vector=xNew<float>(M);
747 for (
int index = 0; index < M; index++) {
749 item = PyList_GetItem(py_vector, index);
757 else if (PyTuple_Check(py_vector)) {
759 M=(int)PyTuple_Size(py_vector);
762 vector=xNew<float>(M);
763 for (
int index = 0; index < M; index++) {
765 item = PyTuple_GetItem(py_vector, index);
776 vector=xNew<float>(M);
782 if(pvector)*pvector=vector;
786 void FetchData(
int** pvector,
int* pM,PyObject* py_vector){
797 double* dvector=NULL;
799 PyObject* py_vector2=NULL;
801 if (PyArray_Check((PyArrayObject*)py_vector)) {
803 ndim=PyArray_NDIM((
const PyArrayObject*)py_vector);
805 dims=PyArray_DIMS((PyArrayObject*)py_vector);
809 dims=PyArray_DIMS((PyArrayObject*)py_vector);
813 _error_(
"expecting an Mx1 matrix or M vector in input!");
816 _error_(
"expecting an Mx1 matrix or M vector in input!");
819 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) {
820 py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_LONG,ndim,ndim);
821 py_vector=py_vector2;
824 if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
826 dvector=(
double*)PyArray_DATA((PyArrayObject*)py_vector);
830 for(i=0;i<M;i++)vector[i]=(
int)dvector[i];
833 else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_LONG) {
835 lvector=(
long*)PyArray_DATA((PyArrayObject*)py_vector);
839 for(i=0;i<M;i++)vector[i]=(
int)lvector[i];
842 else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_BOOL) {
844 bvector=(
bool*)PyArray_DATA((PyArrayObject*)py_vector);
848 for(i=0;i<M;i++)vector[i]=(
int)bvector[i];
852 _error_(
"unrecognized int pyarray type in input!");
861 else if (PyList_Check(py_vector)) {
863 M=(int)PyList_Size(py_vector);
867 for (
int index = 0; index < M; index++) {
869 item = PyList_GetItem(py_vector, index);
877 else if (PyTuple_Check(py_vector)) {
879 M=(int)PyTuple_Size(py_vector);
883 for (
int index = 0; index < M; index++) {
885 item = PyTuple_GetItem(py_vector, index);
902 if(pvector)*pvector=vector;
906 void FetchData(
bool** pvector,
int* pM,PyObject* py_vector){
916 double* dvector=NULL;
919 PyObject* py_vector2=NULL;
921 if (PyArray_Check((PyArrayObject*)py_vector)) {
923 ndim=PyArray_NDIM((
const PyArrayObject*)py_vector);
925 dims=PyArray_DIMS((PyArrayObject*)py_vector);
929 dims=PyArray_DIMS((PyArrayObject*)py_vector);
933 _error_(
"expecting an Mx1 matrix or M vector in input!");
936 _error_(
"expecting an Mx1 matrix or M vector in input!");
939 if (!PyArray_ISCONTIGUOUS((PyArrayObject*)py_vector)) {
940 py_vector2=PyArray_ContiguousFromAny(py_vector,NPY_BOOL,ndim,ndim);
941 py_vector=py_vector2;
944 if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_DOUBLE) {
946 dvector=(
double*)PyArray_DATA((PyArrayObject*)py_vector);
949 vector=xNew<bool>(M);
950 for(i=0;i<M;i++)vector[i]=(
bool)dvector[i];
953 else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_LONG) {
955 lvector=(
long*)PyArray_DATA((PyArrayObject*)py_vector);
958 vector=xNew<bool>(M);
959 for(i=0;i<M;i++)vector[i]=(
bool)lvector[i];
962 else if (PyArray_TYPE((PyArrayObject*)py_vector) == NPY_BOOL) {
964 bvector=(
bool*)PyArray_DATA((PyArrayObject*)py_vector);
967 vector=xNew<bool>(M);
968 memcpy(vector,bvector,(M)*
sizeof(
bool));
972 _error_(
"unrecognized bool pyarray type in input!");
980 else if (PyList_Check(py_vector)) {
982 M=(int)PyList_Size(py_vector);
984 vector=xNew<bool>(M);
985 for (
int index = 0; index < M; index++) {
987 item = PyList_GetItem(py_vector, index);
995 else if (PyTuple_Check(py_vector)) {
997 M=(int)PyTuple_Size(py_vector);
1000 vector=xNew<bool>(M);
1001 for (
int index = 0; index < M; index++) {
1003 item = PyTuple_GetItem(py_vector, index);
1014 vector=xNew<bool>(M);
1020 if(pvector)*pvector=vector;
1041 *pbamggeom=bamggeom;
1061 *pbamgmesh=bamgmesh;
1073 FetchData(&bamgopts->
coeff,PyDict_GetItemString(py_dict,
"coeff"));
1074 FetchData(&bamgopts->
errg,PyDict_GetItemString(py_dict,
"errg"));
1082 FetchData(&bamgopts->
omega,PyDict_GetItemString(py_dict,
"omega"));
1083 FetchData(&bamgopts->
power,PyDict_GetItemString(py_dict,
"power"));
1086 FetchData(&bamgopts->
Crack,PyDict_GetItemString(py_dict,
"Crack"));
1090 FetchData(&bamgopts->
hmin,PyDict_GetItemString(py_dict,
"hmin"));
1091 FetchData(&bamgopts->
hmax,PyDict_GetItemString(py_dict,
"hmax"));
1103 *pbamgopts=bamgopts;
1116 for (
int i=istart; i<nrhs; i=i+2){
1117 #if _PYTHON_MAJOR_ >= 3
1118 if (!PyUnicode_Check(PyTuple_GetItem(py_tuple,(Py_ssize_t)i)))
_error_(
"Argument " << i+1 <<
" must be name of option");
1120 if (!PyString_Check(PyTuple_GetItem(py_tuple,(Py_ssize_t)i)))
_error_(
"Argument " << i+1 <<
" must be name of option");
1123 FetchData(&name,PyTuple_GetItem(py_tuple,(Py_ssize_t)i));
1124 if(i+1 == nrhs)
_error_(
"Argument " << i+2 <<
" must exist and be value of option \"" << name <<
"\".");
1126 _printf0_(
"FetchData for Options not implemented yet, ignoring option \"" << name <<
"\"!\n");
1140 int numcontours,test1,test2;
1141 char *contourname = NULL;
1144 PyObject *py_dicti = NULL;
1145 PyObject *py_item = NULL;
1147 #if _PYTHON_MAJOR_ >= 3
1148 if (PyUnicode_Check(py_list)){
1150 if (PyString_Check(py_list)){
1153 contours=ExpRead<double>(contourname);
1155 else if(PyList_Check(py_list)){
1158 numcontours=(int)PyList_Size(py_list);
1160 for(
int i=0;i<numcontours;i++){
1163 py_dicti=PyList_GetItem(py_list,(Py_ssize_t)i);
1165 py_item = PyDict_GetItemString(py_dicti,
"nods");
1166 if(!py_item)
_error_(
"input structure does not have a 'nods' field");
1169 py_item = PyDict_GetItemString(py_dicti,
"x");
1170 if(!py_item)
_error_(
"input structure does not have a 'x' field");
1171 FetchData(&contouri->
x,&test1,&test2,py_item);
1172 if(test1!=contouri->
nods || test2!=1)
_error_(
"field x should be of size ["<<contouri->
nods<<
" 1]");
1174 py_item = PyDict_GetItemString(py_dicti,
"y");
1175 if(!py_item)
_error_(
"input structure does not have a 'y' field");
1176 FetchData(&contouri->
y,&test1,&test2,py_item);
1177 if(test1!=contouri->
nods || test2!=1)
_error_(
"field y should be of size ["<<contouri->
nods<<
" 1]");
1183 _error_(
"Contour is neither a string nor a structure and cannot be loaded");
1187 xDelete<char>(contourname);
1188 *pcontours=contours;
1191 void FetchChacoData(
int* pnvtxs,
int** padjacency,
int** pstart,
float** pewgts,PyObject* A_IN, PyObject* EWGTS_IN){
1193 double* a = ((
double*)PyArray_DATA((PyArrayObject*)A_IN));
1194 int ndim = PyArray_NDIM((PyArrayObject*)A_IN);
1195 int nzmax = PyArray_CountNonzero((PyArrayObject*)A_IN);
1198 int nvtxs = PyArray_DIMS((PyArrayObject*)A_IN)[1];
1200 int* mwstart = xNewZeroInit<int>(nvtxs+1);
1203 int* mwadjacency = xNewZeroInit<int>(nzmax);
1204 pyGetIr(a,nvtxs,nzmax,mwadjacency);
1206 int* start = xNew<int>(nvtxs+1);
1207 for(
int i=0;i<nvtxs+1;i++) start[i]=(
int)mwstart[i];
1208 int* adjacency = xNew<int>(nzmax);
1209 for(
int i=0; i<nzmax; i++) adjacency[i]=(
int)mwadjacency[i];
1212 int nedges = start[nvtxs];
1213 float* ewgts = NULL;
1214 int size = PyArray_SIZE((PyArrayObject*)EWGTS_IN);
1217 if(size != 1 && size != 0){
1218 ewgts = xNewZeroInit<float>(nedges);
1219 for(
int i = 0; i<nedges;i++){
1220 ewgts[i] = (float)a[i];
1226 *padjacency = adjacency;
1241 for(
int i=0;i<nvtxs;i++){
1242 for(
int j=0;j<nvtxs;j++){
1243 if ((
int)a[i+(j*nvtxs)] != 0){
1254 void pyGetIr(
double* a,
int nvtxs,
int nzmax,
int* Ir){
1263 for(
int i=0;i<nvtxs;i++){
1264 for(
int j=0;j<nvtxs;j++){
1265 if ((
int)a[i+(j*nvtxs)] != 0){
1299 #if _PYTHON_MAJOR_ == 3
1300 const char*
string=PyUnicode_AsUTF8(py_string);
1302 char*
string=PyString_AsString(py_string);
1305 *pstring=xNew<char>(strlen(
string)+1);
1306 memcpy(*pstring,
string,(strlen(
string)+1)*
sizeof(
char));