Articles of Swig

Cómo manejar unique_ptr’s con SWIG

Tengo una clase EventDispatcher que implementa el patrón de publicación-suscripción. Su interfaz se ve algo como esto (simplificado): class EventDispatcher { public: void publish(const std::string& event_name, std::unique_ptr event); std::unique_ptr subscribe(const std::string& event_name, std::unique_ptr callback); private: std::unordered_map<std::string, std::vector<std::unique_ptr>> m_subscriptions; } Quiero exponer esta clase a Python. La última documentación de SWIG establece que: No hay un […]

SWIG envolviendo C ++ para Python: traduciendo una lista de cadenas a un vector STL de cadenas STL

Me gustaría envolver una función C ++ con SWIG que acepte un vector de cadenas STL como un argumento de entrada: #include #include #include using namespace std; void print_function(vector strs) { for (unsigned int i=0; i < strs.size(); i++) cout << strs[i] << endl; } Quiero envolver esto en una función de Python disponible en […]

¿Cómo cambio la versión de python en Maya 2013?

Mi objective es escribir un script de python en Maya 2013 que use una biblioteca pyd envuelta en SWIG que se comstack usando Python 2.7. No puedo reconstruir el pyd en Python 2.6.4, que es la versión a la que está vinculado Maya. Maya por supuesto luego da este error. Module use of python27.dll conflicts […]

¿Es posible dividir un módulo SWIG para comstackción, pero volver a unirlo al vincular?

Me topé con este problema hace unos dos años, cuando implementé por primera vez nuestros enlaces SWIG. Tan pronto como expusimos una gran cantidad de código, llegamos al punto en que SWIG generaba archivos C ++ tan grandes que el comstackdor no podía manejarlos. La única forma de solucionar el problema era dividir las interfaces […]

Estructura de directorios para un proyecto que mezcla C ++ y Python.

Digamos que quieres crear un proyecto de progtwigción que mezcle C ++ y Python . La estructura del proyecto Foo C ++ usa CMake , y se crea un módulo Python utilizando Swig . La estructura del árbol se vería algo así: ├── CMakeLists.txt ├── FooConfig.cmake.in ├── FooConfigVersion.cmake.in ├── Makefile ├── README ├── foo │ […]

Exponer una instancia de clase de C ++ a un intérprete incorporado de python

Estoy buscando una forma sencilla de exponer una instancia de clase de C ++ a un intérprete incorporado de python. Tengo una biblioteca de C ++. Esta biblioteca está envuelta (usando un gulp por el momento) y puedo usarla desde el intérprete de python Tengo un progtwig principal de C ++ que crea una clase […]

Pasando una cadena a agege en agraph.py. Problema con networkx y pygraphviz

Dado este gráfico inicial: import networkx as nx G=nx.MultiGraph() fromnodes=[0,0,1,1,1,1,1,2,3,4,5,5,5,7,8,9,10] tonodes=[1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] dupedgeind=0 for x,y in zip(fromnodes,tonodes): if G.has_edge(x,y): dupedgeind=dupedgeind+1 G.add_edge(x,y,key=dupedgeind) else: dupedgeind=0 G.add_edge(x,y,key=dupedgeind) ¿Alguien puede recrear este error? pos=nx.nx_agraph.pygraphviz_layout(G,prog=’sfdp’) Traceback (most recent call last): File “”, line 1, in File “C:\Python27\lib\site-packages\networkx\drawing\nx_agraph.py”, line 262, in pygraphviz_layout A=to_agraph(G) File “C:\Python27\lib\site-packages\networkx\drawing\nx_agraph.py”, line 155, in to_agraph A.add_edge(u,v,key=str(key),**str_edgedata) File “C:\Python27\lib\site-packages\pygraphviz\agraph.py”, […]

¿Cómo Python puede obtener datos binarios (char *) de C ++ por SWIG?

Estoy usando funciones de C ++ en Python by SWIG, y ahora me encontré con un problema. Cuando paso un char * de C ++ a Python, el char * es truncado por Python. Por ejemplo: ejemplo.h: char * fun() { return “abc\0de”; } ahora en Python, llamamos example.fun () solo imprime “abc” en lugar […]

Cómo extender una clase de c ++ con plantilla en python con SWIG para permitir que el operador

Tengo una clase de matriz c ++ con plantilla que utiliza la clase de vector estándar: #include #include using namespace std; template class Array1D{ private: vector data_; int xsize_; public: Array1D(): xsize_(0) {}; // creates vector of size nx and sets each element to t Array1D(const int& nx, const T& t): xsize_(nx) { data_.resize(xsize_, t); […]

Liberar Python GIL mientras está en código C ++

Tengo una biblioteca escrita en C ++ que envuelvo con SWIG y la uso en python. Generalmente hay una clase con pocos métodos. El problema es que llamar a estos métodos puede llevar mucho tiempo, ya que pueden colgar mi aplicación (GIL no se libera al llamar a estos métodos) Así que mi pregunta es: […]