SyTen

◆ impl()

template<Rank summed, Rank frank, Rank srank, typename Scalar >
DenseTensor<frank + srank - 2 * summed, Scalar> syten::DenseProduct::impl ( DenseTensor< frank, Scalar > const &  a,
DenseTensor< srank, Scalar > const &  b,
std::array< int, frank > const &  c_a,
std::array< int, srank > const &  c_b,
bool  conjugate = false,
TemporaryTransposeStorage< Scalar, frank, srank > *  tts = nullptr 
)
inline

Dense tensor-tensor contraction, default implementation.

Contracts two dense tensors into a third dense tensor according to the specification in c_a and c_b (negative indices give the placement of this leg in the result tensor, positive indices are contracted over).

If applicable, calls out to one of the special cases defined in dense_prod_special.h.

Specific cases are also specialised via explicit function specialisations of impl().

References std::array< T >::begin(), syten::conj(), syten::DenseTensor< rank, Scalar >::dim(), std::array< T >::end(), std::fill(), syten::DenseTensor< rank, Scalar >::getDims(), is_trivial_order_a(), is_trivial_order_b(), std::unique_lock< T >::lock(), std::move(), syten::YesNo< struct _prod_conj >::n(), syten::No, syten::DenseTensor< rank, Scalar >::size(), SYTEN_ASSERT_MSG, std::tie(), std::unique_lock< T >::unlock(), and syten::YesNo< struct _prod_conj >::y().

+ Here is the call graph for this function: