множественный ввод и вывод массива: SWIG C ++ на python

Я пытаюсь получить доступ к функции C ++ из Python, используя SWIG для упаковки. Функция использует два массива в качестве входных данных длины cL и другой как вывод некоторой меньшей длины. Файл SWIG .i:

%module polcvx
%include "typemaps.i"%apply int *INPUT {int *cL};
%typemap(in) float r[cL] (float temp[cL]) {
int i;
if (!PySequence_Check($input)) {
PyErr_SetString(PyExc_ValueError, "Expected a sequence");
SWIG_fail;
}
if (PySequence_Length($input) != cL) {
PyErr_SetString(PyExc_ValueError, "Size mismatch. Expected more or less elements than 4th argument");
SWIG_fail;
}
for (i = 0; i < cL; i++) {
PyObject *o = PySequence_GetItem($input, i);
}
$1 = temp;
}
%typemap(in) float t[cL] (float temp1[cL]) {
int i;
if (!PySequence_Check($input)) {
PyErr_SetString(PyExc_ValueError, "Expected a sequence");
SWIG_fail;
}
if (PySequence_Length($input) != cL) {
PyErr_SetString(PyExc_ValueError, "Size mismatch. Expected more or less elements than 4th argument");
SWIG_fail;
}
for (i = 0; i < cL; i++) {
PyObject *o = PySequence_GetItem($input, i);
}
$2  = temp1;
}
%typemap(in, numinputs=0) int *hull[ANY] (int temp2[ANY]) {
$3 = &temp2;
}
%typemap(argout) int *hull[ANY] {
int i;
$result = PyList_New($3_dim0);
for (i = 0; i < $3_dim0; i++) {
PyObject *o = PyFloat_FromDouble((double) $3[i]);
PyList_SetItem($result, i, o);
}
}
%{
#define SWIG_FILE_WITH_INIT
#include "cvxp.hpp"%}
int cvx( int hull[],float r[], float t[], int cL);

и реализован в Python как

import _polcvx
rad=[10,5,2,20,15,7,10,45,12]
theta=[0.5236   , 0.7854 ,   1.5708  ,  2.6180 ,   2.9671   , 3.3161  ,  4.0143   , 4.7124  ,  6.1087]
l=len(rad)
ls=[]
i=_polcvx.cvx(5,rad2,theta,l)

Я получаю ошибку в Python

Traceback (most recent call last):
File "E:\Hull\cpp and py conversion\CvxPolar.py", line 65, in <module>
i=_polcvx.cvx(ls,rad2,theta,l)
TypeError: in method 'cvx', argument 1 of type 'int []'

Поскольку функция использует указатель для доступа к переменной массива, не могу определить правильную конфигурацию, которая должна быть сделана в файле .i.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]