[Numpy-discussion] A C++ library and the new array interface: the best approach?

Fernando Perez Fernando.Perez at colorado.edu
Mon Jul 3 17:41:11 CDT 2006


Hi all,

I'd like to ask for a bit of guidance on the best path to follow regarding the 
integration of an existing C++ library with numpy, given the recent 
developments on these topics:

1. the new array interface specification
2. the ctypes discussions
3. pyrex

Our situation is the following: an existing in-house C++ library defines a 
templated class (Tensor), in many ways similar to a numpy array, but with its 
own extra functionality for other things.  There are many functions in this 
code which take or return Tensors.  I now need to interface this library with 
a Python code which is fully numpy-based, and hopefully be able to go back and 
forth between the C++ and python sides without unnecessary copies.

Since the C++ codebase is somewhat large and already exists, and will continue 
to evolve as a standalone C++ system, something tells me I should just bite 
the typemap bullet and SWIG the darn thing.  But I've never written anything 
beyond the most trivial typemaps, and I'm not 100% sure on exactly how to take 
advantage of the new array interface with SWIG.  I read all the docs under

  - http://svn.scipy.org/svn/PEP

  - http://www.scipy.org/BaseArray

  - http://numeric.scipy.org/array_interface.html

  - the pyrex/array interface wiki pages (the site is not responding right 
now, so I can't give a URL)


but my lack of familiarity with all the details of new type creation got me a 
bit lost.  I'm sure the information I need is all there, but right now I don't 
really see the forest with all the leaves in my face.  I've also read the 
various recent threads on ctypes, as well was the one initiated by Joris:

http://article.gmane.org/gmane.comp.python.numeric.general/6296


So I'd like to know if SWIG is really the best way out in this particular case 
(and any advice on taking advantage of the array interface via SWIG would be 
appreciated), or if ctypes or pyrex could be used here.  I'm quite happy using 
pyrex in other contexts, but I know it doesn't directly support C++.  However, 
since I have access to all the code, perhaps a pure C layer could be used to 
bridge the C++/pyrex gap.  Or given the recent praise for ctypes, perhaps that 
can be an option?

Any advice will be greatly appreciated.

Best,

f




More information about the Numpy-discussion mailing list