namespace Eigen {

/** \eigenManualPage TutorialSlicingIndexing Slicing and Indexing

This page presents the numerous possibilities offered by `operator()` to index sub-set of rows and columns.
This API has been introduced in %Eigen 3.4.
It supports all the feature proposed by the \link TutorialBlockOperations block API \endlink, and much more.
In particular, it supports \b slicing that consists in taking a set of rows, columns, or elements, uniformly spaced within a matrix or indexed from an array of indices.

\eigenAutoToc

\section TutorialSlicingOverview Overview

All the aforementioned operations are handled through the generic DenseBase::operator()(const RowIndices&, const ColIndices&) method.
Each argument can be:
  - An integer indexing a single row or column, including symbolic indices.
  - The symbol Eigen::all representing the whole set of respective rows or columns in increasing order.
  - An ArithmeticSequence as constructed by the Eigen::seq, Eigen::seqN, or Eigen::placeholders::lastN functions.
  - Any 1D vector/array of integers including %Eigen's vector/array, expressions, std::vector, std::array, as well as plain C arrays: `int[N]`.

More generally, it can accepts any object exposing the following two member functions:
  \code
  <integral type> operator[](<integral type>) const;
  <integral type> size() const;
  \endcode
where `<integral type>` stands for any integer type compatible with Eigen::Index (i.e. `std::ptrdiff_t`).

\section TutorialSlicingBasic Basic slicing

Taking a set of rows, columns, or elements, uniformly spaced within a matrix or vector is achieved through the Eigen::seq or Eigen::seqN functions where "seq" stands for arithmetic sequence. Their signatures are summarized below:

<table class="manual">
<tr>
  <th>function</th>
  <th>description</th>
  <th>example</th>
</tr>
<tr>
  <td>\code seq(firstIdx,lastIdx) \endcode</td>
  <td>represents the sequence of integers ranging from \c firstIdx to \c lastIdx</td>
  <td>\code seq(2,5) <=> {2,3,4,5} \endcode</td>
</tr>
<tr>
  <td>\code seq(firstIdx,lastIdx,incr) \endcode</td>
  <td>same but using the increment \c incr to advance from one index to the next</td>
  <td>\code seq(2,8,2) <=> {2,4,6,8} \endcode</td>
</tr>
<tr>
  <td>\code seqN(firstIdx,size) \endcode</td>
  <td>represents the sequence of \c size integers starting from \c firstIdx</td>
  <td>\code seqN(2,5) <=> {2,3,4,5,6} \endcode</td>
</tr>
<tr>
  <td>\code seqN(firstIdx,size,incr) \endcode</td>
  <td>same but using the increment \c incr to advance from one index to the next</td>
  <td>\code seqN(2,3,3) <=> {2,5,8} \endcode</td>
</tr>
</table>

The \c firstIdx and \c lastIdx parameters can also be defined with the help of the Eigen::last symbol representing the index of the last row, column or element of the underlying matrix/vector once the arithmetic sequence is passed to it through operator().
Here are some examples for a 2D array/matrix \c A and a 1D array/vector \c v.
<table class="manual">
<tr>
  <th>Intent</th>
  <th>Code</th>
  <th>Block-API equivalence</th>
</tr>
<tr>
  <td>Bottom-left corner starting at row \c i with \c n columns</td>
  <td>\code A(seq(i,last), seqN(0,n)) \endcode</td>
  <td>\code A.bottomLeftCorner(A.rows()-i,n) \endcode</td>
</tr>
<tr>
  <td>%Block starting at \c i,j having \c m rows, and \c n columns</td>
  <td>\code A(seqN(i,m), seqN(i,n)) \endcode</td>
  <td>\code A.block(i,j,m,n) \endcode</td>
</tr>
<tr>
  <td>%Block starting at \c i0,j0 and ending at \c i1,j1</td>
  <td>\code A(seq(i0,i1), seq(j0,j1) \endcode</td>
  <td>\code A.block(i0,j0,i1-i0+1,j1-j0+1) \endcode</td>
</tr>
<tr>
  <td>Even columns of A</td>
  <td>\code A(all, seq(0,last,2)) \endcode</td>
  <td></td>
</tr>
<tr>
  <td>First \c n odd rows A</td>
  <td>\code A(seqN(1,n,2), all) \endcode</td>
  <td></td>
</tr>
<tr>
  <td>The last past one column</td>
  <td>\code A(all, last-1) \endcode</td>
  <td>\code A.col(A.cols()-2) \endcode</td>
</tr>
<tr>
  <td>The middle row</td>
  <td>\code A(last/2,all) \endcode</td>
  <td>\code A.row((A.rows()-1)/2) \endcode</td>
</tr>
<tr>
  <td>Last elements of v starting at i</td>
  <td>\code v(seq(i,last)) \endcode</td>
  <td>\code v.tail(v.size()-i) \endcode</td>
</tr>
<tr>
  <td>Last \c n elements of v</td>
  <td>\code v(seq(last+1-n,last)) \endcode</td>
  <td>\code v.tail(n) \endcode</td>
</tr>
</table>

As seen in the last example, referencing the <i> last n </i> elements (or rows/columns) is a bit cumbersome to write.
This becomes even more tricky and error prone with a non-default increment.
Here comes \link Eigen::placeholders::lastN(SizeType) Eigen::placeholders::lastN(size) \endlink, and
\link Eigen::placeholders::lastN(SizeType,IncrType) Eigen::placeholders::lastN(size,incr) \endlink:

<table class="manual">
<tr>
  <th>Intent</th>
  <th>Code</th>
  <th>Block-API equivalence</th>
</tr>
<tr>
  <td>Last \c n elements of v</td>
  <td>\code v(lastN(n)) \endcode</td>
  <td>\code v.tail(n) \endcode</td>
</tr>
<tr>
  <td>Bottom-right corner of A of size \c m times \c n</td>
  <td>\code v(lastN(m), lastN(n)) \endcode</td>
  <td>\code A.bottomRightCorner(m,n) \endcode</td>
</tr>
<tr>
  <td>Bottom-right corner of A of size \c m times \c n</td>
  <td>\code v(lastN(m), lastN(n)) \endcode</td>
  <td>\code A.bottomRightCorner(m,n) \endcode</td>
</tr>
<tr>
  <td>Last \c n columns taking 1 column over 3</td>
  <td>\code A(all, lastN(n,3)) \endcode</td>
  <td></td>
</tr>
</table>

\section TutorialSlicingFixed Compile time size and increment

In terms of performance, %Eigen and the compiler can take advantage of compile-time size and increment.
To this end, you can enforce compile-time parameters using Eigen::fix<val>.
Such compile-time value can be combined with the Eigen::last symbol:
\code v(seq(last-fix<7>, last-fix<2>))
\endcode
In this example %Eigen knowns at compile-time that the returned expression has 6 elements.
It is equivalent to:
\code v(seqN(last-7, fix<6>))
\endcode

We can revisit the <i>even columns of A</i> example as follows:
\code A(all, seq(0,last,fix<2>))
\endcode


\section TutorialSlicingReverse Reverse order

Row/column indices can also be enumerated in decreasing order using a negative increment.
For instance, one over two columns of A from the column 20 to 10:
\code A(all, seq(20, 10, fix<-2>))
\endcode
The last \c n rows starting from the last one:
\code A(seqN(last, n, fix<-1>), all)
\endcode
You can also use the ArithmeticSequence::reverse() method to reverse its order.
The previous example can thus also be written as:
\code A(lastN(n).reverse(), all)
\endcode


\section TutorialSlicingArray Array of indices

The generic `operator()` can also takes as input an arbitrary list of row or column indices stored as either an `ArrayXi`, a `std::vector<int>`, `std::array<int,N>`, etc.

<table class="example">
<tr><th>Example:</th><th>Output:</th></tr>
<tr><td>
\include Slicing_stdvector_cxx11.cpp
</td>
<td>
\verbinclude Slicing_stdvector_cxx11.out
</td></tr></table>

You can also directly pass a static array:
<table class="example">
<tr><th>Example:</th><th>Output:</th></tr>
<tr><td>
\include Slicing_rawarray_cxx11.cpp
</td>
<td>
\verbinclude Slicing_rawarray_cxx11.out
</td></tr></table>

or expressions:
<table class="example">
<tr><th>Example:</th><th>Output:</th></tr>
<tr><td>
\include Slicing_arrayexpr.cpp
</td>
<td>
\verbinclude Slicing_arrayexpr.out
</td></tr></table>

When passing an object with a compile-time size such as `Array4i`, `std::array<int,N>`, or a static array, then the returned expression also exhibit compile-time dimensions.

\section TutorialSlicingCustomArray Custom index list

More generally, `operator()` can accept as inputs any object \c ind of type \c T compatible with:
\code
Index s = ind.size(); or Index s = size(ind);
Index i;
i = ind[i];
\endcode

This means you can easily build your own fancy sequence generator and pass it to `operator()`.
Here is an example enlarging a given matrix while padding the additional first rows and columns through repetition:

<table class="example">
<tr><th>Example:</th><th>Output:</th></tr>
<tr><td>
\include Slicing_custom_padding_cxx11.cpp
</td>
<td>
\verbinclude Slicing_custom_padding_cxx11.out
</td></tr></table>

<br>

*/

/*
TODO add:
so_repeat_inner.cpp
so_repeleme.cpp
*/
}
