Boost.Python NumPy extension
Hello, I'm happy to announce that I just merged the NumPy C++ wrappers from https://github.com/ndarray/Boost.NumPy into Boost.Python's development branch. (Online documentation for it can be browsed here: http://boostorg.github.io/python/develop/doc/html/numpy) I'd very much like to be able to merge this into the master branch for the next Boost release (version 1.63). At present I'm using SCons to build Boost.Python (stand-alone, against a separately installed Boost), which is also the infrastructure I use for CI testing (https://travis-ci.org/boostorg/python). I would like to ask for help with integrating the new NumPy extension into the Boost.Build-based build system, such that this will also be picked up by the regular Boost infrastructure. Please refer to https://github.com/boostorg/python/issues/89 if you'd like to help with this. Many thanks ! Stefan -- ...ich hab' noch einen Koffer in Berlin...
Cool! Sorry, I don't have the expertise to help with the boost.build aspect, but I did have some questions and comments regarding the feature. Does this add a dependency of boost.python on numpy? We'd love to be able to continue use boost.python without a numpy dependency. We did a nontrivial amount of work to remove this dependency in USD (openusd.org, https://github.com/PixarAnimationStudios/USD), a C++ library that provides python bindings via boost.python, so adding it back would be a problem for us. Instead of depending on numpy, we made our array structures implement the python buffer protocol. This lets clients that wish to use numpy do so easily, since numpy supports the buffer protocol, but it does not burden those that don't with the numpy dependency. We did this manually of course but supporting the buffer protocol would be a cool feature for boost.python. Alex On 10/8/16 9:21 PM, Stefan Seefeld wrote:
Hello,
I'm happy to announce that I just merged the NumPy C++ wrappers from https://github.com/ndarray/Boost.NumPy into Boost.Python's development branch. (Online documentation for it can be browsed here: http://boostorg.github.io/python/develop/doc/html/numpy)
I'd very much like to be able to merge this into the master branch for the next Boost release (version 1.63). At present I'm using SCons to build Boost.Python (stand-alone, against a separately installed Boost), which is also the infrastructure I use for CI testing (https://travis-ci.org/boostorg/python).
I would like to ask for help with integrating the new NumPy extension into the Boost.Build-based build system, such that this will also be picked up by the regular Boost infrastructure. Please refer to https://github.com/boostorg/python/issues/89 if you'd like to help with this.
Many thanks !
Stefan
Hi Alex, On 09.10.2016 00:40, Alex Mohr wrote:
Cool! Sorry, I don't have the expertise to help with the boost.build aspect, but I did have some questions and comments regarding the feature.
Does this add a dependency of boost.python on numpy? We'd love to be able to continue use boost.python without a numpy dependency. We did a nontrivial amount of work to remove this dependency in USD (openusd.org, https://github.com/PixarAnimationStudios/USD), a C++ library that provides python bindings via boost.python, so adding it back would be a problem for us.
Instead of depending on numpy, we made our array structures implement the python buffer protocol. This lets clients that wish to use numpy do so easily, since numpy supports the buffer protocol, but it does not burden those that don't with the numpy dependency. We did this manually of course but supporting the buffer protocol would be a cool feature for boost.python.
Short answer: The dependency on NumPy is only added to the extension (compiled into a separate library); Boost.Python without that extension remains exactly the same. Somewhat longer answer: it all depends how Boost.Python is installed. There is a configure flag to decide whether to build with or without NumPy support. Building with NumPy support will yield two libraries: libboost_python.so and libboost_numpy.so, so I expect downstream packagers to wrap both into separate packages. (The new headers are likewise kept separate for the same reason.) Stefan -- ...ich hab' noch einen Koffer in Berlin...
On Sun, Oct 9, 2016 at 12:40 AM, Alex Mohr <amohr@pixar.com> wrote:
Instead of depending on numpy, we made our array structures implement the python buffer protocol. This lets clients that wish to use numpy do so easily, since numpy supports the buffer protocol, but it does not burden those that don't with the numpy dependency. We did this manually of course but supporting the buffer protocol would be a cool feature for boost.python.
I think this is a very good idea - it wasn't available as an option back when these NumPy bindings were written, but it's certainly the way I'd recommend writing them now if we were starting over. That would also eliminate the need to call an initialization function in any Python modules that use the NumPy bindings - failure to do that is by far the most common problem people have in using the NumPy bindings. That said, I think it'd be a fair amount of work to rewrite most of the library's functionality with no NumPy dependency, and I think some parts of it - like constructing numpy.dtype objects that correspond to C++ types - would probably be impossible to do without access to the NumPy C API, so we'd have to remove some functionality as well. Jim
participants (3)
-
Alex Mohr -
Jim Bosch -
Stefan Seefeld