1 /*
2  * This file was auto-generated with f2py (version:2_1330) and hand edited by
3  * Pearu for testing purposes.  Do not edit this file unless you know what you
4  * are doing!!!
5  */
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 /*********************** See f2py2e/cfuncs.py: includes ***********************/
12 #include "Python.h"
13 #include "fortranobject.h"
14 #include <math.h>
15 
16 static PyObject *wrap_error;
17 static PyObject *wrap_module;
18 
19 /************************************ call ************************************/
20 static char doc_f2py_rout_wrap_call[] = "\
21 Function signature:\n\
22   arr = call(type_num,dims,intent,obj)\n\
23 Required arguments:\n"
24 "  type_num : input int\n"
25 "  dims : input int-sequence\n"
26 "  intent : input int\n"
27 "  obj : input python object\n"
28 "Return objects:\n"
29 "  arr : array";
f2py_rout_wrap_call(PyObject * capi_self,PyObject * capi_args)30 static PyObject *f2py_rout_wrap_call(PyObject *capi_self,
31                                      PyObject *capi_args) {
32   PyObject * volatile capi_buildvalue = NULL;
33   int type_num = 0;
34   npy_intp *dims = NULL;
35   PyObject *dims_capi = Py_None;
36   int rank = 0;
37   int intent = 0;
38   PyArrayObject *capi_arr_tmp = NULL;
39   PyObject *arr_capi = Py_None;
40   int i;
41 
42   if (!PyArg_ParseTuple(capi_args,"iOiO|:wrap.call",\
43                         &type_num,&dims_capi,&intent,&arr_capi))
44     return NULL;
45   rank = PySequence_Length(dims_capi);
46   dims = malloc(rank*sizeof(npy_intp));
47   for (i=0;i<rank;++i) {
48     PyObject *tmp;
49     tmp = PySequence_GetItem(dims_capi, i);
50     if (tmp == NULL) {
51         goto fail;
52     }
53     dims[i] = (npy_intp)PyLong_AsLong(tmp);
54     Py_DECREF(tmp);
55     if (dims[i] == -1 && PyErr_Occurred()) {
56         goto fail;
57     }
58   }
59   capi_arr_tmp = array_from_pyobj(type_num,dims,rank,intent|F2PY_INTENT_OUT,arr_capi);
60   if (capi_arr_tmp == NULL) {
61     free(dims);
62     return NULL;
63   }
64   capi_buildvalue = Py_BuildValue("N",capi_arr_tmp);
65   free(dims);
66   return capi_buildvalue;
67 
68 fail:
69   free(dims);
70   return NULL;
71 }
72 
73 static char doc_f2py_rout_wrap_attrs[] = "\
74 Function signature:\n\
75   arr = array_attrs(arr)\n\
76 Required arguments:\n"
77 "  arr : input array object\n"
78 "Return objects:\n"
79 "  data : data address in hex\n"
80 "  nd : int\n"
81 "  dimensions : tuple\n"
82 "  strides : tuple\n"
83 "  base : python object\n"
84 "  (kind,type,type_num,elsize,alignment) : 4-tuple\n"
85 "  flags : int\n"
86 "  itemsize : int\n"
87 ;
f2py_rout_wrap_attrs(PyObject * capi_self,PyObject * capi_args)88 static PyObject *f2py_rout_wrap_attrs(PyObject *capi_self,
89                                       PyObject *capi_args) {
90   PyObject *arr_capi = Py_None;
91   PyArrayObject *arr = NULL;
92   PyObject *dimensions = NULL;
93   PyObject *strides = NULL;
94   char s[100];
95   int i;
96   memset(s,0,100*sizeof(char));
97   if (!PyArg_ParseTuple(capi_args,"O!|:wrap.attrs",
98                         &PyArray_Type,&arr_capi))
99     return NULL;
100   arr = (PyArrayObject *)arr_capi;
101   sprintf(s,"%p",PyArray_DATA(arr));
102   dimensions = PyTuple_New(PyArray_NDIM(arr));
103   strides = PyTuple_New(PyArray_NDIM(arr));
104   for (i=0;i<PyArray_NDIM(arr);++i) {
105     PyTuple_SetItem(dimensions,i,PyLong_FromLong(PyArray_DIM(arr,i)));
106     PyTuple_SetItem(strides,i,PyLong_FromLong(PyArray_STRIDE(arr,i)));
107   }
108   return Py_BuildValue("siNNO(cciii)ii",s,PyArray_NDIM(arr),
109                        dimensions,strides,
110                        (PyArray_BASE(arr)==NULL?Py_None:PyArray_BASE(arr)),
111                        PyArray_DESCR(arr)->kind,
112                        PyArray_DESCR(arr)->type,
113                        PyArray_TYPE(arr),
114                        PyArray_ITEMSIZE(arr),
115                        PyArray_DESCR(arr)->alignment,
116                        PyArray_FLAGS(arr),
117                        PyArray_ITEMSIZE(arr));
118 }
119 
120 static PyMethodDef f2py_module_methods[] = {
121 
122   {"call",f2py_rout_wrap_call,METH_VARARGS,doc_f2py_rout_wrap_call},
123   {"array_attrs",f2py_rout_wrap_attrs,METH_VARARGS,doc_f2py_rout_wrap_attrs},
124   {NULL,NULL}
125 };
126 
127 static struct PyModuleDef moduledef = {
128     PyModuleDef_HEAD_INIT,
129     "test_array_from_pyobj_ext",
130     NULL,
131     -1,
132     f2py_module_methods,
133     NULL,
134     NULL,
135     NULL,
136     NULL
137 };
138 
PyInit_test_array_from_pyobj_ext(void)139 PyMODINIT_FUNC PyInit_test_array_from_pyobj_ext(void) {
140   PyObject *m,*d, *s;
141   m = wrap_module = PyModule_Create(&moduledef);
142   Py_SET_TYPE(&PyFortran_Type, &PyType_Type);
143   import_array();
144   if (PyErr_Occurred())
145     Py_FatalError("can't initialize module wrap (failed to import numpy)");
146   d = PyModule_GetDict(m);
147   s = PyUnicode_FromString("This module 'wrap' is auto-generated with f2py (version:2_1330).\nFunctions:\n"
148                            "  arr = call(type_num,dims,intent,obj)\n"
149                            ".");
150   PyDict_SetItemString(d, "__doc__", s);
151   wrap_error = PyErr_NewException ("wrap.error", NULL, NULL);
152   Py_DECREF(s);
153 
154 #define ADDCONST(NAME, CONST)              \
155     s = PyLong_FromLong(CONST);             \
156     PyDict_SetItemString(d, NAME, s);      \
157     Py_DECREF(s)
158 
159   ADDCONST("F2PY_INTENT_IN", F2PY_INTENT_IN);
160   ADDCONST("F2PY_INTENT_INOUT", F2PY_INTENT_INOUT);
161   ADDCONST("F2PY_INTENT_OUT", F2PY_INTENT_OUT);
162   ADDCONST("F2PY_INTENT_HIDE", F2PY_INTENT_HIDE);
163   ADDCONST("F2PY_INTENT_CACHE", F2PY_INTENT_CACHE);
164   ADDCONST("F2PY_INTENT_COPY", F2PY_INTENT_COPY);
165   ADDCONST("F2PY_INTENT_C", F2PY_INTENT_C);
166   ADDCONST("F2PY_OPTIONAL", F2PY_OPTIONAL);
167   ADDCONST("F2PY_INTENT_INPLACE", F2PY_INTENT_INPLACE);
168   ADDCONST("NPY_BOOL", NPY_BOOL);
169   ADDCONST("NPY_BYTE", NPY_BYTE);
170   ADDCONST("NPY_UBYTE", NPY_UBYTE);
171   ADDCONST("NPY_SHORT", NPY_SHORT);
172   ADDCONST("NPY_USHORT", NPY_USHORT);
173   ADDCONST("NPY_INT", NPY_INT);
174   ADDCONST("NPY_UINT", NPY_UINT);
175   ADDCONST("NPY_INTP", NPY_INTP);
176   ADDCONST("NPY_UINTP", NPY_UINTP);
177   ADDCONST("NPY_LONG", NPY_LONG);
178   ADDCONST("NPY_ULONG", NPY_ULONG);
179   ADDCONST("NPY_LONGLONG", NPY_LONGLONG);
180   ADDCONST("NPY_ULONGLONG", NPY_ULONGLONG);
181   ADDCONST("NPY_FLOAT", NPY_FLOAT);
182   ADDCONST("NPY_DOUBLE", NPY_DOUBLE);
183   ADDCONST("NPY_LONGDOUBLE", NPY_LONGDOUBLE);
184   ADDCONST("NPY_CFLOAT", NPY_CFLOAT);
185   ADDCONST("NPY_CDOUBLE", NPY_CDOUBLE);
186   ADDCONST("NPY_CLONGDOUBLE", NPY_CLONGDOUBLE);
187   ADDCONST("NPY_OBJECT", NPY_OBJECT);
188   ADDCONST("NPY_STRING", NPY_STRING);
189   ADDCONST("NPY_UNICODE", NPY_UNICODE);
190   ADDCONST("NPY_VOID", NPY_VOID);
191   ADDCONST("NPY_NTYPES", NPY_NTYPES);
192   ADDCONST("NPY_NOTYPE", NPY_NOTYPE);
193   ADDCONST("NPY_USERDEF", NPY_USERDEF);
194 
195   ADDCONST("CONTIGUOUS", NPY_ARRAY_C_CONTIGUOUS);
196   ADDCONST("FORTRAN", NPY_ARRAY_F_CONTIGUOUS);
197   ADDCONST("OWNDATA", NPY_ARRAY_OWNDATA);
198   ADDCONST("FORCECAST", NPY_ARRAY_FORCECAST);
199   ADDCONST("ENSURECOPY", NPY_ARRAY_ENSURECOPY);
200   ADDCONST("ENSUREARRAY", NPY_ARRAY_ENSUREARRAY);
201   ADDCONST("ALIGNED", NPY_ARRAY_ALIGNED);
202   ADDCONST("WRITEABLE", NPY_ARRAY_WRITEABLE);
203   ADDCONST("UPDATEIFCOPY", NPY_ARRAY_UPDATEIFCOPY);
204   ADDCONST("WRITEBACKIFCOPY", NPY_ARRAY_WRITEBACKIFCOPY);
205 
206   ADDCONST("BEHAVED", NPY_ARRAY_BEHAVED);
207   ADDCONST("BEHAVED_NS", NPY_ARRAY_BEHAVED_NS);
208   ADDCONST("CARRAY", NPY_ARRAY_CARRAY);
209   ADDCONST("FARRAY", NPY_ARRAY_FARRAY);
210   ADDCONST("CARRAY_RO", NPY_ARRAY_CARRAY_RO);
211   ADDCONST("FARRAY_RO", NPY_ARRAY_FARRAY_RO);
212   ADDCONST("DEFAULT", NPY_ARRAY_DEFAULT);
213   ADDCONST("UPDATE_ALL", NPY_ARRAY_UPDATE_ALL);
214 
215 #undef ADDCONST(
216 
217   if (PyErr_Occurred())
218     Py_FatalError("can't initialize module wrap");
219 
220 #ifdef F2PY_REPORT_ATEXIT
221   on_exit(f2py_report_on_exit,(void*)"array_from_pyobj.wrap.call");
222 #endif
223 
224   return m;
225 }
226 #ifdef __cplusplus
227 }
228 #endif
229