19 using Ranks =
decltype(getRanks<D, R>());
20 using BRanks =
typename Tb::Ranks;
22 auto const toleranceLocal =
27 [&](
auto const... seq)
30 MHNop.template core<seq>()...);
51 reshape<1, 1>(std::get<0>(psiphiA)) =
53 reshape<1, 1>(std::get<D>(psiphiA)) =
68 reshape<1, 1>(std::get<0>(psiphib)) =
70 reshape<1, 1>(std::get<D>(psiphib)) =
77 auto const [lambda, l, q] =
78 orthogonalize<pRC::Position::Right>(x.template core<k>());
80 x.template core<k>() = q;
81 x.template core<k - 1>() =
82 lambda * contract<2, 0>(x.template core<k - 1>(), l);
85 std::get<k>(psiphiA) =
86 contract<1, 2, 1, 3>(conj(x.template core<k>()),
87 contract<2, 3, 1, 3>(op.template core<k>(),
88 eval(contract<2, 2>(x.template core<k>(),
89 std::get<k + 1>(psiphiA)))));
91 std::get<k>(psiphib) =
92 contract<1, 2, 1, 2>(conj(x.template core<k>()),
93 eval(contract<2, 1>(b.template core<k>(),
94 std::get<k + 1>(psiphib))));
105 auto const Ak = matricize(permute<0, 2, 4, 1, 3, 5>(
106 contract<1, 0>(std::get<k>(psiphiA),
107 eval(contract<3, 1>(op.template core<k>(),
108 std::get<k + 1>(psiphiA))))));
110 linearize(contract<1, 0>(std::get<k>(psiphib),
111 eval(contract<2, 1>(b.template core<k>(),
112 std::get<k + 1>(psiphib)))));
118 linearize(x.template core<k>()), toleranceLocal);
121 auto const [lambda, q, r] =
122 orthogonalize<pRC::Position::Left>(sol);
123 x.template core<k>() = q;
124 x.template core<k + 1>() =
125 lambda * contract<1, 0>(r, x.template core<k + 1>());
128 std::get<k + 1>(psiphiA) =
129 contract<1, 0, 0, 3>(conj(x.template core<k>()),
130 contract<2, 0, 0, 3>(op.template core<k>(),
131 eval(contract<0, 2>(x.template core<k>(),
132 std::get<k>(psiphiA)))));
135 std::get<k + 1>(psiphib) =
136 contract<0, 1, 2, 0>(conj(x.template core<k>()),
137 eval(contract<0, 1>(b.template core<k>(),
138 std::get<k>(psiphib))));
147 auto const Ak = matricize(permute<0, 2, 4, 1, 3, 5>(
148 contract<1, 0>(std::get<k>(psiphiA),
149 eval(contract<3, 1>(op.template core<k>(),
150 std::get<k + 1>(psiphiA))))));
152 linearize(contract<1, 0>(std::get<k>(psiphib),
153 eval(contract<2, 1>(b.template core<k>(),
154 std::get<k + 1>(psiphib)))));
160 linearize(x.template core<k>()), toleranceLocal);
163 auto const [lambda, l, q] =
164 orthogonalize<pRC::Position::Right>(sol);
165 x.template core<k>() = q;
166 x.template core<k - 1>() =
167 lambda * contract<2, 0>(x.template core<k - 1>(), l);
171 std::get<k>(psiphiA) =
172 contract<1, 2, 1, 3>(conj(x.template core<k>()),
173 contract<2, 3, 1, 3>(op.template core<k>(),
174 eval(contract<2, 2>(x.template core<k>(),
175 std::get<k + 1>(psiphiA)))));
178 std::get<k>(psiphib) =
179 contract<1, 2, 1, 2>(conj(x.template core<k>()),
180 eval(contract<2, 1>(b.template core<k>(),
181 std::get<k + 1>(psiphib))));