1 /*----------------------------------------------------------------------------
2  ADOL-C -- Automatic Differentiation by Overloading in C++
3  File:     pyedfclasses.h
4  Revision: $Id$
5  Contents: public functions and data types for extern (differentiated)
6            functions in python using swig. This does not compile by itself
7            without python, numpy and swig declarations being included
8 
9  Copyright (c) Kshitij Kulshreshtha
10 
11  This file is part of ADOL-C. This software is provided as open source.
12  Any use, reproduction, or distribution of the software constitutes
13  recipient's acceptance of the terms of the accompanying license file.
14 
15 ----------------------------------------------------------------------------*/
16 
17 #ifndef _ADOLC_PYEDFCLASSES_H_
18 #define _ADOLC_PYEDFCLASSES_H_
19 
20 #include <adolc/edfclasses.h>
21 #include "pydirectors.hpp"
22 
23 class PyEDFwrap : public EDFobject {
24 protected:
25     PyEDF* pyobj;
26 public:
PyEDFwrap()27     PyEDFwrap() : EDFobject() {}
~PyEDFwrap()28     virtual ~PyEDFwrap() {}
setPyObj(PyEDF * o)29     void setPyObj(PyEDF* o) { pyobj = o; }
function(int n,double * x,int m,double * y)30     int function(int n, double *x, int m, double* y) {
31         PyObject* args = NULL;
32         int rc;
33         npy_intp in[1] = { n }, out[1] = { m };
34         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
35         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
36         PyObject* no = PyInt_FromLong((long int)n);
37         PyObject* mo = PyInt_FromLong((long int)m);
38         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
39 #ifdef SWIGPY_USE_CAPSULE
40         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
41         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
42 #else
43         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
44         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
45 #endif
46 #if NPY_API_VERSION < 0x00000007
47         PyArray_BASE(xaa) = capx;
48         PyArray_BASE(yaa) = capy;
49 #else
50         PyArray_SetBaseObject(xaa,capx);
51         PyArray_SetBaseObject(yaa,capy);
52 #endif
53         //args = Py_BuildValue("OOOO:PyEDFobject_function",no,xa,mo,ya);
54         args = PyTuple_Pack(4,no,xa,mo,ya);
55         rc = pyobj->function(args);
56         if (PyErr_Occurred()) rc = -1;
57         Py_DECREF(args);
58         Py_DECREF(xaa);
59         Py_DECREF(yaa);
60         Py_DECREF(no);
61         Py_DECREF(mo);
62         return rc;
63     }
zos_forward(int n,double * x,int m,double * y)64     int zos_forward(int n, double *x, int m, double* y) {
65         PyObject* args = NULL;
66         int rc;
67         npy_intp in[1] = { n }, out[1] = { m };
68         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
69         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
70         PyObject* no = PyInt_FromLong((long int)n);
71         PyObject* mo = PyInt_FromLong((long int)m);
72         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
73 #ifdef SWIGPY_USE_CAPSULE
74         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
75         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
76 #else
77         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
78         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
79 #endif
80 #if NPY_API_VERSION < 0x00000007
81         PyArray_BASE(xaa) = capx;
82         PyArray_BASE(yaa) = capy;
83 #else
84         PyArray_SetBaseObject(xaa,capx);
85         PyArray_SetBaseObject(yaa,capy);
86 #endif
87         //args = Py_BuildValue("OOOO:PyEDFobject_function",no,xa,mo,ya);
88         args = PyTuple_Pack(4,no,xa,mo,ya);
89         rc = pyobj->zos_forward(args);
90         if (PyErr_Occurred()) rc = -1;
91         Py_DECREF(args);
92         Py_DECREF(xaa);
93         Py_DECREF(yaa);
94         Py_DECREF(no);
95         Py_DECREF(mo);
96         return rc;
97     }
fos_forward(int n,double * x,double * xp,int m,double * y,double * yp)98     int fos_forward(int n, double *x, double *xp, int m, double *y, double *yp) {
99         PyObject* args = NULL;
100         int rc;
101         npy_intp in[1] = { n }, out[1] = { m };
102         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
103         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
104         PyObject* xpa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)xp);
105         PyObject* ypa = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)yp);
106         PyObject* no = PyInt_FromLong((long int)n);
107         PyObject* mo = PyInt_FromLong((long int)m);
108         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
109         PyArrayObject *xpaa = (PyArrayObject*) xpa, *ypaa = (PyArrayObject*) ypa;
110 #ifdef SWIGPY_USE_CAPSULE
111         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
112         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
113         PyObject* capxp = PyCapsule_New((void*)(xp), SWIGPY_CAPSULE_NAME, NULL);
114         PyObject* capyp = PyCapsule_New((void*)(yp), SWIGPY_CAPSULE_NAME, NULL);
115 #else
116         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
117         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
118         PyObject* capxp = PyCObject_FromVoidPtr((void*)(xp), NULL);
119         PyObject* capyp = PyCObject_FromVoidPtr((void*)(yp), NULL);
120 #endif
121 #if NPY_API_VERSION < 0x00000007
122         PyArray_BASE(xaa) = capx;
123         PyArray_BASE(yaa) = capy;
124         PyArray_BASE(xpaa) = capxp;
125         PyArray_BASE(ypaa) = capyp;
126 #else
127         PyArray_SetBaseObject(xaa,capx);
128         PyArray_SetBaseObject(yaa,capy);
129         PyArray_SetBaseObject(xpaa,capxp);
130         PyArray_SetBaseObject(ypaa,capyp);
131 #endif
132         args = PyTuple_Pack(6,no,xa,xpa,mo,ya,ypa);
133         rc = pyobj->fos_forward(args);
134         if (PyErr_Occurred()) rc = -1;
135         Py_DECREF(args);
136         Py_DECREF(xaa);
137         Py_DECREF(yaa);
138         Py_DECREF(xpaa);
139         Py_DECREF(ypaa);
140         Py_DECREF(no);
141         Py_DECREF(mo);
142         return rc;
143     }
fov_forward(int n,double * x,int p,double ** Xp,int m,double * y,double ** Yp)144     int fov_forward(int n, double *x, int p, double **Xp, int m, double *y, double **Yp) {
145         PyObject* args = NULL;
146         int rc;
147         npy_intp in[1] = { n }, out[1] = { m };
148         npy_intp inp[2] = { n,p }, outp[2] = { m,p };
149         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
150         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
151         PyObject* xpa = PyArray_SimpleNewFromData(2,inp,NPY_DOUBLE,(void*)&Xp[0][0]);
152         PyObject* ypa = PyArray_SimpleNewFromData(2,outp,NPY_DOUBLE,(void*)&Yp[0][0]);
153         PyObject* no = PyInt_FromLong((long int)n);
154         PyObject* mo = PyInt_FromLong((long int)m);
155         PyObject* po = PyInt_FromLong((long int)p);
156         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
157         PyArrayObject *xpaa = (PyArrayObject*) xpa, *ypaa = (PyArrayObject*) ypa;
158 #ifdef SWIGPY_USE_CAPSULE
159         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
160         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
161         PyObject* capxp = PyCapsule_New((void*)(Xp), SWIGPY_CAPSULE_NAME, NULL);
162         PyObject* capyp = PyCapsule_New((void*)(Yp), SWIGPY_CAPSULE_NAME, NULL);
163 #else
164         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
165         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
166         PyObject* capxp = PyCObject_FromVoidPtr((void*)(Xp), NULL);
167         PyObject* capyp = PyCObject_FromVoidPtr((void*)(Yp), NULL);
168 #endif
169 #if NPY_API_VERSION < 0x00000007
170         PyArray_BASE(xaa) = capx;
171         PyArray_BASE(yaa) = capy;
172         PyArray_BASE(xpaa) = capxp;
173         PyArray_BASE(ypaa) = capyp;
174 #else
175         PyArray_SetBaseObject(xaa,capx);
176         PyArray_SetBaseObject(yaa,capy);
177         PyArray_SetBaseObject(xpaa,capxp);
178         PyArray_SetBaseObject(ypaa,capyp);
179 #endif
180         args = PyTuple_Pack(7,no,xa,po,xpa,mo,ya,ypa);
181         rc = pyobj->fov_forward(args);
182         if (PyErr_Occurred()) rc = -1;
183         Py_DECREF(args);
184         Py_DECREF(xaa);
185         Py_DECREF(yaa);
186         Py_DECREF(xpaa);
187         Py_DECREF(ypaa);
188         Py_DECREF(no);
189         Py_DECREF(mo);
190         Py_DECREF(po);
191         return rc;
192     }
fos_reverse(int m,double * U,int n,double * Z,double * x,double * y)193     int fos_reverse(int m, double *U, int n, double *Z, double *x, double *y) {
194         PyObject* args = NULL;
195         int rc;
196         npy_intp in[1] = { n }, out[1] = { m };
197         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
198         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
199         PyObject* ua = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)U);
200         PyObject* za = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)Z);
201         PyObject* no = PyInt_FromLong((long int)n);
202         PyObject* mo = PyInt_FromLong((long int)m);
203         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
204         PyArrayObject *uaa = (PyArrayObject*) ua, *zaa = (PyArrayObject*) za;
205 #ifdef SWIGPY_USE_CAPSULE
206         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
207         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
208         PyObject* capu = PyCapsule_New((void*)(U), SWIGPY_CAPSULE_NAME, NULL);
209         PyObject* capz = PyCapsule_New((void*)(Z), SWIGPY_CAPSULE_NAME, NULL);
210 #else
211         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
212         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
213         PyObject* capu = PyCObject_FromVoidPtr((void*)(U), NULL);
214         PyObject* capz = PyCObject_FromVoidPtr((void*)(Z), NULL);
215 #endif
216 #if NPY_API_VERSION < 0x00000007
217         PyArray_BASE(xaa) = capx;
218         PyArray_BASE(yaa) = capy;
219         PyArray_BASE(uaa) = capu;
220         PyArray_BASE(zaa) = capz;
221 #else
222         PyArray_SetBaseObject(xaa,capx);
223         PyArray_SetBaseObject(yaa,capy);
224         PyArray_SetBaseObject(uaa,capu);
225         PyArray_SetBaseObject(zaa,capz);
226 #endif
227         args = PyTuple_Pack(6,mo,ua,no,za,xa,ya);
228         rc = pyobj->fos_reverse(args);
229         if (PyErr_Occurred()) rc = -1;
230         Py_DECREF(args);
231         Py_DECREF(xaa);
232         Py_DECREF(yaa);
233         Py_DECREF(uaa);
234         Py_DECREF(zaa);
235         Py_DECREF(no);
236         Py_DECREF(mo);
237         return rc;
238     }
fov_reverse(int m,int q,double ** U,int n,double ** Z,double * x,double * y)239     int fov_reverse(int m, int q, double **U, int n, double **Z, double *x, double *y) {
240         PyObject* args = NULL;
241         int rc;
242         npy_intp in[1] = { n }, out[1] = { m };
243         npy_intp inq[2] = { n,q }, outq[2] = { m,q };
244         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
245         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
246         PyObject* ua = PyArray_SimpleNewFromData(1,outq,NPY_DOUBLE,(void*)&U[0][0]);
247         PyObject* za = PyArray_SimpleNewFromData(1,inq,NPY_DOUBLE,(void*)&Z[0][0]);
248         PyObject* no = PyInt_FromLong((long int)n);
249         PyObject* mo = PyInt_FromLong((long int)m);
250         PyObject* qo = PyInt_FromLong((long int)q);
251         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
252         PyArrayObject *uaa = (PyArrayObject*) ua, *zaa = (PyArrayObject*) za;
253 #ifdef SWIGPY_USE_CAPSULE
254         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
255         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
256         PyObject* capu = PyCapsule_New((void*)(U), SWIGPY_CAPSULE_NAME, NULL);
257         PyObject* capz = PyCapsule_New((void*)(Z), SWIGPY_CAPSULE_NAME, NULL);
258 #else
259         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
260         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
261         PyObject* capu = PyCObject_FromVoidPtr((void*)(U), NULL);
262         PyObject* capz = PyCObject_FromVoidPtr((void*)(Z), NULL);
263 #endif
264 #if NPY_API_VERSION < 0x00000007
265         PyArray_BASE(xaa) = capx;
266         PyArray_BASE(yaa) = capy;
267         PyArray_BASE(uaa) = capu;
268         PyArray_BASE(zaa) = capz;
269 #else
270         PyArray_SetBaseObject(xaa,capx);
271         PyArray_SetBaseObject(yaa,capy);
272         PyArray_SetBaseObject(uaa,capu);
273         PyArray_SetBaseObject(zaa,capz);
274 #endif
275         args = PyTuple_Pack(7,mo,qo,ua,no,za,xa,ya);
276         rc = pyobj->fov_reverse(args);
277         if (PyErr_Occurred()) rc = -1;
278         Py_DECREF(args);
279         Py_DECREF(xaa);
280         Py_DECREF(yaa);
281         Py_DECREF(uaa);
282         Py_DECREF(zaa);
283         Py_DECREF(no);
284         Py_DECREF(mo);
285         Py_DECREF(qo);
286         return rc;
287     }
call(int n,adouble * xa,int m,adouble * ya)288     int call(int n, adouble *xa, int m, adouble *ya) {
289         return EDFobject::call(n,xa,m,ya);
290     }
call(int n,advector & x,int m,advector & y)291     int call(int n, advector& x, int m, advector& y) {
292         return EDFobject::call(n,x,m,y);
293     }
294 };
295 
PyEDF()296 PyEDF::PyEDF() {
297      cobj = new PyEDFwrap();
298      cobj->setPyObj(this);
299 }
300 
~PyEDF()301 PyEDF::~PyEDF() {
302     delete cobj;
303 }
304 
call(int n,adouble * xa,int m,adouble * ya)305 int PyEDF::call(int n, adouble *xa, int m, adouble *ya) {
306     return cobj->call(n,xa,m,ya);
307 }
call(int n,advector & x,int m,advector & y)308 int PyEDF::call(int n, advector& x, int m, advector& y) {
309     return cobj->call(n,x,m,y);
310 }
311 
312 class PyEDF_iArr_wrap : public EDFobject_iArr {
313 protected:
314     PyEDF_iArr* pyobj;
315 public:
PyEDF_iArr_wrap()316     PyEDF_iArr_wrap() : EDFobject_iArr() {}
~PyEDF_iArr_wrap()317     virtual ~PyEDF_iArr_wrap() {}
setPyObj(PyEDF_iArr * o)318     void setPyObj(PyEDF_iArr* o) { pyobj = o; }
function(int iArrLen,int * iArr,int n,double * x,int m,double * y)319     int function(int iArrLen, int* iArr, int n, double *x, int m, double* y) {
320         PyObject* args = NULL;
321         int rc;
322         npy_intp in[1] = { n }, out[1] = { m }, arrsz[1] =  { iArrLen };
323         PyObject* iar = PyArray_SimpleNewFromData(1,arrsz,NPY_INT,(void*)iArr);
324         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
325         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
326         PyObject* no = PyInt_FromLong((long int)n);
327         PyObject* mo = PyInt_FromLong((long int)m);
328         PyObject* ial = PyInt_FromLong((long int)iArrLen);
329         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
330         PyArrayObject *iara = (PyArrayObject*) iar;
331 #ifdef SWIGPY_USE_CAPSULE
332         PyObject* capiar = PyCapsule_New((void*)(iArr), SWIGPY_CAPSULE_NAME, NULL);
333         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
334         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
335 #else
336         PyObject* capiar = PyCObject_FromVoidPtr((void*)(iArr), NULL);
337         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
338         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
339 #endif
340 #if NPY_API_VERSION < 0x00000007
341         PyArray_BASE(iara) = capiar;
342         PyArray_BASE(xaa) = capx;
343         PyArray_BASE(yaa) = capy;
344 #else
345         PyArray_SetBaseObject(iara,capiar);
346         PyArray_SetBaseObject(xaa,capx);
347         PyArray_SetBaseObject(yaa,capy);
348 #endif
349         //args = Py_BuildValue("OOOO:PyEDFobject_function",no,xa,mo,ya);
350         args = PyTuple_Pack(6,ial,iar,no,xa,mo,ya);
351         rc = pyobj->function(args);
352         if (PyErr_Occurred()) rc = -1;
353         Py_DECREF(args);
354         Py_DECREF(iara);
355         Py_DECREF(xaa);
356         Py_DECREF(yaa);
357         Py_DECREF(no);
358         Py_DECREF(mo);
359         Py_DECREF(ial);
360         return rc;
361     }
zos_forward(int iArrLen,int * iArr,int n,double * x,int m,double * y)362     int zos_forward(int iArrLen, int* iArr, int n, double *x, int m, double* y) {
363         PyObject* args = NULL;
364         int rc;
365         npy_intp in[1] = { n }, out[1] = { m }, arrsz[1] =  { iArrLen };
366         PyObject* iar = PyArray_SimpleNewFromData(1,arrsz,NPY_INT,(void*)iArr);
367         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
368         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
369         PyObject* no = PyInt_FromLong((long int)n);
370         PyObject* mo = PyInt_FromLong((long int)m);
371         PyObject* ial = PyInt_FromLong((long int)iArrLen);
372         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
373         PyArrayObject *iara = (PyArrayObject*) iar;
374 #ifdef SWIGPY_USE_CAPSULE
375         PyObject* capiar = PyCapsule_New((void*)(iArr), SWIGPY_CAPSULE_NAME, NULL);
376         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
377         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
378 #else
379         PyObject* capiar = PyCObject_FromVoidPtr((void*)(iArr), NULL);
380         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
381         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
382 #endif
383 #if NPY_API_VERSION < 0x00000007
384         PyArray_BASE(iara) = capiar;
385         PyArray_BASE(xaa) = capx;
386         PyArray_BASE(yaa) = capy;
387 #else
388         PyArray_SetBaseObject(iara,capiar);
389         PyArray_SetBaseObject(xaa,capx);
390         PyArray_SetBaseObject(yaa,capy);
391 #endif
392         //args = Py_BuildValue("OOOO:PyEDFobject_function",no,xa,mo,ya);
393         args = PyTuple_Pack(6,ial,iar,no,xa,mo,ya);
394         rc = pyobj->zos_forward(args);
395         if (PyErr_Occurred()) rc = -1;
396         Py_DECREF(args);
397         Py_DECREF(iara);
398         Py_DECREF(xaa);
399         Py_DECREF(yaa);
400         Py_DECREF(no);
401         Py_DECREF(mo);
402         Py_DECREF(ial);
403         return rc;
404     }
fos_forward(int iArrLen,int * iArr,int n,double * x,double * xp,int m,double * y,double * yp)405     int fos_forward(int iArrLen, int* iArr, int n, double *x, double *xp, int m, double *y, double *yp) {
406         PyObject* args = NULL;
407         int rc;
408         npy_intp in[1] = { n }, out[1] = { m }, arrsz[1] =  { iArrLen };
409         PyObject* iar = PyArray_SimpleNewFromData(1,arrsz,NPY_INT,(void*)iArr);
410         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
411         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
412         PyObject* xpa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)xp);
413         PyObject* ypa = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)yp);
414         PyObject* no = PyInt_FromLong((long int)n);
415         PyObject* mo = PyInt_FromLong((long int)m);
416         PyObject* ial = PyInt_FromLong((long int)iArrLen);
417         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
418         PyArrayObject *xpaa = (PyArrayObject*) xpa, *ypaa = (PyArrayObject*) ypa;
419         PyArrayObject *iara = (PyArrayObject*) iar;
420 #ifdef SWIGPY_USE_CAPSULE
421         PyObject* capiar = PyCapsule_New((void*)(iArr), SWIGPY_CAPSULE_NAME, NULL);
422         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
423         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
424         PyObject* capxp = PyCapsule_New((void*)(xp), SWIGPY_CAPSULE_NAME, NULL);
425         PyObject* capyp = PyCapsule_New((void*)(yp), SWIGPY_CAPSULE_NAME, NULL);
426 #else
427         PyObject* capiar = PyCObject_FromVoidPtr((void*)(iArr), NULL);
428         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
429         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
430         PyObject* capxp = PyCObject_FromVoidPtr((void*)(xp), NULL);
431         PyObject* capyp = PyCObject_FromVoidPtr((void*)(yp), NULL);
432 #endif
433 #if NPY_API_VERSION < 0x00000007
434         PyArray_BASE(iara) = capiar;
435         PyArray_BASE(xaa) = capx;
436         PyArray_BASE(yaa) = capy;
437         PyArray_BASE(xpaa) = capxp;
438         PyArray_BASE(ypaa) = capyp;
439 #else
440         PyArray_SetBaseObject(iara,capiar);
441         PyArray_SetBaseObject(xaa,capx);
442         PyArray_SetBaseObject(yaa,capy);
443         PyArray_SetBaseObject(xpaa,capxp);
444         PyArray_SetBaseObject(ypaa,capyp);
445 #endif
446         args = PyTuple_Pack(8,ial,iar,no,xa,xpa,mo,ya,ypa);
447         rc = pyobj->fos_forward(args);
448         if (PyErr_Occurred()) rc = -1;
449         Py_DECREF(args);
450         Py_DECREF(iara);
451         Py_DECREF(xaa);
452         Py_DECREF(yaa);
453         Py_DECREF(xpaa);
454         Py_DECREF(ypaa);
455         Py_DECREF(no);
456         Py_DECREF(mo);
457         Py_DECREF(ial);
458         return rc;
459     }
fov_forward(int iArrLen,int * iArr,int n,double * x,int p,double ** Xp,int m,double * y,double ** Yp)460     int fov_forward(int iArrLen, int* iArr, int n, double *x, int p, double **Xp, int m, double *y, double **Yp) {
461         PyObject* args = NULL;
462         int rc;
463         npy_intp in[1] = { n }, out[1] = { m }, arrsz[1] =  { iArrLen };
464         npy_intp inp[2] = { n,p }, outp[2] = { m,p };
465         PyObject* iar = PyArray_SimpleNewFromData(1,arrsz,NPY_INT,(void*)iArr);
466         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
467         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
468         PyObject* xpa = PyArray_SimpleNewFromData(2,inp,NPY_DOUBLE,(void*)&Xp[0][0]);
469         PyObject* ypa = PyArray_SimpleNewFromData(2,outp,NPY_DOUBLE,(void*)&Yp[0][0]);
470         PyObject* no = PyInt_FromLong((long int)n);
471         PyObject* mo = PyInt_FromLong((long int)m);
472         PyObject* po = PyInt_FromLong((long int)p);
473         PyObject* ial = PyInt_FromLong((long int)iArrLen);
474         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
475         PyArrayObject *xpaa = (PyArrayObject*) xpa, *ypaa = (PyArrayObject*) ypa;
476         PyArrayObject *iara = (PyArrayObject*) iar;
477 #ifdef SWIGPY_USE_CAPSULE
478         PyObject* capiar = PyCapsule_New((void*)(iArr), SWIGPY_CAPSULE_NAME, NULL);
479         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
480         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
481         PyObject* capxp = PyCapsule_New((void*)(Xp), SWIGPY_CAPSULE_NAME, NULL);
482         PyObject* capyp = PyCapsule_New((void*)(Yp), SWIGPY_CAPSULE_NAME, NULL);
483 #else
484         PyObject* capiar = PyCObject_FromVoidPtr((void*)(iArr), NULL);
485         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
486         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
487         PyObject* capxp = PyCObject_FromVoidPtr((void*)(Xp), NULL);
488         PyObject* capyp = PyCObject_FromVoidPtr((void*)(Yp), NULL);
489 #endif
490 #if NPY_API_VERSION < 0x00000007
491         PyArray_BASE(iara) = capiar;
492         PyArray_BASE(xaa) = capx;
493         PyArray_BASE(yaa) = capy;
494         PyArray_BASE(xpaa) = capxp;
495         PyArray_BASE(ypaa) = capyp;
496 #else
497         PyArray_SetBaseObject(iara,capiar);
498         PyArray_SetBaseObject(xaa,capx);
499         PyArray_SetBaseObject(yaa,capy);
500         PyArray_SetBaseObject(xpaa,capxp);
501         PyArray_SetBaseObject(ypaa,capyp);
502 #endif
503         args = PyTuple_Pack(9,ial,iar,no,xa,po,xpa,mo,ya,ypa);
504         rc = pyobj->fov_forward(args);
505         if (PyErr_Occurred()) rc = -1;
506         Py_DECREF(args);
507         Py_DECREF(iara);
508         Py_DECREF(xaa);
509         Py_DECREF(yaa);
510         Py_DECREF(xpaa);
511         Py_DECREF(ypaa);
512         Py_DECREF(no);
513         Py_DECREF(mo);
514         Py_DECREF(po);
515         Py_DECREF(ial);
516         return rc;
517     }
fos_reverse(int iArrLen,int * iArr,int m,double * U,int n,double * Z,double * x,double * y)518     int fos_reverse(int iArrLen, int* iArr, int m, double *U, int n, double *Z, double *x, double *y) {
519         PyObject* args = NULL;
520         int rc;
521         npy_intp in[1] = { n }, out[1] = { m }, arrsz[1] =  { iArrLen };
522         PyObject* iar = PyArray_SimpleNewFromData(1,arrsz,NPY_INT,(void*)iArr);
523         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
524         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
525         PyObject* ua = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)U);
526         PyObject* za = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)Z);
527         PyObject* no = PyInt_FromLong((long int)n);
528         PyObject* mo = PyInt_FromLong((long int)m);
529         PyObject* ial = PyInt_FromLong((long int)iArrLen);
530         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
531         PyArrayObject *uaa = (PyArrayObject*) ua, *zaa = (PyArrayObject*) za;
532         PyArrayObject *iara = (PyArrayObject*) iar;
533 #ifdef SWIGPY_USE_CAPSULE
534         PyObject* capiar = PyCapsule_New((void*)(iArr), SWIGPY_CAPSULE_NAME, NULL);
535         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
536         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
537         PyObject* capu = PyCapsule_New((void*)(U), SWIGPY_CAPSULE_NAME, NULL);
538         PyObject* capz = PyCapsule_New((void*)(Z), SWIGPY_CAPSULE_NAME, NULL);
539 #else
540         PyObject* capiar = PyCObject_FromVoidPtr((void*)(iArr), NULL);
541         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
542         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
543         PyObject* capu = PyCObject_FromVoidPtr((void*)(U), NULL);
544         PyObject* capz = PyCObject_FromVoidPtr((void*)(Z), NULL);
545 #endif
546 #if NPY_API_VERSION < 0x00000007
547         PyArray_BASE(iara) = capiar;
548         PyArray_BASE(xaa) = capx;
549         PyArray_BASE(yaa) = capy;
550         PyArray_BASE(uaa) = capu;
551         PyArray_BASE(zaa) = capz;
552 #else
553         PyArray_SetBaseObject(iara,capiar);
554         PyArray_SetBaseObject(xaa,capx);
555         PyArray_SetBaseObject(yaa,capy);
556         PyArray_SetBaseObject(uaa,capu);
557         PyArray_SetBaseObject(zaa,capz);
558 #endif
559         args = PyTuple_Pack(8,ial,iar,mo,ua,no,za,xa,ya);
560         rc = pyobj->fos_reverse(args);
561         if (PyErr_Occurred()) rc = -1;
562         Py_DECREF(args);
563         Py_DECREF(iara);
564         Py_DECREF(xaa);
565         Py_DECREF(yaa);
566         Py_DECREF(uaa);
567         Py_DECREF(zaa);
568         Py_DECREF(no);
569         Py_DECREF(mo);
570         Py_DECREF(ial);
571         return rc;
572     }
fov_reverse(int iArrLen,int * iArr,int m,int q,double ** U,int n,double ** Z,double * x,double * y)573     int fov_reverse(int iArrLen, int* iArr, int m, int q, double **U, int n, double **Z, double *x, double *y) {
574         PyObject* args = NULL;
575         int rc;
576         npy_intp in[1] = { n }, out[1] = { m }, arrsz[1] =  { iArrLen };
577         npy_intp inq[2] = { n,q }, outq[2] = { m,q };
578         PyObject* iar = PyArray_SimpleNewFromData(1,arrsz,NPY_INT,(void*)iArr);
579         PyObject* xa = PyArray_SimpleNewFromData(1,in,NPY_DOUBLE,(void*)x);
580         PyObject* ya = PyArray_SimpleNewFromData(1,out,NPY_DOUBLE,(void*)y);
581         PyObject* ua = PyArray_SimpleNewFromData(1,outq,NPY_DOUBLE,(void*)&U[0][0]);
582         PyObject* za = PyArray_SimpleNewFromData(1,inq,NPY_DOUBLE,(void*)&Z[0][0]);
583         PyObject* no = PyInt_FromLong((long int)n);
584         PyObject* mo = PyInt_FromLong((long int)m);
585         PyObject* qo = PyInt_FromLong((long int)q);
586         PyObject* ial = PyInt_FromLong((long int)iArrLen);
587         PyArrayObject *xaa = (PyArrayObject*) xa, *yaa = (PyArrayObject*) ya;
588         PyArrayObject *uaa = (PyArrayObject*) ua, *zaa = (PyArrayObject*) za;
589         PyArrayObject *iara = (PyArrayObject*) iar;
590 #ifdef SWIGPY_USE_CAPSULE
591         PyObject* capiar = PyCapsule_New((void*)(iArr), SWIGPY_CAPSULE_NAME, NULL);
592         PyObject* capx = PyCapsule_New((void*)(x), SWIGPY_CAPSULE_NAME, NULL);
593         PyObject* capy = PyCapsule_New((void*)(y), SWIGPY_CAPSULE_NAME, NULL);
594         PyObject* capu = PyCapsule_New((void*)(U), SWIGPY_CAPSULE_NAME, NULL);
595         PyObject* capz = PyCapsule_New((void*)(Z), SWIGPY_CAPSULE_NAME, NULL);
596 #else
597         PyObject* capiar = PyCObject_FromVoidPtr((void*)(iArr), NULL);
598         PyObject* capx = PyCObject_FromVoidPtr((void*)(x), NULL);
599         PyObject* capy = PyCObject_FromVoidPtr((void*)(y), NULL);
600         PyObject* capu = PyCObject_FromVoidPtr((void*)(U), NULL);
601         PyObject* capz = PyCObject_FromVoidPtr((void*)(Z), NULL);
602 #endif
603 #if NPY_API_VERSION < 0x00000007
604         PyArray_BASE(iara) = capiar;
605         PyArray_BASE(xaa) = capx;
606         PyArray_BASE(yaa) = capy;
607         PyArray_BASE(uaa) = capu;
608         PyArray_BASE(zaa) = capz;
609 #else
610         PyArray_SetBaseObject(iara,capiar);
611         PyArray_SetBaseObject(xaa,capx);
612         PyArray_SetBaseObject(yaa,capy);
613         PyArray_SetBaseObject(uaa,capu);
614         PyArray_SetBaseObject(zaa,capz);
615 #endif
616         args = PyTuple_Pack(9,ial,iar,mo,qo,ua,no,za,xa,ya);
617         rc = pyobj->fov_reverse(args);
618         if (PyErr_Occurred()) rc = -1;
619         Py_DECREF(args);
620         Py_DECREF(iara);
621         Py_DECREF(xaa);
622         Py_DECREF(yaa);
623         Py_DECREF(uaa);
624         Py_DECREF(zaa);
625         Py_DECREF(no);
626         Py_DECREF(mo);
627         Py_DECREF(qo);
628         Py_DECREF(ial);
629         return rc;
630     }
call(int iArrLen,int * iArr,int n,adouble * xa,int m,adouble * ya)631     int call(int iArrLen, int* iArr, int n, adouble *xa, int m, adouble *ya) {
632         return EDFobject_iArr::call(iArrLen,iArr,n,xa,m,ya);
633     }
call(int iArrLen,int * iArr,int n,advector & x,int m,advector & y)634     int call(int iArrLen, int* iArr, int n, advector& x, int m, advector& y) {
635         return EDFobject_iArr::call(iArrLen,iArr,n,x,m,y);
636     }
call(int iArrLen,PyObject * pyarr,int n,advector & x,int m,advector & y)637     int call(int iArrLen, PyObject* pyarr, int n, advector& x, int m, advector& y) {
638         int rc;
639         PyArrayObject *array2 = NULL;
640         int is_new_object2 = 0;
641         npy_intp size[1] = {
642             iArrLen
643         };
644         int *iArr = NULL;
645         array2 = obj_to_array_contiguous_allow_conversion(pyarr,
646                                                           NPY_INT,
647                                                           &is_new_object2);
648         if (!array2 || !require_dimensions(array2, 1) ||
649             !require_size(array2, size, 1)) SWIG_fail;
650         iArr = (int*) array_data(array2);
651         rc = call(iArrLen,iArr,n,x,m,y);
652         if (is_new_object2 && array2) {
653             Py_DECREF(array2);
654         }
655         return rc;
656     fail:
657         if (is_new_object2 && array2) {
658             Py_DECREF(array2);
659         }
660         return -1;
661     }
662 };
663 
PyEDF_iArr()664 PyEDF_iArr::PyEDF_iArr() {
665     cobj = new PyEDF_iArr_wrap();
666     cobj->setPyObj(this);
667 }
668 
~PyEDF_iArr()669 PyEDF_iArr::~PyEDF_iArr() {
670     delete cobj;
671 }
672 
call(int iArrLen,int * iArr,int n,adouble * xa,int m,adouble * ya)673 int PyEDF_iArr::call(int iArrLen, int* iArr, int n, adouble *xa, int m, adouble *ya) {
674     return cobj->call(iArrLen,iArr,n,xa,m,ya);
675 }
call(int iArrLen,int * iArr,int n,advector & x,int m,advector & y)676 int PyEDF_iArr::call(int iArrLen, int* iArr, int n, advector& x, int m, advector& y) {
677     return cobj->call(iArrLen,iArr,n,x,m,y);
678 }
call(int iArrLen,PyObject * pyarr,int n,advector & x,int m,advector & y)679 int PyEDF_iArr::call(int iArrLen, PyObject* pyarr, int n, advector& x, int m, advector& y) {
680     int rc;
681     PyArrayObject *array2 = NULL;
682     int is_new_object2 = 0;
683     npy_intp size[1] = {
684         iArrLen
685     };
686     int *iArr = NULL;
687     array2 = obj_to_array_contiguous_allow_conversion(pyarr,
688                                                       NPY_INT,
689                                                       &is_new_object2);
690     if (!array2 || !require_dimensions(array2, 1) ||
691         !require_size(array2, size, 1)) SWIG_fail;
692     iArr = (int*) array_data(array2);
693     rc = cobj->call(iArrLen,iArr,n,x,m,y);
694     if (is_new_object2 && array2) {
695         Py_DECREF(array2);
696     }
697     return rc;
698   fail:
699     if (is_new_object2 && array2) {
700         Py_DECREF(array2);
701     }
702     return -1;
703 }
704 
705 #endif
706