13 #include <Eigen/CXX11/Tensor> 
   19 template <
int DataLayout>
 
   24   tensor = (tensor + tensor.constant(0.5)).
log();
 
   27   index_tuples = tensor.index_tuples();
 
   36 template <
int DataLayout>
 
   41   tensor = (tensor + tensor.constant(0.5)).
log();
 
   45   index_tuples = tensor.index_tuples();
 
   54 template <
int DataLayout>
 
   59   tensor = (tensor + tensor.constant(0.5)).
log();
 
   62   index_tuples = tensor.index_tuples();
 
   66   reduced = index_tuples.reduce(
 
   74   for (
int d = 0; 
d < 3; ++
d) reduce_dims[
d] = 
d;
 
   76   reduced_by_dims = index_tuples.reduce(
 
   81   for (
int l = 0; 
l < 7; ++
l) {
 
   86 template <
int DataLayout>
 
   91   tensor = (tensor + tensor.constant(0.5)).
log();
 
   94   index_tuples = tensor.index_tuples();
 
   98   reduced = index_tuples.reduce(
 
  106   for (
int d = 0; 
d < 3; ++
d) reduce_dims[
d] = 
d;
 
  108   reduced_by_dims = index_tuples.reduce(
 
  113   for (
int l = 0; 
l < 7; ++
l) {
 
  118 template <
int DataLayout>
 
  123   tensor = (tensor + tensor.constant(0.5)).
log();
 
  124   tensor(0,0,0,0) = 10.0;
 
  128   tensor_argmax = tensor.argmax();
 
  132   tensor(1,2,4,6) = 20.0;
 
  134   tensor_argmax = tensor.argmax();
 
  139 template <
int DataLayout>
 
  144   tensor = (tensor + tensor.constant(0.5)).
log();
 
  145   tensor(0,0,0,0) = -10.0;
 
  149   tensor_argmin = tensor.argmin();
 
  153   tensor(1,2,4,6) = -20.0;
 
  155   tensor_argmin = tensor.argmin();
 
  160 template <
int DataLayout>
 
  164   std::vector<int> dims {2, 3, 5, 7};
 
  166   for (
int dim = 0; dim < 4; ++dim) {
 
  168     tensor = (tensor + tensor.constant(0.5)).
log();
 
  172     for (
int i = 0; 
i < 2; ++
i) {
 
  173       for (
int j = 0; 
j < 3; ++
j) {
 
  174         for (
int k = 0; 
k < 5; ++
k) {
 
  175           for (
int l = 0; 
l < 7; ++
l) {
 
  176             ix[0] = 
i; ix[1] = 
j; ix[2] = 
k; ix[3] = 
l;
 
  177             if (ix[dim] != 0) 
continue;
 
  185     tensor_argmax = tensor.argmax(dim);
 
  188                     ptrdiff_t(2*3*5*7 / tensor.
dimension(dim)));
 
  189     for (ptrdiff_t 
n = 0; 
n < tensor_argmax.
size(); ++
n) {
 
  194     for (
int i = 0; 
i < 2; ++
i) {
 
  195       for (
int j = 0; 
j < 3; ++
j) {
 
  196         for (
int k = 0; 
k < 5; ++
k) {
 
  197           for (
int l = 0; 
l < 7; ++
l) {
 
  198             ix[0] = 
i; ix[1] = 
j; ix[2] = 
k; ix[3] = 
l;
 
  199             if (ix[dim] != tensor.
dimension(dim) - 1) 
continue;
 
  207     tensor_argmax = tensor.argmax(dim);
 
  210                     ptrdiff_t(2*3*5*7 / tensor.
dimension(dim)));
 
  211     for (ptrdiff_t 
n = 0; 
n < tensor_argmax.
size(); ++
n) {
 
  218 template <
int DataLayout>
 
  222   std::vector<int> dims {2, 3, 5, 7};
 
  224   for (
int dim = 0; dim < 4; ++dim) {
 
  226     tensor = (tensor + tensor.constant(0.5)).
log();
 
  230     for (
int i = 0; 
i < 2; ++
i) {
 
  231       for (
int j = 0; 
j < 3; ++
j) {
 
  232         for (
int k = 0; 
k < 5; ++
k) {
 
  233           for (
int l = 0; 
l < 7; ++
l) {
 
  234             ix[0] = 
i; ix[1] = 
j; ix[2] = 
k; ix[3] = 
l;
 
  235             if (ix[dim] != 0) 
continue;
 
  243     tensor_argmin = tensor.argmin(dim);
 
  246                     ptrdiff_t(2*3*5*7 / tensor.
dimension(dim)));
 
  247     for (ptrdiff_t 
n = 0; 
n < tensor_argmin.
size(); ++
n) {
 
  252     for (
int i = 0; 
i < 2; ++
i) {
 
  253       for (
int j = 0; 
j < 3; ++
j) {
 
  254         for (
int k = 0; 
k < 5; ++
k) {
 
  255           for (
int l = 0; 
l < 7; ++
l) {
 
  256             ix[0] = 
i; ix[1] = 
j; ix[2] = 
k; ix[3] = 
l;
 
  257             if (ix[dim] != tensor.
dimension(dim) - 1) 
continue;
 
  265     tensor_argmin = tensor.argmin(dim);
 
  268                     ptrdiff_t(2*3*5*7 / tensor.
dimension(dim)));
 
  269     for (ptrdiff_t 
n = 0; 
n < tensor_argmin.
size(); ++
n) {