mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 16:13:53 +00:00
8657f3083a
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.
53 lines
951 B
Plaintext
53 lines
951 B
Plaintext
should_give_NOT_OK = NOT OK
|
|
fixed_r = OK
|
|
fixed_c = OK
|
|
pt_r(fixed_r) = OK
|
|
pt_c(fixed_c) = OK
|
|
pt_r(fixed_c) = OK
|
|
pt_c(fixed_r) = OK
|
|
dense_r = OK
|
|
dense_c = OK
|
|
pt_r(dense_r) = OK
|
|
pt_c(dense_c) = OK
|
|
pt_r(dense_c) = OK
|
|
pt_c(dense_r) = OK
|
|
sparse_r = OK
|
|
sparse_c = OK
|
|
pt_r(sparse_r) = OK
|
|
pt_c(sparse_c) = OK
|
|
pt_r(sparse_c) = OK
|
|
pt_c(sparse_r) = OK
|
|
double_row(first_row) = OK
|
|
double_col(first_row) = OK
|
|
double_row(first_col) = OK
|
|
double_col(first_col) = OK
|
|
double_mat_cm(0) = OK
|
|
double_mat_rm(0) = OK
|
|
double_mat_cm(1) = OK
|
|
double_mat_rm(1) = OK
|
|
double_mat_cm(2) = OK
|
|
double_mat_rm(2) = OK
|
|
cholesky1 OK
|
|
cholesky2 OK
|
|
cholesky3 OK
|
|
cholesky4 OK
|
|
cholesky5 OK
|
|
cholesky6 OK
|
|
diagonal() OK
|
|
diagonal_1() OK
|
|
diagonal_n(-5) OK
|
|
diagonal_n(-4) OK
|
|
diagonal_n(-3) OK
|
|
diagonal_n(-2) OK
|
|
diagonal_n(-1) OK
|
|
diagonal_n(0) OK
|
|
diagonal_n(1) OK
|
|
diagonal_n(2) OK
|
|
diagonal_n(3) OK
|
|
diagonal_n(4) OK
|
|
diagonal_n(5) OK
|
|
diagonal_n(6) OK
|
|
block(2,1,3,3) OK
|
|
block(1,4,4,2) OK
|
|
block(1,4,3,2) OK
|