std::tuple< STensor, STensor, SBasisId > syten::STensorImpl::eigen_sym | ( | STensor | in, |
SBasisId | basis_to_keep, | ||
SourceLocation const & | loc = SourceLocation::current() |
||
) |
Given a rank-2 tensor X
with two bases a
and b
, this function when called as eigen_sym(X, [a|b]) returns a tuple U,D,c
such that U * D * conj(project(U, [a|b], [b|a]).unprime(c))
is equal to X
.
That is, the tensor U
has bases [a|b]
and c
and the tensor D
has bases c
and c’
. The original tensor can be obtained by contracting U
and C
over their shared index and subsequently contracting with conj(U)
where one has to prime the new index c
of this tensor and also project its basis into the one actually desired.
References syten::STensorImpl::STensor::autodiff_enabled(), syten::STensorImpl::STensor::bi(), syten::Eigen::eigenSym(), if_constexpr, syten::STensorImpl::STensor::move(), std::move(), multi_transpose(), syten::STensorImpl::STensor::rank(), SYTEN_ASSERT_MSG, SYTEN_TENSOR_RANK, and syten::STensorImpl::STensor::visnz().
Referenced by syten::IPEPSv2::full_update_gauge_fix().