From 6956b655f0179a4c0afa9079eab0690ef4855af6 Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Mon, 15 Aug 2016 01:24:59 +0100 Subject: [PATCH] Simplify code in eigen.h using new array ctors --- include/pybind11/eigen.h | 95 ++++++++-------------------------------- 1 file changed, 18 insertions(+), 77 deletions(-) diff --git a/include/pybind11/eigen.h b/include/pybind11/eigen.h index 2ea7d486..0035cc6e 100644 --- a/include/pybind11/eigen.h +++ b/include/pybind11/eigen.h @@ -85,7 +85,7 @@ struct type_caster::value && if (!buffer.check()) return false; - buffer_info info = buffer.request(); + auto info = buffer.request(); if (info.ndim == 1) { typedef Eigen::InnerStride<> Strides; if (!isVector && @@ -127,37 +127,19 @@ struct type_caster::value && static handle cast(const Type &src, return_value_policy /* policy */, handle /* parent */) { if (isVector) { - return array(buffer_info( - /* Pointer to buffer */ - const_cast(src.data()), - /* Size of one scalar */ - sizeof(Scalar), - /* Python struct-style format descriptor */ - format_descriptor::format(), - /* Number of dimensions */ - 1, - /* Buffer dimensions */ - { (size_t) src.size() }, - /* Strides (in bytes) for each index */ - { sizeof(Scalar) * static_cast(src.innerStride()) } - )).release(); + return array( + { (size_t) src.size() }, // shape + { sizeof(Scalar) * static_cast(src.innerStride()) }, // strides + src.data() // data + ).release(); } else { - return array(buffer_info( - /* Pointer to buffer */ - const_cast(src.data()), - /* Size of one scalar */ - sizeof(Scalar), - /* Python struct-style format descriptor */ - format_descriptor::format(), - /* Number of dimensions */ - isVector ? 1 : 2, - /* Buffer dimensions */ - { (size_t) src.rows(), + return array( + { (size_t) src.rows(), // shape (size_t) src.cols() }, - /* Strides (in bytes) for each index */ - { sizeof(Scalar) * static_cast(src.rowStride()), - sizeof(Scalar) * static_cast(src.colStride()) } - )).release(); + { sizeof(Scalar) * static_cast(src.rowStride()), // strides + sizeof(Scalar) * static_cast(src.colStride()) }, + src.data() // data + ).release(); } } @@ -248,9 +230,9 @@ struct type_caster::value>:: !outerIndicesArray.check()) return false; - buffer_info outerIndices = outerIndicesArray.request(); - buffer_info innerIndices = innerIndicesArray.request(); - buffer_info values = valuesArray.request(); + auto outerIndices = outerIndicesArray.request(); + auto innerIndices = innerIndicesArray.request(); + auto values = valuesArray.request(); value = Eigen::MappedSparseMatrix( shape[0].cast(), @@ -270,50 +252,9 @@ struct type_caster::value>:: object matrix_type = module::import("scipy.sparse").attr( rowMajor ? "csr_matrix" : "csc_matrix"); - array data(buffer_info( - // Pointer to buffer - const_cast(src.valuePtr()), - // Size of one scalar - sizeof(Scalar), - // Python struct-style format descriptor - format_descriptor::format(), - // Number of dimensions - 1, - // Buffer dimensions - { (size_t) src.nonZeros() }, - // Strides - { sizeof(Scalar) } - )); - - array outerIndices(buffer_info( - // Pointer to buffer - const_cast(src.outerIndexPtr()), - // Size of one scalar - sizeof(StorageIndex), - // Python struct-style format descriptor - format_descriptor::format(), - // Number of dimensions - 1, - // Buffer dimensions - { (size_t) (rowMajor ? src.rows() : src.cols()) + 1 }, - // Strides - { sizeof(StorageIndex) } - )); - - array innerIndices(buffer_info( - // Pointer to buffer - const_cast(src.innerIndexPtr()), - // Size of one scalar - sizeof(StorageIndex), - // Python struct-style format descriptor - format_descriptor::format(), - // Number of dimensions - 1, - // Buffer dimensions - { (size_t) src.nonZeros() }, - // Strides - { sizeof(StorageIndex) } - )); + array data((size_t) src.nonZeros(), src.valuePtr()); + array outerIndices((size_t) (rowMajor ? src.rows() : src.cols()) + 1, src.outerIndexPtr()); + array innerIndices((size_t) src.nonZeros(), src.innerIndexPtr()); return matrix_type( std::make_tuple(data, innerIndices, outerIndices),