Generates a node with two incoming bases b1
and b2
.
A dummy trivially transforming vacuum basis is created to join the two incoming bases.
–b1–→[ ] [ genIINode(b1, b2) ] (– dummy vacuum basis –→) –b2–→[ ]
IONode
from an IINode
and an OONode
, you a) need to connect the two adjointed legs (or the two unadjointed legs) and b) connect either the two first legs or the two second legs. That is, given an incoming basis b
, you need to use:auto i = genIINode(b); // first leg: b
, second leg: ba
auto i = genIINode(b, b.adjointed()); // equivalent to the above auto o = genOONode(b.flipped()); // first leg: bf
, second leg: bfa
auto o = genOONode(b.flipped(), b.flippedAdjointed()); // equivalent to the above auto io = prod<1>(i, o, {-1, 1}, {-2, 1}); // connect two second legs and two adjointed legs!
References syten::Basis::dir, Inc, kronVector(), syten::Basis::numSymmetries, syten::RepRegister::Decomp::productDecomp(), and SYTEN_ASSERT.
Referenced by syten::MPS::build_exchange_tensors_above(), syten::MPS::build_exchange_tensors_below(), syten::MPS::TEBD::build_local_T(), syten::MPS::dot(), syten::STensorImpl::gen_ii(), genIINode(), genOONode(), syten::IPEPS::genRandomCompleteState(), syten::Pyten::init_tensor(), syten::IPEPS::FullCTM::init_vac(), insertIOFullHalf(), insertIOSplitHalf(), syten::MPS::left_complement(), syten::IPEPS::mult(), syten::MPS::SwappableTEBD::split_rank6_into_mpos(), and syten::MPS::TDVP::Worker::sweepLeftTwoSite().