max@0: // Copyright (C) 2008-2011 NICTA (www.nicta.com.au) max@0: // Copyright (C) 2008-2011 Conrad Sanderson max@0: // max@0: // This file is part of the Armadillo C++ library. max@0: // It is provided without any warranty of fitness max@0: // for any purpose. You can redistribute this file max@0: // and/or modify it under the terms of the GNU max@0: // Lesser General Public License (LGPL) as published max@0: // by the Free Software Foundation, either version 3 max@0: // of the License or (at your option) any later version. max@0: // (see http://www.opensource.org/licenses for more info) max@0: max@0: max@0: //! \addtogroup fn_elem max@0: //! @{ max@0: max@0: max@0: max@0: // max@0: // find max@0: max@0: template max@0: inline max@0: const mtOp max@0: find(const Base& X, const uword k = 0, const char* direction = "first") max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: const char sig = direction[0]; max@0: max@0: arma_debug_check max@0: ( max@0: (sig != 'f' && sig != 'F' && sig != 'l' && sig != 'L'), max@0: "find(): 3rd input argument must be \"first\" or \"last\"" max@0: ); max@0: max@0: const uword type = (sig == 'f' || sig == 'F') ? 0 : 1; max@0: max@0: return mtOp(X.get_ref(), k, type); max@0: } max@0: max@0: max@0: max@0: // max@0: // real max@0: max@0: template max@0: arma_inline max@0: const T1& max@0: real(const Base& X) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return X.get_ref(); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const T1& max@0: real(const BaseCube& X) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return X.get_ref(); max@0: } max@0: max@0: max@0: max@0: template max@0: inline max@0: const mtOp max@0: real(const Base, T1>& X) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return mtOp( X.get_ref() ); max@0: } max@0: max@0: max@0: max@0: template max@0: inline max@0: const mtOpCube max@0: real(const BaseCube, T1>& X) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return mtOpCube( X.get_ref() ); max@0: } max@0: max@0: max@0: max@0: // max@0: // imag max@0: max@0: template max@0: inline max@0: const Gen max@0: imag(const Base& X) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: const Proxy A(X.get_ref()); max@0: max@0: return Gen(A.get_n_rows(), A.get_n_cols()); max@0: } max@0: max@0: max@0: max@0: template max@0: inline max@0: const GenCube max@0: imag(const BaseCube& X) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: const ProxyCube A(X.get_ref()); max@0: max@0: return GenCube(A.get_n_rows(), A.get_n_cols(), A.get_n_slices()); max@0: } max@0: max@0: max@0: max@0: template max@0: inline max@0: const mtOp max@0: imag(const Base, T1>& X) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return mtOp( X.get_ref() ); max@0: } max@0: max@0: max@0: max@0: template max@0: inline max@0: const mtOpCube max@0: imag(const BaseCube,T1>& X) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return mtOpCube( X.get_ref() ); max@0: } max@0: max@0: max@0: max@0: // max@0: // log max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: log(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: log(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: // max@0: // log2 max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: log2(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: log2(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: // max@0: // log10 max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: log10(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: log10(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: // max@0: // exp max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: exp(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: exp(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: // exp2 max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: exp2(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: exp2(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: // exp10 max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: exp10(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: exp10(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: // max@0: // abs max@0: max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: abs(const Base& X, const typename arma_not_cx::result* junk = 0) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: arma_ignore(junk); max@0: max@0: return eOp(X.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: abs(const BaseCube& X, const typename arma_not_cx::result* junk = 0) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: arma_ignore(junk); max@0: max@0: return eOpCube(X.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: inline max@0: const mtOp max@0: abs(const Base, T1>& X, const typename arma_cx_only::result* junk = 0) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: arma_ignore(junk); max@0: max@0: return mtOp( X.get_ref() ); max@0: } max@0: max@0: max@0: max@0: template max@0: inline max@0: const mtOpCube max@0: abs(const BaseCube< std::complex,T1>& X, const typename arma_cx_only::result* junk = 0) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: arma_ignore(junk); max@0: max@0: return mtOpCube( X.get_ref() ); max@0: } max@0: max@0: max@0: max@0: // max@0: // square max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: square(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: square(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: // max@0: // sqrt max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: sqrt(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: sqrt(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: // max@0: // conj max@0: max@0: template max@0: arma_inline max@0: const T1& max@0: conj(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return A.get_ref(); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const T1& max@0: conj(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return A.get_ref(); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: conj(const Base,T1>& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: conj(const BaseCube,T1>& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const T1& max@0: conj(const eOp& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return A.m; max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const T1& max@0: conj(const eOpCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return A.m; max@0: } max@0: max@0: max@0: max@0: // TODO: this needs a more elaborate template restriction mechanism to work properly, max@0: // i.e. an overloaded version of thus function should do nothing if the input type is non-complex max@0: // max@0: // //! the conjugate of the transpose of a complex matrix is the same as the hermitian transpose max@0: // template max@0: // arma_inline max@0: // const Op max@0: // conj(const Op& A) max@0: // { max@0: // arma_extra_debug_sigprint(); max@0: // max@0: // return Op(A.m); max@0: // } max@0: max@0: max@0: max@0: // pow max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: pow(const Base& A, const typename T1::elem_type exponent) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref(), exponent); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: pow(const BaseCube& A, const typename T1::elem_type exponent) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref(), exponent); max@0: } max@0: max@0: max@0: max@0: // pow, specialised handling (non-complex exponent for complex matrices) max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: pow(const Base& A, const typename T1::elem_type::value_type exponent) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: typedef typename T1::elem_type eT; max@0: max@0: return eOp(A.get_ref(), eT(exponent)); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: pow(const BaseCube& A, const typename T1::elem_type::value_type exponent) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: typedef typename T1::elem_type eT; max@0: max@0: return eOpCube(A.get_ref(), eT(exponent)); max@0: } max@0: max@0: max@0: max@0: // max@0: // floor max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: floor(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: floor(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: // max@0: // ceil max@0: max@0: template max@0: arma_inline max@0: const eOp max@0: ceil(const Base& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOp(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: template max@0: arma_inline max@0: const eOpCube max@0: ceil(const BaseCube& A) max@0: { max@0: arma_extra_debug_sigprint(); max@0: max@0: return eOpCube(A.get_ref()); max@0: } max@0: max@0: max@0: max@0: //! @}