- 04 Aug, 2016 2 commits
-
-
Jason Rhinelander authored
Functions returning specialized Eigen matrices like Eigen::DiagonalMatrix and Eigen::SelfAdjointView--which inherit from EigenBase but not DenseBase--isn't currently allowed; such classes are explicitly copyable into a Matrix (by definition), and so we can support functions that return them by copying the value into a Matrix then casting that resulting dense Matrix into a numpy.ndarray. This commit does exactly that.
-
Jason Rhinelander authored
Some Eigen objects, such as those returned by matrix.diagonal() and matrix.block() have non-standard stride values because they are basically just maps onto the underlying matrix without copying it (for example, the primary diagonal of a 3x3 matrix is a vector-like object with .src equal to the full matrix data, but with stride 4). Returning such an object from a pybind11 method breaks, however, because pybind11 assumes vectors have stride 1, and that matrices have strides equal to the number of rows/columns or 1 (depending on whether the matrix is stored column-major or row-major). This commit fixes the issue by making pybind11 use Eigen's stride methods when copying the data.
-
- 03 Aug, 2016 1 commit
-
-
Jason Rhinelander authored
Eigen::Ref is a common way to pass eigen dense types without needing a template, e.g. the single definition `void func(Eigen::Ref<Eigen::MatrixXd> x)` can be called with any double matrix-like object. The current pybind11 eigen support fails with internal errors if attempting to bind a function with an Eigen::Ref<...> argument because Eigen::Ref<...> satisfies the "is_eigen_dense" requirement, but can't compile if actually used: Eigen::Ref<...> itself is not default constructible, and so the argument std::tuple containing an Eigen::Ref<...> isn't constructible, which results in compilation failure. This commit adds support for Eigen::Ref<...> by giving it its own type_caster implementation which consists of an internal type_caster of the referenced type, load/cast methods that dispatch to the internal type_caster, and a unique_ptr to an Eigen::Ref<> instance that gets set during load(). There is, of course, no performance advantage for pybind11-using code of using Eigen::Ref<...>--we are allocating a matrix of the derived type when loading it--but this has the advantage of allowing pybind11 to bind transparently to C++ methods taking Eigen::Refs.
-
- 09 Jul, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 06 Jul, 2016 1 commit
-
-
Jason Rhinelander authored
This commit adds an additional _ template function for compile-time selection between two description strings. This in turn allows the elimination of needing two name() methods in type_caster<arithmetic types> and type_caster<eigen types>, which allows them to start using PYBIND11_TYPE_CASTER instead, simplifying their code by eliminating all the code that they are duplicating from the macro.
-
- 05 Jul, 2016 1 commit
-
-
Ben North authored
In eigen.h, type_caster<Type>::load(): For the 'ndim == 1' case, use the 'InnerStride' type because there is only an inner stride for a vector. Choose between (n_elts x 1) or (1 x n_elts) according to whether we're constructing a Vector or a RowVector.
-
- 30 May, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 29 May, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 24 May, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 20 May, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 15 May, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 08 May, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 05 May, 2016 1 commit
-
-
Wenzel Jakob authored
-