- 07 Sep, 2016 5 commits
-
-
Ivan Smirnov committed
-
Wenzel Jakob committed
-
Allow arbitrary class_ template option ordering
Wenzel Jakob committed -
Replace std::cout with py::print in tests
Wenzel Jakob committed -
This allows a slightly cleaner base type specification of: py::class_<Type, Base>("Type") as an alternative to py::class_<Type>("Type", py::base<Base>()) As with the other template parameters, the order relative to the holder or trampoline types doesn't matter. This also includes a compile-time assertion failure if attempting to specify more than one base class (but is easily extendible to support multiple inheritance, someday, by updating the class_selector::set_bases function to set multiple bases).Jason Rhinelander committed
-
- 06 Sep, 2016 19 commits
-
-
With this change both C++ and Python write to sys.stdout which resolves the capture issues noted in #351. Therefore, the related workarounds are removed.
Dean Moldovan committed -
The current pybind11::class_<Type, Holder, Trampoline> fixed template ordering results in a requirement to repeat the Holder with its default value (std::unique_ptr<Type>) argument, which is a little bit annoying: it needs to be specified not because we want to override the default, but rather because we need to specify the third argument. This commit removes this limitation by making the class_ template take the type name plus a parameter pack of options. It then extracts the first valid holder type and the first subclass type for holder_type and trampoline type_alias, respectively. (If unfound, both fall back to their current defaults, `std::unique_ptr<type>` and `type`, respectively). If any unmatched template arguments are provided, a static assertion fails. What this means is that you can specify or omit the arguments in any order: py::class_<A, PyA> c1(m, "A"); py::class_<B, PyB, std::shared_ptr<B>> c2(m, "B"); py::class_<C, std::shared_ptr<C>, PyB> c3(m, "C"); It also allows future class attributes (such as base types in the next commit) to be passed as class template types rather than needing to use a py::base<> wrapper.Jason Rhinelander committed -
Wenzel Jakob committed
-
Keyword arguments and generalized unpacking for C++ API
Wenzel Jakob committed -
With this change arg_t is no longer a template, but it must remain so for backward compatibility. Thus, a non-template arg_v is introduced, while a dummy template alias arg_t is there to keep old code from breaking. This can be remove in the next major release. The implementation of arg_v also needed to be placed a little earlier in the headers because it's not a template any more and unpacking_collector needs more than a forward declaration.
Dean Moldovan committed -
Dean Moldovan committed
-
MSVC fails to compile if the constructor is defined out-of-line. The error states that it cannot deduce the type of the default template parameter which is used for SFINAE.
Dean Moldovan committed -
The variadic handle::operator() offers the same functionality as well as mixed positional, keyword, * and ** arguments. The tests are also superseded by the ones in `test_callbacks`.
Dean Moldovan committed -
Dean Moldovan committed
-
Dean Moldovan committed
-
Dean Moldovan committed
-
Replicates Python API including keyword arguments.
Dean Moldovan committed -
A Python function can be called with the syntax: ```python foo(a1, a2, *args, ka=1, kb=2, **kwargs) ``` This commit adds support for the equivalent syntax in C++: ```c++ foo(a1, a2, *args, "ka"_a=1, "kb"_a=2, **kwargs) ``` In addition, generalized unpacking is implemented, as per PEP 448, which allows calls with multiple * and ** unpacking: ```python bar(*args1, 99, *args2, 101, **kwargs1, kz=200, **kwargs2) ``` and ```c++ bar(*args1, 99, *args2, 101, **kwargs1, "kz"_a=200, **kwargs2) ```
Dean Moldovan committed -
Dean Moldovan committed
-
Wenzel Jakob committed
-
Wenzel Jakob committed
-
Wenzel Jakob committed
-
Wenzel Jakob committed
-
Adding bind_map. Adding key_error exception.
Wenzel Jakob committed
-
- 05 Sep, 2016 4 commits
-
-
Sergey Lyskov committed
-
enum serialization support (fixes #380)
Wenzel Jakob committed -
Wenzel Jakob committed
-
Wenzel Jakob committed
-
- 04 Sep, 2016 7 commits
-
-
Make unique_ptr's with non-default deleters work
Wenzel Jakob committed -
Wenzel Jakob committed
-
Currently pybind11 only supports std::unique_ptr<T> holders by default (other holders can, of course, be declared using the macro). PR #368 added a `py::nodelete` that is intended to be used as: py::class_<Type, std::unique_ptr<Type, py::nodelete>> c("Type"); but this doesn't work out of the box. (You could add an explicit holder type declaration, but this doesn't appear to have been the intention of the commit). This commit fixes it by generalizing the unique_ptr type_caster to take both the type and deleter as template arguments, so that *any* unique_ptr instances are now automatically handled by pybind. It also adds a test to test_smart_ptr, testing both that py::nodelete (now) works, and that the object is indeed not deleted as intended.Jason Rhinelander committed -
Wenzel Jakob committed
-
Buffer info improvements
Wenzel Jakob committed -
Wenzel Jakob committed
-
Make test initialization self-registering
Wenzel Jakob committed
-
- 03 Sep, 2016 1 commit
-
-
Adding or removing tests is a little bit cumbersome currently: the test needs to be added to CMakeLists.txt, the init function needs to be predeclared in pybind11_tests.cpp, then called in the plugin initialization. While this isn't a big deal for tests that are being committed, it's more of a hassle when working on some new feature or test code for which I temporarily only care about building and linking the test being worked on rather than the entire test suite. This commit changes tests to self-register their initialization by having each test initialize a local object (which stores the initialization function in a static variable). This makes changing the set of tests being build easy: one only needs to add or comment out test names in tests/CMakeLists.txt. A couple other minor changes that go along with this: - test_eigen.cpp is now included in the test list, then removed if eigen isn't available. This lets you disable the eigen tests by commenting it out, just like all the other tests, but keeps the build working without eigen eigen isn't available. (Also, if it's commented out, we don't even bother looking for and reporting the building with/without eigen status message). - pytest is now invoked with all the built test names (with .cpp changed to .py) so that it doesn't try to run tests that weren't built.
Jason Rhinelander committed
-
- 02 Sep, 2016 4 commits
-
-
Jason Newton committed
-
Jason Newton committed
-
Jason Newton committed
-
Jason Newton committed
-