1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008 Benoit Jacob <jacob.benoit.1@gmail.com> 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_CWISE_H 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_CWISE_H 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace Eigen { 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \internal 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * convenient macro to defined the return type of a cwise binary operation */ 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_CWISE_BINOP_RETURN_TYPE(OP) \ 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CwiseBinaryOp<OP<typename internal::traits<ExpressionType>::Scalar>, ExpressionType, OtherDerived> 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \internal 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * convenient macro to defined the return type of a cwise unary operation */ 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_CWISE_UNOP_RETURN_TYPE(OP) \ 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CwiseUnaryOp<OP<typename internal::traits<ExpressionType>::Scalar>, ExpressionType> 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \internal 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * convenient macro to defined the return type of a cwise comparison to a scalar */ 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_CWISE_COMP_TO_SCALAR_RETURN_TYPE(OP) \ 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CwiseBinaryOp<OP<typename internal::traits<ExpressionType>::Scalar>, ExpressionType, \ 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typename ExpressionType::ConstantReturnType > 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \class Cwise 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \brief Pseudo expression providing additional coefficient-wise operations 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \param ExpressionType the type of the object on which to do coefficient-wise operations 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This class represents an expression with additional coefficient-wise features. 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * It is the return type of MatrixBase::cwise() 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * and most of the time this is the only way it is used. 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_cwise_const.cpp 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_cwise_const.out 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This class can be extended with the help of the plugin mechanism described on the page 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \ref TopicCustomizingEigen by defining the preprocessor symbol \c EIGEN_CWISE_PLUGIN. 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::cwise() const, MatrixBase::cwise() 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class Cwise 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public: 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename internal::traits<ExpressionType>::Scalar Scalar; 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename internal::conditional<internal::must_nest_by_value<ExpressionType>::ret, 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ExpressionType, const ExpressionType&>::type ExpressionTypeNested; 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef CwiseUnaryOp<internal::scalar_add_op<Scalar>, ExpressionType> ScalarAddReturnType; 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Cwise(const ExpressionType& matrix) : m_matrix(matrix) {} 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** \internal */ 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const ExpressionType& _expression() const { return m_matrix; } 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_PRODUCT_RETURN_TYPE(ExpressionType,OtherDerived) 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator*(const MatrixBase<OtherDerived> &other) const; 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_BINOP_RETURN_TYPE(internal::scalar_quotient_op) 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator/(const MatrixBase<OtherDerived> &other) const; 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** \deprecated ArrayBase::min() */ 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_BINOP_RETURN_TYPE(internal::scalar_min_op) 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath (min)(const MatrixBase<OtherDerived> &other) const 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { return EIGEN_CWISE_BINOP_RETURN_TYPE(internal::scalar_min_op)(_expression(), other.derived()); } 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** \deprecated ArrayBase::max() */ 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_BINOP_RETURN_TYPE(internal::scalar_max_op) 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath (max)(const MatrixBase<OtherDerived> &other) const 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { return EIGEN_CWISE_BINOP_RETURN_TYPE(internal::scalar_max_op)(_expression(), other.derived()); } 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_abs_op) abs() const; 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_abs2_op) abs2() const; 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_square_op) square() const; 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_cube_op) cube() const; 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_inverse_op) inverse() const; 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_sqrt_op) sqrt() const; 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_exp_op) exp() const; 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_log_op) log() const; 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_cos_op) cos() const; 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_sin_op) sin() const; 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_UNOP_RETURN_TYPE(internal::scalar_pow_op) pow(const Scalar& exponent) const; 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const ScalarAddReturnType 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator+(const Scalar& scalar) const; 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** \relates Cwise */ 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath friend const ScalarAddReturnType 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator+(const Scalar& scalar, const Cwise& mat) 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { return mat + scalar; } 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ExpressionType& operator+=(const Scalar& scalar); 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const ScalarAddReturnType 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator-(const Scalar& scalar) const; 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ExpressionType& operator-=(const Scalar& scalar); 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline ExpressionType& operator*=(const MatrixBase<OtherDerived> &other); 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline ExpressionType& operator/=(const MatrixBase<OtherDerived> &other); 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> const EIGEN_CWISE_BINOP_RETURN_TYPE(std::less) 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator<(const MatrixBase<OtherDerived>& other) const; 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> const EIGEN_CWISE_BINOP_RETURN_TYPE(std::less_equal) 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator<=(const MatrixBase<OtherDerived>& other) const; 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> const EIGEN_CWISE_BINOP_RETURN_TYPE(std::greater) 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator>(const MatrixBase<OtherDerived>& other) const; 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> const EIGEN_CWISE_BINOP_RETURN_TYPE(std::greater_equal) 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator>=(const MatrixBase<OtherDerived>& other) const; 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> const EIGEN_CWISE_BINOP_RETURN_TYPE(std::equal_to) 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator==(const MatrixBase<OtherDerived>& other) const; 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename OtherDerived> const EIGEN_CWISE_BINOP_RETURN_TYPE(std::not_equal_to) 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator!=(const MatrixBase<OtherDerived>& other) const; 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // comparisons to a scalar value 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_COMP_TO_SCALAR_RETURN_TYPE(std::less) 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator<(Scalar s) const; 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_COMP_TO_SCALAR_RETURN_TYPE(std::less_equal) 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator<=(Scalar s) const; 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_COMP_TO_SCALAR_RETURN_TYPE(std::greater) 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator>(Scalar s) const; 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_COMP_TO_SCALAR_RETURN_TYPE(std::greater_equal) 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator>=(Scalar s) const; 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_COMP_TO_SCALAR_RETURN_TYPE(std::equal_to) 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator==(Scalar s) const; 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const EIGEN_CWISE_COMP_TO_SCALAR_RETURN_TYPE(std::not_equal_to) 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath operator!=(Scalar s) const; 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // allow to extend Cwise outside Eigen 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #ifdef EIGEN_CWISE_PLUGIN 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #include EIGEN_CWISE_PLUGIN 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath #endif 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath protected: 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ExpressionTypeNested m_matrix; 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns a Cwise wrapper of *this providing additional coefficient-wise operations 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_cwise_const.cpp 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_cwise_const.out 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class Cwise, cwise() 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline const Cwise<Derived> MatrixBase<Derived>::cwise() const 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return derived(); 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns a Cwise wrapper of *this providing additional coefficient-wise operations 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_cwise.cpp 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_cwise.out 181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class Cwise, cwise() const 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathinline Cwise<Derived> MatrixBase<Derived>::cwise() 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return derived(); 188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace Eigen 191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // EIGEN_CWISE_H 193