161 if (!finalized) finalize();
164 typedef std::map<prempo_key_type, index_type> index_map;
165 typedef typename index_map::iterator index_iterator;
167 left[trivial_left] = 0;
169 for (pos_t p = 0; p < length; ++p) {
170 std::vector<tag_block> pre_tensor; pre_tensor.reserve(prempo[p].size());
174 for (
typename prempo_map_type::const_iterator it = prempo[p].begin();
175 it != prempo[p].end(); ++it) {
176 prempo_key_type
const& k1 = it->first.first;
177 prempo_key_type
const& k2 = it->first.second;
178 prempo_value_type
const& val = it->second;
180 index_iterator ll = left.find(k1);
181 if (ll == left.end())
182 throw std::runtime_error(
"k1 not found!");
184 index_iterator rr = right.find(k2);
185 if (k2 == trivial_left && rr == right.end())
186 boost::tie(rr, boost::tuples::ignore) = right.insert( make_pair(k2, 0) );
187 else if (k2 == trivial_right && rr == right.end())
188 boost::tie(rr, boost::tuples::ignore) = right.insert( make_pair(k2, 1) );
189 else if (rr == right.end())
190 boost::tie(rr, boost::tuples::ignore) = right.insert( make_pair(k2, r++) );
192 pre_tensor.push_back( tag_block(ll->second, rr->second, val.first, val.second) );
195 std::pair<std::size_t, std::size_t> rcd =
rcdim(pre_tensor);
198 else if (p == length - 1)
void swap(MPSTensor< Matrix, SymmGroup > &x, MPSTensor< Matrix, SymmGroup > &y)
std::pair< size_t, size_t > rcdim(Vector const &pm)