std::tuple< SRDef, STensor, STensor, STensor, SBasis, SBasis > syten::STensorImpl::svd | ( | STensor | in, |
std::vector< SBasisId > const & | uncombined, | ||
Direction const | a, | ||
Truncation const & | trunc = Truncation() , |
||
DecompRescaleCGC const | rescaleCGC = DecompRescaleCGC::Yes , |
||
GaugeFixSVD | gf = GaugeFixSVD::n() , |
||
SourceLocation const & | loc = SourceLocation::current() |
||
) |
This is an useful overload for splitting tensors into two by defining a partition of legs.
Please note, that this function always makes a copy of the input. The input legs connection to the split off tensors will be of direction a
. Otherwise this function should behave like the regular SVD.
References syten::STensorImpl::STensor::autodiff_enabled(), syten::STensorImpl::STensor::b(), std::vector< T >::back(), syten::STensorImpl::STensor::clear(), demerge(), syten::STensorImpl::STensor::e(), flip_on_tensor(), syten::Inc, std::make_pair(), merge(), syten::Out, std::vector< T >::push_back(), syten::STensorImpl::STensor::rank(), std::vector< T >::size(), svd(), SYTEN_ASSERT, and std::tie().