1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: MRCI_gen1.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/mrci/MRCI_tasks1.h>
29 
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::MRCI;
34 
Task0(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)35 Task0::Task0(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
36   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
37   out_ = t[0];
38   in_ = in;
39   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
40   for (auto& x2 : *range[1])
41     for (auto& x1 : *range[1])
42       for (auto& x3 : *range[1])
43         for (auto& x0 : *range[1])
44           if (t[0]->is_local(x0, x3, x1, x2))
45             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x3, x1, x2}}, in, t[0], range));
46 }
47 
Task1(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)48 Task1::Task1(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
49   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
50   out_ = t[0];
51   in_ = in;
52   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
53   for (auto& x2 : *range[1])
54     for (auto& x1 : *range[1])
55       for (auto& x3 : *range[1])
56         for (auto& x0 : *range[1])
57           for (auto& x4 : *range[1])
58             for (auto& x5 : *range[1])
59               if (t[0]->is_local(x5, x4, x0, x3, x1, x2))
60                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x0, x3, x1, x2}}, in, t[0], range));
61 }
62 
Task2(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)63 Task2::Task2(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
64   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
65   out_ = t[0];
66   in_ = in;
67   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
68   for (auto& x2 : *range[1])
69     for (auto& x0 : *range[1])
70       for (auto& x3 : *range[1])
71         for (auto& x1 : *range[1])
72           if (t[0]->is_local(x1, x3, x0, x2))
73             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, x3, x0, x2}}, in, t[0], range));
74 }
75 
Task3(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)76 Task3::Task3(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
77   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
78   out_ = t[0];
79   in_ = in;
80   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
81   for (auto& x2 : *range[1])
82     for (auto& x3 : *range[1])
83       for (auto& x4 : *range[1])
84         for (auto& x1 : *range[1])
85           for (auto& x5 : *range[1])
86             for (auto& x0 : *range[1])
87               if (t[0]->is_local(x0, x5, x1, x4, x3, x2))
88                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x0, x5, x1, x4, x3, x2}}, in, t[0], range));
89 }
90 
Task4(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)91 Task4::Task4(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
92   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
93   out_ = t[0];
94   in_ = in;
95   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
96   for (auto& x3 : *range[1])
97     for (auto& x1 : *range[1])
98       for (auto& x4 : *range[1])
99         for (auto& x2 : *range[1])
100           for (auto& x5 : *range[1])
101             for (auto& x0 : *range[1])
102               if (t[0]->is_local(x0, x5, x2, x4, x1, x3))
103                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x0, x5, x2, x4, x1, x3}}, in, t[0], range));
104 }
105 
Task5(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)106 Task5::Task5(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
107   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
108   out_ = t[0];
109   in_ = in;
110   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
111   for (auto& x2 : *range[1])
112     for (auto& x1 : *range[1])
113       for (auto& x4 : *range[1])
114         for (auto& x3 : *range[1])
115           for (auto& x5 : *range[1])
116             for (auto& x0 : *range[1])
117               if (t[0]->is_local(x0, x5, x3, x4, x1, x2))
118                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x0, x5, x3, x4, x1, x2}}, in, t[0], range));
119 }
120 
Task6(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)121 Task6::Task6(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
122   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
123   out_ = t[0];
124   in_ = in;
125   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
126   for (auto& x2 : *range[1])
127     for (auto& x3 : *range[1])
128       for (auto& x4 : *range[1])
129         for (auto& x1 : *range[1])
130           for (auto& x5 : *range[1])
131             for (auto& x0 : *range[1])
132               for (auto& x6 : *range[1])
133                 for (auto& x7 : *range[1])
134                   if (t[0]->is_local(x7, x6, x0, x5, x1, x4, x3, x2))
135                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x0, x5, x1, x4, x3, x2}}, in, t[0], range));
136 }
137 
Task7(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)138 Task7::Task7(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
139   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
140   out_ = t[0];
141   in_ = in;
142   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
143   for (auto& x2 : *range[1])
144     for (auto& x1 : *range[1])
145       for (auto& x3 : *range[1])
146         for (auto& x4 : *range[1])
147           for (auto& x5 : *range[1])
148             for (auto& x0 : *range[1])
149               for (auto& x6 : *range[1])
150                 for (auto& x7 : *range[1])
151                   if (t[0]->is_local(x7, x6, x0, x5, x4, x3, x1, x2))
152                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x0, x5, x4, x3, x1, x2}}, in, t[0], range));
153 }
154 
Task8(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)155 Task8::Task8(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
156   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
157   out_ = t[0];
158   in_ = in;
159   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
160   for (auto& x2 : *range[1])
161     for (auto& x0 : *range[1])
162       for (auto& x3 : *range[1])
163         for (auto& x1 : *range[1])
164           for (auto& x4 : *range[1])
165             for (auto& x5 : *range[1])
166               if (t[0]->is_local(x5, x4, x1, x3, x0, x2))
167                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x1, x3, x0, x2}}, in, t[0], range));
168 }
169 
Task9(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)170 Task9::Task9(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
171   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
172   out_ = t[0];
173   in_ = in;
174   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
175   for (auto& x2 : *range[1])
176     for (auto& x3 : *range[1])
177       for (auto& x4 : *range[1])
178         for (auto& x0 : *range[1])
179           for (auto& x5 : *range[1])
180             for (auto& x1 : *range[1])
181               if (t[0]->is_local(x1, x5, x0, x4, x3, x2))
182                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x1, x5, x0, x4, x3, x2}}, in, t[0], range));
183 }
184 
Task10(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)185 Task10::Task10(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
186   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
187   out_ = t[0];
188   in_ = in;
189   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
190   for (auto& x2 : *range[1])
191     for (auto& x0 : *range[1])
192       for (auto& x3 : *range[1])
193         for (auto& x4 : *range[1])
194           for (auto& x5 : *range[1])
195             for (auto& x1 : *range[1])
196               if (t[0]->is_local(x1, x5, x4, x3, x0, x2))
197                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x1, x5, x4, x3, x0, x2}}, in, t[0], range));
198 }
199 
Task11(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)200 Task11::Task11(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
201   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
202   out_ = t[0];
203   in_ = in;
204   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
205   for (auto& x3 : *range[1])
206     for (auto& x1 : *range[1])
207       for (auto& x4 : *range[1])
208         for (auto& x0 : *range[1])
209           for (auto& x2 : *range[1])
210             for (auto& x5 : *range[1])
211               if (t[0]->is_local(x5, x2, x0, x4, x1, x3))
212                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x2, x0, x4, x1, x3}}, in, t[0], range));
213 }
214 
Task12(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)215 Task12::Task12(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
216   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
217   out_ = t[0];
218   in_ = in;
219   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
220   for (auto& x0 : *range[1])
221     for (auto& x1 : *range[1])
222       for (auto& x4 : *range[1])
223         for (auto& x3 : *range[1])
224           for (auto& x5 : *range[1])
225             for (auto& x2 : *range[1])
226               if (t[0]->is_local(x2, x5, x3, x4, x1, x0))
227                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x2, x5, x3, x4, x1, x0}}, in, t[0], range));
228 }
229 
Task13(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)230 Task13::Task13(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
231   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
232   out_ = t[0];
233   in_ = in;
234   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
235   for (auto& x0 : *range[1])
236     for (auto& x1 : *range[1])
237       for (auto& x3 : *range[1])
238         for (auto& x2 : *range[1])
239           for (auto& x4 : *range[1])
240             for (auto& x5 : *range[1])
241               if (t[0]->is_local(x5, x4, x2, x3, x1, x0))
242                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x2, x3, x1, x0}}, in, t[0], range));
243 }
244 
Task14(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)245 Task14::Task14(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
246   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
247   out_ = t[0];
248   in_ = in;
249   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
250   for (auto& x0 : *range[1])
251     for (auto& x1 : *range[1])
252       for (auto& x3 : *range[1])
253         for (auto& x2 : *range[1])
254           if (t[0]->is_local(x2, x3, x1, x0))
255             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x2, x3, x1, x0}}, in, t[0], range));
256 }
257 
Task15(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)258 Task15::Task15(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
259   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
260   out_ = t[0];
261   in_ = in;
262   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
263   for (auto& x0 : *range[1])
264     for (auto& x1 : *range[1])
265       for (auto& x4 : *range[1])
266         for (auto& x2 : *range[1])
267           for (auto& x3 : *range[1])
268             for (auto& x5 : *range[1])
269               if (t[0]->is_local(x5, x3, x2, x4, x1, x0))
270                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x3, x2, x4, x1, x0}}, in, t[0], range));
271 }
272 
Task16(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)273 Task16::Task16(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
274   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
275   out_ = t[0];
276   in_ = in;
277   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
278   for (auto& x0 : *range[1])
279     for (auto& x1 : *range[1])
280       for (auto& x3 : *range[1])
281         for (auto& x4 : *range[1])
282           for (auto& x6 : *range[1])
283             for (auto& x5 : *range[1])
284               for (auto& x7 : *range[1])
285                 for (auto& x2 : *range[1])
286                   if (t[0]->is_local(x2, x7, x5, x6, x4, x3, x1, x0))
287                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x2, x7, x5, x6, x4, x3, x1, x0}}, in, t[0], range));
288 }
289 
Task17(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)290 Task17::Task17(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
291   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
292   out_ = t[0];
293   in_ = in;
294   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
295   for (auto& x0 : *range[1])
296     for (auto& x1 : *range[1])
297       for (auto& x4 : *range[1])
298         for (auto& x5 : *range[1])
299           for (auto& x6 : *range[1])
300             for (auto& x3 : *range[1])
301               for (auto& x7 : *range[1])
302                 for (auto& x2 : *range[1])
303                   if (t[0]->is_local(x2, x7, x3, x6, x5, x4, x1, x0))
304                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x2, x7, x3, x6, x5, x4, x1, x0}}, in, t[0], range));
305 }
306 
Task18(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)307 Task18::Task18(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
308   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
309   out_ = t[0];
310   in_ = in;
311   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
312   for (auto& x0 : *range[1])
313     for (auto& x1 : *range[1])
314       for (auto& x3 : *range[1])
315         for (auto& x4 : *range[1])
316           for (auto& x5 : *range[1])
317             for (auto& x2 : *range[1])
318               for (auto& x6 : *range[1])
319                 for (auto& x7 : *range[1])
320                   if (t[0]->is_local(x7, x6, x2, x5, x4, x3, x1, x0))
321                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x2, x5, x4, x3, x1, x0}}, in, t[0], range));
322 }
323 
Task19(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)324 Task19::Task19(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
325   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
326   out_ = t[0];
327   in_ = in;
328   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
329   for (auto& x0 : *range[1])
330     for (auto& x1 : *range[1])
331       for (auto& x4 : *range[1])
332         for (auto& x2 : *range[1])
333           for (auto& x5 : *range[1])
334             for (auto& x3 : *range[1])
335               for (auto& x6 : *range[1])
336                 for (auto& x7 : *range[1])
337                   if (t[0]->is_local(x7, x6, x3, x5, x2, x4, x1, x0))
338                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x3, x5, x2, x4, x1, x0}}, in, t[0], range));
339 }
340 
Task20(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)341 Task20::Task20(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
342   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
343   out_ = t[0];
344   in_ = in;
345   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
346   for (auto& x0 : *range[1])
347     for (auto& x1 : *range[1])
348       for (auto& x3 : *range[1])
349         for (auto& x2 : *range[1])
350           for (auto& x5 : *range[1])
351             for (auto& x4 : *range[1])
352               for (auto& x6 : *range[1])
353                 for (auto& x7 : *range[1])
354                   if (t[0]->is_local(x7, x6, x4, x5, x2, x3, x1, x0))
355                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x4, x5, x2, x3, x1, x0}}, in, t[0], range));
356 }
357 
Task21(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)358 Task21::Task21(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
359   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
360   out_ = t[0];
361   in_ = in;
362   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
363   for (auto& x0 : *range[1])
364     for (auto& x1 : *range[1])
365       for (auto& x3 : *range[1])
366         for (auto& x4 : *range[1])
367           for (auto& x5 : *range[1])
368             for (auto& x2 : *range[1])
369               if (t[0]->is_local(x2, x5, x4, x3, x1, x0))
370                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x2, x5, x4, x3, x1, x0}}, in, t[0], range));
371 }
372 
Task22(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)373 Task22::Task22(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
374   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
375   out_ = t[0];
376   in_ = in;
377   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
378   for (auto& x0 : *range[1])
379     for (auto& x1 : *range[1])
380       for (auto& x4 : *range[1])
381         for (auto& x2 : *range[1])
382           for (auto& x5 : *range[1])
383             for (auto& x3 : *range[1])
384               if (t[0]->is_local(x3, x5, x2, x4, x1, x0))
385                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x3, x5, x2, x4, x1, x0}}, in, t[0], range));
386 }
387 
Task23(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)388 Task23::Task23(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
389   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
390   out_ = t[0];
391   in_ = in;
392   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
393   for (auto& x0 : *range[1])
394     for (auto& x1 : *range[1])
395       for (auto& x3 : *range[1])
396         for (auto& x2 : *range[1])
397           for (auto& x5 : *range[1])
398             for (auto& x4 : *range[1])
399               if (t[0]->is_local(x4, x5, x2, x3, x1, x0))
400                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x4, x5, x2, x3, x1, x0}}, in, t[0], range));
401 }
402 
Task24(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)403 Task24::Task24(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
404   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
405   out_ = t[0];
406   in_ = in;
407   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
408   for (auto& x0 : *range[1])
409     for (auto& x1 : *range[1])
410       for (auto& x3 : *range[1])
411         for (auto& x4 : *range[1])
412           for (auto& x6 : *range[1])
413             for (auto& x2 : *range[1])
414               for (auto& x5 : *range[1])
415                 for (auto& x7 : *range[1])
416                   if (t[0]->is_local(x7, x5, x2, x6, x4, x3, x1, x0))
417                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x5, x2, x6, x4, x3, x1, x0}}, in, t[0], range));
418 }
419 
Task25(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)420 Task25::Task25(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
421   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
422   out_ = t[0];
423   in_ = in;
424   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
425   for (auto& x0 : *range[1])
426     for (auto& x1 : *range[1])
427       for (auto& x4 : *range[1])
428         for (auto& x5 : *range[1])
429           for (auto& x6 : *range[1])
430             for (auto& x2 : *range[1])
431               for (auto& x3 : *range[1])
432                 for (auto& x7 : *range[1])
433                   if (t[0]->is_local(x7, x3, x2, x6, x5, x4, x1, x0))
434                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x3, x2, x6, x5, x4, x1, x0}}, in, t[0], range));
435 }
436 
Task26(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)437 Task26::Task26(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
438   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
439   out_ = t[0];
440   in_ = in;
441   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
442   for (auto& x0 : *range[1])
443     for (auto& x1 : *range[1])
444       for (auto& x3 : *range[1])
445         for (auto& x2 : *range[1])
446           for (auto& x4 : *range[1])
447             for (auto& x5 : *range[1])
448               for (auto& x6 : *range[1])
449                 for (auto& x7 : *range[1])
450                   if (t[0]->is_local(x7, x6, x5, x4, x2, x3, x1, x0))
451                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x5, x4, x2, x3, x1, x0}}, in, t[0], range));
452 }
453 
Task27(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)454 Task27::Task27(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
455   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
456   out_ = t[0];
457   in_ = in;
458   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
459   for (auto& x0 : *range[1])
460     for (auto& x1 : *range[1])
461       for (auto& x4 : *range[1])
462         for (auto& x2 : *range[1])
463           for (auto& x5 : *range[1])
464             for (auto& x6 : *range[1])
465               for (auto& x3 : *range[1])
466                 for (auto& x7 : *range[1])
467                   if (t[0]->is_local(x7, x3, x6, x5, x2, x4, x1, x0))
468                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x3, x6, x5, x2, x4, x1, x0}}, in, t[0], range));
469 }
470 
Task28(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)471 Task28::Task28(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
472   array<shared_ptr<const Tensor>,5> in = {{t[1], t[2], t[3], t[4], t[5]}};
473   out_ = t[0];
474   in_ = in;
475   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
476   for (auto& x0 : *range[1])
477     for (auto& x1 : *range[1])
478       for (auto& x5 : *range[1])
479         for (auto& x2 : *range[1])
480           for (auto& x6 : *range[1])
481             for (auto& x7 : *range[1])
482               for (auto& x3 : *range[1])
483                 for (auto& x4 : *range[1])
484                   if (t[0]->is_local(x7, x6, x2, x5, x1, x0))
485                     subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x2, x5, x1, x0, x4, x3}}, in, t[0], range));
486 }
487 
Task29(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)488 Task29::Task29(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
489   array<shared_ptr<const Tensor>,5> in = {{t[1], t[2], t[3], t[4], t[5]}};
490   out_ = t[0];
491   in_ = in;
492   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
493   for (auto& x0 : *range[1])
494     for (auto& x1 : *range[1])
495       for (auto& x7 : *range[1])
496         for (auto& x2 : *range[1])
497           for (auto& x8 : *range[1])
498             for (auto& x9 : *range[1])
499               for (auto& x3 : *range[1])
500                 for (auto& x4 : *range[1])
501                   for (auto& x5 : *range[1])
502                     for (auto& x6 : *range[1])
503                       if (t[0]->is_local(x9, x8, x2, x7, x1, x0))
504                         subtasks_.push_back(make_shared<Task_local>(array<const Index,10>{{x9, x8, x2, x7, x1, x0, x6, x5, x4, x3}}, in, t[0], range));
505 }
506 
Task30(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)507 Task30::Task30(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
508   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
509   out_ = t[0];
510   in_ = in;
511   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
512   for (auto& x1 : *range[1])
513     for (auto& x0 : *range[1])
514       for (auto& x2 : *range[1])
515         for (auto& x3 : *range[1])
516           if (t[0]->is_local(x3, x2, x0, x1))
517             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, x2, x0, x1}}, in, t[0], range));
518 }
519 
Task31(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)520 Task31::Task31(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
521   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
522   out_ = t[0];
523   in_ = in;
524   subtasks_.reserve(range[1]->nblock()*range[1]->nblock());
525   for (auto& x1 : *range[1])
526     for (auto& x0 : *range[1])
527       if (t[0]->is_local(x0, x1))
528         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{x0, x1}}, in, t[0], range));
529 }
530 
Task32(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)531 Task32::Task32(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
532   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
533   out_ = t[0];
534   in_ = in;
535   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
536   for (auto& x2 : *range[1])
537     for (auto& x0 : *range[1])
538       for (auto& x1 : *range[1])
539         for (auto& x3 : *range[1])
540           if (t[0]->is_local(x3, x1, x0, x2))
541             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, x1, x0, x2}}, in, t[0], range));
542 }
543 
Task33(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)544 Task33::Task33(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
545   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
546   out_ = t[0];
547   in_ = in;
548   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
549   for (auto& x1 : *range[1])
550     for (auto& x2 : *range[1])
551       for (auto& x3 : *range[1])
552         for (auto& x0 : *range[1])
553           if (t[0]->is_local(x0, x3, x2, x1))
554             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x3, x2, x1}}, in, t[0], range));
555 }
556 
Task34(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)557 Task34::Task34(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
558   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
559   out_ = t[0];
560   in_ = in;
561   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
562   for (auto& x1 : *range[1])
563     for (auto& x2 : *range[1])
564       for (auto& x4 : *range[1])
565         for (auto& x0 : *range[1])
566           for (auto& x5 : *range[1])
567             for (auto& x3 : *range[1])
568               if (t[0]->is_local(x3, x5, x0, x4, x2, x1))
569                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x3, x5, x0, x4, x2, x1}}, in, t[0], range));
570 }
571 
Task35(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)572 Task35::Task35(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
573   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
574   out_ = t[0];
575   in_ = in;
576   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
577   for (auto& x1 : *range[1])
578     for (auto& x2 : *range[1])
579       for (auto& x3 : *range[1])
580         for (auto& x0 : *range[1])
581           for (auto& x4 : *range[1])
582             for (auto& x5 : *range[1])
583               if (t[0]->is_local(x5, x4, x0, x3, x2, x1))
584                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x0, x3, x2, x1}}, in, t[0], range));
585 }
586 
Task36(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)587 Task36::Task36(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
588   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
589   out_ = t[0];
590   in_ = in;
591   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
592   for (auto& x1 : *range[1])
593     for (auto& x0 : *range[1])
594       for (auto& x3 : *range[1])
595         for (auto& x2 : *range[1])
596           for (auto& x4 : *range[1])
597             for (auto& x5 : *range[1])
598               if (t[0]->is_local(x5, x4, x2, x3, x0, x1))
599                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x2, x3, x0, x1}}, in, t[0], range));
600 }
601 
Task37(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)602 Task37::Task37(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
603   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
604   out_ = t[0];
605   in_ = in;
606   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
607   for (auto& x1 : *range[1])
608     for (auto& x0 : *range[1])
609       for (auto& x3 : *range[1])
610         for (auto& x2 : *range[1])
611           if (t[0]->is_local(x2, x3, x0, x1))
612             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x2, x3, x0, x1}}, in, t[0], range));
613 }
614 
Task38(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)615 Task38::Task38(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
616   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
617   out_ = t[0];
618   in_ = in;
619   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
620   for (auto& x1 : *range[1])
621     for (auto& x2 : *range[1])
622       for (auto& x4 : *range[1])
623         for (auto& x0 : *range[1])
624           for (auto& x3 : *range[1])
625             for (auto& x5 : *range[1])
626               if (t[0]->is_local(x5, x3, x0, x4, x2, x1))
627                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x3, x0, x4, x2, x1}}, in, t[0], range));
628 }
629 
Task39(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)630 Task39::Task39(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
631   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
632   out_ = t[0];
633   in_ = in;
634   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
635   for (auto& x2 : *range[1])
636     for (auto& x3 : *range[1])
637       for (auto& x4 : *range[1])
638         for (auto& x0 : *range[1])
639           for (auto& x1 : *range[1])
640             for (auto& x5 : *range[1])
641               if (t[0]->is_local(x5, x1, x0, x4, x3, x2))
642                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x1, x0, x4, x3, x2}}, in, t[0], range));
643 }
644 
Task40(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)645 Task40::Task40(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
646   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
647   out_ = t[0];
648   in_ = in;
649   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
650   for (auto& x1 : *range[1])
651     for (auto& x0 : *range[1])
652       for (auto& x2 : *range[1])
653         for (auto& x3 : *range[1])
654           for (auto& x4 : *range[1])
655             for (auto& x5 : *range[1])
656               if (t[0]->is_local(x5, x4, x3, x2, x0, x1))
657                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x3, x2, x0, x1}}, in, t[0], range));
658 }
659 
Task41(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)660 Task41::Task41(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
661   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
662   out_ = t[0];
663   in_ = in;
664   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
665   for (auto& x1 : *range[1])
666     for (auto& x0 : *range[1])
667       for (auto& x3 : *range[1])
668         for (auto& x4 : *range[1])
669           for (auto& x2 : *range[1])
670             for (auto& x5 : *range[1])
671               if (t[0]->is_local(x5, x2, x4, x3, x0, x1))
672                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x2, x4, x3, x0, x1}}, in, t[0], range));
673 }
674 
Task42(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)675 Task42::Task42(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
676   array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
677   out_ = t[0];
678   in_ = in;
679   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
680   for (auto& x3 : *range[1])
681     for (auto& x0 : *range[1])
682       for (auto& x1 : *range[1])
683         for (auto& x2 : *range[1])
684           if (t[0]->is_local(x0, x3))
685             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x3, x2, x1}}, in, t[0], range));
686 }
687 
Task43(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)688 Task43::Task43(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
689   array<shared_ptr<const Tensor>,5> in = {{t[1], t[2], t[3], t[4], t[5]}};
690   out_ = t[0];
691   in_ = in;
692   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
693   for (auto& x5 : *range[1])
694     for (auto& x0 : *range[1])
695       for (auto& x1 : *range[1])
696         for (auto& x2 : *range[1])
697           for (auto& x3 : *range[1])
698             for (auto& x4 : *range[1])
699               if (t[0]->is_local(x0, x5))
700                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x0, x5, x4, x3, x2, x1}}, in, t[0], range));
701 }
702 
Task44(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)703 Task44::Task44(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
704   array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
705   out_ = t[0];
706   in_ = in;
707   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
708   for (auto& x0 : *range[1])
709     for (auto& x2 : *range[1])
710       for (auto& x3 : *range[1])
711         for (auto& x1 : *range[1])
712           for (auto& x4 : *range[1])
713             for (auto& x5 : *range[1])
714               if (t[0]->is_local(x5, x4, x1, x3, x2, x0))
715                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x1, x3, x2, x0}}, in, t[0], range));
716 }
717 
Task45(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)718 Task45::Task45(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
719   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
720   out_ = t[0];
721   in_ = in;
722   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
723   for (auto& x0 : *range[1])
724     for (auto& x2 : *range[1])
725       for (auto& x3 : *range[1])
726         for (auto& x1 : *range[1])
727           if (t[0]->is_local(x1, x3, x2, x0))
728             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, x3, x2, x0}}, in, t[0], range));
729 }
730 
Task46(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)731 Task46::Task46(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
732   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
733   out_ = t[0];
734   in_ = in;
735   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
736   for (auto& x2 : *range[1])
737     for (auto& x1 : *range[1])
738       for (auto& x0 : *range[1])
739         for (auto& x3 : *range[1])
740           if (t[0]->is_local(x3, x0, x1, x2))
741             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, x0, x1, x2}}, in, t[0], range));
742 }
743 
Task47(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)744 Task47::Task47(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
745   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
746   out_ = t[0];
747   in_ = in;
748   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
749   for (auto& x0 : *range[1])
750     for (auto& x1 : *range[1])
751       for (auto& x2 : *range[1])
752         for (auto& x3 : *range[1])
753           if (t[0]->is_local(x3, x2, x1, x0))
754             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, x2, x1, x0}}, in, t[0], range));
755 }
756 
Task48(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)757 Task48::Task48(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
758   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
759   out_ = t[0];
760   in_ = in;
761   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
762   for (auto& x2 : *range[1])
763     for (auto& x1 : *range[1])
764       for (auto& x3 : *range[1])
765         for (auto& x4 : *range[1])
766           for (auto& x0 : *range[1])
767             for (auto& x5 : *range[1])
768               if (t[0]->is_local(x5, x0, x4, x3, x1, x2))
769                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x0, x4, x3, x1, x2}}, in, t[0], range));
770 }
771 
Task49(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)772 Task49::Task49(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
773   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
774   out_ = t[0];
775   in_ = in;
776   subtasks_.reserve(range[1]->nblock()*range[1]->nblock());
777   for (auto& x0 : *range[1])
778     for (auto& x1 : *range[1])
779       if (t[0]->is_local(x1, x0))
780         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{x1, x0}}, in, t[0], range));
781 }
782 
783 #endif
784