- 01 Dec, 2016 1 commit
-
-
esquires committed
-
- 25 Nov, 2016 3 commits
-
-
Using a complicated declval here was pointlessly complicated: we already know the type, because that's what cast_op_type<T> is in the first place. (The declval also broke MSVC).
Jason Rhinelander committed -
This adds a `detail::cast_op<T>(caster)` function which handles the rather verbose: caster.operator typename CasterType::template cast_op_type<T>() which allows various places to use the shorter and clearer: cast_op<T>(caster) instead of the full verbose cast operator invocation.Jason Rhinelander committed -
stl casters were using a value cast to (Value) or (Key), but that isn't always appropriate. This changes it to use the appropriate value converter's cast_op_type.
Jason Rhinelander committed
-
- 24 Nov, 2016 4 commits
-
-
Wenzel Jakob committed
-
C++ exceptions are destructed in the context of the code that catches them. At this point, the Python GIL may not be held, which could lead to crashes with the previous implementation. PyErr_Fetch and PyErr_Restore should always occur in pairs, which was not the case for the previous implementation. To clear the exception, the new approach uses PyErr_Restore && PyErr_Clear instead of simply decreasing the reference counts of the exception objects.
Wenzel Jakob committed -
Wenzel Jakob committed
-
Wenzel Jakob committed
-
- 22 Nov, 2016 5 commits
-
-
* Use LIBDIR and MULTIARCH on linux to find python library * Remove apple-specific setting; the non-windows one should work fine on OS X * Default LIBDIR/MULTIARCH to '' (to avoid getting None) * Remove trailing whitespace from FindPythonLibsNew
Jason Rhinelander committed -
Patrick Stewart committed
-
Previously all types are marked unaligned in buffer format strings, now we test for alignment before adding the '=' marker.
patstew committed -
Sylvain Corlay committed
-
This gives more informative output, often including the type (or at least some hint about the type).
Jason Rhinelander committed
-
- 20 Nov, 2016 6 commits
-
-
Wenzel Jakob committed
-
A flake8 configuration is included in setup.cfg and the checks are executed automatically on Travis: * Ensures a consistent PEP8 code style * Does basic linting to prevent possible bugs
Dean Moldovan committed -
Wenzel Jakob committed
-
Fixes #509. The move policy was already set for rvalues in PR #473, but this only applied to directly cast user-defined types. The problem is that STL containers cast values indirectly and the rvalue information is lost. Therefore the move policy was not set correctly. This commit fixes it. This also makes an additional adjustment to remove the `copy` policy exception: rvalues now always use the `move` policy. This is also safe for copy-only rvalues because the `move` policy has an internal fallback to copying.
Dean Moldovan committed -
Wenzel Jakob committed
-
Wenzel Jakob committed
-
- 17 Nov, 2016 6 commits
-
-
Following commit 90d278, the object code generated by the python bindings of nanogui (github.com/wjakob/nanogui) went up by a whopping 12%. It turns out that that project has quite a few enums where we don't really care about arithmetic operators. This commit thus partially reverts the effects of #503 by introducing an additional attribute py::arithmetic() that must be specified if the arithmetic operators are desired.
Wenzel Jakob committed -
Lori A. Burns committed
-
* `array_t(const object &)` now throws on error * `array_t::ensure()` is intended for casters —- old constructor is deprecated * `array` and `array_t` get default constructors (empty array) * `array` gets a converting constructor * `py::isinstance<array_T<T>>()` checks the type (but not flags) There is only one special thing which must remain: `array_t` gets its own `type_caster` specialization which uses `ensure` instead of a simple check.
Dean Moldovan committed -
The pytype converting constructors are convenient and safe for user code, but for library internals the additional type checks and possible conversions are sometimes not desired. `reinterpret_borrow<T>()` and `reinterpret_steal<T>()` serve as the low-level unsafe counterparts of `cast<T>()`. This deprecates the `object(handle, bool)` constructor. Renamed `borrowed` parameter to `is_borrowed` to avoid shadowing warnings on MSVC.
Dean Moldovan committed -
* Deprecate the `py::object::str()` member function since `py::str(obj)` is now equivalent and preferred * Make `py::repr()` a free function * Make sure obj.cast<T>() works as expected when T is a Python type `obj.cast<T>()` should be the same as `T(obj)`, i.e. it should convert the given object to a different Python type. However, `obj.cast<T>()` usually calls `type_caster::load()` which only checks the type without doing any actual conversion. That causes a very unexpected `cast_error`. This commit makes it so that `obj.cast<T>()` and `T(obj)` are the same when T is a Python type. * Simplify pytypes converting constructor implementation It's not necessary to maintain a full set of converting constructors and assignment operators + const& and &&. A single converting const& constructor will work and there is no impact on binary size. On the other hand, the conversion functions can be significantly simplified.
Dean Moldovan committed -
Allows checking the Python types before creating an object instead of after. For example: ```c++ auto l = list(ptr, true); if (l.check()) // ... ``` The above is replaced with: ```c++ if (isinstance<list>(ptr)) { auto l = reinterpret_borrow(ptr); // ... } ``` This deprecates `py::object::check()`. `py::isinstance()` covers the same use case, but it can also check for user-defined types: ```c++ class Pet { ... }; py::class_<Pet>(...); m.def("is_pet", [](py::object obj) { return py::isinstance<Pet>(obj); // works as expected }); ```Dean Moldovan committed
-
- 16 Nov, 2016 4 commits
-
-
Wenzel Jakob committed
-
* Also added unsafe version without checks
Sylvain Corlay committed -
Wenzel Jakob committed
-
* Allow enums to be ordered * Support binary operators
Pim Schellart committed
-
- 15 Nov, 2016 5 commits
-
-
Jason Rhinelander committed
-
* Incref returned None in std::optional type caster * Add type casters for nullopt_t * Add a test for nullopt_t
Ivan Smirnov committed -
Added the docstring_options class, which gives global control over the generation of docstrings and function signatures.
Alexander Stukowski committed -
This commit includes the following changes: * Don't provide make_copy_constructor for non-copyable container make_copy_constructor currently fails for various stl containers (e.g. std::vector, std::unordered_map, std::deque, etc.) when the container's value type (e.g. the "T" or the std::pair<K,T> for a map) is non-copyable. This adds an override that, for types that look like containers, also requires that the value_type be copyable. * stl_bind.h: make bind_{vector,map} work for non-copy-constructible types Most stl_bind modifiers require copying, so if the type isn't copy constructible, we provide a read-only interface instead. In practice, this means that if the type is non-copyable, it will be, for all intents and purposes, read-only from the Python side (but currently it simply fails to compile with such a container). It is still possible for the caller to provide an interface manually (by defining methods on the returned class_ object), but this isn't something stl_bind can handle because the C++ code to construct values is going to be highly dependent on the container value_type. * stl_bind: copy only for arithmetic value types For non-primitive types, we may well be copying some complex type, when returning by reference is more appropriate. This commit returns by internal reference for all but basic arithmetic types. * Return by reference whenever possible Only if we definitely can't--i.e. std::vector<bool>--because v[i] returns something that isn't a T& do we copy; for everything else, we return by reference. For the map case, we can always return by reference (at least for the default stl map/unordered_map).Jason Rhinelander committed -
Wenzel Jakob committed
-
- 13 Nov, 2016 2 commits
-
-
Jason Rhinelander committed
-
When working on some particular feature, it's nice to be able to disable all the tests except for the one I'm working on; this is currently possible by editing tests/CMakeLists.txt, and commenting out the tests you don't want. This commit goes a step further by letting you give a list of tests you do want when invoking cmake, e.g.: cmake -DPYBIND11_TEST_OVERRIDE="test_issues.cpp;test_pickling.cpp" .. changes the build to build just those two tests (and changes the `pytest` target to invoke just the two associated tests). This persists in the build directory until you disable it again by running cmake with `-DPYBIND11_TEST_OVERRIDE=`. It also adds a message after the pytest output to remind you that it is in effect: Note: not all tests run: -DPYBIND11_TEST_OVERRIDE is in effectJason Rhinelander committed
-
- 12 Nov, 2016 1 commit
-
-
Wenzel Jakob committed
-
- 11 Nov, 2016 1 commit
-
-
Jason Rhinelander committed
-
- 08 Nov, 2016 2 commits
-
-
Wenzel Jakob committed
-
Wenzel Jakob committed
-