- 20 May, 2017 1 commit
-
-
The numpy strides/sizes/etc. are signed now, but the static_assert didn't get updated to match.
Jason Rhinelander committed
-
- 18 May, 2017 1 commit
-
-
Under gcc, the `static internals *internals_ptr` is shared across .so's, which breaks for obvious reasons. This commit fixes it by moving the static pointer declaration into a pybind-version-templated function.
Jason Rhinelander committed
-
- 16 May, 2017 1 commit
-
-
Fixes #852.
Jason Rhinelander committed
-
- 11 May, 2017 1 commit
-
-
Missing conformability check was causing Eigen to create a 0x0 matrix with an error in debug mode and silent corruption in release mode.
Dean Moldovan committed
-
- 10 May, 2017 5 commits
-
-
Currently, `py::int_(1).cast<variant<double, int>>()` fills the `double` slot of the variant. This commit switches the loader to a 2-pass scheme in order to correctly fill the `int` slot.
Dean Moldovan committed -
Many of our `is_none()` checks in type caster loading return true, but this should really be considered a deferral so that, for example, an overload with a `py::none` argument would win over one that takes `py::none` as a null option. This keeps None-accepting for the `!convert` pass only for std::optional and void casters. (The `char` caster already deferred None; this just extends that behaviour to other casters).
Jason Rhinelander committed -
Under gcc 7 with -std=c++11, compilation results in several of the following warnings: In file included from /home/jagerman/src/pybind11/tests/test_sequences_and_iterators.cpp:13:0: /home/jagerman/src/pybind11/include/pybind11/operators.h: In function ‘pybind11::detail::op_<(pybind11::detail::op_id)0, (pybind11::detail::op_type)0, pybind11::detail::self_t, pybind11::detail::self_t> pybind11::detail::operator+(const pybind11::detail::self_t&, const pybind11::detail::self_t&)’: /home/jagerman/src/pybind11/include/pybind11/operators.h:78:76: warning: inline declaration of ‘pybind11::detail::op_<(pybind11::detail::op_id)0, (pybind11::detail::op_type)0, pybind11::detail::self_t, pybind11::detail::self_t> pybind11::detail::operator+(const pybind11::detail::self_t&, const pybind11::detail::self_t&)’ follows declaration with attribute noinline [-Wattributes] inline op_<op_##id, op_l, self_t, self_t> op(const self_t &, const self_t &) { \ ^ /home/jagerman/src/pybind11/include/pybind11/operators.h:109:1: note: in expansion of macro ‘PYBIND11_BINARY_OPERATOR’ PYBIND11_BINARY_OPERATOR(add, radd, operator+, l + r) ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/jagerman/src/pybind11/include/pybind11/cast.h:15:0, from /home/jagerman/src/pybind11/include/pybind11/attr.h:13, from /home/jagerman/src/pybind11/include/pybind11/pybind11.h:36, from /home/jagerman/src/pybind11/tests/pybind11_tests.h:2, from /home/jagerman/src/pybind11/tests/test_sequences_and_iterators.cpp:11: /home/jagerman/src/pybind11/include/pybind11/descr.h:116:36: note: previous definition of ‘pybind11::detail::descr pybind11::detail::operator+(pybind11::detail::descr&&, pybind11::detail::descr&&)’ was here PYBIND11_NOINLINE descr friend operator+(descr &&d1, descr &&d2) { ^~~~~~~~ This appears to be happening because gcc is considering implicit construction of `descr` in some places using addition of two `descr`-compatible arguments in the `descr.h` c++11 fallback code. There's no particular reason that this operator needs to be a friend function: this commit changes it to an rvalue-context member function operator, which avoids the warning.Jason Rhinelander committed -
This exposed a few underlying issues: 1. is_pod_struct was too strict to allow this. I've relaxed it to require only trivially copyable and standard layout, rather than POD (which additionally requires a trivial constructor, which std::complex violates). 2. format_descriptor<std::complex<T>>::format() returned numpy format strings instead of PEP3118 format strings, but register_dtype feeds format codes of its fields to _dtype_from_pep3118. I've changed it to return PEP3118 format codes. format_descriptor is a public type, so this may be considered an incompatible change. 3. register_structured_dtype tried to be smart about whether to mark fields as unaligned (with ^). However, it's examining the C++ alignment, rather than what numpy (or possibly PEP3118) thinks the alignment should be. For complex values those are different. I've made it mark all fields as ^ unconditionally, which should always be safe even if they are aligned, because we explicitly mark the padding.
Bruce Merry committed -
Resolves #800. Both C++ arrays and std::array are supported, including mixtures like std::array<int, 2>[4]. In a multi-dimensional array of char, the last dimension is used to construct a numpy string type.
Bruce Merry committed
-
- 09 May, 2017 6 commits
-
-
* Fix compilation error with std::nullptr_t * Enable conversion from None to std::nullptr_t and std::nullopt_t Fixes #839.
Dean Moldovan committed -
Under MSVC we were ignoring PYBIND11_CPP_STANDARD and simply not passing any standard (which makes MSVC default to its C++14 mode). MSVC 2015u3 added the `/std:c++14` and `/std:c++latest` flags; the latter, under MSVC 2017, enables some C++17 features (such as `std::optional` and `std::variant`), so it is something we need to start supporting under MSVC. This makes the PYBIND11_CPP_STANDARD cmake variable work under MSVC, defaulting it to /std:c++14 (matching the default -std=c++14 for non-MSVC). It also adds a new appveyor test running under MSVC 2017 with /std:c++latest, which runs (and passes) the `std::optional`/`std::variant` tests. Also updated the documentation to clarify the c++ flags and add show MSVC flag examples.
Jason Rhinelander committed -
The PYBIND11_CPP14 macro started out as a guard for the compile-time path code in `descr.h`, but has since come to mean other things. This means that while the `descr.h` check has just checked the `PYBIND11_CPP14` macro, various other places now check `PYBIND11_CPP14 || _MSC_VER`. This reverses that by now setting the CPP14 macro when MSVC is trying to support C++14, but disabling the `descr.h` C++14 code (which still fails under MSVC 2017). The CPP17 macro also gets enabled when MSVC 2017 is compiling with /std:c++latest (the default is /std:c++14), which enables `std::optional` and `std::variant` support under MSVC.
Jason Rhinelander committed -
Jason Rhinelander committed
-
Jason Rhinelander committed
-
GCC 7 generates (when compiling in C++11/14 mode) warnings such as: mangled name for ‘pybind11::class_<type_, options>& pybind11::class_<type_, options>::def(const char*, Func&&, const Extra& ...) [with Func = int (test_exc_sp::C::*)(int) noexcept; Extra = {}; type_ = test_exc_sp::C; options = {}]’ will change in C++17 because the exception specification is part of a function type [-Wnoexcept-type] There's nothing we can actually do in the code to avoid this, so just disable the warning.Jason Rhinelander committed
-
- 08 May, 2017 1 commit
-
-
Dean Moldovan committed
-
- 07 May, 2017 7 commits
-
-
GCC supports `deprecated(msg)` since v4.5 and VS supports the standard [[deprecated(msg)]] since 2015 RTM. The deprecated constructor change from `= default` to `{}` is a workaround for a VS2015 bug.Dean Moldovan committed -
Dean Moldovan committed
-
Cris Luengo committed
-
We're current copy by creating an Eigen::Map into the input numpy array, then assigning that to the basic eigen type, effectively having Eigen do the copy. That doesn't work for negative strides, though: Eigen doesn't allow them. This commit makes numpy do the copying instead by allocating the eigen type, then having numpy copy from the input array into a numpy reference into the eigen object's data. This also saves a copy when type conversion is required: numpy can do the conversion on-the-fly as part of the copy. Finally this commit also makes non-reference parameters respect the convert flag, declining the load when called in a noconvert pass with a convertible, but non-array input or an array with the wrong dtype.
Jason Rhinelander committed -
`EigenConformable::stride_compatible` returns false if the strides are negative. In this case, do not use `EigenConformable::stride`, as it is {0,0}. We cannot write negative strides in this element, as Eigen will throw an assertion if we do. The `type_caster` specialization for regular, dense Eigen matrices now does a second `array_t::ensure` to copy data in case of negative strides. I'm not sure that this is the best way to implement this. I have added "TODO" tags linking these changes to Eigen bug #747, which, when fixed, will allow Eigen to accept negative strides.Cris Luengo committed -
Cris Luengo committed
-
Jason Rhinelander committed
-
- 02 May, 2017 1 commit
-
-
Jason Rhinelander committed
-
- 29 Apr, 2017 5 commits
-
-
uentity committed
-
Dean Moldovan committed
-
If a bound std::function is invoked with a bound method, the implicit bound self is lost because we use `detail::get_function` to unbox the function. This commit amends the code to use py::function and only unboxes in the special is-really-a-c-function case. This makes bound methods stay bound rather than unbinding them by forcing extraction of the c function.
Jason Rhinelander committed -
The added flag enables non-buffered console output when using Ninja
Wenzel Jakob committed -
Enumerations on Python 2.7 were not always implicitly converted to integers (depending on the target size). This patch adds a __long__ conversion function (only enabled on 2.7) which fixes this issue. The attached test case fails without this patch.
Wenzel Jakob committed
-
- 28 Apr, 2017 5 commits
-
-
This removes the convert-from-arithemtic-scalar constructor of any_container as it can result in ambiguous calls, as in: py::array_t<float>({ 1, 2 }) which could be intepreted as either of: py::array_t<float>(py::array_t<float>(1, 2)) py::array_t<float>(py::detail::any_container({ 1, 2 })) Removing the convert-from-arithmetic constructor reduces the number of implicit conversions, avoiding the ambiguity for array and array_t. This also re-adds the array/array_t constructors taking a scalar argument for backwards compatibility.Jason Rhinelander committed -
The job is using the released clang and stable-branch libc++, which wasn't the case when it was added. Leave the g++7/c++17 in allow_failures for now as it's still a pre-release compiler (and pulled from debian experimental).
Jason Rhinelander committed -
Python 3's `PyInstanceMethod_Type` hides itself via its `tp_descr_get`, which prevents aliasing methods via `cls.attr("m2") = cls.attr("m1")`: instead the `tp_descr_get` returns a plain function, when called on a class, or a `PyMethod`, when called on an instance. Override that behaviour for pybind11 types with a special bypass for `PyInstanceMethod_Types`.Jason Rhinelander committed -
The Unicode support added in 2.1 (PR #624) inadvertently broke accepting `bytes` as std::string/char* arguments. This restores it with a separate path that does a plain conversion (i.e. completely bypassing all the encoding/decoding code), but only for single-byte string types.
Jason Rhinelander committed -
The numpy API constants can check past the end of the API array if the numpy version is too old thus causing a segfault. The current list of functions requires numpy >= 1.7.0, so this adds a check and exception if numpy is too old. The added feature version API element was added in numpy 1.4.0, so this could still segfault if loaded in 1.3.0 or earlier, but given that 1.4.0 was released at the end of 2009, it seems reasonable enough to not worry about that case. (1.7.0 was released in early 2013).
Jason Rhinelander committed
-
- 27 Apr, 2017 3 commits
-
-
This commits adds base class pointers of offset base classes (i.e. due to multiple inheritance) to `registered_instances` so that if such a pointer is returned we properly recognize it as an existing instance. Without this, returning a base class pointer will cast to the existing instance if the pointer happens to coincide with the instance pointer, but constructs a new instance (quite possibly with a segfault, if ownership is applied) for unequal base class pointers due to multiple inheritance.
Jason Rhinelander committed -
When we are returned a base class pointer (either directly or via shared_from_this()) we detect its runtime type (using `typeid`), then end up essentially reinterpret_casting the pointer to the derived type. This is invalid when the base class pointer was a non-first base, and we end up with an invalid pointer. We could dynamic_cast to the most-derived type, but if *that* type isn't pybind11-registered, the resulting pointer given to the base `cast` implementation isn't necessarily valid to be reinterpret_cast'ed back to the backup type. This commit removes the "backup" type argument from the many-argument `cast(...)` and instead does the derived-or-pointer type decision and type lookup in type_caster_base, where the dynamic_cast has to be to correctly get the derived pointer, but also has to do the type lookup to ensure that we don't pass the wrong (derived) pointer when the backup type (i.e. the type caster intrinsic type) pointer is needed. Since the lookup is needed before calling the base cast(), this also changes the input type to a detail::type_info rather than doing a (second) lookup in cast().
Jason Rhinelander committed -
This breaks up the instance management functions in class_support.h a little bit so that other pybind11 code can use it. In particular: - added make_new_instance() which does what pybind11_object_new does, but also allows instance allocation without `value` allocation. This lets `cast.h` use the same instance allocation rather than having its own separate implementation. - instance registration is now moved to a `register_instance()`/deregister_instance()` pair (rather than having individual code add or remove things from `registered_instances` directory). - clear_instance() does everything `pybind11_object_dealloc()` needs except for the deallocation; this is helpful for factory construction which needs to be able to replace the internals of an instance without deallocating it. - clear_instance() now also calls `dealloc` when `holder_constructed` is true, even if `value` is false. This can happen in factory construction when the pointer is moved from one instance to another, but the holder itself is only copied (i.e. for a shared_ptr holder).
Jason Rhinelander committed
-
- 22 Apr, 2017 1 commit
-
-
Breathe was previously installed from the git master because of a bug in the released version. The fix has since migrated to PyPI. [skip appveyor]
Dean Moldovan committed
-
- 19 Apr, 2017 1 commit
-
-
I got some unexpected errors from code using `overload_cast` until I realized that I'd configured the build with -std=c++11. This commit adds a fake `overload_cast` class in C++11 mode that triggers a static_assert failure indicating that C++14 is needed.
Jason Rhinelander committed
-
- 18 Apr, 2017 1 commit
-
-
We currently fail at runtime when trying to call a method that is overloaded with both static and non-static methods. This is something python won't allow: the object is either a function or an instance, and can't be both.
Jason Rhinelander committed
-