1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: CASA_tasks1.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/casa/CASA_tasks1.h>
29 
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::CASA;
34 
compute()35 void Task0::Task_local::compute() {
36   const Index x0 = b(0);
37   const Index x3 = b(1);
38   const Index x1 = b(2);
39   const Index x2 = b(3);
40   // tensor label: Gamma0
41   std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x3, x1, x2)]);
42   std::fill_n(odata.get(), out()->get_size(x0, x3, x1, x2), 0.0);
43   {
44     // rdm0 non-merged case
45     if (x0 == x2 && x1 == x3) {
46       std::unique_ptr<double[]> i0data = in(0)->get_block();
47       for (int i2 = 0; i2 != x2.size(); ++i2) {
48         for (int i3 = 0; i3 != x3.size(); ++i3) {
49           odata[i2+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))]  += -2.0 * i0data[0];
50         }
51       }
52     }
53   }
54   {
55     if (x0 == x2) {
56       std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x3);
57       for (int i2 = 0; i2 != x2.size(); ++i2) {
58         for (int i1 = 0; i1 != x1.size(); ++i1) {
59           for (int i3 = 0; i3 != x3.size(); ++i3) {
60             odata[i2+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))]
61               += (1.0) * i0data[i1+x1.size()*(i3)];
62           }
63         }
64       }
65     }
66   }
67   {
68     // rdm0 non-merged case
69     if (x0 == x3 && x1 == x2) {
70       std::unique_ptr<double[]> i0data = in(0)->get_block();
71       for (int i2 = 0; i2 != x2.size(); ++i2) {
72         for (int i3 = 0; i3 != x3.size(); ++i3) {
73           odata[i3+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))]  += 4.0 * i0data[0];
74         }
75       }
76     }
77   }
78   {
79     if (x0 == x3) {
80       std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
81       for (int i2 = 0; i2 != x2.size(); ++i2) {
82         for (int i1 = 0; i1 != x1.size(); ++i1) {
83           for (int i3 = 0; i3 != x3.size(); ++i3) {
84             odata[i3+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))]
85               += (-2.0) * i0data[i1+x1.size()*(i2)];
86           }
87         }
88       }
89     }
90   }
91   {
92     if (x1 == x2) {
93       std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x3);
94       for (int i2 = 0; i2 != x2.size(); ++i2) {
95         for (int i3 = 0; i3 != x3.size(); ++i3) {
96           for (int i0 = 0; i0 != x0.size(); ++i0) {
97             odata[i0+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))]
98               += (-2.0) * i0data[i0+x0.size()*(i3)];
99           }
100         }
101       }
102     }
103   }
104   {
105     if (x1 == x3) {
106       std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
107       for (int i2 = 0; i2 != x2.size(); ++i2) {
108         for (int i3 = 0; i3 != x3.size(); ++i3) {
109           for (int i0 = 0; i0 != x0.size(); ++i0) {
110             odata[i0+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))]
111               += (1.0) * i0data[i0+x0.size()*(i2)];
112           }
113         }
114       }
115     }
116   }
117   {
118     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x3, x1, x2);
119     sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x0.size(), x3.size(), x1.size(), x2.size());
120   }
121   out()->add_block(odata, x0, x3, x1, x2);
122 }
123 
compute()124 void Task1::Task_local::compute() {
125   const Index x5 = b(0);
126   const Index x4 = b(1);
127   const Index x0 = b(2);
128   const Index x3 = b(3);
129   const Index x1 = b(4);
130   const Index x2 = b(5);
131   // tensor label: Gamma1
132   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x0, x3, x1, x2)]);
133   std::fill_n(odata.get(), out()->get_size(x5, x4, x0, x3, x1, x2), 0.0);
134   {
135     if (x0 == x2 && x1 == x3) {
136       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4);
137       for (int i2 = 0; i2 != x2.size(); ++i2) {
138         for (int i3 = 0; i3 != x3.size(); ++i3) {
139           for (int i4 = 0; i4 != x4.size(); ++i4) {
140             for (int i5 = 0; i5 != x5.size(); ++i5) {
141               odata[i5+x5.size()*(i4+x4.size()*(i2+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))))]
142                 += (-2.0) * i0data[i5+x5.size()*(i4)];
143             }
144           }
145         }
146       }
147     }
148   }
149   {
150     if (x1 == x4 && x0 == x2) {
151       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x3);
152       for (int i2 = 0; i2 != x2.size(); ++i2) {
153         for (int i3 = 0; i3 != x3.size(); ++i3) {
154           for (int i4 = 0; i4 != x4.size(); ++i4) {
155             for (int i5 = 0; i5 != x5.size(); ++i5) {
156               odata[i5+x5.size()*(i4+x4.size()*(i2+x0.size()*(i3+x3.size()*(i4+x1.size()*(i2)))))]
157                 += (1.0) * i0data[i5+x5.size()*(i3)];
158             }
159           }
160         }
161       }
162     }
163   }
164   {
165     if (x0 == x2) {
166       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x3);
167       for (int i2 = 0; i2 != x2.size(); ++i2) {
168         for (int i1 = 0; i1 != x1.size(); ++i1) {
169           for (int i3 = 0; i3 != x3.size(); ++i3) {
170             for (int i4 = 0; i4 != x4.size(); ++i4) {
171               for (int i5 = 0; i5 != x5.size(); ++i5) {
172                 odata[i5+x5.size()*(i4+x4.size()*(i2+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))))]
173                   += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i3)))];
174               }
175             }
176           }
177         }
178       }
179     }
180   }
181   {
182     if (x1 == x2 && x0 == x3) {
183       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4);
184       for (int i2 = 0; i2 != x2.size(); ++i2) {
185         for (int i3 = 0; i3 != x3.size(); ++i3) {
186           for (int i4 = 0; i4 != x4.size(); ++i4) {
187             for (int i5 = 0; i5 != x5.size(); ++i5) {
188               odata[i5+x5.size()*(i4+x4.size()*(i3+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))))]
189                 += (4.0) * i0data[i5+x5.size()*(i4)];
190             }
191           }
192         }
193       }
194     }
195   }
196   {
197     if (x0 == x3 && x1 == x4) {
198       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x2);
199       for (int i2 = 0; i2 != x2.size(); ++i2) {
200         for (int i3 = 0; i3 != x3.size(); ++i3) {
201           for (int i4 = 0; i4 != x4.size(); ++i4) {
202             for (int i5 = 0; i5 != x5.size(); ++i5) {
203               odata[i5+x5.size()*(i4+x4.size()*(i3+x0.size()*(i3+x3.size()*(i4+x1.size()*(i2)))))]
204                 += (-2.0) * i0data[i5+x5.size()*(i2)];
205             }
206           }
207         }
208       }
209     }
210   }
211   {
212     if (x0 == x3) {
213       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x2);
214       for (int i2 = 0; i2 != x2.size(); ++i2) {
215         for (int i1 = 0; i1 != x1.size(); ++i1) {
216           for (int i3 = 0; i3 != x3.size(); ++i3) {
217             for (int i4 = 0; i4 != x4.size(); ++i4) {
218               for (int i5 = 0; i5 != x5.size(); ++i5) {
219                 odata[i5+x5.size()*(i4+x4.size()*(i3+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))))]
220                   += (-2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i2)))];
221               }
222             }
223           }
224         }
225       }
226     }
227   }
228   {
229     if (x0 == x4 && x1 == x2) {
230       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x3);
231       for (int i2 = 0; i2 != x2.size(); ++i2) {
232         for (int i3 = 0; i3 != x3.size(); ++i3) {
233           for (int i4 = 0; i4 != x4.size(); ++i4) {
234             for (int i5 = 0; i5 != x5.size(); ++i5) {
235               odata[i5+x5.size()*(i4+x4.size()*(i4+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))))]
236                 += (-2.0) * i0data[i5+x5.size()*(i3)];
237             }
238           }
239         }
240       }
241     }
242   }
243   {
244     if (x1 == x3 && x0 == x4) {
245       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x2);
246       for (int i2 = 0; i2 != x2.size(); ++i2) {
247         for (int i3 = 0; i3 != x3.size(); ++i3) {
248           for (int i4 = 0; i4 != x4.size(); ++i4) {
249             for (int i5 = 0; i5 != x5.size(); ++i5) {
250               odata[i5+x5.size()*(i4+x4.size()*(i4+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))))]
251                 += (1.0) * i0data[i5+x5.size()*(i2)];
252             }
253           }
254         }
255       }
256     }
257   }
258   {
259     if (x0 == x4) {
260       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x1, x2);
261       for (int i2 = 0; i2 != x2.size(); ++i2) {
262         for (int i1 = 0; i1 != x1.size(); ++i1) {
263           for (int i3 = 0; i3 != x3.size(); ++i3) {
264             for (int i4 = 0; i4 != x4.size(); ++i4) {
265               for (int i5 = 0; i5 != x5.size(); ++i5) {
266                 odata[i5+x5.size()*(i4+x4.size()*(i4+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))))]
267                   += (1.0) * i0data[i5+x5.size()*(i3+x3.size()*(i1+x1.size()*(i2)))];
268               }
269             }
270           }
271         }
272       }
273     }
274   }
275   {
276     if (x1 == x2) {
277       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x0, x3);
278       for (int i2 = 0; i2 != x2.size(); ++i2) {
279         for (int i3 = 0; i3 != x3.size(); ++i3) {
280           for (int i0 = 0; i0 != x0.size(); ++i0) {
281             for (int i4 = 0; i4 != x4.size(); ++i4) {
282               for (int i5 = 0; i5 != x5.size(); ++i5) {
283                 odata[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))))]
284                   += (-2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i3)))];
285               }
286             }
287           }
288         }
289       }
290     }
291   }
292   {
293     if (x1 == x3) {
294       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x0, x2);
295       for (int i2 = 0; i2 != x2.size(); ++i2) {
296         for (int i3 = 0; i3 != x3.size(); ++i3) {
297           for (int i0 = 0; i0 != x0.size(); ++i0) {
298             for (int i4 = 0; i4 != x4.size(); ++i4) {
299               for (int i5 = 0; i5 != x5.size(); ++i5) {
300                 odata[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))))]
301                   += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i2)))];
302               }
303             }
304           }
305         }
306       }
307     }
308   }
309   {
310     if (x1 == x4) {
311       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2, x0, x3);
312       for (int i2 = 0; i2 != x2.size(); ++i2) {
313         for (int i3 = 0; i3 != x3.size(); ++i3) {
314           for (int i0 = 0; i0 != x0.size(); ++i0) {
315             for (int i4 = 0; i4 != x4.size(); ++i4) {
316               for (int i5 = 0; i5 != x5.size(); ++i5) {
317                 odata[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i3+x3.size()*(i4+x1.size()*(i2)))))]
318                   += (1.0) * i0data[i5+x5.size()*(i2+x2.size()*(i0+x0.size()*(i3)))];
319               }
320             }
321           }
322         }
323       }
324     }
325   }
326   {
327     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x0, x3, x1, x2);
328     sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x4.size(), x0.size(), x3.size(), x1.size(), x2.size());
329   }
330   out()->add_block(odata, x5, x4, x0, x3, x1, x2);
331 }
332 
compute()333 void Task2::Task_local::compute() {
334   const Index x1 = b(0);
335   const Index x3 = b(1);
336   const Index x0 = b(2);
337   const Index x2 = b(3);
338   // tensor label: Gamma2
339   std::unique_ptr<double[]> odata(new double[out()->get_size(x1, x3, x0, x2)]);
340   std::fill_n(odata.get(), out()->get_size(x1, x3, x0, x2), 0.0);
341   {
342     // rdm0 non-merged case
343     if (x0 == x2 && x1 == x3) {
344       std::unique_ptr<double[]> i0data = in(0)->get_block();
345       for (int i2 = 0; i2 != x2.size(); ++i2) {
346         for (int i3 = 0; i3 != x3.size(); ++i3) {
347           odata[i3+x1.size()*(i3+x3.size()*(i2+x0.size()*(i2)))]  += -4.0 * i0data[0];
348         }
349       }
350     }
351   }
352   {
353     if (x0 == x2) {
354       std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x3);
355       for (int i2 = 0; i2 != x2.size(); ++i2) {
356         for (int i3 = 0; i3 != x3.size(); ++i3) {
357           for (int i1 = 0; i1 != x1.size(); ++i1) {
358             odata[i1+x1.size()*(i3+x3.size()*(i2+x0.size()*(i2)))]
359               += (2.0) * i0data[i1+x1.size()*(i3)];
360           }
361         }
362       }
363     }
364   }
365   {
366     // rdm0 non-merged case
367     if (x0 == x3 && x1 == x2) {
368       std::unique_ptr<double[]> i0data = in(0)->get_block();
369       for (int i2 = 0; i2 != x2.size(); ++i2) {
370         for (int i3 = 0; i3 != x3.size(); ++i3) {
371           odata[i2+x1.size()*(i3+x3.size()*(i3+x0.size()*(i2)))]  += 2.0 * i0data[0];
372         }
373       }
374     }
375   }
376   {
377     if (x0 == x3) {
378       std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
379       for (int i2 = 0; i2 != x2.size(); ++i2) {
380         for (int i3 = 0; i3 != x3.size(); ++i3) {
381           for (int i1 = 0; i1 != x1.size(); ++i1) {
382             odata[i1+x1.size()*(i3+x3.size()*(i3+x0.size()*(i2)))]
383               += (-1.0) * i0data[i1+x1.size()*(i2)];
384           }
385         }
386       }
387     }
388   }
389   {
390     if (x1 == x2) {
391       std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x3);
392       for (int i2 = 0; i2 != x2.size(); ++i2) {
393         for (int i0 = 0; i0 != x0.size(); ++i0) {
394           for (int i3 = 0; i3 != x3.size(); ++i3) {
395             odata[i2+x1.size()*(i3+x3.size()*(i0+x0.size()*(i2)))]
396               += (-1.0) * i0data[i0+x0.size()*(i3)];
397           }
398         }
399       }
400     }
401   }
402   {
403     if (x1 == x3) {
404       std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
405       for (int i2 = 0; i2 != x2.size(); ++i2) {
406         for (int i0 = 0; i0 != x0.size(); ++i0) {
407           for (int i3 = 0; i3 != x3.size(); ++i3) {
408             odata[i3+x1.size()*(i3+x3.size()*(i0+x0.size()*(i2)))]
409               += (2.0) * i0data[i0+x0.size()*(i2)];
410           }
411         }
412       }
413     }
414   }
415   {
416     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x3, x0, x2);
417     sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, x1.size(), x3.size(), x0.size(), x2.size());
418   }
419   out()->add_block(odata, x1, x3, x0, x2);
420 }
421 
compute()422 void Task3::Task_local::compute() {
423   const Index x5 = b(0);
424   const Index x4 = b(1);
425   const Index x2 = b(2);
426   const Index x3 = b(3);
427   const Index x1 = b(4);
428   const Index x0 = b(5);
429   // tensor label: Gamma3
430   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x2, x3, x1, x0)]);
431   std::fill_n(odata.get(), out()->get_size(x5, x4, x2, x3, x1, x0), 0.0);
432   {
433     if (x2 == x4 && x1 == x3) {
434       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
435       for (int i0 = 0; i0 != x0.size(); ++i0) {
436         for (int i3 = 0; i3 != x3.size(); ++i3) {
437           for (int i4 = 0; i4 != x4.size(); ++i4) {
438             for (int i5 = 0; i5 != x5.size(); ++i5) {
439               odata[i5+x5.size()*(i4+x4.size()*(i4+x2.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
440                 += (-1.0) * i0data[i5+x5.size()*(i0)];
441             }
442           }
443         }
444       }
445     }
446   }
447   {
448     if (x1 == x3) {
449       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x2, x0);
450       for (int i0 = 0; i0 != x0.size(); ++i0) {
451         for (int i3 = 0; i3 != x3.size(); ++i3) {
452           for (int i2 = 0; i2 != x2.size(); ++i2) {
453             for (int i4 = 0; i4 != x4.size(); ++i4) {
454               for (int i5 = 0; i5 != x5.size(); ++i5) {
455                 odata[i5+x5.size()*(i4+x4.size()*(i2+x2.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
456                   += (-1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i2+x2.size()*(i0)))];
457               }
458             }
459           }
460         }
461       }
462     }
463   }
464   {
465     if (x2 == x3 && x1 == x4) {
466       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
467       for (int i0 = 0; i0 != x0.size(); ++i0) {
468         for (int i3 = 0; i3 != x3.size(); ++i3) {
469           for (int i4 = 0; i4 != x4.size(); ++i4) {
470             for (int i5 = 0; i5 != x5.size(); ++i5) {
471               odata[i5+x5.size()*(i4+x4.size()*(i3+x2.size()*(i3+x3.size()*(i4+x1.size()*(i0)))))]
472                 += (2.0) * i0data[i5+x5.size()*(i0)];
473             }
474           }
475         }
476       }
477     }
478   }
479   {
480     if (x1 == x4) {
481       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x2, x3);
482       for (int i0 = 0; i0 != x0.size(); ++i0) {
483         for (int i3 = 0; i3 != x3.size(); ++i3) {
484           for (int i2 = 0; i2 != x2.size(); ++i2) {
485             for (int i4 = 0; i4 != x4.size(); ++i4) {
486               for (int i5 = 0; i5 != x5.size(); ++i5) {
487                 odata[i5+x5.size()*(i4+x4.size()*(i2+x2.size()*(i3+x3.size()*(i4+x1.size()*(i0)))))]
488                   += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i2+x2.size()*(i3)))];
489               }
490             }
491           }
492         }
493       }
494     }
495   }
496   {
497     if (x2 == x3) {
498       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x0);
499       for (int i0 = 0; i0 != x0.size(); ++i0) {
500         for (int i1 = 0; i1 != x1.size(); ++i1) {
501           for (int i3 = 0; i3 != x3.size(); ++i3) {
502             for (int i4 = 0; i4 != x4.size(); ++i4) {
503               for (int i5 = 0; i5 != x5.size(); ++i5) {
504                 odata[i5+x5.size()*(i4+x4.size()*(i3+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
505                   += (2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
506               }
507             }
508           }
509         }
510       }
511     }
512   }
513   {
514     if (x2 == x4) {
515       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x1, x0);
516       for (int i0 = 0; i0 != x0.size(); ++i0) {
517         for (int i1 = 0; i1 != x1.size(); ++i1) {
518           for (int i3 = 0; i3 != x3.size(); ++i3) {
519             for (int i4 = 0; i4 != x4.size(); ++i4) {
520               for (int i5 = 0; i5 != x5.size(); ++i5) {
521                 odata[i5+x5.size()*(i4+x4.size()*(i4+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
522                   += (-1.0) * i0data[i5+x5.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
523               }
524             }
525           }
526         }
527       }
528     }
529   }
530   {
531     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x2, x3, x1, x0);
532     sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x5.size(), x4.size(), x2.size(), x3.size(), x1.size(), x0.size());
533   }
534   out()->add_block(odata, x5, x4, x2, x3, x1, x0);
535 }
536 
compute()537 void Task4::Task_local::compute() {
538   const Index x2 = b(0);
539   const Index x5 = b(1);
540   const Index x3 = b(2);
541   const Index x4 = b(3);
542   const Index x1 = b(4);
543   const Index x0 = b(5);
544   // tensor label: Gamma4
545   std::unique_ptr<double[]> odata(new double[out()->get_size(x2, x5, x3, x4, x1, x0)]);
546   std::fill_n(odata.get(), out()->get_size(x2, x5, x3, x4, x1, x0), 0.0);
547   {
548     if (x2 == x5 && x1 == x4) {
549       std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
550       for (int i0 = 0; i0 != x0.size(); ++i0) {
551         for (int i4 = 0; i4 != x4.size(); ++i4) {
552           for (int i3 = 0; i3 != x3.size(); ++i3) {
553             for (int i5 = 0; i5 != x5.size(); ++i5) {
554               odata[i5+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
555                 += (-2.0) * i0data[i3+x3.size()*(i0)];
556             }
557           }
558         }
559       }
560     }
561   }
562   {
563     if (x2 == x4 && x1 == x5) {
564       std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
565       for (int i0 = 0; i0 != x0.size(); ++i0) {
566         for (int i4 = 0; i4 != x4.size(); ++i4) {
567           for (int i3 = 0; i3 != x3.size(); ++i3) {
568             for (int i5 = 0; i5 != x5.size(); ++i5) {
569               odata[i4+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i5+x1.size()*(i0)))))]
570                 += (1.0) * i0data[i3+x3.size()*(i0)];
571             }
572           }
573         }
574       }
575     }
576   }
577   {
578     if (x3 == x5 && x1 == x4) {
579       std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
580       for (int i0 = 0; i0 != x0.size(); ++i0) {
581         for (int i4 = 0; i4 != x4.size(); ++i4) {
582           for (int i5 = 0; i5 != x5.size(); ++i5) {
583             for (int i2 = 0; i2 != x2.size(); ++i2) {
584               odata[i2+x2.size()*(i5+x5.size()*(i5+x3.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
585                 += (1.0) * i0data[i2+x2.size()*(i0)];
586             }
587           }
588         }
589       }
590     }
591   }
592   {
593     if (x1 == x4) {
594       std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x5, x3, x0);
595       for (int i0 = 0; i0 != x0.size(); ++i0) {
596         for (int i4 = 0; i4 != x4.size(); ++i4) {
597           for (int i3 = 0; i3 != x3.size(); ++i3) {
598             for (int i5 = 0; i5 != x5.size(); ++i5) {
599               for (int i2 = 0; i2 != x2.size(); ++i2) {
600                 odata[i2+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
601                   += (1.0) * i0data[i2+x2.size()*(i5+x5.size()*(i3+x3.size()*(i0)))];
602               }
603             }
604           }
605         }
606       }
607     }
608   }
609   {
610     if (x3 == x4 && x1 == x5) {
611       std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
612       for (int i0 = 0; i0 != x0.size(); ++i0) {
613         for (int i4 = 0; i4 != x4.size(); ++i4) {
614           for (int i5 = 0; i5 != x5.size(); ++i5) {
615             for (int i2 = 0; i2 != x2.size(); ++i2) {
616               odata[i2+x2.size()*(i5+x5.size()*(i4+x3.size()*(i4+x4.size()*(i5+x1.size()*(i0)))))]
617                 += (-2.0) * i0data[i2+x2.size()*(i0)];
618             }
619           }
620         }
621       }
622     }
623   }
624   {
625     if (x1 == x5) {
626       std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4, x2, x0);
627       for (int i0 = 0; i0 != x0.size(); ++i0) {
628         for (int i4 = 0; i4 != x4.size(); ++i4) {
629           for (int i3 = 0; i3 != x3.size(); ++i3) {
630             for (int i5 = 0; i5 != x5.size(); ++i5) {
631               for (int i2 = 0; i2 != x2.size(); ++i2) {
632                 odata[i2+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i5+x1.size()*(i0)))))]
633                   += (1.0) * i0data[i3+x3.size()*(i4+x4.size()*(i2+x2.size()*(i0)))];
634               }
635             }
636           }
637         }
638       }
639     }
640   }
641   {
642     if (x3 == x5 && x2 == x4) {
643       std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
644       for (int i0 = 0; i0 != x0.size(); ++i0) {
645         for (int i1 = 0; i1 != x1.size(); ++i1) {
646           for (int i4 = 0; i4 != x4.size(); ++i4) {
647             for (int i5 = 0; i5 != x5.size(); ++i5) {
648               odata[i4+x2.size()*(i5+x5.size()*(i5+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
649                 += (-2.0) * i0data[i1+x1.size()*(i0)];
650             }
651           }
652         }
653       }
654     }
655   }
656   {
657     if (x2 == x4) {
658       std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x5, x1, x0);
659       for (int i0 = 0; i0 != x0.size(); ++i0) {
660         for (int i1 = 0; i1 != x1.size(); ++i1) {
661           for (int i4 = 0; i4 != x4.size(); ++i4) {
662             for (int i3 = 0; i3 != x3.size(); ++i3) {
663               for (int i5 = 0; i5 != x5.size(); ++i5) {
664                 odata[i4+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
665                   += (1.0) * i0data[i3+x3.size()*(i5+x5.size()*(i1+x1.size()*(i0)))];
666               }
667             }
668           }
669         }
670       }
671     }
672   }
673   {
674     if (x3 == x4 && x2 == x5) {
675       std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
676       for (int i0 = 0; i0 != x0.size(); ++i0) {
677         for (int i1 = 0; i1 != x1.size(); ++i1) {
678           for (int i4 = 0; i4 != x4.size(); ++i4) {
679             for (int i5 = 0; i5 != x5.size(); ++i5) {
680               odata[i5+x2.size()*(i5+x5.size()*(i4+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
681                 += (4.0) * i0data[i1+x1.size()*(i0)];
682             }
683           }
684         }
685       }
686     }
687   }
688   {
689     if (x2 == x5) {
690       std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4, x1, x0);
691       for (int i0 = 0; i0 != x0.size(); ++i0) {
692         for (int i1 = 0; i1 != x1.size(); ++i1) {
693           for (int i4 = 0; i4 != x4.size(); ++i4) {
694             for (int i3 = 0; i3 != x3.size(); ++i3) {
695               for (int i5 = 0; i5 != x5.size(); ++i5) {
696                 odata[i5+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
697                   += (-2.0) * i0data[i3+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
698               }
699             }
700           }
701         }
702       }
703     }
704   }
705   {
706     if (x3 == x4) {
707       std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x5, x1, x0);
708       for (int i0 = 0; i0 != x0.size(); ++i0) {
709         for (int i1 = 0; i1 != x1.size(); ++i1) {
710           for (int i4 = 0; i4 != x4.size(); ++i4) {
711             for (int i5 = 0; i5 != x5.size(); ++i5) {
712               for (int i2 = 0; i2 != x2.size(); ++i2) {
713                 odata[i2+x2.size()*(i5+x5.size()*(i4+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
714                   += (-2.0) * i0data[i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))];
715               }
716             }
717           }
718         }
719       }
720     }
721   }
722   {
723     if (x3 == x5) {
724       std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x4, x1, x0);
725       for (int i0 = 0; i0 != x0.size(); ++i0) {
726         for (int i1 = 0; i1 != x1.size(); ++i1) {
727           for (int i4 = 0; i4 != x4.size(); ++i4) {
728             for (int i5 = 0; i5 != x5.size(); ++i5) {
729               for (int i2 = 0; i2 != x2.size(); ++i2) {
730                 odata[i2+x2.size()*(i5+x5.size()*(i5+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
731                   += (1.0) * i0data[i2+x2.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
732               }
733             }
734           }
735         }
736       }
737     }
738   }
739   {
740     std::unique_ptr<double[]> i0data = in(2)->get_block(x2, x5, x3, x4, x1, x0);
741     sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x2.size(), x5.size(), x3.size(), x4.size(), x1.size(), x0.size());
742   }
743   out()->add_block(odata, x2, x5, x3, x4, x1, x0);
744 }
745 
compute()746 void Task5::Task_local::compute() {
747   const Index x2 = b(0);
748   const Index x3 = b(1);
749   const Index x1 = b(2);
750   const Index x0 = b(3);
751   // tensor label: Gamma5
752   std::unique_ptr<double[]> odata(new double[out()->get_size(x2, x3, x1, x0)]);
753   std::fill_n(odata.get(), out()->get_size(x2, x3, x1, x0), 0.0);
754   {
755     if (x1 == x3) {
756       std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
757       for (int i0 = 0; i0 != x0.size(); ++i0) {
758         for (int i3 = 0; i3 != x3.size(); ++i3) {
759           for (int i2 = 0; i2 != x2.size(); ++i2) {
760             odata[i2+x2.size()*(i3+x3.size()*(i3+x1.size()*(i0)))]
761               += (-1.0) * i0data[i2+x2.size()*(i0)];
762           }
763         }
764       }
765     }
766   }
767   {
768     if (x2 == x3) {
769       std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
770       for (int i0 = 0; i0 != x0.size(); ++i0) {
771         for (int i1 = 0; i1 != x1.size(); ++i1) {
772           for (int i3 = 0; i3 != x3.size(); ++i3) {
773             odata[i3+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))]
774               += (2.0) * i0data[i1+x1.size()*(i0)];
775           }
776         }
777       }
778     }
779   }
780   {
781     std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x3, x1, x0);
782     sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, x2.size(), x3.size(), x1.size(), x0.size());
783   }
784   out()->add_block(odata, x2, x3, x1, x0);
785 }
786 
compute()787 void Task6::Task_local::compute() {
788   const Index x5 = b(0);
789   const Index x3 = b(1);
790   const Index x2 = b(2);
791   const Index x4 = b(3);
792   const Index x1 = b(4);
793   const Index x0 = b(5);
794   // tensor label: Gamma7
795   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x3, x2, x4, x1, x0)]);
796   std::fill_n(odata.get(), out()->get_size(x5, x3, x2, x4, x1, x0), 0.0);
797   {
798     if (x2 == x4 && x1 == x3) {
799       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
800       for (int i0 = 0; i0 != x0.size(); ++i0) {
801         for (int i4 = 0; i4 != x4.size(); ++i4) {
802           for (int i3 = 0; i3 != x3.size(); ++i3) {
803             for (int i5 = 0; i5 != x5.size(); ++i5) {
804               odata[i5+x5.size()*(i3+x3.size()*(i4+x2.size()*(i4+x4.size()*(i3+x1.size()*(i0)))))]
805                 += (-2.0) * i0data[i5+x5.size()*(i0)];
806             }
807           }
808         }
809       }
810     }
811   }
812   {
813     if (x1 == x3) {
814       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x2, x4);
815       for (int i0 = 0; i0 != x0.size(); ++i0) {
816         for (int i4 = 0; i4 != x4.size(); ++i4) {
817           for (int i2 = 0; i2 != x2.size(); ++i2) {
818             for (int i3 = 0; i3 != x3.size(); ++i3) {
819               for (int i5 = 0; i5 != x5.size(); ++i5) {
820                 odata[i5+x5.size()*(i3+x3.size()*(i2+x2.size()*(i4+x4.size()*(i3+x1.size()*(i0)))))]
821                   += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i2+x2.size()*(i4)))];
822               }
823             }
824           }
825         }
826       }
827     }
828   }
829   {
830     if (x2 == x3 && x1 == x4) {
831       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
832       for (int i0 = 0; i0 != x0.size(); ++i0) {
833         for (int i4 = 0; i4 != x4.size(); ++i4) {
834           for (int i3 = 0; i3 != x3.size(); ++i3) {
835             for (int i5 = 0; i5 != x5.size(); ++i5) {
836               odata[i5+x5.size()*(i3+x3.size()*(i3+x2.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
837                 += (1.0) * i0data[i5+x5.size()*(i0)];
838             }
839           }
840         }
841       }
842     }
843   }
844   {
845     if (x1 == x4) {
846       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x2, x0);
847       for (int i0 = 0; i0 != x0.size(); ++i0) {
848         for (int i4 = 0; i4 != x4.size(); ++i4) {
849           for (int i2 = 0; i2 != x2.size(); ++i2) {
850             for (int i3 = 0; i3 != x3.size(); ++i3) {
851               for (int i5 = 0; i5 != x5.size(); ++i5) {
852                 odata[i5+x5.size()*(i3+x3.size()*(i2+x2.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
853                   += (1.0) * i0data[i5+x5.size()*(i3+x3.size()*(i2+x2.size()*(i0)))];
854               }
855             }
856           }
857         }
858       }
859     }
860   }
861   {
862     if (x2 == x3) {
863       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x0);
864       for (int i0 = 0; i0 != x0.size(); ++i0) {
865         for (int i1 = 0; i1 != x1.size(); ++i1) {
866           for (int i4 = 0; i4 != x4.size(); ++i4) {
867             for (int i3 = 0; i3 != x3.size(); ++i3) {
868               for (int i5 = 0; i5 != x5.size(); ++i5) {
869                 odata[i5+x5.size()*(i3+x3.size()*(i3+x2.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
870                   += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
871               }
872             }
873           }
874         }
875       }
876     }
877   }
878   {
879     if (x2 == x4) {
880       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x1, x0);
881       for (int i0 = 0; i0 != x0.size(); ++i0) {
882         for (int i1 = 0; i1 != x1.size(); ++i1) {
883           for (int i4 = 0; i4 != x4.size(); ++i4) {
884             for (int i3 = 0; i3 != x3.size(); ++i3) {
885               for (int i5 = 0; i5 != x5.size(); ++i5) {
886                 odata[i5+x5.size()*(i3+x3.size()*(i4+x2.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
887                   += (-2.0) * i0data[i5+x5.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
888               }
889             }
890           }
891         }
892       }
893     }
894   }
895   {
896     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x3, x2, x4, x1, x0);
897     sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x3.size(), x2.size(), x4.size(), x1.size(), x0.size());
898   }
899   out()->add_block(odata, x5, x3, x2, x4, x1, x0);
900 }
901 
compute()902 void Task7::Task_local::compute() {
903   const Index x7 = b(0);
904   const Index x6 = b(1);
905   const Index x2 = b(2);
906   const Index x5 = b(3);
907   const Index x1 = b(4);
908   const Index x0 = b(5);
909   const Index x4 = b(6);
910   const Index x3 = b(7);
911   // tensor label: Gamma94
912   std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x6, x2, x5, x1, x0)]);
913   std::fill_n(odata.get(), out()->get_size(x7, x6, x2, x5, x1, x0), 0.0);
914   // associated with merged
915   std::unique_ptr<double[]> fdata = in(4)->get_block(x4, x3);
916   if (x2 == x6 && x7 == x3 && x1 == x5) {
917     std::unique_ptr<double[]> i0data = in(0)->get_block(x4, x0);
918     for (int i0 = 0; i0 != x0.size(); ++i0) {
919       for (int i4 = 0; i4 != x4.size(); ++i4) {
920         for (int i6 = 0; i6 != x6.size(); ++i6) {
921           for (int i3 = 0; i3 != x3.size(); ++i3) {
922             for (int i5 = 0; i5 != x5.size(); ++i5) {
923               odata[i3+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i5+x1.size()*(i0)))))]
924                 += (-1.0) * i0data[i4+x4.size()*(i0)] * fdata[i4+x4.size()*(i3)];
925             }
926           }
927         }
928       }
929     }
930   }
931   if (x7 == x3 && x1 == x5) {
932     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x6, x2, x0);
933     for (int i0 = 0; i0 != x0.size(); ++i0) {
934       for (int i2 = 0; i2 != x2.size(); ++i2) {
935         for (int i6 = 0; i6 != x6.size(); ++i6) {
936           for (int i4 = 0; i4 != x4.size(); ++i4) {
937             for (int i3 = 0; i3 != x3.size(); ++i3) {
938               for (int i5 = 0; i5 != x5.size(); ++i5) {
939                 odata[i3+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i5+x1.size()*(i0)))))]
940                   += (-1.0) * i0data[i4+x4.size()*(i6+x6.size()*(i2+x2.size()*(i0)))] * fdata[i4+x4.size()*(i3)];
941               }
942             }
943           }
944         }
945       }
946     }
947   }
948   if (x7 == x3 && x2 == x5 && x1 == x6) {
949     std::unique_ptr<double[]> i0data = in(0)->get_block(x4, x0);
950     for (int i0 = 0; i0 != x0.size(); ++i0) {
951       for (int i4 = 0; i4 != x4.size(); ++i4) {
952         for (int i3 = 0; i3 != x3.size(); ++i3) {
953           for (int i5 = 0; i5 != x5.size(); ++i5) {
954             for (int i6 = 0; i6 != x6.size(); ++i6) {
955               odata[i3+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i6+x1.size()*(i0)))))]
956                 += (2.0) * i0data[i4+x4.size()*(i0)] * fdata[i4+x4.size()*(i3)];
957             }
958           }
959         }
960       }
961     }
962   }
963   if (x7 == x3 && x1 == x6) {
964     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x0, x2, x5);
965     for (int i5 = 0; i5 != x5.size(); ++i5) {
966       for (int i2 = 0; i2 != x2.size(); ++i2) {
967         for (int i0 = 0; i0 != x0.size(); ++i0) {
968           for (int i4 = 0; i4 != x4.size(); ++i4) {
969             for (int i3 = 0; i3 != x3.size(); ++i3) {
970               for (int i6 = 0; i6 != x6.size(); ++i6) {
971                 odata[i3+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i6+x1.size()*(i0)))))]
972                   += (-1.0) * i0data[i4+x4.size()*(i0+x0.size()*(i2+x2.size()*(i5)))] * fdata[i4+x4.size()*(i3)];
973               }
974             }
975           }
976         }
977       }
978     }
979   }
980   if (x7 == x3 && x2 == x5) {
981     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x6, x1, x0);
982     for (int i0 = 0; i0 != x0.size(); ++i0) {
983       for (int i1 = 0; i1 != x1.size(); ++i1) {
984         for (int i6 = 0; i6 != x6.size(); ++i6) {
985           for (int i4 = 0; i4 != x4.size(); ++i4) {
986             for (int i3 = 0; i3 != x3.size(); ++i3) {
987               for (int i5 = 0; i5 != x5.size(); ++i5) {
988                 odata[i3+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
989                   += (2.0) * i0data[i4+x4.size()*(i6+x6.size()*(i1+x1.size()*(i0)))] * fdata[i4+x4.size()*(i3)];
990               }
991             }
992           }
993         }
994       }
995     }
996   }
997   if (x7 == x3 && x2 == x6) {
998     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x5, x1, x0);
999     for (int i0 = 0; i0 != x0.size(); ++i0) {
1000       for (int i1 = 0; i1 != x1.size(); ++i1) {
1001         for (int i5 = 0; i5 != x5.size(); ++i5) {
1002           for (int i4 = 0; i4 != x4.size(); ++i4) {
1003             for (int i3 = 0; i3 != x3.size(); ++i3) {
1004               for (int i6 = 0; i6 != x6.size(); ++i6) {
1005                 odata[i3+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1006                   += (-1.0) * i0data[i4+x4.size()*(i5+x5.size()*(i1+x1.size()*(i0)))] * fdata[i4+x4.size()*(i3)];
1007               }
1008             }
1009           }
1010         }
1011       }
1012     }
1013   }
1014   if (x7 == x3) {
1015     std::unique_ptr<double[]> i0data = in(2)->get_block(x4, x6, x2, x5, x1, x0);
1016     for (int i0 = 0; i0 != x0.size(); ++i0) {
1017       for (int i1 = 0; i1 != x1.size(); ++i1) {
1018         for (int i5 = 0; i5 != x5.size(); ++i5) {
1019           for (int i2 = 0; i2 != x2.size(); ++i2) {
1020             for (int i6 = 0; i6 != x6.size(); ++i6) {
1021               for (int i4 = 0; i4 != x4.size(); ++i4) {
1022                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1023                   odata[i3+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1024                     += (-1.0) * i0data[i4+x4.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i4+x4.size()*(i3)];
1025                 }
1026               }
1027             }
1028           }
1029         }
1030       }
1031     }
1032   }
1033   if (x2 == x5 && x1 == x3 && x4 == x6) {
1034     std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
1035     for (int i0 = 0; i0 != x0.size(); ++i0) {
1036       for (int i7 = 0; i7 != x7.size(); ++i7) {
1037         for (int i5 = 0; i5 != x5.size(); ++i5) {
1038           for (int i3 = 0; i3 != x3.size(); ++i3) {
1039             for (int i6 = 0; i6 != x6.size(); ++i6) {
1040               odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1041                 += (-2.0) * i0data[i7+x7.size()*(i0)] * fdata[i6+x4.size()*(i3)];
1042             }
1043           }
1044         }
1045       }
1046     }
1047   }
1048   if (x2 == x6 && x1 == x3 && x4 == x5) {
1049     std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
1050     for (int i0 = 0; i0 != x0.size(); ++i0) {
1051       for (int i7 = 0; i7 != x7.size(); ++i7) {
1052         for (int i6 = 0; i6 != x6.size(); ++i6) {
1053           for (int i3 = 0; i3 != x3.size(); ++i3) {
1054             for (int i5 = 0; i5 != x5.size(); ++i5) {
1055               odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1056                 += (1.0) * i0data[i7+x7.size()*(i0)] * fdata[i5+x4.size()*(i3)];
1057             }
1058           }
1059         }
1060       }
1061     }
1062   }
1063   if (x1 == x3 && x4 == x5) {
1064     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x2, x0);
1065     for (int i0 = 0; i0 != x0.size(); ++i0) {
1066       for (int i2 = 0; i2 != x2.size(); ++i2) {
1067         for (int i6 = 0; i6 != x6.size(); ++i6) {
1068           for (int i7 = 0; i7 != x7.size(); ++i7) {
1069             for (int i3 = 0; i3 != x3.size(); ++i3) {
1070               for (int i5 = 0; i5 != x5.size(); ++i5) {
1071                 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1072                   += (1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i0)))] * fdata[i5+x4.size()*(i3)];
1073               }
1074             }
1075           }
1076         }
1077       }
1078     }
1079   }
1080   if (x1 == x3 && x4 == x6) {
1081     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x2, x5);
1082     for (int i5 = 0; i5 != x5.size(); ++i5) {
1083       for (int i2 = 0; i2 != x2.size(); ++i2) {
1084         for (int i0 = 0; i0 != x0.size(); ++i0) {
1085           for (int i7 = 0; i7 != x7.size(); ++i7) {
1086             for (int i3 = 0; i3 != x3.size(); ++i3) {
1087               for (int i6 = 0; i6 != x6.size(); ++i6) {
1088                 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1089                   += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i2+x2.size()*(i5)))] * fdata[i6+x4.size()*(i3)];
1090               }
1091             }
1092           }
1093         }
1094       }
1095     }
1096   }
1097   if (x4 == x6 && x2 == x3 && x1 == x5) {
1098     std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
1099     for (int i0 = 0; i0 != x0.size(); ++i0) {
1100       for (int i7 = 0; i7 != x7.size(); ++i7) {
1101         for (int i6 = 0; i6 != x6.size(); ++i6) {
1102           for (int i3 = 0; i3 != x3.size(); ++i3) {
1103             for (int i5 = 0; i5 != x5.size(); ++i5) {
1104               odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i5+x1.size()*(i0)))))]
1105                 += (1.0) * i0data[i7+x7.size()*(i0)] * fdata[i6+x4.size()*(i3)];
1106             }
1107           }
1108         }
1109       }
1110     }
1111   }
1112   if (x4 == x6 && x1 == x5) {
1113     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x3, x2, x0);
1114     for (int i0 = 0; i0 != x0.size(); ++i0) {
1115       for (int i2 = 0; i2 != x2.size(); ++i2) {
1116         for (int i3 = 0; i3 != x3.size(); ++i3) {
1117           for (int i7 = 0; i7 != x7.size(); ++i7) {
1118             for (int i6 = 0; i6 != x6.size(); ++i6) {
1119               for (int i5 = 0; i5 != x5.size(); ++i5) {
1120                 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i5+x1.size()*(i0)))))]
1121                   += (1.0) * i0data[i7+x7.size()*(i3+x3.size()*(i2+x2.size()*(i0)))] * fdata[i6+x4.size()*(i3)];
1122               }
1123             }
1124           }
1125         }
1126       }
1127     }
1128   }
1129   if (x4 == x5 && x2 == x3 && x1 == x6) {
1130     std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
1131     for (int i0 = 0; i0 != x0.size(); ++i0) {
1132       for (int i7 = 0; i7 != x7.size(); ++i7) {
1133         for (int i5 = 0; i5 != x5.size(); ++i5) {
1134           for (int i3 = 0; i3 != x3.size(); ++i3) {
1135             for (int i6 = 0; i6 != x6.size(); ++i6) {
1136               odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i6+x1.size()*(i0)))))]
1137                 += (-2.0) * i0data[i7+x7.size()*(i0)] * fdata[i5+x4.size()*(i3)];
1138             }
1139           }
1140         }
1141       }
1142     }
1143   }
1144   if (x4 == x5 && x1 == x6) {
1145     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x2, x3);
1146     for (int i3 = 0; i3 != x3.size(); ++i3) {
1147       for (int i2 = 0; i2 != x2.size(); ++i2) {
1148         for (int i0 = 0; i0 != x0.size(); ++i0) {
1149           for (int i7 = 0; i7 != x7.size(); ++i7) {
1150             for (int i5 = 0; i5 != x5.size(); ++i5) {
1151               for (int i6 = 0; i6 != x6.size(); ++i6) {
1152                 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i6+x1.size()*(i0)))))]
1153                   += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i2+x2.size()*(i3)))] * fdata[i5+x4.size()*(i3)];
1154               }
1155             }
1156           }
1157         }
1158       }
1159     }
1160   }
1161   if (x4 == x5 && x2 == x3) {
1162     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x1, x0);
1163     for (int i0 = 0; i0 != x0.size(); ++i0) {
1164       for (int i1 = 0; i1 != x1.size(); ++i1) {
1165         for (int i6 = 0; i6 != x6.size(); ++i6) {
1166           for (int i7 = 0; i7 != x7.size(); ++i7) {
1167             for (int i5 = 0; i5 != x5.size(); ++i5) {
1168               for (int i3 = 0; i3 != x3.size(); ++i3) {
1169                 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1170                   += (-2.0) * i0data[i7+x7.size()*(i6+x6.size()*(i1+x1.size()*(i0)))] * fdata[i5+x4.size()*(i3)];
1171               }
1172             }
1173           }
1174         }
1175       }
1176     }
1177   }
1178   if (x4 == x6 && x2 == x3) {
1179     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x5, x1, x0);
1180     for (int i0 = 0; i0 != x0.size(); ++i0) {
1181       for (int i1 = 0; i1 != x1.size(); ++i1) {
1182         for (int i5 = 0; i5 != x5.size(); ++i5) {
1183           for (int i7 = 0; i7 != x7.size(); ++i7) {
1184             for (int i6 = 0; i6 != x6.size(); ++i6) {
1185               for (int i3 = 0; i3 != x3.size(); ++i3) {
1186                 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1187                   += (1.0) * i0data[i7+x7.size()*(i5+x5.size()*(i1+x1.size()*(i0)))] * fdata[i6+x4.size()*(i3)];
1188               }
1189             }
1190           }
1191         }
1192       }
1193     }
1194   }
1195   if (x4 == x6 && x2 == x5) {
1196     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x3, x1, x0);
1197     for (int i0 = 0; i0 != x0.size(); ++i0) {
1198       for (int i1 = 0; i1 != x1.size(); ++i1) {
1199         for (int i3 = 0; i3 != x3.size(); ++i3) {
1200           for (int i7 = 0; i7 != x7.size(); ++i7) {
1201             for (int i6 = 0; i6 != x6.size(); ++i6) {
1202               for (int i5 = 0; i5 != x5.size(); ++i5) {
1203                 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1204                   += (-2.0) * i0data[i7+x7.size()*(i3+x3.size()*(i1+x1.size()*(i0)))] * fdata[i6+x4.size()*(i3)];
1205               }
1206             }
1207           }
1208         }
1209       }
1210     }
1211   }
1212   if (x4 == x5 && x2 == x6) {
1213     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x3, x1, x0);
1214     for (int i0 = 0; i0 != x0.size(); ++i0) {
1215       for (int i1 = 0; i1 != x1.size(); ++i1) {
1216         for (int i3 = 0; i3 != x3.size(); ++i3) {
1217           for (int i7 = 0; i7 != x7.size(); ++i7) {
1218             for (int i5 = 0; i5 != x5.size(); ++i5) {
1219               for (int i6 = 0; i6 != x6.size(); ++i6) {
1220                 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1221                   += (1.0) * i0data[i7+x7.size()*(i3+x3.size()*(i1+x1.size()*(i0)))] * fdata[i5+x4.size()*(i3)];
1222               }
1223             }
1224           }
1225         }
1226       }
1227     }
1228   }
1229   if (x4 == x5) {
1230     std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x2, x3, x1, x0);
1231     for (int i0 = 0; i0 != x0.size(); ++i0) {
1232       for (int i1 = 0; i1 != x1.size(); ++i1) {
1233         for (int i3 = 0; i3 != x3.size(); ++i3) {
1234           for (int i2 = 0; i2 != x2.size(); ++i2) {
1235             for (int i6 = 0; i6 != x6.size(); ++i6) {
1236               for (int i7 = 0; i7 != x7.size(); ++i7) {
1237                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1238                   odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1239                     += (1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i5+x4.size()*(i3)];
1240                 }
1241               }
1242             }
1243           }
1244         }
1245       }
1246     }
1247   }
1248   if (x4 == x6) {
1249     std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x3, x2, x5, x1, x0);
1250     for (int i0 = 0; i0 != x0.size(); ++i0) {
1251       for (int i1 = 0; i1 != x1.size(); ++i1) {
1252         for (int i5 = 0; i5 != x5.size(); ++i5) {
1253           for (int i2 = 0; i2 != x2.size(); ++i2) {
1254             for (int i3 = 0; i3 != x3.size(); ++i3) {
1255               for (int i7 = 0; i7 != x7.size(); ++i7) {
1256                 for (int i6 = 0; i6 != x6.size(); ++i6) {
1257                   odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1258                     += (1.0) * i0data[i7+x7.size()*(i3+x3.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x4.size()*(i3)];
1259                 }
1260               }
1261             }
1262           }
1263         }
1264       }
1265     }
1266   }
1267   out()->add_block(odata, x7, x6, x2, x5, x1, x0);
1268 }
1269 
compute()1270 void Task8::Task_local::compute() {
1271   const Index x9 = b(0);
1272   const Index x8 = b(1);
1273   const Index x2 = b(2);
1274   const Index x7 = b(3);
1275   const Index x1 = b(4);
1276   const Index x0 = b(5);
1277   const Index x6 = b(6);
1278   const Index x5 = b(7);
1279   const Index x4 = b(8);
1280   const Index x3 = b(9);
1281   // tensor label: Gamma95
1282   std::unique_ptr<double[]> odata(new double[out()->get_size(x9, x8, x2, x7, x1, x0)]);
1283   std::fill_n(odata.get(), out()->get_size(x9, x8, x2, x7, x1, x0), 0.0);
1284   // associated with merged
1285   std::unique_ptr<double[]> fdata = in(4)->get_block(x6, x5, x4, x3);
1286   if (x2 == x8 && x9 == x5 && x1 == x7) {
1287     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x4, x3);
1288     for (int i3 = 0; i3 != x3.size(); ++i3) {
1289       for (int i4 = 0; i4 != x4.size(); ++i4) {
1290         for (int i0 = 0; i0 != x0.size(); ++i0) {
1291           for (int i6 = 0; i6 != x6.size(); ++i6) {
1292             for (int i8 = 0; i8 != x8.size(); ++i8) {
1293               for (int i5 = 0; i5 != x5.size(); ++i5) {
1294                 for (int i7 = 0; i7 != x7.size(); ++i7) {
1295                   odata[i5+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
1296                     += (-1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i3)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1297                 }
1298               }
1299             }
1300           }
1301         }
1302       }
1303     }
1304   }
1305   if (x9 == x5 && x2 == x3 && x1 == x7) {
1306     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x8, x4, x0);
1307     for (int i0 = 0; i0 != x0.size(); ++i0) {
1308       for (int i4 = 0; i4 != x4.size(); ++i4) {
1309         for (int i8 = 0; i8 != x8.size(); ++i8) {
1310           for (int i6 = 0; i6 != x6.size(); ++i6) {
1311             for (int i5 = 0; i5 != x5.size(); ++i5) {
1312               for (int i3 = 0; i3 != x3.size(); ++i3) {
1313                 for (int i7 = 0; i7 != x7.size(); ++i7) {
1314                   odata[i5+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
1315                     += (-1.0) * i0data[i6+x6.size()*(i8+x8.size()*(i4+x4.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1316                 }
1317               }
1318             }
1319           }
1320         }
1321       }
1322     }
1323   }
1324   if (x9 == x3 && x2 == x5 && x1 == x7) {
1325     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x4, x8);
1326     for (int i8 = 0; i8 != x8.size(); ++i8) {
1327       for (int i4 = 0; i4 != x4.size(); ++i4) {
1328         for (int i0 = 0; i0 != x0.size(); ++i0) {
1329           for (int i6 = 0; i6 != x6.size(); ++i6) {
1330             for (int i3 = 0; i3 != x3.size(); ++i3) {
1331               for (int i5 = 0; i5 != x5.size(); ++i5) {
1332                 for (int i7 = 0; i7 != x7.size(); ++i7) {
1333                   odata[i3+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
1334                     += (-1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i8)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1335                 }
1336               }
1337             }
1338           }
1339         }
1340       }
1341     }
1342   }
1343   if (x9 == x5 && x1 == x7) {
1344     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x8, x4, x3, x2, x0);
1345     for (int i0 = 0; i0 != x0.size(); ++i0) {
1346       for (int i2 = 0; i2 != x2.size(); ++i2) {
1347         for (int i3 = 0; i3 != x3.size(); ++i3) {
1348           for (int i4 = 0; i4 != x4.size(); ++i4) {
1349             for (int i8 = 0; i8 != x8.size(); ++i8) {
1350               for (int i6 = 0; i6 != x6.size(); ++i6) {
1351                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1352                   for (int i7 = 0; i7 != x7.size(); ++i7) {
1353                     odata[i5+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
1354                       += (-1.0) * i0data[i6+x6.size()*(i8+x8.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1355                   }
1356                 }
1357               }
1358             }
1359           }
1360         }
1361       }
1362     }
1363   }
1364   if (x9 == x5 && x2 == x7 && x1 == x8) {
1365     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x4, x3);
1366     for (int i3 = 0; i3 != x3.size(); ++i3) {
1367       for (int i4 = 0; i4 != x4.size(); ++i4) {
1368         for (int i0 = 0; i0 != x0.size(); ++i0) {
1369           for (int i6 = 0; i6 != x6.size(); ++i6) {
1370             for (int i5 = 0; i5 != x5.size(); ++i5) {
1371               for (int i7 = 0; i7 != x7.size(); ++i7) {
1372                 for (int i8 = 0; i8 != x8.size(); ++i8) {
1373                   odata[i5+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
1374                     += (2.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i3)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1375                 }
1376               }
1377             }
1378           }
1379         }
1380       }
1381     }
1382   }
1383   if (x9 == x5 && x2 == x3 && x1 == x8) {
1384     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x4, x7);
1385     for (int i7 = 0; i7 != x7.size(); ++i7) {
1386       for (int i4 = 0; i4 != x4.size(); ++i4) {
1387         for (int i0 = 0; i0 != x0.size(); ++i0) {
1388           for (int i6 = 0; i6 != x6.size(); ++i6) {
1389             for (int i5 = 0; i5 != x5.size(); ++i5) {
1390               for (int i3 = 0; i3 != x3.size(); ++i3) {
1391                 for (int i8 = 0; i8 != x8.size(); ++i8) {
1392                   odata[i5+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
1393                     += (-1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i7)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1394                 }
1395               }
1396             }
1397           }
1398         }
1399       }
1400     }
1401   }
1402   if (x9 == x3 && x2 == x5 && x1 == x8) {
1403     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x7, x4, x0);
1404     for (int i0 = 0; i0 != x0.size(); ++i0) {
1405       for (int i4 = 0; i4 != x4.size(); ++i4) {
1406         for (int i7 = 0; i7 != x7.size(); ++i7) {
1407           for (int i6 = 0; i6 != x6.size(); ++i6) {
1408             for (int i3 = 0; i3 != x3.size(); ++i3) {
1409               for (int i5 = 0; i5 != x5.size(); ++i5) {
1410                 for (int i8 = 0; i8 != x8.size(); ++i8) {
1411                   odata[i3+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
1412                     += (-1.0) * i0data[i6+x6.size()*(i7+x7.size()*(i4+x4.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1413                 }
1414               }
1415             }
1416           }
1417         }
1418       }
1419     }
1420   }
1421   if (x9 == x5 && x1 == x8) {
1422     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x0, x4, x3, x2, x7);
1423     for (int i7 = 0; i7 != x7.size(); ++i7) {
1424       for (int i2 = 0; i2 != x2.size(); ++i2) {
1425         for (int i3 = 0; i3 != x3.size(); ++i3) {
1426           for (int i4 = 0; i4 != x4.size(); ++i4) {
1427             for (int i0 = 0; i0 != x0.size(); ++i0) {
1428               for (int i6 = 0; i6 != x6.size(); ++i6) {
1429                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1430                   for (int i8 = 0; i8 != x8.size(); ++i8) {
1431                     odata[i5+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
1432                       += (-1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i7)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1433                   }
1434                 }
1435               }
1436             }
1437           }
1438         }
1439       }
1440     }
1441   }
1442   if (x9 == x5 && x2 == x7 && x1 == x3) {
1443     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x8, x4, x0);
1444     for (int i0 = 0; i0 != x0.size(); ++i0) {
1445       for (int i4 = 0; i4 != x4.size(); ++i4) {
1446         for (int i8 = 0; i8 != x8.size(); ++i8) {
1447           for (int i6 = 0; i6 != x6.size(); ++i6) {
1448             for (int i5 = 0; i5 != x5.size(); ++i5) {
1449               for (int i7 = 0; i7 != x7.size(); ++i7) {
1450                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1451                   odata[i5+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
1452                     += (2.0) * i0data[i6+x6.size()*(i8+x8.size()*(i4+x4.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1453                 }
1454               }
1455             }
1456           }
1457         }
1458       }
1459     }
1460   }
1461   if (x9 == x5 && x2 == x8 && x1 == x3) {
1462     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x7, x4, x0);
1463     for (int i0 = 0; i0 != x0.size(); ++i0) {
1464       for (int i4 = 0; i4 != x4.size(); ++i4) {
1465         for (int i7 = 0; i7 != x7.size(); ++i7) {
1466           for (int i6 = 0; i6 != x6.size(); ++i6) {
1467             for (int i5 = 0; i5 != x5.size(); ++i5) {
1468               for (int i8 = 0; i8 != x8.size(); ++i8) {
1469                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1470                   odata[i5+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
1471                     += (-1.0) * i0data[i6+x6.size()*(i7+x7.size()*(i4+x4.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1472                 }
1473               }
1474             }
1475           }
1476         }
1477       }
1478     }
1479   }
1480   if (x9 == x5 && x1 == x3) {
1481     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x8, x4, x0, x2, x7);
1482     for (int i7 = 0; i7 != x7.size(); ++i7) {
1483       for (int i2 = 0; i2 != x2.size(); ++i2) {
1484         for (int i0 = 0; i0 != x0.size(); ++i0) {
1485           for (int i4 = 0; i4 != x4.size(); ++i4) {
1486             for (int i8 = 0; i8 != x8.size(); ++i8) {
1487               for (int i6 = 0; i6 != x6.size(); ++i6) {
1488                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1489                   for (int i3 = 0; i3 != x3.size(); ++i3) {
1490                     odata[i5+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
1491                       += (-1.0) * i0data[i6+x6.size()*(i8+x8.size()*(i4+x4.size()*(i0+x0.size()*(i2+x2.size()*(i7)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1492                   }
1493                 }
1494               }
1495             }
1496           }
1497         }
1498       }
1499     }
1500   }
1501   if (x9 == x3 && x2 == x7 && x1 == x5) {
1502     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x4, x8);
1503     for (int i8 = 0; i8 != x8.size(); ++i8) {
1504       for (int i4 = 0; i4 != x4.size(); ++i4) {
1505         for (int i0 = 0; i0 != x0.size(); ++i0) {
1506           for (int i6 = 0; i6 != x6.size(); ++i6) {
1507             for (int i3 = 0; i3 != x3.size(); ++i3) {
1508               for (int i7 = 0; i7 != x7.size(); ++i7) {
1509                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1510                   odata[i3+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
1511                     += (2.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i8)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1512                 }
1513               }
1514             }
1515           }
1516         }
1517       }
1518     }
1519   }
1520   if (x9 == x3 && x2 == x8 && x1 == x5) {
1521     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x4, x7);
1522     for (int i7 = 0; i7 != x7.size(); ++i7) {
1523       for (int i4 = 0; i4 != x4.size(); ++i4) {
1524         for (int i0 = 0; i0 != x0.size(); ++i0) {
1525           for (int i6 = 0; i6 != x6.size(); ++i6) {
1526             for (int i3 = 0; i3 != x3.size(); ++i3) {
1527               for (int i8 = 0; i8 != x8.size(); ++i8) {
1528                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1529                   odata[i3+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
1530                     += (-1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i7)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1531                 }
1532               }
1533             }
1534           }
1535         }
1536       }
1537     }
1538   }
1539   if (x9 == x3 && x1 == x5) {
1540     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x0, x4, x8, x2, x7);
1541     for (int i7 = 0; i7 != x7.size(); ++i7) {
1542       for (int i2 = 0; i2 != x2.size(); ++i2) {
1543         for (int i8 = 0; i8 != x8.size(); ++i8) {
1544           for (int i4 = 0; i4 != x4.size(); ++i4) {
1545             for (int i0 = 0; i0 != x0.size(); ++i0) {
1546               for (int i6 = 0; i6 != x6.size(); ++i6) {
1547                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1548                   for (int i5 = 0; i5 != x5.size(); ++i5) {
1549                     odata[i3+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
1550                       += (-1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i8+x8.size()*(i2+x2.size()*(i7)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1551                   }
1552                 }
1553               }
1554             }
1555           }
1556         }
1557       }
1558     }
1559   }
1560   if (x9 == x5 && x2 == x7) {
1561     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x8, x4, x3, x1, x0);
1562     for (int i0 = 0; i0 != x0.size(); ++i0) {
1563       for (int i1 = 0; i1 != x1.size(); ++i1) {
1564         for (int i3 = 0; i3 != x3.size(); ++i3) {
1565           for (int i4 = 0; i4 != x4.size(); ++i4) {
1566             for (int i8 = 0; i8 != x8.size(); ++i8) {
1567               for (int i6 = 0; i6 != x6.size(); ++i6) {
1568                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1569                   for (int i7 = 0; i7 != x7.size(); ++i7) {
1570                     odata[i5+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1571                       += (2.0) * i0data[i6+x6.size()*(i8+x8.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1572                   }
1573                 }
1574               }
1575             }
1576           }
1577         }
1578       }
1579     }
1580   }
1581   if (x9 == x5 && x2 == x8) {
1582     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x7, x4, x3, x1, x0);
1583     for (int i0 = 0; i0 != x0.size(); ++i0) {
1584       for (int i1 = 0; i1 != x1.size(); ++i1) {
1585         for (int i3 = 0; i3 != x3.size(); ++i3) {
1586           for (int i4 = 0; i4 != x4.size(); ++i4) {
1587             for (int i7 = 0; i7 != x7.size(); ++i7) {
1588               for (int i6 = 0; i6 != x6.size(); ++i6) {
1589                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1590                   for (int i8 = 0; i8 != x8.size(); ++i8) {
1591                     odata[i5+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1592                       += (-1.0) * i0data[i6+x6.size()*(i7+x7.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1593                   }
1594                 }
1595               }
1596             }
1597           }
1598         }
1599       }
1600     }
1601   }
1602   if (x9 == x5 && x2 == x3) {
1603     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x8, x4, x7, x1, x0);
1604     for (int i0 = 0; i0 != x0.size(); ++i0) {
1605       for (int i1 = 0; i1 != x1.size(); ++i1) {
1606         for (int i7 = 0; i7 != x7.size(); ++i7) {
1607           for (int i4 = 0; i4 != x4.size(); ++i4) {
1608             for (int i8 = 0; i8 != x8.size(); ++i8) {
1609               for (int i6 = 0; i6 != x6.size(); ++i6) {
1610                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1611                   for (int i3 = 0; i3 != x3.size(); ++i3) {
1612                     odata[i5+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1613                       += (-1.0) * i0data[i6+x6.size()*(i8+x8.size()*(i4+x4.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1614                   }
1615                 }
1616               }
1617             }
1618           }
1619         }
1620       }
1621     }
1622   }
1623   if (x9 == x3 && x2 == x5) {
1624     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x7, x4, x8, x1, x0);
1625     for (int i0 = 0; i0 != x0.size(); ++i0) {
1626       for (int i1 = 0; i1 != x1.size(); ++i1) {
1627         for (int i8 = 0; i8 != x8.size(); ++i8) {
1628           for (int i4 = 0; i4 != x4.size(); ++i4) {
1629             for (int i7 = 0; i7 != x7.size(); ++i7) {
1630               for (int i6 = 0; i6 != x6.size(); ++i6) {
1631                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1632                   for (int i5 = 0; i5 != x5.size(); ++i5) {
1633                     odata[i3+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1634                       += (-1.0) * i0data[i6+x6.size()*(i7+x7.size()*(i4+x4.size()*(i8+x8.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1635                   }
1636                 }
1637               }
1638             }
1639           }
1640         }
1641       }
1642     }
1643   }
1644   if (x9 == x5) {
1645     std::unique_ptr<double[]> i0data = in(3)->get_block(x6, x8, x4, x3, x2, x7, x1, x0);
1646     for (int i0 = 0; i0 != x0.size(); ++i0) {
1647       for (int i1 = 0; i1 != x1.size(); ++i1) {
1648         for (int i7 = 0; i7 != x7.size(); ++i7) {
1649           for (int i2 = 0; i2 != x2.size(); ++i2) {
1650             for (int i3 = 0; i3 != x3.size(); ++i3) {
1651               for (int i4 = 0; i4 != x4.size(); ++i4) {
1652                 for (int i8 = 0; i8 != x8.size(); ++i8) {
1653                   for (int i6 = 0; i6 != x6.size(); ++i6) {
1654                     for (int i5 = 0; i5 != x5.size(); ++i5) {
1655                       odata[i5+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1656                         += (-1.0) * i0data[i6+x6.size()*(i8+x8.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1657                     }
1658                   }
1659                 }
1660               }
1661             }
1662           }
1663         }
1664       }
1665     }
1666   }
1667   if (x9 == x3 && x2 == x8 && x1 == x7 && x4 == x5) {
1668     std::unique_ptr<double[]> i0data = in(0)->get_block(x6, x0);
1669     for (int i0 = 0; i0 != x0.size(); ++i0) {
1670       for (int i6 = 0; i6 != x6.size(); ++i6) {
1671         for (int i3 = 0; i3 != x3.size(); ++i3) {
1672           for (int i8 = 0; i8 != x8.size(); ++i8) {
1673             for (int i7 = 0; i7 != x7.size(); ++i7) {
1674               for (int i5 = 0; i5 != x5.size(); ++i5) {
1675                 odata[i3+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
1676                   += (-1.0) * i0data[i6+x6.size()*(i0)] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
1677               }
1678             }
1679           }
1680         }
1681       }
1682     }
1683   }
1684   if (x1 == x7 && x2 == x8 && x9 == x3) {
1685     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x5, x4, x0);
1686     for (int i0 = 0; i0 != x0.size(); ++i0) {
1687       for (int i4 = 0; i4 != x4.size(); ++i4) {
1688         for (int i5 = 0; i5 != x5.size(); ++i5) {
1689           for (int i6 = 0; i6 != x6.size(); ++i6) {
1690             for (int i7 = 0; i7 != x7.size(); ++i7) {
1691               for (int i8 = 0; i8 != x8.size(); ++i8) {
1692                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1693                   odata[i3+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
1694                     += (-1.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1695                 }
1696               }
1697             }
1698           }
1699         }
1700       }
1701     }
1702   }
1703   if (x4 == x5 && x9 == x3 && x1 == x7) {
1704     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x8, x2, x0);
1705     for (int i0 = 0; i0 != x0.size(); ++i0) {
1706       for (int i2 = 0; i2 != x2.size(); ++i2) {
1707         for (int i8 = 0; i8 != x8.size(); ++i8) {
1708           for (int i6 = 0; i6 != x6.size(); ++i6) {
1709             for (int i5 = 0; i5 != x5.size(); ++i5) {
1710               for (int i3 = 0; i3 != x3.size(); ++i3) {
1711                 for (int i7 = 0; i7 != x7.size(); ++i7) {
1712                   odata[i3+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
1713                     += (-1.0) * i0data[i6+x6.size()*(i8+x8.size()*(i2+x2.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
1714                 }
1715               }
1716             }
1717           }
1718         }
1719       }
1720     }
1721   }
1722   if (x9 == x3 && x1 == x7) {
1723     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x5, x4, x8, x2, x0);
1724     for (int i0 = 0; i0 != x0.size(); ++i0) {
1725       for (int i2 = 0; i2 != x2.size(); ++i2) {
1726         for (int i8 = 0; i8 != x8.size(); ++i8) {
1727           for (int i4 = 0; i4 != x4.size(); ++i4) {
1728             for (int i5 = 0; i5 != x5.size(); ++i5) {
1729               for (int i6 = 0; i6 != x6.size(); ++i6) {
1730                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1731                   for (int i7 = 0; i7 != x7.size(); ++i7) {
1732                     odata[i3+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
1733                       += (-1.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i8+x8.size()*(i2+x2.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1734                   }
1735                 }
1736               }
1737             }
1738           }
1739         }
1740       }
1741     }
1742   }
1743   if (x4 == x5 && x9 == x3 && x2 == x7 && x1 == x8) {
1744     std::unique_ptr<double[]> i0data = in(0)->get_block(x6, x0);
1745     for (int i0 = 0; i0 != x0.size(); ++i0) {
1746       for (int i6 = 0; i6 != x6.size(); ++i6) {
1747         for (int i5 = 0; i5 != x5.size(); ++i5) {
1748           for (int i3 = 0; i3 != x3.size(); ++i3) {
1749             for (int i7 = 0; i7 != x7.size(); ++i7) {
1750               for (int i8 = 0; i8 != x8.size(); ++i8) {
1751                 odata[i3+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
1752                   += (2.0) * i0data[i6+x6.size()*(i0)] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
1753               }
1754             }
1755           }
1756         }
1757       }
1758     }
1759   }
1760   if (x9 == x3 && x2 == x7 && x1 == x8) {
1761     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x5, x4, x0);
1762     for (int i0 = 0; i0 != x0.size(); ++i0) {
1763       for (int i4 = 0; i4 != x4.size(); ++i4) {
1764         for (int i5 = 0; i5 != x5.size(); ++i5) {
1765           for (int i6 = 0; i6 != x6.size(); ++i6) {
1766             for (int i3 = 0; i3 != x3.size(); ++i3) {
1767               for (int i7 = 0; i7 != x7.size(); ++i7) {
1768                 for (int i8 = 0; i8 != x8.size(); ++i8) {
1769                   odata[i3+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
1770                     += (2.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1771                 }
1772               }
1773             }
1774           }
1775         }
1776       }
1777     }
1778   }
1779   if (x4 == x5 && x9 == x3 && x1 == x8) {
1780     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x2, x7);
1781     for (int i7 = 0; i7 != x7.size(); ++i7) {
1782       for (int i2 = 0; i2 != x2.size(); ++i2) {
1783         for (int i0 = 0; i0 != x0.size(); ++i0) {
1784           for (int i6 = 0; i6 != x6.size(); ++i6) {
1785             for (int i5 = 0; i5 != x5.size(); ++i5) {
1786               for (int i3 = 0; i3 != x3.size(); ++i3) {
1787                 for (int i8 = 0; i8 != x8.size(); ++i8) {
1788                   odata[i3+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
1789                     += (-1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i2+x2.size()*(i7)))] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
1790                 }
1791               }
1792             }
1793           }
1794         }
1795       }
1796     }
1797   }
1798   if (x9 == x3 && x1 == x8) {
1799     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x5, x4, x0, x2, x7);
1800     for (int i7 = 0; i7 != x7.size(); ++i7) {
1801       for (int i2 = 0; i2 != x2.size(); ++i2) {
1802         for (int i0 = 0; i0 != x0.size(); ++i0) {
1803           for (int i4 = 0; i4 != x4.size(); ++i4) {
1804             for (int i5 = 0; i5 != x5.size(); ++i5) {
1805               for (int i6 = 0; i6 != x6.size(); ++i6) {
1806                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1807                   for (int i8 = 0; i8 != x8.size(); ++i8) {
1808                     odata[i3+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
1809                       += (-1.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i2+x2.size()*(i7)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1810                   }
1811                 }
1812               }
1813             }
1814           }
1815         }
1816       }
1817     }
1818   }
1819   if (x4 == x5 && x9 == x3 && x2 == x7) {
1820     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x8, x1, x0);
1821     for (int i0 = 0; i0 != x0.size(); ++i0) {
1822       for (int i1 = 0; i1 != x1.size(); ++i1) {
1823         for (int i8 = 0; i8 != x8.size(); ++i8) {
1824           for (int i6 = 0; i6 != x6.size(); ++i6) {
1825             for (int i5 = 0; i5 != x5.size(); ++i5) {
1826               for (int i3 = 0; i3 != x3.size(); ++i3) {
1827                 for (int i7 = 0; i7 != x7.size(); ++i7) {
1828                   odata[i3+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1829                     += (2.0) * i0data[i6+x6.size()*(i8+x8.size()*(i1+x1.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
1830                 }
1831               }
1832             }
1833           }
1834         }
1835       }
1836     }
1837   }
1838   if (x9 == x3 && x2 == x7) {
1839     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x5, x4, x8, x1, x0);
1840     for (int i0 = 0; i0 != x0.size(); ++i0) {
1841       for (int i1 = 0; i1 != x1.size(); ++i1) {
1842         for (int i8 = 0; i8 != x8.size(); ++i8) {
1843           for (int i4 = 0; i4 != x4.size(); ++i4) {
1844             for (int i5 = 0; i5 != x5.size(); ++i5) {
1845               for (int i6 = 0; i6 != x6.size(); ++i6) {
1846                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1847                   for (int i7 = 0; i7 != x7.size(); ++i7) {
1848                     odata[i3+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1849                       += (2.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i8+x8.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1850                   }
1851                 }
1852               }
1853             }
1854           }
1855         }
1856       }
1857     }
1858   }
1859   if (x4 == x5 && x9 == x3 && x2 == x8) {
1860     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x7, x1, x0);
1861     for (int i0 = 0; i0 != x0.size(); ++i0) {
1862       for (int i1 = 0; i1 != x1.size(); ++i1) {
1863         for (int i7 = 0; i7 != x7.size(); ++i7) {
1864           for (int i6 = 0; i6 != x6.size(); ++i6) {
1865             for (int i5 = 0; i5 != x5.size(); ++i5) {
1866               for (int i3 = 0; i3 != x3.size(); ++i3) {
1867                 for (int i8 = 0; i8 != x8.size(); ++i8) {
1868                   odata[i3+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1869                     += (-1.0) * i0data[i6+x6.size()*(i7+x7.size()*(i1+x1.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
1870                 }
1871               }
1872             }
1873           }
1874         }
1875       }
1876     }
1877   }
1878   if (x9 == x3 && x2 == x8) {
1879     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x5, x4, x7, x1, x0);
1880     for (int i0 = 0; i0 != x0.size(); ++i0) {
1881       for (int i1 = 0; i1 != x1.size(); ++i1) {
1882         for (int i7 = 0; i7 != x7.size(); ++i7) {
1883           for (int i4 = 0; i4 != x4.size(); ++i4) {
1884             for (int i5 = 0; i5 != x5.size(); ++i5) {
1885               for (int i6 = 0; i6 != x6.size(); ++i6) {
1886                 for (int i3 = 0; i3 != x3.size(); ++i3) {
1887                   for (int i8 = 0; i8 != x8.size(); ++i8) {
1888                     odata[i3+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1889                       += (-1.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1890                   }
1891                 }
1892               }
1893             }
1894           }
1895         }
1896       }
1897     }
1898   }
1899   if (x4 == x5 && x9 == x3) {
1900     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x8, x2, x7, x1, x0);
1901     for (int i0 = 0; i0 != x0.size(); ++i0) {
1902       for (int i1 = 0; i1 != x1.size(); ++i1) {
1903         for (int i7 = 0; i7 != x7.size(); ++i7) {
1904           for (int i2 = 0; i2 != x2.size(); ++i2) {
1905             for (int i8 = 0; i8 != x8.size(); ++i8) {
1906               for (int i6 = 0; i6 != x6.size(); ++i6) {
1907                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1908                   for (int i3 = 0; i3 != x3.size(); ++i3) {
1909                     odata[i3+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1910                       += (-1.0) * i0data[i6+x6.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
1911                   }
1912                 }
1913               }
1914             }
1915           }
1916         }
1917       }
1918     }
1919   }
1920   if (x9 == x3) {
1921     std::unique_ptr<double[]> i0data = in(3)->get_block(x6, x5, x4, x8, x2, x7, x1, x0);
1922     for (int i0 = 0; i0 != x0.size(); ++i0) {
1923       for (int i1 = 0; i1 != x1.size(); ++i1) {
1924         for (int i7 = 0; i7 != x7.size(); ++i7) {
1925           for (int i2 = 0; i2 != x2.size(); ++i2) {
1926             for (int i8 = 0; i8 != x8.size(); ++i8) {
1927               for (int i4 = 0; i4 != x4.size(); ++i4) {
1928                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1929                   for (int i6 = 0; i6 != x6.size(); ++i6) {
1930                     for (int i3 = 0; i3 != x3.size(); ++i3) {
1931                       odata[i3+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
1932                         += (-1.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
1933                     }
1934                   }
1935                 }
1936               }
1937             }
1938           }
1939         }
1940       }
1941     }
1942   }
1943   if (x1 == x3 && x2 == x7 && x4 == x8) {
1944     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x6, x5);
1945     for (int i5 = 0; i5 != x5.size(); ++i5) {
1946       for (int i6 = 0; i6 != x6.size(); ++i6) {
1947         for (int i0 = 0; i0 != x0.size(); ++i0) {
1948           for (int i9 = 0; i9 != x9.size(); ++i9) {
1949             for (int i3 = 0; i3 != x3.size(); ++i3) {
1950               for (int i7 = 0; i7 != x7.size(); ++i7) {
1951                 for (int i8 = 0; i8 != x8.size(); ++i8) {
1952                   odata[i9+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
1953                     += (-2.0) * i0data[i9+x9.size()*(i0+x0.size()*(i6+x6.size()*(i5)))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
1954                 }
1955               }
1956             }
1957           }
1958         }
1959       }
1960     }
1961   }
1962   if (x1 == x3 && x2 == x8 && x4 == x7) {
1963     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x6, x5);
1964     for (int i5 = 0; i5 != x5.size(); ++i5) {
1965       for (int i6 = 0; i6 != x6.size(); ++i6) {
1966         for (int i0 = 0; i0 != x0.size(); ++i0) {
1967           for (int i9 = 0; i9 != x9.size(); ++i9) {
1968             for (int i3 = 0; i3 != x3.size(); ++i3) {
1969               for (int i8 = 0; i8 != x8.size(); ++i8) {
1970                 for (int i7 = 0; i7 != x7.size(); ++i7) {
1971                   odata[i9+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
1972                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i6+x6.size()*(i5)))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
1973                 }
1974               }
1975             }
1976           }
1977         }
1978       }
1979     }
1980   }
1981   if (x2 == x7 && x4 == x8 && x1 == x5) {
1982     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x3, x6, x0);
1983     for (int i0 = 0; i0 != x0.size(); ++i0) {
1984       for (int i6 = 0; i6 != x6.size(); ++i6) {
1985         for (int i3 = 0; i3 != x3.size(); ++i3) {
1986           for (int i9 = 0; i9 != x9.size(); ++i9) {
1987             for (int i7 = 0; i7 != x7.size(); ++i7) {
1988               for (int i8 = 0; i8 != x8.size(); ++i8) {
1989                 for (int i5 = 0; i5 != x5.size(); ++i5) {
1990                   odata[i9+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
1991                     += (-2.0) * i0data[i9+x9.size()*(i3+x3.size()*(i6+x6.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
1992                 }
1993               }
1994             }
1995           }
1996         }
1997       }
1998     }
1999   }
2000   if (x2 == x8 && x4 == x7 && x1 == x5) {
2001     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x3, x6, x0);
2002     for (int i0 = 0; i0 != x0.size(); ++i0) {
2003       for (int i6 = 0; i6 != x6.size(); ++i6) {
2004         for (int i3 = 0; i3 != x3.size(); ++i3) {
2005           for (int i9 = 0; i9 != x9.size(); ++i9) {
2006             for (int i8 = 0; i8 != x8.size(); ++i8) {
2007               for (int i7 = 0; i7 != x7.size(); ++i7) {
2008                 for (int i5 = 0; i5 != x5.size(); ++i5) {
2009                   odata[i9+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2010                     += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i6+x6.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2011                 }
2012               }
2013             }
2014           }
2015         }
2016       }
2017     }
2018   }
2019   if (x1 == x7 && x4 == x8 && x2 == x3) {
2020     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x6, x5);
2021     for (int i5 = 0; i5 != x5.size(); ++i5) {
2022       for (int i6 = 0; i6 != x6.size(); ++i6) {
2023         for (int i0 = 0; i0 != x0.size(); ++i0) {
2024           for (int i9 = 0; i9 != x9.size(); ++i9) {
2025             for (int i7 = 0; i7 != x7.size(); ++i7) {
2026               for (int i8 = 0; i8 != x8.size(); ++i8) {
2027                 for (int i3 = 0; i3 != x3.size(); ++i3) {
2028                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
2029                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i6+x6.size()*(i5)))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2030                 }
2031               }
2032             }
2033           }
2034         }
2035       }
2036     }
2037   }
2038   if (x1 == x7 && x2 == x5 && x4 == x8) {
2039     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x3, x6, x0);
2040     for (int i0 = 0; i0 != x0.size(); ++i0) {
2041       for (int i6 = 0; i6 != x6.size(); ++i6) {
2042         for (int i3 = 0; i3 != x3.size(); ++i3) {
2043           for (int i9 = 0; i9 != x9.size(); ++i9) {
2044             for (int i7 = 0; i7 != x7.size(); ++i7) {
2045               for (int i5 = 0; i5 != x5.size(); ++i5) {
2046                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2047                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
2048                     += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i6+x6.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2049                 }
2050               }
2051             }
2052           }
2053         }
2054       }
2055     }
2056   }
2057   if (x1 == x7 && x4 == x8) {
2058     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x3, x6, x5, x2, x0);
2059     for (int i0 = 0; i0 != x0.size(); ++i0) {
2060       for (int i2 = 0; i2 != x2.size(); ++i2) {
2061         for (int i5 = 0; i5 != x5.size(); ++i5) {
2062           for (int i6 = 0; i6 != x6.size(); ++i6) {
2063             for (int i3 = 0; i3 != x3.size(); ++i3) {
2064               for (int i9 = 0; i9 != x9.size(); ++i9) {
2065                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2066                   for (int i8 = 0; i8 != x8.size(); ++i8) {
2067                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
2068                       += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2069                   }
2070                 }
2071               }
2072             }
2073           }
2074         }
2075       }
2076     }
2077   }
2078   if (x1 == x8 && x2 == x3 && x4 == x7) {
2079     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x6, x5);
2080     for (int i5 = 0; i5 != x5.size(); ++i5) {
2081       for (int i6 = 0; i6 != x6.size(); ++i6) {
2082         for (int i0 = 0; i0 != x0.size(); ++i0) {
2083           for (int i9 = 0; i9 != x9.size(); ++i9) {
2084             for (int i8 = 0; i8 != x8.size(); ++i8) {
2085               for (int i3 = 0; i3 != x3.size(); ++i3) {
2086                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2087                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
2088                     += (-2.0) * i0data[i9+x9.size()*(i0+x0.size()*(i6+x6.size()*(i5)))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2089                 }
2090               }
2091             }
2092           }
2093         }
2094       }
2095     }
2096   }
2097   if (x4 == x7 && x2 == x5 && x1 == x8) {
2098     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x6, x3);
2099     for (int i3 = 0; i3 != x3.size(); ++i3) {
2100       for (int i6 = 0; i6 != x6.size(); ++i6) {
2101         for (int i0 = 0; i0 != x0.size(); ++i0) {
2102           for (int i9 = 0; i9 != x9.size(); ++i9) {
2103             for (int i7 = 0; i7 != x7.size(); ++i7) {
2104               for (int i5 = 0; i5 != x5.size(); ++i5) {
2105                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2106                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
2107                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i6+x6.size()*(i3)))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2108                 }
2109               }
2110             }
2111           }
2112         }
2113       }
2114     }
2115   }
2116   if (x4 == x7 && x1 == x8) {
2117     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x0, x6, x5, x2, x3);
2118     for (int i3 = 0; i3 != x3.size(); ++i3) {
2119       for (int i2 = 0; i2 != x2.size(); ++i2) {
2120         for (int i5 = 0; i5 != x5.size(); ++i5) {
2121           for (int i6 = 0; i6 != x6.size(); ++i6) {
2122             for (int i0 = 0; i0 != x0.size(); ++i0) {
2123               for (int i9 = 0; i9 != x9.size(); ++i9) {
2124                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2125                   for (int i8 = 0; i8 != x8.size(); ++i8) {
2126                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
2127                       += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i3)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2128                   }
2129                 }
2130               }
2131             }
2132           }
2133         }
2134       }
2135     }
2136   }
2137   if (x4 == x8 && x2 == x7) {
2138     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x3, x6, x5, x1, x0);
2139     for (int i0 = 0; i0 != x0.size(); ++i0) {
2140       for (int i1 = 0; i1 != x1.size(); ++i1) {
2141         for (int i5 = 0; i5 != x5.size(); ++i5) {
2142           for (int i6 = 0; i6 != x6.size(); ++i6) {
2143             for (int i3 = 0; i3 != x3.size(); ++i3) {
2144               for (int i9 = 0; i9 != x9.size(); ++i9) {
2145                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2146                   for (int i7 = 0; i7 != x7.size(); ++i7) {
2147                     odata[i9+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
2148                       += (-2.0) * i0data[i9+x9.size()*(i3+x3.size()*(i6+x6.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2149                   }
2150                 }
2151               }
2152             }
2153           }
2154         }
2155       }
2156     }
2157   }
2158   if (x4 == x7 && x2 == x8) {
2159     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x3, x6, x5, x1, x0);
2160     for (int i0 = 0; i0 != x0.size(); ++i0) {
2161       for (int i1 = 0; i1 != x1.size(); ++i1) {
2162         for (int i5 = 0; i5 != x5.size(); ++i5) {
2163           for (int i6 = 0; i6 != x6.size(); ++i6) {
2164             for (int i3 = 0; i3 != x3.size(); ++i3) {
2165               for (int i9 = 0; i9 != x9.size(); ++i9) {
2166                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2167                   for (int i8 = 0; i8 != x8.size(); ++i8) {
2168                     odata[i9+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
2169                       += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i6+x6.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2170                   }
2171                 }
2172               }
2173             }
2174           }
2175         }
2176       }
2177     }
2178   }
2179   if (x6 == x8 && x2 == x5 && x4 == x7 && x1 == x3) {
2180     std::unique_ptr<double[]> i0data = in(0)->get_block(x9, x0);
2181     for (int i0 = 0; i0 != x0.size(); ++i0) {
2182       for (int i9 = 0; i9 != x9.size(); ++i9) {
2183         for (int i8 = 0; i8 != x8.size(); ++i8) {
2184           for (int i5 = 0; i5 != x5.size(); ++i5) {
2185             for (int i7 = 0; i7 != x7.size(); ++i7) {
2186               for (int i3 = 0; i3 != x3.size(); ++i3) {
2187                 odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2188                   += (1.0) * i0data[i9+x9.size()*(i0)] * fdata[i8+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2189               }
2190             }
2191           }
2192         }
2193       }
2194     }
2195   }
2196   if (x4 == x7 && x2 == x5 && x1 == x3) {
2197     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x8, x6, x0);
2198     for (int i0 = 0; i0 != x0.size(); ++i0) {
2199       for (int i6 = 0; i6 != x6.size(); ++i6) {
2200         for (int i8 = 0; i8 != x8.size(); ++i8) {
2201           for (int i9 = 0; i9 != x9.size(); ++i9) {
2202             for (int i7 = 0; i7 != x7.size(); ++i7) {
2203               for (int i5 = 0; i5 != x5.size(); ++i5) {
2204                 for (int i3 = 0; i3 != x3.size(); ++i3) {
2205                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2206                     += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i6+x6.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2207                 }
2208               }
2209             }
2210           }
2211         }
2212       }
2213     }
2214   }
2215   if (x2 == x5 && x1 == x3 && x6 == x7 && x4 == x8) {
2216     std::unique_ptr<double[]> i0data = in(0)->get_block(x9, x0);
2217     for (int i0 = 0; i0 != x0.size(); ++i0) {
2218       for (int i9 = 0; i9 != x9.size(); ++i9) {
2219         for (int i5 = 0; i5 != x5.size(); ++i5) {
2220           for (int i3 = 0; i3 != x3.size(); ++i3) {
2221             for (int i7 = 0; i7 != x7.size(); ++i7) {
2222               for (int i8 = 0; i8 != x8.size(); ++i8) {
2223                 odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2224                   += (-2.0) * i0data[i9+x9.size()*(i0)] * fdata[i7+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2225               }
2226             }
2227           }
2228         }
2229       }
2230     }
2231   }
2232   if (x1 == x3 && x2 == x5 && x4 == x8) {
2233     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x6, x7);
2234     for (int i7 = 0; i7 != x7.size(); ++i7) {
2235       for (int i6 = 0; i6 != x6.size(); ++i6) {
2236         for (int i0 = 0; i0 != x0.size(); ++i0) {
2237           for (int i9 = 0; i9 != x9.size(); ++i9) {
2238             for (int i3 = 0; i3 != x3.size(); ++i3) {
2239               for (int i5 = 0; i5 != x5.size(); ++i5) {
2240                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2241                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2242                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i6+x6.size()*(i7)))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2243                 }
2244               }
2245             }
2246           }
2247         }
2248       }
2249     }
2250   }
2251   if (x1 == x3 && x2 == x5 && x6 == x7) {
2252     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x8, x4, x0);
2253     for (int i0 = 0; i0 != x0.size(); ++i0) {
2254       for (int i4 = 0; i4 != x4.size(); ++i4) {
2255         for (int i8 = 0; i8 != x8.size(); ++i8) {
2256           for (int i9 = 0; i9 != x9.size(); ++i9) {
2257             for (int i3 = 0; i3 != x3.size(); ++i3) {
2258               for (int i5 = 0; i5 != x5.size(); ++i5) {
2259                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2260                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2261                     += (-2.0) * i0data[i9+x9.size()*(i8+x8.size()*(i4+x4.size()*(i0)))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2262                 }
2263               }
2264             }
2265           }
2266         }
2267       }
2268     }
2269   }
2270   if (x6 == x8 && x2 == x5 && x1 == x3) {
2271     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x7, x4, x0);
2272     for (int i0 = 0; i0 != x0.size(); ++i0) {
2273       for (int i4 = 0; i4 != x4.size(); ++i4) {
2274         for (int i7 = 0; i7 != x7.size(); ++i7) {
2275           for (int i9 = 0; i9 != x9.size(); ++i9) {
2276             for (int i8 = 0; i8 != x8.size(); ++i8) {
2277               for (int i5 = 0; i5 != x5.size(); ++i5) {
2278                 for (int i3 = 0; i3 != x3.size(); ++i3) {
2279                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2280                     += (1.0) * i0data[i9+x9.size()*(i7+x7.size()*(i4+x4.size()*(i0)))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2281                 }
2282               }
2283             }
2284           }
2285         }
2286       }
2287     }
2288   }
2289   if (x4 == x5 && x6 == x8 && x2 == x7 && x1 == x3) {
2290     std::unique_ptr<double[]> i0data = in(0)->get_block(x9, x0);
2291     for (int i0 = 0; i0 != x0.size(); ++i0) {
2292       for (int i9 = 0; i9 != x9.size(); ++i9) {
2293         for (int i5 = 0; i5 != x5.size(); ++i5) {
2294           for (int i8 = 0; i8 != x8.size(); ++i8) {
2295             for (int i7 = 0; i7 != x7.size(); ++i7) {
2296               for (int i3 = 0; i3 != x3.size(); ++i3) {
2297                 odata[i9+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2298                   += (-2.0) * i0data[i9+x9.size()*(i0)] * fdata[i8+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
2299               }
2300             }
2301           }
2302         }
2303       }
2304     }
2305   }
2306   if (x1 == x3 && x6 == x8 && x2 == x7) {
2307     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x5, x4, x0);
2308     for (int i0 = 0; i0 != x0.size(); ++i0) {
2309       for (int i4 = 0; i4 != x4.size(); ++i4) {
2310         for (int i5 = 0; i5 != x5.size(); ++i5) {
2311           for (int i9 = 0; i9 != x9.size(); ++i9) {
2312             for (int i3 = 0; i3 != x3.size(); ++i3) {
2313               for (int i8 = 0; i8 != x8.size(); ++i8) {
2314                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2315                   odata[i9+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2316                     += (-2.0) * i0data[i9+x9.size()*(i5+x5.size()*(i4+x4.size()*(i0)))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2317                 }
2318               }
2319             }
2320           }
2321         }
2322       }
2323     }
2324   }
2325   if (x2 == x8 && x1 == x3 && x6 == x7 && x4 == x5) {
2326     std::unique_ptr<double[]> i0data = in(0)->get_block(x9, x0);
2327     for (int i0 = 0; i0 != x0.size(); ++i0) {
2328       for (int i9 = 0; i9 != x9.size(); ++i9) {
2329         for (int i8 = 0; i8 != x8.size(); ++i8) {
2330           for (int i3 = 0; i3 != x3.size(); ++i3) {
2331             for (int i7 = 0; i7 != x7.size(); ++i7) {
2332               for (int i5 = 0; i5 != x5.size(); ++i5) {
2333                 odata[i9+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2334                   += (1.0) * i0data[i9+x9.size()*(i0)] * fdata[i7+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
2335               }
2336             }
2337           }
2338         }
2339       }
2340     }
2341   }
2342   if (x6 == x7 && x2 == x8 && x1 == x3) {
2343     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x5, x4, x0);
2344     for (int i0 = 0; i0 != x0.size(); ++i0) {
2345       for (int i4 = 0; i4 != x4.size(); ++i4) {
2346         for (int i5 = 0; i5 != x5.size(); ++i5) {
2347           for (int i9 = 0; i9 != x9.size(); ++i9) {
2348             for (int i7 = 0; i7 != x7.size(); ++i7) {
2349               for (int i8 = 0; i8 != x8.size(); ++i8) {
2350                 for (int i3 = 0; i3 != x3.size(); ++i3) {
2351                   odata[i9+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2352                     += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i4+x4.size()*(i0)))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2353                 }
2354               }
2355             }
2356           }
2357         }
2358       }
2359     }
2360   }
2361   if (x6 == x7 && x4 == x5 && x1 == x3) {
2362     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x8, x2, x0);
2363     for (int i0 = 0; i0 != x0.size(); ++i0) {
2364       for (int i2 = 0; i2 != x2.size(); ++i2) {
2365         for (int i8 = 0; i8 != x8.size(); ++i8) {
2366           for (int i9 = 0; i9 != x9.size(); ++i9) {
2367             for (int i7 = 0; i7 != x7.size(); ++i7) {
2368               for (int i5 = 0; i5 != x5.size(); ++i5) {
2369                 for (int i3 = 0; i3 != x3.size(); ++i3) {
2370                   odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2371                     += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i0)))] * fdata[i7+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
2372                 }
2373               }
2374             }
2375           }
2376         }
2377       }
2378     }
2379   }
2380   if (x6 == x8 && x4 == x5 && x1 == x3) {
2381     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x2, x7);
2382     for (int i7 = 0; i7 != x7.size(); ++i7) {
2383       for (int i2 = 0; i2 != x2.size(); ++i2) {
2384         for (int i0 = 0; i0 != x0.size(); ++i0) {
2385           for (int i9 = 0; i9 != x9.size(); ++i9) {
2386             for (int i8 = 0; i8 != x8.size(); ++i8) {
2387               for (int i5 = 0; i5 != x5.size(); ++i5) {
2388                 for (int i3 = 0; i3 != x3.size(); ++i3) {
2389                   odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2390                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i7)))] * fdata[i8+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
2391                 }
2392               }
2393             }
2394           }
2395         }
2396       }
2397     }
2398   }
2399   if (x6 == x8 && x4 == x7 && x1 == x3) {
2400     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x5, x2, x0);
2401     for (int i0 = 0; i0 != x0.size(); ++i0) {
2402       for (int i2 = 0; i2 != x2.size(); ++i2) {
2403         for (int i5 = 0; i5 != x5.size(); ++i5) {
2404           for (int i9 = 0; i9 != x9.size(); ++i9) {
2405             for (int i8 = 0; i8 != x8.size(); ++i8) {
2406               for (int i7 = 0; i7 != x7.size(); ++i7) {
2407                 for (int i3 = 0; i3 != x3.size(); ++i3) {
2408                   odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2409                     += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i2+x2.size()*(i0)))] * fdata[i8+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2410                 }
2411               }
2412             }
2413           }
2414         }
2415       }
2416     }
2417   }
2418   if (x4 == x7 && x1 == x3) {
2419     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x8, x6, x5, x2, x0);
2420     for (int i0 = 0; i0 != x0.size(); ++i0) {
2421       for (int i2 = 0; i2 != x2.size(); ++i2) {
2422         for (int i5 = 0; i5 != x5.size(); ++i5) {
2423           for (int i6 = 0; i6 != x6.size(); ++i6) {
2424             for (int i8 = 0; i8 != x8.size(); ++i8) {
2425               for (int i9 = 0; i9 != x9.size(); ++i9) {
2426                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2427                   for (int i3 = 0; i3 != x3.size(); ++i3) {
2428                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2429                       += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2430                   }
2431                 }
2432               }
2433             }
2434           }
2435         }
2436       }
2437     }
2438   }
2439   if (x6 == x7 && x4 == x8 && x1 == x3) {
2440     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x2, x5);
2441     for (int i5 = 0; i5 != x5.size(); ++i5) {
2442       for (int i2 = 0; i2 != x2.size(); ++i2) {
2443         for (int i0 = 0; i0 != x0.size(); ++i0) {
2444           for (int i9 = 0; i9 != x9.size(); ++i9) {
2445             for (int i7 = 0; i7 != x7.size(); ++i7) {
2446               for (int i8 = 0; i8 != x8.size(); ++i8) {
2447                 for (int i3 = 0; i3 != x3.size(); ++i3) {
2448                   odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2449                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i5)))] * fdata[i7+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2450                 }
2451               }
2452             }
2453           }
2454         }
2455       }
2456     }
2457   }
2458   if (x4 == x8 && x1 == x3) {
2459     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x0, x2, x7, x6, x5);
2460     for (int i5 = 0; i5 != x5.size(); ++i5) {
2461       for (int i6 = 0; i6 != x6.size(); ++i6) {
2462         for (int i7 = 0; i7 != x7.size(); ++i7) {
2463           for (int i2 = 0; i2 != x2.size(); ++i2) {
2464             for (int i0 = 0; i0 != x0.size(); ++i0) {
2465               for (int i9 = 0; i9 != x9.size(); ++i9) {
2466                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2467                   for (int i3 = 0; i3 != x3.size(); ++i3) {
2468                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2469                       += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i7+x7.size()*(i6+x6.size()*(i5)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2470                   }
2471                 }
2472               }
2473             }
2474           }
2475         }
2476       }
2477     }
2478   }
2479   if (x6 == x7 && x1 == x3) {
2480     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x8, x2, x5, x4, x0);
2481     for (int i0 = 0; i0 != x0.size(); ++i0) {
2482       for (int i4 = 0; i4 != x4.size(); ++i4) {
2483         for (int i5 = 0; i5 != x5.size(); ++i5) {
2484           for (int i2 = 0; i2 != x2.size(); ++i2) {
2485             for (int i8 = 0; i8 != x8.size(); ++i8) {
2486               for (int i9 = 0; i9 != x9.size(); ++i9) {
2487                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2488                   for (int i3 = 0; i3 != x3.size(); ++i3) {
2489                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2490                       += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i0)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2491                   }
2492                 }
2493               }
2494             }
2495           }
2496         }
2497       }
2498     }
2499   }
2500   if (x6 == x8 && x1 == x3) {
2501     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x5, x2, x7, x4, x0);
2502     for (int i0 = 0; i0 != x0.size(); ++i0) {
2503       for (int i4 = 0; i4 != x4.size(); ++i4) {
2504         for (int i7 = 0; i7 != x7.size(); ++i7) {
2505           for (int i2 = 0; i2 != x2.size(); ++i2) {
2506             for (int i5 = 0; i5 != x5.size(); ++i5) {
2507               for (int i9 = 0; i9 != x9.size(); ++i9) {
2508                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2509                   for (int i3 = 0; i3 != x3.size(); ++i3) {
2510                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i3+x1.size()*(i0)))))]
2511                       += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i2+x2.size()*(i7+x7.size()*(i4+x4.size()*(i0)))))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2512                   }
2513                 }
2514               }
2515             }
2516           }
2517         }
2518       }
2519     }
2520   }
2521   if (x6 == x8 && x4 == x7 && x2 == x3 && x1 == x5) {
2522     std::unique_ptr<double[]> i0data = in(0)->get_block(x9, x0);
2523     for (int i0 = 0; i0 != x0.size(); ++i0) {
2524       for (int i9 = 0; i9 != x9.size(); ++i9) {
2525         for (int i8 = 0; i8 != x8.size(); ++i8) {
2526           for (int i7 = 0; i7 != x7.size(); ++i7) {
2527             for (int i3 = 0; i3 != x3.size(); ++i3) {
2528               for (int i5 = 0; i5 != x5.size(); ++i5) {
2529                 odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2530                   += (-2.0) * i0data[i9+x9.size()*(i0)] * fdata[i8+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2531               }
2532             }
2533           }
2534         }
2535       }
2536     }
2537   }
2538   if (x4 == x7 && x2 == x3 && x1 == x5) {
2539     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x8, x6, x0);
2540     for (int i0 = 0; i0 != x0.size(); ++i0) {
2541       for (int i6 = 0; i6 != x6.size(); ++i6) {
2542         for (int i8 = 0; i8 != x8.size(); ++i8) {
2543           for (int i9 = 0; i9 != x9.size(); ++i9) {
2544             for (int i7 = 0; i7 != x7.size(); ++i7) {
2545               for (int i3 = 0; i3 != x3.size(); ++i3) {
2546                 for (int i5 = 0; i5 != x5.size(); ++i5) {
2547                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2548                     += (-2.0) * i0data[i9+x9.size()*(i8+x8.size()*(i6+x6.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2549                 }
2550               }
2551             }
2552           }
2553         }
2554       }
2555     }
2556   }
2557   if (x6 == x7 && x4 == x8 && x2 == x3 && x1 == x5) {
2558     std::unique_ptr<double[]> i0data = in(0)->get_block(x9, x0);
2559     for (int i0 = 0; i0 != x0.size(); ++i0) {
2560       for (int i9 = 0; i9 != x9.size(); ++i9) {
2561         for (int i7 = 0; i7 != x7.size(); ++i7) {
2562           for (int i8 = 0; i8 != x8.size(); ++i8) {
2563             for (int i3 = 0; i3 != x3.size(); ++i3) {
2564               for (int i5 = 0; i5 != x5.size(); ++i5) {
2565                 odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2566                   += (1.0) * i0data[i9+x9.size()*(i0)] * fdata[i7+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2567               }
2568             }
2569           }
2570         }
2571       }
2572     }
2573   }
2574   if (x4 == x8 && x2 == x3 && x1 == x5) {
2575     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x7, x6, x0);
2576     for (int i0 = 0; i0 != x0.size(); ++i0) {
2577       for (int i6 = 0; i6 != x6.size(); ++i6) {
2578         for (int i7 = 0; i7 != x7.size(); ++i7) {
2579           for (int i9 = 0; i9 != x9.size(); ++i9) {
2580             for (int i8 = 0; i8 != x8.size(); ++i8) {
2581               for (int i3 = 0; i3 != x3.size(); ++i3) {
2582                 for (int i5 = 0; i5 != x5.size(); ++i5) {
2583                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2584                     += (1.0) * i0data[i9+x9.size()*(i7+x7.size()*(i6+x6.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2585                 }
2586               }
2587             }
2588           }
2589         }
2590       }
2591     }
2592   }
2593   if (x6 == x7 && x2 == x3 && x1 == x5) {
2594     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x8, x4, x0);
2595     for (int i0 = 0; i0 != x0.size(); ++i0) {
2596       for (int i4 = 0; i4 != x4.size(); ++i4) {
2597         for (int i8 = 0; i8 != x8.size(); ++i8) {
2598           for (int i9 = 0; i9 != x9.size(); ++i9) {
2599             for (int i7 = 0; i7 != x7.size(); ++i7) {
2600               for (int i3 = 0; i3 != x3.size(); ++i3) {
2601                 for (int i5 = 0; i5 != x5.size(); ++i5) {
2602                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2603                     += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i4+x4.size()*(i0)))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2604                 }
2605               }
2606             }
2607           }
2608         }
2609       }
2610     }
2611   }
2612   if (x6 == x8 && x2 == x3 && x1 == x5) {
2613     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x4, x7);
2614     for (int i7 = 0; i7 != x7.size(); ++i7) {
2615       for (int i4 = 0; i4 != x4.size(); ++i4) {
2616         for (int i0 = 0; i0 != x0.size(); ++i0) {
2617           for (int i9 = 0; i9 != x9.size(); ++i9) {
2618             for (int i8 = 0; i8 != x8.size(); ++i8) {
2619               for (int i3 = 0; i3 != x3.size(); ++i3) {
2620                 for (int i5 = 0; i5 != x5.size(); ++i5) {
2621                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2622                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i4+x4.size()*(i7)))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2623                 }
2624               }
2625             }
2626           }
2627         }
2628       }
2629     }
2630   }
2631   if (x6 == x8 && x2 == x7 && x1 == x5) {
2632     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x4, x3);
2633     for (int i3 = 0; i3 != x3.size(); ++i3) {
2634       for (int i4 = 0; i4 != x4.size(); ++i4) {
2635         for (int i0 = 0; i0 != x0.size(); ++i0) {
2636           for (int i9 = 0; i9 != x9.size(); ++i9) {
2637             for (int i8 = 0; i8 != x8.size(); ++i8) {
2638               for (int i7 = 0; i7 != x7.size(); ++i7) {
2639                 for (int i5 = 0; i5 != x5.size(); ++i5) {
2640                   odata[i9+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2641                     += (-2.0) * i0data[i9+x9.size()*(i0+x0.size()*(i4+x4.size()*(i3)))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2642                 }
2643               }
2644             }
2645           }
2646         }
2647       }
2648     }
2649   }
2650   if (x6 == x7 && x2 == x8 && x1 == x5) {
2651     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x4, x3);
2652     for (int i3 = 0; i3 != x3.size(); ++i3) {
2653       for (int i4 = 0; i4 != x4.size(); ++i4) {
2654         for (int i0 = 0; i0 != x0.size(); ++i0) {
2655           for (int i9 = 0; i9 != x9.size(); ++i9) {
2656             for (int i7 = 0; i7 != x7.size(); ++i7) {
2657               for (int i8 = 0; i8 != x8.size(); ++i8) {
2658                 for (int i5 = 0; i5 != x5.size(); ++i5) {
2659                   odata[i9+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2660                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i4+x4.size()*(i3)))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2661                 }
2662               }
2663             }
2664           }
2665         }
2666       }
2667     }
2668   }
2669   if (x6 == x8 && x4 == x7 && x1 == x5) {
2670     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x2, x3);
2671     for (int i3 = 0; i3 != x3.size(); ++i3) {
2672       for (int i2 = 0; i2 != x2.size(); ++i2) {
2673         for (int i0 = 0; i0 != x0.size(); ++i0) {
2674           for (int i9 = 0; i9 != x9.size(); ++i9) {
2675             for (int i8 = 0; i8 != x8.size(); ++i8) {
2676               for (int i7 = 0; i7 != x7.size(); ++i7) {
2677                 for (int i5 = 0; i5 != x5.size(); ++i5) {
2678                   odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2679                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i3)))] * fdata[i8+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2680                 }
2681               }
2682             }
2683           }
2684         }
2685       }
2686     }
2687   }
2688   if (x4 == x7 && x1 == x5) {
2689     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x8, x6, x0, x2, x3);
2690     for (int i3 = 0; i3 != x3.size(); ++i3) {
2691       for (int i2 = 0; i2 != x2.size(); ++i2) {
2692         for (int i0 = 0; i0 != x0.size(); ++i0) {
2693           for (int i6 = 0; i6 != x6.size(); ++i6) {
2694             for (int i8 = 0; i8 != x8.size(); ++i8) {
2695               for (int i9 = 0; i9 != x9.size(); ++i9) {
2696                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2697                   for (int i5 = 0; i5 != x5.size(); ++i5) {
2698                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2699                       += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i6+x6.size()*(i0+x0.size()*(i2+x2.size()*(i3)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
2700                   }
2701                 }
2702               }
2703             }
2704           }
2705         }
2706       }
2707     }
2708   }
2709   if (x6 == x7 && x4 == x8 && x1 == x5) {
2710     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x3, x2, x0);
2711     for (int i0 = 0; i0 != x0.size(); ++i0) {
2712       for (int i2 = 0; i2 != x2.size(); ++i2) {
2713         for (int i3 = 0; i3 != x3.size(); ++i3) {
2714           for (int i9 = 0; i9 != x9.size(); ++i9) {
2715             for (int i7 = 0; i7 != x7.size(); ++i7) {
2716               for (int i8 = 0; i8 != x8.size(); ++i8) {
2717                 for (int i5 = 0; i5 != x5.size(); ++i5) {
2718                   odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2719                     += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i2+x2.size()*(i0)))] * fdata[i7+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2720                 }
2721               }
2722             }
2723           }
2724         }
2725       }
2726     }
2727   }
2728   if (x4 == x8 && x1 == x5) {
2729     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x3, x2, x7, x6, x0);
2730     for (int i0 = 0; i0 != x0.size(); ++i0) {
2731       for (int i6 = 0; i6 != x6.size(); ++i6) {
2732         for (int i7 = 0; i7 != x7.size(); ++i7) {
2733           for (int i2 = 0; i2 != x2.size(); ++i2) {
2734             for (int i3 = 0; i3 != x3.size(); ++i3) {
2735               for (int i9 = 0; i9 != x9.size(); ++i9) {
2736                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2737                   for (int i5 = 0; i5 != x5.size(); ++i5) {
2738                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2739                       += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i2+x2.size()*(i7+x7.size()*(i6+x6.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
2740                   }
2741                 }
2742               }
2743             }
2744           }
2745         }
2746       }
2747     }
2748   }
2749   if (x6 == x7 && x1 == x5) {
2750     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x8, x4, x3, x2, x0);
2751     for (int i0 = 0; i0 != x0.size(); ++i0) {
2752       for (int i2 = 0; i2 != x2.size(); ++i2) {
2753         for (int i3 = 0; i3 != x3.size(); ++i3) {
2754           for (int i4 = 0; i4 != x4.size(); ++i4) {
2755             for (int i8 = 0; i8 != x8.size(); ++i8) {
2756               for (int i9 = 0; i9 != x9.size(); ++i9) {
2757                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2758                   for (int i5 = 0; i5 != x5.size(); ++i5) {
2759                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2760                       += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i0)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2761                   }
2762                 }
2763               }
2764             }
2765           }
2766         }
2767       }
2768     }
2769   }
2770   if (x6 == x8 && x1 == x5) {
2771     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x0, x2, x7, x4, x3);
2772     for (int i3 = 0; i3 != x3.size(); ++i3) {
2773       for (int i4 = 0; i4 != x4.size(); ++i4) {
2774         for (int i7 = 0; i7 != x7.size(); ++i7) {
2775           for (int i2 = 0; i2 != x2.size(); ++i2) {
2776             for (int i0 = 0; i0 != x0.size(); ++i0) {
2777               for (int i9 = 0; i9 != x9.size(); ++i9) {
2778                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2779                   for (int i5 = 0; i5 != x5.size(); ++i5) {
2780                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i5+x1.size()*(i0)))))]
2781                       += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i7+x7.size()*(i4+x4.size()*(i3)))))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2782                   }
2783                 }
2784               }
2785             }
2786           }
2787         }
2788       }
2789     }
2790   }
2791   if (x6 == x8 && x4 == x5 && x2 == x3 && x1 == x7) {
2792     std::unique_ptr<double[]> i0data = in(0)->get_block(x9, x0);
2793     for (int i0 = 0; i0 != x0.size(); ++i0) {
2794       for (int i9 = 0; i9 != x9.size(); ++i9) {
2795         for (int i8 = 0; i8 != x8.size(); ++i8) {
2796           for (int i5 = 0; i5 != x5.size(); ++i5) {
2797             for (int i3 = 0; i3 != x3.size(); ++i3) {
2798               for (int i7 = 0; i7 != x7.size(); ++i7) {
2799                 odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
2800                   += (1.0) * i0data[i9+x9.size()*(i0)] * fdata[i8+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
2801               }
2802             }
2803           }
2804         }
2805       }
2806     }
2807   }
2808   if (x6 == x8 && x2 == x3 && x1 == x7) {
2809     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x5, x4, x0);
2810     for (int i0 = 0; i0 != x0.size(); ++i0) {
2811       for (int i4 = 0; i4 != x4.size(); ++i4) {
2812         for (int i5 = 0; i5 != x5.size(); ++i5) {
2813           for (int i9 = 0; i9 != x9.size(); ++i9) {
2814             for (int i8 = 0; i8 != x8.size(); ++i8) {
2815               for (int i3 = 0; i3 != x3.size(); ++i3) {
2816                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2817                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
2818                     += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i4+x4.size()*(i0)))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2819                 }
2820               }
2821             }
2822           }
2823         }
2824       }
2825     }
2826   }
2827   if (x6 == x8 && x2 == x5 && x1 == x7) {
2828     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x4, x3);
2829     for (int i3 = 0; i3 != x3.size(); ++i3) {
2830       for (int i4 = 0; i4 != x4.size(); ++i4) {
2831         for (int i0 = 0; i0 != x0.size(); ++i0) {
2832           for (int i9 = 0; i9 != x9.size(); ++i9) {
2833             for (int i8 = 0; i8 != x8.size(); ++i8) {
2834               for (int i5 = 0; i5 != x5.size(); ++i5) {
2835                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2836                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
2837                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i4+x4.size()*(i3)))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2838                 }
2839               }
2840             }
2841           }
2842         }
2843       }
2844     }
2845   }
2846   if (x6 == x8 && x4 == x5 && x1 == x7) {
2847     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x3, x2, x0);
2848     for (int i0 = 0; i0 != x0.size(); ++i0) {
2849       for (int i2 = 0; i2 != x2.size(); ++i2) {
2850         for (int i3 = 0; i3 != x3.size(); ++i3) {
2851           for (int i9 = 0; i9 != x9.size(); ++i9) {
2852             for (int i8 = 0; i8 != x8.size(); ++i8) {
2853               for (int i5 = 0; i5 != x5.size(); ++i5) {
2854                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2855                   odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
2856                     += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i2+x2.size()*(i0)))] * fdata[i8+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
2857                 }
2858               }
2859             }
2860           }
2861         }
2862       }
2863     }
2864   }
2865   if (x6 == x8 && x1 == x7) {
2866     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x5, x4, x3, x2, x0);
2867     for (int i0 = 0; i0 != x0.size(); ++i0) {
2868       for (int i2 = 0; i2 != x2.size(); ++i2) {
2869         for (int i3 = 0; i3 != x3.size(); ++i3) {
2870           for (int i4 = 0; i4 != x4.size(); ++i4) {
2871             for (int i5 = 0; i5 != x5.size(); ++i5) {
2872               for (int i9 = 0; i9 != x9.size(); ++i9) {
2873                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2874                   for (int i7 = 0; i7 != x7.size(); ++i7) {
2875                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i7+x1.size()*(i0)))))]
2876                       += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i0)))))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2877                   }
2878                 }
2879               }
2880             }
2881           }
2882         }
2883       }
2884     }
2885   }
2886   if (x6 == x7 && x4 == x5 && x2 == x3 && x1 == x8) {
2887     std::unique_ptr<double[]> i0data = in(0)->get_block(x9, x0);
2888     for (int i0 = 0; i0 != x0.size(); ++i0) {
2889       for (int i9 = 0; i9 != x9.size(); ++i9) {
2890         for (int i7 = 0; i7 != x7.size(); ++i7) {
2891           for (int i5 = 0; i5 != x5.size(); ++i5) {
2892             for (int i3 = 0; i3 != x3.size(); ++i3) {
2893               for (int i8 = 0; i8 != x8.size(); ++i8) {
2894                 odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
2895                   += (-2.0) * i0data[i9+x9.size()*(i0)] * fdata[i7+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
2896               }
2897             }
2898           }
2899         }
2900       }
2901     }
2902   }
2903   if (x6 == x7 && x2 == x3 && x1 == x8) {
2904     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x4, x5);
2905     for (int i5 = 0; i5 != x5.size(); ++i5) {
2906       for (int i4 = 0; i4 != x4.size(); ++i4) {
2907         for (int i0 = 0; i0 != x0.size(); ++i0) {
2908           for (int i9 = 0; i9 != x9.size(); ++i9) {
2909             for (int i7 = 0; i7 != x7.size(); ++i7) {
2910               for (int i3 = 0; i3 != x3.size(); ++i3) {
2911                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2912                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
2913                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i4+x4.size()*(i5)))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2914                 }
2915               }
2916             }
2917           }
2918         }
2919       }
2920     }
2921   }
2922   if (x6 == x7 && x2 == x5 && x1 == x8) {
2923     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x4, x3);
2924     for (int i3 = 0; i3 != x3.size(); ++i3) {
2925       for (int i4 = 0; i4 != x4.size(); ++i4) {
2926         for (int i0 = 0; i0 != x0.size(); ++i0) {
2927           for (int i9 = 0; i9 != x9.size(); ++i9) {
2928             for (int i7 = 0; i7 != x7.size(); ++i7) {
2929               for (int i5 = 0; i5 != x5.size(); ++i5) {
2930                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2931                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
2932                     += (-2.0) * i0data[i9+x9.size()*(i0+x0.size()*(i4+x4.size()*(i3)))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2933                 }
2934               }
2935             }
2936           }
2937         }
2938       }
2939     }
2940   }
2941   if (x6 == x7 && x4 == x5 && x1 == x8) {
2942     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x2, x3);
2943     for (int i3 = 0; i3 != x3.size(); ++i3) {
2944       for (int i2 = 0; i2 != x2.size(); ++i2) {
2945         for (int i0 = 0; i0 != x0.size(); ++i0) {
2946           for (int i9 = 0; i9 != x9.size(); ++i9) {
2947             for (int i7 = 0; i7 != x7.size(); ++i7) {
2948               for (int i5 = 0; i5 != x5.size(); ++i5) {
2949                 for (int i8 = 0; i8 != x8.size(); ++i8) {
2950                   odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
2951                     += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i3)))] * fdata[i7+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
2952                 }
2953               }
2954             }
2955           }
2956         }
2957       }
2958     }
2959   }
2960   if (x6 == x7 && x1 == x8) {
2961     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x0, x2, x5, x4, x3);
2962     for (int i3 = 0; i3 != x3.size(); ++i3) {
2963       for (int i4 = 0; i4 != x4.size(); ++i4) {
2964         for (int i5 = 0; i5 != x5.size(); ++i5) {
2965           for (int i2 = 0; i2 != x2.size(); ++i2) {
2966             for (int i0 = 0; i0 != x0.size(); ++i0) {
2967               for (int i9 = 0; i9 != x9.size(); ++i9) {
2968                 for (int i7 = 0; i7 != x7.size(); ++i7) {
2969                   for (int i8 = 0; i8 != x8.size(); ++i8) {
2970                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i8+x1.size()*(i0)))))]
2971                       += (1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
2972                   }
2973                 }
2974               }
2975             }
2976           }
2977         }
2978       }
2979     }
2980   }
2981   if (x6 == x7 && x4 == x5 && x2 == x3) {
2982     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x8, x1, x0);
2983     for (int i0 = 0; i0 != x0.size(); ++i0) {
2984       for (int i1 = 0; i1 != x1.size(); ++i1) {
2985         for (int i8 = 0; i8 != x8.size(); ++i8) {
2986           for (int i9 = 0; i9 != x9.size(); ++i9) {
2987             for (int i7 = 0; i7 != x7.size(); ++i7) {
2988               for (int i5 = 0; i5 != x5.size(); ++i5) {
2989                 for (int i3 = 0; i3 != x3.size(); ++i3) {
2990                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
2991                     += (-2.0) * i0data[i9+x9.size()*(i8+x8.size()*(i1+x1.size()*(i0)))] * fdata[i7+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
2992                 }
2993               }
2994             }
2995           }
2996         }
2997       }
2998     }
2999   }
3000   if (x6 == x8 && x4 == x5 && x2 == x3) {
3001     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x7, x1, x0);
3002     for (int i0 = 0; i0 != x0.size(); ++i0) {
3003       for (int i1 = 0; i1 != x1.size(); ++i1) {
3004         for (int i7 = 0; i7 != x7.size(); ++i7) {
3005           for (int i9 = 0; i9 != x9.size(); ++i9) {
3006             for (int i8 = 0; i8 != x8.size(); ++i8) {
3007               for (int i5 = 0; i5 != x5.size(); ++i5) {
3008                 for (int i3 = 0; i3 != x3.size(); ++i3) {
3009                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3010                     += (1.0) * i0data[i9+x9.size()*(i7+x7.size()*(i1+x1.size()*(i0)))] * fdata[i8+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
3011                 }
3012               }
3013             }
3014           }
3015         }
3016       }
3017     }
3018   }
3019   if (x6 == x8 && x4 == x7 && x2 == x3) {
3020     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x5, x1, x0);
3021     for (int i0 = 0; i0 != x0.size(); ++i0) {
3022       for (int i1 = 0; i1 != x1.size(); ++i1) {
3023         for (int i5 = 0; i5 != x5.size(); ++i5) {
3024           for (int i9 = 0; i9 != x9.size(); ++i9) {
3025             for (int i8 = 0; i8 != x8.size(); ++i8) {
3026               for (int i7 = 0; i7 != x7.size(); ++i7) {
3027                 for (int i3 = 0; i3 != x3.size(); ++i3) {
3028                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3029                     += (-2.0) * i0data[i9+x9.size()*(i5+x5.size()*(i1+x1.size()*(i0)))] * fdata[i8+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
3030                 }
3031               }
3032             }
3033           }
3034         }
3035       }
3036     }
3037   }
3038   if (x4 == x7 && x2 == x3) {
3039     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x8, x6, x5, x1, x0);
3040     for (int i0 = 0; i0 != x0.size(); ++i0) {
3041       for (int i1 = 0; i1 != x1.size(); ++i1) {
3042         for (int i5 = 0; i5 != x5.size(); ++i5) {
3043           for (int i6 = 0; i6 != x6.size(); ++i6) {
3044             for (int i8 = 0; i8 != x8.size(); ++i8) {
3045               for (int i9 = 0; i9 != x9.size(); ++i9) {
3046                 for (int i7 = 0; i7 != x7.size(); ++i7) {
3047                   for (int i3 = 0; i3 != x3.size(); ++i3) {
3048                     odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3049                       += (-2.0) * i0data[i9+x9.size()*(i8+x8.size()*(i6+x6.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
3050                   }
3051                 }
3052               }
3053             }
3054           }
3055         }
3056       }
3057     }
3058   }
3059   if (x6 == x7 && x4 == x8 && x2 == x3) {
3060     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x5, x1, x0);
3061     for (int i0 = 0; i0 != x0.size(); ++i0) {
3062       for (int i1 = 0; i1 != x1.size(); ++i1) {
3063         for (int i5 = 0; i5 != x5.size(); ++i5) {
3064           for (int i9 = 0; i9 != x9.size(); ++i9) {
3065             for (int i7 = 0; i7 != x7.size(); ++i7) {
3066               for (int i8 = 0; i8 != x8.size(); ++i8) {
3067                 for (int i3 = 0; i3 != x3.size(); ++i3) {
3068                   odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3069                     += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i1+x1.size()*(i0)))] * fdata[i7+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
3070                 }
3071               }
3072             }
3073           }
3074         }
3075       }
3076     }
3077   }
3078   if (x4 == x8 && x2 == x3) {
3079     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x7, x6, x5, x1, x0);
3080     for (int i0 = 0; i0 != x0.size(); ++i0) {
3081       for (int i1 = 0; i1 != x1.size(); ++i1) {
3082         for (int i5 = 0; i5 != x5.size(); ++i5) {
3083           for (int i6 = 0; i6 != x6.size(); ++i6) {
3084             for (int i7 = 0; i7 != x7.size(); ++i7) {
3085               for (int i9 = 0; i9 != x9.size(); ++i9) {
3086                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3087                   for (int i3 = 0; i3 != x3.size(); ++i3) {
3088                     odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3089                       += (1.0) * i0data[i9+x9.size()*(i7+x7.size()*(i6+x6.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
3090                   }
3091                 }
3092               }
3093             }
3094           }
3095         }
3096       }
3097     }
3098   }
3099   if (x6 == x7 && x2 == x3) {
3100     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x8, x4, x5, x1, x0);
3101     for (int i0 = 0; i0 != x0.size(); ++i0) {
3102       for (int i1 = 0; i1 != x1.size(); ++i1) {
3103         for (int i5 = 0; i5 != x5.size(); ++i5) {
3104           for (int i4 = 0; i4 != x4.size(); ++i4) {
3105             for (int i8 = 0; i8 != x8.size(); ++i8) {
3106               for (int i9 = 0; i9 != x9.size(); ++i9) {
3107                 for (int i7 = 0; i7 != x7.size(); ++i7) {
3108                   for (int i3 = 0; i3 != x3.size(); ++i3) {
3109                     odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3110                       += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i4+x4.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
3111                   }
3112                 }
3113               }
3114             }
3115           }
3116         }
3117       }
3118     }
3119   }
3120   if (x6 == x8 && x2 == x3) {
3121     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x5, x4, x7, x1, x0);
3122     for (int i0 = 0; i0 != x0.size(); ++i0) {
3123       for (int i1 = 0; i1 != x1.size(); ++i1) {
3124         for (int i7 = 0; i7 != x7.size(); ++i7) {
3125           for (int i4 = 0; i4 != x4.size(); ++i4) {
3126             for (int i5 = 0; i5 != x5.size(); ++i5) {
3127               for (int i9 = 0; i9 != x9.size(); ++i9) {
3128                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3129                   for (int i3 = 0; i3 != x3.size(); ++i3) {
3130                     odata[i9+x9.size()*(i8+x8.size()*(i3+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3131                       += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i4+x4.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
3132                   }
3133                 }
3134               }
3135             }
3136           }
3137         }
3138       }
3139     }
3140   }
3141   if (x6 == x8 && x4 == x7 && x2 == x5) {
3142     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x3, x1, x0);
3143     for (int i0 = 0; i0 != x0.size(); ++i0) {
3144       for (int i1 = 0; i1 != x1.size(); ++i1) {
3145         for (int i3 = 0; i3 != x3.size(); ++i3) {
3146           for (int i9 = 0; i9 != x9.size(); ++i9) {
3147             for (int i8 = 0; i8 != x8.size(); ++i8) {
3148               for (int i7 = 0; i7 != x7.size(); ++i7) {
3149                 for (int i5 = 0; i5 != x5.size(); ++i5) {
3150                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3151                     += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i1+x1.size()*(i0)))] * fdata[i8+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
3152                 }
3153               }
3154             }
3155           }
3156         }
3157       }
3158     }
3159   }
3160   if (x4 == x7 && x2 == x5) {
3161     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x8, x6, x3, x1, x0);
3162     for (int i0 = 0; i0 != x0.size(); ++i0) {
3163       for (int i1 = 0; i1 != x1.size(); ++i1) {
3164         for (int i3 = 0; i3 != x3.size(); ++i3) {
3165           for (int i6 = 0; i6 != x6.size(); ++i6) {
3166             for (int i8 = 0; i8 != x8.size(); ++i8) {
3167               for (int i9 = 0; i9 != x9.size(); ++i9) {
3168                 for (int i7 = 0; i7 != x7.size(); ++i7) {
3169                   for (int i5 = 0; i5 != x5.size(); ++i5) {
3170                     odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3171                       += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i6+x6.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
3172                   }
3173                 }
3174               }
3175             }
3176           }
3177         }
3178       }
3179     }
3180   }
3181   if (x6 == x7 && x4 == x8 && x2 == x5) {
3182     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x3, x1, x0);
3183     for (int i0 = 0; i0 != x0.size(); ++i0) {
3184       for (int i1 = 0; i1 != x1.size(); ++i1) {
3185         for (int i3 = 0; i3 != x3.size(); ++i3) {
3186           for (int i9 = 0; i9 != x9.size(); ++i9) {
3187             for (int i7 = 0; i7 != x7.size(); ++i7) {
3188               for (int i8 = 0; i8 != x8.size(); ++i8) {
3189                 for (int i5 = 0; i5 != x5.size(); ++i5) {
3190                   odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3191                     += (-2.0) * i0data[i9+x9.size()*(i3+x3.size()*(i1+x1.size()*(i0)))] * fdata[i7+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
3192                 }
3193               }
3194             }
3195           }
3196         }
3197       }
3198     }
3199   }
3200   if (x4 == x8 && x2 == x5) {
3201     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x3, x6, x7, x1, x0);
3202     for (int i0 = 0; i0 != x0.size(); ++i0) {
3203       for (int i1 = 0; i1 != x1.size(); ++i1) {
3204         for (int i7 = 0; i7 != x7.size(); ++i7) {
3205           for (int i6 = 0; i6 != x6.size(); ++i6) {
3206             for (int i3 = 0; i3 != x3.size(); ++i3) {
3207               for (int i9 = 0; i9 != x9.size(); ++i9) {
3208                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3209                   for (int i5 = 0; i5 != x5.size(); ++i5) {
3210                     odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3211                       += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i6+x6.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
3212                   }
3213                 }
3214               }
3215             }
3216           }
3217         }
3218       }
3219     }
3220   }
3221   if (x6 == x7 && x2 == x5) {
3222     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x8, x4, x3, x1, x0);
3223     for (int i0 = 0; i0 != x0.size(); ++i0) {
3224       for (int i1 = 0; i1 != x1.size(); ++i1) {
3225         for (int i3 = 0; i3 != x3.size(); ++i3) {
3226           for (int i4 = 0; i4 != x4.size(); ++i4) {
3227             for (int i8 = 0; i8 != x8.size(); ++i8) {
3228               for (int i9 = 0; i9 != x9.size(); ++i9) {
3229                 for (int i7 = 0; i7 != x7.size(); ++i7) {
3230                   for (int i5 = 0; i5 != x5.size(); ++i5) {
3231                     odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3232                       += (-2.0) * i0data[i9+x9.size()*(i8+x8.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
3233                   }
3234                 }
3235               }
3236             }
3237           }
3238         }
3239       }
3240     }
3241   }
3242   if (x6 == x8 && x2 == x5) {
3243     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x7, x4, x3, x1, x0);
3244     for (int i0 = 0; i0 != x0.size(); ++i0) {
3245       for (int i1 = 0; i1 != x1.size(); ++i1) {
3246         for (int i3 = 0; i3 != x3.size(); ++i3) {
3247           for (int i4 = 0; i4 != x4.size(); ++i4) {
3248             for (int i7 = 0; i7 != x7.size(); ++i7) {
3249               for (int i9 = 0; i9 != x9.size(); ++i9) {
3250                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3251                   for (int i5 = 0; i5 != x5.size(); ++i5) {
3252                     odata[i9+x9.size()*(i8+x8.size()*(i5+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3253                       += (1.0) * i0data[i9+x9.size()*(i7+x7.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
3254                   }
3255                 }
3256               }
3257             }
3258           }
3259         }
3260       }
3261     }
3262   }
3263   if (x6 == x8 && x4 == x5 && x2 == x7) {
3264     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x3, x1, x0);
3265     for (int i0 = 0; i0 != x0.size(); ++i0) {
3266       for (int i1 = 0; i1 != x1.size(); ++i1) {
3267         for (int i3 = 0; i3 != x3.size(); ++i3) {
3268           for (int i9 = 0; i9 != x9.size(); ++i9) {
3269             for (int i8 = 0; i8 != x8.size(); ++i8) {
3270               for (int i5 = 0; i5 != x5.size(); ++i5) {
3271                 for (int i7 = 0; i7 != x7.size(); ++i7) {
3272                   odata[i9+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3273                     += (-2.0) * i0data[i9+x9.size()*(i3+x3.size()*(i1+x1.size()*(i0)))] * fdata[i8+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
3274                 }
3275               }
3276             }
3277           }
3278         }
3279       }
3280     }
3281   }
3282   if (x6 == x8 && x2 == x7) {
3283     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x5, x4, x3, x1, x0);
3284     for (int i0 = 0; i0 != x0.size(); ++i0) {
3285       for (int i1 = 0; i1 != x1.size(); ++i1) {
3286         for (int i3 = 0; i3 != x3.size(); ++i3) {
3287           for (int i4 = 0; i4 != x4.size(); ++i4) {
3288             for (int i5 = 0; i5 != x5.size(); ++i5) {
3289               for (int i9 = 0; i9 != x9.size(); ++i9) {
3290                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3291                   for (int i7 = 0; i7 != x7.size(); ++i7) {
3292                     odata[i9+x9.size()*(i8+x8.size()*(i7+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3293                       += (-2.0) * i0data[i9+x9.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
3294                   }
3295                 }
3296               }
3297             }
3298           }
3299         }
3300       }
3301     }
3302   }
3303   if (x6 == x7 && x4 == x5 && x2 == x8) {
3304     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x3, x1, x0);
3305     for (int i0 = 0; i0 != x0.size(); ++i0) {
3306       for (int i1 = 0; i1 != x1.size(); ++i1) {
3307         for (int i3 = 0; i3 != x3.size(); ++i3) {
3308           for (int i9 = 0; i9 != x9.size(); ++i9) {
3309             for (int i7 = 0; i7 != x7.size(); ++i7) {
3310               for (int i5 = 0; i5 != x5.size(); ++i5) {
3311                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3312                   odata[i9+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3313                     += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i1+x1.size()*(i0)))] * fdata[i7+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
3314                 }
3315               }
3316             }
3317           }
3318         }
3319       }
3320     }
3321   }
3322   if (x6 == x7 && x2 == x8) {
3323     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x5, x4, x3, x1, x0);
3324     for (int i0 = 0; i0 != x0.size(); ++i0) {
3325       for (int i1 = 0; i1 != x1.size(); ++i1) {
3326         for (int i3 = 0; i3 != x3.size(); ++i3) {
3327           for (int i4 = 0; i4 != x4.size(); ++i4) {
3328             for (int i5 = 0; i5 != x5.size(); ++i5) {
3329               for (int i9 = 0; i9 != x9.size(); ++i9) {
3330                 for (int i7 = 0; i7 != x7.size(); ++i7) {
3331                   for (int i8 = 0; i8 != x8.size(); ++i8) {
3332                     odata[i9+x9.size()*(i8+x8.size()*(i8+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3333                       += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
3334                   }
3335                 }
3336               }
3337             }
3338           }
3339         }
3340       }
3341     }
3342   }
3343   if (x6 == x7 && x4 == x5) {
3344     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x8, x2, x3, x1, x0);
3345     for (int i0 = 0; i0 != x0.size(); ++i0) {
3346       for (int i1 = 0; i1 != x1.size(); ++i1) {
3347         for (int i3 = 0; i3 != x3.size(); ++i3) {
3348           for (int i2 = 0; i2 != x2.size(); ++i2) {
3349             for (int i8 = 0; i8 != x8.size(); ++i8) {
3350               for (int i9 = 0; i9 != x9.size(); ++i9) {
3351                 for (int i7 = 0; i7 != x7.size(); ++i7) {
3352                   for (int i5 = 0; i5 != x5.size(); ++i5) {
3353                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3354                       += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
3355                   }
3356                 }
3357               }
3358             }
3359           }
3360         }
3361       }
3362     }
3363   }
3364   if (x6 == x8 && x4 == x5) {
3365     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x3, x2, x7, x1, x0);
3366     for (int i0 = 0; i0 != x0.size(); ++i0) {
3367       for (int i1 = 0; i1 != x1.size(); ++i1) {
3368         for (int i7 = 0; i7 != x7.size(); ++i7) {
3369           for (int i2 = 0; i2 != x2.size(); ++i2) {
3370             for (int i3 = 0; i3 != x3.size(); ++i3) {
3371               for (int i9 = 0; i9 != x9.size(); ++i9) {
3372                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3373                   for (int i5 = 0; i5 != x5.size(); ++i5) {
3374                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3375                       += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))] * fdata[i8+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
3376                   }
3377                 }
3378               }
3379             }
3380           }
3381         }
3382       }
3383     }
3384   }
3385   if (x6 == x8 && x4 == x7) {
3386     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x5, x2, x3, x1, x0);
3387     for (int i0 = 0; i0 != x0.size(); ++i0) {
3388       for (int i1 = 0; i1 != x1.size(); ++i1) {
3389         for (int i3 = 0; i3 != x3.size(); ++i3) {
3390           for (int i2 = 0; i2 != x2.size(); ++i2) {
3391             for (int i5 = 0; i5 != x5.size(); ++i5) {
3392               for (int i9 = 0; i9 != x9.size(); ++i9) {
3393                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3394                   for (int i7 = 0; i7 != x7.size(); ++i7) {
3395                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3396                       += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i2+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i8+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
3397                   }
3398                 }
3399               }
3400             }
3401           }
3402         }
3403       }
3404     }
3405   }
3406   if (x4 == x7) {
3407     std::unique_ptr<double[]> i0data = in(3)->get_block(x9, x8, x6, x5, x2, x3, x1, x0);
3408     for (int i0 = 0; i0 != x0.size(); ++i0) {
3409       for (int i1 = 0; i1 != x1.size(); ++i1) {
3410         for (int i3 = 0; i3 != x3.size(); ++i3) {
3411           for (int i2 = 0; i2 != x2.size(); ++i2) {
3412             for (int i5 = 0; i5 != x5.size(); ++i5) {
3413               for (int i6 = 0; i6 != x6.size(); ++i6) {
3414                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3415                   for (int i9 = 0; i9 != x9.size(); ++i9) {
3416                     for (int i7 = 0; i7 != x7.size(); ++i7) {
3417                       odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3418                         += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
3419                     }
3420                   }
3421                 }
3422               }
3423             }
3424           }
3425         }
3426       }
3427     }
3428   }
3429   if (x6 == x7 && x4 == x8) {
3430     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x3, x2, x5, x1, x0);
3431     for (int i0 = 0; i0 != x0.size(); ++i0) {
3432       for (int i1 = 0; i1 != x1.size(); ++i1) {
3433         for (int i5 = 0; i5 != x5.size(); ++i5) {
3434           for (int i2 = 0; i2 != x2.size(); ++i2) {
3435             for (int i3 = 0; i3 != x3.size(); ++i3) {
3436               for (int i9 = 0; i9 != x9.size(); ++i9) {
3437                 for (int i7 = 0; i7 != x7.size(); ++i7) {
3438                   for (int i8 = 0; i8 != x8.size(); ++i8) {
3439                     odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3440                       += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
3441                   }
3442                 }
3443               }
3444             }
3445           }
3446         }
3447       }
3448     }
3449   }
3450   if (x4 == x8) {
3451     std::unique_ptr<double[]> i0data = in(3)->get_block(x9, x3, x2, x7, x6, x5, x1, x0);
3452     for (int i0 = 0; i0 != x0.size(); ++i0) {
3453       for (int i1 = 0; i1 != x1.size(); ++i1) {
3454         for (int i5 = 0; i5 != x5.size(); ++i5) {
3455           for (int i6 = 0; i6 != x6.size(); ++i6) {
3456             for (int i7 = 0; i7 != x7.size(); ++i7) {
3457               for (int i2 = 0; i2 != x2.size(); ++i2) {
3458                 for (int i3 = 0; i3 != x3.size(); ++i3) {
3459                   for (int i9 = 0; i9 != x9.size(); ++i9) {
3460                     for (int i8 = 0; i8 != x8.size(); ++i8) {
3461                       odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3462                         += (1.0) * i0data[i9+x9.size()*(i3+x3.size()*(i2+x2.size()*(i7+x7.size()*(i6+x6.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))))] * fdata[i6+x6.size()*(i5+x5.size()*(i8+x4.size()*(i3)))];
3463                     }
3464                   }
3465                 }
3466               }
3467             }
3468           }
3469         }
3470       }
3471     }
3472   }
3473   if (x6 == x7) {
3474     std::unique_ptr<double[]> i0data = in(3)->get_block(x9, x8, x2, x5, x4, x3, x1, x0);
3475     for (int i0 = 0; i0 != x0.size(); ++i0) {
3476       for (int i1 = 0; i1 != x1.size(); ++i1) {
3477         for (int i3 = 0; i3 != x3.size(); ++i3) {
3478           for (int i4 = 0; i4 != x4.size(); ++i4) {
3479             for (int i5 = 0; i5 != x5.size(); ++i5) {
3480               for (int i2 = 0; i2 != x2.size(); ++i2) {
3481                 for (int i8 = 0; i8 != x8.size(); ++i8) {
3482                   for (int i9 = 0; i9 != x9.size(); ++i9) {
3483                     for (int i7 = 0; i7 != x7.size(); ++i7) {
3484                       odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3485                         += (1.0) * i0data[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
3486                     }
3487                   }
3488                 }
3489               }
3490             }
3491           }
3492         }
3493       }
3494     }
3495   }
3496   if (x6 == x8) {
3497     std::unique_ptr<double[]> i0data = in(3)->get_block(x9, x5, x2, x7, x4, x3, x1, x0);
3498     for (int i0 = 0; i0 != x0.size(); ++i0) {
3499       for (int i1 = 0; i1 != x1.size(); ++i1) {
3500         for (int i3 = 0; i3 != x3.size(); ++i3) {
3501           for (int i4 = 0; i4 != x4.size(); ++i4) {
3502             for (int i7 = 0; i7 != x7.size(); ++i7) {
3503               for (int i2 = 0; i2 != x2.size(); ++i2) {
3504                 for (int i5 = 0; i5 != x5.size(); ++i5) {
3505                   for (int i9 = 0; i9 != x9.size(); ++i9) {
3506                     for (int i8 = 0; i8 != x8.size(); ++i8) {
3507                       odata[i9+x9.size()*(i8+x8.size()*(i2+x2.size()*(i7+x7.size()*(i1+x1.size()*(i0)))))]
3508                         += (1.0) * i0data[i9+x9.size()*(i5+x5.size()*(i2+x2.size()*(i7+x7.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))] * fdata[i8+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
3509                     }
3510                   }
3511                 }
3512               }
3513             }
3514           }
3515         }
3516       }
3517     }
3518   }
3519   out()->add_block(odata, x9, x8, x2, x7, x1, x0);
3520 }
3521 
compute()3522 void Task9::Task_local::compute() {
3523   const Index x0 = b(0);
3524   const Index x1 = b(1);
3525   // tensor label: Gamma9
3526   std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x1)]);
3527   std::fill_n(odata.get(), out()->get_size(x0, x1), 0.0);
3528   {
3529     // rdm0 non-merged case
3530     if (x0 == x1) {
3531       std::unique_ptr<double[]> i0data = in(0)->get_block();
3532       for (int i1 = 0; i1 != x1.size(); ++i1) {
3533         odata[i1+x0.size()*(i1)]  += 2.0 * i0data[0];
3534       }
3535     }
3536   }
3537   {
3538     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x1);
3539     sort_indices<0,1,1,1,-1,1>(i0data, odata, x0.size(), x1.size());
3540   }
3541   out()->add_block(odata, x0, x1);
3542 }
3543 
compute()3544 void Task10::Task_local::compute() {
3545   const Index x3 = b(0);
3546   const Index x1 = b(1);
3547   const Index x0 = b(2);
3548   const Index x2 = b(3);
3549   // tensor label: Gamma13
3550   std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x1, x0, x2)]);
3551   std::fill_n(odata.get(), out()->get_size(x3, x1, x0, x2), 0.0);
3552   {
3553     if (x0 == x1) {
3554       std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x2);
3555       for (int i2 = 0; i2 != x2.size(); ++i2) {
3556         for (int i1 = 0; i1 != x1.size(); ++i1) {
3557           for (int i3 = 0; i3 != x3.size(); ++i3) {
3558             odata[i3+x3.size()*(i1+x1.size()*(i1+x0.size()*(i2)))]
3559               += (1.0) * i0data[i3+x3.size()*(i2)];
3560           }
3561         }
3562       }
3563     }
3564   }
3565   {
3566     if (x0 == x2) {
3567       std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x1);
3568       for (int i2 = 0; i2 != x2.size(); ++i2) {
3569         for (int i1 = 0; i1 != x1.size(); ++i1) {
3570           for (int i3 = 0; i3 != x3.size(); ++i3) {
3571             odata[i3+x3.size()*(i1+x1.size()*(i2+x0.size()*(i2)))]
3572               += (-2.0) * i0data[i3+x3.size()*(i1)];
3573           }
3574         }
3575       }
3576     }
3577   }
3578   {
3579     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x1, x0, x2);
3580     sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x3.size(), x1.size(), x0.size(), x2.size());
3581   }
3582   out()->add_block(odata, x3, x1, x0, x2);
3583 }
3584 
compute()3585 void Task11::Task_local::compute() {
3586   const Index x3 = b(0);
3587   const Index x2 = b(1);
3588   const Index x0 = b(2);
3589   const Index x1 = b(3);
3590   // tensor label: Gamma15
3591   std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x2, x0, x1)]);
3592   std::fill_n(odata.get(), out()->get_size(x3, x2, x0, x1), 0.0);
3593   {
3594     if (x0 == x1) {
3595       std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x2);
3596       for (int i1 = 0; i1 != x1.size(); ++i1) {
3597         for (int i2 = 0; i2 != x2.size(); ++i2) {
3598           for (int i3 = 0; i3 != x3.size(); ++i3) {
3599             odata[i3+x3.size()*(i2+x2.size()*(i1+x0.size()*(i1)))]
3600               += (2.0) * i0data[i3+x3.size()*(i2)];
3601           }
3602         }
3603       }
3604     }
3605   }
3606   {
3607     if (x0 == x2) {
3608       std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x1);
3609       for (int i1 = 0; i1 != x1.size(); ++i1) {
3610         for (int i2 = 0; i2 != x2.size(); ++i2) {
3611           for (int i3 = 0; i3 != x3.size(); ++i3) {
3612             odata[i3+x3.size()*(i2+x2.size()*(i2+x0.size()*(i1)))]
3613               += (-1.0) * i0data[i3+x3.size()*(i1)];
3614           }
3615         }
3616       }
3617     }
3618   }
3619   {
3620     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2, x0, x1);
3621     sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, x3.size(), x2.size(), x0.size(), x1.size());
3622   }
3623   out()->add_block(odata, x3, x2, x0, x1);
3624 }
3625 
compute()3626 void Task12::Task_local::compute() {
3627   const Index x0 = b(0);
3628   const Index x3 = b(1);
3629   const Index x2 = b(2);
3630   const Index x1 = b(3);
3631   // tensor label: Gamma96
3632   std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x3)]);
3633   std::fill_n(odata.get(), out()->get_size(x0, x3), 0.0);
3634   // associated with merged
3635   std::unique_ptr<double[]> fdata = in(3)->get_block(x2, x1);
3636   // rdm0 merged case
3637   if (x0 == x1 && x2 == x3) {
3638     std::unique_ptr<double[]> i0data = in(0)->get_block();
3639     for (int i1 = 0; i1 != x1.size(); ++i1) {
3640       for (int i3 = 0; i3 != x3.size(); ++i3) {
3641         odata[i1+x0.size()*(i3)]  += -2.0 * i0data[0] * fdata[i3+x2.size()*(i1)];
3642       }
3643     }
3644   }
3645   if (x2 == x3) {
3646     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x1);
3647     for (int i1 = 0; i1 != x1.size(); ++i1) {
3648       for (int i0 = 0; i0 != x0.size(); ++i0) {
3649         for (int i3 = 0; i3 != x3.size(); ++i3) {
3650           odata[i0+x0.size()*(i3)]
3651             += (1.0) * i0data[i0+x0.size()*(i1)] * fdata[i3+x2.size()*(i1)];
3652         }
3653       }
3654     }
3655   }
3656   out()->add_block(odata, x0, x3);
3657 }
3658 
compute()3659 void Task13::Task_local::compute() {
3660   const Index x0 = b(0);
3661   const Index x5 = b(1);
3662   const Index x4 = b(2);
3663   const Index x3 = b(3);
3664   const Index x2 = b(4);
3665   const Index x1 = b(5);
3666   // tensor label: Gamma98
3667   std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x5)]);
3668   std::fill_n(odata.get(), out()->get_size(x0, x5), 0.0);
3669   // associated with merged
3670   std::unique_ptr<double[]> fdata = in(4)->get_block(x4, x3, x2, x1);
3671   if (x2 == x5 && x0 == x1) {
3672     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x3);
3673     for (int i3 = 0; i3 != x3.size(); ++i3) {
3674       for (int i4 = 0; i4 != x4.size(); ++i4) {
3675         for (int i5 = 0; i5 != x5.size(); ++i5) {
3676           for (int i1 = 0; i1 != x1.size(); ++i1) {
3677             odata[i1+x0.size()*(i5)]
3678               += (-2.0) * i0data[i4+x4.size()*(i3)] * fdata[i4+x4.size()*(i3+x3.size()*(i5+x2.size()*(i1)))];
3679           }
3680         }
3681       }
3682     }
3683   }
3684   if (x2 == x5 && x0 == x3) {
3685     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x1);
3686     for (int i1 = 0; i1 != x1.size(); ++i1) {
3687       for (int i4 = 0; i4 != x4.size(); ++i4) {
3688         for (int i5 = 0; i5 != x5.size(); ++i5) {
3689           for (int i3 = 0; i3 != x3.size(); ++i3) {
3690             odata[i3+x0.size()*(i5)]
3691               += (1.0) * i0data[i4+x4.size()*(i1)] * fdata[i4+x4.size()*(i3+x3.size()*(i5+x2.size()*(i1)))];
3692           }
3693         }
3694       }
3695     }
3696   }
3697   if (x2 == x5) {
3698     std::unique_ptr<double[]> i0data = in(2)->get_block(x4, x3, x0, x1);
3699     for (int i1 = 0; i1 != x1.size(); ++i1) {
3700       for (int i0 = 0; i0 != x0.size(); ++i0) {
3701         for (int i3 = 0; i3 != x3.size(); ++i3) {
3702           for (int i4 = 0; i4 != x4.size(); ++i4) {
3703             for (int i5 = 0; i5 != x5.size(); ++i5) {
3704               odata[i0+x0.size()*(i5)]
3705                 += (1.0) * i0data[i4+x4.size()*(i3+x3.size()*(i0+x0.size()*(i1)))] * fdata[i4+x4.size()*(i3+x3.size()*(i5+x2.size()*(i1)))];
3706             }
3707           }
3708         }
3709       }
3710     }
3711   }
3712   // rdm0 merged case
3713   if (x2 == x3 && x4 == x5 && x0 == x1) {
3714     std::unique_ptr<double[]> i0data = in(0)->get_block();
3715     for (int i3 = 0; i3 != x3.size(); ++i3) {
3716       for (int i5 = 0; i5 != x5.size(); ++i5) {
3717         for (int i1 = 0; i1 != x1.size(); ++i1) {
3718           odata[i1+x0.size()*(i5)]  += -2.0 * i0data[0] * fdata[i5+x4.size()*(i3+x3.size()*(i3+x2.size()*(i1)))];
3719         }
3720       }
3721     }
3722   }
3723   if (x0 == x1 && x4 == x5) {
3724     std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x3);
3725     for (int i3 = 0; i3 != x3.size(); ++i3) {
3726       for (int i2 = 0; i2 != x2.size(); ++i2) {
3727         for (int i1 = 0; i1 != x1.size(); ++i1) {
3728           for (int i5 = 0; i5 != x5.size(); ++i5) {
3729             odata[i1+x0.size()*(i5)]
3730               += (1.0) * i0data[i2+x2.size()*(i3)] * fdata[i5+x4.size()*(i3+x3.size()*(i2+x2.size()*(i1)))];
3731           }
3732         }
3733       }
3734     }
3735   }
3736   if (x4 == x5 && x0 == x3) {
3737     std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x1);
3738     for (int i1 = 0; i1 != x1.size(); ++i1) {
3739       for (int i2 = 0; i2 != x2.size(); ++i2) {
3740         for (int i5 = 0; i5 != x5.size(); ++i5) {
3741           for (int i3 = 0; i3 != x3.size(); ++i3) {
3742             odata[i3+x0.size()*(i5)]
3743               += (-2.0) * i0data[i2+x2.size()*(i1)] * fdata[i5+x4.size()*(i3+x3.size()*(i2+x2.size()*(i1)))];
3744           }
3745         }
3746       }
3747     }
3748   }
3749   if (x2 == x3 && x4 == x5) {
3750     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x1);
3751     for (int i1 = 0; i1 != x1.size(); ++i1) {
3752       for (int i0 = 0; i0 != x0.size(); ++i0) {
3753         for (int i3 = 0; i3 != x3.size(); ++i3) {
3754           for (int i5 = 0; i5 != x5.size(); ++i5) {
3755             odata[i0+x0.size()*(i5)]
3756               += (1.0) * i0data[i0+x0.size()*(i1)] * fdata[i5+x4.size()*(i3+x3.size()*(i3+x2.size()*(i1)))];
3757           }
3758         }
3759       }
3760     }
3761   }
3762   if (x4 == x5) {
3763     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x3, x2, x1);
3764     for (int i1 = 0; i1 != x1.size(); ++i1) {
3765       for (int i2 = 0; i2 != x2.size(); ++i2) {
3766         for (int i3 = 0; i3 != x3.size(); ++i3) {
3767           for (int i0 = 0; i0 != x0.size(); ++i0) {
3768             for (int i5 = 0; i5 != x5.size(); ++i5) {
3769               odata[i0+x0.size()*(i5)]
3770                 += (1.0) * i0data[i0+x0.size()*(i3+x3.size()*(i2+x2.size()*(i1)))] * fdata[i5+x4.size()*(i3+x3.size()*(i2+x2.size()*(i1)))];
3771             }
3772           }
3773         }
3774       }
3775     }
3776   }
3777   out()->add_block(odata, x0, x5);
3778 }
3779 
compute()3780 void Task14::Task_local::compute() {
3781   const Index x3 = b(0);
3782   const Index x0 = b(1);
3783   const Index x1 = b(2);
3784   const Index x2 = b(3);
3785   // tensor label: Gamma24
3786   std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x0, x1, x2)]);
3787   std::fill_n(odata.get(), out()->get_size(x3, x0, x1, x2), 0.0);
3788   {
3789     if (x1 == x2) {
3790       std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
3791       for (int i2 = 0; i2 != x2.size(); ++i2) {
3792         for (int i0 = 0; i0 != x0.size(); ++i0) {
3793           for (int i3 = 0; i3 != x3.size(); ++i3) {
3794             odata[i3+x3.size()*(i0+x0.size()*(i2+x1.size()*(i2)))]
3795               += (2.0) * i0data[i3+x3.size()*(i0)];
3796           }
3797         }
3798       }
3799     }
3800   }
3801   {
3802     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x0, x1, x2);
3803     sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, x3.size(), x0.size(), x1.size(), x2.size());
3804   }
3805   out()->add_block(odata, x3, x0, x1, x2);
3806 }
3807 
compute()3808 void Task15::Task_local::compute() {
3809   const Index x3 = b(0);
3810   const Index x2 = b(1);
3811   const Index x1 = b(2);
3812   const Index x0 = b(3);
3813   // tensor label: Gamma25
3814   std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x2, x1, x0)]);
3815   std::fill_n(odata.get(), out()->get_size(x3, x2, x1, x0), 0.0);
3816   {
3817     if (x1 == x2) {
3818       std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
3819       for (int i0 = 0; i0 != x0.size(); ++i0) {
3820         for (int i2 = 0; i2 != x2.size(); ++i2) {
3821           for (int i3 = 0; i3 != x3.size(); ++i3) {
3822             odata[i3+x3.size()*(i2+x2.size()*(i2+x1.size()*(i0)))]
3823               += (1.0) * i0data[i3+x3.size()*(i0)];
3824           }
3825         }
3826       }
3827     }
3828   }
3829   {
3830     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2, x1, x0);
3831     sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x3.size(), x2.size(), x1.size(), x0.size());
3832   }
3833   out()->add_block(odata, x3, x2, x1, x0);
3834 }
3835 
compute()3836 void Task16::Task_local::compute() {
3837   const Index x1 = b(0);
3838   const Index x3 = b(1);
3839   const Index x2 = b(2);
3840   const Index x0 = b(3);
3841   // tensor label: Gamma26
3842   std::unique_ptr<double[]> odata(new double[out()->get_size(x1, x3, x2, x0)]);
3843   std::fill_n(odata.get(), out()->get_size(x1, x3, x2, x0), 0.0);
3844   {
3845     if (x1 == x3) {
3846       std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
3847       for (int i0 = 0; i0 != x0.size(); ++i0) {
3848         for (int i2 = 0; i2 != x2.size(); ++i2) {
3849           for (int i3 = 0; i3 != x3.size(); ++i3) {
3850             odata[i3+x1.size()*(i3+x3.size()*(i2+x2.size()*(i0)))]
3851               += (-2.0) * i0data[i2+x2.size()*(i0)];
3852           }
3853         }
3854       }
3855     }
3856   }
3857   {
3858     if (x2 == x3) {
3859       std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
3860       for (int i0 = 0; i0 != x0.size(); ++i0) {
3861         for (int i3 = 0; i3 != x3.size(); ++i3) {
3862           for (int i1 = 0; i1 != x1.size(); ++i1) {
3863             odata[i1+x1.size()*(i3+x3.size()*(i3+x2.size()*(i0)))]
3864               += (1.0) * i0data[i1+x1.size()*(i0)];
3865           }
3866         }
3867       }
3868     }
3869   }
3870   {
3871     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x3, x2, x0);
3872     sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x1.size(), x3.size(), x2.size(), x0.size());
3873   }
3874   out()->add_block(odata, x1, x3, x2, x0);
3875 }
3876 
compute()3877 void Task17::Task_local::compute() {
3878   const Index x5 = b(0);
3879   const Index x0 = b(1);
3880   const Index x4 = b(2);
3881   const Index x3 = b(3);
3882   const Index x1 = b(4);
3883   const Index x2 = b(5);
3884   // tensor label: Gamma28
3885   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x4, x3, x1, x2)]);
3886   std::fill_n(odata.get(), out()->get_size(x5, x0, x4, x3, x1, x2), 0.0);
3887   {
3888     if (x1 == x2) {
3889       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x3);
3890       for (int i2 = 0; i2 != x2.size(); ++i2) {
3891         for (int i3 = 0; i3 != x3.size(); ++i3) {
3892           for (int i4 = 0; i4 != x4.size(); ++i4) {
3893             for (int i0 = 0; i0 != x0.size(); ++i0) {
3894               for (int i5 = 0; i5 != x5.size(); ++i5) {
3895                 odata[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2+x1.size()*(i2)))))]
3896                   += (2.0) * i0data[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3)))];
3897               }
3898             }
3899           }
3900         }
3901       }
3902     }
3903   }
3904   {
3905     if (x1 == x3) {
3906       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x2);
3907       for (int i2 = 0; i2 != x2.size(); ++i2) {
3908         for (int i3 = 0; i3 != x3.size(); ++i3) {
3909           for (int i4 = 0; i4 != x4.size(); ++i4) {
3910             for (int i0 = 0; i0 != x0.size(); ++i0) {
3911               for (int i5 = 0; i5 != x5.size(); ++i5) {
3912                 odata[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i2)))))]
3913                   += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i2)))];
3914               }
3915             }
3916           }
3917         }
3918       }
3919     }
3920   }
3921   {
3922     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x4, x3, x1, x2);
3923     sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x5.size(), x0.size(), x4.size(), x3.size(), x1.size(), x2.size());
3924   }
3925   out()->add_block(odata, x5, x0, x4, x3, x1, x2);
3926 }
3927 
compute()3928 void Task18::Task_local::compute() {
3929   const Index x1 = b(0);
3930   const Index x0 = b(1);
3931   // tensor label: Gamma29
3932   std::unique_ptr<double[]> odata(new double[out()->get_size(x1, x0)]);
3933   std::fill_n(odata.get(), out()->get_size(x1, x0), 0.0);
3934   {
3935     std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
3936     sort_indices<0,1,1,1,1,1>(i0data, odata, x1.size(), x0.size());
3937   }
3938   out()->add_block(odata, x1, x0);
3939 }
3940 
compute()3941 void Task19::Task_local::compute() {
3942   const Index x5 = b(0);
3943   const Index x4 = b(1);
3944   const Index x1 = b(2);
3945   const Index x3 = b(3);
3946   const Index x2 = b(4);
3947   const Index x0 = b(5);
3948   // tensor label: Gamma33
3949   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x1, x3, x2, x0)]);
3950   std::fill_n(odata.get(), out()->get_size(x5, x4, x1, x3, x2, x0), 0.0);
3951   {
3952     if (x2 == x4 && x1 == x3) {
3953       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
3954       for (int i0 = 0; i0 != x0.size(); ++i0) {
3955         for (int i3 = 0; i3 != x3.size(); ++i3) {
3956           for (int i4 = 0; i4 != x4.size(); ++i4) {
3957             for (int i5 = 0; i5 != x5.size(); ++i5) {
3958               odata[i5+x5.size()*(i4+x4.size()*(i3+x1.size()*(i3+x3.size()*(i4+x2.size()*(i0)))))]
3959                 += (-2.0) * i0data[i5+x5.size()*(i0)];
3960             }
3961           }
3962         }
3963       }
3964     }
3965   }
3966   {
3967     if (x1 == x3) {
3968       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x2, x0);
3969       for (int i0 = 0; i0 != x0.size(); ++i0) {
3970         for (int i2 = 0; i2 != x2.size(); ++i2) {
3971           for (int i3 = 0; i3 != x3.size(); ++i3) {
3972             for (int i4 = 0; i4 != x4.size(); ++i4) {
3973               for (int i5 = 0; i5 != x5.size(); ++i5) {
3974                 odata[i5+x5.size()*(i4+x4.size()*(i3+x1.size()*(i3+x3.size()*(i2+x2.size()*(i0)))))]
3975                   += (-2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i2+x2.size()*(i0)))];
3976               }
3977             }
3978           }
3979         }
3980       }
3981     }
3982   }
3983   {
3984     if (x2 == x3 && x1 == x4) {
3985       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
3986       for (int i0 = 0; i0 != x0.size(); ++i0) {
3987         for (int i3 = 0; i3 != x3.size(); ++i3) {
3988           for (int i4 = 0; i4 != x4.size(); ++i4) {
3989             for (int i5 = 0; i5 != x5.size(); ++i5) {
3990               odata[i5+x5.size()*(i4+x4.size()*(i4+x1.size()*(i3+x3.size()*(i3+x2.size()*(i0)))))]
3991                 += (1.0) * i0data[i5+x5.size()*(i0)];
3992             }
3993           }
3994         }
3995       }
3996     }
3997   }
3998   {
3999     if (x1 == x4) {
4000       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x2, x0);
4001       for (int i0 = 0; i0 != x0.size(); ++i0) {
4002         for (int i2 = 0; i2 != x2.size(); ++i2) {
4003           for (int i3 = 0; i3 != x3.size(); ++i3) {
4004             for (int i4 = 0; i4 != x4.size(); ++i4) {
4005               for (int i5 = 0; i5 != x5.size(); ++i5) {
4006                 odata[i5+x5.size()*(i4+x4.size()*(i4+x1.size()*(i3+x3.size()*(i2+x2.size()*(i0)))))]
4007                   += (1.0) * i0data[i5+x5.size()*(i3+x3.size()*(i2+x2.size()*(i0)))];
4008               }
4009             }
4010           }
4011         }
4012       }
4013     }
4014   }
4015   {
4016     if (x2 == x3) {
4017       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x0);
4018       for (int i0 = 0; i0 != x0.size(); ++i0) {
4019         for (int i3 = 0; i3 != x3.size(); ++i3) {
4020           for (int i1 = 0; i1 != x1.size(); ++i1) {
4021             for (int i4 = 0; i4 != x4.size(); ++i4) {
4022               for (int i5 = 0; i5 != x5.size(); ++i5) {
4023                 odata[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i3+x3.size()*(i3+x2.size()*(i0)))))]
4024                   += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
4025               }
4026             }
4027           }
4028         }
4029       }
4030     }
4031   }
4032   {
4033     if (x2 == x4) {
4034       std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x1, x3);
4035       for (int i0 = 0; i0 != x0.size(); ++i0) {
4036         for (int i3 = 0; i3 != x3.size(); ++i3) {
4037           for (int i1 = 0; i1 != x1.size(); ++i1) {
4038             for (int i4 = 0; i4 != x4.size(); ++i4) {
4039               for (int i5 = 0; i5 != x5.size(); ++i5) {
4040                 odata[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i3+x3.size()*(i4+x2.size()*(i0)))))]
4041                   += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i3)))];
4042               }
4043             }
4044           }
4045         }
4046       }
4047     }
4048   }
4049   {
4050     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x1, x3, x2, x0);
4051     sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x4.size(), x1.size(), x3.size(), x2.size(), x0.size());
4052   }
4053   out()->add_block(odata, x5, x4, x1, x3, x2, x0);
4054 }
4055 
compute()4056 void Task20::Task_local::compute() {
4057   const Index x5 = b(0);
4058   const Index x0 = b(1);
4059   const Index x1 = b(2);
4060   const Index x4 = b(3);
4061   const Index x3 = b(4);
4062   const Index x2 = b(5);
4063   // tensor label: Gamma112
4064   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x1, x4)]);
4065   std::fill_n(odata.get(), out()->get_size(x5, x0, x1, x4), 0.0);
4066   // associated with merged
4067   std::unique_ptr<double[]> fdata = in(3)->get_block(x3, x2);
4068   if (x5 == x2 && x1 == x4) {
4069     std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
4070     for (int i0 = 0; i0 != x0.size(); ++i0) {
4071       for (int i3 = 0; i3 != x3.size(); ++i3) {
4072         for (int i2 = 0; i2 != x2.size(); ++i2) {
4073           for (int i4 = 0; i4 != x4.size(); ++i4) {
4074             odata[i2+x5.size()*(i0+x0.size()*(i4+x1.size()*(i4)))]
4075               += (2.0) * i0data[i3+x3.size()*(i0)] * fdata[i3+x3.size()*(i2)];
4076           }
4077         }
4078       }
4079     }
4080   }
4081   if (x5 == x2) {
4082     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x0, x1, x4);
4083     for (int i4 = 0; i4 != x4.size(); ++i4) {
4084       for (int i1 = 0; i1 != x1.size(); ++i1) {
4085         for (int i0 = 0; i0 != x0.size(); ++i0) {
4086           for (int i3 = 0; i3 != x3.size(); ++i3) {
4087             for (int i2 = 0; i2 != x2.size(); ++i2) {
4088               odata[i2+x5.size()*(i0+x0.size()*(i1+x1.size()*(i4)))]
4089                 += (-1.0) * i0data[i3+x3.size()*(i0+x0.size()*(i1+x1.size()*(i4)))] * fdata[i3+x3.size()*(i2)];
4090             }
4091           }
4092         }
4093       }
4094     }
4095   }
4096   if (x3 == x4 && x1 == x2) {
4097     std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
4098     for (int i0 = 0; i0 != x0.size(); ++i0) {
4099       for (int i5 = 0; i5 != x5.size(); ++i5) {
4100         for (int i4 = 0; i4 != x4.size(); ++i4) {
4101           for (int i2 = 0; i2 != x2.size(); ++i2) {
4102             odata[i5+x5.size()*(i0+x0.size()*(i2+x1.size()*(i4)))]
4103               += (-2.0) * i0data[i5+x5.size()*(i0)] * fdata[i4+x3.size()*(i2)];
4104           }
4105         }
4106       }
4107     }
4108   }
4109   if (x3 == x4) {
4110     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x1, x2);
4111     for (int i2 = 0; i2 != x2.size(); ++i2) {
4112       for (int i1 = 0; i1 != x1.size(); ++i1) {
4113         for (int i0 = 0; i0 != x0.size(); ++i0) {
4114           for (int i5 = 0; i5 != x5.size(); ++i5) {
4115             for (int i4 = 0; i4 != x4.size(); ++i4) {
4116               odata[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i4)))]
4117                 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i2)))] * fdata[i4+x3.size()*(i2)];
4118             }
4119           }
4120         }
4121       }
4122     }
4123   }
4124   out()->add_block(odata, x5, x0, x1, x4);
4125 }
4126 
compute()4127 void Task21::Task_local::compute() {
4128   const Index x5 = b(0);
4129   const Index x4 = b(1);
4130   const Index x1 = b(2);
4131   const Index x0 = b(3);
4132   const Index x3 = b(4);
4133   const Index x2 = b(5);
4134   // tensor label: Gamma113
4135   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x1, x0)]);
4136   std::fill_n(odata.get(), out()->get_size(x5, x4, x1, x0), 0.0);
4137   // associated with merged
4138   std::unique_ptr<double[]> fdata = in(3)->get_block(x3, x2);
4139   if (x5 == x2 && x1 == x4) {
4140     std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
4141     for (int i0 = 0; i0 != x0.size(); ++i0) {
4142       for (int i3 = 0; i3 != x3.size(); ++i3) {
4143         for (int i2 = 0; i2 != x2.size(); ++i2) {
4144           for (int i4 = 0; i4 != x4.size(); ++i4) {
4145             odata[i2+x5.size()*(i4+x4.size()*(i4+x1.size()*(i0)))]
4146               += (1.0) * i0data[i3+x3.size()*(i0)] * fdata[i3+x3.size()*(i2)];
4147           }
4148         }
4149       }
4150     }
4151   }
4152   if (x5 == x2) {
4153     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4, x1, x0);
4154     for (int i0 = 0; i0 != x0.size(); ++i0) {
4155       for (int i1 = 0; i1 != x1.size(); ++i1) {
4156         for (int i4 = 0; i4 != x4.size(); ++i4) {
4157           for (int i3 = 0; i3 != x3.size(); ++i3) {
4158             for (int i2 = 0; i2 != x2.size(); ++i2) {
4159               odata[i2+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))]
4160                 += (1.0) * i0data[i3+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))] * fdata[i3+x3.size()*(i2)];
4161             }
4162           }
4163         }
4164       }
4165     }
4166   }
4167   if (x3 == x4 && x1 == x2) {
4168     std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
4169     for (int i0 = 0; i0 != x0.size(); ++i0) {
4170       for (int i5 = 0; i5 != x5.size(); ++i5) {
4171         for (int i4 = 0; i4 != x4.size(); ++i4) {
4172           for (int i2 = 0; i2 != x2.size(); ++i2) {
4173             odata[i5+x5.size()*(i4+x4.size()*(i2+x1.size()*(i0)))]
4174               += (-1.0) * i0data[i5+x5.size()*(i0)] * fdata[i4+x3.size()*(i2)];
4175           }
4176         }
4177       }
4178     }
4179   }
4180   if (x3 == x4) {
4181     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2, x1, x0);
4182     for (int i0 = 0; i0 != x0.size(); ++i0) {
4183       for (int i1 = 0; i1 != x1.size(); ++i1) {
4184         for (int i2 = 0; i2 != x2.size(); ++i2) {
4185           for (int i5 = 0; i5 != x5.size(); ++i5) {
4186             for (int i4 = 0; i4 != x4.size(); ++i4) {
4187               odata[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))]
4188                 += (-1.0) * i0data[i5+x5.size()*(i2+x2.size()*(i1+x1.size()*(i0)))] * fdata[i4+x3.size()*(i2)];
4189             }
4190           }
4191         }
4192       }
4193     }
4194   }
4195   out()->add_block(odata, x5, x4, x1, x0);
4196 }
4197 
compute()4198 void Task22::Task_local::compute() {
4199   const Index x7 = b(0);
4200   const Index x0 = b(1);
4201   const Index x1 = b(2);
4202   const Index x6 = b(3);
4203   const Index x5 = b(4);
4204   const Index x4 = b(5);
4205   const Index x3 = b(6);
4206   const Index x2 = b(7);
4207   // tensor label: Gamma116
4208   std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x0, x1, x6)]);
4209   std::fill_n(odata.get(), out()->get_size(x7, x0, x1, x6), 0.0);
4210   // associated with merged
4211   std::unique_ptr<double[]> fdata = in(4)->get_block(x5, x4, x3, x2);
4212   if (x7 == x4 && x1 == x6) {
4213     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x2);
4214     for (int i2 = 0; i2 != x2.size(); ++i2) {
4215       for (int i3 = 0; i3 != x3.size(); ++i3) {
4216         for (int i0 = 0; i0 != x0.size(); ++i0) {
4217           for (int i5 = 0; i5 != x5.size(); ++i5) {
4218             for (int i4 = 0; i4 != x4.size(); ++i4) {
4219               for (int i6 = 0; i6 != x6.size(); ++i6) {
4220                 odata[i4+x7.size()*(i0+x0.size()*(i6+x1.size()*(i6)))]
4221                   += (2.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4222               }
4223             }
4224           }
4225         }
4226       }
4227     }
4228   }
4229   if (x7 == x4 && x1 == x2) {
4230     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x6);
4231     for (int i6 = 0; i6 != x6.size(); ++i6) {
4232       for (int i3 = 0; i3 != x3.size(); ++i3) {
4233         for (int i0 = 0; i0 != x0.size(); ++i0) {
4234           for (int i5 = 0; i5 != x5.size(); ++i5) {
4235             for (int i4 = 0; i4 != x4.size(); ++i4) {
4236               for (int i2 = 0; i2 != x2.size(); ++i2) {
4237                 odata[i4+x7.size()*(i0+x0.size()*(i2+x1.size()*(i6)))]
4238                   += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i6)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4239               }
4240             }
4241           }
4242         }
4243       }
4244     }
4245   }
4246   if (x7 == x2 && x1 == x4) {
4247     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x6, x3, x0);
4248     for (int i0 = 0; i0 != x0.size(); ++i0) {
4249       for (int i3 = 0; i3 != x3.size(); ++i3) {
4250         for (int i6 = 0; i6 != x6.size(); ++i6) {
4251           for (int i5 = 0; i5 != x5.size(); ++i5) {
4252             for (int i2 = 0; i2 != x2.size(); ++i2) {
4253               for (int i4 = 0; i4 != x4.size(); ++i4) {
4254                 odata[i2+x7.size()*(i0+x0.size()*(i4+x1.size()*(i6)))]
4255                   += (-1.0) * i0data[i5+x5.size()*(i6+x6.size()*(i3+x3.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4256               }
4257             }
4258           }
4259         }
4260       }
4261     }
4262   }
4263   if (x7 == x4) {
4264     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x0, x3, x2, x1, x6);
4265     for (int i6 = 0; i6 != x6.size(); ++i6) {
4266       for (int i1 = 0; i1 != x1.size(); ++i1) {
4267         for (int i2 = 0; i2 != x2.size(); ++i2) {
4268           for (int i3 = 0; i3 != x3.size(); ++i3) {
4269             for (int i0 = 0; i0 != x0.size(); ++i0) {
4270               for (int i5 = 0; i5 != x5.size(); ++i5) {
4271                 for (int i4 = 0; i4 != x4.size(); ++i4) {
4272                   odata[i4+x7.size()*(i0+x0.size()*(i1+x1.size()*(i6)))]
4273                     += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i2+x2.size()*(i1+x1.size()*(i6)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4274                 }
4275               }
4276             }
4277           }
4278         }
4279       }
4280     }
4281   }
4282   if (x3 == x4 && x7 == x2 && x1 == x6) {
4283     std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
4284     for (int i0 = 0; i0 != x0.size(); ++i0) {
4285       for (int i5 = 0; i5 != x5.size(); ++i5) {
4286         for (int i4 = 0; i4 != x4.size(); ++i4) {
4287           for (int i2 = 0; i2 != x2.size(); ++i2) {
4288             for (int i6 = 0; i6 != x6.size(); ++i6) {
4289               odata[i2+x7.size()*(i0+x0.size()*(i6+x1.size()*(i6)))]
4290                 += (2.0) * i0data[i5+x5.size()*(i0)] * fdata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
4291             }
4292           }
4293         }
4294       }
4295     }
4296   }
4297   if (x7 == x2 && x1 == x6) {
4298     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x0);
4299     for (int i0 = 0; i0 != x0.size(); ++i0) {
4300       for (int i3 = 0; i3 != x3.size(); ++i3) {
4301         for (int i4 = 0; i4 != x4.size(); ++i4) {
4302           for (int i5 = 0; i5 != x5.size(); ++i5) {
4303             for (int i2 = 0; i2 != x2.size(); ++i2) {
4304               for (int i6 = 0; i6 != x6.size(); ++i6) {
4305                 odata[i2+x7.size()*(i0+x0.size()*(i6+x1.size()*(i6)))]
4306                   += (2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4307               }
4308             }
4309           }
4310         }
4311       }
4312     }
4313   }
4314   if (x3 == x4 && x7 == x2) {
4315     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x1, x6);
4316     for (int i6 = 0; i6 != x6.size(); ++i6) {
4317       for (int i1 = 0; i1 != x1.size(); ++i1) {
4318         for (int i0 = 0; i0 != x0.size(); ++i0) {
4319           for (int i5 = 0; i5 != x5.size(); ++i5) {
4320             for (int i4 = 0; i4 != x4.size(); ++i4) {
4321               for (int i2 = 0; i2 != x2.size(); ++i2) {
4322                 odata[i2+x7.size()*(i0+x0.size()*(i1+x1.size()*(i6)))]
4323                   += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i6)))] * fdata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
4324               }
4325             }
4326           }
4327         }
4328       }
4329     }
4330   }
4331   if (x7 == x2) {
4332     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x3, x0, x1, x6);
4333     for (int i6 = 0; i6 != x6.size(); ++i6) {
4334       for (int i1 = 0; i1 != x1.size(); ++i1) {
4335         for (int i0 = 0; i0 != x0.size(); ++i0) {
4336           for (int i3 = 0; i3 != x3.size(); ++i3) {
4337             for (int i4 = 0; i4 != x4.size(); ++i4) {
4338               for (int i5 = 0; i5 != x5.size(); ++i5) {
4339                 for (int i2 = 0; i2 != x2.size(); ++i2) {
4340                   odata[i2+x7.size()*(i0+x0.size()*(i1+x1.size()*(i6)))]
4341                     += (-1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i0+x0.size()*(i1+x1.size()*(i6)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4342                 }
4343               }
4344             }
4345           }
4346         }
4347       }
4348     }
4349   }
4350   if (x3 == x6 && x1 == x2) {
4351     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x5, x4);
4352     for (int i4 = 0; i4 != x4.size(); ++i4) {
4353       for (int i5 = 0; i5 != x5.size(); ++i5) {
4354         for (int i0 = 0; i0 != x0.size(); ++i0) {
4355           for (int i7 = 0; i7 != x7.size(); ++i7) {
4356             for (int i6 = 0; i6 != x6.size(); ++i6) {
4357               for (int i2 = 0; i2 != x2.size(); ++i2) {
4358                 odata[i7+x7.size()*(i0+x0.size()*(i2+x1.size()*(i6)))]
4359                   += (-2.0) * i0data[i7+x7.size()*(i0+x0.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
4360               }
4361             }
4362           }
4363         }
4364       }
4365     }
4366   }
4367   if (x3 == x6 && x1 == x4) {
4368     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x5, x2);
4369     for (int i2 = 0; i2 != x2.size(); ++i2) {
4370       for (int i5 = 0; i5 != x5.size(); ++i5) {
4371         for (int i0 = 0; i0 != x0.size(); ++i0) {
4372           for (int i7 = 0; i7 != x7.size(); ++i7) {
4373             for (int i6 = 0; i6 != x6.size(); ++i6) {
4374               for (int i4 = 0; i4 != x4.size(); ++i4) {
4375                 odata[i7+x7.size()*(i0+x0.size()*(i4+x1.size()*(i6)))]
4376                   += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i5+x5.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
4377               }
4378             }
4379           }
4380         }
4381       }
4382     }
4383   }
4384   if (x3 == x6) {
4385     std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x0, x5, x4, x1, x2);
4386     for (int i2 = 0; i2 != x2.size(); ++i2) {
4387       for (int i1 = 0; i1 != x1.size(); ++i1) {
4388         for (int i4 = 0; i4 != x4.size(); ++i4) {
4389           for (int i5 = 0; i5 != x5.size(); ++i5) {
4390             for (int i0 = 0; i0 != x0.size(); ++i0) {
4391               for (int i7 = 0; i7 != x7.size(); ++i7) {
4392                 for (int i6 = 0; i6 != x6.size(); ++i6) {
4393                   odata[i7+x7.size()*(i0+x0.size()*(i1+x1.size()*(i6)))]
4394                     += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i2)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
4395                 }
4396               }
4397             }
4398           }
4399         }
4400       }
4401     }
4402   }
4403   if (x1 == x2 && x3 == x4 && x5 == x6) {
4404     std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
4405     for (int i0 = 0; i0 != x0.size(); ++i0) {
4406       for (int i7 = 0; i7 != x7.size(); ++i7) {
4407         for (int i2 = 0; i2 != x2.size(); ++i2) {
4408           for (int i4 = 0; i4 != x4.size(); ++i4) {
4409             for (int i6 = 0; i6 != x6.size(); ++i6) {
4410               odata[i7+x7.size()*(i0+x0.size()*(i2+x1.size()*(i6)))]
4411                 += (-2.0) * i0data[i7+x7.size()*(i0)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
4412             }
4413           }
4414         }
4415       }
4416     }
4417   }
4418   if (x1 == x2 && x5 == x6) {
4419     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x3, x4);
4420     for (int i4 = 0; i4 != x4.size(); ++i4) {
4421       for (int i3 = 0; i3 != x3.size(); ++i3) {
4422         for (int i0 = 0; i0 != x0.size(); ++i0) {
4423           for (int i7 = 0; i7 != x7.size(); ++i7) {
4424             for (int i2 = 0; i2 != x2.size(); ++i2) {
4425               for (int i6 = 0; i6 != x6.size(); ++i6) {
4426                 odata[i7+x7.size()*(i0+x0.size()*(i2+x1.size()*(i6)))]
4427                   += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i3+x3.size()*(i4)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4428               }
4429             }
4430           }
4431         }
4432       }
4433     }
4434   }
4435   if (x5 == x6 && x1 == x4) {
4436     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x3, x2);
4437     for (int i2 = 0; i2 != x2.size(); ++i2) {
4438       for (int i3 = 0; i3 != x3.size(); ++i3) {
4439         for (int i0 = 0; i0 != x0.size(); ++i0) {
4440           for (int i7 = 0; i7 != x7.size(); ++i7) {
4441             for (int i6 = 0; i6 != x6.size(); ++i6) {
4442               for (int i4 = 0; i4 != x4.size(); ++i4) {
4443                 odata[i7+x7.size()*(i0+x0.size()*(i4+x1.size()*(i6)))]
4444                   += (-2.0) * i0data[i7+x7.size()*(i0+x0.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4445               }
4446             }
4447           }
4448         }
4449       }
4450     }
4451   }
4452   if (x3 == x4 && x5 == x6) {
4453     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x1, x2);
4454     for (int i2 = 0; i2 != x2.size(); ++i2) {
4455       for (int i1 = 0; i1 != x1.size(); ++i1) {
4456         for (int i0 = 0; i0 != x0.size(); ++i0) {
4457           for (int i7 = 0; i7 != x7.size(); ++i7) {
4458             for (int i4 = 0; i4 != x4.size(); ++i4) {
4459               for (int i6 = 0; i6 != x6.size(); ++i6) {
4460                 odata[i7+x7.size()*(i0+x0.size()*(i1+x1.size()*(i6)))]
4461                   += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i1+x1.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
4462               }
4463             }
4464           }
4465         }
4466       }
4467     }
4468   }
4469   if (x5 == x6) {
4470     std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x0, x1, x4, x3, x2);
4471     for (int i2 = 0; i2 != x2.size(); ++i2) {
4472       for (int i3 = 0; i3 != x3.size(); ++i3) {
4473         for (int i4 = 0; i4 != x4.size(); ++i4) {
4474           for (int i1 = 0; i1 != x1.size(); ++i1) {
4475             for (int i0 = 0; i0 != x0.size(); ++i0) {
4476               for (int i7 = 0; i7 != x7.size(); ++i7) {
4477                 for (int i6 = 0; i6 != x6.size(); ++i6) {
4478                   odata[i7+x7.size()*(i0+x0.size()*(i1+x1.size()*(i6)))]
4479                     += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4480                 }
4481               }
4482             }
4483           }
4484         }
4485       }
4486     }
4487   }
4488   out()->add_block(odata, x7, x0, x1, x6);
4489 }
4490 
compute()4491 void Task23::Task_local::compute() {
4492   const Index x7 = b(0);
4493   const Index x6 = b(1);
4494   const Index x1 = b(2);
4495   const Index x0 = b(3);
4496   const Index x5 = b(4);
4497   const Index x4 = b(5);
4498   const Index x3 = b(6);
4499   const Index x2 = b(7);
4500   // tensor label: Gamma117
4501   std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x6, x1, x0)]);
4502   std::fill_n(odata.get(), out()->get_size(x7, x6, x1, x0), 0.0);
4503   // associated with merged
4504   std::unique_ptr<double[]> fdata = in(4)->get_block(x5, x4, x3, x2);
4505   if (x7 == x4 && x1 == x6) {
4506     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x2);
4507     for (int i2 = 0; i2 != x2.size(); ++i2) {
4508       for (int i3 = 0; i3 != x3.size(); ++i3) {
4509         for (int i0 = 0; i0 != x0.size(); ++i0) {
4510           for (int i5 = 0; i5 != x5.size(); ++i5) {
4511             for (int i4 = 0; i4 != x4.size(); ++i4) {
4512               for (int i6 = 0; i6 != x6.size(); ++i6) {
4513                 odata[i4+x7.size()*(i6+x6.size()*(i6+x1.size()*(i0)))]
4514                   += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4515               }
4516             }
4517           }
4518         }
4519       }
4520     }
4521   }
4522   if (x7 == x4 && x1 == x2) {
4523     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x6, x3, x0);
4524     for (int i0 = 0; i0 != x0.size(); ++i0) {
4525       for (int i3 = 0; i3 != x3.size(); ++i3) {
4526         for (int i6 = 0; i6 != x6.size(); ++i6) {
4527           for (int i5 = 0; i5 != x5.size(); ++i5) {
4528             for (int i4 = 0; i4 != x4.size(); ++i4) {
4529               for (int i2 = 0; i2 != x2.size(); ++i2) {
4530                 odata[i4+x7.size()*(i6+x6.size()*(i2+x1.size()*(i0)))]
4531                   += (1.0) * i0data[i5+x5.size()*(i6+x6.size()*(i3+x3.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4532               }
4533             }
4534           }
4535         }
4536       }
4537     }
4538   }
4539   if (x7 == x2 && x1 == x4) {
4540     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x6);
4541     for (int i6 = 0; i6 != x6.size(); ++i6) {
4542       for (int i3 = 0; i3 != x3.size(); ++i3) {
4543         for (int i0 = 0; i0 != x0.size(); ++i0) {
4544           for (int i5 = 0; i5 != x5.size(); ++i5) {
4545             for (int i2 = 0; i2 != x2.size(); ++i2) {
4546               for (int i4 = 0; i4 != x4.size(); ++i4) {
4547                 odata[i2+x7.size()*(i6+x6.size()*(i4+x1.size()*(i0)))]
4548                   += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i6)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4549               }
4550             }
4551           }
4552         }
4553       }
4554     }
4555   }
4556   if (x7 == x4) {
4557     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x6, x3, x2, x1, x0);
4558     for (int i0 = 0; i0 != x0.size(); ++i0) {
4559       for (int i1 = 0; i1 != x1.size(); ++i1) {
4560         for (int i2 = 0; i2 != x2.size(); ++i2) {
4561           for (int i3 = 0; i3 != x3.size(); ++i3) {
4562             for (int i6 = 0; i6 != x6.size(); ++i6) {
4563               for (int i5 = 0; i5 != x5.size(); ++i5) {
4564                 for (int i4 = 0; i4 != x4.size(); ++i4) {
4565                   odata[i4+x7.size()*(i6+x6.size()*(i1+x1.size()*(i0)))]
4566                     += (1.0) * i0data[i5+x5.size()*(i6+x6.size()*(i3+x3.size()*(i2+x2.size()*(i1+x1.size()*(i0)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4567                 }
4568               }
4569             }
4570           }
4571         }
4572       }
4573     }
4574   }
4575   if (x3 == x4 && x7 == x2 && x1 == x6) {
4576     std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
4577     for (int i0 = 0; i0 != x0.size(); ++i0) {
4578       for (int i5 = 0; i5 != x5.size(); ++i5) {
4579         for (int i4 = 0; i4 != x4.size(); ++i4) {
4580           for (int i2 = 0; i2 != x2.size(); ++i2) {
4581             for (int i6 = 0; i6 != x6.size(); ++i6) {
4582               odata[i2+x7.size()*(i6+x6.size()*(i6+x1.size()*(i0)))]
4583                 += (1.0) * i0data[i5+x5.size()*(i0)] * fdata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
4584             }
4585           }
4586         }
4587       }
4588     }
4589   }
4590   if (x7 == x2 && x1 == x6) {
4591     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x0);
4592     for (int i0 = 0; i0 != x0.size(); ++i0) {
4593       for (int i3 = 0; i3 != x3.size(); ++i3) {
4594         for (int i4 = 0; i4 != x4.size(); ++i4) {
4595           for (int i5 = 0; i5 != x5.size(); ++i5) {
4596             for (int i2 = 0; i2 != x2.size(); ++i2) {
4597               for (int i6 = 0; i6 != x6.size(); ++i6) {
4598                 odata[i2+x7.size()*(i6+x6.size()*(i6+x1.size()*(i0)))]
4599                   += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4600               }
4601             }
4602           }
4603         }
4604       }
4605     }
4606   }
4607   if (x3 == x4 && x7 == x2) {
4608     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x6, x1, x0);
4609     for (int i0 = 0; i0 != x0.size(); ++i0) {
4610       for (int i1 = 0; i1 != x1.size(); ++i1) {
4611         for (int i6 = 0; i6 != x6.size(); ++i6) {
4612           for (int i5 = 0; i5 != x5.size(); ++i5) {
4613             for (int i4 = 0; i4 != x4.size(); ++i4) {
4614               for (int i2 = 0; i2 != x2.size(); ++i2) {
4615                 odata[i2+x7.size()*(i6+x6.size()*(i1+x1.size()*(i0)))]
4616                   += (1.0) * i0data[i5+x5.size()*(i6+x6.size()*(i1+x1.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
4617               }
4618             }
4619           }
4620         }
4621       }
4622     }
4623   }
4624   if (x7 == x2) {
4625     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x3, x6, x1, x0);
4626     for (int i0 = 0; i0 != x0.size(); ++i0) {
4627       for (int i1 = 0; i1 != x1.size(); ++i1) {
4628         for (int i6 = 0; i6 != x6.size(); ++i6) {
4629           for (int i3 = 0; i3 != x3.size(); ++i3) {
4630             for (int i4 = 0; i4 != x4.size(); ++i4) {
4631               for (int i5 = 0; i5 != x5.size(); ++i5) {
4632                 for (int i2 = 0; i2 != x2.size(); ++i2) {
4633                   odata[i2+x7.size()*(i6+x6.size()*(i1+x1.size()*(i0)))]
4634                     += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i6+x6.size()*(i1+x1.size()*(i0)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4635                 }
4636               }
4637             }
4638           }
4639         }
4640       }
4641     }
4642   }
4643   if (x3 == x6 && x1 == x2) {
4644     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x5, x4);
4645     for (int i4 = 0; i4 != x4.size(); ++i4) {
4646       for (int i5 = 0; i5 != x5.size(); ++i5) {
4647         for (int i0 = 0; i0 != x0.size(); ++i0) {
4648           for (int i7 = 0; i7 != x7.size(); ++i7) {
4649             for (int i6 = 0; i6 != x6.size(); ++i6) {
4650               for (int i2 = 0; i2 != x2.size(); ++i2) {
4651                 odata[i7+x7.size()*(i6+x6.size()*(i2+x1.size()*(i0)))]
4652                   += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
4653               }
4654             }
4655           }
4656         }
4657       }
4658     }
4659   }
4660   if (x3 == x6 && x1 == x4) {
4661     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x2, x5, x0);
4662     for (int i0 = 0; i0 != x0.size(); ++i0) {
4663       for (int i5 = 0; i5 != x5.size(); ++i5) {
4664         for (int i2 = 0; i2 != x2.size(); ++i2) {
4665           for (int i7 = 0; i7 != x7.size(); ++i7) {
4666             for (int i6 = 0; i6 != x6.size(); ++i6) {
4667               for (int i4 = 0; i4 != x4.size(); ++i4) {
4668                 odata[i7+x7.size()*(i6+x6.size()*(i4+x1.size()*(i0)))]
4669                   += (-1.0) * i0data[i7+x7.size()*(i2+x2.size()*(i5+x5.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
4670               }
4671             }
4672           }
4673         }
4674       }
4675     }
4676   }
4677   if (x3 == x6) {
4678     std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x2, x5, x4, x1, x0);
4679     for (int i0 = 0; i0 != x0.size(); ++i0) {
4680       for (int i1 = 0; i1 != x1.size(); ++i1) {
4681         for (int i4 = 0; i4 != x4.size(); ++i4) {
4682           for (int i5 = 0; i5 != x5.size(); ++i5) {
4683             for (int i2 = 0; i2 != x2.size(); ++i2) {
4684               for (int i7 = 0; i7 != x7.size(); ++i7) {
4685                 for (int i6 = 0; i6 != x6.size(); ++i6) {
4686                   odata[i7+x7.size()*(i6+x6.size()*(i1+x1.size()*(i0)))]
4687                     += (-1.0) * i0data[i7+x7.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
4688                 }
4689               }
4690             }
4691           }
4692         }
4693       }
4694     }
4695   }
4696   if (x5 == x6 && x3 == x4 && x1 == x2) {
4697     std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
4698     for (int i0 = 0; i0 != x0.size(); ++i0) {
4699       for (int i7 = 0; i7 != x7.size(); ++i7) {
4700         for (int i6 = 0; i6 != x6.size(); ++i6) {
4701           for (int i4 = 0; i4 != x4.size(); ++i4) {
4702             for (int i2 = 0; i2 != x2.size(); ++i2) {
4703               odata[i7+x7.size()*(i6+x6.size()*(i2+x1.size()*(i0)))]
4704                 += (-1.0) * i0data[i7+x7.size()*(i0)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
4705             }
4706           }
4707         }
4708       }
4709     }
4710   }
4711   if (x1 == x2 && x5 == x6) {
4712     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x4, x3, x0);
4713     for (int i0 = 0; i0 != x0.size(); ++i0) {
4714       for (int i3 = 0; i3 != x3.size(); ++i3) {
4715         for (int i4 = 0; i4 != x4.size(); ++i4) {
4716           for (int i7 = 0; i7 != x7.size(); ++i7) {
4717             for (int i2 = 0; i2 != x2.size(); ++i2) {
4718               for (int i6 = 0; i6 != x6.size(); ++i6) {
4719                 odata[i7+x7.size()*(i6+x6.size()*(i2+x1.size()*(i0)))]
4720                   += (-1.0) * i0data[i7+x7.size()*(i4+x4.size()*(i3+x3.size()*(i0)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4721               }
4722             }
4723           }
4724         }
4725       }
4726     }
4727   }
4728   if (x1 == x4 && x5 == x6) {
4729     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x3, x2);
4730     for (int i2 = 0; i2 != x2.size(); ++i2) {
4731       for (int i3 = 0; i3 != x3.size(); ++i3) {
4732         for (int i0 = 0; i0 != x0.size(); ++i0) {
4733           for (int i7 = 0; i7 != x7.size(); ++i7) {
4734             for (int i4 = 0; i4 != x4.size(); ++i4) {
4735               for (int i6 = 0; i6 != x6.size(); ++i6) {
4736                 odata[i7+x7.size()*(i6+x6.size()*(i4+x1.size()*(i0)))]
4737                   += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4738               }
4739             }
4740           }
4741         }
4742       }
4743     }
4744   }
4745   if (x5 == x6 && x3 == x4) {
4746     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x2, x1, x0);
4747     for (int i0 = 0; i0 != x0.size(); ++i0) {
4748       for (int i1 = 0; i1 != x1.size(); ++i1) {
4749         for (int i2 = 0; i2 != x2.size(); ++i2) {
4750           for (int i7 = 0; i7 != x7.size(); ++i7) {
4751             for (int i6 = 0; i6 != x6.size(); ++i6) {
4752               for (int i4 = 0; i4 != x4.size(); ++i4) {
4753                 odata[i7+x7.size()*(i6+x6.size()*(i1+x1.size()*(i0)))]
4754                   += (-1.0) * i0data[i7+x7.size()*(i2+x2.size()*(i1+x1.size()*(i0)))] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
4755               }
4756             }
4757           }
4758         }
4759       }
4760     }
4761   }
4762   if (x5 == x6) {
4763     std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x4, x3, x2, x1, x0);
4764     for (int i0 = 0; i0 != x0.size(); ++i0) {
4765       for (int i1 = 0; i1 != x1.size(); ++i1) {
4766         for (int i2 = 0; i2 != x2.size(); ++i2) {
4767           for (int i3 = 0; i3 != x3.size(); ++i3) {
4768             for (int i4 = 0; i4 != x4.size(); ++i4) {
4769               for (int i7 = 0; i7 != x7.size(); ++i7) {
4770                 for (int i6 = 0; i6 != x6.size(); ++i6) {
4771                   odata[i7+x7.size()*(i6+x6.size()*(i1+x1.size()*(i0)))]
4772                     += (-1.0) * i0data[i7+x7.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
4773                 }
4774               }
4775             }
4776           }
4777         }
4778       }
4779     }
4780   }
4781   out()->add_block(odata, x7, x6, x1, x0);
4782 }
4783 
compute()4784 void Task24::Task_local::compute() {
4785   const Index x5 = b(0);
4786   const Index x2 = b(1);
4787   const Index x4 = b(2);
4788   const Index x3 = b(3);
4789   const Index x1 = b(4);
4790   const Index x0 = b(5);
4791   // tensor label: Gamma40
4792   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x2, x4, x3, x1, x0)]);
4793   std::fill_n(odata.get(), out()->get_size(x5, x2, x4, x3, x1, x0), 0.0);
4794   {
4795     if (x1 == x2) {
4796       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x3);
4797       for (int i0 = 0; i0 != x0.size(); ++i0) {
4798         for (int i3 = 0; i3 != x3.size(); ++i3) {
4799           for (int i4 = 0; i4 != x4.size(); ++i4) {
4800             for (int i2 = 0; i2 != x2.size(); ++i2) {
4801               for (int i5 = 0; i5 != x5.size(); ++i5) {
4802                 odata[i5+x5.size()*(i2+x2.size()*(i4+x4.size()*(i3+x3.size()*(i2+x1.size()*(i0)))))]
4803                   += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3)))];
4804               }
4805             }
4806           }
4807         }
4808       }
4809     }
4810   }
4811   {
4812     if (x1 == x3) {
4813       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x2, x4, x0);
4814       for (int i0 = 0; i0 != x0.size(); ++i0) {
4815         for (int i3 = 0; i3 != x3.size(); ++i3) {
4816           for (int i4 = 0; i4 != x4.size(); ++i4) {
4817             for (int i2 = 0; i2 != x2.size(); ++i2) {
4818               for (int i5 = 0; i5 != x5.size(); ++i5) {
4819                 odata[i5+x5.size()*(i2+x2.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
4820                   += (1.0) * i0data[i5+x5.size()*(i2+x2.size()*(i4+x4.size()*(i0)))];
4821               }
4822             }
4823           }
4824         }
4825       }
4826     }
4827   }
4828   {
4829     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2, x4, x3, x1, x0);
4830     sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x2.size(), x4.size(), x3.size(), x1.size(), x0.size());
4831   }
4832   out()->add_block(odata, x5, x2, x4, x3, x1, x0);
4833 }
4834 
compute()4835 void Task25::Task_local::compute() {
4836   const Index x5 = b(0);
4837   const Index x0 = b(1);
4838   const Index x3 = b(2);
4839   const Index x4 = b(3);
4840   const Index x2 = b(4);
4841   const Index x1 = b(5);
4842   // tensor label: Gamma48
4843   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x3, x4, x2, x1)]);
4844   std::fill_n(odata.get(), out()->get_size(x5, x0, x3, x4, x2, x1), 0.0);
4845   {
4846     if (x2 == x4) {
4847       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x3, x1);
4848       for (int i1 = 0; i1 != x1.size(); ++i1) {
4849         for (int i4 = 0; i4 != x4.size(); ++i4) {
4850           for (int i3 = 0; i3 != x3.size(); ++i3) {
4851             for (int i0 = 0; i0 != x0.size(); ++i0) {
4852               for (int i5 = 0; i5 != x5.size(); ++i5) {
4853                 odata[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i4+x4.size()*(i4+x2.size()*(i1)))))]
4854                   += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i1)))];
4855               }
4856             }
4857           }
4858         }
4859       }
4860     }
4861   }
4862   {
4863     if (x3 == x4) {
4864       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x2, x1);
4865       for (int i1 = 0; i1 != x1.size(); ++i1) {
4866         for (int i2 = 0; i2 != x2.size(); ++i2) {
4867           for (int i4 = 0; i4 != x4.size(); ++i4) {
4868             for (int i0 = 0; i0 != x0.size(); ++i0) {
4869               for (int i5 = 0; i5 != x5.size(); ++i5) {
4870                 odata[i5+x5.size()*(i0+x0.size()*(i4+x3.size()*(i4+x4.size()*(i2+x2.size()*(i1)))))]
4871                   += (2.0) * i0data[i5+x5.size()*(i0+x0.size()*(i2+x2.size()*(i1)))];
4872               }
4873             }
4874           }
4875         }
4876       }
4877     }
4878   }
4879   {
4880     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x4, x2, x1);
4881     sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x5.size(), x0.size(), x3.size(), x4.size(), x2.size(), x1.size());
4882   }
4883   out()->add_block(odata, x5, x0, x3, x4, x2, x1);
4884 }
4885 
compute()4886 void Task26::Task_local::compute() {
4887   const Index x5 = b(0);
4888   const Index x4 = b(1);
4889   const Index x3 = b(2);
4890   const Index x0 = b(3);
4891   const Index x2 = b(4);
4892   const Index x1 = b(5);
4893   // tensor label: Gamma49
4894   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x3, x0, x2, x1)]);
4895   std::fill_n(odata.get(), out()->get_size(x5, x4, x3, x0, x2, x1), 0.0);
4896   {
4897     if (x2 == x4) {
4898       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x1, x3, x0);
4899       for (int i1 = 0; i1 != x1.size(); ++i1) {
4900         for (int i0 = 0; i0 != x0.size(); ++i0) {
4901           for (int i3 = 0; i3 != x3.size(); ++i3) {
4902             for (int i4 = 0; i4 != x4.size(); ++i4) {
4903               for (int i5 = 0; i5 != x5.size(); ++i5) {
4904                 odata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i0+x0.size()*(i4+x2.size()*(i1)))))]
4905                   += (1.0) * i0data[i5+x5.size()*(i1+x1.size()*(i3+x3.size()*(i0)))];
4906               }
4907             }
4908           }
4909         }
4910       }
4911     }
4912   }
4913   {
4914     if (x3 == x4) {
4915       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x2, x1);
4916       for (int i1 = 0; i1 != x1.size(); ++i1) {
4917         for (int i2 = 0; i2 != x2.size(); ++i2) {
4918           for (int i0 = 0; i0 != x0.size(); ++i0) {
4919             for (int i4 = 0; i4 != x4.size(); ++i4) {
4920               for (int i5 = 0; i5 != x5.size(); ++i5) {
4921                 odata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i0+x0.size()*(i2+x2.size()*(i1)))))]
4922                   += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i2+x2.size()*(i1)))];
4923               }
4924             }
4925           }
4926         }
4927       }
4928     }
4929   }
4930   {
4931     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x0, x2, x1);
4932     sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x4.size(), x3.size(), x0.size(), x2.size(), x1.size());
4933   }
4934   out()->add_block(odata, x5, x4, x3, x0, x2, x1);
4935 }
4936 
compute()4937 void Task27::Task_local::compute() {
4938   const Index x3 = b(0);
4939   const Index x0 = b(1);
4940   const Index x2 = b(2);
4941   const Index x1 = b(3);
4942   // tensor label: Gamma50
4943   std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x0, x2, x1)]);
4944   std::fill_n(odata.get(), out()->get_size(x3, x0, x2, x1), 0.0);
4945   {
4946     std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0, x2, x1);
4947     sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x3.size(), x0.size(), x2.size(), x1.size());
4948   }
4949   out()->add_block(odata, x3, x0, x2, x1);
4950 }
4951 
compute()4952 void Task28::Task_local::compute() {
4953   const Index x5 = b(0);
4954   const Index x0 = b(1);
4955   const Index x4 = b(2);
4956   const Index x3 = b(3);
4957   const Index x2 = b(4);
4958   const Index x1 = b(5);
4959   // tensor label: Gamma52
4960   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x4, x3, x2, x1)]);
4961   std::fill_n(odata.get(), out()->get_size(x5, x0, x4, x3, x2, x1), 0.0);
4962   {
4963     if (x2 == x3) {
4964       std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x1);
4965       for (int i1 = 0; i1 != x1.size(); ++i1) {
4966         for (int i3 = 0; i3 != x3.size(); ++i3) {
4967           for (int i4 = 0; i4 != x4.size(); ++i4) {
4968             for (int i0 = 0; i0 != x0.size(); ++i0) {
4969               for (int i5 = 0; i5 != x5.size(); ++i5) {
4970                 odata[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i3+x2.size()*(i1)))))]
4971                   += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i1)))];
4972               }
4973             }
4974           }
4975         }
4976       }
4977     }
4978   }
4979   {
4980     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x4, x3, x2, x1);
4981     sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
4982   }
4983   out()->add_block(odata, x5, x0, x4, x3, x2, x1);
4984 }
4985 
compute()4986 void Task29::Task_local::compute() {
4987   const Index x7 = b(0);
4988   const Index x0 = b(1);
4989   const Index x6 = b(2);
4990   const Index x5 = b(3);
4991   const Index x2 = b(4);
4992   const Index x1 = b(5);
4993   const Index x4 = b(6);
4994   const Index x3 = b(7);
4995   // tensor label: Gamma100
4996   std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x0, x6, x5, x2, x1)]);
4997   std::fill_n(odata.get(), out()->get_size(x7, x0, x6, x5, x2, x1), 0.0);
4998   // associated with merged
4999   std::unique_ptr<double[]> fdata = in(3)->get_block(x4, x3);
5000   if (x6 == x3 && x2 == x5) {
5001     std::unique_ptr<double[]> i0data = in(0)->get_block(x4, x1, x7, x0);
5002     for (int i0 = 0; i0 != x0.size(); ++i0) {
5003       for (int i7 = 0; i7 != x7.size(); ++i7) {
5004         for (int i1 = 0; i1 != x1.size(); ++i1) {
5005           for (int i4 = 0; i4 != x4.size(); ++i4) {
5006             for (int i3 = 0; i3 != x3.size(); ++i3) {
5007               for (int i5 = 0; i5 != x5.size(); ++i5) {
5008                 odata[i7+x7.size()*(i0+x0.size()*(i3+x6.size()*(i5+x5.size()*(i5+x2.size()*(i1)))))]
5009                   += (1.0) * i0data[i4+x4.size()*(i1+x1.size()*(i7+x7.size()*(i0)))] * fdata[i4+x4.size()*(i3)];
5010               }
5011             }
5012           }
5013         }
5014       }
5015     }
5016   }
5017   if (x6 == x3) {
5018     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x5, x7, x0, x2, x1);
5019     for (int i1 = 0; i1 != x1.size(); ++i1) {
5020       for (int i2 = 0; i2 != x2.size(); ++i2) {
5021         for (int i0 = 0; i0 != x0.size(); ++i0) {
5022           for (int i7 = 0; i7 != x7.size(); ++i7) {
5023             for (int i5 = 0; i5 != x5.size(); ++i5) {
5024               for (int i4 = 0; i4 != x4.size(); ++i4) {
5025                 for (int i3 = 0; i3 != x3.size(); ++i3) {
5026                   odata[i7+x7.size()*(i0+x0.size()*(i3+x6.size()*(i5+x5.size()*(i2+x2.size()*(i1)))))]
5027                     += (1.0) * i0data[i4+x4.size()*(i5+x5.size()*(i7+x7.size()*(i0+x0.size()*(i2+x2.size()*(i1)))))] * fdata[i4+x4.size()*(i3)];
5028                 }
5029               }
5030             }
5031           }
5032         }
5033       }
5034     }
5035   }
5036   if (x7 == x3 && x2 == x5) {
5037     std::unique_ptr<double[]> i0data = in(0)->get_block(x4, x0, x6, x1);
5038     for (int i1 = 0; i1 != x1.size(); ++i1) {
5039       for (int i6 = 0; i6 != x6.size(); ++i6) {
5040         for (int i0 = 0; i0 != x0.size(); ++i0) {
5041           for (int i4 = 0; i4 != x4.size(); ++i4) {
5042             for (int i3 = 0; i3 != x3.size(); ++i3) {
5043               for (int i5 = 0; i5 != x5.size(); ++i5) {
5044                 odata[i3+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i5+x2.size()*(i1)))))]
5045                   += (1.0) * i0data[i4+x4.size()*(i0+x0.size()*(i6+x6.size()*(i1)))] * fdata[i4+x4.size()*(i3)];
5046               }
5047             }
5048           }
5049         }
5050       }
5051     }
5052   }
5053   if (x7 == x3) {
5054     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x0, x6, x5, x2, x1);
5055     for (int i1 = 0; i1 != x1.size(); ++i1) {
5056       for (int i2 = 0; i2 != x2.size(); ++i2) {
5057         for (int i5 = 0; i5 != x5.size(); ++i5) {
5058           for (int i6 = 0; i6 != x6.size(); ++i6) {
5059             for (int i0 = 0; i0 != x0.size(); ++i0) {
5060               for (int i4 = 0; i4 != x4.size(); ++i4) {
5061                 for (int i3 = 0; i3 != x3.size(); ++i3) {
5062                   odata[i3+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i1)))))]
5063                     += (1.0) * i0data[i4+x4.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i1)))))] * fdata[i4+x4.size()*(i3)];
5064                 }
5065               }
5066             }
5067           }
5068         }
5069       }
5070     }
5071   }
5072   if (x4 == x5 && x2 == x3) {
5073     std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0, x6, x1);
5074     for (int i1 = 0; i1 != x1.size(); ++i1) {
5075       for (int i6 = 0; i6 != x6.size(); ++i6) {
5076         for (int i0 = 0; i0 != x0.size(); ++i0) {
5077           for (int i7 = 0; i7 != x7.size(); ++i7) {
5078             for (int i5 = 0; i5 != x5.size(); ++i5) {
5079               for (int i3 = 0; i3 != x3.size(); ++i3) {
5080                 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i3+x2.size()*(i1)))))]
5081                   += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1)))] * fdata[i5+x4.size()*(i3)];
5082               }
5083             }
5084           }
5085         }
5086       }
5087     }
5088   }
5089   if (x4 == x5) {
5090     std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x6, x3, x2, x1);
5091     for (int i1 = 0; i1 != x1.size(); ++i1) {
5092       for (int i2 = 0; i2 != x2.size(); ++i2) {
5093         for (int i3 = 0; i3 != x3.size(); ++i3) {
5094           for (int i6 = 0; i6 != x6.size(); ++i6) {
5095             for (int i0 = 0; i0 != x0.size(); ++i0) {
5096               for (int i7 = 0; i7 != x7.size(); ++i7) {
5097                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5098                   odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i1)))))]
5099                     += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i3+x3.size()*(i2+x2.size()*(i1)))))] * fdata[i5+x4.size()*(i3)];
5100                 }
5101               }
5102             }
5103           }
5104         }
5105       }
5106     }
5107   }
5108   out()->add_block(odata, x7, x0, x6, x5, x2, x1);
5109 }
5110 
compute()5111 void Task30::Task_local::compute() {
5112   const Index x9 = b(0);
5113   const Index x0 = b(1);
5114   const Index x8 = b(2);
5115   const Index x7 = b(3);
5116   const Index x2 = b(4);
5117   const Index x1 = b(5);
5118   const Index x6 = b(6);
5119   const Index x5 = b(7);
5120   const Index x4 = b(8);
5121   const Index x3 = b(9);
5122   // tensor label: Gamma101
5123   std::unique_ptr<double[]> odata(new double[out()->get_size(x9, x0, x8, x7, x2, x1)]);
5124   std::fill_n(odata.get(), out()->get_size(x9, x0, x8, x7, x2, x1), 0.0);
5125   // associated with merged
5126   std::unique_ptr<double[]> fdata = in(3)->get_block(x6, x5, x4, x3);
5127   if (x8 == x5 && x2 == x3) {
5128     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x7, x4, x1, x9, x0);
5129     for (int i0 = 0; i0 != x0.size(); ++i0) {
5130       for (int i9 = 0; i9 != x9.size(); ++i9) {
5131         for (int i1 = 0; i1 != x1.size(); ++i1) {
5132           for (int i4 = 0; i4 != x4.size(); ++i4) {
5133             for (int i7 = 0; i7 != x7.size(); ++i7) {
5134               for (int i6 = 0; i6 != x6.size(); ++i6) {
5135                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5136                   for (int i3 = 0; i3 != x3.size(); ++i3) {
5137                     odata[i9+x9.size()*(i0+x0.size()*(i5+x8.size()*(i7+x7.size()*(i3+x2.size()*(i1)))))]
5138                       += (1.0) * i0data[i6+x6.size()*(i7+x7.size()*(i4+x4.size()*(i1+x1.size()*(i9+x9.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5139                   }
5140                 }
5141               }
5142             }
5143           }
5144         }
5145       }
5146     }
5147   }
5148   if (x8 == x3 && x2 == x5) {
5149     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x1, x4, x7, x9, x0);
5150     for (int i0 = 0; i0 != x0.size(); ++i0) {
5151       for (int i9 = 0; i9 != x9.size(); ++i9) {
5152         for (int i7 = 0; i7 != x7.size(); ++i7) {
5153           for (int i4 = 0; i4 != x4.size(); ++i4) {
5154             for (int i1 = 0; i1 != x1.size(); ++i1) {
5155               for (int i6 = 0; i6 != x6.size(); ++i6) {
5156                 for (int i3 = 0; i3 != x3.size(); ++i3) {
5157                   for (int i5 = 0; i5 != x5.size(); ++i5) {
5158                     odata[i9+x9.size()*(i0+x0.size()*(i3+x8.size()*(i7+x7.size()*(i5+x2.size()*(i1)))))]
5159                       += (1.0) * i0data[i6+x6.size()*(i1+x1.size()*(i4+x4.size()*(i7+x7.size()*(i9+x9.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5160                   }
5161                 }
5162               }
5163             }
5164           }
5165         }
5166       }
5167     }
5168   }
5169   if (x8 == x3 && x9 == x5 && x2 == x7) {
5170     std::unique_ptr<double[]> i0data = in(0)->get_block(x6, x0, x4, x1);
5171     for (int i1 = 0; i1 != x1.size(); ++i1) {
5172       for (int i4 = 0; i4 != x4.size(); ++i4) {
5173         for (int i0 = 0; i0 != x0.size(); ++i0) {
5174           for (int i6 = 0; i6 != x6.size(); ++i6) {
5175             for (int i3 = 0; i3 != x3.size(); ++i3) {
5176               for (int i5 = 0; i5 != x5.size(); ++i5) {
5177                 for (int i7 = 0; i7 != x7.size(); ++i7) {
5178                   odata[i5+x9.size()*(i0+x0.size()*(i3+x8.size()*(i7+x7.size()*(i7+x2.size()*(i1)))))]
5179                     += (1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i1)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5180                 }
5181               }
5182             }
5183           }
5184         }
5185       }
5186     }
5187   }
5188   if (x9 == x3 && x8 == x5 && x2 == x7) {
5189     std::unique_ptr<double[]> i0data = in(0)->get_block(x6, x1, x4, x0);
5190     for (int i0 = 0; i0 != x0.size(); ++i0) {
5191       for (int i4 = 0; i4 != x4.size(); ++i4) {
5192         for (int i1 = 0; i1 != x1.size(); ++i1) {
5193           for (int i6 = 0; i6 != x6.size(); ++i6) {
5194             for (int i3 = 0; i3 != x3.size(); ++i3) {
5195               for (int i5 = 0; i5 != x5.size(); ++i5) {
5196                 for (int i7 = 0; i7 != x7.size(); ++i7) {
5197                   odata[i3+x9.size()*(i0+x0.size()*(i5+x8.size()*(i7+x7.size()*(i7+x2.size()*(i1)))))]
5198                     += (1.0) * i0data[i6+x6.size()*(i1+x1.size()*(i4+x4.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5199                 }
5200               }
5201             }
5202           }
5203         }
5204       }
5205     }
5206   }
5207   if (x8 == x5 && x2 == x7) {
5208     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x1, x4, x3, x9, x0);
5209     for (int i0 = 0; i0 != x0.size(); ++i0) {
5210       for (int i9 = 0; i9 != x9.size(); ++i9) {
5211         for (int i3 = 0; i3 != x3.size(); ++i3) {
5212           for (int i4 = 0; i4 != x4.size(); ++i4) {
5213             for (int i1 = 0; i1 != x1.size(); ++i1) {
5214               for (int i6 = 0; i6 != x6.size(); ++i6) {
5215                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5216                   for (int i7 = 0; i7 != x7.size(); ++i7) {
5217                     odata[i9+x9.size()*(i0+x0.size()*(i5+x8.size()*(i7+x7.size()*(i7+x2.size()*(i1)))))]
5218                       += (1.0) * i0data[i6+x6.size()*(i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i9+x9.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5219                   }
5220                 }
5221               }
5222             }
5223           }
5224         }
5225       }
5226     }
5227   }
5228   if (x9 == x5 && x2 == x7) {
5229     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x4, x3, x8, x1);
5230     for (int i1 = 0; i1 != x1.size(); ++i1) {
5231       for (int i8 = 0; i8 != x8.size(); ++i8) {
5232         for (int i3 = 0; i3 != x3.size(); ++i3) {
5233           for (int i4 = 0; i4 != x4.size(); ++i4) {
5234             for (int i0 = 0; i0 != x0.size(); ++i0) {
5235               for (int i6 = 0; i6 != x6.size(); ++i6) {
5236                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5237                   for (int i7 = 0; i7 != x7.size(); ++i7) {
5238                     odata[i5+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i7+x2.size()*(i1)))))]
5239                       += (1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i8+x8.size()*(i1)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5240                   }
5241                 }
5242               }
5243             }
5244           }
5245         }
5246       }
5247     }
5248   }
5249   if (x9 == x5 && x2 == x3) {
5250     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x4, x1, x8, x7);
5251     for (int i7 = 0; i7 != x7.size(); ++i7) {
5252       for (int i8 = 0; i8 != x8.size(); ++i8) {
5253         for (int i1 = 0; i1 != x1.size(); ++i1) {
5254           for (int i4 = 0; i4 != x4.size(); ++i4) {
5255             for (int i0 = 0; i0 != x0.size(); ++i0) {
5256               for (int i6 = 0; i6 != x6.size(); ++i6) {
5257                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5258                   for (int i3 = 0; i3 != x3.size(); ++i3) {
5259                     odata[i5+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i3+x2.size()*(i1)))))]
5260                       += (1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i1+x1.size()*(i8+x8.size()*(i7)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5261                   }
5262                 }
5263               }
5264             }
5265           }
5266         }
5267       }
5268     }
5269   }
5270   if (x9 == x3 && x2 == x5) {
5271     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x1, x4, x0, x8, x7);
5272     for (int i7 = 0; i7 != x7.size(); ++i7) {
5273       for (int i8 = 0; i8 != x8.size(); ++i8) {
5274         for (int i0 = 0; i0 != x0.size(); ++i0) {
5275           for (int i4 = 0; i4 != x4.size(); ++i4) {
5276             for (int i1 = 0; i1 != x1.size(); ++i1) {
5277               for (int i6 = 0; i6 != x6.size(); ++i6) {
5278                 for (int i3 = 0; i3 != x3.size(); ++i3) {
5279                   for (int i5 = 0; i5 != x5.size(); ++i5) {
5280                     odata[i3+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i5+x2.size()*(i1)))))]
5281                       += (1.0) * i0data[i6+x6.size()*(i1+x1.size()*(i4+x4.size()*(i0+x0.size()*(i8+x8.size()*(i7)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5282                   }
5283                 }
5284               }
5285             }
5286           }
5287         }
5288       }
5289     }
5290   }
5291   if (x9 == x5 && x8 == x3) {
5292     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x4, x7, x2, x1);
5293     for (int i1 = 0; i1 != x1.size(); ++i1) {
5294       for (int i2 = 0; i2 != x2.size(); ++i2) {
5295         for (int i7 = 0; i7 != x7.size(); ++i7) {
5296           for (int i4 = 0; i4 != x4.size(); ++i4) {
5297             for (int i0 = 0; i0 != x0.size(); ++i0) {
5298               for (int i6 = 0; i6 != x6.size(); ++i6) {
5299                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5300                   for (int i3 = 0; i3 != x3.size(); ++i3) {
5301                     odata[i5+x9.size()*(i0+x0.size()*(i3+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5302                       += (1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5303                   }
5304                 }
5305               }
5306             }
5307           }
5308         }
5309       }
5310     }
5311   }
5312   if (x9 == x3 && x8 == x5) {
5313     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x7, x4, x0, x2, x1);
5314     for (int i1 = 0; i1 != x1.size(); ++i1) {
5315       for (int i2 = 0; i2 != x2.size(); ++i2) {
5316         for (int i0 = 0; i0 != x0.size(); ++i0) {
5317           for (int i4 = 0; i4 != x4.size(); ++i4) {
5318             for (int i7 = 0; i7 != x7.size(); ++i7) {
5319               for (int i6 = 0; i6 != x6.size(); ++i6) {
5320                 for (int i3 = 0; i3 != x3.size(); ++i3) {
5321                   for (int i5 = 0; i5 != x5.size(); ++i5) {
5322                     odata[i3+x9.size()*(i0+x0.size()*(i5+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5323                       += (1.0) * i0data[i6+x6.size()*(i7+x7.size()*(i4+x4.size()*(i0+x0.size()*(i2+x2.size()*(i1)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5324                   }
5325                 }
5326               }
5327             }
5328           }
5329         }
5330       }
5331     }
5332   }
5333   if (x8 == x5) {
5334     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x7, x4, x3, x9, x0, x2, x1);
5335     for (int i1 = 0; i1 != x1.size(); ++i1) {
5336       for (int i2 = 0; i2 != x2.size(); ++i2) {
5337         for (int i0 = 0; i0 != x0.size(); ++i0) {
5338           for (int i9 = 0; i9 != x9.size(); ++i9) {
5339             for (int i3 = 0; i3 != x3.size(); ++i3) {
5340               for (int i4 = 0; i4 != x4.size(); ++i4) {
5341                 for (int i7 = 0; i7 != x7.size(); ++i7) {
5342                   for (int i6 = 0; i6 != x6.size(); ++i6) {
5343                     for (int i5 = 0; i5 != x5.size(); ++i5) {
5344                       odata[i9+x9.size()*(i0+x0.size()*(i5+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5345                         += (1.0) * i0data[i6+x6.size()*(i7+x7.size()*(i4+x4.size()*(i3+x3.size()*(i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i1)))))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5346                     }
5347                   }
5348                 }
5349               }
5350             }
5351           }
5352         }
5353       }
5354     }
5355   }
5356   if (x9 == x5) {
5357     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x0, x4, x3, x8, x7, x2, x1);
5358     for (int i1 = 0; i1 != x1.size(); ++i1) {
5359       for (int i2 = 0; i2 != x2.size(); ++i2) {
5360         for (int i7 = 0; i7 != x7.size(); ++i7) {
5361           for (int i8 = 0; i8 != x8.size(); ++i8) {
5362             for (int i3 = 0; i3 != x3.size(); ++i3) {
5363               for (int i4 = 0; i4 != x4.size(); ++i4) {
5364                 for (int i0 = 0; i0 != x0.size(); ++i0) {
5365                   for (int i6 = 0; i6 != x6.size(); ++i6) {
5366                     for (int i5 = 0; i5 != x5.size(); ++i5) {
5367                       odata[i5+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5368                         += (1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i8+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5369                     }
5370                   }
5371                 }
5372               }
5373             }
5374           }
5375         }
5376       }
5377     }
5378   }
5379   if (x8 == x3 && x4 == x5 && x2 == x7) {
5380     std::unique_ptr<double[]> i0data = in(0)->get_block(x6, x1, x9, x0);
5381     for (int i0 = 0; i0 != x0.size(); ++i0) {
5382       for (int i9 = 0; i9 != x9.size(); ++i9) {
5383         for (int i1 = 0; i1 != x1.size(); ++i1) {
5384           for (int i6 = 0; i6 != x6.size(); ++i6) {
5385             for (int i3 = 0; i3 != x3.size(); ++i3) {
5386               for (int i5 = 0; i5 != x5.size(); ++i5) {
5387                 for (int i7 = 0; i7 != x7.size(); ++i7) {
5388                   odata[i9+x9.size()*(i0+x0.size()*(i3+x8.size()*(i7+x7.size()*(i7+x2.size()*(i1)))))]
5389                     += (1.0) * i0data[i6+x6.size()*(i1+x1.size()*(i9+x9.size()*(i0)))] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
5390                 }
5391               }
5392             }
5393           }
5394         }
5395       }
5396     }
5397   }
5398   if (x8 == x3 && x2 == x7) {
5399     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x5, x4, x1, x9, x0);
5400     for (int i0 = 0; i0 != x0.size(); ++i0) {
5401       for (int i9 = 0; i9 != x9.size(); ++i9) {
5402         for (int i1 = 0; i1 != x1.size(); ++i1) {
5403           for (int i4 = 0; i4 != x4.size(); ++i4) {
5404             for (int i5 = 0; i5 != x5.size(); ++i5) {
5405               for (int i6 = 0; i6 != x6.size(); ++i6) {
5406                 for (int i3 = 0; i3 != x3.size(); ++i3) {
5407                   for (int i7 = 0; i7 != x7.size(); ++i7) {
5408                     odata[i9+x9.size()*(i0+x0.size()*(i3+x8.size()*(i7+x7.size()*(i7+x2.size()*(i1)))))]
5409                       += (1.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i9+x9.size()*(i0)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5410                   }
5411                 }
5412               }
5413             }
5414           }
5415         }
5416       }
5417     }
5418   }
5419   if (x4 == x5 && x9 == x3 && x2 == x7) {
5420     std::unique_ptr<double[]> i0data = in(0)->get_block(x6, x0, x8, x1);
5421     for (int i1 = 0; i1 != x1.size(); ++i1) {
5422       for (int i8 = 0; i8 != x8.size(); ++i8) {
5423         for (int i0 = 0; i0 != x0.size(); ++i0) {
5424           for (int i6 = 0; i6 != x6.size(); ++i6) {
5425             for (int i5 = 0; i5 != x5.size(); ++i5) {
5426               for (int i3 = 0; i3 != x3.size(); ++i3) {
5427                 for (int i7 = 0; i7 != x7.size(); ++i7) {
5428                   odata[i3+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i7+x2.size()*(i1)))))]
5429                     += (1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i8+x8.size()*(i1)))] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
5430                 }
5431               }
5432             }
5433           }
5434         }
5435       }
5436     }
5437   }
5438   if (x9 == x3 && x2 == x7) {
5439     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x5, x4, x0, x8, x1);
5440     for (int i1 = 0; i1 != x1.size(); ++i1) {
5441       for (int i8 = 0; i8 != x8.size(); ++i8) {
5442         for (int i0 = 0; i0 != x0.size(); ++i0) {
5443           for (int i4 = 0; i4 != x4.size(); ++i4) {
5444             for (int i5 = 0; i5 != x5.size(); ++i5) {
5445               for (int i6 = 0; i6 != x6.size(); ++i6) {
5446                 for (int i3 = 0; i3 != x3.size(); ++i3) {
5447                   for (int i7 = 0; i7 != x7.size(); ++i7) {
5448                     odata[i3+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i7+x2.size()*(i1)))))]
5449                       += (1.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i8+x8.size()*(i1)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5450                   }
5451                 }
5452               }
5453             }
5454           }
5455         }
5456       }
5457     }
5458   }
5459   if (x4 == x5 && x8 == x3) {
5460     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x7, x9, x0, x2, x1);
5461     for (int i1 = 0; i1 != x1.size(); ++i1) {
5462       for (int i2 = 0; i2 != x2.size(); ++i2) {
5463         for (int i0 = 0; i0 != x0.size(); ++i0) {
5464           for (int i9 = 0; i9 != x9.size(); ++i9) {
5465             for (int i7 = 0; i7 != x7.size(); ++i7) {
5466               for (int i6 = 0; i6 != x6.size(); ++i6) {
5467                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5468                   for (int i3 = 0; i3 != x3.size(); ++i3) {
5469                     odata[i9+x9.size()*(i0+x0.size()*(i3+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5470                       += (1.0) * i0data[i6+x6.size()*(i7+x7.size()*(i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i1)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
5471                   }
5472                 }
5473               }
5474             }
5475           }
5476         }
5477       }
5478     }
5479   }
5480   if (x8 == x3) {
5481     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x5, x4, x7, x9, x0, x2, x1);
5482     for (int i1 = 0; i1 != x1.size(); ++i1) {
5483       for (int i2 = 0; i2 != x2.size(); ++i2) {
5484         for (int i0 = 0; i0 != x0.size(); ++i0) {
5485           for (int i9 = 0; i9 != x9.size(); ++i9) {
5486             for (int i7 = 0; i7 != x7.size(); ++i7) {
5487               for (int i4 = 0; i4 != x4.size(); ++i4) {
5488                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5489                   for (int i6 = 0; i6 != x6.size(); ++i6) {
5490                     for (int i3 = 0; i3 != x3.size(); ++i3) {
5491                       odata[i9+x9.size()*(i0+x0.size()*(i3+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5492                         += (1.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i7+x7.size()*(i9+x9.size()*(i0+x0.size()*(i2+x2.size()*(i1)))))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5493                     }
5494                   }
5495                 }
5496               }
5497             }
5498           }
5499         }
5500       }
5501     }
5502   }
5503   if (x4 == x5 && x9 == x3) {
5504     std::unique_ptr<double[]> i0data = in(1)->get_block(x6, x0, x8, x7, x2, x1);
5505     for (int i1 = 0; i1 != x1.size(); ++i1) {
5506       for (int i2 = 0; i2 != x2.size(); ++i2) {
5507         for (int i7 = 0; i7 != x7.size(); ++i7) {
5508           for (int i8 = 0; i8 != x8.size(); ++i8) {
5509             for (int i0 = 0; i0 != x0.size(); ++i0) {
5510               for (int i6 = 0; i6 != x6.size(); ++i6) {
5511                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5512                   for (int i3 = 0; i3 != x3.size(); ++i3) {
5513                     odata[i3+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5514                       += (1.0) * i0data[i6+x6.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
5515                   }
5516                 }
5517               }
5518             }
5519           }
5520         }
5521       }
5522     }
5523   }
5524   if (x9 == x3) {
5525     std::unique_ptr<double[]> i0data = in(2)->get_block(x6, x5, x4, x0, x8, x7, x2, x1);
5526     for (int i1 = 0; i1 != x1.size(); ++i1) {
5527       for (int i2 = 0; i2 != x2.size(); ++i2) {
5528         for (int i7 = 0; i7 != x7.size(); ++i7) {
5529           for (int i8 = 0; i8 != x8.size(); ++i8) {
5530             for (int i0 = 0; i0 != x0.size(); ++i0) {
5531               for (int i4 = 0; i4 != x4.size(); ++i4) {
5532                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5533                   for (int i6 = 0; i6 != x6.size(); ++i6) {
5534                     for (int i3 = 0; i3 != x3.size(); ++i3) {
5535                       odata[i3+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5536                         += (1.0) * i0data[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))))] * fdata[i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5537                     }
5538                   }
5539                 }
5540               }
5541             }
5542           }
5543         }
5544       }
5545     }
5546   }
5547   if (x2 == x3 && x4 == x7) {
5548     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x8, x1, x6, x5);
5549     for (int i5 = 0; i5 != x5.size(); ++i5) {
5550       for (int i6 = 0; i6 != x6.size(); ++i6) {
5551         for (int i1 = 0; i1 != x1.size(); ++i1) {
5552           for (int i8 = 0; i8 != x8.size(); ++i8) {
5553             for (int i0 = 0; i0 != x0.size(); ++i0) {
5554               for (int i9 = 0; i9 != x9.size(); ++i9) {
5555                 for (int i3 = 0; i3 != x3.size(); ++i3) {
5556                   for (int i7 = 0; i7 != x7.size(); ++i7) {
5557                     odata[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i3+x2.size()*(i1)))))]
5558                       += (-1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i1+x1.size()*(i6+x6.size()*(i5)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
5559                   }
5560                 }
5561               }
5562             }
5563           }
5564         }
5565       }
5566     }
5567   }
5568   if (x2 == x5 && x4 == x7) {
5569     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x8, x3, x6, x1);
5570     for (int i1 = 0; i1 != x1.size(); ++i1) {
5571       for (int i6 = 0; i6 != x6.size(); ++i6) {
5572         for (int i3 = 0; i3 != x3.size(); ++i3) {
5573           for (int i8 = 0; i8 != x8.size(); ++i8) {
5574             for (int i0 = 0; i0 != x0.size(); ++i0) {
5575               for (int i9 = 0; i9 != x9.size(); ++i9) {
5576                 for (int i5 = 0; i5 != x5.size(); ++i5) {
5577                   for (int i7 = 0; i7 != x7.size(); ++i7) {
5578                     odata[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i5+x2.size()*(i1)))))]
5579                       += (-1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i3+x3.size()*(i6+x6.size()*(i1)))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
5580                   }
5581                 }
5582               }
5583             }
5584           }
5585         }
5586       }
5587     }
5588   }
5589   if (x4 == x7) {
5590     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x0, x8, x3, x6, x5, x2, x1);
5591     for (int i1 = 0; i1 != x1.size(); ++i1) {
5592       for (int i2 = 0; i2 != x2.size(); ++i2) {
5593         for (int i5 = 0; i5 != x5.size(); ++i5) {
5594           for (int i6 = 0; i6 != x6.size(); ++i6) {
5595             for (int i3 = 0; i3 != x3.size(); ++i3) {
5596               for (int i8 = 0; i8 != x8.size(); ++i8) {
5597                 for (int i0 = 0; i0 != x0.size(); ++i0) {
5598                   for (int i9 = 0; i9 != x9.size(); ++i9) {
5599                     for (int i7 = 0; i7 != x7.size(); ++i7) {
5600                       odata[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5601                         += (-1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i3+x3.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i1)))))))] * fdata[i6+x6.size()*(i5+x5.size()*(i7+x4.size()*(i3)))];
5602                     }
5603                   }
5604                 }
5605               }
5606             }
5607           }
5608         }
5609       }
5610     }
5611   }
5612   if (x6 == x7 && x4 == x5 && x2 == x3) {
5613     std::unique_ptr<double[]> i0data = in(0)->get_block(x9, x0, x8, x1);
5614     for (int i1 = 0; i1 != x1.size(); ++i1) {
5615       for (int i8 = 0; i8 != x8.size(); ++i8) {
5616         for (int i0 = 0; i0 != x0.size(); ++i0) {
5617           for (int i9 = 0; i9 != x9.size(); ++i9) {
5618             for (int i7 = 0; i7 != x7.size(); ++i7) {
5619               for (int i5 = 0; i5 != x5.size(); ++i5) {
5620                 for (int i3 = 0; i3 != x3.size(); ++i3) {
5621                   odata[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i3+x2.size()*(i1)))))]
5622                     += (-1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i1)))] * fdata[i7+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
5623                 }
5624               }
5625             }
5626           }
5627         }
5628       }
5629     }
5630   }
5631   if (x6 == x7 && x2 == x3) {
5632     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x8, x5, x4, x1);
5633     for (int i1 = 0; i1 != x1.size(); ++i1) {
5634       for (int i4 = 0; i4 != x4.size(); ++i4) {
5635         for (int i5 = 0; i5 != x5.size(); ++i5) {
5636           for (int i8 = 0; i8 != x8.size(); ++i8) {
5637             for (int i0 = 0; i0 != x0.size(); ++i0) {
5638               for (int i9 = 0; i9 != x9.size(); ++i9) {
5639                 for (int i7 = 0; i7 != x7.size(); ++i7) {
5640                   for (int i3 = 0; i3 != x3.size(); ++i3) {
5641                     odata[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i3+x2.size()*(i1)))))]
5642                       += (-1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i5+x5.size()*(i4+x4.size()*(i1)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5643                   }
5644                 }
5645               }
5646             }
5647           }
5648         }
5649       }
5650     }
5651   }
5652   if (x6 == x7 && x2 == x5) {
5653     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x8, x1, x4, x3);
5654     for (int i3 = 0; i3 != x3.size(); ++i3) {
5655       for (int i4 = 0; i4 != x4.size(); ++i4) {
5656         for (int i1 = 0; i1 != x1.size(); ++i1) {
5657           for (int i8 = 0; i8 != x8.size(); ++i8) {
5658             for (int i0 = 0; i0 != x0.size(); ++i0) {
5659               for (int i9 = 0; i9 != x9.size(); ++i9) {
5660                 for (int i7 = 0; i7 != x7.size(); ++i7) {
5661                   for (int i5 = 0; i5 != x5.size(); ++i5) {
5662                     odata[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i5+x2.size()*(i1)))))]
5663                       += (-1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i1+x1.size()*(i4+x4.size()*(i3)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5664                   }
5665                 }
5666               }
5667             }
5668           }
5669         }
5670       }
5671     }
5672   }
5673   if (x6 == x7 && x4 == x5) {
5674     std::unique_ptr<double[]> i0data = in(1)->get_block(x9, x0, x8, x3, x2, x1);
5675     for (int i1 = 0; i1 != x1.size(); ++i1) {
5676       for (int i2 = 0; i2 != x2.size(); ++i2) {
5677         for (int i3 = 0; i3 != x3.size(); ++i3) {
5678           for (int i8 = 0; i8 != x8.size(); ++i8) {
5679             for (int i0 = 0; i0 != x0.size(); ++i0) {
5680               for (int i9 = 0; i9 != x9.size(); ++i9) {
5681                 for (int i7 = 0; i7 != x7.size(); ++i7) {
5682                   for (int i5 = 0; i5 != x5.size(); ++i5) {
5683                     odata[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5684                       += (-1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i3+x3.size()*(i2+x2.size()*(i1)))))] * fdata[i7+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3)))];
5685                   }
5686                 }
5687               }
5688             }
5689           }
5690         }
5691       }
5692     }
5693   }
5694   if (x6 == x7) {
5695     std::unique_ptr<double[]> i0data = in(2)->get_block(x9, x0, x8, x5, x4, x3, x2, x1);
5696     for (int i1 = 0; i1 != x1.size(); ++i1) {
5697       for (int i2 = 0; i2 != x2.size(); ++i2) {
5698         for (int i3 = 0; i3 != x3.size(); ++i3) {
5699           for (int i4 = 0; i4 != x4.size(); ++i4) {
5700             for (int i5 = 0; i5 != x5.size(); ++i5) {
5701               for (int i8 = 0; i8 != x8.size(); ++i8) {
5702                 for (int i0 = 0; i0 != x0.size(); ++i0) {
5703                   for (int i9 = 0; i9 != x9.size(); ++i9) {
5704                     for (int i7 = 0; i7 != x7.size(); ++i7) {
5705                       odata[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i7+x7.size()*(i2+x2.size()*(i1)))))]
5706                         += (-1.0) * i0data[i9+x9.size()*(i0+x0.size()*(i8+x8.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i1)))))))] * fdata[i7+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3)))];
5707                     }
5708                   }
5709                 }
5710               }
5711             }
5712           }
5713         }
5714       }
5715     }
5716   }
5717   out()->add_block(odata, x9, x0, x8, x7, x2, x1);
5718 }
5719 
compute()5720 void Task31::Task_local::compute() {
5721   const Index x3 = b(0);
5722   const Index x0 = b(1);
5723   const Index x2 = b(2);
5724   const Index x1 = b(3);
5725   // tensor label: Gamma106
5726   std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x0)]);
5727   std::fill_n(odata.get(), out()->get_size(x3, x0), 0.0);
5728   // associated with merged
5729   std::unique_ptr<double[]> fdata = in(2)->get_block(x2, x1);
5730   if (x3 == x1) {
5731     std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
5732     for (int i0 = 0; i0 != x0.size(); ++i0) {
5733       for (int i2 = 0; i2 != x2.size(); ++i2) {
5734         for (int i1 = 0; i1 != x1.size(); ++i1) {
5735           odata[i1+x3.size()*(i0)]
5736             += (1.0) * i0data[i2+x2.size()*(i0)] * fdata[i2+x2.size()*(i1)];
5737         }
5738       }
5739     }
5740   }
5741   out()->add_block(odata, x3, x0);
5742 }
5743 
compute()5744 void Task32::Task_local::compute() {
5745   const Index x5 = b(0);
5746   const Index x0 = b(1);
5747   const Index x4 = b(2);
5748   const Index x3 = b(3);
5749   const Index x2 = b(4);
5750   const Index x1 = b(5);
5751   // tensor label: Gamma108
5752   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0)]);
5753   std::fill_n(odata.get(), out()->get_size(x5, x0), 0.0);
5754   // associated with merged
5755   std::unique_ptr<double[]> fdata = in(3)->get_block(x4, x3, x2, x1);
5756   if (x5 == x3) {
5757     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x0, x2, x1);
5758     for (int i1 = 0; i1 != x1.size(); ++i1) {
5759       for (int i2 = 0; i2 != x2.size(); ++i2) {
5760         for (int i0 = 0; i0 != x0.size(); ++i0) {
5761           for (int i4 = 0; i4 != x4.size(); ++i4) {
5762             for (int i3 = 0; i3 != x3.size(); ++i3) {
5763               odata[i3+x5.size()*(i0)]
5764                 += (1.0) * i0data[i4+x4.size()*(i0+x0.size()*(i2+x2.size()*(i1)))] * fdata[i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i1)))];
5765             }
5766           }
5767         }
5768       }
5769     }
5770   }
5771   if (x2 == x3 && x5 == x1) {
5772     std::unique_ptr<double[]> i0data = in(0)->get_block(x4, x0);
5773     for (int i0 = 0; i0 != x0.size(); ++i0) {
5774       for (int i4 = 0; i4 != x4.size(); ++i4) {
5775         for (int i3 = 0; i3 != x3.size(); ++i3) {
5776           for (int i1 = 0; i1 != x1.size(); ++i1) {
5777             odata[i1+x5.size()*(i0)]
5778               += (1.0) * i0data[i4+x4.size()*(i0)] * fdata[i4+x4.size()*(i3+x3.size()*(i3+x2.size()*(i1)))];
5779           }
5780         }
5781       }
5782     }
5783   }
5784   if (x5 == x1) {
5785     std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x3, x2, x0);
5786     for (int i0 = 0; i0 != x0.size(); ++i0) {
5787       for (int i2 = 0; i2 != x2.size(); ++i2) {
5788         for (int i3 = 0; i3 != x3.size(); ++i3) {
5789           for (int i4 = 0; i4 != x4.size(); ++i4) {
5790             for (int i1 = 0; i1 != x1.size(); ++i1) {
5791               odata[i1+x5.size()*(i0)]
5792                 += (1.0) * i0data[i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i0)))] * fdata[i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i1)))];
5793             }
5794           }
5795         }
5796       }
5797     }
5798   }
5799   out()->add_block(odata, x5, x0);
5800 }
5801 
compute()5802 void Task33::Task_local::compute() {
5803   const Index x0 = b(0);
5804   const Index x5 = b(1);
5805   const Index x1 = b(2);
5806   const Index x4 = b(3);
5807   const Index x3 = b(4);
5808   const Index x2 = b(5);
5809   // tensor label: Gamma92
5810   std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x5, x1, x4)]);
5811   std::fill_n(odata.get(), out()->get_size(x0, x5, x1, x4), 0.0);
5812   // associated with merged
5813   std::unique_ptr<double[]> fdata = in(4)->get_block(x3, x2);
5814   // rdm0 merged case
5815   if (x0 == x2 && x1 == x4 && x3 == x5) {
5816     std::unique_ptr<double[]> i0data = in(0)->get_block();
5817     for (int i2 = 0; i2 != x2.size(); ++i2) {
5818       for (int i4 = 0; i4 != x4.size(); ++i4) {
5819         for (int i5 = 0; i5 != x5.size(); ++i5) {
5820           odata[i2+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4)))]  += -4.0 * i0data[0] * fdata[i5+x3.size()*(i2)];
5821         }
5822       }
5823     }
5824   }
5825   // rdm0 merged case
5826   if (x1 == x5 && x3 == x4 && x0 == x2) {
5827     std::unique_ptr<double[]> i0data = in(0)->get_block();
5828     for (int i5 = 0; i5 != x5.size(); ++i5) {
5829       for (int i4 = 0; i4 != x4.size(); ++i4) {
5830         for (int i2 = 0; i2 != x2.size(); ++i2) {
5831           odata[i2+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4)))]  += 2.0 * i0data[0] * fdata[i4+x3.size()*(i2)];
5832         }
5833       }
5834     }
5835   }
5836   if (x3 == x4 && x0 == x2) {
5837     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x5);
5838     for (int i5 = 0; i5 != x5.size(); ++i5) {
5839       for (int i1 = 0; i1 != x1.size(); ++i1) {
5840         for (int i4 = 0; i4 != x4.size(); ++i4) {
5841           for (int i2 = 0; i2 != x2.size(); ++i2) {
5842             odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
5843               += (-1.0) * i0data[i1+x1.size()*(i5)] * fdata[i4+x3.size()*(i2)];
5844           }
5845         }
5846       }
5847     }
5848   }
5849   if (x3 == x5 && x0 == x2) {
5850     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x4);
5851     for (int i4 = 0; i4 != x4.size(); ++i4) {
5852       for (int i1 = 0; i1 != x1.size(); ++i1) {
5853         for (int i5 = 0; i5 != x5.size(); ++i5) {
5854           for (int i2 = 0; i2 != x2.size(); ++i2) {
5855             odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
5856               += (2.0) * i0data[i1+x1.size()*(i4)] * fdata[i5+x3.size()*(i2)];
5857           }
5858         }
5859       }
5860     }
5861   }
5862   // rdm0 merged case
5863   if (x3 == x5 && x1 == x2 && x0 == x4) {
5864     std::unique_ptr<double[]> i0data = in(0)->get_block();
5865     for (int i5 = 0; i5 != x5.size(); ++i5) {
5866       for (int i2 = 0; i2 != x2.size(); ++i2) {
5867         for (int i4 = 0; i4 != x4.size(); ++i4) {
5868           odata[i4+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]  += 2.0 * i0data[0] * fdata[i5+x3.size()*(i2)];
5869         }
5870       }
5871     }
5872   }
5873   if (x3 == x5 && x0 == x4) {
5874     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
5875     for (int i2 = 0; i2 != x2.size(); ++i2) {
5876       for (int i1 = 0; i1 != x1.size(); ++i1) {
5877         for (int i5 = 0; i5 != x5.size(); ++i5) {
5878           for (int i4 = 0; i4 != x4.size(); ++i4) {
5879             odata[i4+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
5880               += (-1.0) * i0data[i1+x1.size()*(i2)] * fdata[i5+x3.size()*(i2)];
5881           }
5882         }
5883       }
5884     }
5885   }
5886   // rdm0 merged case
5887   if (x3 == x4 && x1 == x2 && x0 == x5) {
5888     std::unique_ptr<double[]> i0data = in(0)->get_block();
5889     for (int i4 = 0; i4 != x4.size(); ++i4) {
5890       for (int i2 = 0; i2 != x2.size(); ++i2) {
5891         for (int i5 = 0; i5 != x5.size(); ++i5) {
5892           odata[i5+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]  += -4.0 * i0data[0] * fdata[i4+x3.size()*(i2)];
5893         }
5894       }
5895     }
5896   }
5897   if (x3 == x4 && x0 == x5) {
5898     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
5899     for (int i2 = 0; i2 != x2.size(); ++i2) {
5900       for (int i1 = 0; i1 != x1.size(); ++i1) {
5901         for (int i4 = 0; i4 != x4.size(); ++i4) {
5902           for (int i5 = 0; i5 != x5.size(); ++i5) {
5903             odata[i5+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
5904               += (2.0) * i0data[i1+x1.size()*(i2)] * fdata[i4+x3.size()*(i2)];
5905           }
5906         }
5907       }
5908     }
5909   }
5910   if (x3 == x4 && x1 == x2) {
5911     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x5);
5912     for (int i5 = 0; i5 != x5.size(); ++i5) {
5913       for (int i0 = 0; i0 != x0.size(); ++i0) {
5914         for (int i4 = 0; i4 != x4.size(); ++i4) {
5915           for (int i2 = 0; i2 != x2.size(); ++i2) {
5916             odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]
5917               += (2.0) * i0data[i0+x0.size()*(i5)] * fdata[i4+x3.size()*(i2)];
5918           }
5919         }
5920       }
5921     }
5922   }
5923   if (x3 == x5 && x1 == x2) {
5924     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x4);
5925     for (int i4 = 0; i4 != x4.size(); ++i4) {
5926       for (int i0 = 0; i0 != x0.size(); ++i0) {
5927         for (int i5 = 0; i5 != x5.size(); ++i5) {
5928           for (int i2 = 0; i2 != x2.size(); ++i2) {
5929             odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]
5930               += (-1.0) * i0data[i0+x0.size()*(i4)] * fdata[i5+x3.size()*(i2)];
5931           }
5932         }
5933       }
5934     }
5935   }
5936   if (x3 == x5 && x1 == x4) {
5937     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
5938     for (int i2 = 0; i2 != x2.size(); ++i2) {
5939       for (int i0 = 0; i0 != x0.size(); ++i0) {
5940         for (int i5 = 0; i5 != x5.size(); ++i5) {
5941           for (int i4 = 0; i4 != x4.size(); ++i4) {
5942             odata[i0+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4)))]
5943               += (2.0) * i0data[i0+x0.size()*(i2)] * fdata[i5+x3.size()*(i2)];
5944           }
5945         }
5946       }
5947     }
5948   }
5949   if (x3 == x4 && x1 == x5) {
5950     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
5951     for (int i2 = 0; i2 != x2.size(); ++i2) {
5952       for (int i0 = 0; i0 != x0.size(); ++i0) {
5953         for (int i4 = 0; i4 != x4.size(); ++i4) {
5954           for (int i5 = 0; i5 != x5.size(); ++i5) {
5955             odata[i0+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4)))]
5956               += (-1.0) * i0data[i0+x0.size()*(i2)] * fdata[i4+x3.size()*(i2)];
5957           }
5958         }
5959       }
5960     }
5961   }
5962   if (x3 == x4) {
5963     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x5, x1, x2);
5964     for (int i2 = 0; i2 != x2.size(); ++i2) {
5965       for (int i1 = 0; i1 != x1.size(); ++i1) {
5966         for (int i5 = 0; i5 != x5.size(); ++i5) {
5967           for (int i0 = 0; i0 != x0.size(); ++i0) {
5968             for (int i4 = 0; i4 != x4.size(); ++i4) {
5969               odata[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
5970                 += (-1.0) * i0data[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i2)))] * fdata[i4+x3.size()*(i2)];
5971             }
5972           }
5973         }
5974       }
5975     }
5976   }
5977   if (x3 == x5) {
5978     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x0, x2);
5979     for (int i2 = 0; i2 != x2.size(); ++i2) {
5980       for (int i0 = 0; i0 != x0.size(); ++i0) {
5981         for (int i4 = 0; i4 != x4.size(); ++i4) {
5982           for (int i1 = 0; i1 != x1.size(); ++i1) {
5983             for (int i5 = 0; i5 != x5.size(); ++i5) {
5984               odata[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
5985                 += (-1.0) * i0data[i1+x1.size()*(i4+x4.size()*(i0+x0.size()*(i2)))] * fdata[i5+x3.size()*(i2)];
5986             }
5987           }
5988         }
5989       }
5990     }
5991   }
5992   out()->add_block(odata, x0, x5, x1, x4);
5993 }
5994 
compute()5995 void Task34::Task_local::compute() {
5996   const Index x0 = b(0);
5997   const Index x7 = b(1);
5998   const Index x1 = b(2);
5999   const Index x6 = b(3);
6000   const Index x5 = b(4);
6001   const Index x4 = b(5);
6002   const Index x3 = b(6);
6003   const Index x2 = b(7);
6004   // tensor label: Gamma93
6005   std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x7, x1, x6)]);
6006   std::fill_n(odata.get(), out()->get_size(x0, x7, x1, x6), 0.0);
6007   // associated with merged
6008   std::unique_ptr<double[]> fdata = in(5)->get_block(x5, x4, x3, x2);
6009   if (x0 == x2 && x3 == x7 && x1 == x6) {
6010     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4);
6011     for (int i4 = 0; i4 != x4.size(); ++i4) {
6012       for (int i5 = 0; i5 != x5.size(); ++i5) {
6013         for (int i2 = 0; i2 != x2.size(); ++i2) {
6014           for (int i7 = 0; i7 != x7.size(); ++i7) {
6015             for (int i6 = 0; i6 != x6.size(); ++i6) {
6016               odata[i2+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
6017                 += (-4.0) * i0data[i5+x5.size()*(i4)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6018             }
6019           }
6020         }
6021       }
6022     }
6023   }
6024   if (x1 == x7 && x0 == x2 && x3 == x6) {
6025     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4);
6026     for (int i4 = 0; i4 != x4.size(); ++i4) {
6027       for (int i5 = 0; i5 != x5.size(); ++i5) {
6028         for (int i7 = 0; i7 != x7.size(); ++i7) {
6029           for (int i2 = 0; i2 != x2.size(); ++i2) {
6030             for (int i6 = 0; i6 != x6.size(); ++i6) {
6031               odata[i2+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
6032                 += (2.0) * i0data[i5+x5.size()*(i4)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6033             }
6034           }
6035         }
6036       }
6037     }
6038   }
6039   if (x3 == x7 && x0 == x4 && x1 == x6) {
6040     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2);
6041     for (int i2 = 0; i2 != x2.size(); ++i2) {
6042       for (int i5 = 0; i5 != x5.size(); ++i5) {
6043         for (int i7 = 0; i7 != x7.size(); ++i7) {
6044           for (int i4 = 0; i4 != x4.size(); ++i4) {
6045             for (int i6 = 0; i6 != x6.size(); ++i6) {
6046               odata[i4+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
6047                 += (2.0) * i0data[i5+x5.size()*(i2)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6048             }
6049           }
6050         }
6051       }
6052     }
6053   }
6054   if (x3 == x6 && x1 == x7 && x0 == x4) {
6055     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2);
6056     for (int i2 = 0; i2 != x2.size(); ++i2) {
6057       for (int i5 = 0; i5 != x5.size(); ++i5) {
6058         for (int i6 = 0; i6 != x6.size(); ++i6) {
6059           for (int i7 = 0; i7 != x7.size(); ++i7) {
6060             for (int i4 = 0; i4 != x4.size(); ++i4) {
6061               odata[i4+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
6062                 += (-1.0) * i0data[i5+x5.size()*(i2)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6063             }
6064           }
6065         }
6066       }
6067     }
6068   }
6069   if (x3 == x7 && x1 == x2 && x0 == x6) {
6070     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4);
6071     for (int i4 = 0; i4 != x4.size(); ++i4) {
6072       for (int i5 = 0; i5 != x5.size(); ++i5) {
6073         for (int i7 = 0; i7 != x7.size(); ++i7) {
6074           for (int i2 = 0; i2 != x2.size(); ++i2) {
6075             for (int i6 = 0; i6 != x6.size(); ++i6) {
6076               odata[i6+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6077                 += (2.0) * i0data[i5+x5.size()*(i4)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6078             }
6079           }
6080         }
6081       }
6082     }
6083   }
6084   if (x3 == x7 && x1 == x4 && x0 == x6) {
6085     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2);
6086     for (int i2 = 0; i2 != x2.size(); ++i2) {
6087       for (int i5 = 0; i5 != x5.size(); ++i5) {
6088         for (int i7 = 0; i7 != x7.size(); ++i7) {
6089           for (int i4 = 0; i4 != x4.size(); ++i4) {
6090             for (int i6 = 0; i6 != x6.size(); ++i6) {
6091               odata[i6+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6092                 += (-1.0) * i0data[i5+x5.size()*(i2)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6093             }
6094           }
6095         }
6096       }
6097     }
6098   }
6099   if (x3 == x7 && x0 == x6) {
6100     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x1, x2);
6101     for (int i2 = 0; i2 != x2.size(); ++i2) {
6102       for (int i1 = 0; i1 != x1.size(); ++i1) {
6103         for (int i4 = 0; i4 != x4.size(); ++i4) {
6104           for (int i5 = 0; i5 != x5.size(); ++i5) {
6105             for (int i7 = 0; i7 != x7.size(); ++i7) {
6106               for (int i6 = 0; i6 != x6.size(); ++i6) {
6107                 odata[i6+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6108                   += (-1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6109               }
6110             }
6111           }
6112         }
6113       }
6114     }
6115   }
6116   if (x3 == x6 && x1 == x2 && x0 == x7) {
6117     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4);
6118     for (int i4 = 0; i4 != x4.size(); ++i4) {
6119       for (int i5 = 0; i5 != x5.size(); ++i5) {
6120         for (int i6 = 0; i6 != x6.size(); ++i6) {
6121           for (int i2 = 0; i2 != x2.size(); ++i2) {
6122             for (int i7 = 0; i7 != x7.size(); ++i7) {
6123               odata[i7+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6124                 += (-4.0) * i0data[i5+x5.size()*(i4)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6125             }
6126           }
6127         }
6128       }
6129     }
6130   }
6131   if (x3 == x6 && x1 == x4 && x0 == x7) {
6132     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2);
6133     for (int i2 = 0; i2 != x2.size(); ++i2) {
6134       for (int i5 = 0; i5 != x5.size(); ++i5) {
6135         for (int i6 = 0; i6 != x6.size(); ++i6) {
6136           for (int i4 = 0; i4 != x4.size(); ++i4) {
6137             for (int i7 = 0; i7 != x7.size(); ++i7) {
6138               odata[i7+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6139                 += (2.0) * i0data[i5+x5.size()*(i2)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6140             }
6141           }
6142         }
6143       }
6144     }
6145   }
6146   if (x3 == x6 && x0 == x7) {
6147     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x1, x2);
6148     for (int i2 = 0; i2 != x2.size(); ++i2) {
6149       for (int i1 = 0; i1 != x1.size(); ++i1) {
6150         for (int i4 = 0; i4 != x4.size(); ++i4) {
6151           for (int i5 = 0; i5 != x5.size(); ++i5) {
6152             for (int i6 = 0; i6 != x6.size(); ++i6) {
6153               for (int i7 = 0; i7 != x7.size(); ++i7) {
6154                 odata[i7+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6155                   += (2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6156               }
6157             }
6158           }
6159         }
6160       }
6161     }
6162   }
6163   if (x3 == x7 && x1 == x6) {
6164     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x0, x2);
6165     for (int i2 = 0; i2 != x2.size(); ++i2) {
6166       for (int i0 = 0; i0 != x0.size(); ++i0) {
6167         for (int i4 = 0; i4 != x4.size(); ++i4) {
6168           for (int i5 = 0; i5 != x5.size(); ++i5) {
6169             for (int i7 = 0; i7 != x7.size(); ++i7) {
6170               for (int i6 = 0; i6 != x6.size(); ++i6) {
6171                 odata[i0+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
6172                   += (2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6173               }
6174             }
6175           }
6176         }
6177       }
6178     }
6179   }
6180   if (x3 == x6 && x1 == x7) {
6181     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x0, x2);
6182     for (int i2 = 0; i2 != x2.size(); ++i2) {
6183       for (int i0 = 0; i0 != x0.size(); ++i0) {
6184         for (int i4 = 0; i4 != x4.size(); ++i4) {
6185           for (int i5 = 0; i5 != x5.size(); ++i5) {
6186             for (int i6 = 0; i6 != x6.size(); ++i6) {
6187               for (int i7 = 0; i7 != x7.size(); ++i7) {
6188                 odata[i0+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
6189                   += (-1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6190               }
6191             }
6192           }
6193         }
6194       }
6195     }
6196   }
6197   // rdm0 merged case
6198   if (x3 == x6 && x1 == x4 && x0 == x2 && x5 == x7) {
6199     std::unique_ptr<double[]> i0data = in(0)->get_block();
6200     for (int i6 = 0; i6 != x6.size(); ++i6) {
6201       for (int i4 = 0; i4 != x4.size(); ++i4) {
6202         for (int i2 = 0; i2 != x2.size(); ++i2) {
6203           for (int i7 = 0; i7 != x7.size(); ++i7) {
6204             odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]  += 2.0 * i0data[0] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6205           }
6206         }
6207       }
6208     }
6209   }
6210   if (x0 == x2 && x1 == x4 && x3 == x6) {
6211     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x7);
6212     for (int i7 = 0; i7 != x7.size(); ++i7) {
6213       for (int i5 = 0; i5 != x5.size(); ++i5) {
6214         for (int i2 = 0; i2 != x2.size(); ++i2) {
6215           for (int i4 = 0; i4 != x4.size(); ++i4) {
6216             for (int i6 = 0; i6 != x6.size(); ++i6) {
6217               odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6218                 += (-1.0) * i0data[i5+x5.size()*(i7)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6219             }
6220           }
6221         }
6222       }
6223     }
6224   }
6225   // rdm0 merged case
6226   if (x3 == x7 && x1 == x4 && x0 == x2 && x5 == x6) {
6227     std::unique_ptr<double[]> i0data = in(0)->get_block();
6228     for (int i7 = 0; i7 != x7.size(); ++i7) {
6229       for (int i4 = 0; i4 != x4.size(); ++i4) {
6230         for (int i2 = 0; i2 != x2.size(); ++i2) {
6231           for (int i6 = 0; i6 != x6.size(); ++i6) {
6232             odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]  += -4.0 * i0data[0] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6233           }
6234         }
6235       }
6236     }
6237   }
6238   if (x0 == x2 && x1 == x4 && x3 == x7) {
6239     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x6);
6240     for (int i6 = 0; i6 != x6.size(); ++i6) {
6241       for (int i5 = 0; i5 != x5.size(); ++i5) {
6242         for (int i2 = 0; i2 != x2.size(); ++i2) {
6243           for (int i4 = 0; i4 != x4.size(); ++i4) {
6244             for (int i7 = 0; i7 != x7.size(); ++i7) {
6245               odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6246                 += (2.0) * i0data[i5+x5.size()*(i6)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6247             }
6248           }
6249         }
6250       }
6251     }
6252   }
6253   if (x0 == x2 && x1 == x4 && x5 == x6) {
6254     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x7);
6255     for (int i7 = 0; i7 != x7.size(); ++i7) {
6256       for (int i3 = 0; i3 != x3.size(); ++i3) {
6257         for (int i2 = 0; i2 != x2.size(); ++i2) {
6258           for (int i4 = 0; i4 != x4.size(); ++i4) {
6259             for (int i6 = 0; i6 != x6.size(); ++i6) {
6260               odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6261                 += (2.0) * i0data[i3+x3.size()*(i7)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6262             }
6263           }
6264         }
6265       }
6266     }
6267   }
6268   if (x0 == x2 && x1 == x4 && x5 == x7) {
6269     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x6);
6270     for (int i6 = 0; i6 != x6.size(); ++i6) {
6271       for (int i3 = 0; i3 != x3.size(); ++i3) {
6272         for (int i2 = 0; i2 != x2.size(); ++i2) {
6273           for (int i4 = 0; i4 != x4.size(); ++i4) {
6274             for (int i7 = 0; i7 != x7.size(); ++i7) {
6275               odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6276                 += (-1.0) * i0data[i3+x3.size()*(i6)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6277             }
6278           }
6279         }
6280       }
6281     }
6282   }
6283   // rdm0 merged case
6284   if (x0 == x2 && x1 == x6 && x3 == x4 && x5 == x7) {
6285     std::unique_ptr<double[]> i0data = in(0)->get_block();
6286     for (int i2 = 0; i2 != x2.size(); ++i2) {
6287       for (int i6 = 0; i6 != x6.size(); ++i6) {
6288         for (int i4 = 0; i4 != x4.size(); ++i4) {
6289           for (int i7 = 0; i7 != x7.size(); ++i7) {
6290             odata[i2+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]  += -4.0 * i0data[0] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6291           }
6292         }
6293       }
6294     }
6295   }
6296   if (x5 == x7 && x1 == x6 && x0 == x2) {
6297     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
6298     for (int i4 = 0; i4 != x4.size(); ++i4) {
6299       for (int i3 = 0; i3 != x3.size(); ++i3) {
6300         for (int i7 = 0; i7 != x7.size(); ++i7) {
6301           for (int i6 = 0; i6 != x6.size(); ++i6) {
6302             for (int i2 = 0; i2 != x2.size(); ++i2) {
6303               odata[i2+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
6304                 += (2.0) * i0data[i3+x3.size()*(i4)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6305             }
6306           }
6307         }
6308       }
6309     }
6310   }
6311   // rdm0 merged case
6312   if (x5 == x6 && x3 == x4 && x1 == x7 && x0 == x2) {
6313     std::unique_ptr<double[]> i0data = in(0)->get_block();
6314     for (int i6 = 0; i6 != x6.size(); ++i6) {
6315       for (int i4 = 0; i4 != x4.size(); ++i4) {
6316         for (int i7 = 0; i7 != x7.size(); ++i7) {
6317           for (int i2 = 0; i2 != x2.size(); ++i2) {
6318             odata[i2+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]  += 2.0 * i0data[0] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6319           }
6320         }
6321       }
6322     }
6323   }
6324   if (x5 == x6 && x1 == x7 && x0 == x2) {
6325     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
6326     for (int i4 = 0; i4 != x4.size(); ++i4) {
6327       for (int i3 = 0; i3 != x3.size(); ++i3) {
6328         for (int i6 = 0; i6 != x6.size(); ++i6) {
6329           for (int i7 = 0; i7 != x7.size(); ++i7) {
6330             for (int i2 = 0; i2 != x2.size(); ++i2) {
6331               odata[i2+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
6332                 += (-1.0) * i0data[i3+x3.size()*(i4)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6333             }
6334           }
6335         }
6336       }
6337     }
6338   }
6339   if (x5 == x6 && x3 == x4 && x0 == x2) {
6340     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x7);
6341     for (int i7 = 0; i7 != x7.size(); ++i7) {
6342       for (int i1 = 0; i1 != x1.size(); ++i1) {
6343         for (int i6 = 0; i6 != x6.size(); ++i6) {
6344           for (int i4 = 0; i4 != x4.size(); ++i4) {
6345             for (int i2 = 0; i2 != x2.size(); ++i2) {
6346               odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6347                 += (-1.0) * i0data[i1+x1.size()*(i7)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6348             }
6349           }
6350         }
6351       }
6352     }
6353   }
6354   if (x5 == x7 && x3 == x4 && x0 == x2) {
6355     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x6);
6356     for (int i6 = 0; i6 != x6.size(); ++i6) {
6357       for (int i1 = 0; i1 != x1.size(); ++i1) {
6358         for (int i7 = 0; i7 != x7.size(); ++i7) {
6359           for (int i4 = 0; i4 != x4.size(); ++i4) {
6360             for (int i2 = 0; i2 != x2.size(); ++i2) {
6361               odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6362                 += (2.0) * i0data[i1+x1.size()*(i6)] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6363             }
6364           }
6365         }
6366       }
6367     }
6368   }
6369   if (x5 == x7 && x3 == x6 && x0 == x2) {
6370     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x4);
6371     for (int i4 = 0; i4 != x4.size(); ++i4) {
6372       for (int i1 = 0; i1 != x1.size(); ++i1) {
6373         for (int i7 = 0; i7 != x7.size(); ++i7) {
6374           for (int i6 = 0; i6 != x6.size(); ++i6) {
6375             for (int i2 = 0; i2 != x2.size(); ++i2) {
6376               odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6377                 += (-1.0) * i0data[i1+x1.size()*(i4)] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6378             }
6379           }
6380         }
6381       }
6382     }
6383   }
6384   if (x3 == x6 && x0 == x2) {
6385     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x7, x5, x4);
6386     for (int i4 = 0; i4 != x4.size(); ++i4) {
6387       for (int i5 = 0; i5 != x5.size(); ++i5) {
6388         for (int i7 = 0; i7 != x7.size(); ++i7) {
6389           for (int i1 = 0; i1 != x1.size(); ++i1) {
6390             for (int i6 = 0; i6 != x6.size(); ++i6) {
6391               for (int i2 = 0; i2 != x2.size(); ++i2) {
6392                 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6393                   += (-1.0) * i0data[i1+x1.size()*(i7+x7.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6394               }
6395             }
6396           }
6397         }
6398       }
6399     }
6400   }
6401   if (x5 == x6 && x3 == x7 && x0 == x2) {
6402     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x4);
6403     for (int i4 = 0; i4 != x4.size(); ++i4) {
6404       for (int i1 = 0; i1 != x1.size(); ++i1) {
6405         for (int i6 = 0; i6 != x6.size(); ++i6) {
6406           for (int i7 = 0; i7 != x7.size(); ++i7) {
6407             for (int i2 = 0; i2 != x2.size(); ++i2) {
6408               odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6409                 += (2.0) * i0data[i1+x1.size()*(i4)] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6410             }
6411           }
6412         }
6413       }
6414     }
6415   }
6416   if (x3 == x7 && x0 == x2) {
6417     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x5, x4);
6418     for (int i4 = 0; i4 != x4.size(); ++i4) {
6419       for (int i5 = 0; i5 != x5.size(); ++i5) {
6420         for (int i6 = 0; i6 != x6.size(); ++i6) {
6421           for (int i1 = 0; i1 != x1.size(); ++i1) {
6422             for (int i7 = 0; i7 != x7.size(); ++i7) {
6423               for (int i2 = 0; i2 != x2.size(); ++i2) {
6424                 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6425                   += (2.0) * i0data[i1+x1.size()*(i6+x6.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6426               }
6427             }
6428           }
6429         }
6430       }
6431     }
6432   }
6433   if (x5 == x6 && x0 == x2) {
6434     std::unique_ptr<double[]> i0data = in(2)->get_block(x3, x7, x1, x4);
6435     for (int i4 = 0; i4 != x4.size(); ++i4) {
6436       for (int i1 = 0; i1 != x1.size(); ++i1) {
6437         for (int i7 = 0; i7 != x7.size(); ++i7) {
6438           for (int i3 = 0; i3 != x3.size(); ++i3) {
6439             for (int i6 = 0; i6 != x6.size(); ++i6) {
6440               for (int i2 = 0; i2 != x2.size(); ++i2) {
6441                 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6442                   += (-1.0) * i0data[i3+x3.size()*(i7+x7.size()*(i1+x1.size()*(i4)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6443               }
6444             }
6445           }
6446         }
6447       }
6448     }
6449   }
6450   if (x5 == x7 && x0 == x2) {
6451     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x3, x4);
6452     for (int i4 = 0; i4 != x4.size(); ++i4) {
6453       for (int i3 = 0; i3 != x3.size(); ++i3) {
6454         for (int i6 = 0; i6 != x6.size(); ++i6) {
6455           for (int i1 = 0; i1 != x1.size(); ++i1) {
6456             for (int i7 = 0; i7 != x7.size(); ++i7) {
6457               for (int i2 = 0; i2 != x2.size(); ++i2) {
6458                 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6459                   += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i3+x3.size()*(i4)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6460               }
6461             }
6462           }
6463         }
6464       }
6465     }
6466   }
6467   // rdm0 merged case
6468   if (x5 == x7 && x3 == x6 && x1 == x2 && x0 == x4) {
6469     std::unique_ptr<double[]> i0data = in(0)->get_block();
6470     for (int i7 = 0; i7 != x7.size(); ++i7) {
6471       for (int i6 = 0; i6 != x6.size(); ++i6) {
6472         for (int i2 = 0; i2 != x2.size(); ++i2) {
6473           for (int i4 = 0; i4 != x4.size(); ++i4) {
6474             odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]  += -4.0 * i0data[0] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6475           }
6476         }
6477       }
6478     }
6479   }
6480   if (x3 == x6 && x1 == x2 && x0 == x4) {
6481     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x7);
6482     for (int i7 = 0; i7 != x7.size(); ++i7) {
6483       for (int i5 = 0; i5 != x5.size(); ++i5) {
6484         for (int i6 = 0; i6 != x6.size(); ++i6) {
6485           for (int i2 = 0; i2 != x2.size(); ++i2) {
6486             for (int i4 = 0; i4 != x4.size(); ++i4) {
6487               odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6488                 += (2.0) * i0data[i5+x5.size()*(i7)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6489             }
6490           }
6491         }
6492       }
6493     }
6494   }
6495   // rdm0 merged case
6496   if (x5 == x6 && x3 == x7 && x1 == x2 && x0 == x4) {
6497     std::unique_ptr<double[]> i0data = in(0)->get_block();
6498     for (int i6 = 0; i6 != x6.size(); ++i6) {
6499       for (int i7 = 0; i7 != x7.size(); ++i7) {
6500         for (int i2 = 0; i2 != x2.size(); ++i2) {
6501           for (int i4 = 0; i4 != x4.size(); ++i4) {
6502             odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]  += 2.0 * i0data[0] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6503           }
6504         }
6505       }
6506     }
6507   }
6508   if (x3 == x7 && x1 == x2 && x0 == x4) {
6509     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x6);
6510     for (int i6 = 0; i6 != x6.size(); ++i6) {
6511       for (int i5 = 0; i5 != x5.size(); ++i5) {
6512         for (int i7 = 0; i7 != x7.size(); ++i7) {
6513           for (int i2 = 0; i2 != x2.size(); ++i2) {
6514             for (int i4 = 0; i4 != x4.size(); ++i4) {
6515               odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6516                 += (-1.0) * i0data[i5+x5.size()*(i6)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6517             }
6518           }
6519         }
6520       }
6521     }
6522   }
6523   if (x5 == x6 && x1 == x2 && x0 == x4) {
6524     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x7);
6525     for (int i7 = 0; i7 != x7.size(); ++i7) {
6526       for (int i3 = 0; i3 != x3.size(); ++i3) {
6527         for (int i6 = 0; i6 != x6.size(); ++i6) {
6528           for (int i2 = 0; i2 != x2.size(); ++i2) {
6529             for (int i4 = 0; i4 != x4.size(); ++i4) {
6530               odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6531                 += (-1.0) * i0data[i3+x3.size()*(i7)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6532             }
6533           }
6534         }
6535       }
6536     }
6537   }
6538   if (x5 == x7 && x1 == x2 && x0 == x4) {
6539     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x6);
6540     for (int i6 = 0; i6 != x6.size(); ++i6) {
6541       for (int i3 = 0; i3 != x3.size(); ++i3) {
6542         for (int i7 = 0; i7 != x7.size(); ++i7) {
6543           for (int i2 = 0; i2 != x2.size(); ++i2) {
6544             for (int i4 = 0; i4 != x4.size(); ++i4) {
6545               odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6546                 += (2.0) * i0data[i3+x3.size()*(i6)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6547             }
6548           }
6549         }
6550       }
6551     }
6552   }
6553   if (x5 == x7 && x1 == x6 && x0 == x4) {
6554     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
6555     for (int i2 = 0; i2 != x2.size(); ++i2) {
6556       for (int i3 = 0; i3 != x3.size(); ++i3) {
6557         for (int i7 = 0; i7 != x7.size(); ++i7) {
6558           for (int i6 = 0; i6 != x6.size(); ++i6) {
6559             for (int i4 = 0; i4 != x4.size(); ++i4) {
6560               odata[i4+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
6561                 += (-4.0) * i0data[i3+x3.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6562             }
6563           }
6564         }
6565       }
6566     }
6567   }
6568   if (x5 == x6 && x1 == x7 && x0 == x4) {
6569     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
6570     for (int i2 = 0; i2 != x2.size(); ++i2) {
6571       for (int i3 = 0; i3 != x3.size(); ++i3) {
6572         for (int i6 = 0; i6 != x6.size(); ++i6) {
6573           for (int i7 = 0; i7 != x7.size(); ++i7) {
6574             for (int i4 = 0; i4 != x4.size(); ++i4) {
6575               odata[i4+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
6576                 += (2.0) * i0data[i3+x3.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6577             }
6578           }
6579         }
6580       }
6581     }
6582   }
6583   if (x5 == x7 && x3 == x6 && x0 == x4) {
6584     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
6585     for (int i2 = 0; i2 != x2.size(); ++i2) {
6586       for (int i1 = 0; i1 != x1.size(); ++i1) {
6587         for (int i7 = 0; i7 != x7.size(); ++i7) {
6588           for (int i6 = 0; i6 != x6.size(); ++i6) {
6589             for (int i4 = 0; i4 != x4.size(); ++i4) {
6590               odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6591                 += (2.0) * i0data[i1+x1.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6592             }
6593           }
6594         }
6595       }
6596     }
6597   }
6598   if (x3 == x6 && x0 == x4) {
6599     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x7, x1, x2);
6600     for (int i2 = 0; i2 != x2.size(); ++i2) {
6601       for (int i1 = 0; i1 != x1.size(); ++i1) {
6602         for (int i7 = 0; i7 != x7.size(); ++i7) {
6603           for (int i5 = 0; i5 != x5.size(); ++i5) {
6604             for (int i6 = 0; i6 != x6.size(); ++i6) {
6605               for (int i4 = 0; i4 != x4.size(); ++i4) {
6606                 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6607                   += (-1.0) * i0data[i5+x5.size()*(i7+x7.size()*(i1+x1.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6608               }
6609             }
6610           }
6611         }
6612       }
6613     }
6614   }
6615   if (x5 == x6 && x3 == x7 && x0 == x4) {
6616     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
6617     for (int i2 = 0; i2 != x2.size(); ++i2) {
6618       for (int i1 = 0; i1 != x1.size(); ++i1) {
6619         for (int i6 = 0; i6 != x6.size(); ++i6) {
6620           for (int i7 = 0; i7 != x7.size(); ++i7) {
6621             for (int i4 = 0; i4 != x4.size(); ++i4) {
6622               odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6623                 += (-1.0) * i0data[i1+x1.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6624             }
6625           }
6626         }
6627       }
6628     }
6629   }
6630   if (x3 == x7 && x0 == x4) {
6631     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x5, x2);
6632     for (int i2 = 0; i2 != x2.size(); ++i2) {
6633       for (int i5 = 0; i5 != x5.size(); ++i5) {
6634         for (int i6 = 0; i6 != x6.size(); ++i6) {
6635           for (int i1 = 0; i1 != x1.size(); ++i1) {
6636             for (int i7 = 0; i7 != x7.size(); ++i7) {
6637               for (int i4 = 0; i4 != x4.size(); ++i4) {
6638                 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6639                   += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i5+x5.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6640               }
6641             }
6642           }
6643         }
6644       }
6645     }
6646   }
6647   if (x5 == x6 && x0 == x4) {
6648     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x7, x3, x2);
6649     for (int i2 = 0; i2 != x2.size(); ++i2) {
6650       for (int i3 = 0; i3 != x3.size(); ++i3) {
6651         for (int i7 = 0; i7 != x7.size(); ++i7) {
6652           for (int i1 = 0; i1 != x1.size(); ++i1) {
6653             for (int i6 = 0; i6 != x6.size(); ++i6) {
6654               for (int i4 = 0; i4 != x4.size(); ++i4) {
6655                 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6656                   += (-1.0) * i0data[i1+x1.size()*(i7+x7.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6657               }
6658             }
6659           }
6660         }
6661       }
6662     }
6663   }
6664   if (x5 == x7 && x0 == x4) {
6665     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x3, x2);
6666     for (int i2 = 0; i2 != x2.size(); ++i2) {
6667       for (int i3 = 0; i3 != x3.size(); ++i3) {
6668         for (int i6 = 0; i6 != x6.size(); ++i6) {
6669           for (int i1 = 0; i1 != x1.size(); ++i1) {
6670             for (int i7 = 0; i7 != x7.size(); ++i7) {
6671               for (int i4 = 0; i4 != x4.size(); ++i4) {
6672                 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6673                   += (2.0) * i0data[i1+x1.size()*(i6+x6.size()*(i3+x3.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6674               }
6675             }
6676           }
6677         }
6678       }
6679     }
6680   }
6681   // rdm0 merged case
6682   if (x5 == x7 && x3 == x4 && x1 == x2 && x0 == x6) {
6683     std::unique_ptr<double[]> i0data = in(0)->get_block();
6684     for (int i7 = 0; i7 != x7.size(); ++i7) {
6685       for (int i4 = 0; i4 != x4.size(); ++i4) {
6686         for (int i2 = 0; i2 != x2.size(); ++i2) {
6687           for (int i6 = 0; i6 != x6.size(); ++i6) {
6688             odata[i6+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]  += 2.0 * i0data[0] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6689           }
6690         }
6691       }
6692     }
6693   }
6694   if (x5 == x7 && x1 == x2 && x0 == x6) {
6695     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
6696     for (int i4 = 0; i4 != x4.size(); ++i4) {
6697       for (int i3 = 0; i3 != x3.size(); ++i3) {
6698         for (int i7 = 0; i7 != x7.size(); ++i7) {
6699           for (int i2 = 0; i2 != x2.size(); ++i2) {
6700             for (int i6 = 0; i6 != x6.size(); ++i6) {
6701               odata[i6+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6702                 += (-1.0) * i0data[i3+x3.size()*(i4)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6703             }
6704           }
6705         }
6706       }
6707     }
6708   }
6709   if (x5 == x7 && x1 == x4 && x0 == x6) {
6710     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
6711     for (int i2 = 0; i2 != x2.size(); ++i2) {
6712       for (int i3 = 0; i3 != x3.size(); ++i3) {
6713         for (int i7 = 0; i7 != x7.size(); ++i7) {
6714           for (int i4 = 0; i4 != x4.size(); ++i4) {
6715             for (int i6 = 0; i6 != x6.size(); ++i6) {
6716               odata[i6+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6717                 += (2.0) * i0data[i3+x3.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6718             }
6719           }
6720         }
6721       }
6722     }
6723   }
6724   if (x5 == x7 && x3 == x4 && x0 == x6) {
6725     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
6726     for (int i2 = 0; i2 != x2.size(); ++i2) {
6727       for (int i1 = 0; i1 != x1.size(); ++i1) {
6728         for (int i7 = 0; i7 != x7.size(); ++i7) {
6729           for (int i4 = 0; i4 != x4.size(); ++i4) {
6730             for (int i6 = 0; i6 != x6.size(); ++i6) {
6731               odata[i6+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6732                 += (-1.0) * i0data[i1+x1.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6733             }
6734           }
6735         }
6736       }
6737     }
6738   }
6739   if (x5 == x7 && x0 == x6) {
6740     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x3, x2);
6741     for (int i2 = 0; i2 != x2.size(); ++i2) {
6742       for (int i3 = 0; i3 != x3.size(); ++i3) {
6743         for (int i4 = 0; i4 != x4.size(); ++i4) {
6744           for (int i1 = 0; i1 != x1.size(); ++i1) {
6745             for (int i7 = 0; i7 != x7.size(); ++i7) {
6746               for (int i6 = 0; i6 != x6.size(); ++i6) {
6747                 odata[i6+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6748                   += (-1.0) * i0data[i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6749               }
6750             }
6751           }
6752         }
6753       }
6754     }
6755   }
6756   // rdm0 merged case
6757   if (x5 == x6 && x3 == x4 && x1 == x2 && x0 == x7) {
6758     std::unique_ptr<double[]> i0data = in(0)->get_block();
6759     for (int i6 = 0; i6 != x6.size(); ++i6) {
6760       for (int i4 = 0; i4 != x4.size(); ++i4) {
6761         for (int i2 = 0; i2 != x2.size(); ++i2) {
6762           for (int i7 = 0; i7 != x7.size(); ++i7) {
6763             odata[i7+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]  += -4.0 * i0data[0] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6764           }
6765         }
6766       }
6767     }
6768   }
6769   if (x5 == x6 && x1 == x2 && x0 == x7) {
6770     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
6771     for (int i4 = 0; i4 != x4.size(); ++i4) {
6772       for (int i3 = 0; i3 != x3.size(); ++i3) {
6773         for (int i6 = 0; i6 != x6.size(); ++i6) {
6774           for (int i2 = 0; i2 != x2.size(); ++i2) {
6775             for (int i7 = 0; i7 != x7.size(); ++i7) {
6776               odata[i7+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6777                 += (2.0) * i0data[i3+x3.size()*(i4)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6778             }
6779           }
6780         }
6781       }
6782     }
6783   }
6784   if (x5 == x6 && x1 == x4 && x0 == x7) {
6785     std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
6786     for (int i2 = 0; i2 != x2.size(); ++i2) {
6787       for (int i3 = 0; i3 != x3.size(); ++i3) {
6788         for (int i6 = 0; i6 != x6.size(); ++i6) {
6789           for (int i4 = 0; i4 != x4.size(); ++i4) {
6790             for (int i7 = 0; i7 != x7.size(); ++i7) {
6791               odata[i7+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6792                 += (-4.0) * i0data[i3+x3.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6793             }
6794           }
6795         }
6796       }
6797     }
6798   }
6799   if (x5 == x6 && x3 == x4 && x0 == x7) {
6800     std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
6801     for (int i2 = 0; i2 != x2.size(); ++i2) {
6802       for (int i1 = 0; i1 != x1.size(); ++i1) {
6803         for (int i6 = 0; i6 != x6.size(); ++i6) {
6804           for (int i4 = 0; i4 != x4.size(); ++i4) {
6805             for (int i7 = 0; i7 != x7.size(); ++i7) {
6806               odata[i7+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6807                 += (2.0) * i0data[i1+x1.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6808             }
6809           }
6810         }
6811       }
6812     }
6813   }
6814   if (x5 == x6 && x0 == x7) {
6815     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x3, x2);
6816     for (int i2 = 0; i2 != x2.size(); ++i2) {
6817       for (int i3 = 0; i3 != x3.size(); ++i3) {
6818         for (int i4 = 0; i4 != x4.size(); ++i4) {
6819           for (int i1 = 0; i1 != x1.size(); ++i1) {
6820             for (int i6 = 0; i6 != x6.size(); ++i6) {
6821               for (int i7 = 0; i7 != x7.size(); ++i7) {
6822                 odata[i7+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
6823                   += (2.0) * i0data[i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6824               }
6825             }
6826           }
6827         }
6828       }
6829     }
6830   }
6831   if (x5 == x6 && x3 == x4 && x1 == x2) {
6832     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x7);
6833     for (int i7 = 0; i7 != x7.size(); ++i7) {
6834       for (int i0 = 0; i0 != x0.size(); ++i0) {
6835         for (int i6 = 0; i6 != x6.size(); ++i6) {
6836           for (int i4 = 0; i4 != x4.size(); ++i4) {
6837             for (int i2 = 0; i2 != x2.size(); ++i2) {
6838               odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6839                 += (2.0) * i0data[i0+x0.size()*(i7)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6840             }
6841           }
6842         }
6843       }
6844     }
6845   }
6846   if (x5 == x7 && x3 == x4 && x1 == x2) {
6847     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x6);
6848     for (int i6 = 0; i6 != x6.size(); ++i6) {
6849       for (int i0 = 0; i0 != x0.size(); ++i0) {
6850         for (int i7 = 0; i7 != x7.size(); ++i7) {
6851           for (int i4 = 0; i4 != x4.size(); ++i4) {
6852             for (int i2 = 0; i2 != x2.size(); ++i2) {
6853               odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6854                 += (-1.0) * i0data[i0+x0.size()*(i6)] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
6855             }
6856           }
6857         }
6858       }
6859     }
6860   }
6861   if (x5 == x7 && x3 == x6 && x1 == x2) {
6862     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x4);
6863     for (int i4 = 0; i4 != x4.size(); ++i4) {
6864       for (int i0 = 0; i0 != x0.size(); ++i0) {
6865         for (int i7 = 0; i7 != x7.size(); ++i7) {
6866           for (int i6 = 0; i6 != x6.size(); ++i6) {
6867             for (int i2 = 0; i2 != x2.size(); ++i2) {
6868               odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6869                 += (2.0) * i0data[i0+x0.size()*(i4)] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6870             }
6871           }
6872         }
6873       }
6874     }
6875   }
6876   if (x3 == x6 && x1 == x2) {
6877     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x5, x4);
6878     for (int i4 = 0; i4 != x4.size(); ++i4) {
6879       for (int i5 = 0; i5 != x5.size(); ++i5) {
6880         for (int i7 = 0; i7 != x7.size(); ++i7) {
6881           for (int i0 = 0; i0 != x0.size(); ++i0) {
6882             for (int i6 = 0; i6 != x6.size(); ++i6) {
6883               for (int i2 = 0; i2 != x2.size(); ++i2) {
6884                 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6885                   += (2.0) * i0data[i0+x0.size()*(i7+x7.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6886               }
6887             }
6888           }
6889         }
6890       }
6891     }
6892   }
6893   if (x5 == x6 && x3 == x7 && x1 == x2) {
6894     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x4);
6895     for (int i4 = 0; i4 != x4.size(); ++i4) {
6896       for (int i0 = 0; i0 != x0.size(); ++i0) {
6897         for (int i6 = 0; i6 != x6.size(); ++i6) {
6898           for (int i7 = 0; i7 != x7.size(); ++i7) {
6899             for (int i2 = 0; i2 != x2.size(); ++i2) {
6900               odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6901                 += (-1.0) * i0data[i0+x0.size()*(i4)] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6902             }
6903           }
6904         }
6905       }
6906     }
6907   }
6908   if (x3 == x7 && x1 == x2) {
6909     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x6, x5, x4);
6910     for (int i4 = 0; i4 != x4.size(); ++i4) {
6911       for (int i5 = 0; i5 != x5.size(); ++i5) {
6912         for (int i6 = 0; i6 != x6.size(); ++i6) {
6913           for (int i0 = 0; i0 != x0.size(); ++i0) {
6914             for (int i7 = 0; i7 != x7.size(); ++i7) {
6915               for (int i2 = 0; i2 != x2.size(); ++i2) {
6916                 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6917                   += (-1.0) * i0data[i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
6918               }
6919             }
6920           }
6921         }
6922       }
6923     }
6924   }
6925   if (x5 == x6 && x1 == x2) {
6926     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x3, x4);
6927     for (int i4 = 0; i4 != x4.size(); ++i4) {
6928       for (int i3 = 0; i3 != x3.size(); ++i3) {
6929         for (int i7 = 0; i7 != x7.size(); ++i7) {
6930           for (int i0 = 0; i0 != x0.size(); ++i0) {
6931             for (int i6 = 0; i6 != x6.size(); ++i6) {
6932               for (int i2 = 0; i2 != x2.size(); ++i2) {
6933                 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6934                   += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i3+x3.size()*(i4)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6935               }
6936             }
6937           }
6938         }
6939       }
6940     }
6941   }
6942   if (x5 == x7 && x1 == x2) {
6943     std::unique_ptr<double[]> i0data = in(2)->get_block(x3, x6, x0, x4);
6944     for (int i4 = 0; i4 != x4.size(); ++i4) {
6945       for (int i0 = 0; i0 != x0.size(); ++i0) {
6946         for (int i6 = 0; i6 != x6.size(); ++i6) {
6947           for (int i3 = 0; i3 != x3.size(); ++i3) {
6948             for (int i7 = 0; i7 != x7.size(); ++i7) {
6949               for (int i2 = 0; i2 != x2.size(); ++i2) {
6950                 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
6951                   += (-1.0) * i0data[i3+x3.size()*(i6+x6.size()*(i0+x0.size()*(i4)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
6952               }
6953             }
6954           }
6955         }
6956       }
6957     }
6958   }
6959   if (x5 == x7 && x3 == x6 && x1 == x4) {
6960     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
6961     for (int i2 = 0; i2 != x2.size(); ++i2) {
6962       for (int i0 = 0; i0 != x0.size(); ++i0) {
6963         for (int i7 = 0; i7 != x7.size(); ++i7) {
6964           for (int i6 = 0; i6 != x6.size(); ++i6) {
6965             for (int i4 = 0; i4 != x4.size(); ++i4) {
6966               odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6967                 += (-1.0) * i0data[i0+x0.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6968             }
6969           }
6970         }
6971       }
6972     }
6973   }
6974   if (x3 == x6 && x1 == x4) {
6975     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x5, x2);
6976     for (int i2 = 0; i2 != x2.size(); ++i2) {
6977       for (int i5 = 0; i5 != x5.size(); ++i5) {
6978         for (int i7 = 0; i7 != x7.size(); ++i7) {
6979           for (int i0 = 0; i0 != x0.size(); ++i0) {
6980             for (int i6 = 0; i6 != x6.size(); ++i6) {
6981               for (int i4 = 0; i4 != x4.size(); ++i4) {
6982                 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6983                   += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i5+x5.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
6984               }
6985             }
6986           }
6987         }
6988       }
6989     }
6990   }
6991   if (x5 == x6 && x3 == x7 && x1 == x4) {
6992     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
6993     for (int i2 = 0; i2 != x2.size(); ++i2) {
6994       for (int i0 = 0; i0 != x0.size(); ++i0) {
6995         for (int i6 = 0; i6 != x6.size(); ++i6) {
6996           for (int i7 = 0; i7 != x7.size(); ++i7) {
6997             for (int i4 = 0; i4 != x4.size(); ++i4) {
6998               odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
6999                 += (2.0) * i0data[i0+x0.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
7000             }
7001           }
7002         }
7003       }
7004     }
7005   }
7006   if (x3 == x7 && x1 == x4) {
7007     std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x6, x0, x2);
7008     for (int i2 = 0; i2 != x2.size(); ++i2) {
7009       for (int i0 = 0; i0 != x0.size(); ++i0) {
7010         for (int i6 = 0; i6 != x6.size(); ++i6) {
7011           for (int i5 = 0; i5 != x5.size(); ++i5) {
7012             for (int i7 = 0; i7 != x7.size(); ++i7) {
7013               for (int i4 = 0; i4 != x4.size(); ++i4) {
7014                 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
7015                   += (-1.0) * i0data[i5+x5.size()*(i6+x6.size()*(i0+x0.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
7016               }
7017             }
7018           }
7019         }
7020       }
7021     }
7022   }
7023   if (x5 == x6 && x1 == x4) {
7024     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x3, x2);
7025     for (int i2 = 0; i2 != x2.size(); ++i2) {
7026       for (int i3 = 0; i3 != x3.size(); ++i3) {
7027         for (int i7 = 0; i7 != x7.size(); ++i7) {
7028           for (int i0 = 0; i0 != x0.size(); ++i0) {
7029             for (int i6 = 0; i6 != x6.size(); ++i6) {
7030               for (int i4 = 0; i4 != x4.size(); ++i4) {
7031                 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
7032                   += (2.0) * i0data[i0+x0.size()*(i7+x7.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7033               }
7034             }
7035           }
7036         }
7037       }
7038     }
7039   }
7040   if (x5 == x7 && x1 == x4) {
7041     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x6, x3, x2);
7042     for (int i2 = 0; i2 != x2.size(); ++i2) {
7043       for (int i3 = 0; i3 != x3.size(); ++i3) {
7044         for (int i6 = 0; i6 != x6.size(); ++i6) {
7045           for (int i0 = 0; i0 != x0.size(); ++i0) {
7046             for (int i7 = 0; i7 != x7.size(); ++i7) {
7047               for (int i4 = 0; i4 != x4.size(); ++i4) {
7048                 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
7049                   += (-1.0) * i0data[i0+x0.size()*(i6+x6.size()*(i3+x3.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7050               }
7051             }
7052           }
7053         }
7054       }
7055     }
7056   }
7057   if (x5 == x7 && x3 == x4 && x1 == x6) {
7058     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
7059     for (int i2 = 0; i2 != x2.size(); ++i2) {
7060       for (int i0 = 0; i0 != x0.size(); ++i0) {
7061         for (int i7 = 0; i7 != x7.size(); ++i7) {
7062           for (int i4 = 0; i4 != x4.size(); ++i4) {
7063             for (int i6 = 0; i6 != x6.size(); ++i6) {
7064               odata[i0+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
7065                 += (2.0) * i0data[i0+x0.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
7066             }
7067           }
7068         }
7069       }
7070     }
7071   }
7072   if (x5 == x7 && x1 == x6) {
7073     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x4, x3, x2);
7074     for (int i2 = 0; i2 != x2.size(); ++i2) {
7075       for (int i3 = 0; i3 != x3.size(); ++i3) {
7076         for (int i4 = 0; i4 != x4.size(); ++i4) {
7077           for (int i0 = 0; i0 != x0.size(); ++i0) {
7078             for (int i7 = 0; i7 != x7.size(); ++i7) {
7079               for (int i6 = 0; i6 != x6.size(); ++i6) {
7080                 odata[i0+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
7081                   += (2.0) * i0data[i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7082               }
7083             }
7084           }
7085         }
7086       }
7087     }
7088   }
7089   if (x5 == x6 && x3 == x4 && x1 == x7) {
7090     std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
7091     for (int i2 = 0; i2 != x2.size(); ++i2) {
7092       for (int i0 = 0; i0 != x0.size(); ++i0) {
7093         for (int i6 = 0; i6 != x6.size(); ++i6) {
7094           for (int i4 = 0; i4 != x4.size(); ++i4) {
7095             for (int i7 = 0; i7 != x7.size(); ++i7) {
7096               odata[i0+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
7097                 += (-1.0) * i0data[i0+x0.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
7098             }
7099           }
7100         }
7101       }
7102     }
7103   }
7104   if (x5 == x6 && x1 == x7) {
7105     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x4, x3, x2);
7106     for (int i2 = 0; i2 != x2.size(); ++i2) {
7107       for (int i3 = 0; i3 != x3.size(); ++i3) {
7108         for (int i4 = 0; i4 != x4.size(); ++i4) {
7109           for (int i0 = 0; i0 != x0.size(); ++i0) {
7110             for (int i6 = 0; i6 != x6.size(); ++i6) {
7111               for (int i7 = 0; i7 != x7.size(); ++i7) {
7112                 odata[i0+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
7113                   += (-1.0) * i0data[i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7114               }
7115             }
7116           }
7117         }
7118       }
7119     }
7120   }
7121   if (x5 == x6 && x3 == x4) {
7122     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x1, x2);
7123     for (int i2 = 0; i2 != x2.size(); ++i2) {
7124       for (int i1 = 0; i1 != x1.size(); ++i1) {
7125         for (int i7 = 0; i7 != x7.size(); ++i7) {
7126           for (int i0 = 0; i0 != x0.size(); ++i0) {
7127             for (int i6 = 0; i6 != x6.size(); ++i6) {
7128               for (int i4 = 0; i4 != x4.size(); ++i4) {
7129                 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
7130                   += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
7131               }
7132             }
7133           }
7134         }
7135       }
7136     }
7137   }
7138   if (x5 == x7 && x3 == x4) {
7139     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x0, x2);
7140     for (int i2 = 0; i2 != x2.size(); ++i2) {
7141       for (int i0 = 0; i0 != x0.size(); ++i0) {
7142         for (int i6 = 0; i6 != x6.size(); ++i6) {
7143           for (int i1 = 0; i1 != x1.size(); ++i1) {
7144             for (int i7 = 0; i7 != x7.size(); ++i7) {
7145               for (int i4 = 0; i4 != x4.size(); ++i4) {
7146                 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
7147                   += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i0+x0.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
7148               }
7149             }
7150           }
7151         }
7152       }
7153     }
7154   }
7155   if (x5 == x7 && x3 == x6) {
7156     std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x4, x1, x2);
7157     for (int i2 = 0; i2 != x2.size(); ++i2) {
7158       for (int i1 = 0; i1 != x1.size(); ++i1) {
7159         for (int i4 = 0; i4 != x4.size(); ++i4) {
7160           for (int i0 = 0; i0 != x0.size(); ++i0) {
7161             for (int i7 = 0; i7 != x7.size(); ++i7) {
7162               for (int i6 = 0; i6 != x6.size(); ++i6) {
7163                 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
7164                   += (-1.0) * i0data[i0+x0.size()*(i4+x4.size()*(i1+x1.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
7165               }
7166             }
7167           }
7168         }
7169       }
7170     }
7171   }
7172   if (x3 == x6) {
7173     std::unique_ptr<double[]> i0data = in(3)->get_block(x0, x7, x5, x4, x1, x2);
7174     for (int i2 = 0; i2 != x2.size(); ++i2) {
7175       for (int i1 = 0; i1 != x1.size(); ++i1) {
7176         for (int i4 = 0; i4 != x4.size(); ++i4) {
7177           for (int i5 = 0; i5 != x5.size(); ++i5) {
7178             for (int i7 = 0; i7 != x7.size(); ++i7) {
7179               for (int i0 = 0; i0 != x0.size(); ++i0) {
7180                 for (int i6 = 0; i6 != x6.size(); ++i6) {
7181                   odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
7182                     += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i2)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
7183                 }
7184               }
7185             }
7186           }
7187         }
7188       }
7189     }
7190   }
7191   if (x5 == x6 && x3 == x7) {
7192     std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x0, x2);
7193     for (int i2 = 0; i2 != x2.size(); ++i2) {
7194       for (int i0 = 0; i0 != x0.size(); ++i0) {
7195         for (int i4 = 0; i4 != x4.size(); ++i4) {
7196           for (int i1 = 0; i1 != x1.size(); ++i1) {
7197             for (int i6 = 0; i6 != x6.size(); ++i6) {
7198               for (int i7 = 0; i7 != x7.size(); ++i7) {
7199                 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
7200                   += (-1.0) * i0data[i1+x1.size()*(i4+x4.size()*(i0+x0.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
7201               }
7202             }
7203           }
7204         }
7205       }
7206     }
7207   }
7208   if (x3 == x7) {
7209     std::unique_ptr<double[]> i0data = in(3)->get_block(x1, x6, x5, x4, x0, x2);
7210     for (int i2 = 0; i2 != x2.size(); ++i2) {
7211       for (int i0 = 0; i0 != x0.size(); ++i0) {
7212         for (int i4 = 0; i4 != x4.size(); ++i4) {
7213           for (int i5 = 0; i5 != x5.size(); ++i5) {
7214             for (int i6 = 0; i6 != x6.size(); ++i6) {
7215               for (int i1 = 0; i1 != x1.size(); ++i1) {
7216                 for (int i7 = 0; i7 != x7.size(); ++i7) {
7217                   odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
7218                     += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i2)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
7219                 }
7220               }
7221             }
7222           }
7223         }
7224       }
7225     }
7226   }
7227   if (x5 == x6) {
7228     std::unique_ptr<double[]> i0data = in(3)->get_block(x0, x7, x1, x4, x3, x2);
7229     for (int i2 = 0; i2 != x2.size(); ++i2) {
7230       for (int i3 = 0; i3 != x3.size(); ++i3) {
7231         for (int i4 = 0; i4 != x4.size(); ++i4) {
7232           for (int i1 = 0; i1 != x1.size(); ++i1) {
7233             for (int i7 = 0; i7 != x7.size(); ++i7) {
7234               for (int i0 = 0; i0 != x0.size(); ++i0) {
7235                 for (int i6 = 0; i6 != x6.size(); ++i6) {
7236                   odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
7237                     += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7238                 }
7239               }
7240             }
7241           }
7242         }
7243       }
7244     }
7245   }
7246   if (x5 == x7) {
7247     std::unique_ptr<double[]> i0data = in(3)->get_block(x1, x6, x0, x4, x3, x2);
7248     for (int i2 = 0; i2 != x2.size(); ++i2) {
7249       for (int i3 = 0; i3 != x3.size(); ++i3) {
7250         for (int i4 = 0; i4 != x4.size(); ++i4) {
7251           for (int i0 = 0; i0 != x0.size(); ++i0) {
7252             for (int i6 = 0; i6 != x6.size(); ++i6) {
7253               for (int i1 = 0; i1 != x1.size(); ++i1) {
7254                 for (int i7 = 0; i7 != x7.size(); ++i7) {
7255                   odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
7256                     += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7257                 }
7258               }
7259             }
7260           }
7261         }
7262       }
7263     }
7264   }
7265   out()->add_block(odata, x0, x7, x1, x6);
7266 }
7267 
compute()7268 void Task35::Task_local::compute() {
7269   const Index x1 = b(0);
7270   const Index x0 = b(1);
7271   // scalar
7272   // tensor label: Gamma102
7273   std::unique_ptr<double[]> odata(new double[out()->get_size()]);
7274   std::fill_n(odata.get(), out()->get_size(), 0.0);
7275   // associated with merged
7276   std::unique_ptr<double[]> fdata = in(1)->get_block(x1, x0);
7277   out()->add_block(odata);
7278 }
7279 
compute()7280 void Task36::Task_local::compute() {
7281   const Index x3 = b(0);
7282   const Index x2 = b(1);
7283   const Index x1 = b(2);
7284   const Index x0 = b(3);
7285   // scalar
7286   // tensor label: Gamma104
7287   std::unique_ptr<double[]> odata(new double[out()->get_size()]);
7288   std::fill_n(odata.get(), out()->get_size(), 0.0);
7289   // associated with merged
7290   std::unique_ptr<double[]> fdata = in(2)->get_block(x3, x2, x1, x0);
7291   out()->add_block(odata);
7292 }
7293 
compute()7294 void Task37::Task_local::compute() {
7295   const Index x5 = b(0);
7296   const Index x0 = b(1);
7297   const Index x4 = b(2);
7298   const Index x1 = b(3);
7299   const Index x3 = b(4);
7300   const Index x2 = b(5);
7301   // tensor label: Gamma110
7302   std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x4, x1)]);
7303   std::fill_n(odata.get(), out()->get_size(x5, x0, x4, x1), 0.0);
7304   // associated with merged
7305   std::unique_ptr<double[]> fdata = in(2)->get_block(x3, x2);
7306   if (x4 == x2) {
7307     std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x1, x5, x0);
7308     for (int i0 = 0; i0 != x0.size(); ++i0) {
7309       for (int i5 = 0; i5 != x5.size(); ++i5) {
7310         for (int i1 = 0; i1 != x1.size(); ++i1) {
7311           for (int i3 = 0; i3 != x3.size(); ++i3) {
7312             for (int i2 = 0; i2 != x2.size(); ++i2) {
7313               odata[i5+x5.size()*(i0+x0.size()*(i2+x4.size()*(i1)))]
7314                 += (1.0) * i0data[i3+x3.size()*(i1+x1.size()*(i5+x5.size()*(i0)))] * fdata[i3+x3.size()*(i2)];
7315             }
7316           }
7317         }
7318       }
7319     }
7320   }
7321   if (x5 == x2) {
7322     std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0, x4, x1);
7323     for (int i1 = 0; i1 != x1.size(); ++i1) {
7324       for (int i4 = 0; i4 != x4.size(); ++i4) {
7325         for (int i0 = 0; i0 != x0.size(); ++i0) {
7326           for (int i3 = 0; i3 != x3.size(); ++i3) {
7327             for (int i2 = 0; i2 != x2.size(); ++i2) {
7328               odata[i2+x5.size()*(i0+x0.size()*(i4+x4.size()*(i1)))]
7329                 += (1.0) * i0data[i3+x3.size()*(i0+x0.size()*(i4+x4.size()*(i1)))] * fdata[i3+x3.size()*(i2)];
7330             }
7331           }
7332         }
7333       }
7334     }
7335   }
7336   out()->add_block(odata, x5, x0, x4, x1);
7337 }
7338 
compute()7339 void Task38::Task_local::compute() {
7340   const Index x7 = b(0);
7341   const Index x0 = b(1);
7342   const Index x6 = b(2);
7343   const Index x1 = b(3);
7344   const Index x5 = b(4);
7345   const Index x4 = b(5);
7346   const Index x3 = b(6);
7347   const Index x2 = b(7);
7348   // tensor label: Gamma111
7349   std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x0, x6, x1)]);
7350   std::fill_n(odata.get(), out()->get_size(x7, x0, x6, x1), 0.0);
7351   // associated with merged
7352   std::unique_ptr<double[]> fdata = in(3)->get_block(x5, x4, x3, x2);
7353   if (x7 == x4 && x6 == x2) {
7354     std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x3, x1);
7355     for (int i1 = 0; i1 != x1.size(); ++i1) {
7356       for (int i3 = 0; i3 != x3.size(); ++i3) {
7357         for (int i0 = 0; i0 != x0.size(); ++i0) {
7358           for (int i5 = 0; i5 != x5.size(); ++i5) {
7359             for (int i4 = 0; i4 != x4.size(); ++i4) {
7360               for (int i2 = 0; i2 != x2.size(); ++i2) {
7361                 odata[i4+x7.size()*(i0+x0.size()*(i2+x6.size()*(i1)))]
7362                   += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i1)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7363               }
7364             }
7365           }
7366         }
7367       }
7368     }
7369   }
7370   if (x7 == x2 && x6 == x4) {
7371     std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x1, x3, x0);
7372     for (int i0 = 0; i0 != x0.size(); ++i0) {
7373       for (int i3 = 0; i3 != x3.size(); ++i3) {
7374         for (int i1 = 0; i1 != x1.size(); ++i1) {
7375           for (int i5 = 0; i5 != x5.size(); ++i5) {
7376             for (int i2 = 0; i2 != x2.size(); ++i2) {
7377               for (int i4 = 0; i4 != x4.size(); ++i4) {
7378                 odata[i2+x7.size()*(i0+x0.size()*(i4+x6.size()*(i1)))]
7379                   += (1.0) * i0data[i5+x5.size()*(i1+x1.size()*(i3+x3.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7380               }
7381             }
7382           }
7383         }
7384       }
7385     }
7386   }
7387   if (x6 == x4) {
7388     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x1, x3, x2, x7, x0);
7389     for (int i0 = 0; i0 != x0.size(); ++i0) {
7390       for (int i7 = 0; i7 != x7.size(); ++i7) {
7391         for (int i2 = 0; i2 != x2.size(); ++i2) {
7392           for (int i3 = 0; i3 != x3.size(); ++i3) {
7393             for (int i1 = 0; i1 != x1.size(); ++i1) {
7394               for (int i5 = 0; i5 != x5.size(); ++i5) {
7395                 for (int i4 = 0; i4 != x4.size(); ++i4) {
7396                   odata[i7+x7.size()*(i0+x0.size()*(i4+x6.size()*(i1)))]
7397                     += (1.0) * i0data[i5+x5.size()*(i1+x1.size()*(i3+x3.size()*(i2+x2.size()*(i7+x7.size()*(i0)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7398                 }
7399               }
7400             }
7401           }
7402         }
7403       }
7404     }
7405   }
7406   if (x7 == x4) {
7407     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x2, x6, x1);
7408     for (int i1 = 0; i1 != x1.size(); ++i1) {
7409       for (int i6 = 0; i6 != x6.size(); ++i6) {
7410         for (int i2 = 0; i2 != x2.size(); ++i2) {
7411           for (int i3 = 0; i3 != x3.size(); ++i3) {
7412             for (int i0 = 0; i0 != x0.size(); ++i0) {
7413               for (int i5 = 0; i5 != x5.size(); ++i5) {
7414                 for (int i4 = 0; i4 != x4.size(); ++i4) {
7415                   odata[i4+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1)))]
7416                     += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i2+x2.size()*(i6+x6.size()*(i1)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7417                 }
7418               }
7419             }
7420           }
7421         }
7422       }
7423     }
7424   }
7425   if (x3 == x4 && x6 == x2) {
7426     std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x1, x7, x0);
7427     for (int i0 = 0; i0 != x0.size(); ++i0) {
7428       for (int i7 = 0; i7 != x7.size(); ++i7) {
7429         for (int i1 = 0; i1 != x1.size(); ++i1) {
7430           for (int i5 = 0; i5 != x5.size(); ++i5) {
7431             for (int i4 = 0; i4 != x4.size(); ++i4) {
7432               for (int i2 = 0; i2 != x2.size(); ++i2) {
7433                 odata[i7+x7.size()*(i0+x0.size()*(i2+x6.size()*(i1)))]
7434                   += (1.0) * i0data[i5+x5.size()*(i1+x1.size()*(i7+x7.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
7435               }
7436             }
7437           }
7438         }
7439       }
7440     }
7441   }
7442   if (x6 == x2) {
7443     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x1, x7, x0);
7444     for (int i0 = 0; i0 != x0.size(); ++i0) {
7445       for (int i7 = 0; i7 != x7.size(); ++i7) {
7446         for (int i1 = 0; i1 != x1.size(); ++i1) {
7447           for (int i3 = 0; i3 != x3.size(); ++i3) {
7448             for (int i4 = 0; i4 != x4.size(); ++i4) {
7449               for (int i5 = 0; i5 != x5.size(); ++i5) {
7450                 for (int i2 = 0; i2 != x2.size(); ++i2) {
7451                   odata[i7+x7.size()*(i0+x0.size()*(i2+x6.size()*(i1)))]
7452                     += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i7+x7.size()*(i0)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7453                 }
7454               }
7455             }
7456           }
7457         }
7458       }
7459     }
7460   }
7461   if (x3 == x4 && x7 == x2) {
7462     std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x6, x1);
7463     for (int i1 = 0; i1 != x1.size(); ++i1) {
7464       for (int i6 = 0; i6 != x6.size(); ++i6) {
7465         for (int i0 = 0; i0 != x0.size(); ++i0) {
7466           for (int i5 = 0; i5 != x5.size(); ++i5) {
7467             for (int i4 = 0; i4 != x4.size(); ++i4) {
7468               for (int i2 = 0; i2 != x2.size(); ++i2) {
7469                 odata[i2+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1)))]
7470                   += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i6+x6.size()*(i1)))] * fdata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
7471               }
7472             }
7473           }
7474         }
7475       }
7476     }
7477   }
7478   if (x7 == x2) {
7479     std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x0, x6, x1);
7480     for (int i1 = 0; i1 != x1.size(); ++i1) {
7481       for (int i6 = 0; i6 != x6.size(); ++i6) {
7482         for (int i0 = 0; i0 != x0.size(); ++i0) {
7483           for (int i3 = 0; i3 != x3.size(); ++i3) {
7484             for (int i4 = 0; i4 != x4.size(); ++i4) {
7485               for (int i5 = 0; i5 != x5.size(); ++i5) {
7486                 for (int i2 = 0; i2 != x2.size(); ++i2) {
7487                   odata[i2+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1)))]
7488                     += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i0+x0.size()*(i6+x6.size()*(i1)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
7489                 }
7490               }
7491             }
7492           }
7493         }
7494       }
7495     }
7496   }
7497   out()->add_block(odata, x7, x0, x6, x1);
7498 }
7499 
compute()7500 void Task39::Task_local::compute() {
7501   const Index x2 = b(0);
7502   const Index x5 = b(1);
7503   const Index x4 = b(2);
7504   const Index x3 = b(3);
7505   const Index x1 = b(4);
7506   const Index x0 = b(5);
7507   // tensor label: Gamma121
7508   std::unique_ptr<double[]> odata(new double[out()->get_size(x2, x5, x4, x3, x1, x0)]);
7509   std::fill_n(odata.get(), out()->get_size(x2, x5, x4, x3, x1, x0), 0.0);
7510   {
7511     if (x1 == x3 && x2 == x5) {
7512       std::unique_ptr<double[]> i0data = in(0)->get_block(x4, x0);
7513       for (int i0 = 0; i0 != x0.size(); ++i0) {
7514         for (int i3 = 0; i3 != x3.size(); ++i3) {
7515           for (int i4 = 0; i4 != x4.size(); ++i4) {
7516             for (int i5 = 0; i5 != x5.size(); ++i5) {
7517               odata[i5+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
7518                 += (2.0) * i0data[i4+x4.size()*(i0)];
7519             }
7520           }
7521         }
7522       }
7523     }
7524   }
7525   {
7526     if (x2 == x3 && x1 == x5) {
7527       std::unique_ptr<double[]> i0data = in(0)->get_block(x4, x0);
7528       for (int i0 = 0; i0 != x0.size(); ++i0) {
7529         for (int i3 = 0; i3 != x3.size(); ++i3) {
7530           for (int i4 = 0; i4 != x4.size(); ++i4) {
7531             for (int i5 = 0; i5 != x5.size(); ++i5) {
7532               odata[i3+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i5+x1.size()*(i0)))))]
7533                 += (-1.0) * i0data[i4+x4.size()*(i0)];
7534             }
7535           }
7536         }
7537       }
7538     }
7539   }
7540   {
7541     if (x1 == x5) {
7542       std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x3, x2, x0);
7543       for (int i0 = 0; i0 != x0.size(); ++i0) {
7544         for (int i3 = 0; i3 != x3.size(); ++i3) {
7545           for (int i4 = 0; i4 != x4.size(); ++i4) {
7546             for (int i5 = 0; i5 != x5.size(); ++i5) {
7547               for (int i2 = 0; i2 != x2.size(); ++i2) {
7548                 odata[i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i5+x1.size()*(i0)))))]
7549                   += (-1.0) * i0data[i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i0)))];
7550               }
7551             }
7552           }
7553         }
7554       }
7555     }
7556   }
7557   {
7558     if (x2 == x5) {
7559       std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x3, x1, x0);
7560       for (int i0 = 0; i0 != x0.size(); ++i0) {
7561         for (int i1 = 0; i1 != x1.size(); ++i1) {
7562           for (int i3 = 0; i3 != x3.size(); ++i3) {
7563             for (int i4 = 0; i4 != x4.size(); ++i4) {
7564               for (int i5 = 0; i5 != x5.size(); ++i5) {
7565                 odata[i5+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
7566                   += (2.0) * i0data[i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
7567               }
7568             }
7569           }
7570         }
7571       }
7572     }
7573   }
7574   {
7575     if (x4 == x5 && x1 == x3) {
7576       std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
7577       for (int i0 = 0; i0 != x0.size(); ++i0) {
7578         for (int i3 = 0; i3 != x3.size(); ++i3) {
7579           for (int i5 = 0; i5 != x5.size(); ++i5) {
7580             for (int i2 = 0; i2 != x2.size(); ++i2) {
7581               odata[i2+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
7582                 += (-1.0) * i0data[i2+x2.size()*(i0)];
7583             }
7584           }
7585         }
7586       }
7587     }
7588   }
7589   {
7590     if (x1 == x3) {
7591       std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x5, x4, x0);
7592       for (int i0 = 0; i0 != x0.size(); ++i0) {
7593         for (int i3 = 0; i3 != x3.size(); ++i3) {
7594           for (int i4 = 0; i4 != x4.size(); ++i4) {
7595             for (int i5 = 0; i5 != x5.size(); ++i5) {
7596               for (int i2 = 0; i2 != x2.size(); ++i2) {
7597                 odata[i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
7598                   += (-1.0) * i0data[i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i0)))];
7599               }
7600             }
7601           }
7602         }
7603       }
7604     }
7605   }
7606   {
7607     if (x2 == x3 && x4 == x5) {
7608       std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
7609       for (int i0 = 0; i0 != x0.size(); ++i0) {
7610         for (int i1 = 0; i1 != x1.size(); ++i1) {
7611           for (int i3 = 0; i3 != x3.size(); ++i3) {
7612             for (int i5 = 0; i5 != x5.size(); ++i5) {
7613               odata[i3+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
7614                 += (2.0) * i0data[i1+x1.size()*(i0)];
7615             }
7616           }
7617         }
7618       }
7619     }
7620   }
7621   {
7622     if (x2 == x3) {
7623       std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x5, x1, x0);
7624       for (int i0 = 0; i0 != x0.size(); ++i0) {
7625         for (int i1 = 0; i1 != x1.size(); ++i1) {
7626           for (int i3 = 0; i3 != x3.size(); ++i3) {
7627             for (int i4 = 0; i4 != x4.size(); ++i4) {
7628               for (int i5 = 0; i5 != x5.size(); ++i5) {
7629                 odata[i3+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
7630                   += (-1.0) * i0data[i4+x4.size()*(i5+x5.size()*(i1+x1.size()*(i0)))];
7631               }
7632             }
7633           }
7634         }
7635       }
7636     }
7637   }
7638   {
7639     if (x4 == x5) {
7640       std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x3, x1, x0);
7641       for (int i0 = 0; i0 != x0.size(); ++i0) {
7642         for (int i1 = 0; i1 != x1.size(); ++i1) {
7643           for (int i3 = 0; i3 != x3.size(); ++i3) {
7644             for (int i5 = 0; i5 != x5.size(); ++i5) {
7645               for (int i2 = 0; i2 != x2.size(); ++i2) {
7646                 odata[i2+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
7647                   += (-1.0) * i0data[i2+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
7648               }
7649             }
7650           }
7651         }
7652       }
7653     }
7654   }
7655   {
7656     std::unique_ptr<double[]> i0data = in(2)->get_block(x2, x5, x4, x3, x1, x0);
7657     sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x2.size(), x5.size(), x4.size(), x3.size(), x1.size(), x0.size());
7658   }
7659   out()->add_block(odata, x2, x5, x4, x3, x1, x0);
7660 }
7661 
compute()7662 void Task41::Task_local::compute() {
7663   const Index c2 = b(0);
7664   const Index x1 = b(1);
7665   const Index c1 = b(2);
7666   const Index x0 = b(3);
7667   // tensor label: r
7668   std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x1, c1, x0)]);
7669   std::fill_n(odata.get(), out()->get_size(c2, x1, c1, x0), 0.0);
7670   {
7671     // tensor label: I0
7672     std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x0, x1, c2);
7673     sort_indices<3,2,0,1,1,1,1,1>(i0data, odata, c1.size(), x0.size(), x1.size(), c2.size());
7674   }
7675   {
7676     // tensor label: I0
7677     std::unique_ptr<double[]> i0data = in(0)->get_block(c2, x1, x0, c1);
7678     sort_indices<0,1,3,2,1,1,1,1>(i0data, odata, c2.size(), x1.size(), x0.size(), c1.size());
7679   }
7680   out()->add_block(odata, c2, x1, c1, x0);
7681 }
7682 
compute()7683 void Task42::Task_local::compute() {
7684   const Index c1 = b(0);
7685   const Index x0 = b(1);
7686   const Index x1 = b(2);
7687   const Index c2 = b(3);
7688   // tensor label: I0
7689   std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x0, x1, c2)]);
7690   std::fill_n(odata.get(), out()->get_size(c1, x0, x1, c2), 0.0);
7691   std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x0, x1, c2)]);
7692   std::fill_n(odata_sorted.get(), out()->get_size(c1, x0, x1, c2), 0.0);
7693   for (auto& c3 : *range_[0]) {
7694     // tensor label: f1
7695     std::unique_ptr<double[]> i0data = in(0)->get_block(c2, c3);
7696     std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c2, c3)]);
7697     sort_indices<1,0,0,1,1,1>(i0data, i0data_sorted, c2.size(), c3.size());
7698     // tensor label: I1
7699     std::unique_ptr<double[]> i1data = in(1)->get_block(c1, c3, x0, x1);
7700     std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, c3, x0, x1)]);
7701     sort_indices<1,0,2,3,0,1,1,1>(i1data, i1data_sorted, c1.size(), c3.size(), x0.size(), x1.size());
7702     dgemm_("T", "N", c2.size(), c1.size()*x0.size()*x1.size(), c3.size(),
7703            1.0, i0data_sorted, c3.size(), i1data_sorted, c3.size(),
7704            1.0, odata_sorted, c2.size());
7705   }
7706   sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, c2.size(), c1.size(), x0.size(), x1.size());
7707   out()->add_block(odata, c1, x0, x1, c2);
7708 }
7709 
compute()7710 void Task43::Task_local::compute() {
7711   const Index c1 = b(0);
7712   const Index c3 = b(1);
7713   const Index x0 = b(2);
7714   const Index x1 = b(3);
7715   // tensor label: I1
7716   std::unique_ptr<double[]> odata(new double[out()->get_size(c1, c3, x0, x1)]);
7717   std::fill_n(odata.get(), out()->get_size(c1, c3, x0, x1), 0.0);
7718   std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, c3, x0, x1)]);
7719   std::fill_n(odata_sorted.get(), out()->get_size(c1, c3, x0, x1), 0.0);
7720   for (auto& x3 : *range_[1]) {
7721     for (auto& x2 : *range_[1]) {
7722       // tensor label: Gamma0
7723       std::unique_ptr<double[]> i0data = in(0)->get_block(x0, x3, x1, x2);
7724       std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x0, x3, x1, x2)]);
7725       sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, x0.size(), x3.size(), x1.size(), x2.size());
7726       // tensor label: t2
7727       std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x3, c3, x2);
7728       std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x3, c3, x2)]);
7729       sort_indices<1,3,0,2,0,1,-2,1>(i1data, i1data_sorted, c1.size(), x3.size(), c3.size(), x2.size());
7730       dgemm_("T", "N", x0.size()*x1.size(), c1.size()*c3.size(), x3.size()*x2.size(),
7731              1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
7732              1.0, odata_sorted, x0.size()*x1.size());
7733     }
7734   }
7735   sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), c1.size(), c3.size());
7736   out()->add_block(odata, c1, c3, x0, x1);
7737 }
7738 
compute()7739 void Task44::Task_local::compute() {
7740   const Index c1 = b(0);
7741   const Index x0 = b(1);
7742   const Index x1 = b(2);
7743   const Index c2 = b(3);
7744   // tensor label: I0
7745   std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x0, x1, c2)]);
7746   std::fill_n(odata.get(), out()->get_size(c1, x0, x1, c2), 0.0);
7747   std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x0, x1, c2)]);
7748   std::fill_n(odata_sorted.get(), out()->get_size(c1, x0, x1, c2), 0.0);
7749   for (auto& x2 : *range_[1]) {
7750     // tensor label: f1
7751     std::unique_ptr<double[]> i0data = in(0)->get_block(c2, x2);
7752     std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c2, x2)]);
7753     sort_indices<1,0,0,1,1,1>(i0data, i0data_sorted, c2.size(), x2.size());
7754     // tensor label: I4
7755     std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x0, x1, x2);
7756     std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x0, x1, x2)]);
7757     sort_indices<3,0,1,2,0,1,1,1>(i1data, i1data_sorted, c1.size(), x0.size(), x1.size(), x2.size());
7758     dgemm_("T", "N", c2.size(), c1.size()*x0.size()*x1.size(), x2.size(),
7759            1.0, i0data_sorted, x2.size(), i1data_sorted, x2.size(),
7760            1.0, odata_sorted, c2.size());
7761   }
7762   sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, c2.size(), c1.size(), x0.size(), x1.size());
7763   out()->add_block(odata, c1, x0, x1, c2);
7764 }
7765 
compute()7766 void Task45::Task_local::compute() {
7767   const Index c1 = b(0);
7768   const Index x0 = b(1);
7769   const Index x1 = b(2);
7770   const Index x2 = b(3);
7771   // tensor label: I4
7772   std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x0, x1, x2)]);
7773   std::fill_n(odata.get(), out()->get_size(c1, x0, x1, x2), 0.0);
7774   std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x0, x1, x2)]);
7775   std::fill_n(odata_sorted.get(), out()->get_size(c1, x0, x1, x2), 0.0);
7776   for (auto& x5 : *range_[1]) {
7777     for (auto& x4 : *range_[1]) {
7778       for (auto& x3 : *range_[1]) {
7779         // tensor label: Gamma1
7780         std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4, x0, x3, x1, x2);
7781         std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, x4, x0, x3, x1, x2)]);
7782         sort_indices<0,1,3,2,4,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x4.size(), x0.size(), x3.size(), x1.size(), x2.size());
7783         // tensor label: t2
7784         std::unique_ptr<double[]> i1data = in(1)->get_block(x5, x4, c1, x3);
7785         std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x5, x4, c1, x3)]);
7786         sort_indices<0,1,3,2,0,1,1,1>(i1data, i1data_sorted, x5.size(), x4.size(), c1.size(), x3.size());
7787         dgemm_("T", "N", x0.size()*x1.size()*x2.size(), c1.size(), x5.size()*x4.size()*x3.size(),
7788                1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
7789                1.0, odata_sorted, x0.size()*x1.size()*x2.size());
7790       }
7791     }
7792   }
7793   sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), x2.size(), c1.size());
7794   out()->add_block(odata, c1, x0, x1, x2);
7795 }
7796 
compute()7797 void Task46::Task_local::compute() {
7798   const Index c1 = b(0);
7799   const Index x0 = b(1);
7800   const Index x1 = b(2);
7801   const Index c2 = b(3);
7802   // tensor label: I0
7803   std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x0, x1, c2)]);
7804   std::fill_n(odata.get(), out()->get_size(c1, x0, x1, c2), 0.0);
7805   std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x0, x1, c2)]);
7806   std::fill_n(odata_sorted.get(), out()->get_size(c1, x0, x1, c2), 0.0);
7807   for (auto& x3 : *range_[1]) {
7808     for (auto& x2 : *range_[1]) {
7809       // tensor label: Gamma2
7810       std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x3, x0, x2);
7811       std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x1, x3, x0, x2)]);
7812       sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, x1.size(), x3.size(), x0.size(), x2.size());
7813       // tensor label: I7
7814       std::unique_ptr<double[]> i1data = in(1)->get_block(c1, c2, x3, x2);
7815       std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, c2, x3, x2)]);
7816       sort_indices<2,3,0,1,0,1,1,1>(i1data, i1data_sorted, c1.size(), c2.size(), x3.size(), x2.size());
7817       dgemm_("T", "N", x1.size()*x0.size(), c1.size()*c2.size(), x3.size()*x2.size(),
7818              1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
7819              1.0, odata_sorted, x1.size()*x0.size());
7820     }
7821   }
7822   sort_indices<2,1,0,3,1,1,1,1>(odata_sorted, odata, x1.size(), x0.size(), c1.size(), c2.size());
7823   out()->add_block(odata, c1, x0, x1, c2);
7824 }
7825 
compute()7826 void Task47::Task_local::compute() {
7827   const Index c1 = b(0);
7828   const Index c2 = b(1);
7829   const Index x3 = b(2);
7830   const Index x2 = b(3);
7831   // tensor label: I7
7832   std::unique_ptr<double[]> odata(new double[out()->get_size(c1, c2, x3, x2)]);
7833   std::fill_n(odata.get(), out()->get_size(c1, c2, x3, x2), 0.0);
7834   std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, c2, x3, x2)]);
7835   std::fill_n(odata_sorted.get(), out()->get_size(c1, c2, x3, x2), 0.0);
7836   for (auto& a3 : *range_[2]) {
7837     // tensor label: f1
7838     std::unique_ptr<double[]> i0data = in(0)->get_block(a3, x2);
7839     std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(a3, x2)]);
7840     sort_indices<0,1,0,1,1,1>(i0data, i0data_sorted, a3.size(), x2.size());
7841     // tensor label: t2
7842     std::unique_ptr<double[]> i1data = in(1)->get_block(c1, a3, c2, x3);
7843     std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, a3, c2, x3)]);
7844     sort_indices<1,0,2,3,0,1,-1,1>(i1data, i1data_sorted, c1.size(), a3.size(), c2.size(), x3.size());
7845     dgemm_("T", "N", x2.size(), c1.size()*c2.size()*x3.size(), a3.size(),
7846            1.0, i0data_sorted, a3.size(), i1data_sorted, a3.size(),
7847            1.0, odata_sorted, x2.size());
7848   }
7849   sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, x2.size(), c1.size(), c2.size(), x3.size());
7850   out()->add_block(odata, c1, c2, x3, x2);
7851 }
7852 
compute()7853 void Task48::Task_local::compute() {
7854   const Index c1 = b(0);
7855   const Index x2 = b(1);
7856   const Index x0 = b(2);
7857   const Index x1 = b(3);
7858   // tensor label: r
7859   std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x2, x0, x1)]);
7860   std::fill_n(odata.get(), out()->get_size(c1, x2, x0, x1), 0.0);
7861   {
7862     // tensor label: I9
7863     std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x1, x0, c1);
7864     sort_indices<3,0,2,1,1,1,1,1>(i0data, odata, x2.size(), x1.size(), x0.size(), c1.size());
7865   }
7866   out()->add_block(odata, c1, x2, x0, x1);
7867 }
7868 
compute()7869 void Task49::Task_local::compute() {
7870   const Index x2 = b(0);
7871   const Index x1 = b(1);
7872   const Index x0 = b(2);
7873   const Index c1 = b(3);
7874   // tensor label: I9
7875   std::unique_ptr<double[]> odata(new double[out()->get_size(x2, x1, x0, c1)]);
7876   std::fill_n(odata.get(), out()->get_size(x2, x1, x0, c1), 0.0);
7877   std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(x2, x1, x0, c1)]);
7878   std::fill_n(odata_sorted.get(), out()->get_size(x2, x1, x0, c1), 0.0);
7879   for (auto& c2 : *range_[0]) {
7880     // tensor label: f1
7881     std::unique_ptr<double[]> i0data = in(0)->get_block(c1, c2);
7882     std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, c2)]);
7883     sort_indices<1,0,0,1,1,1>(i0data, i0data_sorted, c1.size(), c2.size());
7884     // tensor label: I10
7885     std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x2, x1, x0);
7886     std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x2, x1, x0)]);
7887     sort_indices<0,1,2,3,0,1,1,1>(i1data, i1data_sorted, c2.size(), x2.size(), x1.size(), x0.size());
7888     dgemm_("T", "N", c1.size(), x2.size()*x1.size()*x0.size(), c2.size(),
7889            1.0, i0data_sorted, c2.size(), i1data_sorted, c2.size(),
7890            1.0, odata_sorted, c1.size());
7891   }
7892   sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, c1.size(), x2.size(), x1.size(), x0.size());
7893   out()->add_block(odata, x2, x1, x0, c1);
7894 }
7895 
7896 #endif
7897