- 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.
-
- 12 Jul, 2016 1 commit
-
-
Jason Rhinelander authored
scipy is imported in pybind11/eigen.h when it encounters a sparse matrix, which gets tested in the eigen test.
-
- 09 Jul, 2016 1 commit
-
-
Jason Rhinelander authored
This allows (and changes the current examples) to exit with status 99 to skip a test instead of outputting a special string ("NumPy missing"). This also fixes the eigen test, which currently fails when eigen headers are available but NumPy is not, to skip instead of failing when NumPy isn't available.
-
- 05 Jul, 2016 4 commits
-
-
Ben North authored
Previous version would give false 'OK' if, for example, we were supposed to get [1, 2, 3] but instead got [2, 1, 3].
-
Ben North authored
Fails --- next commit will tighten test.
-
Ben North authored
-
Ben North authored
Passing a non-contiguous one-dimensional numpy array gives incorrect results, so three of these tests fail. The only one passing is the simple case where the numpy array is contiguous and we are building a column-major vector. Subsequent commit will fix the three failing cases.
-
- 05 May, 2016 1 commit
-
-
Wenzel Jakob authored
-