@smake/eigen 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/COPYING.APACHE +203 -0
- package/eigen/COPYING.BSD +1 -1
- package/eigen/COPYING.MINPACK +51 -52
- package/eigen/Eigen/Cholesky +0 -1
- package/eigen/Eigen/Core +108 -266
- package/eigen/Eigen/Eigenvalues +0 -1
- package/eigen/Eigen/Geometry +3 -6
- package/eigen/Eigen/Householder +0 -1
- package/eigen/Eigen/Jacobi +0 -1
- package/eigen/Eigen/KLUSupport +41 -0
- package/eigen/Eigen/LU +2 -5
- package/eigen/Eigen/OrderingMethods +0 -3
- package/eigen/Eigen/PaStiXSupport +1 -0
- package/eigen/Eigen/PardisoSupport +0 -0
- package/eigen/Eigen/QR +0 -1
- package/eigen/Eigen/QtAlignedMalloc +0 -1
- package/eigen/Eigen/SVD +0 -1
- package/eigen/Eigen/Sparse +0 -2
- package/eigen/Eigen/SparseCholesky +0 -8
- package/eigen/Eigen/SparseLU +4 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
- package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
- package/eigen/Eigen/src/Core/Array.h +99 -11
- package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
- package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
- package/eigen/Eigen/src/Core/Assign.h +1 -1
- package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
- package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
- package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
- package/eigen/Eigen/src/Core/Block.h +56 -60
- package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
- package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
- package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
- package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
- package/eigen/Eigen/src/Core/DenseBase.h +128 -39
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
- package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
- package/eigen/Eigen/src/Core/Diagonal.h +21 -23
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
- package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
- package/eigen/Eigen/src/Core/Dot.h +10 -10
- package/eigen/Eigen/src/Core/EigenBase.h +10 -9
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
- package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
- package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
- package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
- package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
- package/eigen/Eigen/src/Core/IO.h +40 -7
- package/eigen/Eigen/src/Core/IndexedView.h +237 -0
- package/eigen/Eigen/src/Core/Inverse.h +9 -10
- package/eigen/Eigen/src/Core/Map.h +7 -7
- package/eigen/Eigen/src/Core/MapBase.h +5 -3
- package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
- package/eigen/Eigen/src/Core/Matrix.h +131 -25
- package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
- package/eigen/Eigen/src/Core/NestByValue.h +25 -50
- package/eigen/Eigen/src/Core/NoAlias.h +4 -3
- package/eigen/Eigen/src/Core/NumTraits.h +107 -20
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
- package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
- package/eigen/Eigen/src/Core/Product.h +30 -25
- package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
- package/eigen/Eigen/src/Core/Random.h +37 -1
- package/eigen/Eigen/src/Core/Redux.h +180 -170
- package/eigen/Eigen/src/Core/Ref.h +118 -21
- package/eigen/Eigen/src/Core/Replicate.h +8 -8
- package/eigen/Eigen/src/Core/Reshaped.h +454 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
- package/eigen/Eigen/src/Core/Reverse.h +18 -12
- package/eigen/Eigen/src/Core/Select.h +8 -6
- package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
- package/eigen/Eigen/src/Core/Solve.h +14 -14
- package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
- package/eigen/Eigen/src/Core/SolverBase.h +41 -3
- package/eigen/Eigen/src/Core/StableNorm.h +100 -70
- package/eigen/Eigen/src/Core/StlIterators.h +463 -0
- package/eigen/Eigen/src/Core/Stride.h +9 -4
- package/eigen/Eigen/src/Core/Swap.h +5 -4
- package/eigen/Eigen/src/Core/Transpose.h +86 -27
- package/eigen/Eigen/src/Core/Transpositions.h +26 -8
- package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
- package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
- package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
- package/eigen/Eigen/src/Core/Visitor.h +137 -29
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
- package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
- package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- package/eigen/Eigen/src/Core/util/Constants.h +25 -9
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
- package/eigen/Eigen/src/Core/util/Macros.h +661 -250
- package/eigen/Eigen/src/Core/util/Memory.h +222 -52
- package/eigen/Eigen/src/Core/util/Meta.h +349 -105
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
- package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
- package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
- package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
- package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
- package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
- package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
- package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
- package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
- package/eigen/Eigen/src/Geometry/Transform.h +86 -65
- package/eigen/Eigen/src/Geometry/Translation.h +6 -6
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
- package/eigen/Eigen/src/Householder/Householder.h +8 -4
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
- package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- package/eigen/Eigen/src/LU/Determinant.h +35 -19
- package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
- package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
- package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
- package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
- package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
- package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
- package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
- package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
- package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
- package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
- package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
- package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
- package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
- package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
- package/eigen/Eigen/src/misc/lapacke.h +5 -4
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
- package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
- package/eigen/README.md +2 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2008-2017 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
// Copyright (C) 2014 yoco <peter.xiau@gmail.com>
|
|
6
|
+
//
|
|
7
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
8
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
9
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
10
|
+
|
|
11
|
+
#ifndef EIGEN_RESHAPED_H
|
|
12
|
+
#define EIGEN_RESHAPED_H
|
|
13
|
+
|
|
14
|
+
namespace Eigen {
|
|
15
|
+
|
|
16
|
+
/** \class Reshaped
|
|
17
|
+
* \ingroup Core_Module
|
|
18
|
+
*
|
|
19
|
+
* \brief Expression of a fixed-size or dynamic-size reshape
|
|
20
|
+
*
|
|
21
|
+
* \tparam XprType the type of the expression in which we are taking a reshape
|
|
22
|
+
* \tparam Rows the number of rows of the reshape we are taking at compile time (optional)
|
|
23
|
+
* \tparam Cols the number of columns of the reshape we are taking at compile time (optional)
|
|
24
|
+
* \tparam Order can be ColMajor or RowMajor, default is ColMajor.
|
|
25
|
+
*
|
|
26
|
+
* This class represents an expression of either a fixed-size or dynamic-size reshape.
|
|
27
|
+
* It is the return type of DenseBase::reshaped(NRowsType,NColsType) and
|
|
28
|
+
* most of the time this is the only way it is used.
|
|
29
|
+
*
|
|
30
|
+
* However, in C++98, if you want to directly maniputate reshaped expressions,
|
|
31
|
+
* for instance if you want to write a function returning such an expression, you
|
|
32
|
+
* will need to use this class. In C++11, it is advised to use the \em auto
|
|
33
|
+
* keyword for such use cases.
|
|
34
|
+
*
|
|
35
|
+
* Here is an example illustrating the dynamic case:
|
|
36
|
+
* \include class_Reshaped.cpp
|
|
37
|
+
* Output: \verbinclude class_Reshaped.out
|
|
38
|
+
*
|
|
39
|
+
* Here is an example illustrating the fixed-size case:
|
|
40
|
+
* \include class_FixedReshaped.cpp
|
|
41
|
+
* Output: \verbinclude class_FixedReshaped.out
|
|
42
|
+
*
|
|
43
|
+
* \sa DenseBase::reshaped(NRowsType,NColsType)
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
namespace internal {
|
|
47
|
+
|
|
48
|
+
template<typename XprType, int Rows, int Cols, int Order>
|
|
49
|
+
struct traits<Reshaped<XprType, Rows, Cols, Order> > : traits<XprType>
|
|
50
|
+
{
|
|
51
|
+
typedef typename traits<XprType>::Scalar Scalar;
|
|
52
|
+
typedef typename traits<XprType>::StorageKind StorageKind;
|
|
53
|
+
typedef typename traits<XprType>::XprKind XprKind;
|
|
54
|
+
enum{
|
|
55
|
+
MatrixRows = traits<XprType>::RowsAtCompileTime,
|
|
56
|
+
MatrixCols = traits<XprType>::ColsAtCompileTime,
|
|
57
|
+
RowsAtCompileTime = Rows,
|
|
58
|
+
ColsAtCompileTime = Cols,
|
|
59
|
+
MaxRowsAtCompileTime = Rows,
|
|
60
|
+
MaxColsAtCompileTime = Cols,
|
|
61
|
+
XpxStorageOrder = ((int(traits<XprType>::Flags) & RowMajorBit) == RowMajorBit) ? RowMajor : ColMajor,
|
|
62
|
+
ReshapedStorageOrder = (RowsAtCompileTime == 1 && ColsAtCompileTime != 1) ? RowMajor
|
|
63
|
+
: (ColsAtCompileTime == 1 && RowsAtCompileTime != 1) ? ColMajor
|
|
64
|
+
: XpxStorageOrder,
|
|
65
|
+
HasSameStorageOrderAsXprType = (ReshapedStorageOrder == XpxStorageOrder),
|
|
66
|
+
InnerSize = (ReshapedStorageOrder==int(RowMajor)) ? int(ColsAtCompileTime) : int(RowsAtCompileTime),
|
|
67
|
+
InnerStrideAtCompileTime = HasSameStorageOrderAsXprType
|
|
68
|
+
? int(inner_stride_at_compile_time<XprType>::ret)
|
|
69
|
+
: Dynamic,
|
|
70
|
+
OuterStrideAtCompileTime = Dynamic,
|
|
71
|
+
|
|
72
|
+
HasDirectAccess = internal::has_direct_access<XprType>::ret
|
|
73
|
+
&& (Order==int(XpxStorageOrder))
|
|
74
|
+
&& ((evaluator<XprType>::Flags&LinearAccessBit)==LinearAccessBit),
|
|
75
|
+
|
|
76
|
+
MaskPacketAccessBit = (InnerSize == Dynamic || (InnerSize % packet_traits<Scalar>::size) == 0)
|
|
77
|
+
&& (InnerStrideAtCompileTime == 1)
|
|
78
|
+
? PacketAccessBit : 0,
|
|
79
|
+
//MaskAlignedBit = ((OuterStrideAtCompileTime!=Dynamic) && (((OuterStrideAtCompileTime * int(sizeof(Scalar))) % 16) == 0)) ? AlignedBit : 0,
|
|
80
|
+
FlagsLinearAccessBit = (RowsAtCompileTime == 1 || ColsAtCompileTime == 1) ? LinearAccessBit : 0,
|
|
81
|
+
FlagsLvalueBit = is_lvalue<XprType>::value ? LvalueBit : 0,
|
|
82
|
+
FlagsRowMajorBit = (ReshapedStorageOrder==int(RowMajor)) ? RowMajorBit : 0,
|
|
83
|
+
FlagsDirectAccessBit = HasDirectAccess ? DirectAccessBit : 0,
|
|
84
|
+
Flags0 = traits<XprType>::Flags & ( (HereditaryBits & ~RowMajorBit) | MaskPacketAccessBit),
|
|
85
|
+
|
|
86
|
+
Flags = (Flags0 | FlagsLinearAccessBit | FlagsLvalueBit | FlagsRowMajorBit | FlagsDirectAccessBit)
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
template<typename XprType, int Rows, int Cols, int Order, bool HasDirectAccess> class ReshapedImpl_dense;
|
|
91
|
+
|
|
92
|
+
} // end namespace internal
|
|
93
|
+
|
|
94
|
+
template<typename XprType, int Rows, int Cols, int Order, typename StorageKind> class ReshapedImpl;
|
|
95
|
+
|
|
96
|
+
template<typename XprType, int Rows, int Cols, int Order> class Reshaped
|
|
97
|
+
: public ReshapedImpl<XprType, Rows, Cols, Order, typename internal::traits<XprType>::StorageKind>
|
|
98
|
+
{
|
|
99
|
+
typedef ReshapedImpl<XprType, Rows, Cols, Order, typename internal::traits<XprType>::StorageKind> Impl;
|
|
100
|
+
public:
|
|
101
|
+
//typedef typename Impl::Base Base;
|
|
102
|
+
typedef Impl Base;
|
|
103
|
+
EIGEN_GENERIC_PUBLIC_INTERFACE(Reshaped)
|
|
104
|
+
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Reshaped)
|
|
105
|
+
|
|
106
|
+
/** Fixed-size constructor
|
|
107
|
+
*/
|
|
108
|
+
EIGEN_DEVICE_FUNC
|
|
109
|
+
inline Reshaped(XprType& xpr)
|
|
110
|
+
: Impl(xpr)
|
|
111
|
+
{
|
|
112
|
+
EIGEN_STATIC_ASSERT(RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic,THIS_METHOD_IS_ONLY_FOR_FIXED_SIZE)
|
|
113
|
+
eigen_assert(Rows * Cols == xpr.rows() * xpr.cols());
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Dynamic-size constructor
|
|
117
|
+
*/
|
|
118
|
+
EIGEN_DEVICE_FUNC
|
|
119
|
+
inline Reshaped(XprType& xpr,
|
|
120
|
+
Index reshapeRows, Index reshapeCols)
|
|
121
|
+
: Impl(xpr, reshapeRows, reshapeCols)
|
|
122
|
+
{
|
|
123
|
+
eigen_assert((RowsAtCompileTime==Dynamic || RowsAtCompileTime==reshapeRows)
|
|
124
|
+
&& (ColsAtCompileTime==Dynamic || ColsAtCompileTime==reshapeCols));
|
|
125
|
+
eigen_assert(reshapeRows * reshapeCols == xpr.rows() * xpr.cols());
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
// The generic default implementation for dense reshape simply forward to the internal::ReshapedImpl_dense
|
|
130
|
+
// that must be specialized for direct and non-direct access...
|
|
131
|
+
template<typename XprType, int Rows, int Cols, int Order>
|
|
132
|
+
class ReshapedImpl<XprType, Rows, Cols, Order, Dense>
|
|
133
|
+
: public internal::ReshapedImpl_dense<XprType, Rows, Cols, Order,internal::traits<Reshaped<XprType,Rows,Cols,Order> >::HasDirectAccess>
|
|
134
|
+
{
|
|
135
|
+
typedef internal::ReshapedImpl_dense<XprType, Rows, Cols, Order,internal::traits<Reshaped<XprType,Rows,Cols,Order> >::HasDirectAccess> Impl;
|
|
136
|
+
public:
|
|
137
|
+
typedef Impl Base;
|
|
138
|
+
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ReshapedImpl)
|
|
139
|
+
EIGEN_DEVICE_FUNC inline ReshapedImpl(XprType& xpr) : Impl(xpr) {}
|
|
140
|
+
EIGEN_DEVICE_FUNC inline ReshapedImpl(XprType& xpr, Index reshapeRows, Index reshapeCols)
|
|
141
|
+
: Impl(xpr, reshapeRows, reshapeCols) {}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
namespace internal {
|
|
145
|
+
|
|
146
|
+
/** \internal Internal implementation of dense Reshaped in the general case. */
|
|
147
|
+
template<typename XprType, int Rows, int Cols, int Order>
|
|
148
|
+
class ReshapedImpl_dense<XprType,Rows,Cols,Order,false>
|
|
149
|
+
: public internal::dense_xpr_base<Reshaped<XprType, Rows, Cols, Order> >::type
|
|
150
|
+
{
|
|
151
|
+
typedef Reshaped<XprType, Rows, Cols, Order> ReshapedType;
|
|
152
|
+
public:
|
|
153
|
+
|
|
154
|
+
typedef typename internal::dense_xpr_base<ReshapedType>::type Base;
|
|
155
|
+
EIGEN_DENSE_PUBLIC_INTERFACE(ReshapedType)
|
|
156
|
+
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ReshapedImpl_dense)
|
|
157
|
+
|
|
158
|
+
typedef typename internal::ref_selector<XprType>::non_const_type MatrixTypeNested;
|
|
159
|
+
typedef typename internal::remove_all<XprType>::type NestedExpression;
|
|
160
|
+
|
|
161
|
+
class InnerIterator;
|
|
162
|
+
|
|
163
|
+
/** Fixed-size constructor
|
|
164
|
+
*/
|
|
165
|
+
EIGEN_DEVICE_FUNC
|
|
166
|
+
inline ReshapedImpl_dense(XprType& xpr)
|
|
167
|
+
: m_xpr(xpr), m_rows(Rows), m_cols(Cols)
|
|
168
|
+
{}
|
|
169
|
+
|
|
170
|
+
/** Dynamic-size constructor
|
|
171
|
+
*/
|
|
172
|
+
EIGEN_DEVICE_FUNC
|
|
173
|
+
inline ReshapedImpl_dense(XprType& xpr, Index nRows, Index nCols)
|
|
174
|
+
: m_xpr(xpr), m_rows(nRows), m_cols(nCols)
|
|
175
|
+
{}
|
|
176
|
+
|
|
177
|
+
EIGEN_DEVICE_FUNC Index rows() const { return m_rows; }
|
|
178
|
+
EIGEN_DEVICE_FUNC Index cols() const { return m_cols; }
|
|
179
|
+
|
|
180
|
+
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
|
181
|
+
/** \sa MapBase::data() */
|
|
182
|
+
EIGEN_DEVICE_FUNC inline const Scalar* data() const;
|
|
183
|
+
EIGEN_DEVICE_FUNC inline Index innerStride() const;
|
|
184
|
+
EIGEN_DEVICE_FUNC inline Index outerStride() const;
|
|
185
|
+
#endif
|
|
186
|
+
|
|
187
|
+
/** \returns the nested expression */
|
|
188
|
+
EIGEN_DEVICE_FUNC
|
|
189
|
+
const typename internal::remove_all<XprType>::type&
|
|
190
|
+
nestedExpression() const { return m_xpr; }
|
|
191
|
+
|
|
192
|
+
/** \returns the nested expression */
|
|
193
|
+
EIGEN_DEVICE_FUNC
|
|
194
|
+
typename internal::remove_reference<XprType>::type&
|
|
195
|
+
nestedExpression() { return m_xpr; }
|
|
196
|
+
|
|
197
|
+
protected:
|
|
198
|
+
|
|
199
|
+
MatrixTypeNested m_xpr;
|
|
200
|
+
const internal::variable_if_dynamic<Index, Rows> m_rows;
|
|
201
|
+
const internal::variable_if_dynamic<Index, Cols> m_cols;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
/** \internal Internal implementation of dense Reshaped in the direct access case. */
|
|
206
|
+
template<typename XprType, int Rows, int Cols, int Order>
|
|
207
|
+
class ReshapedImpl_dense<XprType, Rows, Cols, Order, true>
|
|
208
|
+
: public MapBase<Reshaped<XprType, Rows, Cols, Order> >
|
|
209
|
+
{
|
|
210
|
+
typedef Reshaped<XprType, Rows, Cols, Order> ReshapedType;
|
|
211
|
+
typedef typename internal::ref_selector<XprType>::non_const_type XprTypeNested;
|
|
212
|
+
public:
|
|
213
|
+
|
|
214
|
+
typedef MapBase<ReshapedType> Base;
|
|
215
|
+
EIGEN_DENSE_PUBLIC_INTERFACE(ReshapedType)
|
|
216
|
+
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ReshapedImpl_dense)
|
|
217
|
+
|
|
218
|
+
/** Fixed-size constructor
|
|
219
|
+
*/
|
|
220
|
+
EIGEN_DEVICE_FUNC
|
|
221
|
+
inline ReshapedImpl_dense(XprType& xpr)
|
|
222
|
+
: Base(xpr.data()), m_xpr(xpr)
|
|
223
|
+
{}
|
|
224
|
+
|
|
225
|
+
/** Dynamic-size constructor
|
|
226
|
+
*/
|
|
227
|
+
EIGEN_DEVICE_FUNC
|
|
228
|
+
inline ReshapedImpl_dense(XprType& xpr, Index nRows, Index nCols)
|
|
229
|
+
: Base(xpr.data(), nRows, nCols),
|
|
230
|
+
m_xpr(xpr)
|
|
231
|
+
{}
|
|
232
|
+
|
|
233
|
+
EIGEN_DEVICE_FUNC
|
|
234
|
+
const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
|
|
235
|
+
{
|
|
236
|
+
return m_xpr;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
EIGEN_DEVICE_FUNC
|
|
240
|
+
XprType& nestedExpression() { return m_xpr; }
|
|
241
|
+
|
|
242
|
+
/** \sa MapBase::innerStride() */
|
|
243
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
244
|
+
inline Index innerStride() const
|
|
245
|
+
{
|
|
246
|
+
return m_xpr.innerStride();
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/** \sa MapBase::outerStride() */
|
|
250
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
251
|
+
inline Index outerStride() const
|
|
252
|
+
{
|
|
253
|
+
return ((Flags&RowMajorBit)==RowMajorBit) ? this->cols() : this->rows();
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
protected:
|
|
257
|
+
|
|
258
|
+
XprTypeNested m_xpr;
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
// Evaluators
|
|
262
|
+
template<typename ArgType, int Rows, int Cols, int Order, bool HasDirectAccess> struct reshaped_evaluator;
|
|
263
|
+
|
|
264
|
+
template<typename ArgType, int Rows, int Cols, int Order>
|
|
265
|
+
struct evaluator<Reshaped<ArgType, Rows, Cols, Order> >
|
|
266
|
+
: reshaped_evaluator<ArgType, Rows, Cols, Order, traits<Reshaped<ArgType,Rows,Cols,Order> >::HasDirectAccess>
|
|
267
|
+
{
|
|
268
|
+
typedef Reshaped<ArgType, Rows, Cols, Order> XprType;
|
|
269
|
+
typedef typename XprType::Scalar Scalar;
|
|
270
|
+
// TODO: should check for smaller packet types
|
|
271
|
+
typedef typename packet_traits<Scalar>::type PacketScalar;
|
|
272
|
+
|
|
273
|
+
enum {
|
|
274
|
+
CoeffReadCost = evaluator<ArgType>::CoeffReadCost,
|
|
275
|
+
HasDirectAccess = traits<XprType>::HasDirectAccess,
|
|
276
|
+
|
|
277
|
+
// RowsAtCompileTime = traits<XprType>::RowsAtCompileTime,
|
|
278
|
+
// ColsAtCompileTime = traits<XprType>::ColsAtCompileTime,
|
|
279
|
+
// MaxRowsAtCompileTime = traits<XprType>::MaxRowsAtCompileTime,
|
|
280
|
+
// MaxColsAtCompileTime = traits<XprType>::MaxColsAtCompileTime,
|
|
281
|
+
//
|
|
282
|
+
// InnerStrideAtCompileTime = traits<XprType>::HasSameStorageOrderAsXprType
|
|
283
|
+
// ? int(inner_stride_at_compile_time<ArgType>::ret)
|
|
284
|
+
// : Dynamic,
|
|
285
|
+
// OuterStrideAtCompileTime = Dynamic,
|
|
286
|
+
|
|
287
|
+
FlagsLinearAccessBit = (traits<XprType>::RowsAtCompileTime == 1 || traits<XprType>::ColsAtCompileTime == 1 || HasDirectAccess) ? LinearAccessBit : 0,
|
|
288
|
+
FlagsRowMajorBit = (traits<XprType>::ReshapedStorageOrder==int(RowMajor)) ? RowMajorBit : 0,
|
|
289
|
+
FlagsDirectAccessBit = HasDirectAccess ? DirectAccessBit : 0,
|
|
290
|
+
Flags0 = evaluator<ArgType>::Flags & (HereditaryBits & ~RowMajorBit),
|
|
291
|
+
Flags = Flags0 | FlagsLinearAccessBit | FlagsRowMajorBit | FlagsDirectAccessBit,
|
|
292
|
+
|
|
293
|
+
PacketAlignment = unpacket_traits<PacketScalar>::alignment,
|
|
294
|
+
Alignment = evaluator<ArgType>::Alignment
|
|
295
|
+
};
|
|
296
|
+
typedef reshaped_evaluator<ArgType, Rows, Cols, Order, HasDirectAccess> reshaped_evaluator_type;
|
|
297
|
+
EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr) : reshaped_evaluator_type(xpr)
|
|
298
|
+
{
|
|
299
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
template<typename ArgType, int Rows, int Cols, int Order>
|
|
304
|
+
struct reshaped_evaluator<ArgType, Rows, Cols, Order, /* HasDirectAccess */ false>
|
|
305
|
+
: evaluator_base<Reshaped<ArgType, Rows, Cols, Order> >
|
|
306
|
+
{
|
|
307
|
+
typedef Reshaped<ArgType, Rows, Cols, Order> XprType;
|
|
308
|
+
|
|
309
|
+
enum {
|
|
310
|
+
CoeffReadCost = evaluator<ArgType>::CoeffReadCost /* TODO + cost of index computations */,
|
|
311
|
+
|
|
312
|
+
Flags = (evaluator<ArgType>::Flags & (HereditaryBits /*| LinearAccessBit | DirectAccessBit*/)),
|
|
313
|
+
|
|
314
|
+
Alignment = 0
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
EIGEN_DEVICE_FUNC explicit reshaped_evaluator(const XprType& xpr) : m_argImpl(xpr.nestedExpression()), m_xpr(xpr)
|
|
318
|
+
{
|
|
319
|
+
EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
typedef typename XprType::Scalar Scalar;
|
|
323
|
+
typedef typename XprType::CoeffReturnType CoeffReturnType;
|
|
324
|
+
|
|
325
|
+
typedef std::pair<Index, Index> RowCol;
|
|
326
|
+
|
|
327
|
+
inline RowCol index_remap(Index rowId, Index colId) const
|
|
328
|
+
{
|
|
329
|
+
if(Order==ColMajor)
|
|
330
|
+
{
|
|
331
|
+
const Index nth_elem_idx = colId * m_xpr.rows() + rowId;
|
|
332
|
+
return RowCol(nth_elem_idx % m_xpr.nestedExpression().rows(),
|
|
333
|
+
nth_elem_idx / m_xpr.nestedExpression().rows());
|
|
334
|
+
}
|
|
335
|
+
else
|
|
336
|
+
{
|
|
337
|
+
const Index nth_elem_idx = colId + rowId * m_xpr.cols();
|
|
338
|
+
return RowCol(nth_elem_idx / m_xpr.nestedExpression().cols(),
|
|
339
|
+
nth_elem_idx % m_xpr.nestedExpression().cols());
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
EIGEN_DEVICE_FUNC
|
|
344
|
+
inline Scalar& coeffRef(Index rowId, Index colId)
|
|
345
|
+
{
|
|
346
|
+
EIGEN_STATIC_ASSERT_LVALUE(XprType)
|
|
347
|
+
const RowCol row_col = index_remap(rowId, colId);
|
|
348
|
+
return m_argImpl.coeffRef(row_col.first, row_col.second);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
EIGEN_DEVICE_FUNC
|
|
352
|
+
inline const Scalar& coeffRef(Index rowId, Index colId) const
|
|
353
|
+
{
|
|
354
|
+
const RowCol row_col = index_remap(rowId, colId);
|
|
355
|
+
return m_argImpl.coeffRef(row_col.first, row_col.second);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
EIGEN_DEVICE_FUNC
|
|
359
|
+
EIGEN_STRONG_INLINE const CoeffReturnType coeff(Index rowId, Index colId) const
|
|
360
|
+
{
|
|
361
|
+
const RowCol row_col = index_remap(rowId, colId);
|
|
362
|
+
return m_argImpl.coeff(row_col.first, row_col.second);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
EIGEN_DEVICE_FUNC
|
|
366
|
+
inline Scalar& coeffRef(Index index)
|
|
367
|
+
{
|
|
368
|
+
EIGEN_STATIC_ASSERT_LVALUE(XprType)
|
|
369
|
+
const RowCol row_col = index_remap(Rows == 1 ? 0 : index,
|
|
370
|
+
Rows == 1 ? index : 0);
|
|
371
|
+
return m_argImpl.coeffRef(row_col.first, row_col.second);
|
|
372
|
+
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
EIGEN_DEVICE_FUNC
|
|
376
|
+
inline const Scalar& coeffRef(Index index) const
|
|
377
|
+
{
|
|
378
|
+
const RowCol row_col = index_remap(Rows == 1 ? 0 : index,
|
|
379
|
+
Rows == 1 ? index : 0);
|
|
380
|
+
return m_argImpl.coeffRef(row_col.first, row_col.second);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
EIGEN_DEVICE_FUNC
|
|
384
|
+
inline const CoeffReturnType coeff(Index index) const
|
|
385
|
+
{
|
|
386
|
+
const RowCol row_col = index_remap(Rows == 1 ? 0 : index,
|
|
387
|
+
Rows == 1 ? index : 0);
|
|
388
|
+
return m_argImpl.coeff(row_col.first, row_col.second);
|
|
389
|
+
}
|
|
390
|
+
#if 0
|
|
391
|
+
EIGEN_DEVICE_FUNC
|
|
392
|
+
template<int LoadMode>
|
|
393
|
+
inline PacketScalar packet(Index rowId, Index colId) const
|
|
394
|
+
{
|
|
395
|
+
const RowCol row_col = index_remap(rowId, colId);
|
|
396
|
+
return m_argImpl.template packet<Unaligned>(row_col.first, row_col.second);
|
|
397
|
+
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
template<int LoadMode>
|
|
401
|
+
EIGEN_DEVICE_FUNC
|
|
402
|
+
inline void writePacket(Index rowId, Index colId, const PacketScalar& val)
|
|
403
|
+
{
|
|
404
|
+
const RowCol row_col = index_remap(rowId, colId);
|
|
405
|
+
m_argImpl.const_cast_derived().template writePacket<Unaligned>
|
|
406
|
+
(row_col.first, row_col.second, val);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
template<int LoadMode>
|
|
410
|
+
EIGEN_DEVICE_FUNC
|
|
411
|
+
inline PacketScalar packet(Index index) const
|
|
412
|
+
{
|
|
413
|
+
const RowCol row_col = index_remap(RowsAtCompileTime == 1 ? 0 : index,
|
|
414
|
+
RowsAtCompileTime == 1 ? index : 0);
|
|
415
|
+
return m_argImpl.template packet<Unaligned>(row_col.first, row_col.second);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
template<int LoadMode>
|
|
419
|
+
EIGEN_DEVICE_FUNC
|
|
420
|
+
inline void writePacket(Index index, const PacketScalar& val)
|
|
421
|
+
{
|
|
422
|
+
const RowCol row_col = index_remap(RowsAtCompileTime == 1 ? 0 : index,
|
|
423
|
+
RowsAtCompileTime == 1 ? index : 0);
|
|
424
|
+
return m_argImpl.template packet<Unaligned>(row_col.first, row_col.second, val);
|
|
425
|
+
}
|
|
426
|
+
#endif
|
|
427
|
+
protected:
|
|
428
|
+
|
|
429
|
+
evaluator<ArgType> m_argImpl;
|
|
430
|
+
const XprType& m_xpr;
|
|
431
|
+
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
template<typename ArgType, int Rows, int Cols, int Order>
|
|
435
|
+
struct reshaped_evaluator<ArgType, Rows, Cols, Order, /* HasDirectAccess */ true>
|
|
436
|
+
: mapbase_evaluator<Reshaped<ArgType, Rows, Cols, Order>,
|
|
437
|
+
typename Reshaped<ArgType, Rows, Cols, Order>::PlainObject>
|
|
438
|
+
{
|
|
439
|
+
typedef Reshaped<ArgType, Rows, Cols, Order> XprType;
|
|
440
|
+
typedef typename XprType::Scalar Scalar;
|
|
441
|
+
|
|
442
|
+
EIGEN_DEVICE_FUNC explicit reshaped_evaluator(const XprType& xpr)
|
|
443
|
+
: mapbase_evaluator<XprType, typename XprType::PlainObject>(xpr)
|
|
444
|
+
{
|
|
445
|
+
// TODO: for the 3.4 release, this should be turned to an internal assertion, but let's keep it as is for the beta lifetime
|
|
446
|
+
eigen_assert(((internal::UIntPtr(xpr.data()) % EIGEN_PLAIN_ENUM_MAX(1,evaluator<XprType>::Alignment)) == 0) && "data is not aligned");
|
|
447
|
+
}
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
} // end namespace internal
|
|
451
|
+
|
|
452
|
+
} // end namespace Eigen
|
|
453
|
+
|
|
454
|
+
#endif // EIGEN_RESHAPED_H
|
|
@@ -60,8 +60,10 @@ template<typename Derived> class ReturnByValue
|
|
|
60
60
|
EIGEN_DEVICE_FUNC
|
|
61
61
|
inline void evalTo(Dest& dst) const
|
|
62
62
|
{ static_cast<const Derived*>(this)->evalTo(dst); }
|
|
63
|
-
EIGEN_DEVICE_FUNC
|
|
64
|
-
|
|
63
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
64
|
+
inline Index rows() const EIGEN_NOEXCEPT { return static_cast<const Derived*>(this)->rows(); }
|
|
65
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
66
|
+
inline Index cols() const EIGEN_NOEXCEPT { return static_cast<const Derived*>(this)->cols(); }
|
|
65
67
|
|
|
66
68
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
67
69
|
#define Unusable YOU_ARE_TRYING_TO_ACCESS_A_SINGLE_COEFFICIENT_IN_A_SPECIAL_EXPRESSION_WHERE_THAT_IS_NOT_ALLOWED_BECAUSE_THAT_WOULD_BE_INEFFICIENT
|
|
@@ -79,7 +81,7 @@ template<typename Derived> class ReturnByValue
|
|
|
79
81
|
|
|
80
82
|
template<typename Derived>
|
|
81
83
|
template<typename OtherDerived>
|
|
82
|
-
Derived& DenseBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other)
|
|
84
|
+
EIGEN_DEVICE_FUNC Derived& DenseBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other)
|
|
83
85
|
{
|
|
84
86
|
other.evalTo(derived());
|
|
85
87
|
return derived();
|
|
@@ -90,7 +92,7 @@ namespace internal {
|
|
|
90
92
|
// Expression is evaluated in a temporary; default implementation of Assignment is bypassed so that
|
|
91
93
|
// when a ReturnByValue expression is assigned, the evaluator is not constructed.
|
|
92
94
|
// TODO: Finalize port to new regime; ReturnByValue should not exist in the expression world
|
|
93
|
-
|
|
95
|
+
|
|
94
96
|
template<typename Derived>
|
|
95
97
|
struct evaluator<ReturnByValue<Derived> >
|
|
96
98
|
: public evaluator<typename internal::traits<Derived>::ReturnType>
|
|
@@ -98,7 +100,7 @@ struct evaluator<ReturnByValue<Derived> >
|
|
|
98
100
|
typedef ReturnByValue<Derived> XprType;
|
|
99
101
|
typedef typename internal::traits<Derived>::ReturnType PlainObject;
|
|
100
102
|
typedef evaluator<PlainObject> Base;
|
|
101
|
-
|
|
103
|
+
|
|
102
104
|
EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr)
|
|
103
105
|
: m_result(xpr.rows(), xpr.cols())
|
|
104
106
|
{
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
#ifndef EIGEN_REVERSE_H
|
|
13
13
|
#define EIGEN_REVERSE_H
|
|
14
14
|
|
|
15
|
-
namespace Eigen {
|
|
15
|
+
namespace Eigen {
|
|
16
16
|
|
|
17
17
|
namespace internal {
|
|
18
18
|
|
|
@@ -44,7 +44,7 @@ template<typename PacketType> struct reverse_packet_cond<PacketType,false>
|
|
|
44
44
|
static inline PacketType run(const PacketType& x) { return x; }
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
-
} // end namespace internal
|
|
47
|
+
} // end namespace internal
|
|
48
48
|
|
|
49
49
|
/** \class Reverse
|
|
50
50
|
* \ingroup Core_Module
|
|
@@ -89,8 +89,10 @@ template<typename MatrixType, int Direction> class Reverse
|
|
|
89
89
|
|
|
90
90
|
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Reverse)
|
|
91
91
|
|
|
92
|
-
EIGEN_DEVICE_FUNC
|
|
93
|
-
|
|
92
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
93
|
+
inline Index rows() const EIGEN_NOEXCEPT { return m_matrix.rows(); }
|
|
94
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
95
|
+
inline Index cols() const EIGEN_NOEXCEPT { return m_matrix.cols(); }
|
|
94
96
|
|
|
95
97
|
EIGEN_DEVICE_FUNC inline Index innerStride() const
|
|
96
98
|
{
|
|
@@ -98,7 +100,7 @@ template<typename MatrixType, int Direction> class Reverse
|
|
|
98
100
|
}
|
|
99
101
|
|
|
100
102
|
EIGEN_DEVICE_FUNC const typename internal::remove_all<typename MatrixType::Nested>::type&
|
|
101
|
-
nestedExpression() const
|
|
103
|
+
nestedExpression() const
|
|
102
104
|
{
|
|
103
105
|
return m_matrix;
|
|
104
106
|
}
|
|
@@ -114,7 +116,7 @@ template<typename MatrixType, int Direction> class Reverse
|
|
|
114
116
|
*
|
|
115
117
|
*/
|
|
116
118
|
template<typename Derived>
|
|
117
|
-
inline typename DenseBase<Derived>::ReverseReturnType
|
|
119
|
+
EIGEN_DEVICE_FUNC inline typename DenseBase<Derived>::ReverseReturnType
|
|
118
120
|
DenseBase<Derived>::reverse()
|
|
119
121
|
{
|
|
120
122
|
return ReverseReturnType(derived());
|
|
@@ -136,7 +138,7 @@ DenseBase<Derived>::reverse()
|
|
|
136
138
|
*
|
|
137
139
|
* \sa VectorwiseOp::reverseInPlace(), reverse() */
|
|
138
140
|
template<typename Derived>
|
|
139
|
-
inline void DenseBase<Derived>::reverseInPlace()
|
|
141
|
+
EIGEN_DEVICE_FUNC inline void DenseBase<Derived>::reverseInPlace()
|
|
140
142
|
{
|
|
141
143
|
if(cols()>rows())
|
|
142
144
|
{
|
|
@@ -161,7 +163,7 @@ inline void DenseBase<Derived>::reverseInPlace()
|
|
|
161
163
|
}
|
|
162
164
|
|
|
163
165
|
namespace internal {
|
|
164
|
-
|
|
166
|
+
|
|
165
167
|
template<int Direction>
|
|
166
168
|
struct vectorwise_reverse_inplace_impl;
|
|
167
169
|
|
|
@@ -171,8 +173,10 @@ struct vectorwise_reverse_inplace_impl<Vertical>
|
|
|
171
173
|
template<typename ExpressionType>
|
|
172
174
|
static void run(ExpressionType &xpr)
|
|
173
175
|
{
|
|
176
|
+
const int HalfAtCompileTime = ExpressionType::RowsAtCompileTime==Dynamic?Dynamic:ExpressionType::RowsAtCompileTime/2;
|
|
174
177
|
Index half = xpr.rows()/2;
|
|
175
|
-
xpr.topRows(
|
|
178
|
+
xpr.topRows(fix<HalfAtCompileTime>(half))
|
|
179
|
+
.swap(xpr.bottomRows(fix<HalfAtCompileTime>(half)).colwise().reverse());
|
|
176
180
|
}
|
|
177
181
|
};
|
|
178
182
|
|
|
@@ -182,8 +186,10 @@ struct vectorwise_reverse_inplace_impl<Horizontal>
|
|
|
182
186
|
template<typename ExpressionType>
|
|
183
187
|
static void run(ExpressionType &xpr)
|
|
184
188
|
{
|
|
189
|
+
const int HalfAtCompileTime = ExpressionType::ColsAtCompileTime==Dynamic?Dynamic:ExpressionType::ColsAtCompileTime/2;
|
|
185
190
|
Index half = xpr.cols()/2;
|
|
186
|
-
xpr.leftCols(
|
|
191
|
+
xpr.leftCols(fix<HalfAtCompileTime>(half))
|
|
192
|
+
.swap(xpr.rightCols(fix<HalfAtCompileTime>(half)).rowwise().reverse());
|
|
187
193
|
}
|
|
188
194
|
};
|
|
189
195
|
|
|
@@ -201,9 +207,9 @@ struct vectorwise_reverse_inplace_impl<Horizontal>
|
|
|
201
207
|
*
|
|
202
208
|
* \sa DenseBase::reverseInPlace(), reverse() */
|
|
203
209
|
template<typename ExpressionType, int Direction>
|
|
204
|
-
void VectorwiseOp<ExpressionType,Direction>::reverseInPlace()
|
|
210
|
+
EIGEN_DEVICE_FUNC void VectorwiseOp<ExpressionType,Direction>::reverseInPlace()
|
|
205
211
|
{
|
|
206
|
-
internal::vectorwise_reverse_inplace_impl<Direction>::run(
|
|
212
|
+
internal::vectorwise_reverse_inplace_impl<Direction>::run(m_matrix);
|
|
207
213
|
}
|
|
208
214
|
|
|
209
215
|
} // end namespace Eigen
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
#ifndef EIGEN_SELECT_H
|
|
11
11
|
#define EIGEN_SELECT_H
|
|
12
12
|
|
|
13
|
-
namespace Eigen {
|
|
13
|
+
namespace Eigen {
|
|
14
14
|
|
|
15
15
|
/** \class Select
|
|
16
16
|
* \ingroup Core_Module
|
|
@@ -67,8 +67,10 @@ class Select : public internal::dense_xpr_base< Select<ConditionMatrixType, Then
|
|
|
67
67
|
eigen_assert(m_condition.cols() == m_then.cols() && m_condition.cols() == m_else.cols());
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
inline EIGEN_DEVICE_FUNC
|
|
71
|
-
|
|
70
|
+
inline EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
71
|
+
Index rows() const EIGEN_NOEXCEPT { return m_condition.rows(); }
|
|
72
|
+
inline EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
73
|
+
Index cols() const EIGEN_NOEXCEPT { return m_condition.cols(); }
|
|
72
74
|
|
|
73
75
|
inline EIGEN_DEVICE_FUNC
|
|
74
76
|
const Scalar coeff(Index i, Index j) const
|
|
@@ -120,7 +122,7 @@ class Select : public internal::dense_xpr_base< Select<ConditionMatrixType, Then
|
|
|
120
122
|
*/
|
|
121
123
|
template<typename Derived>
|
|
122
124
|
template<typename ThenDerived,typename ElseDerived>
|
|
123
|
-
inline const Select<Derived,ThenDerived,ElseDerived>
|
|
125
|
+
inline EIGEN_DEVICE_FUNC const Select<Derived,ThenDerived,ElseDerived>
|
|
124
126
|
DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
|
|
125
127
|
const DenseBase<ElseDerived>& elseMatrix) const
|
|
126
128
|
{
|
|
@@ -134,7 +136,7 @@ DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
|
|
|
134
136
|
*/
|
|
135
137
|
template<typename Derived>
|
|
136
138
|
template<typename ThenDerived>
|
|
137
|
-
inline const Select<Derived,ThenDerived, typename ThenDerived::ConstantReturnType>
|
|
139
|
+
inline EIGEN_DEVICE_FUNC const Select<Derived,ThenDerived, typename ThenDerived::ConstantReturnType>
|
|
138
140
|
DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
|
|
139
141
|
const typename ThenDerived::Scalar& elseScalar) const
|
|
140
142
|
{
|
|
@@ -149,7 +151,7 @@ DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
|
|
|
149
151
|
*/
|
|
150
152
|
template<typename Derived>
|
|
151
153
|
template<typename ElseDerived>
|
|
152
|
-
inline const Select<Derived, typename ElseDerived::ConstantReturnType, ElseDerived >
|
|
154
|
+
inline EIGEN_DEVICE_FUNC const Select<Derived, typename ElseDerived::ConstantReturnType, ElseDerived >
|
|
153
155
|
DenseBase<Derived>::select(const typename ElseDerived::Scalar& thenScalar,
|
|
154
156
|
const DenseBase<ElseDerived>& elseMatrix) const
|
|
155
157
|
{
|