level1_cplx_impl.h
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) 2009-2010 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 "common.h"
11 
15  inline RealScalar operator() (const Scalar& a) const { return numext::norm1(a); }
16 };
17 namespace Eigen {
18  namespace internal {
19  template<> struct functor_traits<scalar_norm1_op >
20  {
21  enum { Cost = 3 * NumTraits<Scalar>::AddCost, PacketAccess = 0 };
22  };
23  }
24 }
25 
26 // computes the sum of magnitudes of all vector elements or, for a complex vector x, the sum
27 // res = |Rex1| + |Imx1| + |Rex2| + |Imx2| + ... + |Rexn| + |Imxn|, where x is a vector of order n
29 {
30 // std::cerr << "__asum " << *n << " " << *incx << "\n";
31  Complex* x = reinterpret_cast<Complex*>(px);
32 
33  if(*n<=0) return 0;
34 
35  if(*incx==1) return make_vector(x,*n).unaryExpr<scalar_norm1_op>().sum();
36  else return make_vector(x,*n,std::abs(*incx)).unaryExpr<scalar_norm1_op>().sum();
37 }
38 
39 // computes a dot product of a conjugated vector with another vector.
40 int EIGEN_BLAS_FUNC(dotcw)(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar* pres)
41 {
42 // std::cerr << "_dotc " << *n << " " << *incx << " " << *incy << "\n";
43  Scalar* res = reinterpret_cast<Scalar*>(pres);
44 
45  if(*n<=0)
46  {
47  *res = Scalar(0);
48  return 0;
49  }
50 
51  Scalar* x = reinterpret_cast<Scalar*>(px);
52  Scalar* y = reinterpret_cast<Scalar*>(py);
53 
54  if(*incx==1 && *incy==1) *res = (make_vector(x,*n).dot(make_vector(y,*n)));
55  else if(*incx>0 && *incy>0) *res = (make_vector(x,*n,*incx).dot(make_vector(y,*n,*incy)));
56  else if(*incx<0 && *incy>0) *res = (make_vector(x,*n,-*incx).reverse().dot(make_vector(y,*n,*incy)));
57  else if(*incx>0 && *incy<0) *res = (make_vector(x,*n,*incx).dot(make_vector(y,*n,-*incy).reverse()));
58  else if(*incx<0 && *incy<0) *res = (make_vector(x,*n,-*incx).reverse().dot(make_vector(y,*n,-*incy).reverse()));
59  return 0;
60 }
61 
62 // computes a vector-vector dot product without complex conjugation.
63 int EIGEN_BLAS_FUNC(dotuw)(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar* pres)
64 {
65  Scalar* res = reinterpret_cast<Scalar*>(pres);
66 
67  if(*n<=0)
68  {
69  *res = Scalar(0);
70  return 0;
71  }
72 
73  Scalar* x = reinterpret_cast<Scalar*>(px);
74  Scalar* y = reinterpret_cast<Scalar*>(py);
75 
76  if(*incx==1 && *incy==1) *res = (make_vector(x,*n).cwiseProduct(make_vector(y,*n))).sum();
77  else if(*incx>0 && *incy>0) *res = (make_vector(x,*n,*incx).cwiseProduct(make_vector(y,*n,*incy))).sum();
78  else if(*incx<0 && *incy>0) *res = (make_vector(x,*n,-*incx).reverse().cwiseProduct(make_vector(y,*n,*incy))).sum();
79  else if(*incx>0 && *incy<0) *res = (make_vector(x,*n,*incx).cwiseProduct(make_vector(y,*n,-*incy).reverse())).sum();
80  else if(*incx<0 && *incy<0) *res = (make_vector(x,*n,-*incx).reverse().cwiseProduct(make_vector(y,*n,-*incy).reverse())).sum();
81  return 0;
82 }
83 
85 {
86 // std::cerr << "__nrm2 " << *n << " " << *incx << "\n";
87  if(*n<=0) return 0;
88 
89  Scalar* x = reinterpret_cast<Scalar*>(px);
90 
91  if(*incx==1)
92  return make_vector(x,*n).stableNorm();
93 
94  return make_vector(x,*n,*incx).stableNorm();
95 }
96 
98 {
99  if(*n<=0) return 0;
100 
101  Scalar* x = reinterpret_cast<Scalar*>(px);
102  Scalar* y = reinterpret_cast<Scalar*>(py);
105 
108 
111 
112  // TODO implement mixed real-scalar rotations
114  else if(*incx>0 && *incy<0) internal::apply_rotation_in_the_plane(vx, rvy, JacobiRotation<Scalar>(c,s));
116 
117  return 0;
118 }
119 
121 {
122  if(*n<=0) return 0;
123 
124  Scalar* x = reinterpret_cast<Scalar*>(px);
126 
127 // std::cerr << "__scal " << *n << " " << alpha << " " << *incx << "\n";
128 
129  if(*incx==1) make_vector(x,*n) *= alpha;
130  else make_vector(x,*n,std::abs(*incx)) *= alpha;
131 
132  return 0;
133 }
SCALAR Scalar
Definition: bench_gemm.cpp:33
#define EIGEN_EMPTY_STRUCT_CTOR(X)
Definition: XprHelper.h:22
Reverse< StridedVectorType > rvy(vy)
Scalar * y
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:94
int RealScalar int RealScalar int RealScalar * pc
RealScalar EIGEN_CAT(EIGEN_CAT(REAL_SCALAR_SUFFIX, SCALAR_SUFFIX), asum_)(int *n
#define SCALAR_SUFFIX
RealScalar RealScalar int * incx
int n
Namespace containing all symbols from the Eigen library.
Definition: jet.h:637
Rotation given by a cosine-sine pair.
RealScalar c
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
Definition: NumTraits.h:150
#define EIGEN_BLAS_FUNC(X)
int EIGEN_BLAS_FUNC() dotuw(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar *pres)
int RealScalar int RealScalar int RealScalar RealScalar * ps
std::complex< RealScalar > Complex
Array33i a
RealScalar result_type
#define REAL_SCALAR_SUFFIX
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
StridedVectorType vy(make_vector(y,*n, std::abs(*incy)))
int RealScalar int RealScalar * py
int RealScalar * palpha
RealScalar RealScalar * px
RealScalar alpha
RealScalar s
const mpreal sum(const mpreal tab[], const unsigned long int n, int &status, mp_rnd_t mode=mpreal::get_default_rnd())
Definition: mpreal.h:2381
int EIGEN_BLAS_FUNC() dotcw(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar *pres)
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:34
if incx return make_vector(x,*n).unaryExpr< scalar_norm1_op >().sum()
Reverse< StridedVectorType > rvx(vx)
void reverse(const MatrixType &m)
void apply_rotation_in_the_plane(DenseBase< VectorX > &xpr_x, DenseBase< VectorY > &xpr_y, const JacobiRotation< OtherScalar > &j)
Definition: Jacobi.h:432
StridedVectorType vx(make_vector(x,*n, std::abs(*incx)))
Scalar * x
Expression of the reverse of a vector or matrix.
Definition: Reverse.h:63
#define abs(x)
Definition: datatypes.h:17
int RealScalar int RealScalar int * incy


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:42:30