1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: RelMRCI_tasks14.cc
4 // Copyright (C) 2014 Toru Shiozaki
5 //
6 // Author: Toru Shiozaki <shiozaki@northwestern.edu>
7 // Maintainer: Shiozaki group
8 //
9 // This file is part of the BAGEL package.
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
23 //
24 
25 #include <bagel_config.h>
26 #ifdef COMPILE_SMITH
27 
28 #include <src/smith/relmrci/RelMRCI_tasks14.h>
29 
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::RelMRCI;
34 
compute()35 void Task650::Task_local::compute() {
36   const Index c2 = b(0);
37   const Index a3 = b(1);
38   const Index x0 = b(2);
39   const Index a1 = b(3);
40   // tensor label: I134
41   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
42   std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
43   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
44   std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
45   for (auto& x3 : *range_[1]) {
46     for (auto& a4 : *range_[2]) {
47       // tensor label: t2
48       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a4, c2, a1);
49       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a4, c2, a1)]);
50       sort_indices<0,1,2,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), a4.size(), c2.size(), a1.size());
51       // tensor label: I1109
52       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, a3, x3, x0);
53       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, a3, x3, x0)]);
54       sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, a4.size(), a3.size(), x3.size(), x0.size());
55       zgemm3m_("T", "N", c2.size()*a1.size(), a3.size()*x0.size(), a4.size()*x3.size(),
56              1.0, i0data_sorted, a4.size()*x3.size(), i1data_sorted, a4.size()*x3.size(),
57              1.0, odata_sorted, c2.size()*a1.size());
58     }
59   }
60   sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, c2.size(), a1.size(), a3.size(), x0.size());
61   out()->add_block(odata, c2, a3, x0, a1);
62 }
63 
compute()64 void Task651::Task_local::compute() {
65   const Index a4 = b(0);
66   const Index a3 = b(1);
67   const Index x3 = b(2);
68   const Index x0 = b(3);
69   // tensor label: I1109
70   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
71   std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
72   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
73   std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
74   for (auto& x2 : *range_[1]) {
75     for (auto& x1 : *range_[1]) {
76       // tensor label: Gamma33
77       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
78       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
79       sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
80       // tensor label: I1110
81       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, a3, x2, x1);
82       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, a3, x2, x1)]);
83       sort_indices<2,3,0,1,0,1,1,1>(i1data, i1data_sorted, a4.size(), a3.size(), x2.size(), x1.size());
84       zgemm3m_("T", "N", x3.size()*x0.size(), a4.size()*a3.size(), x2.size()*x1.size(),
85              1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
86              1.0, odata_sorted, x3.size()*x0.size());
87     }
88   }
89   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a4.size(), a3.size());
90   out()->add_block(odata, a4, a3, x3, x0);
91 }
92 
compute()93 void Task652::Task_local::compute() {
94   const Index a4 = b(0);
95   const Index a3 = b(1);
96   const Index x2 = b(2);
97   const Index x1 = b(3);
98   // tensor label: I1110
99   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x2, x1)]);
100   std::fill_n(odata.get(), out()->get_size(a4, a3, x2, x1), 0.0);
101   {
102     // tensor label: v2
103     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a4, a3, x2, x1);
104     sort_indices<0,1,2,3,1,1,-1,2>(i0data, odata, a4.size(), a3.size(), x2.size(), x1.size());
105   }
106   {
107     // tensor label: v2
108     std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x2, x1, a4, a3);
109     sort_indices<2,3,0,1,1,1,-1,2>(i1data, odata, x2.size(), x1.size(), a4.size(), a3.size());
110   }
111   out()->add_block(odata, a4, a3, x2, x1);
112 }
113 
compute()114 void Task653::Task_local::compute() {
115   const Index a4 = b(0);
116   const Index a3 = b(1);
117   const Index x3 = b(2);
118   const Index x0 = b(3);
119   // tensor label: I1109
120   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
121   std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
122   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
123   std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
124   for (auto& x2 : *range_[1]) {
125     for (auto& x1 : *range_[1]) {
126       // tensor label: Gamma24
127       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x2, x1, x0);
128       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x2, x1, x0)]);
129       sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x2.size(), x1.size(), x0.size());
130       // tensor label: v2
131       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, x2, x1, a3);
132       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, x2, x1, a3)]);
133       sort_indices<1,2,0,3,0,1,-1,2>(i1data, i1data_sorted, a4.size(), x2.size(), x1.size(), a3.size());
134       zgemm3m_("T", "N", x3.size()*x0.size(), a4.size()*a3.size(), x2.size()*x1.size(),
135              1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
136              1.0, odata_sorted, x3.size()*x0.size());
137     }
138   }
139   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a4.size(), a3.size());
140   out()->add_block(odata, a4, a3, x3, x0);
141 }
142 
compute()143 void Task654::Task_local::compute() {
144   const Index a4 = b(0);
145   const Index a3 = b(1);
146   const Index x3 = b(2);
147   const Index x0 = b(3);
148   // tensor label: I1109
149   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
150   std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
151   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
152   std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
153   for (auto& x1 : *range_[1]) {
154     for (auto& x2 : *range_[1]) {
155       // tensor label: Gamma368
156       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x1, x2, x0);
157       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x1, x2, x0)]);
158       sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x1.size(), x2.size(), x0.size());
159       // tensor label: v2
160       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, a3, a4, x1);
161       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, a3, a4, x1)]);
162       sort_indices<3,0,1,2,0,1,1,2>(i1data, i1data_sorted, x2.size(), a3.size(), a4.size(), x1.size());
163       zgemm3m_("T", "N", x3.size()*x0.size(), a3.size()*a4.size(), x2.size()*x1.size(),
164              1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
165              1.0, odata_sorted, x3.size()*x0.size());
166     }
167   }
168   sort_indices<3,2,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a3.size(), a4.size());
169   out()->add_block(odata, a4, a3, x3, x0);
170 }
171 
compute()172 void Task655::Task_local::compute() {
173   const Index c2 = b(0);
174   const Index a3 = b(1);
175   const Index x0 = b(2);
176   const Index a1 = b(3);
177   // tensor label: I134
178   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
179   std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
180   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
181   std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
182   for (auto& x3 : *range_[1]) {
183     for (auto& a4 : *range_[2]) {
184       // tensor label: t2
185       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, c2, a4);
186       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, c2, a4)]);
187       sort_indices<0,3,1,2,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), c2.size(), a4.size());
188       // tensor label: I1112
189       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, a3, x3, x0);
190       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, a3, x3, x0)]);
191       sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, a4.size(), a3.size(), x3.size(), x0.size());
192       zgemm3m_("T", "N", a1.size()*c2.size(), a3.size()*x0.size(), a4.size()*x3.size(),
193              1.0, i0data_sorted, a4.size()*x3.size(), i1data_sorted, a4.size()*x3.size(),
194              1.0, odata_sorted, a1.size()*c2.size());
195     }
196   }
197   sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, a1.size(), c2.size(), a3.size(), x0.size());
198   out()->add_block(odata, c2, a3, x0, a1);
199 }
200 
compute()201 void Task656::Task_local::compute() {
202   const Index a4 = b(0);
203   const Index a3 = b(1);
204   const Index x3 = b(2);
205   const Index x0 = b(3);
206   // tensor label: I1112
207   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
208   std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
209   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
210   std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
211   for (auto& x2 : *range_[1]) {
212     for (auto& x1 : *range_[1]) {
213       // tensor label: Gamma33
214       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
215       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
216       sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
217       // tensor label: I1113
218       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, a3, x2, x1);
219       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, a3, x2, x1)]);
220       sort_indices<2,3,0,1,0,1,1,1>(i1data, i1data_sorted, a4.size(), a3.size(), x2.size(), x1.size());
221       zgemm3m_("T", "N", x3.size()*x0.size(), a4.size()*a3.size(), x2.size()*x1.size(),
222              1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
223              1.0, odata_sorted, x3.size()*x0.size());
224     }
225   }
226   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a4.size(), a3.size());
227   out()->add_block(odata, a4, a3, x3, x0);
228 }
229 
compute()230 void Task657::Task_local::compute() {
231   const Index a4 = b(0);
232   const Index a3 = b(1);
233   const Index x2 = b(2);
234   const Index x1 = b(3);
235   // tensor label: I1113
236   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x2, x1)]);
237   std::fill_n(odata.get(), out()->get_size(a4, a3, x2, x1), 0.0);
238   {
239     // tensor label: v2
240     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a4, a3, x2, x1);
241     sort_indices<0,1,2,3,1,1,1,2>(i0data, odata, a4.size(), a3.size(), x2.size(), x1.size());
242   }
243   {
244     // tensor label: v2
245     std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x2, x1, a4, a3);
246     sort_indices<2,3,0,1,1,1,1,2>(i1data, odata, x2.size(), x1.size(), a4.size(), a3.size());
247   }
248   out()->add_block(odata, a4, a3, x2, x1);
249 }
250 
compute()251 void Task658::Task_local::compute() {
252   const Index a4 = b(0);
253   const Index a3 = b(1);
254   const Index x3 = b(2);
255   const Index x0 = b(3);
256   // tensor label: I1112
257   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
258   std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
259   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
260   std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
261   for (auto& x1 : *range_[1]) {
262     for (auto& x2 : *range_[1]) {
263       // tensor label: Gamma363
264       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x1, x2);
265       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x1, x2)]);
266       sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x1.size(), x2.size());
267       // tensor label: v2
268       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, x2, x1, a3);
269       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, x2, x1, a3)]);
270       sort_indices<2,1,0,3,0,1,1,2>(i1data, i1data_sorted, a4.size(), x2.size(), x1.size(), a3.size());
271       zgemm3m_("T", "N", x3.size()*x0.size(), a4.size()*a3.size(), x2.size()*x1.size(),
272              1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
273              1.0, odata_sorted, x3.size()*x0.size());
274     }
275   }
276   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a4.size(), a3.size());
277   out()->add_block(odata, a4, a3, x3, x0);
278 }
279 
compute()280 void Task659::Task_local::compute() {
281   const Index a4 = b(0);
282   const Index a3 = b(1);
283   const Index x3 = b(2);
284   const Index x0 = b(3);
285   // tensor label: I1112
286   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
287   std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
288   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
289   std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
290   for (auto& x2 : *range_[1]) {
291     for (auto& x1 : *range_[1]) {
292       // tensor label: v2
293       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x2, a3, a4, x1);
294       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x2, a3, a4, x1)]);
295       sort_indices<0,3,1,2,0,1,1,1>(i0data, i0data_sorted, x2.size(), a3.size(), a4.size(), x1.size());
296       // tensor label: Gamma33
297       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, x0, x2, x1);
298       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, x0, x2, x1)]);
299       sort_indices<2,3,0,1,0,1,-1,2>(i1data, i1data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
300       zgemm3m_("T", "N", a3.size()*a4.size(), x3.size()*x0.size(), x2.size()*x1.size(),
301              1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
302              1.0, odata_sorted, a3.size()*a4.size());
303     }
304   }
305   sort_indices<1,0,2,3,1,1,1,1>(odata_sorted, odata, a3.size(), a4.size(), x3.size(), x0.size());
306   out()->add_block(odata, a4, a3, x3, x0);
307 }
308 
compute()309 void Task660::Task_local::compute() {
310   const Index c2 = b(0);
311   const Index a3 = b(1);
312   const Index x0 = b(2);
313   const Index a1 = b(3);
314   // tensor label: I134
315   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
316   std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
317   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
318   std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
319   for (auto& x5 : *range_[1]) {
320     for (auto& x4 : *range_[1]) {
321       // tensor label: t2
322       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, a1, x4, a3);
323       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, a1, x4, a3)]);
324       sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), a1.size(), x4.size(), a3.size());
325       // tensor label: I1199
326       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(c2, x5, x0, x4);
327       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(c2, x5, x0, x4)]);
328       sort_indices<1,3,0,2,0,1,1,1>(i1data, i1data_sorted, c2.size(), x5.size(), x0.size(), x4.size());
329       zgemm3m_("T", "N", a1.size()*a3.size(), c2.size()*x0.size(), x5.size()*x4.size(),
330              1.0, i0data_sorted, x5.size()*x4.size(), i1data_sorted, x5.size()*x4.size(),
331              1.0, odata_sorted, a1.size()*a3.size());
332     }
333   }
334   sort_indices<2,1,3,0,1,1,1,1>(odata_sorted, odata, a1.size(), a3.size(), c2.size(), x0.size());
335   out()->add_block(odata, c2, a3, x0, a1);
336 }
337 
compute()338 void Task661::Task_local::compute() {
339   const Index c2 = b(0);
340   const Index x5 = b(1);
341   const Index x0 = b(2);
342   const Index x4 = b(3);
343   // tensor label: I1199
344   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, x5, x0, x4)]);
345   std::fill_n(odata.get(), out()->get_size(c2, x5, x0, x4), 0.0);
346   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, x5, x0, x4)]);
347   std::fill_n(odata_sorted.get(), out()->get_size(c2, x5, x0, x4), 0.0);
348   for (auto& x3 : *range_[1]) {
349     for (auto& x2 : *range_[1]) {
350       for (auto& x1 : *range_[1]) {
351         // tensor label: Gamma32
352         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x3, x2, x1);
353         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x3, x2, x1)]);
354         sort_indices<3,4,5,0,1,2,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
355         // tensor label: v2
356         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(c2, x3, x2, x1);
357         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(c2, x3, x2, x1)]);
358         sort_indices<1,2,3,0,0,1,-1,1>(i1data, i1data_sorted, c2.size(), x3.size(), x2.size(), x1.size());
359         zgemm3m_("T", "N", x5.size()*x0.size()*x4.size(), c2.size(), x3.size()*x2.size()*x1.size(),
360                1.0, i0data_sorted, x3.size()*x2.size()*x1.size(), i1data_sorted, x3.size()*x2.size()*x1.size(),
361                1.0, odata_sorted, x5.size()*x0.size()*x4.size());
362       }
363     }
364   }
365   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x0.size(), x4.size(), c2.size());
366   out()->add_block(odata, c2, x5, x0, x4);
367 }
368 
compute()369 void Task662::Task_local::compute() {
370   const Index c2 = b(0);
371   const Index x5 = b(1);
372   const Index x0 = b(2);
373   const Index x4 = b(3);
374   // tensor label: I1199
375   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, x5, x0, x4)]);
376   std::fill_n(odata.get(), out()->get_size(c2, x5, x0, x4), 0.0);
377   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, x5, x0, x4)]);
378   std::fill_n(odata_sorted.get(), out()->get_size(c2, x5, x0, x4), 0.0);
379   for (auto& x1 : *range_[1]) {
380     for (auto& x3 : *range_[1]) {
381       for (auto& x2 : *range_[1]) {
382         // tensor label: Gamma391
383         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x1, x3, x2);
384         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x1, x3, x2)]);
385         sort_indices<3,4,5,0,1,2,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x1.size(), x3.size(), x2.size());
386         // tensor label: v2
387         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, x2, c2, x1);
388         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, x2, c2, x1)]);
389         sort_indices<3,0,1,2,0,1,-1,1>(i1data, i1data_sorted, x3.size(), x2.size(), c2.size(), x1.size());
390         zgemm3m_("T", "N", x5.size()*x0.size()*x4.size(), c2.size(), x3.size()*x2.size()*x1.size(),
391                1.0, i0data_sorted, x3.size()*x2.size()*x1.size(), i1data_sorted, x3.size()*x2.size()*x1.size(),
392                1.0, odata_sorted, x5.size()*x0.size()*x4.size());
393       }
394     }
395   }
396   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x0.size(), x4.size(), c2.size());
397   out()->add_block(odata, c2, x5, x0, x4);
398 }
399 
compute()400 void Task663::Task_local::compute() {
401   const Index c2 = b(0);
402   const Index a3 = b(1);
403   const Index x0 = b(2);
404   const Index a1 = b(3);
405   // tensor label: I134
406   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
407   std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
408   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
409   std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
410   for (auto& a4 : *range_[2]) {
411     for (auto& x1 : *range_[1]) {
412       // tensor label: v2
413       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a4, x1, c2, a1);
414       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(a4, x1, c2, a1)]);
415       sort_indices<0,1,2,3,0,1,1,1>(i0data, i0data_sorted, a4.size(), x1.size(), c2.size(), a1.size());
416       // tensor label: I1205
417       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, a4, x0, x1);
418       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, a4, x0, x1)]);
419       sort_indices<1,3,0,2,0,1,1,1>(i1data, i1data_sorted, a3.size(), a4.size(), x0.size(), x1.size());
420       zgemm3m_("T", "N", c2.size()*a1.size(), a3.size()*x0.size(), a4.size()*x1.size(),
421              1.0, i0data_sorted, a4.size()*x1.size(), i1data_sorted, a4.size()*x1.size(),
422              1.0, odata_sorted, c2.size()*a1.size());
423     }
424   }
425   sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, c2.size(), a1.size(), a3.size(), x0.size());
426   out()->add_block(odata, c2, a3, x0, a1);
427 }
428 
compute()429 void Task664::Task_local::compute() {
430   const Index a3 = b(0);
431   const Index a4 = b(1);
432   const Index x0 = b(2);
433   const Index x1 = b(3);
434   // tensor label: I1205
435   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a3, a4, x0, x1)]);
436   std::fill_n(odata.get(), out()->get_size(a3, a4, x0, x1), 0.0);
437   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a3, a4, x0, x1)]);
438   std::fill_n(odata_sorted.get(), out()->get_size(a3, a4, x0, x1), 0.0);
439   for (auto& x3 : *range_[1]) {
440     for (auto& x2 : *range_[1]) {
441       // tensor label: Gamma33
442       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
443       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
444       sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
445       // tensor label: t2
446       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a3, x2, a4);
447       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a3, x2, a4)]);
448       sort_indices<0,2,1,3,0,1,-2,1>(i1data, i1data_sorted, x3.size(), a3.size(), x2.size(), a4.size());
449       zgemm3m_("T", "N", x0.size()*x1.size(), a3.size()*a4.size(), x3.size()*x2.size(),
450              1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
451              1.0, odata_sorted, x0.size()*x1.size());
452     }
453   }
454   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a3.size(), a4.size());
455   out()->add_block(odata, a3, a4, x0, x1);
456 }
457 
compute()458 void Task665::Task_local::compute() {
459   const Index c2 = b(0);
460   const Index a3 = b(1);
461   const Index x0 = b(2);
462   const Index a1 = b(3);
463   // tensor label: I134
464   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
465   std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
466   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
467   std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
468   for (auto& a4 : *range_[2]) {
469     for (auto& x1 : *range_[1]) {
470       // tensor label: v2
471       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a4, x1, c2, a3);
472       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(a4, x1, c2, a3)]);
473       sort_indices<0,1,2,3,0,1,1,1>(i0data, i0data_sorted, a4.size(), x1.size(), c2.size(), a3.size());
474       // tensor label: I1208
475       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a1, a4, x0, x1);
476       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a1, a4, x0, x1)]);
477       sort_indices<1,3,0,2,0,1,1,1>(i1data, i1data_sorted, a1.size(), a4.size(), x0.size(), x1.size());
478       zgemm3m_("T", "N", c2.size()*a3.size(), a1.size()*x0.size(), a4.size()*x1.size(),
479              1.0, i0data_sorted, a4.size()*x1.size(), i1data_sorted, a4.size()*x1.size(),
480              1.0, odata_sorted, c2.size()*a3.size());
481     }
482   }
483   sort_indices<0,1,3,2,1,1,1,1>(odata_sorted, odata, c2.size(), a3.size(), a1.size(), x0.size());
484   out()->add_block(odata, c2, a3, x0, a1);
485 }
486 
compute()487 void Task666::Task_local::compute() {
488   const Index a1 = b(0);
489   const Index a4 = b(1);
490   const Index x0 = b(2);
491   const Index x1 = b(3);
492   // tensor label: I1208
493   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, a4, x0, x1)]);
494   std::fill_n(odata.get(), out()->get_size(a1, a4, x0, x1), 0.0);
495   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, a4, x0, x1)]);
496   std::fill_n(odata_sorted.get(), out()->get_size(a1, a4, x0, x1), 0.0);
497   for (auto& x3 : *range_[1]) {
498     for (auto& x2 : *range_[1]) {
499       // tensor label: Gamma33
500       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
501       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
502       sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
503       // tensor label: t2
504       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a1, x2, a4);
505       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a1, x2, a4)]);
506       sort_indices<0,2,1,3,0,1,2,1>(i1data, i1data_sorted, x3.size(), a1.size(), x2.size(), a4.size());
507       zgemm3m_("T", "N", x0.size()*x1.size(), a1.size()*a4.size(), x3.size()*x2.size(),
508              1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
509              1.0, odata_sorted, x0.size()*x1.size());
510     }
511   }
512   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a1.size(), a4.size());
513   out()->add_block(odata, a1, a4, x0, x1);
514 }
515 
compute()516 void Task667::Task_local::compute() {
517   const Index c2 = b(0);
518   const Index a3 = b(1);
519   const Index x0 = b(2);
520   const Index a1 = b(3);
521   // tensor label: I134
522   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
523   std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
524   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
525   std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
526   for (auto& x1 : *range_[1]) {
527     for (auto& a4 : *range_[2]) {
528       // tensor label: v2
529       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(c2, x1, a4, a1);
530       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(c2, x1, a4, a1)]);
531       sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, c2.size(), x1.size(), a4.size(), a1.size());
532       // tensor label: I1211
533       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, a4, x1, x0);
534       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, a4, x1, x0)]);
535       sort_indices<2,1,0,3,0,1,1,1>(i1data, i1data_sorted, a3.size(), a4.size(), x1.size(), x0.size());
536       zgemm3m_("T", "N", c2.size()*a1.size(), a3.size()*x0.size(), a4.size()*x1.size(),
537              1.0, i0data_sorted, a4.size()*x1.size(), i1data_sorted, a4.size()*x1.size(),
538              1.0, odata_sorted, c2.size()*a1.size());
539     }
540   }
541   sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, c2.size(), a1.size(), a3.size(), x0.size());
542   out()->add_block(odata, c2, a3, x0, a1);
543 }
544 
compute()545 void Task668::Task_local::compute() {
546   const Index a3 = b(0);
547   const Index a4 = b(1);
548   const Index x1 = b(2);
549   const Index x0 = b(3);
550   // tensor label: I1211
551   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a3, a4, x1, x0)]);
552   std::fill_n(odata.get(), out()->get_size(a3, a4, x1, x0), 0.0);
553   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a3, a4, x1, x0)]);
554   std::fill_n(odata_sorted.get(), out()->get_size(a3, a4, x1, x0), 0.0);
555   for (auto& x3 : *range_[1]) {
556     for (auto& x2 : *range_[1]) {
557       // tensor label: Gamma368
558       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x1, x2, x0);
559       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x1, x2, x0)]);
560       sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x1.size(), x2.size(), x0.size());
561       // tensor label: t2
562       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a3, x2, a4);
563       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a3, x2, a4)]);
564       sort_indices<0,2,1,3,0,1,2,1>(i1data, i1data_sorted, x3.size(), a3.size(), x2.size(), a4.size());
565       zgemm3m_("T", "N", x1.size()*x0.size(), a3.size()*a4.size(), x3.size()*x2.size(),
566              1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
567              1.0, odata_sorted, x1.size()*x0.size());
568     }
569   }
570   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x1.size(), x0.size(), a3.size(), a4.size());
571   out()->add_block(odata, a3, a4, x1, x0);
572 }
573 
compute()574 void Task669::Task_local::compute() {
575   const Index c2 = b(0);
576   const Index a3 = b(1);
577   const Index x0 = b(2);
578   const Index a1 = b(3);
579   // tensor label: I134
580   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
581   std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
582   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
583   std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
584   for (auto& x1 : *range_[1]) {
585     for (auto& a4 : *range_[2]) {
586       // tensor label: v2
587       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(c2, x1, a4, a3);
588       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(c2, x1, a4, a3)]);
589       sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, c2.size(), x1.size(), a4.size(), a3.size());
590       // tensor label: I1214
591       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a1, a4, x0, x1);
592       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a1, a4, x0, x1)]);
593       sort_indices<3,1,0,2,0,1,1,1>(i1data, i1data_sorted, a1.size(), a4.size(), x0.size(), x1.size());
594       zgemm3m_("T", "N", c2.size()*a3.size(), a1.size()*x0.size(), a4.size()*x1.size(),
595              1.0, i0data_sorted, a4.size()*x1.size(), i1data_sorted, a4.size()*x1.size(),
596              1.0, odata_sorted, c2.size()*a3.size());
597     }
598   }
599   sort_indices<0,1,3,2,1,1,1,1>(odata_sorted, odata, c2.size(), a3.size(), a1.size(), x0.size());
600   out()->add_block(odata, c2, a3, x0, a1);
601 }
602 
compute()603 void Task670::Task_local::compute() {
604   const Index a1 = b(0);
605   const Index a4 = b(1);
606   const Index x0 = b(2);
607   const Index x1 = b(3);
608   // tensor label: I1214
609   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, a4, x0, x1)]);
610   std::fill_n(odata.get(), out()->get_size(a1, a4, x0, x1), 0.0);
611   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, a4, x0, x1)]);
612   std::fill_n(odata_sorted.get(), out()->get_size(a1, a4, x0, x1), 0.0);
613   for (auto& x3 : *range_[1]) {
614     for (auto& x2 : *range_[1]) {
615       // tensor label: Gamma33
616       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
617       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
618       sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
619       // tensor label: t2
620       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a1, x2, a4);
621       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a1, x2, a4)]);
622       sort_indices<0,2,1,3,0,1,-2,1>(i1data, i1data_sorted, x3.size(), a1.size(), x2.size(), a4.size());
623       zgemm3m_("T", "N", x0.size()*x1.size(), a1.size()*a4.size(), x3.size()*x2.size(),
624              1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
625              1.0, odata_sorted, x0.size()*x1.size());
626     }
627   }
628   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a1.size(), a4.size());
629   out()->add_block(odata, a1, a4, x0, x1);
630 }
631 
compute()632 void Task671::Task_local::compute() {
633   const Index c2 = b(0);
634   const Index a3 = b(1);
635   const Index x0 = b(2);
636   const Index a1 = b(3);
637   // tensor label: I134
638   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
639   std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
640   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
641   std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
642   for (auto& x3 : *range_[1]) {
643     // tensor label: Gamma428
644     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0);
645     std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0)]);
646     sort_indices<0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size());
647     // tensor label: I1297
648     std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a3, c2, a1);
649     std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a3, c2, a1)]);
650     sort_indices<0,1,2,3,0,1,1,1>(i1data, i1data_sorted, x3.size(), a3.size(), c2.size(), a1.size());
651     zgemm3m_("T", "N", x0.size(), a3.size()*c2.size()*a1.size(), x3.size(),
652            1.0, i0data_sorted, x3.size(), i1data_sorted, x3.size(),
653            1.0, odata_sorted, x0.size());
654   }
655   sort_indices<2,1,0,3,1,1,1,1>(odata_sorted, odata, x0.size(), a3.size(), c2.size(), a1.size());
656   out()->add_block(odata, c2, a3, x0, a1);
657 }
658 
compute()659 void Task672::Task_local::compute() {
660   const Index x3 = b(0);
661   const Index a3 = b(1);
662   const Index c2 = b(2);
663   const Index a1 = b(3);
664   // tensor label: I1297
665   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x3, a3, c2, a1)]);
666   std::fill_n(odata.get(), out()->get_size(x3, a3, c2, a1), 0.0);
667   {
668     // tensor label: t2
669     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a3, c2, a1);
670     sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x3.size(), a3.size(), c2.size(), a1.size());
671   }
672   {
673     // tensor label: t2
674     std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x3, a1, c2, a3);
675     sort_indices<0,3,2,1,1,1,-1,1>(i1data, odata, x3.size(), a1.size(), c2.size(), a3.size());
676   }
677   out()->add_block(odata, x3, a3, c2, a1);
678 }
679 
compute()680 void Task673::Task_local::compute() {
681   const Index c2 = b(0);
682   const Index a3 = b(1);
683   const Index x0 = b(2);
684   const Index a1 = b(3);
685   // tensor label: I134
686   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
687   std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
688   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
689   std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
690   for (auto& x5 : *range_[1]) {
691     // tensor label: Gamma430
692     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0);
693     std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0)]);
694     sort_indices<0,1,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size());
695     // tensor label: I1301
696     std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x5, a3, c2, a1);
697     std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x5, a3, c2, a1)]);
698     sort_indices<0,1,2,3,0,1,1,1>(i1data, i1data_sorted, x5.size(), a3.size(), c2.size(), a1.size());
699     zgemm3m_("T", "N", x0.size(), a3.size()*c2.size()*a1.size(), x5.size(),
700            1.0, i0data_sorted, x5.size(), i1data_sorted, x5.size(),
701            1.0, odata_sorted, x0.size());
702   }
703   sort_indices<2,1,0,3,1,1,1,1>(odata_sorted, odata, x0.size(), a3.size(), c2.size(), a1.size());
704   out()->add_block(odata, c2, a3, x0, a1);
705 }
706 
compute()707 void Task674::Task_local::compute() {
708   const Index x5 = b(0);
709   const Index a3 = b(1);
710   const Index c2 = b(2);
711   const Index a1 = b(3);
712   // tensor label: I1301
713   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x5, a3, c2, a1)]);
714   std::fill_n(odata.get(), out()->get_size(x5, a3, c2, a1), 0.0);
715   {
716     // tensor label: t2
717     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, a3, c2, a1);
718     sort_indices<0,1,2,3,1,1,1,2>(i0data, odata, x5.size(), a3.size(), c2.size(), a1.size());
719   }
720   {
721     // tensor label: t2
722     std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x5, a1, c2, a3);
723     sort_indices<0,3,2,1,1,1,-1,2>(i1data, odata, x5.size(), a1.size(), c2.size(), a3.size());
724   }
725   out()->add_block(odata, x5, a3, c2, a1);
726 }
727 
compute()728 void Task675::Task_local::compute() {
729   const Index x1 = b(0);
730   const Index a2 = b(1);
731   const Index x0 = b(2);
732   const Index a1 = b(3);
733   // tensor label: r
734   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x1, a2, x0, a1)]);
735   std::fill_n(odata.get(), out()->get_size(x1, a2, x0, a1), 0.0);
736   {
737     // tensor label: I173
738     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a1, x0, x1, a2);
739     sort_indices<2,3,1,0,1,1,1,1>(i0data, odata, a1.size(), x0.size(), x1.size(), a2.size());
740   }
741   {
742     // tensor label: I173
743     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a2, x1, x0, a1);
744     sort_indices<1,0,2,3,1,1,1,1>(i0data, odata, a2.size(), x1.size(), x0.size(), a1.size());
745   }
746   out()->add_block(odata, x1, a2, x0, a1);
747 }
748 
compute()749 void Task676::Task_local::compute() {
750   const Index a1 = b(0);
751   const Index x0 = b(1);
752   const Index x1 = b(2);
753   const Index a2 = b(3);
754   // tensor label: I173
755   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
756   std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
757   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
758   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
759   for (auto& x2 : *range_[1]) {
760     // tensor label: h1
761     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x2, a2);
762     std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x2, a2)]);
763     sort_indices<0,1,0,1,1,1>(i0data, i0data_sorted, x2.size(), a2.size());
764     // tensor label: I174
765     std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a1, x0, x2, x1);
766     std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a1, x0, x2, x1)]);
767     sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, a1.size(), x0.size(), x2.size(), x1.size());
768     zgemm3m_("T", "N", a2.size(), a1.size()*x0.size()*x1.size(), x2.size(),
769            1.0, i0data_sorted, x2.size(), i1data_sorted, x2.size(),
770            1.0, odata_sorted, a2.size());
771   }
772   sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, a2.size(), a1.size(), x0.size(), x1.size());
773   out()->add_block(odata, a1, x0, x1, a2);
774 }
775 
compute()776 void Task677::Task_local::compute() {
777   const Index a1 = b(0);
778   const Index x0 = b(1);
779   const Index x2 = b(2);
780   const Index x1 = b(3);
781   // tensor label: I174
782   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x2, x1)]);
783   std::fill_n(odata.get(), out()->get_size(a1, x0, x2, x1), 0.0);
784   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x2, x1)]);
785   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x2, x1), 0.0);
786   for (auto& x5 : *range_[1]) {
787     for (auto& x4 : *range_[1]) {
788       for (auto& x3 : *range_[1]) {
789         // tensor label: Gamma32
790         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x3, x2, x1);
791         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x3, x2, x1)]);
792         sort_indices<0,2,3,1,4,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
793         // tensor label: t2
794         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x5, a1, x4, x3);
795         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x5, a1, x4, x3)]);
796         sort_indices<0,2,3,1,0,1,1,1>(i1data, i1data_sorted, x5.size(), a1.size(), x4.size(), x3.size());
797         zgemm3m_("T", "N", x0.size()*x2.size()*x1.size(), a1.size(), x5.size()*x4.size()*x3.size(),
798                1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
799                1.0, odata_sorted, x0.size()*x2.size()*x1.size());
800       }
801     }
802   }
803   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x0.size(), x2.size(), x1.size(), a1.size());
804   out()->add_block(odata, a1, x0, x2, x1);
805 }
806 
compute()807 void Task678::Task_local::compute() {
808   const Index a1 = b(0);
809   const Index x0 = b(1);
810   const Index x1 = b(2);
811   const Index a2 = b(3);
812   // tensor label: I173
813   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
814   std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
815   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
816   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
817   for (auto& x3 : *range_[1]) {
818     for (auto& x2 : *range_[1]) {
819       // tensor label: Gamma33
820       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
821       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
822       sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
823       // tensor label: I177
824       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, x3, a1, a2);
825       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, x3, a1, a2)]);
826       sort_indices<1,0,2,3,0,1,1,1>(i1data, i1data_sorted, x2.size(), x3.size(), a1.size(), a2.size());
827       zgemm3m_("T", "N", x0.size()*x1.size(), a1.size()*a2.size(), x2.size()*x3.size(),
828              1.0, i0data_sorted, x2.size()*x3.size(), i1data_sorted, x2.size()*x3.size(),
829              1.0, odata_sorted, x0.size()*x1.size());
830     }
831   }
832   sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a1.size(), a2.size());
833   out()->add_block(odata, a1, x0, x1, a2);
834 }
835 
compute()836 void Task679::Task_local::compute() {
837   const Index x2 = b(0);
838   const Index x3 = b(1);
839   const Index a1 = b(2);
840   const Index a2 = b(3);
841   // tensor label: I177
842   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
843   std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
844   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
845   std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
846   for (auto& c3 : *range_[0]) {
847     // tensor label: t2
848     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, c3, a2);
849     std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, c3, a2)]);
850     sort_indices<2,0,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), c3.size(), a2.size());
851     // tensor label: h1
852     std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, c3);
853     std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, c3)]);
854     sort_indices<1,0,0,1,-1,1>(i1data, i1data_sorted, x2.size(), c3.size());
855     zgemm3m_("T", "N", x3.size()*a1.size()*a2.size(), x2.size(), c3.size(),
856            1.0, i0data_sorted, c3.size(), i1data_sorted, c3.size(),
857            1.0, odata_sorted, x3.size()*a1.size()*a2.size());
858   }
859   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), a2.size(), x2.size());
860   out()->add_block(odata, x2, x3, a1, a2);
861 }
862 
compute()863 void Task680::Task_local::compute() {
864   const Index x2 = b(0);
865   const Index x3 = b(1);
866   const Index a1 = b(2);
867   const Index a2 = b(3);
868   // tensor label: I177
869   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
870   std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
871   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
872   std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
873   for (auto& a3 : *range_[2]) {
874     // tensor label: t2
875     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, x2, a3);
876     std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, x2, a3)]);
877     sort_indices<3,0,1,2,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), x2.size(), a3.size());
878     // tensor label: h1
879     std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, a2);
880     std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, a2)]);
881     sort_indices<0,1,0,1,2,1>(i1data, i1data_sorted, a3.size(), a2.size());
882     zgemm3m_("T", "N", x3.size()*a1.size()*x2.size(), a2.size(), a3.size(),
883            1.0, i0data_sorted, a3.size(), i1data_sorted, a3.size(),
884            1.0, odata_sorted, x3.size()*a1.size()*x2.size());
885   }
886   sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
887   out()->add_block(odata, x2, x3, a1, a2);
888 }
889 
compute()890 void Task681::Task_local::compute() {
891   const Index x2 = b(0);
892   const Index x3 = b(1);
893   const Index a1 = b(2);
894   const Index a2 = b(3);
895   // tensor label: I177
896   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
897   std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
898   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
899   std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
900   for (auto& c4 : *range_[0]) {
901     for (auto& a3 : *range_[2]) {
902       // tensor label: t2
903       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, c4, a3);
904       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, c4, a3)]);
905       sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), c4.size(), a3.size());
906       // tensor label: v2
907       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, c4, a3, a2);
908       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, c4, a3, a2)]);
909       sort_indices<1,2,0,3,0,1,-1,1>(i1data, i1data_sorted, x2.size(), c4.size(), a3.size(), a2.size());
910       zgemm3m_("T", "N", x3.size()*a1.size(), x2.size()*a2.size(), c4.size()*a3.size(),
911              1.0, i0data_sorted, c4.size()*a3.size(), i1data_sorted, c4.size()*a3.size(),
912              1.0, odata_sorted, x3.size()*a1.size());
913     }
914   }
915   sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
916   out()->add_block(odata, x2, x3, a1, a2);
917 }
918 
compute()919 void Task682::Task_local::compute() {
920   const Index x2 = b(0);
921   const Index x3 = b(1);
922   const Index a1 = b(2);
923   const Index a2 = b(3);
924   // tensor label: I177
925   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
926   std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
927   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
928   std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
929   for (auto& a4 : *range_[2]) {
930     for (auto& c3 : *range_[0]) {
931       // tensor label: t2
932       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a4, c3, a1);
933       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a4, c3, a1)]);
934       sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), a4.size(), c3.size(), a1.size());
935       // tensor label: v2
936       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, a2, a4, c3);
937       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, a2, a4, c3)]);
938       sort_indices<2,3,0,1,0,1,-1,1>(i1data, i1data_sorted, x2.size(), a2.size(), a4.size(), c3.size());
939       zgemm3m_("T", "N", x3.size()*a1.size(), x2.size()*a2.size(), a4.size()*c3.size(),
940              1.0, i0data_sorted, a4.size()*c3.size(), i1data_sorted, a4.size()*c3.size(),
941              1.0, odata_sorted, x3.size()*a1.size());
942     }
943   }
944   sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
945   out()->add_block(odata, x2, x3, a1, a2);
946 }
947 
compute()948 void Task683::Task_local::compute() {
949   const Index x2 = b(0);
950   const Index x3 = b(1);
951   const Index a1 = b(2);
952   const Index a2 = b(3);
953   // tensor label: I177
954   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
955   std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
956   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
957   std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
958   for (auto& c3 : *range_[0]) {
959     for (auto& a4 : *range_[2]) {
960       // tensor label: t2
961       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, c3, a4);
962       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, c3, a4)]);
963       sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), c3.size(), a4.size());
964       // tensor label: v2
965       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, a2, a4, c3);
966       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, a2, a4, c3)]);
967       sort_indices<3,2,0,1,0,1,1,1>(i1data, i1data_sorted, x2.size(), a2.size(), a4.size(), c3.size());
968       zgemm3m_("T", "N", x3.size()*a1.size(), x2.size()*a2.size(), a4.size()*c3.size(),
969              1.0, i0data_sorted, a4.size()*c3.size(), i1data_sorted, a4.size()*c3.size(),
970              1.0, odata_sorted, x3.size()*a1.size());
971     }
972   }
973   sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
974   out()->add_block(odata, x2, x3, a1, a2);
975 }
976 
compute()977 void Task684::Task_local::compute() {
978   const Index a1 = b(0);
979   const Index x0 = b(1);
980   const Index x1 = b(2);
981   const Index a2 = b(3);
982   // tensor label: I173
983   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
984   std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
985   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
986   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
987   for (auto& c3 : *range_[0]) {
988     for (auto& x5 : *range_[1]) {
989       for (auto& x4 : *range_[1]) {
990         // tensor label: t2
991         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(c3, a1, x5, x4);
992         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(c3, a1, x5, x4)]);
993         sort_indices<0,2,3,1,0,1,1,1>(i0data, i0data_sorted, c3.size(), a1.size(), x5.size(), x4.size());
994         // tensor label: I1217
995         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a2, c3, x5, x4, x1, x0);
996         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a2, c3, x5, x4, x1, x0)]);
997         sort_indices<1,2,3,0,4,5,0,1,1,1>(i1data, i1data_sorted, a2.size(), c3.size(), x5.size(), x4.size(), x1.size(), x0.size());
998         zgemm3m_("T", "N", a1.size(), a2.size()*x1.size()*x0.size(), c3.size()*x5.size()*x4.size(),
999                1.0, i0data_sorted, c3.size()*x5.size()*x4.size(), i1data_sorted, c3.size()*x5.size()*x4.size(),
1000                1.0, odata_sorted, a1.size());
1001       }
1002     }
1003   }
1004   sort_indices<0,3,2,1,1,1,1,1>(odata_sorted, odata, a1.size(), a2.size(), x1.size(), x0.size());
1005   out()->add_block(odata, a1, x0, x1, a2);
1006 }
1007 
compute()1008 void Task685::Task_local::compute() {
1009   const Index a2 = b(0);
1010   const Index c3 = b(1);
1011   const Index x5 = b(2);
1012   const Index x4 = b(3);
1013   const Index x1 = b(4);
1014   const Index x0 = b(5);
1015   // tensor label: I1217
1016   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a2, c3, x5, x4, x1, x0)]);
1017   std::fill_n(odata.get(), out()->get_size(a2, c3, x5, x4, x1, x0), 0.0);
1018   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a2, c3, x5, x4, x1, x0)]);
1019   std::fill_n(odata_sorted.get(), out()->get_size(a2, c3, x5, x4, x1, x0), 0.0);
1020   for (auto& x3 : *range_[1]) {
1021     for (auto& x2 : *range_[1]) {
1022       // tensor label: Gamma396
1023       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x4, x3, x1, x2, x0);
1024       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x4, x3, x1, x2, x0)]);
1025       sort_indices<2,4,0,1,3,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x4.size(), x3.size(), x1.size(), x2.size(), x0.size());
1026       // tensor label: v2
1027       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a2, x2, c3);
1028       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a2, x2, c3)]);
1029       sort_indices<0,2,1,3,0,1,1,1>(i1data, i1data_sorted, x3.size(), a2.size(), x2.size(), c3.size());
1030       zgemm3m_("T", "N", x5.size()*x4.size()*x1.size()*x0.size(), a2.size()*c3.size(), x3.size()*x2.size(),
1031              1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
1032              1.0, odata_sorted, x5.size()*x4.size()*x1.size()*x0.size());
1033     }
1034   }
1035   sort_indices<4,5,0,1,2,3,1,1,1,1>(odata_sorted, odata, x5.size(), x4.size(), x1.size(), x0.size(), a2.size(), c3.size());
1036   out()->add_block(odata, a2, c3, x5, x4, x1, x0);
1037 }
1038 
compute()1039 void Task686::Task_local::compute() {
1040   const Index a1 = b(0);
1041   const Index x0 = b(1);
1042   const Index x1 = b(2);
1043   const Index a2 = b(3);
1044   // tensor label: I173
1045   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1046   std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1047   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1048   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1049   for (auto& x7 : *range_[1]) {
1050     for (auto& x6 : *range_[1]) {
1051       for (auto& x5 : *range_[1]) {
1052         // tensor label: t2
1053         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x7, a1, x6, x5);
1054         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x7, a1, x6, x5)]);
1055         sort_indices<0,2,3,1,0,1,1,1>(i0data, i0data_sorted, x7.size(), a1.size(), x6.size(), x5.size());
1056         // tensor label: I1220
1057         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a2, x7, x0, x6, x5, x1);
1058         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a2, x7, x0, x6, x5, x1)]);
1059         sort_indices<1,3,4,0,2,5,0,1,1,1>(i1data, i1data_sorted, a2.size(), x7.size(), x0.size(), x6.size(), x5.size(), x1.size());
1060         zgemm3m_("T", "N", a1.size(), a2.size()*x0.size()*x1.size(), x7.size()*x6.size()*x5.size(),
1061                1.0, i0data_sorted, x7.size()*x6.size()*x5.size(), i1data_sorted, x7.size()*x6.size()*x5.size(),
1062                1.0, odata_sorted, a1.size());
1063       }
1064     }
1065   }
1066   sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, a1.size(), a2.size(), x0.size(), x1.size());
1067   out()->add_block(odata, a1, x0, x1, a2);
1068 }
1069 
compute()1070 void Task687::Task_local::compute() {
1071   const Index a2 = b(0);
1072   const Index x7 = b(1);
1073   const Index x0 = b(2);
1074   const Index x6 = b(3);
1075   const Index x5 = b(4);
1076   const Index x1 = b(5);
1077   // tensor label: I1220
1078   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a2, x7, x0, x6, x5, x1)]);
1079   std::fill_n(odata.get(), out()->get_size(a2, x7, x0, x6, x5, x1), 0.0);
1080   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a2, x7, x0, x6, x5, x1)]);
1081   std::fill_n(odata_sorted.get(), out()->get_size(a2, x7, x0, x6, x5, x1), 0.0);
1082   for (auto& x4 : *range_[1]) {
1083     for (auto& x3 : *range_[1]) {
1084       for (auto& x2 : *range_[1]) {
1085         // tensor label: Gamma397
1086         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x7, x0, x6, x5, x4, x1, x3, x2);
1087         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x7, x0, x6, x5, x4, x1, x3, x2)]);
1088         sort_indices<4,6,7,0,1,2,3,5,0,1,1,1>(i0data, i0data_sorted, x7.size(), x0.size(), x6.size(), x5.size(), x4.size(), x1.size(), x3.size(), x2.size());
1089         // tensor label: v2
1090         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x4, a2, x3, x2);
1091         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x4, a2, x3, x2)]);
1092         sort_indices<0,2,3,1,0,1,1,2>(i1data, i1data_sorted, x4.size(), a2.size(), x3.size(), x2.size());
1093         zgemm3m_("T", "N", x7.size()*x0.size()*x6.size()*x5.size()*x1.size(), a2.size(), x4.size()*x3.size()*x2.size(),
1094                1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
1095                1.0, odata_sorted, x7.size()*x0.size()*x6.size()*x5.size()*x1.size());
1096       }
1097     }
1098   }
1099   sort_indices<5,0,1,2,3,4,1,1,1,1>(odata_sorted, odata, x7.size(), x0.size(), x6.size(), x5.size(), x1.size(), a2.size());
1100   out()->add_block(odata, a2, x7, x0, x6, x5, x1);
1101 }
1102 
compute()1103 void Task688::Task_local::compute() {
1104   const Index a2 = b(0);
1105   const Index x7 = b(1);
1106   const Index x0 = b(2);
1107   const Index x6 = b(3);
1108   const Index x5 = b(4);
1109   const Index x1 = b(5);
1110   // tensor label: I1220
1111   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a2, x7, x0, x6, x5, x1)]);
1112   std::fill_n(odata.get(), out()->get_size(a2, x7, x0, x6, x5, x1), 0.0);
1113   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a2, x7, x0, x6, x5, x1)]);
1114   std::fill_n(odata_sorted.get(), out()->get_size(a2, x7, x0, x6, x5, x1), 0.0);
1115   for (auto& x4 : *range_[1]) {
1116     for (auto& x3 : *range_[1]) {
1117       for (auto& x2 : *range_[1]) {
1118         // tensor label: Gamma236
1119         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x7, x0, x6, x5, x4, x3, x2, x1);
1120         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x7, x0, x6, x5, x4, x3, x2, x1)]);
1121         sort_indices<4,5,6,0,1,2,3,7,0,1,1,1>(i0data, i0data_sorted, x7.size(), x0.size(), x6.size(), x5.size(), x4.size(), x3.size(), x2.size(), x1.size());
1122         // tensor label: v2
1123         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x4, x3, x2, a2);
1124         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x4, x3, x2, a2)]);
1125         sort_indices<0,1,2,3,0,1,1,2>(i1data, i1data_sorted, x4.size(), x3.size(), x2.size(), a2.size());
1126         zgemm3m_("T", "N", x7.size()*x0.size()*x6.size()*x5.size()*x1.size(), a2.size(), x4.size()*x3.size()*x2.size(),
1127                1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
1128                1.0, odata_sorted, x7.size()*x0.size()*x6.size()*x5.size()*x1.size());
1129       }
1130     }
1131   }
1132   sort_indices<5,0,1,2,3,4,1,1,1,1>(odata_sorted, odata, x7.size(), x0.size(), x6.size(), x5.size(), x1.size(), a2.size());
1133   out()->add_block(odata, a2, x7, x0, x6, x5, x1);
1134 }
1135 
compute()1136 void Task689::Task_local::compute() {
1137   const Index a1 = b(0);
1138   const Index x0 = b(1);
1139   const Index x1 = b(2);
1140   const Index a2 = b(3);
1141   // tensor label: I173
1142   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1143   std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1144   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1145   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1146   for (auto& x2 : *range_[1]) {
1147     for (auto& a3 : *range_[2]) {
1148       // tensor label: v2
1149       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x2, a1, a3, a2);
1150       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x2, a1, a3, a2)]);
1151       sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x2.size(), a1.size(), a3.size(), a2.size());
1152       // tensor label: I1226
1153       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, x1, x2, x0);
1154       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, x1, x2, x0)]);
1155       sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, a3.size(), x1.size(), x2.size(), x0.size());
1156       zgemm3m_("T", "N", a1.size()*a2.size(), x1.size()*x0.size(), a3.size()*x2.size(),
1157              1.0, i0data_sorted, a3.size()*x2.size(), i1data_sorted, a3.size()*x2.size(),
1158              1.0, odata_sorted, a1.size()*a2.size());
1159     }
1160   }
1161   sort_indices<0,3,2,1,1,1,1,1>(odata_sorted, odata, a1.size(), a2.size(), x1.size(), x0.size());
1162   out()->add_block(odata, a1, x0, x1, a2);
1163 }
1164 
compute()1165 void Task690::Task_local::compute() {
1166   const Index a3 = b(0);
1167   const Index x1 = b(1);
1168   const Index x2 = b(2);
1169   const Index x0 = b(3);
1170   // tensor label: I1226
1171   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a3, x1, x2, x0)]);
1172   std::fill_n(odata.get(), out()->get_size(a3, x1, x2, x0), 0.0);
1173   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a3, x1, x2, x0)]);
1174   std::fill_n(odata_sorted.get(), out()->get_size(a3, x1, x2, x0), 0.0);
1175   for (auto& x5 : *range_[1]) {
1176     for (auto& x4 : *range_[1]) {
1177       for (auto& x3 : *range_[1]) {
1178         // tensor label: Gamma336
1179         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x1, x4, x3, x2, x0);
1180         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x1, x4, x3, x2, x0)]);
1181         sort_indices<0,2,3,1,4,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x1.size(), x4.size(), x3.size(), x2.size(), x0.size());
1182         // tensor label: t2
1183         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x5, a3, x4, x3);
1184         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x5, a3, x4, x3)]);
1185         sort_indices<0,2,3,1,0,1,-1,1>(i1data, i1data_sorted, x5.size(), a3.size(), x4.size(), x3.size());
1186         zgemm3m_("T", "N", x1.size()*x2.size()*x0.size(), a3.size(), x5.size()*x4.size()*x3.size(),
1187                1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
1188                1.0, odata_sorted, x1.size()*x2.size()*x0.size());
1189       }
1190     }
1191   }
1192   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x1.size(), x2.size(), x0.size(), a3.size());
1193   out()->add_block(odata, a3, x1, x2, x0);
1194 }
1195 
compute()1196 void Task691::Task_local::compute() {
1197   const Index a1 = b(0);
1198   const Index x0 = b(1);
1199   const Index x1 = b(2);
1200   const Index a2 = b(3);
1201   // tensor label: I173
1202   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1203   std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1204   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1205   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1206   for (auto& x5 : *range_[1]) {
1207     for (auto& c3 : *range_[0]) {
1208       // tensor label: t2
1209       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, a1, c3, a2);
1210       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, a1, c3, a2)]);
1211       sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), a1.size(), c3.size(), a2.size());
1212       // tensor label: I1232
1213       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(c3, x5, x0, x1);
1214       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(c3, x5, x0, x1)]);
1215       sort_indices<1,0,2,3,0,1,1,1>(i1data, i1data_sorted, c3.size(), x5.size(), x0.size(), x1.size());
1216       zgemm3m_("T", "N", a1.size()*a2.size(), x0.size()*x1.size(), c3.size()*x5.size(),
1217              1.0, i0data_sorted, c3.size()*x5.size(), i1data_sorted, c3.size()*x5.size(),
1218              1.0, odata_sorted, a1.size()*a2.size());
1219     }
1220   }
1221   sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, a1.size(), a2.size(), x0.size(), x1.size());
1222   out()->add_block(odata, a1, x0, x1, a2);
1223 }
1224 
compute()1225 void Task692::Task_local::compute() {
1226   const Index c3 = b(0);
1227   const Index x5 = b(1);
1228   const Index x0 = b(2);
1229   const Index x1 = b(3);
1230   // tensor label: I1232
1231   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c3, x5, x0, x1)]);
1232   std::fill_n(odata.get(), out()->get_size(c3, x5, x0, x1), 0.0);
1233   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c3, x5, x0, x1)]);
1234   std::fill_n(odata_sorted.get(), out()->get_size(c3, x5, x0, x1), 0.0);
1235   for (auto& x4 : *range_[1]) {
1236     for (auto& x3 : *range_[1]) {
1237       for (auto& x2 : *range_[1]) {
1238         // tensor label: Gamma391
1239         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x1, x3, x2);
1240         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x1, x3, x2)]);
1241         sort_indices<2,4,5,0,1,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x1.size(), x3.size(), x2.size());
1242         // tensor label: v2
1243         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x4, c3, x3, x2);
1244         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x4, c3, x3, x2)]);
1245         sort_indices<0,2,3,1,0,1,-1,2>(i1data, i1data_sorted, x4.size(), c3.size(), x3.size(), x2.size());
1246         zgemm3m_("T", "N", x5.size()*x0.size()*x1.size(), c3.size(), x4.size()*x3.size()*x2.size(),
1247                1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
1248                1.0, odata_sorted, x5.size()*x0.size()*x1.size());
1249       }
1250     }
1251   }
1252   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x0.size(), x1.size(), c3.size());
1253   out()->add_block(odata, c3, x5, x0, x1);
1254 }
1255 
compute()1256 void Task693::Task_local::compute() {
1257   const Index c3 = b(0);
1258   const Index x5 = b(1);
1259   const Index x0 = b(2);
1260   const Index x1 = b(3);
1261   // tensor label: I1232
1262   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c3, x5, x0, x1)]);
1263   std::fill_n(odata.get(), out()->get_size(c3, x5, x0, x1), 0.0);
1264   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c3, x5, x0, x1)]);
1265   std::fill_n(odata_sorted.get(), out()->get_size(c3, x5, x0, x1), 0.0);
1266   for (auto& x4 : *range_[1]) {
1267     for (auto& x3 : *range_[1]) {
1268       for (auto& x2 : *range_[1]) {
1269         // tensor label: Gamma32
1270         std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x3, x2, x1);
1271         std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x3, x2, x1)]);
1272         sort_indices<2,3,4,0,1,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
1273         // tensor label: v2
1274         std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x4, x3, x2, c3);
1275         std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x4, x3, x2, c3)]);
1276         sort_indices<0,1,2,3,0,1,-1,2>(i1data, i1data_sorted, x4.size(), x3.size(), x2.size(), c3.size());
1277         zgemm3m_("T", "N", x5.size()*x0.size()*x1.size(), c3.size(), x4.size()*x3.size()*x2.size(),
1278                1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
1279                1.0, odata_sorted, x5.size()*x0.size()*x1.size());
1280       }
1281     }
1282   }
1283   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x0.size(), x1.size(), c3.size());
1284   out()->add_block(odata, c3, x5, x0, x1);
1285 }
1286 
compute()1287 void Task694::Task_local::compute() {
1288   const Index a1 = b(0);
1289   const Index x0 = b(1);
1290   const Index x1 = b(2);
1291   const Index a2 = b(3);
1292   // tensor label: I173
1293   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1294   std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1295   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1296   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1297   for (auto& x3 : *range_[1]) {
1298     for (auto& x2 : *range_[1]) {
1299       // tensor label: Gamma368
1300       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x1, x2, x0);
1301       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x1, x2, x0)]);
1302       sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x1.size(), x2.size(), x0.size());
1303       // tensor label: I1238
1304       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, a2, x3, a1);
1305       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, a2, x3, a1)]);
1306       sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, x2.size(), a2.size(), x3.size(), a1.size());
1307       zgemm3m_("T", "N", x1.size()*x0.size(), a2.size()*a1.size(), x2.size()*x3.size(),
1308              1.0, i0data_sorted, x2.size()*x3.size(), i1data_sorted, x2.size()*x3.size(),
1309              1.0, odata_sorted, x1.size()*x0.size());
1310     }
1311   }
1312   sort_indices<3,1,0,2,1,1,1,1>(odata_sorted, odata, x1.size(), x0.size(), a2.size(), a1.size());
1313   out()->add_block(odata, a1, x0, x1, a2);
1314 }
1315 
compute()1316 void Task695::Task_local::compute() {
1317   const Index x2 = b(0);
1318   const Index a2 = b(1);
1319   const Index x3 = b(2);
1320   const Index a1 = b(3);
1321   // tensor label: I1238
1322   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, a2, x3, a1)]);
1323   std::fill_n(odata.get(), out()->get_size(x2, a2, x3, a1), 0.0);
1324   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, a2, x3, a1)]);
1325   std::fill_n(odata_sorted.get(), out()->get_size(x2, a2, x3, a1), 0.0);
1326   for (auto& a3 : *range_[2]) {
1327     for (auto& c4 : *range_[0]) {
1328       // tensor label: t2
1329       std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a3, c4, a1);
1330       std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a3, c4, a1)]);
1331       sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), a3.size(), c4.size(), a1.size());
1332       // tensor label: v2
1333       std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, c4, a3, a2);
1334       std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, c4, a3, a2)]);
1335       sort_indices<2,1,0,3,0,1,1,1>(i1data, i1data_sorted, x2.size(), c4.size(), a3.size(), a2.size());
1336       zgemm3m_("T", "N", x3.size()*a1.size(), x2.size()*a2.size(), c4.size()*a3.size(),
1337              1.0, i0data_sorted, c4.size()*a3.size(), i1data_sorted, c4.size()*a3.size(),
1338              1.0, odata_sorted, x3.size()*a1.size());
1339     }
1340   }
1341   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
1342   out()->add_block(odata, x2, a2, x3, a1);
1343 }
1344 
compute()1345 void Task696::Task_local::compute() {
1346   const Index a1 = b(0);
1347   const Index x0 = b(1);
1348   const Index x1 = b(2);
1349   const Index a2 = b(3);
1350   // tensor label: I173
1351   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1352   std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1353   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1354   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1355   for (auto& x5 : *range_[1]) {
1356     for (auto& x4 : *range_[1]) {
1357       for (auto& x3 : *range_[1]) {
1358         for (auto& x2 : *range_[1]) {
1359           // tensor label: Gamma391
1360           std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x1, x3, x2);
1361           std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x1, x3, x2)]);
1362           sort_indices<0,2,4,5,1,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x1.size(), x3.size(), x2.size());
1363           // tensor label: I1250
1364           std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a2, x3, x2, x5, a1, x4);
1365           std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a2, x3, x2, x5, a1, x4)]);
1366           sort_indices<3,5,1,2,0,4,0,1,1,1>(i1data, i1data_sorted, a2.size(), x3.size(), x2.size(), x5.size(), a1.size(), x4.size());
1367           zgemm3m_("T", "N", x0.size()*x1.size(), a2.size()*a1.size(), x3.size()*x2.size()*x5.size()*x4.size(),
1368                  1.0, i0data_sorted, x3.size()*x2.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x2.size()*x5.size()*x4.size(),
1369                  1.0, odata_sorted, x0.size()*x1.size());
1370         }
1371       }
1372     }
1373   }
1374   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a2.size(), a1.size());
1375   out()->add_block(odata, a1, x0, x1, a2);
1376 }
1377 
compute()1378 void Task697::Task_local::compute() {
1379   const Index a2 = b(0);
1380   const Index x3 = b(1);
1381   const Index x2 = b(2);
1382   const Index x5 = b(3);
1383   const Index a1 = b(4);
1384   const Index x4 = b(5);
1385   // tensor label: I1250
1386   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a2, x3, x2, x5, a1, x4)]);
1387   std::fill_n(odata.get(), out()->get_size(a2, x3, x2, x5, a1, x4), 0.0);
1388   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a2, x3, x2, x5, a1, x4)]);
1389   std::fill_n(odata_sorted.get(), out()->get_size(a2, x3, x2, x5, a1, x4), 0.0);
1390   for (auto& a3 : *range_[2]) {
1391     // tensor label: t2
1392     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, a1, x4, a3);
1393     std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, a1, x4, a3)]);
1394     sort_indices<3,0,1,2,0,1,1,1>(i0data, i0data_sorted, x5.size(), a1.size(), x4.size(), a3.size());
1395     // tensor label: I1251
1396     std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, a2, x3, x2);
1397     std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, a2, x3, x2)]);
1398     sort_indices<0,1,2,3,0,1,1,1>(i1data, i1data_sorted, a3.size(), a2.size(), x3.size(), x2.size());
1399     zgemm3m_("T", "N", x5.size()*a1.size()*x4.size(), a2.size()*x3.size()*x2.size(), a3.size(),
1400            1.0, i0data_sorted, a3.size(), i1data_sorted, a3.size(),
1401            1.0, odata_sorted, x5.size()*a1.size()*x4.size());
1402   }
1403   sort_indices<3,4,5,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), a1.size(), x4.size(), a2.size(), x3.size(), x2.size());
1404   out()->add_block(odata, a2, x3, x2, x5, a1, x4);
1405 }
1406 
compute()1407 void Task698::Task_local::compute() {
1408   const Index a3 = b(0);
1409   const Index a2 = b(1);
1410   const Index x3 = b(2);
1411   const Index x2 = b(3);
1412   // tensor label: I1251
1413   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a3, a2, x3, x2)]);
1414   std::fill_n(odata.get(), out()->get_size(a3, a2, x3, x2), 0.0);
1415   {
1416     // tensor label: v2
1417     std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a3, a2, x3, x2);
1418     sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, a3.size(), a2.size(), x3.size(), x2.size());
1419   }
1420   {
1421     // tensor label: v2
1422     std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x3, x2, a3, a2);
1423     sort_indices<2,3,0,1,1,1,1,1>(i1data, odata, x3.size(), x2.size(), a3.size(), a2.size());
1424   }
1425   out()->add_block(odata, a3, a2, x3, x2);
1426 }
1427 
compute()1428 void Task699::Task_local::compute() {
1429   const Index a1 = b(0);
1430   const Index x0 = b(1);
1431   const Index x1 = b(2);
1432   const Index a2 = b(3);
1433   // tensor label: I173
1434   std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1435   std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1436   std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1437   std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1438   for (auto& x5 : *range_[1]) {
1439     for (auto& x4 : *range_[1]) {
1440       for (auto& x3 : *range_[1]) {
1441         for (auto& x2 : *range_[1]) {
1442           // tensor label: Gamma32
1443           std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x3, x2, x1);
1444           std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x3, x2, x1)]);
1445           sort_indices<0,2,3,4,1,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
1446           // tensor label: I1253
1447           std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, x2, a2, x5, a1, x4);
1448           std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, x2, a2, x5, a1, x4)]);
1449           sort_indices<3,5,0,1,2,4,0,1,1,1>(i1data, i1data_sorted, x3.size(), x2.size(), a2.size(), x5.size(), a1.size(), x4.size());
1450           zgemm3m_("T", "N", x0.size()*x1.size(), a2.size()*a1.size(), x3.size()*x2.size()*x5.size()*x4.size(),
1451                  1.0, i0data_sorted, x3.size()*x2.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x2.size()*x5.size()*x4.size(),
1452                  1.0, odata_sorted, x0.size()*x1.size());
1453         }
1454       }
1455     }
1456   }
1457   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a2.size(), a1.size());
1458   out()->add_block(odata, a1, x0, x1, a2);
1459 }
1460 
1461 #endif
1462