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().
Here is the call graph for this function:
Here is the caller graph for this function: