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