Skip to content

Latest commit

 

History

History
 
 

readme.md

Prerequisites

The bindings (and demonstration applications) should work well both for python2.7 and python3.4 (or higher), and across platforms.

(Currently only tested on Ubuntu 14.04 and OS X 10.10 with python3.4 and a Halide source build).

Python requirements:

See requirements.txt (to be used with pip: pip install --user requirements.txt)

C++ requirements:

Halide compiled (assuming halide_git_clone_path/build). For a better python experience make sure Halide was compiled with WITH_EXCEPTIONS Boost.python (already available in most boost distributions) Recommended (used for I/O): Boost.Numpy https://github.com/ndarray/Boost.NumPy

Compilation instructions

Build using:

  mkdir build
  cd build
  ccmake ..
  make 

Documentation and Examples

The Python API reflects directly the C++ Halide API. Consult the module documentation.

Check out the code for the example applications in the apps/ and tutorial/ subdirectory.

You can run them as a batch via:

    run_apps.sh
    run_tutorial.sh

To run these examples, make sure the PYTHONPATH environment variable points to your build directory (e.g. export PYTHONPATH=halide_source/python_bindings/build:$PYTHONPATH).

License

The Python bindings use the same MIT license as Halide.

Python bindings provided by Connelly Barnes (2012-2013), Fred Rotbart (2014), Rodrigo Benenson (2015) and the Halide open-source community.

Why did we move from SWIG to Boost.Python ?

Problems with (old) SWIG bindings:

  • P1) SWIG cannot parse C++15, and it will always lag
  • P2) Python code is not compiled/tested together with C++ codebase
  • P3) Albeit SWIG is ment to provide "automagic" conversion, current code base has explicit code for every class (and class member) of interest
  • P4) Old swig bindings __init__.py file has a lot of "python magic" to get things running, code is spread around multiple pieces (py_util.cpp, cHalide.i, and __init__.py)
  • P5) Old swig python bindings did not work anymore (swig issues, compilation issues)

The boost python approach helps because:

  • a) P1 is solved out of the box, since no C++ parsing is involved
  • b) P2 is mitigated since python bindings are also in C++. Any miss-match with generate a compilation error.
  • c) P3, P4 and P5 are expected to be handled by having less spaghetti and aiming for tighter integration with rest of code-base (point b)