ARTS  2.2.66
test_tensor.cc
Go to the documentation of this file.
1 /* Copyright (C) 2002-2012
2  Stefan Buehler <sbuehler@ltu.se>
3  Wolfram-Andre Haas <wolhaas@hermes.fho-emden.de>
4 
5  This program is free software; you can redistribute it and/or modify it
6  under the terms of the GNU General Public License as published by the
7  Free Software Foundation; either version 2, or (at your option) any
8  later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
18  USA. */
19 
20 #include <iostream>
21 #include <cmath>
22 
23 #include "array.h"
24 #include "matpackVII.h"
25 
26 using std::cout;
27 using std::setprecision;
28 
29 
30 /* --------------------------------------------------------------
31  Helper functions for filling tensors with running numbers,
32  starting with start = 1 (default).
33  -------------------------------------------------------------- */
34 
36 {
37  Tensor4 t(b, p, r, c);
38 
39  Index fill = start;
40 
41  for (Index i = 0; i < b; i++)
42  for (Index j = 0; j < p; j++)
43  for (Index k = 0; k < r; k++)
44  for (Index l = 0; l < c; l++)
45  t(i, j, k, l) = (Numeric)(fill++);
46 
47  return t;
48 }
49 
50 Tensor5 fill_tensor5(Index s, Index b, Index p, Index r, Index c, Index start = 1)
51 {
52  Tensor5 t(s, b, p, r, c);
53 
54  Index fill = start;
55 
56  for (Index i = 0; i < s; i++)
57  for (Index j = 0; j < b; j++)
58  for (Index k = 0; k < p; k++)
59  for (Index l = 0; l < r; l++)
60  for (Index m = 0; m < c; m++)
61  t(i, j, k, l, m) = (Numeric)(fill++);
62 
63  return t;
64 }
65 
66 /*********************
67  * Tests for Tensor4 *
68  *********************/
69 
70 void test1()
71 {
72  cout << "Test Tensor4:\n\n";
73 
74  Tensor4 a = fill_tensor4(2, 3, 3, 4); // 2 books, 3 pages, 3 rows, 4 columns
75 
76  cout << "Dimensions of tensor a:\n"
77  << "book = " << a.nbooks() << ", page = " << a.npages()
78  << ", row = " << a.nrows() << ", column = " << a.ncols()
79  << '\n';
80 
81  cout << "\nmin(a) = " << min(a)
82  << ", max(a) = " << max(a)
83  << "\n\na=\n" << a
84  << "\n\n";
85 
86  cout << "Second book:\n"
87  << a(1, Range(joker), Range(joker), Range(joker))
88  << "\n\n";
89 
90  cout << "First letter of every page of every book:\n"
91  << a(Range(joker), Range(joker), 0, 0)
92  << "\n\n";
93 
94  cout << "First rows of second page of every book\n"
95  << a(Range(joker), 1, 0, Range(joker))
96  << "\n\n";
97 
98  cout << "Third column of third page of first book\n"
99  << a(0, 2, Range(joker), 2)
100  << "\n\n";
101 
102  cout << "Substract 10 from each element of the second book:\n"
103  << (a(1, Range(joker), Range(joker), Range(joker)) -= 10)
104  << "\n\n";
105 
106  // Create a sub-tensor of Tensor4
107  Tensor4View b = a(Range(joker), Range(0,2), Range(joker), Range(1,3));
108 
109  cout << "b =\n" << b << '\n';
110 }
111 
112 void test2()
113 {
114  Tensor4 a = fill_tensor4(2, 2, 4, 5, 4); // Fill a with running numbers,
115  // starting with 4
116 
117  cout << "a =\n" << a << "\n\n";
118 
119  transform(a, sqrt, a);
120 
121  cout << "After taking the square-root:\n" << setprecision(3) << a << '\n';
122 }
123 
124 void test3()
125 {
126  ArrayOfTensor4 a(2);
127  Tensor4 b(2, 2, 2, 3, 1.5);
128 
129  a[0].resize(2, 1, 4, 5);
130  a[0] = 3;
131  a[1] = b;
132 
133  cout << "a =\n" << a << '\n';
134 }
135 
136 /*********************
137  * Tests for Tensor5 *
138  *********************/
139 
140 void test4()
141 {
142  cout << "Test Tensor5:\n\n";
143 
144  Tensor5 a = fill_tensor5(2, 2, 3, 3, 4); // 2 shelves,
145  // 2 books, 3 pages,
146  // 3 rows, 4 columns
147 
148  cout << "Dimensions of tensor a:\n"
149  << "shelf = " << a.nshelves()
150  << ", book = " << a.nbooks() << ", page = " << a.npages()
151  << ", row = " << a.nrows() << ", column = " << a.ncols()
152  << '\n';
153 
154  cout << "\nmin(a) = " << min(a)
155  << ", max(a) = " << max(a)
156  << "\n\na=\n" << a
157  << "\n\n";
158 
159  cout << "Second shelf:\n"
160  << a(1, Range(joker), Range(joker), Range(joker), Range(joker))
161  << "\n\n";
162 
163  cout << "First rows of every second page of every book and every shelf:\n"
164  << a(Range(joker), Range(joker), Range(0,joker,2), 0, Range(joker))
165  << "\n\n";
166 
167  cout << "First and second letter of third column "
168  << "of every page and every book of first shelf:\n"
169  << a(0, Range(joker), Range(joker), Range(0,2), 2)
170  << "\n\n";
171 
172  cout << "Last two letters of last row of second and third page "
173  << "of every book and every shelf:\n"
174  << a(Range(joker), Range(joker), Range(1,2),
175  a.nrows() - 1, Range(a.ncols() - 2, 2))
176  << "\n\n";
177 
178  // Assignment between Tensor5 and Tensor4
179 
180  Tensor4 b(3, 2, a.nrows(), a.ncols(), 4);
181 
182  // Copy the first two pages of a shelf 1, book 1 to b book 2, page 1-2
183  b(1, Range(joker), Range(joker), Range(joker)) =
184  a(0, 0, Range(0,2), Range(joker), Range(joker));
185 
186  cout << "b =\n" << b << '\n';
187 }
188 
189 void test5()
190 {
191  Tensor5 u = fill_tensor5(2, 3, 3, 2, 3);
192  Tensor5 v = fill_tensor5(2, 3, 3, 2, 3, 5); // Fill v with running numbers,
193  // starting with 5
194 
195  cout << "u =\n" << u << "\n\nv =\n" << v << "\n\n";
196 
197  u += v;
198 
199  cout << "After element-vise addition with tensor v:\n"
200  << "u =\n" << u << '\n';
201 }
202 
203 /*********************
204  * Tests for Tensor6 *
205  *********************/
206 
208  Index v, Index s, Index b,
209  Index p, Index r, Index c)
210 {
211  // Lets fill the tensor with special values, so that we can
212  // immediately see the vitrine, shelf, etc.
213  // 345123 shall mean vitrine 3, shelf 4, book 5, and so on.
214  //
215  // Will work only if all dimensions are smaller 10.
216 
217  x.resize(v,s,b,p,r,c);
218 
219  for (Index is = 0; is < s; is++)
220  for (Index iv = 0; iv < v; iv++)
221  for (Index ib = 0; ib < b; ib++)
222  for (Index ip = 0; ip < p; ip++)
223  for (Index ir = 0; ir < r; ir++)
224  for (Index ic = 0; ic < c; ic++)
225  x(iv, is, ib, ip, ir, ic)
226  = (Numeric)(ic + ir*10 + ip*100 + ib*1000 + is*10000 + iv*100000);
227 }
228 
229 void test6()
230 {
231  cout << "Test Tensor6:\n\n";
232 
233  Tensor6 a;
234  fill_tensor6(a,
235  3, 2, 2, 3, 3, 4); // 3 vitrines, 2 shelves,
236  // 2 books, 3 pages,
237  // 3 rows, 4 columns
238 
239  cout << "Dimensions of tensor a:\n"
240  << "vitrine = " << a.nvitrines() << "\n"
241  << "shelf = " << a.nshelves() << "\n"
242  << "book = " << a.nbooks() << "\n"
243  << "page = " << a.npages() << "\n"
244  << "row = " << a.nrows() << "\n"
245  << "column = " << a.ncols() << "\n\n";
246 
247  cout << "a(1,1,1,1,1,1) = " << a(1,1,1,1,1,1) << "\n\n";
248 
249  cout << "a(1,1,1,1,Range(joker),1) = " << a(1,1,1,1,Range(joker),1) << "\n\n";
250 }
251 
252 /*********************
253  * Tests for Tensor7 *
254  *********************/
255 
257  Index l,
258  Index v, Index s, Index b,
259  Index p, Index r, Index c)
260 {
261  // Lets fill the tensor with special values, so that we can
262  // immediately see the vitrine, shelf, etc.
263  // 345123 shall mean vitrine 3, shelf 4, book 5, and so on.
264  //
265  // Will work only if all dimensions are smaller 10.
266 
267  x.resize(l,v,s,b,p,r,c);
268 
269  for (Index il = 0; il < l; il++)
270  for (Index is = 0; is < s; is++)
271  for (Index iv = 0; iv < v; iv++)
272  for (Index ib = 0; ib < b; ib++)
273  for (Index ip = 0; ip < p; ip++)
274  for (Index ir = 0; ir < r; ir++)
275  for (Index ic = 0; ic < c; ic++)
276  x(il, iv, is, ib, ip, ir, ic)
277  = (Numeric)(ic + ir*10 + ip*100 + ib*1000 + is*10000 + iv*100000 + il*1000000);
278 }
279 
280 void test7()
281 {
282  cout << "Test Tensor7:\n\n";
283 
284  Tensor7 a;
285  fill_tensor7(a,
286  2, 3, 2, 2, 3, 3, 4); // 2 libraries,
287  // 3 vitrines, 2 shelves,
288  // 2 books, 3 pages,
289  // 3 rows, 4 columns
290 
291  cout << "Dimensions of tensor a:\n"
292  << "libraries = " << a.nlibraries() << "\n"
293  << "vitrine = " << a.nvitrines() << "\n"
294  << "shelf = " << a.nshelves() << "\n"
295  << "book = " << a.nbooks() << "\n"
296  << "page = " << a.npages() << "\n"
297  << "row = " << a.nrows() << "\n"
298  << "column = " << a.ncols() << "\n\n";
299 
300  cout << "a(1,1,1,1,1,1,1) = " << setprecision(10)
301  << a(1,1,1,1,1,1,1) << "\n\n";
302 
303  cout << "a(1,1,1,1,1,Range(joker),1) = " << setprecision(10)
304  << a(1,1,1,1,1,Range(joker),1) << "\n\n";
305 }
306 
307 void test8()
308 {
309  cout << "Test Tensor7:\n"
310  << "The output of this test should be all ones!\n\n";
311 
312  Tensor7 a;
313  fill_tensor7(a,
314  2, 3, 2, 2, 3, 3, 4); // 2 libraries,
315  // 3 vitrines, 2 shelves,
316  // 2 books, 3 pages,
317  // 3 rows, 4 columns
318 
319  Index I(1); // Select element 1.
320  Range R(1,1); // Select one element starting at index 1.
321 
322  cout << setprecision(10) << a(I,I,I,I,I,I,I) << "\n";
323  cout << setprecision(10) << a(I,I,I,I,I,I,R) << "\n";
324  cout << setprecision(10) << a(I,I,I,I,I,R,I) << "\n";
325  cout << setprecision(10) << a(I,I,I,I,I,R,R) << "\n";
326  cout << setprecision(10) << a(I,I,I,I,R,I,I) << "\n";
327  cout << setprecision(10) << a(I,I,I,I,R,I,R) << "\n";
328  cout << setprecision(10) << a(I,I,I,I,R,R,I) << "\n";
329  cout << setprecision(10) << a(I,I,I,I,R,R,R) << "\n";
330  cout << setprecision(10) << a(I,I,I,R,I,I,I) << "\n";
331  cout << setprecision(10) << a(I,I,I,R,I,I,R) << "\n";
332  cout << setprecision(10) << a(I,I,I,R,I,R,I) << "\n";
333  cout << setprecision(10) << a(I,I,I,R,I,R,R) << "\n";
334  cout << setprecision(10) << a(I,I,I,R,R,I,I) << "\n";
335  cout << setprecision(10) << a(I,I,I,R,R,I,R) << "\n";
336  cout << setprecision(10) << a(I,I,I,R,R,R,I) << "\n";
337  cout << setprecision(10) << a(I,I,I,R,R,R,R) << "\n";
338  cout << setprecision(10) << a(I,I,R,I,I,I,I) << "\n";
339  cout << setprecision(10) << a(I,I,R,I,I,I,R) << "\n";
340  cout << setprecision(10) << a(I,I,R,I,I,R,I) << "\n";
341  cout << setprecision(10) << a(I,I,R,I,I,R,R) << "\n";
342  cout << setprecision(10) << a(I,I,R,I,R,I,I) << "\n";
343  cout << setprecision(10) << a(I,I,R,I,R,I,R) << "\n";
344  cout << setprecision(10) << a(I,I,R,I,R,R,I) << "\n";
345  cout << setprecision(10) << a(I,I,R,I,R,R,R) << "\n";
346  cout << setprecision(10) << a(I,I,R,R,I,I,I) << "\n";
347  cout << setprecision(10) << a(I,I,R,R,I,I,R) << "\n";
348  cout << setprecision(10) << a(I,I,R,R,I,R,I) << "\n";
349  cout << setprecision(10) << a(I,I,R,R,I,R,R) << "\n";
350  cout << setprecision(10) << a(I,I,R,R,R,I,I) << "\n";
351  cout << setprecision(10) << a(I,I,R,R,R,I,R) << "\n";
352  cout << setprecision(10) << a(I,I,R,R,R,R,I) << "\n";
353  cout << setprecision(10) << a(I,I,R,R,R,R,R) << "\n";
354  cout << setprecision(10) << a(I,R,I,I,I,I,I) << "\n";
355  cout << setprecision(10) << a(I,R,I,I,I,I,R) << "\n";
356  cout << setprecision(10) << a(I,R,I,I,I,R,I) << "\n";
357  cout << setprecision(10) << a(I,R,I,I,I,R,R) << "\n";
358  cout << setprecision(10) << a(I,R,I,I,R,I,I) << "\n";
359  cout << setprecision(10) << a(I,R,I,I,R,I,R) << "\n";
360  cout << setprecision(10) << a(I,R,I,I,R,R,I) << "\n";
361  cout << setprecision(10) << a(I,R,I,I,R,R,R) << "\n";
362  cout << setprecision(10) << a(I,R,I,R,I,I,I) << "\n";
363  cout << setprecision(10) << a(I,R,I,R,I,I,R) << "\n";
364  cout << setprecision(10) << a(I,R,I,R,I,R,I) << "\n";
365  cout << setprecision(10) << a(I,R,I,R,I,R,R) << "\n";
366  cout << setprecision(10) << a(I,R,I,R,R,I,I) << "\n";
367  cout << setprecision(10) << a(I,R,I,R,R,I,R) << "\n";
368  cout << setprecision(10) << a(I,R,I,R,R,R,I) << "\n";
369  cout << setprecision(10) << a(I,R,I,R,R,R,R) << "\n";
370  cout << setprecision(10) << a(I,R,R,I,I,I,I) << "\n";
371  cout << setprecision(10) << a(I,R,R,I,I,I,R) << "\n";
372  cout << setprecision(10) << a(I,R,R,I,I,R,I) << "\n";
373  cout << setprecision(10) << a(I,R,R,I,I,R,R) << "\n";
374  cout << setprecision(10) << a(I,R,R,I,R,I,I) << "\n";
375  cout << setprecision(10) << a(I,R,R,I,R,I,R) << "\n";
376  cout << setprecision(10) << a(I,R,R,I,R,R,I) << "\n";
377  cout << setprecision(10) << a(I,R,R,I,R,R,R) << "\n";
378  cout << setprecision(10) << a(I,R,R,R,I,I,I) << "\n";
379  cout << setprecision(10) << a(I,R,R,R,I,I,R) << "\n";
380  cout << setprecision(10) << a(I,R,R,R,I,R,I) << "\n";
381  cout << setprecision(10) << a(I,R,R,R,I,R,R) << "\n";
382  cout << setprecision(10) << a(I,R,R,R,R,I,I) << "\n";
383  cout << setprecision(10) << a(I,R,R,R,R,I,R) << "\n";
384  cout << setprecision(10) << a(I,R,R,R,R,R,I) << "\n";
385  cout << setprecision(10) << a(I,R,R,R,R,R,R) << "\n";
386  cout << setprecision(10) << a(R,I,I,I,I,I,I) << "\n";
387  cout << setprecision(10) << a(R,I,I,I,I,I,R) << "\n";
388  cout << setprecision(10) << a(R,I,I,I,I,R,I) << "\n";
389  cout << setprecision(10) << a(R,I,I,I,I,R,R) << "\n";
390  cout << setprecision(10) << a(R,I,I,I,R,I,I) << "\n";
391  cout << setprecision(10) << a(R,I,I,I,R,I,R) << "\n";
392  cout << setprecision(10) << a(R,I,I,I,R,R,I) << "\n";
393  cout << setprecision(10) << a(R,I,I,I,R,R,R) << "\n";
394  cout << setprecision(10) << a(R,I,I,R,I,I,I) << "\n";
395  cout << setprecision(10) << a(R,I,I,R,I,I,R) << "\n";
396  cout << setprecision(10) << a(R,I,I,R,I,R,I) << "\n";
397  cout << setprecision(10) << a(R,I,I,R,I,R,R) << "\n";
398  cout << setprecision(10) << a(R,I,I,R,R,I,I) << "\n";
399  cout << setprecision(10) << a(R,I,I,R,R,I,R) << "\n";
400  cout << setprecision(10) << a(R,I,I,R,R,R,I) << "\n";
401  cout << setprecision(10) << a(R,I,I,R,R,R,R) << "\n";
402  cout << setprecision(10) << a(R,I,R,I,I,I,I) << "\n";
403  cout << setprecision(10) << a(R,I,R,I,I,I,R) << "\n";
404  cout << setprecision(10) << a(R,I,R,I,I,R,I) << "\n";
405  cout << setprecision(10) << a(R,I,R,I,I,R,R) << "\n";
406  cout << setprecision(10) << a(R,I,R,I,R,I,I) << "\n";
407  cout << setprecision(10) << a(R,I,R,I,R,I,R) << "\n";
408  cout << setprecision(10) << a(R,I,R,I,R,R,I) << "\n";
409  cout << setprecision(10) << a(R,I,R,I,R,R,R) << "\n";
410  cout << setprecision(10) << a(R,I,R,R,I,I,I) << "\n";
411  cout << setprecision(10) << a(R,I,R,R,I,I,R) << "\n";
412  cout << setprecision(10) << a(R,I,R,R,I,R,I) << "\n";
413  cout << setprecision(10) << a(R,I,R,R,I,R,R) << "\n";
414  cout << setprecision(10) << a(R,I,R,R,R,I,I) << "\n";
415  cout << setprecision(10) << a(R,I,R,R,R,I,R) << "\n";
416  cout << setprecision(10) << a(R,I,R,R,R,R,I) << "\n";
417  cout << setprecision(10) << a(R,I,R,R,R,R,R) << "\n";
418  cout << setprecision(10) << a(R,R,I,I,I,I,I) << "\n";
419  cout << setprecision(10) << a(R,R,I,I,I,I,R) << "\n";
420  cout << setprecision(10) << a(R,R,I,I,I,R,I) << "\n";
421  cout << setprecision(10) << a(R,R,I,I,I,R,R) << "\n";
422  cout << setprecision(10) << a(R,R,I,I,R,I,I) << "\n";
423  cout << setprecision(10) << a(R,R,I,I,R,I,R) << "\n";
424  cout << setprecision(10) << a(R,R,I,I,R,R,I) << "\n";
425  cout << setprecision(10) << a(R,R,I,I,R,R,R) << "\n";
426  cout << setprecision(10) << a(R,R,I,R,I,I,I) << "\n";
427  cout << setprecision(10) << a(R,R,I,R,I,I,R) << "\n";
428  cout << setprecision(10) << a(R,R,I,R,I,R,I) << "\n";
429  cout << setprecision(10) << a(R,R,I,R,I,R,R) << "\n";
430  cout << setprecision(10) << a(R,R,I,R,R,I,I) << "\n";
431  cout << setprecision(10) << a(R,R,I,R,R,I,R) << "\n";
432  cout << setprecision(10) << a(R,R,I,R,R,R,I) << "\n";
433  cout << setprecision(10) << a(R,R,I,R,R,R,R) << "\n";
434  cout << setprecision(10) << a(R,R,R,I,I,I,I) << "\n";
435  cout << setprecision(10) << a(R,R,R,I,I,I,R) << "\n";
436  cout << setprecision(10) << a(R,R,R,I,I,R,I) << "\n";
437  cout << setprecision(10) << a(R,R,R,I,I,R,R) << "\n";
438  cout << setprecision(10) << a(R,R,R,I,R,I,I) << "\n";
439  cout << setprecision(10) << a(R,R,R,I,R,I,R) << "\n";
440  cout << setprecision(10) << a(R,R,R,I,R,R,I) << "\n";
441  cout << setprecision(10) << a(R,R,R,I,R,R,R) << "\n";
442  cout << setprecision(10) << a(R,R,R,R,I,I,I) << "\n";
443  cout << setprecision(10) << a(R,R,R,R,I,I,R) << "\n";
444  cout << setprecision(10) << a(R,R,R,R,I,R,I) << "\n";
445  cout << setprecision(10) << a(R,R,R,R,I,R,R) << "\n";
446  cout << setprecision(10) << a(R,R,R,R,R,I,I) << "\n";
447  cout << setprecision(10) << a(R,R,R,R,R,I,R) << "\n";
448  cout << setprecision(10) << a(R,R,R,R,R,R,I) << "\n";
449  cout << setprecision(10) << a(R,R,R,R,R,R,R) << "\n";
450 }
451 
452 void test9()
453 {
454  cout << "Test Tensor7:\n"
455  << "The output of this test should be 128\n\n";
456 
457  Tensor7 a(2, 3, 2, 2, 3, 3, 4, 0.0); // 2 libraries,
458  // 3 vitrines, 2 shelves,
459  // 2 books, 3 pages,
460  // 3 rows, 4 columns
461  // Fill with zeroes.
462 
463  Index I(1); // Select element 1.
464  Range R(1,1); // Select one element starting at index 1.
465 
466  a(I,I,I,I,I,I,I) += 1;
467  a(I,I,I,I,I,I,R) += 1;
468  a(I,I,I,I,I,R,I) += 1;
469  a(I,I,I,I,I,R,R) += 1;
470  a(I,I,I,I,R,I,I) += 1;
471  a(I,I,I,I,R,I,R) += 1;
472  a(I,I,I,I,R,R,I) += 1;
473  a(I,I,I,I,R,R,R) += 1;
474  a(I,I,I,R,I,I,I) += 1;
475  a(I,I,I,R,I,I,R) += 1;
476  a(I,I,I,R,I,R,I) += 1;
477  a(I,I,I,R,I,R,R) += 1;
478  a(I,I,I,R,R,I,I) += 1;
479  a(I,I,I,R,R,I,R) += 1;
480  a(I,I,I,R,R,R,I) += 1;
481  a(I,I,I,R,R,R,R) += 1;
482  a(I,I,R,I,I,I,I) += 1;
483  a(I,I,R,I,I,I,R) += 1;
484  a(I,I,R,I,I,R,I) += 1;
485  a(I,I,R,I,I,R,R) += 1;
486  a(I,I,R,I,R,I,I) += 1;
487  a(I,I,R,I,R,I,R) += 1;
488  a(I,I,R,I,R,R,I) += 1;
489  a(I,I,R,I,R,R,R) += 1;
490  a(I,I,R,R,I,I,I) += 1;
491  a(I,I,R,R,I,I,R) += 1;
492  a(I,I,R,R,I,R,I) += 1;
493  a(I,I,R,R,I,R,R) += 1;
494  a(I,I,R,R,R,I,I) += 1;
495  a(I,I,R,R,R,I,R) += 1;
496  a(I,I,R,R,R,R,I) += 1;
497  a(I,I,R,R,R,R,R) += 1;
498  a(I,R,I,I,I,I,I) += 1;
499  a(I,R,I,I,I,I,R) += 1;
500  a(I,R,I,I,I,R,I) += 1;
501  a(I,R,I,I,I,R,R) += 1;
502  a(I,R,I,I,R,I,I) += 1;
503  a(I,R,I,I,R,I,R) += 1;
504  a(I,R,I,I,R,R,I) += 1;
505  a(I,R,I,I,R,R,R) += 1;
506  a(I,R,I,R,I,I,I) += 1;
507  a(I,R,I,R,I,I,R) += 1;
508  a(I,R,I,R,I,R,I) += 1;
509  a(I,R,I,R,I,R,R) += 1;
510  a(I,R,I,R,R,I,I) += 1;
511  a(I,R,I,R,R,I,R) += 1;
512  a(I,R,I,R,R,R,I) += 1;
513  a(I,R,I,R,R,R,R) += 1;
514  a(I,R,R,I,I,I,I) += 1;
515  a(I,R,R,I,I,I,R) += 1;
516  a(I,R,R,I,I,R,I) += 1;
517  a(I,R,R,I,I,R,R) += 1;
518  a(I,R,R,I,R,I,I) += 1;
519  a(I,R,R,I,R,I,R) += 1;
520  a(I,R,R,I,R,R,I) += 1;
521  a(I,R,R,I,R,R,R) += 1;
522  a(I,R,R,R,I,I,I) += 1;
523  a(I,R,R,R,I,I,R) += 1;
524  a(I,R,R,R,I,R,I) += 1;
525  a(I,R,R,R,I,R,R) += 1;
526  a(I,R,R,R,R,I,I) += 1;
527  a(I,R,R,R,R,I,R) += 1;
528  a(I,R,R,R,R,R,I) += 1;
529  a(I,R,R,R,R,R,R) += 1;
530  a(R,I,I,I,I,I,I) += 1;
531  a(R,I,I,I,I,I,R) += 1;
532  a(R,I,I,I,I,R,I) += 1;
533  a(R,I,I,I,I,R,R) += 1;
534  a(R,I,I,I,R,I,I) += 1;
535  a(R,I,I,I,R,I,R) += 1;
536  a(R,I,I,I,R,R,I) += 1;
537  a(R,I,I,I,R,R,R) += 1;
538  a(R,I,I,R,I,I,I) += 1;
539  a(R,I,I,R,I,I,R) += 1;
540  a(R,I,I,R,I,R,I) += 1;
541  a(R,I,I,R,I,R,R) += 1;
542  a(R,I,I,R,R,I,I) += 1;
543  a(R,I,I,R,R,I,R) += 1;
544  a(R,I,I,R,R,R,I) += 1;
545  a(R,I,I,R,R,R,R) += 1;
546  a(R,I,R,I,I,I,I) += 1;
547  a(R,I,R,I,I,I,R) += 1;
548  a(R,I,R,I,I,R,I) += 1;
549  a(R,I,R,I,I,R,R) += 1;
550  a(R,I,R,I,R,I,I) += 1;
551  a(R,I,R,I,R,I,R) += 1;
552  a(R,I,R,I,R,R,I) += 1;
553  a(R,I,R,I,R,R,R) += 1;
554  a(R,I,R,R,I,I,I) += 1;
555  a(R,I,R,R,I,I,R) += 1;
556  a(R,I,R,R,I,R,I) += 1;
557  a(R,I,R,R,I,R,R) += 1;
558  a(R,I,R,R,R,I,I) += 1;
559  a(R,I,R,R,R,I,R) += 1;
560  a(R,I,R,R,R,R,I) += 1;
561  a(R,I,R,R,R,R,R) += 1;
562  a(R,R,I,I,I,I,I) += 1;
563  a(R,R,I,I,I,I,R) += 1;
564  a(R,R,I,I,I,R,I) += 1;
565  a(R,R,I,I,I,R,R) += 1;
566  a(R,R,I,I,R,I,I) += 1;
567  a(R,R,I,I,R,I,R) += 1;
568  a(R,R,I,I,R,R,I) += 1;
569  a(R,R,I,I,R,R,R) += 1;
570  a(R,R,I,R,I,I,I) += 1;
571  a(R,R,I,R,I,I,R) += 1;
572  a(R,R,I,R,I,R,I) += 1;
573  a(R,R,I,R,I,R,R) += 1;
574  a(R,R,I,R,R,I,I) += 1;
575  a(R,R,I,R,R,I,R) += 1;
576  a(R,R,I,R,R,R,I) += 1;
577  a(R,R,I,R,R,R,R) += 1;
578  a(R,R,R,I,I,I,I) += 1;
579  a(R,R,R,I,I,I,R) += 1;
580  a(R,R,R,I,I,R,I) += 1;
581  a(R,R,R,I,I,R,R) += 1;
582  a(R,R,R,I,R,I,I) += 1;
583  a(R,R,R,I,R,I,R) += 1;
584  a(R,R,R,I,R,R,I) += 1;
585  a(R,R,R,I,R,R,R) += 1;
586  a(R,R,R,R,I,I,I) += 1;
587  a(R,R,R,R,I,I,R) += 1;
588  a(R,R,R,R,I,R,I) += 1;
589  a(R,R,R,R,I,R,R) += 1;
590  a(R,R,R,R,R,I,I) += 1;
591  a(R,R,R,R,R,I,R) += 1;
592  a(R,R,R,R,R,R,I) += 1;
593  a(R,R,R,R,R,R,R) += 1;
594 
595  cout << "The sum is: " << a(I,I,I,I,I,I,I) << "\n";
596 }
597 
598 
599 int main()
600 {
601  test9();
602  return 0;
603 }
Index npages() const
Returns the number of pages.
Definition: matpackV.cc:47
INDEX Index
The type to use for all integer numbers and indices.
Definition: matpack.h:35
Index nrows() const
Returns the number of rows.
Definition: matpackV.cc:53
void test4()
Definition: test_tensor.cc:140
The Tensor4View class.
Definition: matpackIV.h:243
void test2()
Definition: test_tensor.cc:112
void test9()
Definition: test_tensor.cc:452
Index nvitrines() const
Returns the number of vitrines.
Definition: matpackVI.cc:32
Tensor4 fill_tensor4(Index b, Index p, Index r, Index c, Index start=1)
Definition: test_tensor.cc:35
void test5()
Definition: test_tensor.cc:189
The Tensor4 class.
Definition: matpackIV.h:383
The range class.
Definition: matpackI.h:148
Index nrows() const
Returns the number of rows.
Definition: matpackVII.cc:62
Index npages() const
Returns the number of pages.
Definition: matpackIV.cc:69
void test6()
Definition: test_tensor.cc:229
The Tensor7 class.
Definition: matpackVII.h:1931
Index nbooks() const
Returns the number of books.
Definition: matpackV.cc:41
void test1()
Definition: test_tensor.cc:70
Index nrows() const
Returns the number of rows.
Definition: matpackIV.cc:75
void fill_tensor7(Tensor7 &x, Index l, Index v, Index s, Index b, Index p, Index r, Index c)
Definition: test_tensor.cc:256
This file contains the definition of Array.
Index nshelves() const
Returns the number of shelves.
Definition: matpackV.cc:35
#define max(a, b)
Definition: continua.cc:20461
Index nrows() const
Returns the number of rows.
Definition: matpackVI.cc:56
void test7()
Definition: test_tensor.cc:280
const Joker joker
NUMERIC Numeric
The type to use for all floating point numbers.
Definition: matpack.h:29
Index nlibraries() const
Returns the number of libraries.
Definition: matpackVII.cc:32
This can be used to make arrays out of anything.
Definition: array.h:40
void fill_tensor6(Tensor6 &x, Index v, Index s, Index b, Index p, Index r, Index c)
Definition: test_tensor.cc:207
Index nshelves() const
Returns the number of shelves.
Definition: matpackVI.cc:38
Index ncols() const
Returns the number of columns.
Definition: matpackVI.cc:62
#define min(a, b)
Definition: continua.cc:20460
Tensor5 fill_tensor5(Index s, Index b, Index p, Index r, Index c, Index start=1)
Definition: test_tensor.cc:50
The Tensor6 class.
Definition: matpackVI.h:950
Index npages() const
Returns the number of pages.
Definition: matpackVI.cc:50
Index nshelves() const
Returns the number of shelves.
Definition: matpackVII.cc:44
Index npages() const
Returns the number of pages.
Definition: matpackVII.cc:56
Index nbooks() const
Returns the number of books.
Definition: matpackIV.cc:63
void resize(Index v, Index s, Index b, Index p, Index r, Index c)
Resize function.
Definition: matpackVI.cc:2879
void transform(VectorView y, double(&my_func)(double), ConstVectorView x)
A generic transform function for vectors, which can be used to implement mathematical functions opera...
Definition: matpackI.cc:1838
void test8()
Definition: test_tensor.cc:307
Index ncols() const
Returns the number of columns.
Definition: matpackV.cc:59
Index nvitrines() const
Returns the number of vitrines.
Definition: matpackVII.cc:38
Index ncols() const
Returns the number of columns.
Definition: matpackVII.cc:68
Index ncols() const
Returns the number of columns.
Definition: matpackIV.cc:81
void resize(Index l, Index v, Index s, Index b, Index p, Index r, Index c)
Resize function.
Definition: matpackVII.cc:5379
Index nbooks() const
Returns the number of books.
Definition: matpackVII.cc:50
int main()
Definition: test_tensor.cc:599
void test3()
Definition: test_tensor.cc:124
The Tensor5 class.
Definition: matpackV.h:451
Index nbooks() const
Returns the number of books.
Definition: matpackVI.cc:44