// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2008-2009 Gael Guennebaud // Copyright (C) 2006-2008 Benoit Jacob // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. // This file is a base class plugin containing matrix specifics coefficient wise functions. /** \returns an expression of the Schur product (coefficient wise product) of *this and \a other * * Example: \include MatrixBase_cwiseProduct.cpp * Output: \verbinclude MatrixBase_cwiseProduct.out * * \sa class CwiseBinaryOp, cwiseAbs2 */ template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const EIGEN_CWISE_BINARY_RETURN_TYPE(Derived, OtherDerived, product) cwiseProduct(const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return EIGEN_CWISE_BINARY_RETURN_TYPE(Derived, OtherDerived, product)(derived(), other.derived()); } template using CwiseBinaryEqualReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryNotEqualReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryLessReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryGreaterReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryLessOrEqualReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryGreaterOrEqualReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; /** \returns an expression of the coefficient-wise == operator of *this and \a other * * \warning this performs an exact comparison, which is generally a bad idea with floating-point types. * In order to check for equality between two vectors or matrices with floating-point coefficients, it is * generally a far better idea to use a fuzzy comparison as provided by isApprox() and * isMuchSmallerThan(). * * Example: \include MatrixBase_cwiseEqual.cpp * Output: \verbinclude MatrixBase_cwiseEqual.out * * \sa cwiseNotEqual(), isApprox(), isMuchSmallerThan() */ template EIGEN_DEVICE_FUNC inline const CwiseBinaryEqualReturnType cwiseEqual( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryEqualReturnType(derived(), other.derived()); } /** \returns an expression of the coefficient-wise != operator of *this and \a other * * \warning this performs an exact comparison, which is generally a bad idea with floating-point types. * In order to check for equality between two vectors or matrices with floating-point coefficients, it is * generally a far better idea to use a fuzzy comparison as provided by isApprox() and * isMuchSmallerThan(). * * Example: \include MatrixBase_cwiseNotEqual.cpp * Output: \verbinclude MatrixBase_cwiseNotEqual.out * * \sa cwiseEqual(), isApprox(), isMuchSmallerThan() */ template EIGEN_DEVICE_FUNC inline const CwiseBinaryNotEqualReturnType cwiseNotEqual( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryNotEqualReturnType(derived(), other.derived()); } /** \returns an expression of the coefficient-wise < operator of *this and \a other */ template EIGEN_DEVICE_FUNC inline const CwiseBinaryLessReturnType cwiseLess( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryLessReturnType(derived(), other.derived()); } /** \returns an expression of the coefficient-wise > operator of *this and \a other */ template EIGEN_DEVICE_FUNC inline const CwiseBinaryGreaterReturnType cwiseGreater( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryGreaterReturnType(derived(), other.derived()); } /** \returns an expression of the coefficient-wise <= operator of *this and \a other */ template EIGEN_DEVICE_FUNC inline const CwiseBinaryLessOrEqualReturnType cwiseLessOrEqual( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryLessOrEqualReturnType(derived(), other.derived()); } /** \returns an expression of the coefficient-wise >= operator of *this and \a other */ template EIGEN_DEVICE_FUNC inline const CwiseBinaryGreaterOrEqualReturnType cwiseGreaterOrEqual( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryGreaterOrEqualReturnType(derived(), other.derived()); } /** \returns an expression of the coefficient-wise min of *this and \a other * * Example: \include MatrixBase_cwiseMin.cpp * Output: \verbinclude MatrixBase_cwiseMin.out * * \sa class CwiseBinaryOp, max() */ template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp, const Derived, const OtherDerived> cwiseMin(const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryOp, const Derived, const OtherDerived>( derived(), other.derived()); } /** \returns an expression of the coefficient-wise min of *this and scalar \a other * * \sa class CwiseBinaryOp, min() */ template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp, const Derived, const ConstantReturnType> cwiseMin(const Scalar& other) const { return cwiseMin(Derived::Constant(rows(), cols(), other)); } /** \returns an expression of the coefficient-wise max of *this and \a other * * Example: \include MatrixBase_cwiseMax.cpp * Output: \verbinclude MatrixBase_cwiseMax.out * * \sa class CwiseBinaryOp, min() */ template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp, const Derived, const OtherDerived> cwiseMax(const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryOp, const Derived, const OtherDerived>( derived(), other.derived()); } /** \returns an expression of the coefficient-wise max of *this and scalar \a other * * \sa class CwiseBinaryOp, min() */ template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp, const Derived, const ConstantReturnType> cwiseMax(const Scalar& other) const { return cwiseMax(Derived::Constant(rows(), cols(), other)); } /** \returns an expression of the coefficient-wise quotient of *this and \a other * * Example: \include MatrixBase_cwiseQuotient.cpp * Output: \verbinclude MatrixBase_cwiseQuotient.out * * \sa class CwiseBinaryOp, cwiseProduct(), cwiseInverse() */ template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp, const Derived, const OtherDerived> cwiseQuotient(const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryOp, const Derived, const OtherDerived>(derived(), other.derived()); } using CwiseScalarEqualReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarNotEqualReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarLessReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarGreaterReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarLessOrEqualReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarGreaterOrEqualReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; /** \returns an expression of the coefficient-wise == operator of \c *this and a scalar \a s * * \warning this performs an exact comparison, which is generally a bad idea with floating-point types. * In order to check for equality between two vectors or matrices with floating-point coefficients, it is * generally a far better idea to use a fuzzy comparison as provided by isApprox() and * isMuchSmallerThan(). * * \sa cwiseEqual(const MatrixBase &) const */ EIGEN_DEVICE_FUNC inline const CwiseScalarEqualReturnType cwiseEqual(const Scalar& s) const { return CwiseScalarEqualReturnType(derived(), Derived::Constant(rows(), cols(), s)); } /** \returns an expression of the coefficient-wise == operator of \c *this and a scalar \a s * * \warning this performs an exact comparison, which is generally a bad idea with floating-point types. * In order to check for equality between two vectors or matrices with floating-point coefficients, it is * generally a far better idea to use a fuzzy comparison as provided by isApprox() and * isMuchSmallerThan(). * * \sa cwiseEqual(const MatrixBase &) const */ EIGEN_DEVICE_FUNC inline const CwiseScalarNotEqualReturnType cwiseNotEqual(const Scalar& s) const { return CwiseScalarNotEqualReturnType(derived(), Derived::Constant(rows(), cols(), s)); } /** \returns an expression of the coefficient-wise < operator of \c *this and a scalar \a s */ EIGEN_DEVICE_FUNC inline const CwiseScalarLessReturnType cwiseLess(const Scalar& s) const { return CwiseScalarLessReturnType(derived(), Derived::Constant(rows(), cols(), s)); } /** \returns an expression of the coefficient-wise > operator of \c *this and a scalar \a s */ EIGEN_DEVICE_FUNC inline const CwiseScalarGreaterReturnType cwiseGreater(const Scalar& s) const { return CwiseScalarGreaterReturnType(derived(), Derived::Constant(rows(), cols(), s)); } /** \returns an expression of the coefficient-wise <= operator of \c *this and a scalar \a s */ EIGEN_DEVICE_FUNC inline const CwiseScalarLessOrEqualReturnType cwiseLessOrEqual(const Scalar& s) const { return CwiseScalarLessOrEqualReturnType(derived(), Derived::Constant(rows(), cols(), s)); } /** \returns an expression of the coefficient-wise >= operator of \c *this and a scalar \a s */ EIGEN_DEVICE_FUNC inline const CwiseScalarGreaterOrEqualReturnType cwiseGreaterOrEqual(const Scalar& s) const { return CwiseScalarGreaterOrEqualReturnType(derived(), Derived::Constant(rows(), cols(), s)); } template using CwiseBinaryTypedEqualReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryTypedNotEqualReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryTypedLessReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryTypedGreaterReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryTypedLessOrEqualReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template using CwiseBinaryTypedGreaterOrEqualReturnType = CwiseBinaryOp, const Derived, const OtherDerived>; template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryTypedEqualReturnType cwiseTypedEqual( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryTypedEqualReturnType(derived(), other.derived()); } template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryTypedNotEqualReturnType cwiseTypedNotEqual( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryTypedNotEqualReturnType(derived(), other.derived()); } template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryTypedLessReturnType cwiseTypedLess( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryTypedLessReturnType(derived(), other.derived()); } template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryTypedGreaterReturnType cwiseTypedGreater( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryTypedGreaterReturnType(derived(), other.derived()); } template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryTypedLessOrEqualReturnType cwiseTypedLessOrEqual( const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryTypedLessOrEqualReturnType(derived(), other.derived()); } template EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryTypedGreaterOrEqualReturnType cwiseTypedGreaterOrEqual(const EIGEN_CURRENT_STORAGE_BASE_CLASS& other) const { return CwiseBinaryTypedGreaterOrEqualReturnType(derived(), other.derived()); } using CwiseScalarTypedEqualReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarTypedNotEqualReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarTypedLessReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarTypedGreaterReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarTypedLessOrEqualReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; using CwiseScalarTypedGreaterOrEqualReturnType = CwiseBinaryOp, const Derived, const ConstantReturnType>; EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseScalarTypedEqualReturnType cwiseTypedEqual(const Scalar& s) const { return CwiseScalarTypedEqualReturnType(derived(), ConstantReturnType(rows(), cols(), s)); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseScalarTypedNotEqualReturnType cwiseTypedNotEqual(const Scalar& s) const { return CwiseScalarTypedNotEqualReturnType(derived(), ConstantReturnType(rows(), cols(), s)); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseScalarTypedLessReturnType cwiseTypedLess(const Scalar& s) const { return CwiseScalarTypedLessReturnType(derived(), ConstantReturnType(rows(), cols(), s)); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseScalarTypedGreaterReturnType cwiseTypedGreater(const Scalar& s) const { return CwiseScalarTypedGreaterReturnType(derived(), ConstantReturnType(rows(), cols(), s)); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseScalarTypedLessOrEqualReturnType cwiseTypedLessOrEqual(const Scalar& s) const { return CwiseScalarTypedLessOrEqualReturnType(derived(), ConstantReturnType(rows(), cols(), s)); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseScalarTypedGreaterOrEqualReturnType cwiseTypedGreaterOrEqual(const Scalar& s) const { return CwiseScalarTypedGreaterOrEqualReturnType(derived(), ConstantReturnType(rows(), cols(), s)); }