SyTen

◆ eigen_sym()

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.

Remarks
This function is not autodifferentiable (yet, i.e. not implemented).

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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: