SyTen

◆ svd() [2/2]

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

+ Here is the call graph for this function: