26 #ifndef TILEDARRAY_SRC_TILEDARRAY_TENSOR_COMPLEX_H__INCLUDED 27 #define TILEDARRAY_SRC_TILEDARRAY_TENSOR_COMPLEX_H__INCLUDED 43 typename std::enable_if<! is_complex<R>::value>::type* =
nullptr>
44 TILEDARRAY_FORCE_INLINE R
conj(
const R r) {
54 TILEDARRAY_FORCE_INLINE std::complex<R>
conj(
const std::complex<R> z) {
63 template <
typename L,
typename R,
64 typename std::enable_if<! is_complex<L>::value>::type* =
nullptr>
74 template <
typename L,
typename R,
75 typename std::enable_if<is_complex<L>::value>::type* =
nullptr>
76 TILEDARRAY_FORCE_INLINE
auto inner_product(
const L l,
const R r) {
88 typename std::enable_if<! is_complex<R>::value>::type* =
nullptr>
89 TILEDARRAY_FORCE_INLINE R
norm(
const R r) {
101 template <
typename R>
102 TILEDARRAY_FORCE_INLINE R
norm(
const std::complex<R> z) {
103 const R real = z.real();
104 const R imag = z.imag();
105 return real * real + imag * imag;
111 template <
typename S>
118 TILEDARRAY_FORCE_INLINE S
factor()
const {
return factor_; }
124 friend std::ostream& operator<<(std::ostream& os, const ComplexConjugate<S>& cc) {
125 os <<
"conj()] [" << cc.factor_;
141 operator<<(std::ostream& os, const ComplexConjugate<void>& cc) {
155 operator<<(std::ostream& os, const ComplexConjugate<ComplexNegTag>& cc) {
162 inline ComplexConjugate<void>
172 template <
typename S>
180 template <
typename S>
192 template <
typename L,
typename R>
193 TILEDARRAY_FORCE_INLINE
auto 197 template <
typename L>
198 TILEDARRAY_FORCE_INLINE
auto 202 template <
typename L>
203 TILEDARRAY_FORCE_INLINE
auto 208 template <
typename L,
typename R>
209 TILEDARRAY_FORCE_INLINE
auto 213 template <
typename R>
214 TILEDARRAY_FORCE_INLINE
auto 218 template <
typename R>
219 TILEDARRAY_FORCE_INLINE
auto 224 template <
typename L,
typename R,
225 typename std::enable_if<! std::is_void<R>::value>::type* =
nullptr>
226 TILEDARRAY_FORCE_INLINE L&
232 template <
typename L>
233 TILEDARRAY_FORCE_INLINE L&
239 template <
typename L>
240 TILEDARRAY_FORCE_INLINE L&
258 #endif // TILEDARRAY_SRC_TILEDARRAY_TENSOR_COMPLEX_H__INCLUDED int abs(const ComplexConjugate< void > &a)
TILEDARRAY_FORCE_INLINE S factor() const
TILEDARRAY_FORCE_INLINE ComplexConjugate< S > operator-() const
TILEDARRAY_FORCE_INLINE R norm(const R r)
Wrapper function for std::norm
auto abs(const ComplexConjugate< T > &a)
ComplexConjugate(const S factor)
TILEDARRAY_FORCE_INLINE std::complex< R > conj(const std::complex< R > z)
Wrapper function for std::conj.
TILEDARRAY_FORCE_INLINE L & operator*=(L &value, const ComplexConjugate< R > op)
TILEDARRAY_FORCE_INLINE R conj(const R r)
Wrapper function for std::conj
std::vector< T > operator*(const Permutation &perm, const SizeArray< T > &orig)
ComplexConjugate< S > conj_op(const S factor)
ComplexConjugate operator factory function.
TILEDARRAY_FORCE_INLINE auto inner_product(const L l, const R r)
Inner product of a real value and a numeric value.
Specialization of ComplexConjugate<S> for the case of a negative unit/identity factor.
Specialization of ComplexConjugate<S> for the case of a unit/identity factor.