num_dimensions.cpp
Go to the documentation of this file.
1 // This file is part of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2018 Gael Guennebaud <gael.guennebaud@inria.fr>
5 //
6 // This Source Code Form is subject to the terms of the Mozilla
7 // Public License v. 2.0. If a copy of the MPL was not distributed
8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 
10 #include "main.h"
11 #include <Eigen/SparseCore>
12 
13 template<int ExpectedDim,typename Xpr>
14 void check_dim(const Xpr& ) {
15  STATIC_CHECK( Xpr::NumDimensions == ExpectedDim );
16 }
17 
18 #if EIGEN_HAS_CXX11
19 template<template <typename,int,int> class Object>
20 void map_num_dimensions()
21 {
22  typedef Object<double, 1, 1> ArrayScalarType;
23  typedef Object<double, 2, 1> ArrayVectorType;
24  typedef Object<double, 1, 2> TransposeArrayVectorType;
25  typedef Object<double, 2, 2> ArrayType;
26  typedef Object<double, Eigen::Dynamic, 1> DynamicArrayVectorType;
27  typedef Object<double, 1, Eigen::Dynamic> DynamicTransposeArrayVectorType;
28  typedef Object<double, Eigen::Dynamic, Eigen::Dynamic> DynamicArrayType;
29 
30  STATIC_CHECK(ArrayScalarType::NumDimensions == 0);
31  STATIC_CHECK(ArrayVectorType::NumDimensions == 1);
32  STATIC_CHECK(TransposeArrayVectorType::NumDimensions == 1);
33  STATIC_CHECK(ArrayType::NumDimensions == 2);
34  STATIC_CHECK(DynamicArrayVectorType::NumDimensions == 1);
35  STATIC_CHECK(DynamicTransposeArrayVectorType::NumDimensions == 1);
36  STATIC_CHECK(DynamicArrayType::NumDimensions == 2);
37 
38  typedef Eigen::Map<ArrayScalarType> ArrayScalarMap;
39  typedef Eigen::Map<ArrayVectorType> ArrayVectorMap;
40  typedef Eigen::Map<TransposeArrayVectorType> TransposeArrayVectorMap;
41  typedef Eigen::Map<ArrayType> ArrayMap;
42  typedef Eigen::Map<DynamicArrayVectorType> DynamicArrayVectorMap;
43  typedef Eigen::Map<DynamicTransposeArrayVectorType> DynamicTransposeArrayVectorMap;
44  typedef Eigen::Map<DynamicArrayType> DynamicArrayMap;
45 
46  STATIC_CHECK(ArrayScalarMap::NumDimensions == 0);
47  STATIC_CHECK(ArrayVectorMap::NumDimensions == 1);
48  STATIC_CHECK(TransposeArrayVectorMap::NumDimensions == 1);
49  STATIC_CHECK(ArrayMap::NumDimensions == 2);
50  STATIC_CHECK(DynamicArrayVectorMap::NumDimensions == 1);
51  STATIC_CHECK(DynamicTransposeArrayVectorMap::NumDimensions == 1);
52  STATIC_CHECK(DynamicArrayMap::NumDimensions == 2);
53 }
54 
55 template<typename Scalar, int Rows, int Cols>
56 using TArray = Array<Scalar,Rows,Cols>;
57 
58 template<typename Scalar, int Rows, int Cols>
59 using TMatrix = Matrix<Scalar,Rows,Cols>;
60 
61 #endif
62 
63 EIGEN_DECLARE_TEST(num_dimensions)
64 {
65  int n = 10;
66  ArrayXXd A(n,n);
67  CALL_SUBTEST( check_dim<2>(A) );
68  CALL_SUBTEST( check_dim<2>(A.block(1,1,2,2)) );
69  CALL_SUBTEST( check_dim<1>(A.col(1)) );
70  CALL_SUBTEST( check_dim<1>(A.row(1)) );
71 
72  MatrixXd M(n,n);
73  CALL_SUBTEST( check_dim<0>(M.row(1)*M.col(1)) );
74 
76  CALL_SUBTEST( check_dim<2>(S) );
77  CALL_SUBTEST( check_dim<2>(S.block(1,1,2,2)) );
78  CALL_SUBTEST( check_dim<1>(S.col(1)) );
79  CALL_SUBTEST( check_dim<1>(S.row(1)) );
80 
82  CALL_SUBTEST( check_dim<1>(s) );
83  CALL_SUBTEST( check_dim<1>(s.head(2)) );
84 
85 
86  #if EIGEN_HAS_CXX11
87  CALL_SUBTEST( map_num_dimensions<TArray>() );
88  CALL_SUBTEST( map_num_dimensions<TMatrix>() );
89  #endif
90 }
Eigen::SparseMatrix< double >
s
RealScalar s
Definition: level1_cplx_impl.h:126
Eigen::Array
General-purpose arrays with easy API for coefficient-wise operations.
Definition: Array.h:45
A
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:48
n
int n
Definition: BiCGSTAB_simple.cpp:1
Object
Reference counted object base class.
Definition: object.h:9
check_dim
void check_dim(const Xpr &)
Definition: num_dimensions.cpp:14
Eigen::Map
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:94
main.h
Eigen::SparseVector< double >
EIGEN_DECLARE_TEST
EIGEN_DECLARE_TEST(num_dimensions)
Definition: num_dimensions.cpp:63
Eigen::Matrix
The matrix class, also used for vectors and row-vectors.
Definition: 3rdparty/Eigen/Eigen/src/Core/Matrix.h:178
STATIC_CHECK
#define STATIC_CHECK(COND)
Definition: main.h:397
S
DiscreteKey S(1, 2)
CALL_SUBTEST
#define CALL_SUBTEST(FUNC)
Definition: main.h:399
M
Matrix< RealScalar, Dynamic, Dynamic > M
Definition: bench_gemm.cpp:51


gtsam
Author(s):
autogenerated on Sun Dec 22 2024 04:12:24