Convert-XY: Type-Safe Interchange of C++ and Python Containers for NumPy Extensions

Convert-XY: Type-Safe Interchange of C++ and Python Containers for NumPy Extensions Damian Eads1,3 and Edward Rosten2 1. Department of Computer Scienc...
Author: Bruno Arnold
3 downloads 2 Views 3MB Size
Convert-XY: Type-Safe Interchange of C++ and Python Containers for NumPy Extensions Damian Eads1,3 and Edward Rosten2 1. Department of Computer Science, University of California, Santa Cruz 2. Department of Engineering, University of Cambridge 3. Los Alamos National Laboratory

Friday, August 21, 2009

Why extensions? Why not do it all in Python? • Prefer pure python

• Why C/C++?

• easy prototyping

• can’t always vectorize (e.g. DP)

• vectorized: very fast

• can’t express and need speed

• succinct: readable, maintainable • NumPy array broadcasting • dynamic typing: check for type errors at run-time

• build new tools • extensions • Run-time type errors more painful • static typing: check for type errors at compile-time

Friday, August 21, 2009

What this talk is not about? • Not talking about • calling C++ functions from Python Python Code

• wrapping C++ classes • exposing Python from C++

MyCppFunction(x,y,z)

x y getX() getY() Attributes Methods Point Class

Calling C++ Functions

Wrapping C++ Classes

C++ Code Exposing Python Interface

• Not a comparison • Boost, PyCXX, Py++, SWIG, Cython, Weave, Python C API, ctypes

Friday, August 21, 2009

Interchanging Python and C++ containers in C++ • Assume we’re already in C++-space • Convert arbitrary Python containers to C++ containers and vice versa (e.g. big list of images).

C++

Python

map string

Friday, August 21, 2009

dictionary vector

string

list

Matrix

NDArray

float

Numpy Float

Examples of Containers • Standard Template Library containers • Canonical C arrays • LIBCVD: Cambridge Video Dynamics library (C++) • frame-rate real-time • hardware-exploitative

dimension mismatch 5x6 5x3

x

• large numbers of images

Missing Row

• TooN Linear Algebra Library (C++): • large numbers of small matrices • compile-time error checking

Friday, August 21, 2009

example.cpp Matrix A; Matrix B; cout

Suggest Documents