I want to call cdef function which takes cpp type as argument using python interpreter

Viewed 19

I'm generating different .pyx files and turning them to C++ .so libraries. So I got an example generatedLib.pyx like this:

from libcpp.vector cimport vector

def cinit(self): pass

cdef public void someFunction(vector[...]& inputs):
  ...

The public function always has same signature, except for the name. I somehow wanna call this public function using python interpreter because I prefer to write tests in Python rather than C++. I cannot do it directly of course. I cannot define this function as def as well since its parameter is of C++ vector type.

I have came up with an idea to have a wrapper function

def wrapperSomeFunction(input: list)
{
  # convert Python list to c++ vector
  someFunction(v)
  # convert c++ vector back to python list and return
}

I can import the generatedLib as python module and call this wrapper just fine, it requires however, to append it to my generatedFile.pyx file contents every time I wanna test it before I build it. I would rather look for alternative solutions.

Is there some way I can build a separate .pyx which will have this wrapper inside and will be able to call my generatedLib.so? Or perhaps something else I didn't think of?

0 Answers
Related