aboutsummaryrefslogtreecommitdiff
path: root/23.02/classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml
diff options
context:
space:
mode:
authorDavid Monahan <david.monahan@arm.com>2023-03-22 16:48:58 +0000
committerDavid Monahan <david.monahan@arm.com>2023-03-22 16:48:58 +0000
commitae050524109f1ce827962665436ef7430f2ac479 (patch)
treea087fe0c77570971dd7979f2757426c24e91afc7 /23.02/classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml
parent8d2ca734165a068478df7cffa46185680b05cd20 (diff)
downloadarmnn-ae050524109f1ce827962665436ef7430f2ac479.tar.gz
IVGCVSW-7255 Update Doxygen Documentation and publish on GitHub.
* Updating Doxygen documentation for 23.02 release. Signed-off-by: David Monahan <david.monahan@arm.com> Change-Id: I545574ff7664b4595d2fe6a91a3c35d2ad55df82
Diffstat (limited to '23.02/classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml')
-rw-r--r--23.02/classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml67
1 files changed, 48 insertions, 19 deletions
diff --git a/23.02/classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml b/23.02/classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml
index 07cea8bd3e..349ad57280 100644
--- a/23.02/classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml
+++ b/23.02/classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml
@@ -8,7 +8,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: MovePermuteUpImpl Class Reference</title>
@@ -19,9 +19,6 @@
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
-</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
@@ -30,7 +27,8 @@
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
-</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+</script>
+<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
@@ -51,18 +49,21 @@
</table>
</div>
<!-- end header part -->
-<!-- Generated by Doxygen 1.8.13 -->
+<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
+/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
-</script>
+/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
@@ -76,7 +77,9 @@ $(function() {
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml','');});
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(document).ready(function(){initNavTree('classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml',''); initResizable(); });
+/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
@@ -108,7 +111,7 @@ $(document).ready(function(){initNavTree('classarmnn_1_1optimizations_1_1_move_p
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a5a8476ffc04ce7460bb09ad50d1d23de"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml#a5a8476ffc04ce7460bb09ad50d1d23de">Run</a> (<a class="el" href="classarmnn_1_1_graph.xhtml">Graph</a> &amp;graph, <a class="el" href="classarmnn_1_1_input_slot.xhtml">InputSlot</a> &amp;connection) const</td></tr>
-<tr class="memdesc:a5a8476ffc04ce7460bb09ad50d1d23de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Run for every connection between a base <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> (any) and a child <a class="el" href="classarmnn_1_1_permute_layer.xhtml" title="This layer represents a permutation operation. ">PermuteLayer</a>. <a href="#a5a8476ffc04ce7460bb09ad50d1d23de">More...</a><br /></td></tr>
+<tr class="memdesc:a5a8476ffc04ce7460bb09ad50d1d23de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Run for every connection between a base <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> (any) and a child <a class="el" href="classarmnn_1_1_permute_layer.xhtml" title="This layer represents a permutation operation.">PermuteLayer</a>. <a href="classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml#a5a8476ffc04ce7460bb09ad50d1d23de">More...</a><br /></td></tr>
<tr class="separator:a5a8476ffc04ce7460bb09ad50d1d23de"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
@@ -145,8 +148,6 @@ Protected Member Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="reference">Referenced by <a class="el" href="_move_permute_up_8hpp_source.xhtml#l00023">MovePermuteUpImpl::Run()</a>.</p>
-
</div>
</div>
<a id="a3d6f30a9e9a8f14618dbad38869d1bb2"></a>
@@ -172,8 +173,6 @@ Protected Member Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p class="reference">Referenced by <a class="el" href="_move_permute_up_8hpp_source.xhtml#l00023">MovePermuteUpImpl::Run()</a>.</p>
-
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
@@ -211,14 +210,43 @@ Protected Member Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p>Run for every connection between a base <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> (any) and a child <a class="el" href="classarmnn_1_1_permute_layer.xhtml" title="This layer represents a permutation operation. ">PermuteLayer</a>. </p>
+<p>Run for every connection between a base <a class="el" href="classarmnn_1_1_layer.xhtml">Layer</a> (any) and a child <a class="el" href="classarmnn_1_1_permute_layer.xhtml" title="This layer represents a permutation operation.">PermuteLayer</a>. </p>
<p>If the type of the base layer allows it, it moves the permutation to the inputs of the base layer. I.e., adds equivalent permutations before the inputs of the base layer and moves the connections in the output of the child permute layer to the output of the base layer. </p>
<p class="definition">Definition at line <a class="el" href="_move_permute_up_8hpp_source.xhtml#l00023">23</a> of file <a class="el" href="_move_permute_up_8hpp_source.xhtml">MovePermuteUp.hpp</a>.</p>
-
-<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa9a62e70841c4d06dd16306a85700d36">armnn::Activation</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a7c5531bbefed0945814f874baf9e0e0f">armnn::Addition</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00249">Layer::BeginInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00250">Layer::EndInputSlots()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a3489c7b05e180496cb2ce8ac73887f48">armnn::FakeQuantization</a>, <a class="el" href="namespacearmnn.xhtml#adf2e5515c4c36a3e7e46bb8b83c6754eaf3f6d0343d56ce88ce7958170ed05cb3">armnn::Floor</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00324">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00145">OutputSlot::GetNumConnections()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00232">Layer::GetOutputHandler()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00053">InputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00119">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00273">Layer::GetType()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00471">Graph::InsertNewLayer()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">armnn::MemCopy</a>, <a class="el" href="classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml#a62800e5070ee59063b2e80f785f32db6">MovePermuteUpImpl::MovePermuteUpImpl()</a>, <a class="el" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a27d1a1f7b7c2180e5b20ce9e3d00e2dd">armnn::Multiplication</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, <a class="el" href="_output_handler_8cpp_source.xhtml#l00015">OutputHandler::SetTensorInfo()</a>, and <a class="el" href="classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml#a3d6f30a9e9a8f14618dbad38869d1bb2">MovePermuteUpImpl::~MovePermuteUpImpl()</a>.</p>
-<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; OutputSlot&amp; baseOutput = *connection.GetConnectedOutputSlot();</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">if</span> (baseOutput.GetNumConnections() == 1U)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; Layer&amp; base = baseOutput.GetOwningLayer();</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (CanMovePermuteToInputs(base))</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">auto</span> permute = PolymorphicDowncast&lt;PermuteLayer*&gt;(&amp;connection.GetOwningLayer());</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> PermutationVector&amp; perm = permute-&gt;GetPermutation();</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// Inserts an equivalent permute before every input of the base layer.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> baseInput = base.BeginInputSlots(); baseInput != base.EndInputSlots(); ++baseInput)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// Inserts a new permute layer.</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">const</span> std::string name = std::string(<span class="stringliteral">&quot;moved_up-&quot;</span>) + permute-&gt;GetName();</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; PermuteLayer&amp; permLayer = *graph.InsertNewLayer&lt;PermuteLayer&gt;(*baseInput, perm, name.c_str());</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// Sets output tensor info for the new layer.</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; OutputSlot&amp; parentOutput = *permLayer.GetInputSlot(0).GetConnectedOutputSlot();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> TensorInfo permOutInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(parentOutput.GetTensorInfo(), perm);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; permLayer.GetOutputHandler().SetTensorInfo(permOutInfo);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// Bypasses permute. It will be removed as it&#39;s left unconnected.</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; permute-&gt;GetOutputSlot().MoveAllConnections(base.GetOutputSlot());</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="ttc" id="namespacearmnn_utils_xhtml_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &amp;srcShape, const armnn::PermutationVector &amp;mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00098">Permute.cpp:98</a></div></div>
+<div class="fragment"><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; OutputSlot&amp; baseOutput = *connection.GetConnectedOutputSlot();</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keywordflow">if</span> (baseOutput.GetNumConnections() == 1U)</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; Layer&amp; base = baseOutput.GetOwningLayer();</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (CanMovePermuteToInputs(base))</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">auto</span> permute = PolymorphicDowncast&lt;PermuteLayer*&gt;(&amp;connection.GetOwningLayer());</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> PermutationVector&amp; perm = permute-&gt;GetPermutation();</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="comment">// Inserts an equivalent permute before every input of the base layer.</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> baseInput = base.BeginInputSlots(); baseInput != base.EndInputSlots(); ++baseInput)</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// Inserts a new permute layer.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">const</span> std::string name = std::string(<span class="stringliteral">&quot;moved_up-&quot;</span>) + permute-&gt;GetName();</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; PermuteLayer&amp; permLayer = *graph.InsertNewLayer&lt;PermuteLayer&gt;(*baseInput, perm, name.c_str());</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// Sets output tensor info for the new layer.</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; OutputSlot&amp; parentOutput = *permLayer.GetInputSlot(0).GetConnectedOutputSlot();</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> TensorInfo permOutInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(parentOutput.GetTensorInfo(), perm);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; permLayer.GetOutputHandler().SetTensorInfo(permOutInfo);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// Bypasses permute. It will be removed as it&#39;s left unconnected.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; permute-&gt;GetOutputSlot().MoveAllConnections(base.GetOutputSlot());</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
</div><!-- fragment -->
+<p class="reference">References <a class="el" href="_layer_8hpp_source.xhtml#l00249">Layer::BeginInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00250">Layer::EndInputSlots()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00324">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00145">OutputSlot::GetNumConnections()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00232">Layer::GetOutputHandler()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00326">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00053">InputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00119">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00471">Graph::InsertNewLayer()</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, and <a class="el" href="_output_handler_8cpp_source.xhtml#l00015">OutputHandler::SetTensorInfo()</a>.</p>
+
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
@@ -226,13 +254,14 @@ Protected Member Functions</h2></td></tr>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
+<div class="ttc" id="anamespacearmnn_utils_xhtml_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &amp;srcShape, const armnn::PermutationVector &amp;mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00098">Permute.cpp:98</a></div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacearmnn.xhtml">armnn</a></li><li class="navelem"><a class="el" href="namespacearmnn_1_1optimizations.xhtml">optimizations</a></li><li class="navelem"><a class="el" href="classarmnn_1_1optimizations_1_1_move_permute_up_impl.xhtml">MovePermuteUpImpl</a></li>
- <li class="footer">Generated on Fri Feb 24 2023 10:24:34 for ArmNN by
+ <li class="footer">Generated on Wed Mar 22 2023 15:53:09 for ArmNN by
<a href="http://www.doxygen.org/index.html">
- <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
</ul>
</div>
</body>