aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Images/update.png
blob: a82777414d5dca1b1f1f8714f340231c4fcb48d2 (plain)
ofshex dumpascii
0000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 01 00 00 00 01 00 08 06 00 00 00 5c 72 a8 .PNG........IHDR.............\r.
0020 66 00 00 00 04 73 42 49 54 08 08 08 08 7c 08 64 88 00 00 00 09 70 48 59 73 00 00 07 35 00 00 07 f....sBIT....|.d.....pHYs...5...
0040 35 01 dc 0b 6a 07 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 65 00 77 77 77 2e 69 6e 6b 73 63 5...j.....tEXtSoftware.www.inksc
0060 61 70 65 2e 6f 72 67 9b ee 3c 1a 00 00 14 26 49 44 41 54 78 da ed dd 59 6c 54 d7 19 c0 f1 96 a8 ape.org..<....&IDATx...YlT......
0080 52 d5 aa 0f 7d a9 aa 3e f4 a5 0f 69 1f 2a f5 a1 6f 95 2a b5 09 6b 02 04 f0 c6 be d9 c6 78 5f f1 R...}..>...i.*..o.*..k.......x_.
00a0 8a b1 09 60 9b 7d 0f 4b 30 38 69 58 42 80 04 08 6b d8 21 84 04 08 31 4b 88 31 c6 d8 8c c1 66 35 ...`.}.K08iXB...k.!...1K.1....f5
00c0 09 9b 0d 7c 3d 77 92 58 1e 7b 3c f6 9d b9 33 3e 77 fc 1f e9 2f 55 95 86 60 73 be df dc 7b e7 cc ...|=w.X.{<...3>w.../U..`s...{..
00e0 9d 5f 88 c8 2f ec 54 64 f6 ec 57 55 05 aa 9d aa 7a 95 10 75 63 f5 3f ad 45 63 4d be 6a b7 79 b2 ._../.Td..WU....z..uc.?.EcM.j.y.
0100 d3 e0 bf a2 ca 50 3d 61 d1 91 a6 3d f9 69 8d be 02 00 d6 0e 7f 2f d5 7e 16 18 d9 24 63 ad f6 02 .....P=a...=.i......./.~...$c...
0120 00 eb 00 c8 60 51 91 cd ca 00 00 eb ce f9 9f b2 a0 c8 66 3d b5 c3 35 01 3b 00 90 cb 62 22 9b 96 ....`Q............f=..5.;...b"..
0140 0b 00 be 03 b0 8d 85 44 36 6d 1b 00 f8 0e 40 0d 0b 89 6c 5a 0d 00 f8 0e 00 e7 ff 64 db eb 00 00 .......D6m....@...lZ.......d....
0160 00 00 04 00 00 00 00 04 00 00 e0 77 00 52 67 2e 93 03 27 bf 26 9b f4 f6 d2 32 8f ff 9e b3 e6 15 ...........w.Rg...'.&....2......
0180 ca c7 eb a7 c8 c1 6d a9 b2 6e 4d 8e 24 4e 2b ee d2 3a 18 3b 73 be 84 ae 5e 26 43 d6 af 90 b0 95 ......m..nM.$N+..:.;s...^&C.....
01a0 4b 65 7c e1 dc 2e 3d 2f 25 73 86 ac 4a 4e 93 4f e2 26 4b 59 52 b2 e4 64 14 02 80 9d 00 c8 9e bb Ke|...=/%s..JN.O.&KYR..d........
01c0 4a 6e 3f f8 9e 6c d2 e2 f7 b6 ba fd 77 8c c9 2d 91 63 db 53 e4 f9 85 09 2e dd f9 32 5a 66 2f 2c Jn?..l......w..-.c.S.......2Zf/,
01e0 f0 b8 06 42 4b 97 49 ef 63 eb e4 f5 e3 65 2d f5 39 bc 4e 86 2f 5d ec f1 79 0b 52 32 a5 2a 32 4c ...BK.I.c....e-.9.N./]..y.R2.*2L
0200 1c 13 87 b5 54 3b 31 44 d6 27 24 02 00 00 50 20 01 d8 be 71 4a bb e1 ff b9 07 67 a2 24 b5 b0 c8 ....T;1D.'$...P....qJ.....g.$...
0220 ed f3 86 2f 5e ec 32 f8 ad 33 50 18 5d 32 df ed f3 72 a6 14 4a cd c4 50 97 e1 6f dd d2 e4 0c 00 .../^.2..3P.]2...r..J..P..o.....
0240 00 00 0a 04 00 31 79 25 f2 ac 7c 62 87 00 18 6d df e8 7e 20 fb ef 5e d3 21 00 46 83 b6 ac 72 fb .....1y%..|b...m..~...^.!.F...r.
0260 bc 5d 71 93 3a 1c 7e a3 4b 51 c3 01 00 00 28 10 00 4c 9f 33 dd e3 f0 1b 95 ef 4f 68 f7 bc 09 79 .]q.:.~.KQ....(..L.3......Oh...y
0280 73 e5 f5 63 65 1e 01 e8 b7 bf d4 ed ba 29 8f 1e e5 11 00 a3 c4 cc 59 00 00 00 e4 6f 00 f2 8b df s..ce........)........Y....o....
02a0 ee 14 80 d3 bb dd 9c 97 e7 ce 91 de 47 3d 03 d0 7f 9f 7b 00 ce 4c 1a ed 71 f8 6f a8 62 b3 8a 01 ............G=....{..L..q.o.b...
02c0 00 00 c8 df 00 44 e5 cc 96 c6 b3 51 1e 01 d8 58 96 e5 f6 df ff 8d 4f de f5 08 c0 5b 1b 57 b8 7d .....D.....Q...X......O....[.W.}
02e0 de 96 f8 38 8f 00 18 40 70 0a 00 00 14 a0 8b 80 ef ae ca ed 70 f8 6b 4f c4 c8 e4 bc 12 b7 cf 1b ...8...@p...........p.kO........
0300 53 3c bf dd 3b 00 2d ef 04 1c 5a 2b e3 3a 78 3b 30 31 6b 96 54 44 46 74 f8 ea 3f 3d 3d 1f 00 00 S<..;.-...Z+.:x;01k.TDFt..?==...
0320 80 02 05 80 d1 fb a5 d9 f2 e8 5c a4 cb f0 5f 3e 18 2f 99 33 66 7a 5c 03 23 e6 2f 94 be 07 d6 ba ..........\..._>./.3fz\.#./.....
0340 1e fa ef 29 95 d1 45 0b 3c 3e 2f 37 a3 40 ce b6 39 15 a8 88 0a 97 b9 69 d9 bc 0d 68 17 00 12 0a ...)..E.<>/7.@..9......i...h....
0360 17 c9 da 2d 7b c8 26 65 cd 59 e9 f1 df 33 b9 a0 48 16 2e cd 97 35 ab 73 a5 70 ce 74 e7 e9 41 57 ...-{.&e.Y...3..H....5.s.p.t..AW
0380 d6 81 71 41 70 d4 dc 85 12 be 7c 89 8c 9a bd 50 26 e6 76 ed 79 d1 d9 25 52 a0 5e ed 97 27 67 c8 ..qAp.....|....P&.v.y..%R.^..'g.
03a0 ac b4 3c 89 cf 2c 62 23 10 5b 81 89 00 00 00 88 00 00 00 88 00 00 00 88 00 00 00 88 00 00 00 88 ..<..,b#.[......................
03c0 00 00 00 88 00 00 00 88 00 00 00 08 00 00 00 00 08 00 00 00 00 08 00 00 c0 cf 00 c4 4e 5b 20 f3 ............................N[..
03e0 4b 37 13 59 9e b1 b6 00 80 4f 03 52 0f cd 58 5b 00 00 00 04 00 00 00 00 04 00 00 00 00 04 00 00 K7.Y.....O.R..X[................
0400 00 00 6d 6b b8 56 2d f5 7b 76 4a fd ae ed 5e d5 50 fe 0d 43 07 00 00 60 47 00 6e 6d db 24 8e a8 ..mk.V-.{vJ...^.P..C...`G.nm.$..
0420 d0 4e 6f 33 dd 59 37 e7 bd cd e0 01 00 00 d8 0a 80 bb f7 c5 91 34 ce e7 e1 ff b9 86 8b 17 18 3e .No3.Y7..............4.........>
0440 00 00 00 bb 00 d0 50 75 cd b2 e1 37 aa df bf 9b e1 03 00 00 00 00 02 00 00 00 00 02 00 00 f0 0e ......Pu...7....................
0460 80 d3 b7 6e c8 98 af b6 fa b5 a4 83 ef 5b 0a c0 a2 ff cd f5 fb df 99 7e 2c fd 9b 3d 00 10 cc 00 ...n.........[.........~,..=....
0480 7c 5e 77 dd e3 d7 46 59 51 c4 9e 77 2c 05 a0 70 ed 0c bf ff 9d e9 c7 0c 04 00 00 00 00 00 00 00 |^w...FYQ..w,..p................
04a0pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
namespace Eigen {

/** \eigenManualPage TopicAliasing Aliasing

In %Eigen, aliasing refers to assignment statement in which the same matrix (or array or vector) appears on the
left and on the right of the assignment operators. Statements like <tt>mat = 2 * mat;</tt> or <tt>mat =
mat.transpose();</tt> exhibit aliasing. The aliasing in the first example is harmless, but the aliasing in the
second example leads to unexpected results. This page explains what aliasing is, when it is harmful, and what
to do about it.

\eigenAutoToc


\section TopicAliasingExamples Examples

Here is a simple example exhibiting aliasing:

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

The output is not what one would expect. The problem is the assignment
\code
mat.bottomRightCorner(2,2) = mat.topLeftCorner(2,2);
\endcode
This assignment exhibits aliasing: the coefficient \c mat(1,1) appears both in the block
<tt>mat.bottomRightCorner(2,2)</tt> on the left-hand side of the assignment and the block
<tt>mat.topLeftCorner(2,2)</tt> on the right-hand side. After the assignment, the (2,2) entry in the bottom
right corner should have the value of \c mat(1,1) before the assignment, which is 5. However, the output shows
that \c mat(2,2) is actually 1. The problem is that %Eigen uses lazy evaluation (see 
\ref TopicEigenExpressionTemplates) for <tt>mat.topLeftCorner(2,2)</tt>. The result is similar to
\code
mat(1,1) = mat(0,0);
mat(1,2) = mat(0,1);
mat(2,1) = mat(1,0);
mat(2,2) = mat(1,1);
\endcode
Thus, \c mat(2,2) is assigned the \e new value of \c mat(1,1) instead of the old value. The next section
explains how to solve this problem by calling \link DenseBase::eval() eval()\endlink.

Aliasing occurs more naturally when trying to shrink a matrix. For example, the expressions <tt>vec =
vec.head(n)</tt> and <tt>mat = mat.block(i,j,r,c)</tt> exhibit aliasing.

In general, aliasing cannot be detected at compile time: if \c mat in the first example were a bit bigger,
then the blocks would not overlap, and there would be no aliasing problem. However, %Eigen does detect some
instances of aliasing, albeit at run time.  The following example exhibiting aliasing was mentioned in \ref
TutorialMatrixArithmetic :

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

Again, the output shows the aliasing issue. However, by default %Eigen uses a run-time assertion to detect this
and exits with a message like

\verbatim
void Eigen::DenseBase<Derived>::checkTransposeAliasing(const OtherDerived&) const 
[with OtherDerived = Eigen::Transpose<Eigen::Matrix<int, 2, 2, 0, 2, 2> >, Derived = Eigen::Matrix<int, 2, 2, 0, 2, 2>]: 
Assertion `(!internal::check_transpose_aliasing_selector<Scalar,internal::blas_traits<Derived>::IsTransposed,OtherDerived>::run(internal::extract_data(derived()), other)) 
&& "aliasing detected during transposition, use transposeInPlace() or evaluate the rhs into a temporary using .eval()"' failed.
\endverbatim

The user can turn %Eigen's run-time assertions like the one to detect this aliasing problem off by defining the
EIGEN_NO_DEBUG macro, and the above program was compiled with this macro turned off in order to illustrate the
aliasing problem. See \ref TopicAssertions for more information about %Eigen's run-time assertions.


\section TopicAliasingSolution Resolving aliasing issues

If you understand the cause of the aliasing issue, then it is obvious what must happen to solve it: %Eigen has
to evaluate the right-hand side fully into a temporary matrix/array and then assign it to the left-hand
side. The function \link DenseBase::eval() eval() \endlink does precisely that.

For example, here is the corrected version of the first example above:

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

Now, \c mat(2,2) equals 5 after the assignment, as it should be.

The same solution also works for the second example, with the transpose: simply replace the line 
<tt>a = a.transpose();</tt> with <tt>a = a.transpose().eval();</tt>. However, in this common case there is a
better solution. %Eigen provides the special-purpose function 
\link DenseBase::transposeInPlace() transposeInPlace() \endlink which replaces a matrix by its transpose. 
This is shown below:

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

If an xxxInPlace() function is available, then it is best to use it, because it indicates more clearly what you
are doing. This may also allow %Eigen to optimize more aggressively. These are some of the xxxInPlace()
functions provided: 

<table class="manual">
<tr><th>Original function</th><th>In-place function</th></tr>
<tr> <td> MatrixBase::adjoint() </td> <td> MatrixBase::adjointInPlace() </td> </tr>
<tr class="alt"> <td> DenseBase::reverse() </td> <td> DenseBase::reverseInPlace() </td> </tr>
<tr> <td> LDLT::solve() </td> <td> LDLT::solveInPlace() </td> </tr>
<tr class="alt"> <td> LLT::solve() </td> <td> LLT::solveInPlace() </td> </tr>
<tr> <td> TriangularView::solve() </td> <td> TriangularView::solveInPlace() </td> </tr>
<tr class="alt"> <td> DenseBase::transpose() </td> <td> DenseBase::transposeInPlace() </td> </tr>
</table>

In the special case where a matrix or vector is shrunk using an expression like <tt>vec = vec.head(n)</tt>,
you can use \link PlainObjectBase::conservativeResize() conservativeResize() \endlink.


\section TopicAliasingCwise Aliasing and component-wise operations

As explained above, it may be dangerous if the same matrix or array occurs on both the left-hand side and the
right-hand side of an assignment operator, and it is then often necessary to evaluate the right-hand side
explicitly. However, applying component-wise operations (such as matrix addition, scalar multiplication and
array multiplication) is safe. 

The following example has only component-wise operations. Thus, there is no need for \link DenseBase::eval()
eval() \endlink even though the same matrix appears on both sides of the assignments.

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

In general, an assignment is safe if the (i,j) entry of the expression on the right-hand side depends only on
the (i,j) entry of the matrix or array on the left-hand side and not on any other entries. In that case it is
not necessary to evaluate the right-hand side explicitly.


\section TopicAliasingMatrixMult Aliasing and matrix multiplication

Matrix multiplication is the only operation in %Eigen that assumes aliasing by default, <strong>under the
condition that the destination matrix is not resized</strong>.
Thus, if \c matA is a \b squared matrix, then the statement <tt>matA = matA * matA;</tt> is safe.
All other operations in %Eigen assume that there are no aliasing problems,
either because the result is assigned to a different matrix or because it is a component-wise operation.

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

However, this comes at a price. When executing the expression <tt>matA = matA * matA</tt>, %Eigen evaluates the
product in a temporary matrix which is assigned to \c matA after the computation. This is fine. But %Eigen does
the same when the product is assigned to a different matrix (e.g., <tt>matB = matA * matA</tt>). In that case,
it is more efficient to evaluate the product directly into \c matB instead of evaluating it first into a
temporary matrix and copying that matrix to \c matB.

The user can indicate with the \link MatrixBase::noalias() noalias()\endlink function that there is no
aliasing, as follows: <tt>matB.noalias() = matA * matA</tt>. This allows %Eigen to evaluate the matrix product
<tt>matA * matA</tt> directly into \c matB.

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

Of course, you should not use \c noalias() when there is in fact aliasing taking place. If you do, then you
may get wrong results:

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

Moreover, starting in Eigen 3.3, aliasing is \b not assumed if the destination matrix is resized and the product is not directly assigned to the destination.
Therefore, the following example is also wrong:

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

As for any aliasing issue, you can resolve it by explicitly evaluating the expression prior to assignment:
<table class="example">
<tr><th>Example</th><th>Output</th></tr>
<tr><td>
\include TopicAliasing_mult5.cpp
</td>
<td>
\verbinclude TopicAliasing_mult5.out
</td></tr></table>

\section TopicAliasingSummary Summary

Aliasing occurs when the same matrix or array coefficients appear both on the left- and the right-hand side of
an assignment operator.
 - Aliasing is harmless with coefficient-wise computations; this includes scalar multiplication and matrix or
   array addition.
 - When you multiply two matrices, %Eigen assumes that aliasing occurs. If you know that there is no aliasing,
   then you can use \link MatrixBase::noalias() noalias()\endlink.
 - In all other situations, %Eigen assumes that there is no aliasing issue and thus gives the wrong result if
   aliasing does in fact occur. To prevent this, you have to use \link DenseBase::eval() eval() \endlink or
   one of the xxxInPlace() functions.

*/
}
2 3d 58 c3 e6 6a 0d 80 5a 6c bf 53 35 32 74 .....e.4...m.i....=X..j..Zl.S52t 0f00 1a 6d fc 99 df 47 1e 1f 8d 30 0d 00 1b 83 b4 ac 51 f5 3b 9d 01 48 61 e8 34 db f8 b3 71 b0 c7 45 .m...G...0......Q.;..Ha.4...q..E 0f20 e5 09 80 67 a7 d9 1e ac 61 29 5a 02 a0 16 db 2b aa 6a 86 4e af 8d 3f 8f 0e 87 7b 0d c0 8f 1b 83 ...g....a)Z....+.j.N..?...{..... 0f40 38 0a d0 ac 6a d5 2b 3a 02 10 c6 d0 e9 d5 ad f7 06 76 ba a0 3c 02 60 1c 05 7c c5 f6 60 0d 0b d3 8...j.+:.........v..<.`..|..`... 0f60 11 80 53 0c 9d 46 15 bf 2e df 7f 16 e6 33 00 6c 0c d2 b2 53 5a 01 a0 16 dc bf 18 3a bd 72 bc fb ..S..F.......3.l...SZ......:.r.. 0f80 46 97 16 53 67 00 38 37 06 9d 62 63 90 86 fd 4b 27 00 b6 32 74 7a d5 b8 3b c4 32 00 d8 18 a4 65 F..Sg.87..bc...K'..2tz..;.2....e 0fa0 5b b5 00 40 2d b6 bf a8 5e 30 74 1a 6d fc 59 d6 bf cb 0b a9 2b 00 b0 31 48 cb 5e a8 fe a2 03 00 [..@-...^0t.m.Y.....+..1H.^..... 0fc0 4b 18 3a bd ba f7 f1 50 cb 01 68 fa 9a 8d 41 1a b6 a4 5b 01 50 8b ed f7 aa 1f 18 3a 7d aa 5e d0 K.:....P..h...A...[.P......:}.^. 0fe0 d7 d4 22 ea 2a 00 6c 0c d2 b2 1f 54 bf ef 4e 00 b2 18 3a bd ba fd e1 5b 7e 03 e0 d9 19 36 06 69 ..".*.l....T..N...:....[~....6.i 1000 58 56 b7 00 a0 16 db af 54 0e 86 4e 9f aa e6 f4 96 47 47 c2 fd 06 c0 f3 f3 13 d8 18 a4 5f 0e d5 XV......T..N.....GG.........._.. 1020 af ba 03 80 31 0c 9d 66 1b 7f de 1f 68 7a 01 99 02 80 8d 41 ba 36 a6 3b 00 38 c7 d0 69 b4 ed d7 ....1..f....hz.....A.6.;.8..i... 1040 d8 f8 73 20 cc ef 00 b0 31 48 cb ce 05 14 00 b5 e0 5e 63 e8 f4 aa 6e cd 1b 5e 2d 1e b3 00 fc b8 ..s.....1H.......^c...n..^-..... 1060 31 88 fb 06 6a d8 6b 81 04 e0 53 86 4e b3 8d 3f 7b 42 02 06 00 5f 28 aa 65 9f 06 04 00 b5 d8 fe 1...j.k...S.N..?{B..._(.e....... 1080 a6 7a c9 d0 e9 53 ed 3b fd bd 5e 38 de 00 e0 3c 0a 38 c9 f6 60 cd 7a a9 fa 5b 20 00 58 cd d0 69 .z...S.;..^8...<.8..`.z..[..X..i 10a0 b6 f1 67 fb d0 80 03 c0 c6 20 2d 5b ed 57 00 d4 62 fb 83 ea 09 43 a7 d1 c6 9f 45 7d 7d 5a 34 de ..g.......-[.W..b....C....E}}Z4. 10c0 02 c0 17 8a 6a d9 13 d5 1f fc 09 40 01 43 a7 57 77 36 bf d5 6d 00 34 b1 31 48 c7 0a fc 02 80 5a ....j......@.C.Ww6..m.4.1H.....Z 10e0 6c bf 56 35 30 74 1a 6d fc 99 db c7 f4 c6 1f 2b 01 60 63 90 96 35 a8 7e ed 0f 00 a2 18 3a bd aa l.V50t.m.......+.`c..5.~.....:.. 1100 ff 60 90 cf 0b c6 27 00 d8 18 a4 6b 51 96 02 a0 16 db 2f 55 97 18 3a 8d 36 fe 94 f4 96 1f 0e 86 .`....'....kQ...../U..:.6....... 1120 75 3b 00 cd 7c a1 a8 8e 5d 52 fd d2 4a 00 06 30 74 9a 6d fc 59 fb a6 25 8b c5 57 00 9c 6f 09 f2 u;..|...]R..J..0t.m.Y..%..W..o.. 1140 85 a2 3a 36 c0 4a 00 0e 30 74 7a f5 70 6f a8 36 00 b0 31 48 cb 0e 58 02 80 5a 6c ff 60 e0 34 db ..:6.J..0tz.po.6..1H..X..Zl.`.4. 1160 f8 b3 62 80 65 0b c5 0a 00 f8 42 51 6d fb 87 15 00 bc c7 d0 e9 d5 fd 1d c3 b4 03 80 8d 41 5a f6 ..b.e.....BQm................AZ. 1180 9e 4f 00 a8 c5 f6 27 55 13 43 a7 4f d7 17 f7 b3 74 91 58 05 00 1b 83 b4 ac 49 f5 27 5f 00 28 62 .O....'U.C.O....t.X......I.'_.(b 11a0 e8 34 db f8 b3 65 88 b6 00 34 9d 65 63 90 86 15 79 05 80 5a 6c bf 55 dd 63 e8 34 fa a2 cf 79 7d .4...e...4.ec...y..Zl.U.c.4...y} 11c0 e4 d1 d1 08 6d 01 e0 be 81 5a 76 4f f5 5b 6f 00 88 67 e8 34 fb a2 cf f5 83 2c 5f 20 56 03 f0 ec ....m....ZvO.[o..g.4.....,_.V... 11e0 34 1b 83 34 2c de 14 00 6a b1 f5 52 55 32 74 9a 6d fc 39 14 ae 3d 00 cf d9 18 a4 63 95 aa 5e 66 4..4,...j..RU2t.m.9..=.....c..^f 1200 00 18 ca d0 e9 d5 cd 75 6f fa 65 71 58 0e 00 1b 83 74 6d a8 19 00 8e 33 74 9a 6d fc d9 17 6a 1b .......uo.eqX....tm....3t.m...j. 1220 00 b8 6f a0 96 1d ef 12 00 3f ed fb 7f 55 f5 57 ab 6b dc 1b ea 30 16 32 99 6c 7f a8 df 16 86 3f ..o......?...U.W.k...0.2.l.....? 1240 00 f8 19 01 63 87 20 99 ce b8 cd f7 5f fd d0 ab ee 3e 1f 60 d9 d7 83 77 25 f5 17 a8 46 62 bd f2 ....c......._....>.`...w%...Fb.. 1260 17 00 e4 75 d5 81 9c 49 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 ...u...I........................ 1280 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 ................................ 12a0 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 02 00 02 ................................ 12c0 00 02 00 02 00 02 00 02 00 02 00 02 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 ................................ 12e0 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 ................................ 1300 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 02 00 00 00 00 00 20 00 ................................ 1320 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 ................................ 1340 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 ................................ 1360 00 00 00 00 20 00 00 00 00 20 00 60 e8 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 ...........`.................... 1380 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 ................................ 13a0 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 ................................ 13c0 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 00 00 08 00 00 00 00 08 00 00 00 00 08 00 00 00 ................................ 13e0 00 08 00 00 00 00 08 00 00 00 00 08 00 00 00 00 08 00 00 00 00 08 00 00 00 00 08 00 00 00 00 08 ................................ 1400 00 00 00 00 08 00 00 00 00 08 00 00 00 00 08 00 00 00 00 08 00 00 00 00 08 00 00 00 00 08 00 18 ................................ 1420 3a 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 00 00 00 20 00 00 00 00 20 00 :............................... 1440 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 ................................ 1460 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 ................................ 1480 06 0e 00 00 00 00 08 00 00 00 00 08 00 00 00 00 a8 e7 00 f0 7f 14 56 ad e3 52 ad 02 0a 00 00 00 ......................V..R...... 14a0 00 49 45 4e 44 ae 42 60 82 .IEND.B`.