aboutsummaryrefslogtreecommitdiff
path: root/20.02/_tf_lite_parser_8cpp_source.xhtml
blob: d8ee8088c05d61bded5c6d86842e17a2e6f653ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: src/armnnTfLiteParser/TfLiteParser.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<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>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" 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>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">20.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_tf_lite_parser_8cpp_source.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">TfLiteParser.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_tf_lite_parser_8cpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 2017 Arm Ltd. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_tf_lite_parser_8hpp.xhtml">TfLiteParser.hpp</a>&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_descriptors_8hpp.xhtml">armnn/Descriptors.hpp</a>&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_exceptions_8hpp.xhtml">armnn/Exceptions.hpp</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_logging_8hpp.xhtml">armnn/Logging.hpp</a>&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_types_utils_8hpp.xhtml">armnn/TypesUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_ignore_unused_8hpp.xhtml">armnn/utility/IgnoreUnused.hpp</a>&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">// armnnUtils:</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_permute_8hpp.xhtml">armnnUtils/Permute.hpp</a>&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_parser_helper_8hpp.xhtml">ParserHelper.hpp</a>&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_verification_helpers_8hpp.xhtml">VerificationHelpers.hpp</a>&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment">// The generated code based on the Tf Lite schema:</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;schema_generated.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;flatbuffers/flexbuffers.h&gt;</span></div><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;<span class="preprocessor">#include &lt;boost/assert.hpp&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;boost/format.hpp&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;boost/numeric/conversion/cast.hpp&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;boost/filesystem.hpp&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#include &lt;numeric&gt;</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></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"><a class="line" href="_tf_lite_parser_8cpp.xhtml#a5fc762bb40634f39ff6ff4e23005a3a9">   36</a></span>&#160;<span class="preprocessor">#define ARMNN_THROW_PARSE_EXCEPTION(msg) \</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">          { \</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">            throw armnn::ParseException( static_cast&lt;const std::stringstream&amp;&gt;( std::stringstream() &lt;&lt; msg \</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">               &lt;&lt; &quot;: &quot; \</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">               &lt;&lt; CHECK_LOCATION().AsString()).str()); \</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">          }</span></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="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keyword">using</span> <a class="code" href="structarmnn_1_1_check_location.xhtml">armnn::CheckLocation</a>;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn_tf_lite_parser.xhtml">armnnTfLiteParser</a></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="keyword">namespace</span></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;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="keyword">const</span> uint32_t VIRTUAL_OPERATOR_ID = std::numeric_limits&lt;uint32_t&gt;::max();</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;<span class="keywordtype">void</span> CheckSubgraph(<span class="keyword">const</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">TfLiteParser::ModelPtr</a> &amp; model,</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;                   <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;                   <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp; location)</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;{</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keywordflow">if</span> (model.get() == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    {</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;            boost::str(</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;                boost::format(<span class="stringliteral">&quot;%1% was called with invalid (null) model. &quot;</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;                              <span class="stringliteral">&quot;Possible reason is that the model is not yet loaded and Unpack(ed). &quot;</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;                              <span class="stringliteral">&quot;subgraph:%2% at %3%&quot;</span>) %</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a> %</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;                              subgraphIndex %</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    }</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (subgraphIndex &gt;= model-&gt;subgraphs.size())</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    {</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;            boost::str(</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;                boost::format(<span class="stringliteral">&quot;%1% was called with an invalid subgraph index. &quot;</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;                              <span class="stringliteral">&quot;subgraph:%2% at %3%&quot;</span>) %</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a> %</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;                              subgraphIndex %</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    }</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;}</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">   79</a></span>&#160;<span class="preprocessor">#define CHECK_SUBGRAPH(MODEL, SUBGRAPH_INDEX) \</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="preprocessor">    CheckSubgraph(MODEL, SUBGRAPH_INDEX, CHECK_LOCATION())</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="keywordtype">void</span> CheckModel(<span class="keyword">const</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">TfLiteParser::ModelPtr</a> &amp; model,</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;                <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;                <span class="keywordtype">size_t</span> operatorIndex,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp; location)</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;{</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="keywordflow">if</span> (model.get() == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    {</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;            boost::str(</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                boost::format(<span class="stringliteral">&quot;%1% was called with invalid (null) model. &quot;</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                                <span class="stringliteral">&quot;Possible reason is that the model is not yet loaded and Unpack(ed). &quot;</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;                                <span class="stringliteral">&quot;subgraph:%2% operator:%3% at %4%&quot;</span>) %</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;                                location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a> %</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;                                subgraphIndex %</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;                                operatorIndex %</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;                                location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    }</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (subgraphIndex &gt;= model-&gt;subgraphs.size())</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    {</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;            boost::str(</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;                boost::format(<span class="stringliteral">&quot;%1% was called with an invalid subgraph index. &quot;</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;                                <span class="stringliteral">&quot;subgraph:%2% operator:%3% at %4%&quot;</span>) %</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;                                location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a> %</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;                                subgraphIndex %</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;                                operatorIndex %</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;                                location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    }</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (operatorIndex &gt;= model-&gt;subgraphs[subgraphIndex]-&gt;operators.size() &amp;&amp;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;             operatorIndex != VIRTUAL_OPERATOR_ID)</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    {</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;            boost::str(</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;                boost::format(<span class="stringliteral">&quot;%1% was called with an invalid operator index. &quot;</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;                                <span class="stringliteral">&quot;subgraph:%2% operator:%3% at %4%&quot;</span>) %</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;                                location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a> %</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;                                subgraphIndex %</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;                                operatorIndex %</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;                                location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    }</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;}</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">  124</a></span>&#160;<span class="preprocessor">#define CHECK_MODEL(MODEL, SUBGRAPH_INDEX, OPERATOR_INDEX) \</span></div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="preprocessor">    CheckModel(MODEL, SUBGRAPH_INDEX, OPERATOR_INDEX, CHECK_LOCATION())</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="keywordtype">void</span> <a class="code" href="_tensor_test_8cpp.xhtml#ad80e179ec400af9d2547f172f3ca05f3">CheckTensor</a>(<span class="keyword">const</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">TfLiteParser::ModelPtr</a> &amp; model,</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;                 <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;                 <span class="keywordtype">size_t</span> tensorIndex,</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;                 <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp; location)</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;{</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="comment">// not checking model, because I assume CHECK_MODEL already run</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="comment">// and checked that. An assert would do.</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    BOOST_ASSERT_MSG(model.get() != <span class="keyword">nullptr</span>, <span class="stringliteral">&quot;Expecting a valid model in this function&quot;</span>);</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="comment">// also subgraph index should be checked by CHECK_MODEL so</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="comment">// I only add an assert here</span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    BOOST_ASSERT_MSG(subgraphIndex &lt; model-&gt;subgraphs.size(), <span class="stringliteral">&quot;Expecting a valid subgraph index&quot;</span>);</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="comment">// the tensor index is the only one to check here</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">if</span> (tensorIndex &gt;= model-&gt;subgraphs[subgraphIndex]-&gt;tensors.size())</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    {</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;            boost::str(</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;                boost::format(<span class="stringliteral">&quot;%1% was called with an invalid tensor index. &quot;</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;                                <span class="stringliteral">&quot;subgraph:%2% tensor:%3% at %4%&quot;</span>) %</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;                                location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a> %</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;                                subgraphIndex %</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;                                tensorIndex %</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;                                location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    }</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;}</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">  154</a></span>&#160;<span class="preprocessor">#define CHECK_TENSOR(MODEL, SUBGRAPH_INDEX, TENSOR_INDEX) \</span></div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="preprocessor">    CheckTensor(MODEL, SUBGRAPH_INDEX, TENSOR_INDEX, CHECK_LOCATION())</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="keywordtype">void</span> CheckTensorPtr(<a class="code" href="_parser_flatbuffers_serialize_fixture_8hpp.xhtml#a15c20a0693cd3fc4d85565e2f920d8ef">TfLiteParser::TensorRawPtr</a> rawPtr,</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;                    <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp; location)</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;{</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <span class="keywordflow">if</span> (rawPtr == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    {</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;            boost::str(</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;                boost::format(<span class="stringliteral">&quot;%1% was called with a null tensor pointer. &quot;</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;                              <span class="stringliteral">&quot;at %2%&quot;</span>) %</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a> %</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    }</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;}</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#ae38d96fe05581ea025713b3e781c5a43">  172</a></span>&#160;<span class="preprocessor">#define CHECK_TENSOR_PTR(TENSOR_PTR) \</span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="preprocessor">    CheckTensorPtr(TENSOR_PTR, CHECK_LOCATION())</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="keywordtype">void</span> CheckBuffer(<span class="keyword">const</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">TfLiteParser::ModelPtr</a> &amp; model,</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;                 <span class="keywordtype">size_t</span> bufferIndex,</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;                 <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp; location)</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;{</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordflow">if</span> (model.get() == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    {</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;            boost::str(</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;                boost::format(<span class="stringliteral">&quot;%1% was called with invalid (null) model. &quot;</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;                              <span class="stringliteral">&quot;Possible reason is that the model is not yet loaded and Unpack(ed). &quot;</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;                              <span class="stringliteral">&quot;buffer:%2% at %3%&quot;</span>) %</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a> %</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                              bufferIndex %</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    }</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bufferIndex &gt;= model-&gt;buffers.size())</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    {</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;            boost::str(</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;                boost::format(<span class="stringliteral">&quot;%1% was called with an invalid buffer index. &quot;</span></div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;                              <span class="stringliteral">&quot;buffer index:%2% at %3%&quot;</span>) %</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a> %</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;                              bufferIndex %</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    }</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (model-&gt;buffers[bufferIndex].get() == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    {</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;            boost::str(</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;                boost::format(<span class="stringliteral">&quot;The buffer #%1% is null. %3%&quot;</span>) %</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;                              bufferIndex %</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">AsString</a>()));</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    }</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;}</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#a7c88d54e3f895030c70330a4c9d76a7a">  210</a></span>&#160;<span class="preprocessor">#define CHECK_BUFFER(MODEL, BUFFER_INDEX) \</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="preprocessor">    CheckBuffer(MODEL, BUFFER_INDEX, CHECK_LOCATION())</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="keywordtype">void</span> CheckBufferSize(TfLiteParser::BufferRawPtr bufferPtr,</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;                     <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp; tensorInfo,</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;                     uint32_t bufferId,</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;                     <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> &amp; location)</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;{</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    <span class="keywordflow">if</span> (bufferPtr == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    {</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;            boost::str(</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;                boost::format(<span class="stringliteral">&quot;BufferPtr is null for buffer:%1%. %2%&quot;</span>) %</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;                              bufferId %</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;                              location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">AsString</a>()));</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    }</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() &gt; bufferPtr-&gt;data.size() ||</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;            tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>() &gt; bufferPtr-&gt;data.size())</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    {</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;        ss &lt;&lt; <span class="stringliteral">&quot;Buffer #&quot;</span> &lt;&lt; bufferId &lt;&lt; <span class="stringliteral">&quot; has &quot;</span> &lt;&lt; bufferPtr-&gt;data.size() &lt;&lt; <span class="stringliteral">&quot; bytes. &quot;</span></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;           &lt;&lt; <span class="stringliteral">&quot;For tensor: &quot;</span> &lt;&lt; tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;           &lt;&lt; <span class="stringliteral">&quot; expecting: &quot;</span> &lt;&lt; tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>() &lt;&lt; <span class="stringliteral">&quot; bytes and &quot;</span></div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;           &lt;&lt; tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() &lt;&lt; <span class="stringliteral">&quot; elements. &quot;</span> &lt;&lt; location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">AsString</a>();</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(ss.str());</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    }</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;}</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#ae6440b8ea95cf981cd7bbffa52c22fe1">  238</a></span>&#160;<span class="preprocessor">#define CHECK_BUFFER_SIZE(BUFFER_PTR, TENSOR_INFO, BUFFER_ID) \</span></div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="preprocessor">    CheckBufferSize(BUFFER_PTR, TENSOR_INFO, BUFFER_ID, CHECK_LOCATION())</span></div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="namespacearmnn.xhtml#a58bfb9626d373249745d78b95543116e">IsActivationSupported</a>(tflite::ActivationFunctionType activationType)</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;{</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    <span class="keywordflow">switch</span>(activationType)</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    {</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_NONE:</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU:</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU6:</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_TANH:</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        {</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        }</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        {</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;        }</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    }</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;}</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">  259</a></span>&#160;<span class="preprocessor">#define CHECK_SUPPORTED_FUSED_ACTIVATION(OPTION, SUBGRAPH_INDEX, OPERATOR_INDEX) \</span></div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;<span class="preprocessor">    do { \</span></div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="preprocessor">        if (IsActivationSupported(OPTION-&gt;fused_activation_function) == false) \</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;<span class="preprocessor">        { \</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<span class="preprocessor">            throw ParseException( \</span></div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;<span class="preprocessor">                boost::str( \</span></div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;<span class="preprocessor">                    boost::format(&quot;TfLite parser doesn&#39;t suppport fused activation: &quot; \</span></div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;<span class="preprocessor">                                  &quot;%1%/%2% in %3% subgraph:%4% operator:%5% at %6%&quot;) % \</span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;<span class="preprocessor">                                  OPTION-&gt;fused_activation_function % \</span></div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;<span class="preprocessor">                                  tflite::EnumNameActivationFunctionType(\</span></div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;<span class="preprocessor">                                      OPTION-&gt;fused_activation_function) % \</span></div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;<span class="preprocessor">                                  __func__ % \</span></div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="preprocessor">                                  SUBGRAPH_INDEX % \</span></div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="preprocessor">                                  OPERATOR_INDEX % \</span></div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;<span class="preprocessor">                                  CHECK_LOCATION().FileLine())); \</span></div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="preprocessor">        } \</span></div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;<span class="preprocessor">    } while(false)</span></div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;std::vector&lt;unsigned int&gt; AsUnsignedVector(<span class="keyword">const</span> std::vector&lt;int32_t&gt; &amp; in)</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;{</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    std::vector&lt;unsigned int&gt; result;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    result.reserve(in.size());</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp; i : in)</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    {</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;        result.push_back(<a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(i));</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    }</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;}</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">CalcPadding</a>(uint32_t inputSize,</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;                 uint32_t filterSize,</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;                 uint32_t stride,</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;                 uint32_t dilation,</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;                 uint32_t&amp; paddingFront,</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;                 uint32_t&amp; paddingBack,</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;                 tflite::Padding padding)</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;{</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    paddingFront = 0;</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    paddingBack = 0;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    <span class="keywordflow">if</span> (padding == tflite::Padding_SAME)</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    {</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        uint32_t outputSize = (inputSize + stride - 1) / stride;</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        uint32_t dilatedSize = filterSize + (dilation - 1) * (filterSize - 1);</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;        uint32_t temp = (outputSize - 1) * stride + dilatedSize;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;        <span class="keywordflow">if</span> (temp &gt; inputSize)</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;        {</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;            paddingFront = (temp - inputSize) / 2;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;            paddingBack = (temp - inputSize) - paddingFront;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;        }</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    }</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;}</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(<a class="code" href="_parser_flatbuffers_serialize_fixture_8hpp.xhtml#a15c20a0693cd3fc4d85565e2f920d8ef">TfLiteParser::TensorRawPtr</a> tensorPtr, <span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; shapes,</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;                               <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>&amp; dimensionMappings = {0, 1, 2, 3})</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;{</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> type;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ae38d96fe05581ea025713b3e781c5a43">CHECK_TENSOR_PTR</a>(tensorPtr);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    <span class="keywordflow">switch</span> (tensorPtr-&gt;type)</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    {</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_UINT8:</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;            type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_FLOAT32:</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;            type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>;</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_INT8:</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;            <span class="keywordflow">if</span> (tensorPtr-&gt;quantization-&gt;zero_point.size() == 1)</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;            {</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;                <span class="comment">// Per-tensor</span></div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;                type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;            }</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;            {</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;                <span class="comment">// Per-channel</span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;                type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a>;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;            }</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_INT16:</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;            type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_INT32:</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;            type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;        {</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;            <a class="code" href="structarmnn_1_1_check_location.xhtml">CheckLocation</a> location = <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>();</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;                boost::str(</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;                    boost::format(<span class="stringliteral">&quot;Unsupported data type %1% = %2% for tensor: %3%. %4%&quot;</span>) %</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;                                  tensorPtr-&gt;type %</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;                                  tflite::EnumNameTensorType(tensorPtr-&gt;type) %</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;                                  tensorPtr-&gt;name %</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;                                  location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">AsString</a>()));</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;        }</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    }</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    std::vector&lt;unsigned int&gt; safeShape = shapes;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    <span class="keywordflow">if</span> (safeShape.size() == 0)</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    {</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        safeShape.push_back(1);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    }</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    <span class="keywordtype">float</span> quantizationScale = 0.0f;</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    int32_t quantizationOffset = 0;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <span class="keywordflow">if</span> (tensorPtr-&gt;quantization.get())</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    {</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;        <span class="keywordflow">if</span> (tensorPtr-&gt;quantization-&gt;scale.size() &lt;= 1)</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;        {</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;            <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(tensorPtr-&gt;quantization-&gt;zero_point.size(), 0, 1);</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;            <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(tensorPtr-&gt;quantization-&gt;zero_point.size(), 0, 1);</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;            <span class="keywordflow">if</span> (tensorPtr-&gt;quantization-&gt;scale.size() == 1)</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;            {</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;                quantizationScale = tensorPtr-&gt;quantization-&gt;scale[0];</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;            }</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;            <span class="keywordflow">if</span> (tensorPtr-&gt;quantization-&gt;zero_point.size() == 1)</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;            {</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;                <span class="comment">// NOTE: we lose precision here when converting from 64 bit to 32</span></div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;                <span class="comment">//       but this is what we support at the moment in ArmNN</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;                quantizationOffset = <a class="code" href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">boost::numeric_cast</a>&lt;int32_t&gt;(tensorPtr-&gt;quantization-&gt;zero_point[0]);</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;            }</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;            <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> result(boost::numeric_cast&lt;unsigned int&gt;(safeShape.size()),</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;                              safeShape.data(),</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;                              type,</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;                              quantizationScale,</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;                              quantizationOffset);</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;            <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;        }</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;        {</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;            std::vector&lt;float&gt; quantizationScales;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;            std::vector&lt;int32_t&gt; quantizationOffsets;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;            <span class="comment">// Scale</span></div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;            std::copy(tensorPtr-&gt;quantization-&gt;scale.begin(),</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;                      tensorPtr-&gt;quantization-&gt;scale.end(),</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;                      std::back_inserter(quantizationScales));</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;            <span class="comment">// QSymmS8 Per-axis</span></div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;            <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> result(boost::numeric_cast&lt;unsigned int&gt;(safeShape.size()),</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;                              safeShape.data(),</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;                              type,</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;                              quantizationScales,</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;                              dimensionMappings[<a class="code" href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">boost::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;                              tensorPtr-&gt;quantization-&gt;quantized_dimension)]);</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;            <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;        }</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    }</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    {</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> result(boost::numeric_cast&lt;unsigned int&gt;(safeShape.size()),</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;                                 safeShape.data(),</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;                                 type,</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;                                 quantizationScale,</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;                                 quantizationOffset);</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;        <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    }</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;}</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(<a class="code" href="_parser_flatbuffers_serialize_fixture_8hpp.xhtml#a15c20a0693cd3fc4d85565e2f920d8ef">TfLiteParser::TensorRawPtr</a> tensorPtr, </div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;                               <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a>&amp; dimensionMappings = {0, 1, 2, 3})</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;{</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;    <span class="keyword">auto</span> <span class="keyword">const</span> &amp; dimensions = AsUnsignedVector(tensorPtr-&gt;shape);</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(tensorPtr, dimensions, dimensionMappings);</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;}</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;std::pair&lt;armnn::ConstTensor, std::unique_ptr&lt;T[]&gt;&gt;</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;CreateConstTensorImpl(TfLiteParser::BufferRawPtr bufferPtr,</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;                      <a class="code" href="_parser_flatbuffers_serialize_fixture_8hpp.xhtml#a15c20a0693cd3fc4d85565e2f920d8ef">TfLiteParser::TensorRawPtr</a> tensorPtr,</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;                      <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;                      <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a> permutationVector)</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;{</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(tensorPtr);</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    BOOST_ASSERT_MSG(tensorPtr != <span class="keyword">nullptr</span>, <span class="stringliteral">&quot;tensorPtr is null&quot;</span>);</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    BOOST_ASSERT_MSG(bufferPtr != <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;        boost::str(</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;            boost::format(<span class="stringliteral">&quot;Buffer for buffer:%1% is null&quot;</span>) % tensorPtr-&gt;buffer).c_str());</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    std::unique_ptr&lt;T[]&gt; data(<span class="keyword">new</span> T[tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>()]);</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    <span class="keywordflow">if</span> (permutationVector.<a class="code" href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">has_value</a>() &amp;&amp; permutationVector.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>().<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>() &gt; 0)</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    {</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;        tensorInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(tensorInfo, permutationVector.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>());</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">armnnUtils::Permute</a>(tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), permutationVector.<a class="code" href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">value</a>(),</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;                            <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T*<span class="keyword">&gt;</span>(bufferPtr-&gt;data.data()), data.get(), <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    }</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    {</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        ::memcpy(data.get(), bufferPtr-&gt;data.data(), tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    }</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    <span class="keywordflow">return</span> std::make_pair(<a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>(tensorInfo, data.get()), std::move(data));</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;}</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;<a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a> GenerateLayerBindingId(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> tensorIndex)</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;{</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <span class="comment">// generate the binding id by shifting the tensor id by 8 bit</span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;    <span class="comment">// and add the subgraph id, which allows 256 subgraphs</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a><span class="keyword">&gt;</span>((tensorIndex&lt;&lt;8)+subgraphIndex);</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;}</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="namespacearmnn_deserializer.xhtml#a97b50f22cd99f0e09e6e48d20a35f6b2">CheckShape</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; actual, <span class="keyword">const</span> std::vector&lt;int32_t&gt;&amp; expected)</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;{</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> actualSize = actual.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;    <span class="keywordflow">if</span> (actualSize != expected.size())</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    {</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    }</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; actualSize; i++)</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    {</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;        <span class="keywordflow">if</span> (expected[i] &lt; 0 ||</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;            actual[i] != static_cast&lt;unsigned int&gt;(expected[i]))</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;        {</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;        }</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    }</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;}</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;} <span class="comment">// &lt;anonymous&gt;</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a2ed4853234865d838da50085da99b2a6">  488</a></span>&#160;TfLiteParser::TfLiteParser(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ITfLiteParser::TfLiteParserOptions&gt;</a>&amp; <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>)</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;: m_Options(options)</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;, m_Network(nullptr, nullptr)</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;, m_ParserFunctions(tflite::BuiltinOperator_MAX+1, &amp;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml">TfLiteParser</a>::ParseUnsupportedOperator)</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;{</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    <span class="comment">// register supported operators</span></div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_ADD]                     = &amp;TfLiteParser::ParseAdd;</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_AVERAGE_POOL_2D]         = &amp;TfLiteParser::ParseAveragePool2D;</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_BATCH_TO_SPACE_ND]       = &amp;TfLiteParser::ParseBatchToSpaceND;</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_CONCATENATION]           = &amp;TfLiteParser::ParseConcatenation;</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_CONV_2D]                 = &amp;TfLiteParser::ParseConv2D;</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_CUSTOM]                  = &amp;TfLiteParser::ParseCustomOperator;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_DEPTHWISE_CONV_2D]       = &amp;TfLiteParser::ParseDepthwiseConv2D;</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_DEQUANTIZE]              = &amp;TfLiteParser::ParseDequantize;</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_FULLY_CONNECTED]         = &amp;TfLiteParser::ParseFullyConnected;</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_LOGISTIC]                = &amp;TfLiteParser::ParseLogistic;</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_L2_NORMALIZATION]        = &amp;TfLiteParser::ParseL2Normalization;</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MAX_POOL_2D]             = &amp;TfLiteParser::ParseMaxPool2D;</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MAXIMUM]                 = &amp;TfLiteParser::ParseMaximum;</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MEAN]                    = &amp;TfLiteParser::ParseMean;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MINIMUM]                 = &amp;TfLiteParser::ParseMinimum;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MUL]                     = &amp;TfLiteParser::ParseMul;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_PACK]                    = &amp;TfLiteParser::ParsePack;</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_PAD]                     = &amp;TfLiteParser::ParsePad;</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_QUANTIZE]                = &amp;TfLiteParser::ParseQuantize;</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RELU]                    = &amp;TfLiteParser::ParseRelu;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RELU6]                   = &amp;TfLiteParser::ParseRelu6;</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RESHAPE]                 = &amp;TfLiteParser::ParseReshape;</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RESIZE_BILINEAR]         = &amp;TfLiteParser::ParseResizeBilinear;</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RESIZE_NEAREST_NEIGHBOR] = &amp;TfLiteParser::ParseResizeNearestNeighbor;</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SLICE]                   = &amp;TfLiteParser::ParseSlice;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SOFTMAX]                 = &amp;TfLiteParser::ParseSoftmax;</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SPACE_TO_BATCH_ND]       = &amp;TfLiteParser::ParseSpaceToBatchND;</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SPLIT]                   = &amp;TfLiteParser::ParseSplit;</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SQUEEZE]                 = &amp;TfLiteParser::ParseSqueeze;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_STRIDED_SLICE]           = &amp;TfLiteParser::ParseStridedSlice;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SUB]                     = &amp;TfLiteParser::ParseSub;</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_TANH]                    = &amp;TfLiteParser::ParseTanH;</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_TRANSPOSE]               = &amp;TfLiteParser::ParseTranspose;</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_TRANSPOSE_CONV]          = &amp;TfLiteParser::ParseTransposeConv;</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_UNPACK]                  = &amp;TfLiteParser::ParseUnpack;</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="comment">// register supported custom operators</span></div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    m_CustomParserFunctions[<span class="stringliteral">&quot;TFLite_Detection_PostProcess&quot;</span>]      = &amp;TfLiteParser::ParseDetectionPostProcess;</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;}</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ResetParser()</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;{</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    m_Network = <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a>(<span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    m_Model = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    m_SubgraphConnections.clear();</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;}</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;<span class="keywordtype">void</span> TfLiteParser::AddBroadcastReshapeLayer(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;                                            <span class="keywordtype">size_t</span> operatorIndex,</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;                                            <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *layer)</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;{</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = m_Model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = subgraphPtr-&gt;operators[operatorIndex];</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    BOOST_ASSERT(operatorPtr-&gt;inputs.size() &gt; 1);</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    uint32_t reshapedInputId = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(operatorPtr-&gt;inputs[0]);</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">TensorRawPtr</a> tensorPtr = subgraphPtr-&gt;tensors[reshapedInputId].get();</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    uint32_t inputId = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(operatorPtr-&gt;inputs[1]);</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">TensorRawPtr</a> tensorPtr1 = subgraphPtr-&gt;tensors[inputId].get();</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> reshapedTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(tensorPtr);</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo    = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(tensorPtr1);</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &lt; reshapedTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    {</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;        uint32_t <span class="keywordtype">id</span> = reshapedInputId;</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;        reshapedInputId = inputId;</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;        inputId = id;</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;        reshapedTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(tensorPtr1);</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;        inputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(tensorPtr);</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    }</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    uint32_t numDimensions = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    std::vector&lt;unsigned&gt; reshapedDim;</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; reshapedTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); ++i)</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    {</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;        reshapedDim.push_back(reshapedTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i]);</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    }</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    std::vector&lt;unsigned int&gt; reshapedDimensions(numDimensions, 1);</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    std::copy_backward (reshapedDim.begin(), reshapedDim.end(), reshapedDimensions.end());</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    reshapedTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>{ numDimensions, reshapedDimensions.data() });</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;    std::string layerName = boost::str(boost::format(<span class="stringliteral">&quot;Reshape_for:%1%&quot;</span>) % layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">GetName</a>());</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a> desc;</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    desc.<a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">m_TargetShape</a> = reshapedTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* reshapeLayer = m_Network-&gt;AddReshapeLayer(desc, layerName.c_str());</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    reshapeLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(reshapedTensorInfo);</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    reshapeLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, reshapeLayer, {reshapedInputId});</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <a class="code" href="classarmnn_1_1_i_input_slot.xhtml">armnn::IInputSlot</a>* input1Slot = &amp;(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    RegisterConsumerOfTensor(subgraphIndex, inputId, input1Slot);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;}</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;</div><div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a012b24cafd443425314d4f9e06cec6c1">  598</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a012b24cafd443425314d4f9e06cec6c1">TfLiteParser::CreateNetworkFromBinaryFile</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* graphFile)</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;{</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    ResetParser();</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    m_Model = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac5411554ab8c02ca286af52c98f6bd87">LoadModelFromFile</a>(graphFile);</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <span class="keywordflow">return</span> CreateNetworkFromModel();</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;}</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ae8ee09f5e3e78ecfdf00acfdc37588dc">  605</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ae8ee09f5e3e78ecfdf00acfdc37588dc">TfLiteParser::CreateNetworkFromBinary</a>(<span class="keyword">const</span> std::vector&lt;uint8_t&gt; &amp; binaryContent)</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;{</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    ResetParser();</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    m_Model = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a858104f225c302988fba35c1cb299066">LoadModelFromBinary</a>(binaryContent.data(), binaryContent.size());</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="keywordflow">return</span> CreateNetworkFromModel();</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;}</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;<a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> TfLiteParser::CreateNetworkFromModel()</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;{</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    m_Network = INetwork::Create();</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    BOOST_ASSERT(m_Model.get() != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    <span class="keywordtype">bool</span> failedToCreate = <span class="keyword">false</span>;</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    std::stringstream errors;</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    <span class="keywordflow">if</span> (m_Model-&gt;subgraphs.size() != 1)</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    {</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;                boost::str(</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;                        boost::format(<span class="stringliteral">&quot;Current TfLite parser only supports 1 subgraph. Current one has: %1% %2%&quot;</span>) %</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;                        m_Model-&gt;subgraphs.size() %</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    }</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    <span class="keywordtype">size_t</span> subgraphIndex = 0;</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;    <span class="keywordflow">for</span> (<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a988cb5e216eb87d854414c6a0282eeb4">SubgraphPtr</a> <span class="keyword">const</span> &amp; subgraph : m_Model-&gt;subgraphs)</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    {</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;        m_SubgraphConnections.emplace_back(subgraph-&gt;tensors.size());</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;        <span class="keywordtype">size_t</span> operatorIndex = 0;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aadad81a95152fe5aad839db352d4012c">OperatorPtr</a> <span class="keyword">const</span> &amp; op : subgraph-&gt;operators)</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;        {</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;            <span class="keywordflow">try</span></div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;            {</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;                <span class="keyword">auto</span> <span class="keyword">const</span> &amp; opCodePtr = m_Model-&gt;operator_codes[op-&gt;opcode_index];</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;                <span class="keyword">auto</span> builtinCode = opCodePtr-&gt;builtin_code;</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;                <span class="keywordflow">if</span> (builtinCode &gt; tflite::BuiltinOperator_MAX)</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;                {</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;                    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;                            boost::str(</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;                                    boost::format(<span class="stringliteral">&quot;Operator code %1% is out of range 0-%2%. &quot;</span></div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;                                                  <span class="stringliteral">&quot;subgraph:%3% operator idx:%4%. %5%&quot;</span>) %</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;                                                  builtinCode %</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;                                                  tflite::BuiltinOperator_MAX %</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;                                                  subgraphIndex %</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;                                                  operatorIndex %</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;                                                  <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;                }</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;                <span class="comment">// lookup and call the parser function</span></div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;                <span class="keyword">auto</span> &amp; parserFunction = m_ParserFunctions[builtinCode];</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;                (this-&gt;*parserFunction)(subgraphIndex, operatorIndex);</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;            }</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;            <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>&amp; e)</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;            {</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;                failedToCreate = <span class="keyword">true</span>;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;                std::stringstream errorString;</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;                errorString &lt;&lt; <span class="stringliteral">&quot;Failed to parse operator #&quot;</span> &lt;&lt; operatorIndex</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;                            &lt;&lt; <span class="stringliteral">&quot; within subgraph #&quot;</span> &lt;&lt; subgraphIndex</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;                            &lt;&lt; <span class="stringliteral">&quot; error: &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>();</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;                <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>) &lt;&lt; errorString.str();</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;                errors &lt;&lt; errorString.str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;            }</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;            ++operatorIndex;</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;        }</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;        SetupInputLayers(subgraphIndex);</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;        SetupOutputLayers(subgraphIndex);</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;        SetupConstantLayers(subgraphIndex);</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;        ++subgraphIndex;</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    }</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    <span class="keywordflow">if</span> (failedToCreate)</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    {</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;        <span class="comment">// we can skip everything and let the outer exception handler deal with the error</span></div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(errors.str());</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    }</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    <span class="comment">// establish the connections from the layer outputs to the inputs of the subsequent layers</span></div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> subgraphIndex = 0; subgraphIndex &lt; m_SubgraphConnections.size(); ++subgraphIndex)</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    {</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> tensorIndex = 0; tensorIndex &lt; m_SubgraphConnections[subgraphIndex].size(); ++tensorIndex)</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;        {</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;            <span class="keywordflow">if</span> (m_SubgraphConnections[subgraphIndex][tensorIndex].outputSlot != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;            {</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;                <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> inputSlotIdx = 0;</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;                    inputSlotIdx &lt; m_SubgraphConnections[subgraphIndex][tensorIndex].inputSlots.size();</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;                    ++inputSlotIdx)</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;                {</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;                    m_SubgraphConnections[subgraphIndex][tensorIndex].outputSlot-&gt;Connect(</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;                        *(m_SubgraphConnections[subgraphIndex][tensorIndex].inputSlots[inputSlotIdx]));</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;                }</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;            }</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;        }</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    }</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    <span class="keywordflow">return</span> std::move(m_Network);</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;}</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;<span class="keywordtype">void</span> TfLiteParser::RegisterProducerOfTensor(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;                                            <span class="keywordtype">size_t</span> tensorIndex,</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;                                            <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a>* slot)</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;{</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">CHECK_TENSOR</a>(m_Model, subgraphIndex, tensorIndex);</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;    BOOST_ASSERT(m_SubgraphConnections.size() &gt; subgraphIndex);</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    BOOST_ASSERT(m_SubgraphConnections[subgraphIndex].size() &gt; tensorIndex);</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    TensorSlots &amp; tensorSlots = m_SubgraphConnections[subgraphIndex][tensorIndex];</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    <span class="comment">// assuming there is only one producer for that tensor</span></div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    <span class="keywordflow">if</span> (tensorSlots.outputSlot != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    {</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(boost::str(</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;                boost::format(<span class="stringliteral">&quot;Another layer has already registered itself as the producer of &quot;</span></div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;                              <span class="stringliteral">&quot;subgraph:%1% tensor:%2% %3%&quot;</span>) %</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;                               subgraphIndex %</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;                               tensorIndex %</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;                               <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    }</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    tensorSlots.outputSlot = slot;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;}</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;<span class="keywordtype">void</span> TfLiteParser::RegisterConsumerOfTensor(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;                                            <span class="keywordtype">size_t</span> tensorIndex,</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;                                            <a class="code" href="classarmnn_1_1_i_input_slot.xhtml">armnn::IInputSlot</a>* slot)</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;{</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">CHECK_TENSOR</a>(m_Model, subgraphIndex, tensorIndex);</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    BOOST_ASSERT(m_SubgraphConnections.size() &gt; subgraphIndex);</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    BOOST_ASSERT(m_SubgraphConnections[subgraphIndex].size() &gt; tensorIndex);</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;    TensorSlots &amp; tensorSlots = m_SubgraphConnections[subgraphIndex][tensorIndex];</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    tensorSlots.inputSlots.push_back(slot);</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;}</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseCustomOperator(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;{</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    <span class="comment">// NOTE: By default we presume the custom operator is not supported</span></div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;    <span class="keyword">auto</span> customParserFunction = &amp;TfLiteParser::ParseUnsupportedOperator;</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;    <span class="comment">// Identify custom code defined for custom operator</span></div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span>&amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span>&amp; customCode  = m_Model-&gt;operator_codes[operatorPtr-&gt;opcode_index]-&gt;custom_code;</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;    <span class="comment">// Find parser function that correspondes to custom code (if any)</span></div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;    <span class="keyword">auto</span> iterator = m_CustomParserFunctions.find(customCode);</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;    <span class="keywordflow">if</span> (iterator != m_CustomParserFunctions.end())</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;    {</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;        customParserFunction = iterator-&gt;second;</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    }</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;    <span class="comment">// Run parser function</span></div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    (this-&gt;*customParserFunction)(subgraphIndex, operatorIndex);</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;}</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseUnsupportedOperator(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;{</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    <span class="keyword">auto</span> opcodeIndex = operatorPtr-&gt;opcode_index;</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;    <span class="keyword">auto</span> opcode      = m_Model-&gt;operator_codes[opcodeIndex]-&gt;builtin_code;</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    <span class="keywordflow">if</span> (!m_Options || !m_Options.value().m_StandInLayerForUnsupported)</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;    {</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;        <span class="comment">// Do not add StandInLayer, throw ParseException instead</span></div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;            boost::str(</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;                boost::format(<span class="stringliteral">&quot;Operator not supported. &quot;</span></div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;                              <span class="stringliteral">&quot;subgraph:%1% operator:%2% &quot;</span></div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;                              <span class="stringliteral">&quot;opcode_index:%3% opcode:%4% / %5% %6%&quot;</span>) %</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;                              subgraphIndex %</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;                              operatorIndex %</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;                              opcodeIndex %</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;                              opcode %</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;                              tflite::EnumNameBuiltinOperator(opcode) %</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;                              <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    }</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    <span class="keyword">auto</span> inputs  = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs  = <a class="code" href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">boost::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(inputs.size());</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = <a class="code" href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">boost::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputs.size());</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;    <a class="code" href="structarmnn_1_1_stand_in_descriptor.xhtml">StandInDescriptor</a> descriptor(numInputs, numOutputs);</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;StandIn:%1%:%2%:%3%&quot;</span>) % subgraphIndex % operatorIndex % opcode);</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    <span class="comment">// Add a non-executable StandInLayer as a placeholder for any unsupported operator</span></div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddStandInLayer(descriptor, layerName.c_str());</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; numOutputs; ++i)</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    {</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(i).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(<a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[i]));</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    }</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;    <span class="keyword">auto</span> inputTensorIds  = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;    <span class="keyword">auto</span> outputTensorIds = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, inputTensorIds);</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIds);</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;}</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseConv2D(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;{</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsConv2DOptions();</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> desc;</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;    desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;stride_w);</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;stride_h);</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;    desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;dilation_w_factor);</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;    desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;dilation_h_factor);</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2, 3);</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> filterTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    <span class="comment">// assuming input is NHWC</span></div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputTensorInfo.GetShape()[1];</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth  = inputTensorInfo.GetShape()[2];</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;    <span class="comment">// assuming the filter is OHWI : Output, H, W, Input</span></div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;    <span class="comment">// which is essentially the same as NHWC</span></div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterHeight = filterTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[1];</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterWidth  = filterTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[2];</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">CalcPadding</a>(inputHeight, filterHeight, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>,</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;                desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;padding);</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">CalcPadding</a>(inputWidth, filterWidth, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>,</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;                desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;padding);</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;    <span class="keyword">auto</span> filterTensorAndData = CreateConstTensor(inputs[1],</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;                                                 filterTensorInfo,</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;                                                 <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a>());</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* layer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Conv2D:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;    <span class="keywordflow">if</span> (inputs.size() == 3)</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;    {</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;        desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;        <span class="keyword">auto</span> biasTensorAndData = CreateConstTensor(inputs[2],</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;                                                   biasTensorInfo,</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;                                                   <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a>());</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;        layer = m_Network-&gt;AddConvolution2dLayer(desc,</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;                                                 filterTensorAndData.first,</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;                                                 <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(biasTensorAndData.first),</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;                                                 layerName.c_str());</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;    }</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;    {</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;        layer = m_Network-&gt;AddConvolution2dLayer(desc,</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;                                                 filterTensorAndData.first,</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;                                                 <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;                                                 layerName.c_str());</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;    }</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;    <span class="comment">// register the input connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;    layer = AddFusedActivationLayer(layer, 0, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;fused_activation_function);</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;    <span class="comment">// register the output connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;}</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseDepthwiseConv2D(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;{</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsDepthwiseConv2DOptions();</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> desc;</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;    desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;    desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;stride_w);</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;    desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;stride_h);</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;depth_multiplier);</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2, 3);</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;    desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;dilation_w_factor);</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;    desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;dilation_h_factor);</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;    <span class="comment">// Mappings from TensorflowLite filter tensors to the ArmNN filter tensors (ArmNN weights have to be [M, I, H, W])</span></div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;    <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a> permutationVector{ 2, 3, 1, 0 }; <span class="comment">// [H, W, I, M] -&gt; [M, I, H, W]</span></div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;  </div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> filterTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1], permutationVector);</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;    <span class="comment">// Assuming input is NHWC</span></div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[1];</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth  = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[2];</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    <span class="comment">// TensorflowLite weights come in the format [1, H, W, I * M]</span></div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterHeight = filterTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[1];</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterWidth  = filterTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[2];</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    <span class="comment">// Reshape weights as [ H, W, I, M ]</span></div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;    filterTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ filterHeight,</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;                                filterWidth,</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;                                inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[3],</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;                                filterTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[3] / inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[3] });</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">CalcPadding</a>(inputHeight, filterHeight, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>,</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;                desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;padding);</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">CalcPadding</a>(inputWidth, filterWidth, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>,</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;                desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;padding);</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;    <span class="keyword">auto</span> filterTensorAndData = CreateConstTensor(inputs[1], filterTensorInfo, permutationVector);</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* layer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;DepthwiseConv2D:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;    <span class="keywordflow">if</span> (inputs.size() == 3)</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;    {</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;        desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> biasTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;        <span class="keyword">auto</span> biasTensorAndData = CreateConstTensor(inputs[2],</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;                                                   biasTensorInfo,</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;                                                   <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a>());</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;        layer = m_Network-&gt;AddDepthwiseConvolution2dLayer(desc,</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;                                                          filterTensorAndData.first,</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;                                                          <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(biasTensorAndData.first),</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;                                                          layerName.c_str());</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;    }</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;    {</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;        layer = m_Network-&gt;AddDepthwiseConvolution2dLayer(desc,</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;                                                          filterTensorAndData.first,</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;                                                          <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;                                                          layerName.c_str());</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;    }</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;    <span class="comment">// register the input connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;    layer = AddFusedActivationLayer(layer, 0, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;fused_activation_function);</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;    <span class="comment">// register the output connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;}</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseDequantize(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;{</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;</div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Dequantize:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddDequantizeLayer(layerName.c_str());</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;}</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseTranspose(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;{</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1, 2);</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* layer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Transpose:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;    <a class="code" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a> desc;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;    <span class="keywordflow">if</span> (inputs.size() == 2)</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;    {</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> permuteTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;        <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> permuteBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;        <span class="keyword">auto</span> numPermVecElements = permuteTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>();</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;        std::vector&lt;unsigned int&gt; permuteShape(numPermVecElements);</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;        ::memcpy(permuteShape.data(), permuteBufferPtr-&gt;data.data(), permuteTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;        <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a> permutationVector(permuteShape.data(), permuteTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;        desc = <a class="code" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a>(permutationVector);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;    }</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;    layer = m_Network-&gt;AddTransposeLayer(desc, layerName.c_str());</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;    layer-&gt;GetOutputSlot(0).SetTensorInfo(outputTensorInfo);</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;}</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseTransposeConv(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;{</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsTransposeConvOptions();</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;    <a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> desc;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;    desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;stride_w);</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;    desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;stride_h);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;    desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 3);</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> filterTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;    <span class="comment">// TfLite uses NHWC tensors</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputTensorInfo.GetShape()[1];</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth  = inputTensorInfo.GetShape()[2];</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterHeight = filterTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[1];</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterWidth  = filterTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[2];</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">CalcPadding</a>(inputHeight,</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;                filterHeight,</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>,</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;                1, <span class="comment">// DilationY</span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>,</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>,</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;                <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;padding);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">CalcPadding</a>(inputWidth,</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;                filterWidth,</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>,</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;                1, <span class="comment">// DilationX</span></div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>,</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>,</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;                <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;padding);</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;    <span class="keyword">auto</span> filterTensorAndData = CreateConstTensor(inputs[1],</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;                                                 filterTensorInfo,</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;                                                 <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a>());</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* layer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;TransposeConv:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;    layer = m_Network-&gt;AddTransposeConvolution2dLayer(desc,</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;                                                      filterTensorAndData.first,</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;                                                      <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;                                                      layerName.c_str());</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const (filter) tensor</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[2]});</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;}</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseAveragePool2D(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;{</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;    ParsePool(subgraphIndex, operatorIndex, PoolingAlgorithm::Average);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;}</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseBatchToSpaceND(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;{</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 3);</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> blockShapeTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> blockShapeBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> cropsTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> cropsBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[2]-&gt;buffer);</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;    std::vector&lt;unsigned int&gt; blockShape(blockShapeTensorInfo.GetNumElements());</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;    ::memcpy(blockShape.data(), blockShapeBufferPtr-&gt;data.data(), blockShapeTensorInfo.GetNumBytes());</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;    std::vector&lt;unsigned int&gt; cropsVector(cropsTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;    ::memcpy(cropsVector.data(), cropsBufferPtr-&gt;data.data(), cropsTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;    <span class="keywordtype">size_t</span> step = 2;</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;    std::vector&lt;std::pair&lt;unsigned int, unsigned int&gt;&gt; crops;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; cropsTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() / step; ++i)</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;    {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;        crops.emplace_back(cropsVector[i * step], cropsVector[i * step + 1]);</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;    }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;    <a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">armnn::BatchToSpaceNdDescriptor</a> desc;</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;    desc.<a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml#a02e143524aefddd40b485fcf7dea6696">m_BlockShape</a> = blockShape;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;    desc.<a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml#a3941f674c071c9503e00d2b59e92e454">m_Crops</a> = crops;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;    desc.<a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;BatchToSpaceND:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddBatchToSpaceNdLayer(desc, layerName.c_str());</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;}</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseL2Normalization(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;{</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;    <a class="code" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> desc;</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;    desc.<a class="code" href="structarmnn_1_1_l2_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;L2Normalization:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddL2NormalizationLayer(desc, layerName.c_str());</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;}</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseMaxPool2D(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;{</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;    ParsePool(subgraphIndex, operatorIndex, PoolingAlgorithm::Max);</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;}</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseMaximum(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;{</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Maximum:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddMaximumLayer(layerName.c_str());</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.GetNumDimensions() != input1TensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    {</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;        AddBroadcastReshapeLayer(subgraphIndex, operatorIndex, layer);</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;    }</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;    {</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;        RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;    }</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;}</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseMinimum(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;{</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Minimum:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddMinimumLayer(layerName.c_str());</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.GetNumDimensions() != input1TensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;    {</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;        AddBroadcastReshapeLayer(subgraphIndex, operatorIndex, layer);</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    }</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;    {</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;        RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;    }</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;}</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParsePool(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;                             <span class="keywordtype">size_t</span> operatorIndex,</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;                             <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a> algorithm)</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;{</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsPool2DOptions();</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;    std::string layerName;</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;    <span class="keywordflow">switch</span> (algorithm)</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;    {</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;        <span class="keywordflow">case</span> PoolingAlgorithm::Average:</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;            layerName =</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;                boost::str(boost::format(<span class="stringliteral">&quot;AveragePool2D:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;        <span class="keywordflow">case</span> PoolingAlgorithm::Max:</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;            layerName =</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;                boost::str(boost::format(<span class="stringliteral">&quot;MaxPool2D:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;            BOOST_ASSERT_MSG(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unsupported Pooling Algorithm&quot;</span>);</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;    }</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;    <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> desc;</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;    desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a> = algorithm;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;    desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;stride_w);</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;    desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;stride_h);</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;    desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;filter_width);</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;    desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a> = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;filter_height);</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;    desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> = PaddingMethod::Exclude;</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;    desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#affb5b68b3eba3ed45a06c7cde7781962">m_OutputShapeRounding</a> = OutputShapeRounding::Floor;</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;    desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;    <span class="comment">// assuming input is NHWC</span></div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputTensorInfo.GetShape()[1];</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth  = inputTensorInfo.GetShape()[2];</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">CalcPadding</a>(inputHeight, desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a>, desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>, 1u,</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;                desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>, desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;padding);</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">CalcPadding</a>(inputWidth, desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>, desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>, 1u,</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;                desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>, desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;padding);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddPooling2dLayer(desc, layerName.c_str());</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;    layer-&gt;GetOutputSlot(0).SetTensorInfo(outputTensorInfo);</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;    <span class="comment">// register the input connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;    layer = AddFusedActivationLayer(layer, 0, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;fused_activation_function);</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;    <span class="comment">// register the output connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;}</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseSlice(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;{</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 3);</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;    <a class="code" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a> desc;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;    <span class="comment">// set begin tensor info for slice descriptor</span></div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> beginTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> beginBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;    std::vector&lt;unsigned int&gt; begin(beginTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;    ::memcpy(begin.data(), beginBufferPtr-&gt;data.data(), beginTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;    <span class="comment">// set size tensor info for slice descriptor</span></div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> sizeTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> sizeBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[2]-&gt;buffer);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;    std::vector&lt;unsigned int&gt; size(sizeTensorInfo.GetNumElements());</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;    ::memcpy(size.data(), sizeBufferPtr-&gt;data.data(), sizeTensorInfo.GetNumBytes());</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;    desc = <a class="code" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a>(begin, size);</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Slice:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = m_Network-&gt;AddSliceLayer(desc, layerName.c_str());</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;    <span class="comment">// register the input connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;    <span class="comment">// register the output connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;}</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseSoftmax(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;{</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsSoftmaxOptions();</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;    <a class="code" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> desc;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;    desc.<a class="code" href="structarmnn_1_1_softmax_descriptor.xhtml#a8275d51ef9a584feb95726ea0522f6e5">m_Beta</a> = <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;beta;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Softmax:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = m_Network-&gt;AddSoftmaxLayer(desc, layerName.c_str());</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;    <span class="comment">// register the input connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;    <span class="comment">// register the output connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;}</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseSpaceToBatchND(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;{</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 3);</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> blockShapeTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> blockShapeBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> padListTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> padListBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[2]-&gt;buffer);</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;    std::vector&lt;unsigned int&gt; blockShape(blockShapeTensorInfo.GetNumElements());</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;    ::memcpy(blockShape.data(), blockShapeBufferPtr-&gt;data.data(), blockShapeTensorInfo.GetNumBytes());</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;    std::vector&lt;unsigned int&gt; padListVector(padListTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;    ::memcpy(padListVector.data(), padListBufferPtr-&gt;data.data(), padListTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;    <span class="keywordtype">size_t</span> step = 2;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;    std::vector&lt;std::pair&lt;unsigned int, unsigned int&gt;&gt; padList;</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; padListTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() / step; ++i)</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;    {</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;        padList.emplace_back(padListVector[i * step], padListVector[i * step + 1]);</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;    }</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;    <a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">armnn::SpaceToBatchNdDescriptor</a> desc;</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;    desc.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a02e143524aefddd40b485fcf7dea6696">m_BlockShape</a> = blockShape;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;    desc.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a85f98c94e11f65a6b73f831735c040f3">m_PadList</a> = padList;</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;    desc.<a class="code" href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;SpaceToBatchND:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddSpaceToBatchNdLayer(desc, layerName.c_str());</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;}</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;</div><div class="line"><a name="l01463"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aa0a90d432c9c41f9846f41f11c9e54c9"> 1463</a></span>&#160;<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aa0a90d432c9c41f9846f41f11c9e54c9">TfLiteParser::OutputShapeOfSqueeze</a>(<span class="keyword">const</span> std::vector&lt;uint32_t&gt; &amp; squeezeDimsIn,</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;                                                     <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp; inputTensorInfo)</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;{</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(squeezeDimsIn.size(), 0, 1, 2, 3, 4);</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;    std::vector&lt;uint32_t&gt; squeezeDims = squeezeDimsIn;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> uint32_t dimensionSequence[] = { 0, 1, 2, 3 };</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt; 4)</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;    {</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;        ss &lt;&lt; <span class="stringliteral">&quot;Input tensor has unexpected number of dimensions:&quot;</span> &lt;&lt; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;           &lt;&lt; <span class="stringliteral">&quot; shape:&quot;</span> &lt;&lt; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;           &lt;&lt; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(ss.str());</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;    }</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;    <span class="keywordflow">if</span> (squeezeDims.empty())</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;    {</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;        squeezeDims.assign(dimensionSequence,</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;                           dimensionSequence+inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;    }</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;    std::vector&lt;uint32_t&gt; outputDims;</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); i++)</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;    {</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;        <span class="keywordtype">bool</span> skipSqueeze = (std::find(squeezeDims.begin(), squeezeDims.end(), i) == squeezeDims.end());</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;        <span class="keyword">auto</span> currentDimension = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i];</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;        <span class="keywordflow">if</span> (skipSqueeze || currentDimension != 1)</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;        {</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;            outputDims.push_back(currentDimension);</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;        }</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;    }</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;    <span class="keywordflow">if</span> (outputDims.size() &gt; 4)</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;    {</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;        ss &lt;&lt; <span class="stringliteral">&quot;Output tensor has unexpected number of dimensions:&quot;</span> &lt;&lt; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>()</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;           &lt;&lt; <span class="stringliteral">&quot; shape:&quot;</span> &lt;&lt; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>() &lt;&lt; <span class="stringliteral">&quot; &quot;</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;           &lt;&lt; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(ss.str());</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;    }</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(static_cast&lt;unsigned int&gt;(outputDims.size()),</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;                                       outputDims.data());</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;    <span class="comment">// we need to preserve the tensor type and the quantization data as well</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outTensorInfo = inputTensorInfo;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;    outTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(outShape);</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;    <span class="keywordflow">return</span> outTensorInfo;</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;}</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseSqueeze(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;{</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsSqueezeOptions();</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo =</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;        <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aa0a90d432c9c41f9846f41f11c9e54c9">TfLiteParser::OutputShapeOfSqueeze</a>(AsUnsignedVector(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;squeeze_dims),</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;                                           inputTensorInfo);</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;    <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> reshapeDesc;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;    reshapeDesc.<a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">m_TargetShape</a> = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Squeeze:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddReshapeLayer(reshapeDesc, layerName.c_str());</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;}</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseStridedSlice(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;{</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 4);</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsStridedSliceOptions();</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;    <a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> desc;</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a61081be1483984e33db452c75d569f51">m_BeginMask</a> = <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;begin_mask;</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#af996d82c47e43a16f4c8faa6c6b3e030">m_EllipsisMask</a> = <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;ellipsis_mask;</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#ac37e49c0d6e6e54f9d2015d0f11f8ee7">m_EndMask</a> = <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;end_mask;</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a7c91eda2b331d607bae92cd8ebf50bb9">m_NewAxisMask</a> = <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;new_axis_mask;</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a6d0384878432cfc9652b7ae8bc59506f">m_ShrinkAxisMask</a> = <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;shrink_axis_mask;</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> beginTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> beginBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;    std::vector&lt;int&gt; begin(beginTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;    ::memcpy(begin.data(), beginBufferPtr-&gt;data.data(), beginTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> endTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> endBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[2]-&gt;buffer);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;    std::vector&lt;int&gt; end(endTensorInfo.GetNumElements());</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;    ::memcpy(end.data(), endBufferPtr-&gt;data.data(), endTensorInfo.GetNumBytes());</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> strideTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[3]);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> strideBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[3]-&gt;buffer);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;    std::vector&lt;int&gt; stride(strideTensorInfo.GetNumElements());</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;    ::memcpy(stride.data(), strideBufferPtr-&gt;data.data(), strideTensorInfo.GetNumBytes());</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a118fe06b7c2599da60398ee311ede923">m_Begin</a> = begin;</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#aa68194dd6258ab5b04123005a066ea25">m_End</a> = end;</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a0d53caff836b84204adbd1c28752a201">m_Stride</a> = stride;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;StridedSlice:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddStridedSliceLayer(desc, layerName.c_str());</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;}</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseSub(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;{</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsSubOptions();</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Sub:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddSubtractionLayer(layerName.c_str());</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.GetNumDimensions() != input1TensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;    {</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;        AddBroadcastReshapeLayer(subgraphIndex, operatorIndex, layer);</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;    }</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;    {</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;        RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;    }</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;    layer = AddFusedActivationLayer(layer, 0, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;fused_activation_function);</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;}</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseAdd(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;{</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsAddOptions();</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Add:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddAdditionLayer(layerName.c_str());</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.GetNumDimensions() != input1TensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;    {</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;        AddBroadcastReshapeLayer(subgraphIndex, operatorIndex, layer);</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;    }</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;    {</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;        RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;    }</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;    layer = AddFusedActivationLayer(layer, 0, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;fused_activation_function);</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;}</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseMul(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;{</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsMulOptions();</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Mul:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddMultiplicationLayer(layerName.c_str());</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.GetNumDimensions() != input1TensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;    {</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;        AddBroadcastReshapeLayer(subgraphIndex, operatorIndex, layer);</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;    }</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;    {</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;        RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;    }</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;    layer = AddFusedActivationLayer(layer, 0, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;fused_activation_function);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;}</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseMean(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;{</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> dimTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> bufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;    <a class="code" href="structarmnn_1_1_mean_descriptor.xhtml">armnn::MeanDescriptor</a> desc;</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;    std::vector&lt;unsigned int&gt; axis(dimTensorInfo.GetNumElements());</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;    ::memcpy(axis.data(), bufferPtr-&gt;data.data(), dimTensorInfo.GetNumBytes());</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;    desc.<a class="code" href="structarmnn_1_1_mean_descriptor.xhtml#a1f0d67b087c491248bd1cde3ff995a95">m_Axis</a> = axis;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;    desc.<a class="code" href="structarmnn_1_1_mean_descriptor.xhtml#a28e0548abfc4e79c48f29a3d11a062e9">m_KeepDims</a> =</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;        inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() ?</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;            <a class="code" href="_cl_layer_tests_8cpp.xhtml#a37f1c3ccc9fc906be85185350dd83d48">true</a> : <span class="keyword">false</span>;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Mean:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddMeanLayer(desc, layerName.c_str());</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;}</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParsePad(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;{</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParser::TensorRawPtrVector</a> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParser::TensorRawPtrVector</a> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> padTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> bufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;    std::vector&lt;unsigned int&gt; padBuffer(padTensorInfo.GetNumElements());</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;    ::memcpy(padBuffer.data(), bufferPtr-&gt;data.data(), padTensorInfo.GetNumBytes());</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;    <span class="keywordtype">size_t</span> step = 2;</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;    <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">armnn::PadDescriptor</a> desc;</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; padTensorInfo.GetNumElements() / step; ++i)</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;    {</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;        desc.<a class="code" href="structarmnn_1_1_pad_descriptor.xhtml#a85f98c94e11f65a6b73f831735c040f3">m_PadList</a>.emplace_back(padBuffer[i * step], padBuffer[i * step + 1]);</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;    }</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Pad:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddPadLayer(desc, layerName.c_str());</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;}</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseQuantize(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;{</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Quantize:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddQuantizeLayer(layerName.c_str());</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;}</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseRelu(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;{</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;    ParseActivation(subgraphIndex,operatorIndex, ActivationFunction::ReLu);</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;}</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseRelu6(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;{</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;    ParseActivation(subgraphIndex,operatorIndex, ActivationFunction::BoundedReLu);</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;}</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseLogistic(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;{</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;    ParseActivation(subgraphIndex,operatorIndex,ActivationFunction::Sigmoid);</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;}</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseTanH(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;{</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;    ParseActivation(subgraphIndex,operatorIndex,ActivationFunction::TanH);</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;}</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseActivation(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex, <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a> activationType)</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;{</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(operatorPtr);</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;    <span class="keyword">auto</span> layerName = str(boost::format(<span class="stringliteral">&quot;Activation:&quot;</span>));</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;    <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;    activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = activationType;</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;    <span class="keywordflow">switch</span> (activationType)</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;    {</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;        <span class="keywordflow">case</span> ActivationFunction::ReLu:</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;        {</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;            layerName += str(boost::format(<span class="stringliteral">&quot;RELU:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;        }</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;        <span class="keywordflow">case</span> ActivationFunction::BoundedReLu:</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;        {</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;            layerName += str(boost::format(<span class="stringliteral">&quot;RELU6:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a> = 6.0f;</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a> = 0.0f;</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;        }</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;        <span class="keywordflow">case</span> ActivationFunction::Sigmoid:</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;        {</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;            layerName += str(boost::format(<span class="stringliteral">&quot;SIGMOID:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;        }</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;        <span class="keywordflow">case</span> ActivationFunction::TanH:</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;        {</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;            layerName += str(boost::format(<span class="stringliteral">&quot;TANH:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a> = 1.0f;</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a> = 1.0f;</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;        }</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;        {</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;                boost::str(boost::format(<span class="stringliteral">&quot;Unexpected ActivationFunction[%1%] when creating layerName &quot;</span></div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;                                         <span class="stringliteral">&quot; %2% &quot;</span>) %static_cast&lt;int&gt;(activationType)% <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;        }</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;    }</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = m_Network-&gt;AddActivationLayer(activationDesc, layerName.c_str());</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;    <span class="comment">// register the input connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;    <span class="comment">// register the output connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;}</div><div class="line"><a name="l01898"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaebfa9a01a0bb8a0935114ff0140cc45"> 1898</a></span>&#160;<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaebfa9a01a0bb8a0935114ff0140cc45">TfLiteParser::OutputShapeOfReshape</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp; inputTensorInfo,</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;                                                     <span class="keyword">const</span> std::vector&lt;int32_t&gt; &amp; targetDimsIn)</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;{</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;    std::vector&lt;unsigned int&gt; outputDims(targetDimsIn.begin(), targetDimsIn.end());</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> stretchDim = std::find(targetDimsIn.begin(), targetDimsIn.end(), -1);</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;    <span class="keywordflow">if</span> (stretchDim != targetDimsIn.end())</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160;    {</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;        <span class="keywordflow">if</span> (std::find(std::next(stretchDim), targetDimsIn.end(), -1) != targetDimsIn.end())</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;        {</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;                boost::str(</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;                    boost::format(<span class="stringliteral">&quot;At most one component of shape can be -1 %1%&quot;</span>) % <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;        }</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;        <span class="keyword">auto</span> targetNumElements =</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;            <a class="code" href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">boost::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;                std::accumulate(targetDimsIn.begin(), targetDimsIn.end(), -1, std::multiplies&lt;int32_t&gt;()));</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;        <span class="keyword">auto</span> stretchIndex = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(std::distance(targetDimsIn.begin(), stretchDim));</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;        outputDims[stretchIndex] = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() / targetNumElements;</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;    }</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outputShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(static_cast&lt;unsigned int&gt;(outputDims.size()), outputDims.data());</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> reshapeInfo = inputTensorInfo;</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;    reshapeInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(outputShape);</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;    <span class="keywordflow">return</span> reshapeInfo;</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;}</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseReshape(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;{</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsReshapeOptions();</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> actualOutputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;    std::vector&lt;int32_t&gt; targetShape;</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;    <span class="keywordflow">if</span> (inputs.size() &gt; 1 &amp;&amp; inputs[1] != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;    {</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;        {</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;            <a class="code" href="_tf_lite_parser_8cpp.xhtml#a5fc762bb40634f39ff6ff4e23005a3a9">ARMNN_THROW_PARSE_EXCEPTION</a>(<span class="stringliteral">&quot;Target shape defined in reshape parameters and input tensor. &quot;</span></div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;                                        <span class="stringliteral">&quot;Only one method expected&quot;</span>);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;        }</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;        <span class="keywordflow">if</span> (inputs[1]-&gt;is_variable)</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;        {</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;            <a class="code" href="_tf_lite_parser_8cpp.xhtml#a5fc762bb40634f39ff6ff4e23005a3a9">ARMNN_THROW_PARSE_EXCEPTION</a>( <span class="stringliteral">&quot;Target shapes defined in non-const input tensors is not supported&quot;</span>);</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;        }</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;        <span class="keywordflow">if</span> (inputs[1]-&gt;shape.size() != 1)</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;        {</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;            <a class="code" href="_tf_lite_parser_8cpp.xhtml#a5fc762bb40634f39ff6ff4e23005a3a9">ARMNN_THROW_PARSE_EXCEPTION</a>(<span class="stringliteral">&quot;Target &#39;shape&#39; input is not a 1D tensor&quot;</span>);</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;        }</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;        <span class="keywordflow">if</span> (inputs[1]-&gt;type != tflite::TensorType_INT32)</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;        {</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;            <a class="code" href="_tf_lite_parser_8cpp.xhtml#a5fc762bb40634f39ff6ff4e23005a3a9">ARMNN_THROW_PARSE_EXCEPTION</a>(<span class="stringliteral">&quot;Target &#39;shape&#39; input is not an int32 type&quot;</span>);</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;        }</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;        <span class="keyword">auto</span> bufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;        <span class="keyword">auto</span> vals = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>int32_t*<span class="keyword">&gt;</span>(bufferPtr-&gt;data.data());</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i &lt; inputs[1]-&gt;shape[0]; i++)</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;        {</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;            targetShape.push_back(vals[i]);</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;        }</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;    }</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;    {</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;        {</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;            <a class="code" href="_tf_lite_parser_8cpp.xhtml#a5fc762bb40634f39ff6ff4e23005a3a9">ARMNN_THROW_PARSE_EXCEPTION</a>(<span class="stringliteral">&quot;Target shape not defined in reshape parameters or input tensor. &quot;</span></div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;                                        <span class="stringliteral">&quot;At least one method required&quot;</span>);</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;        }</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;        targetShape = <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;new_shape;</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;    }</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> reshapeOutputTensorInfo =</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;        <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaebfa9a01a0bb8a0935114ff0140cc45">TfLiteParser::OutputShapeOfReshape</a>(inputTensorInfo, targetShape);</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;    <span class="comment">// Check for valid input size and that reshape parameters equal output shape</span></div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&amp; reshapeOutputTensorShape = reshapeOutputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;    <span class="keywordflow">if</span> (inputs.size() &gt; 1 &amp;&amp; !<a class="code" href="namespacearmnn_deserializer.xhtml#a97b50f22cd99f0e09e6e48d20a35f6b2">CheckShape</a>(reshapeOutputTensorShape, outputs[0]-&gt;shape))</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;    {</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;        ss &lt;&lt; <span class="stringliteral">&quot;New shape defined in reshape parameters &quot;</span></div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;           &lt;&lt; reshapeOutputTensorShape</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;           &lt;&lt; <span class="stringliteral">&quot; does not equal output shape &quot;</span></div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;           &lt;&lt; actualOutputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;           &lt;&lt; <span class="stringliteral">&quot;: &quot;</span></div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;           &lt;&lt; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(ss.str());</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;    }</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;    <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> reshapeDesc;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;    reshapeDesc.<a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">m_TargetShape</a> = reshapeOutputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Reshape:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddReshapeLayer(reshapeDesc, layerName.c_str());</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(reshapeOutputTensorInfo);</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;}</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseResizeBilinear(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;{</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;    ParseResize(subgraphIndex, operatorIndex, ResizeMethod::Bilinear);</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;}</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseResizeNearestNeighbor(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;{</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;    ParseResize(subgraphIndex, operatorIndex, ResizeMethod::NearestNeighbor);</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;}</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseResize(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex, <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">ResizeMethod</a> resizeMethod)</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;{</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> sizeTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;    <span class="comment">// Data for the parsed tensor args (size) must be stored locally.</span></div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;    std::vector&lt;int32_t&gt; sizeTensorData(sizeTensorInfo.GetNumElements());</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> sizeBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;    ::memcpy(sizeTensorData.data(), sizeBufferPtr-&gt;data.data(), sizeTensorInfo.GetNumBytes());</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;    <a class="code" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> desc;</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;    desc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#a869254cb56968986a78a79e1d6d4a86b">m_Method</a>       = resizeMethod;</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;    desc.m_TargetHeight = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (sizeTensorData[0]);</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;    desc.m_TargetWidth  = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (sizeTensorData[1]);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;    desc.m_DataLayout   = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;    <span class="keyword">auto</span> layerName = str(boost::format(<span class="stringliteral">&quot;Resize:&quot;</span>));</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;    <span class="keywordflow">switch</span> (resizeMethod)</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;    {</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;        <span class="keywordflow">case</span> ResizeMethod::Bilinear:</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;        {</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;            layerName += str(boost::format(<span class="stringliteral">&quot;BILINEAR:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;            <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;            <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>     = operatorPtr-&gt;builtin_options.AsResizeBilinearOptions();</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;            desc.m_BilinearAlignCorners = <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;align_corners;</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;        }</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;        <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor:</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;        {</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;            layerName += str(boost::format(<span class="stringliteral">&quot;NEARESTNEIGHBOR:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;        }</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;        {</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;                boost::str(boost::format(<span class="stringliteral">&quot;Unexpected ResizeMethod[%1%] when creating layerName &quot;</span></div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;                                         <span class="stringliteral">&quot; %2% &quot;</span>) %static_cast&lt;int&gt;(resizeMethod)% <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;        }</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;    }</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddResizeLayer(desc, layerName.c_str());</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;}</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseConcatenation(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;{</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsConcatenationOptions();</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numConcatView = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputs.size());</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;    uint32_t inputRank = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]).<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> concatDimInput = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;        (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputRank) + <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;axis) % <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputRank));</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;    <a class="code" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> concatDescriptor(static_cast&lt;uint32_t&gt;(numConcatView), inputRank);</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;    concatDescriptor.<a class="code" href="structarmnn_1_1_origins_descriptor.xhtml#a5b192c5fcd96a0f75542524cf646b355">SetConcatAxis</a>(concatDimInput);</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mergeDimOrigin = 0;</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIndex = 0; viewIndex &lt; numConcatView; ++viewIndex)</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;    {</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[viewIndex]);</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;        <span class="comment">// This set up concatDescriptor view origin</span></div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#a523deabeb7d0a884028b35eebfd1cb6c">armnnUtils::ProcessConcatInputTensorInfo</a>(</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;            inputTensorInfo, concatDescriptor, concatDimInput, viewIndex, mergeDimOrigin);</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;    }</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Concatenation:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddConcatLayer(concatDescriptor, layerName.c_str());</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes});</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;    <span class="comment">// add fused activation layer</span></div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;    layer = AddFusedActivationLayer(layer, 0, <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;fused_activation_function);</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;}</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseFullyConnected(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;{</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorRfr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorRfr-&gt;builtin_options.AsFullyConnectedOptions();</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;    <a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> desc;</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;    desc.<a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;    desc.<a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml#a281fcaec86e17c97f7b8402633f6b55a">m_TransposeWeightMatrix</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> filterTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;    <span class="comment">// Fully Connected Layer accepts two dimensional weights input</span></div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;    int32_t weightsDimension = <span class="keyword">static_cast&lt;</span>int32_t<span class="keyword">&gt;</span>(filterTensorInfo.GetNumDimensions());</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;    <span class="keywordflow">if</span> (weightsDimension != 2)</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;    {</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;            boost::str(</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;                boost::format(</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;                    <span class="stringliteral">&quot;Dimension %1% for Fully Connected weights is not supported by Armnn. &quot;</span></div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;                    <span class="stringliteral">&quot;Node %2%&quot;</span>)</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;                % weightsDimension</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;                % <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;    }</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;    <span class="keyword">auto</span> filterTensorAndData = CreateConstTensor(inputs[1],</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;                                                 filterTensorInfo,</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;                                                 <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a>());</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* layer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;FullyConnected:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;    <span class="keywordflow">if</span> (inputs.size() == 3)</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;    {</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;        desc.<a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> biasTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;        <span class="keyword">auto</span> biasTensorAndData = CreateConstTensor(inputs[2],</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;                                                   biasTensorInfo,</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;                                                   <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a>());</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;        layer = m_Network-&gt;AddFullyConnectedLayer(desc,</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;                                                  filterTensorAndData.first,</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;                                                  <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(biasTensorAndData.first),</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;                                                  layerName.c_str());</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;    }</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;    {</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;        layer = m_Network-&gt;AddFullyConnectedLayer(desc,</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;                                                  filterTensorAndData.first,</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;                                                  <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;                                                  layerName.c_str());</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;    }</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt; 2)</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;    {</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;        <span class="comment">// Add reshape to flatten to 2D [batch_size, input_size],</span></div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;        <span class="comment">// where &quot;input_size&quot; corresponds to the number of inputs to the layer,</span></div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;        <span class="comment">// matching the second dimension of weights,</span></div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;        <span class="comment">// and &quot;batch_size&quot; is calculated by dividing the number of elements by &quot;input_size&quot;.</span></div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;        std::vector&lt;unsigned int&gt; reshapedDimensions(2);</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160;        reshapedDimensions[1] = filterTensorInfo.GetShape()[1];</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;        reshapedDimensions[0] = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() / reshapedDimensions[1];</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;        <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() % reshapedDimensions[1] != 0)</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;        {</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;                    boost::str(</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;                            boost::format(</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;                                    <span class="stringliteral">&quot;Failed to deduce input tensor shape from filter size %1%&quot;</span>)</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;                            % reshapedDimensions[1]</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;                            % <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;        }</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> reshapedTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;        reshapedTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>{ 2, reshapedDimensions.data() });</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;        std::string reshapeLayerName = boost::str(boost::format(<span class="stringliteral">&quot;Reshape_for:%1%&quot;</span>) % layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">GetName</a>());</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;        <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a> desc;</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;        desc.m_TargetShape = reshapedTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* reshapeLayer = m_Network-&gt;AddReshapeLayer(desc, layerName.c_str());</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160;</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160;        reshapeLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(reshapedTensorInfo);</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160;        reshapeLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;        RegisterInputSlots(subgraphIndex, operatorIndex, reshapeLayer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160;    }</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;    {</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;        <span class="comment">// register the input connection slot for the layer</span></div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;        <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;        RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;    }</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;    <span class="comment">// we need to add the activation layer and fortunately we don&#39;t need to care about the data layout</span></div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* fusedActivationLayer = AddFusedActivationLayer(layer, 0,</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;                                                                             <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;fused_activation_function);</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160;</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160;    <span class="comment">// register the output connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, fusedActivationLayer, {outputTensorIndexes[0]});</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160;}</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160;</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseDetectionPostProcess(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160;{</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160;</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160;</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 4);</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160;    <span class="comment">// Obtain custom options from flexbuffers</span></div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;    <span class="keyword">auto</span> custom_options = operatorPtr-&gt;custom_options;</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;    <span class="keyword">const</span> flexbuffers::Map&amp; m = flexbuffers::GetRoot(custom_options.data(), custom_options.size()).AsMap();</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;    <span class="comment">// Obtain descriptor information from tf lite</span></div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;    <a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml">DetectionPostProcessDescriptor</a> desc;</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;    desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#ae72089bcab60ac175557f4241b16a014">m_MaxDetections</a>           = m[<span class="stringliteral">&quot;max_detections&quot;</span>].AsUInt32();</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;    desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a9ae2c9796692ebeafe19a4d3f09c8ea8">m_MaxClassesPerDetection</a>  = m[<span class="stringliteral">&quot;max_classes_per_detection&quot;</span>].AsUInt32();</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;    desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a4392dd6b4862cc9cf95ae8f1001ba592">m_NmsScoreThreshold</a>       = m[<span class="stringliteral">&quot;nms_score_threshold&quot;</span>].AsFloat();</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;    desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a53c8a7f33a40e1e240256bcfcf41b101">m_NmsIouThreshold</a>         = m[<span class="stringliteral">&quot;nms_iou_threshold&quot;</span>].AsFloat();</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;    desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a3a04b0ccee4bb2f21721ee5045e83df4">m_NumClasses</a>              = m[<span class="stringliteral">&quot;num_classes&quot;</span>].AsUInt32();</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160;    desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#aa61510cbd529870182e918ac6e8b9d72">m_ScaleH</a>                  = m[<span class="stringliteral">&quot;h_scale&quot;</span>].AsFloat();</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160;    desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#ab509802c659de19929f18bad14a35c58">m_ScaleW</a>                  = m[<span class="stringliteral">&quot;w_scale&quot;</span>].AsFloat();</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;    desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#ae64523937ea910030ad66fee6fddd51f">m_ScaleX</a>                  = m[<span class="stringliteral">&quot;x_scale&quot;</span>].AsFloat();</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160;    desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a7a2156ec7d9c012ce00bbcc6afcb9028">m_ScaleY</a>                  = m[<span class="stringliteral">&quot;y_scale&quot;</span>].AsFloat();</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160;    <span class="keywordflow">if</span> (!(m[<span class="stringliteral">&quot;use_regular_nms&quot;</span>].IsNull()))</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160;    {</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;        desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a7ed9bc7c26df67d274d5dd4cd83adf0f">m_UseRegularNms</a>       = m[<span class="stringliteral">&quot;use_regular_nms&quot;</span>].AsBool();</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;    }</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;    <span class="keywordflow">if</span> (!(m[<span class="stringliteral">&quot;detections_per_class&quot;</span>].IsNull()))</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;    {</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;        desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a7e2f87544b8bc7e497e1dec8d3ca4055">m_DetectionsPerClass</a>  = m[<span class="stringliteral">&quot;detections_per_class&quot;</span>].AsUInt32();</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;    }</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;    <span class="keywordflow">if</span> (desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a53c8a7f33a40e1e240256bcfcf41b101">m_NmsIouThreshold</a> &lt;= 0.0f || desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a53c8a7f33a40e1e240256bcfcf41b101">m_NmsIouThreshold</a> &gt; 1.0f)</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;    {</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(<span class="stringliteral">&quot;DetectionPostProcessTFLiteParser: Intersection over union threshold &quot;</span></div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;                                       <span class="stringliteral">&quot;must be positive and less than or equal to 1.&quot;</span>);</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;    }</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> anchorTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;    <span class="keyword">auto</span> anchorTensorAndData = CreateConstTensor(inputs[2], anchorTensorInfo,</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160;                                                 <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a>());</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160;</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;DetectionPostProcess:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddDetectionPostProcessLayer(desc, anchorTensorAndData.first,</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;                                                                       layerName.c_str());</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160;</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160;    <span class="comment">// The model does not specify the output shapes.</span></div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;    <span class="comment">// The output shapes are calculated from the max_detection and max_classes_per_detection.</span></div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDetectedBox = desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#ae72089bcab60ac175557f4241b16a014">m_MaxDetections</a> * desc.<a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a9ae2c9796692ebeafe19a4d3f09c8ea8">m_MaxClassesPerDetection</a>;</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;    m_OverridenOutputShapes.push_back({ 1, numDetectedBox, 4 });</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160;    m_OverridenOutputShapes.push_back({ 1, numDetectedBox });</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;    m_OverridenOutputShapes.push_back({ 1, numDetectedBox });</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160;    m_OverridenOutputShapes.push_back({ 1 });</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0 ; i &lt; outputs.size() ; ++i)</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;    {</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> detectionBoxOutputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[i], m_OverridenOutputShapes[i]);</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(i).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(detectionBoxOutputTensorInfo);</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;    }</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160;</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160;    <span class="comment">// Register the input connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160;</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;    <span class="comment">// Register the output connection slots for the layer, connections are made after all layers have been created</span></div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0],</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160;                                                              outputTensorIndexes[1],</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;                                                              outputTensorIndexes[2],</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;                                                              outputTensorIndexes[3]});</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160;}</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;<span class="comment">/// The TfLite Pack operator is equivalent to the ArmNN Stack operator</span></div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;<span class="comment"></span><span class="keywordtype">void</span> TfLiteParser::ParsePack(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;{</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160;</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160;</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160;    <span class="keywordflow">if</span> (inputs.size() &lt; 1)</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160;    {</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(<span class="stringliteral">&quot;Pack must have at least one input.&quot;</span>);</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160;    }</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160;</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span>&amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span>* <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsPackOptions();</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160;</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160;    <a class="code" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> desc;</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160;    desc.<a class="code" href="structarmnn_1_1_stack_descriptor.xhtml#ab218de7805899c8412d75d1fd1d846d2">m_Axis</a> = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;axis);</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160;    desc.<a class="code" href="structarmnn_1_1_stack_descriptor.xhtml#aed6086070440ceb94129bef06f70173f">m_NumInputs</a> = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(inputs.size());</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160;</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160;    <span class="comment">// Use the tensor shape of the first input as the &quot;correct&quot; input shape in the descriptor</span></div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160;    desc.<a class="code" href="structarmnn_1_1_stack_descriptor.xhtml#a2bea87b470268bb0b73457c3733dbc04">m_InputShape</a> = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160;</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Pack:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddStackLayer(desc, layerName.c_str());</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160;</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160;    layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes});</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;}</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseUnpack(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;{</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsUnpackOptions();</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;</div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;    <span class="comment">// This unpackAxis indicates the axis to unpack</span></div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> unpackAxis = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;axis);</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;    <span class="keywordflow">if</span> (unpackAxis &gt;= inputTensorInfo.GetNumDimensions())</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;    {</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160;                boost::str(</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;                        boost::format(</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;                                <span class="stringliteral">&quot;The unpack axis: %1% cannot be greater than or equal to &quot;</span></div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;                                <span class="stringliteral">&quot;the number of input dimension %2% %3%&quot;</span>)</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;                        % unpackAxis</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;                        % inputTensorInfo.GetNumDimensions()</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;                        % <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;    }</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> unpackNum = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;num);</div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;    <span class="comment">// If num is not defined, automatically infer from the length of the dimension axis.</span></div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;    <span class="keywordflow">if</span>(unpackNum == 0)</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160;    {</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160;        unpackNum = inputTensorInfo.GetShape()[unpackAxis];</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;    }</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160;</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160;    <span class="comment">// If unpack number cannot be inferred and is still zero, throw ParseException.</span></div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160;    <span class="keywordflow">if</span>(unpackNum == 0)</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160;    {</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(<span class="stringliteral">&quot;Number to unpack must greater than zero.&quot;</span>);</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;    }</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), unpackNum);</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;    <span class="keyword">auto</span> inputDimSize = inputTensorInfo.GetNumDimensions();</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;    std::vector&lt;unsigned int&gt; unpackDimSizes(inputDimSize);</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160;</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160;    <span class="comment">// Add current input shape to unpackDimSizes</span></div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputDimSize; ++i)</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160;    {</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;        unpackDimSizes[i] = inputTensorInfo.GetShape()[i];</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160;    }</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160;</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;    <span class="keywordflow">if</span> (unpackDimSizes[unpackAxis] != unpackNum)</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;    {</div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(<span class="stringliteral">&quot;Number to unpack must be the same as length of the dimension to &quot;</span></div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;                             <span class="stringliteral">&quot;unpack along.&quot;</span>);</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160;    }</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160;</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160;    unpackDimSizes[unpackAxis] /= unpackNum;</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160;</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160;    <a class="code" href="structarmnn_1_1_views_descriptor.xhtml">SplitterDescriptor</a> splitDesc(unpackNum, static_cast&lt;unsigned int&gt;(unpackDimSizes.size()));</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; unpackNum; ++j)</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160;    {</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160;        <span class="comment">// Set the size of the views.</span></div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx &lt; unpackDimSizes.size(); ++dimIdx)</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160;        {</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;            splitDesc.<a class="code" href="structarmnn_1_1_views_descriptor.xhtml#aae0893695f5803a3517985c7cb1ccb2e">SetViewSize</a>(j, dimIdx, unpackDimSizes[dimIdx]);</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160;        }</div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160;        splitDesc.<a class="code" href="structarmnn_1_1_views_descriptor.xhtml#a2b125117aa61f9baf3a9cb8658aa61a2">SetViewOriginCoord</a>(j, unpackAxis, unpackDimSizes[unpackAxis] * j);</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160;    }</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160;</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Unpack:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddSplitterLayer(splitDesc, layerName.c_str());</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160;</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> splitOutShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(static_cast&lt;unsigned int&gt;(unpackDimSizes.size()),</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;                                            unpackDimSizes.data());</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160;</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160;</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160;    <span class="comment">// Create reshape to remove the unpacked dimension for unpack operator of each output from Splitter.</span></div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 0; k &lt; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">GetNumOutputSlots</a>(); ++k)</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160;    {</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[k]);</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160;        std::string reshapeLayerName = boost::str(boost::format(<span class="stringliteral">&quot;Reshape_for:%1%&quot;</span>) % layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">GetName</a>());</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160;        <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a> desc;</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;        desc.<a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">m_TargetShape</a> = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* reshapeLayer = m_Network-&gt;AddReshapeLayer(desc, layerName.c_str());</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160;</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(k).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(splitOutShape,</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;                                                                outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>(),</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;                                                                outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(),</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;                                                                outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()));</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(k).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(reshapeLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160;</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;        reshapeLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160;        uint32_t reshapedOutputId = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(operatorPtr-&gt;outputs[k]);</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;        <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a>* slot = &amp;(reshapeLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0));</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160;        RegisterProducerOfTensor(subgraphIndex, reshapedOutputId, slot);</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;    }</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;}</div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;<span class="keywordtype">void</span> TfLiteParser::ParseSplit(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;{</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a> = operatorPtr-&gt;builtin_options.AsSplitOptions();</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSplits = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(<a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>-&gt;num_splits);</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;    <span class="comment">// If number of splits cannot be inferred and is zero, throw ParseException.</span></div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;    <span class="keywordflow">if</span>(numSplits == 0)</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160;    {</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(<span class="stringliteral">&quot;Number to splits must greater than zero.&quot;</span>);</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;    }</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), numSplits);</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> axisTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> axisBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, inputs[0]-&gt;buffer);</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;    std::vector&lt;unsigned int&gt; axisData(axisTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160;    ::memcpy(axisData.data(), axisBufferPtr-&gt;data.data(), axisTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160;    BOOST_ASSERT(axisTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() == 1);</div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> splitDim = axisData[0];</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;    <span class="keyword">auto</span> inputDimSize = inputTensorInfo.GetNumDimensions();</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;    <span class="keywordflow">if</span> (inputDimSize &gt; <a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>)</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;    {</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;            boost::str(</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160;                boost::format(</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;                    <span class="stringliteral">&quot;The number of dimensions: %1% for input tensors of the &quot;</span></div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;                    <span class="stringliteral">&quot;split op cannot be greater than %2% %3%&quot;</span>)</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;                    % inputTensorInfo.GetNumDimensions()</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;                    % <a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a></div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;                    % <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;    }</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;    std::vector&lt;unsigned int&gt; splitterDimSizes(inputDimSize);</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160;</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;    <span class="comment">// Add current input shape to splitterDimSizes</span></div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputDimSize; ++i)</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;    {</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;        splitterDimSizes[i] = inputTensorInfo.GetShape()[i];</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;    }</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160;</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;    <span class="keywordflow">if</span> (splitterDimSizes[splitDim] % numSplits != 0)</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;    {</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(<span class="stringliteral">&quot;Number of splits must evenly divide the dimension&quot;</span>);</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;    }</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;    splitterDimSizes[splitDim] /= numSplits;</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160;</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;    <a class="code" href="structarmnn_1_1_views_descriptor.xhtml">SplitterDescriptor</a> splitDesc(numSplits, inputDimSize);</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; numSplits; ++j)</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160;    {</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;        <span class="comment">// Set the size of the views.</span></div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx &lt; splitterDimSizes.size(); ++dimIdx)</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;        {</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160;            splitDesc.<a class="code" href="structarmnn_1_1_views_descriptor.xhtml#aae0893695f5803a3517985c7cb1ccb2e">SetViewSize</a>(j, dimIdx, splitterDimSizes[dimIdx]);</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160;        }</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160;        splitDesc.<a class="code" href="structarmnn_1_1_views_descriptor.xhtml#a2b125117aa61f9baf3a9cb8658aa61a2">SetViewOriginCoord</a>(j, splitDim, splitterDimSizes[splitDim] * j);</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160;    }</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160;    <span class="keyword">auto</span> layerName = boost::str(boost::format(<span class="stringliteral">&quot;Split:%1%:%2%&quot;</span>) % subgraphIndex % operatorIndex);</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddSplitterLayer(splitDesc, layerName.c_str());</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[1]});</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 0; k &lt; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">GetNumOutputSlots</a>(); ++k)</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;    {</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(outputs[k]);</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(k).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(tensorInfo);</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;    }</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;</div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;}</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* TfLiteParser::AddFusedActivationLayer(<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* prevLayer,</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;                                                                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSlot,</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;                                                                tflite::ActivationFunctionType activationType)</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;{</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;    <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;    std::string layerName = prevLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">GetName</a>();</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;    <span class="keywordflow">switch</span>(activationType)</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;    {</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_NONE:</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;        {</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;            <span class="comment">// this is a no-op: return previous layer</span></div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;            <span class="keywordflow">return</span> prevLayer;</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160;        }</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU:</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;        {</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = ActivationFunction::ReLu;</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;            layerName += <span class="stringliteral">&quot;:RELU&quot;</span>;</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;        }</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU6:</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160;        {</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = ActivationFunction::BoundedReLu;</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a> = 6.0f;</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a> = 0.0f;</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160;            layerName += <span class="stringliteral">&quot;:RELU6&quot;</span>;</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;        }</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_TANH:</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160;        {</div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = ActivationFunction::TanH;</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a> = 1.0f;</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a> = 1.0f;</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;            layerName += <span class="stringliteral">&quot;:TANH&quot;</span>;</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160;        }</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160;</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;        <span class="comment">// I only put these here as a reminder what others we could support</span></div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU_N1_TO_1:</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_SIGN_BIT:</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160;        {</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;                boost::str(</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160;                    boost::format(<span class="stringliteral">&quot;TfLite parser doesn&#39;t suppport fused activation: &quot;</span></div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160;                                  <span class="stringliteral">&quot;%1%/%2% %3% &quot;</span>) %</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160;                                  activationType %</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;                                  tflite::EnumNameActivationFunctionType(activationType) %</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160;                                  <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160;        }</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;    }</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160;</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* activationLayer =</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;        m_Network-&gt;AddActivationLayer(activationDesc, layerName.c_str());</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160;</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160;    <span class="keyword">auto</span> &amp; prevOutputSlot = prevLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(outputSlot);</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;    prevOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(activationLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160;    activationLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(prevOutputSlot.GetTensorInfo());</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;    <span class="keywordflow">return</span> activationLayer;</div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;}</div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160;</div><div class="line"><a name="l02624"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac5411554ab8c02ca286af52c98f6bd87"> 2624</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">TfLiteParser::ModelPtr</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac5411554ab8c02ca286af52c98f6bd87">TfLiteParser::LoadModelFromFile</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * fileName)</div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160;{</div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160;    <span class="keywordflow">if</span> (fileName == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;    {</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(boost::str(boost::format(<span class="stringliteral">&quot;Invalid (null) file name %1%&quot;</span>) %</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;                                       <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;    }</div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160;    boost::system::error_code errorCode;</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;    boost::filesystem::path pathToFile(fileName);</div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;    <span class="keywordflow">if</span> (!boost::filesystem::exists(pathToFile, errorCode))</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;    {</div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;        std::string locationString = <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;        std::string msg = boost::str(boost::format(<span class="stringliteral">&quot;Cannot find the file (%1%) errorCode: %2% %3%&quot;</span>) %</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;                                     fileName %</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;                                     errorCode %</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;                                         locationString);</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_file_not_found_exception.xhtml">FileNotFoundException</a>(msg);</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;    }</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;    std::ifstream file(fileName, std::ios::binary);</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;    std::string fileContent((std::istreambuf_iterator&lt;char&gt;(file)), std::istreambuf_iterator&lt;char&gt;());</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a858104f225c302988fba35c1cb299066">LoadModelFromBinary</a>(reinterpret_cast&lt;const uint8_t *&gt;(fileContent.c_str()),</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160;                               fileContent.size());</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;}</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;</div><div class="line"><a name="l02648"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a858104f225c302988fba35c1cb299066"> 2648</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">TfLiteParser::ModelPtr</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a858104f225c302988fba35c1cb299066">TfLiteParser::LoadModelFromBinary</a>(<span class="keyword">const</span> uint8_t * binaryContent, <span class="keywordtype">size_t</span> len)</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;{</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;    <span class="keywordflow">if</span> (binaryContent == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160;     {</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(boost::str(boost::format(<span class="stringliteral">&quot;Invalid (null) binary content %1%&quot;</span>) %</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160;                                       <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160;     }</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160;    flatbuffers::Verifier verifier(binaryContent, len);</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160;    <span class="keywordflow">if</span> (verifier.VerifyBuffer&lt;tflite::Model&gt;() == <span class="keyword">false</span>)</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160;    {</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160;            boost::str(boost::format(<span class="stringliteral">&quot;Buffer doesn&#39;t conform to the expected Tensorflow Lite &quot;</span></div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160;                                     <span class="stringliteral">&quot;flatbuffers format. size:%1% %2%&quot;</span>) %</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;                       len %</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160;                       <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160;    }</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;    <span class="keywordflow">return</span> tflite::UnPackModel(binaryContent);</div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160;}</div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160;</div><div class="line"><a name="l02667"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876"> 2667</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParser::TensorRawPtrVector</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">TfLiteParser::GetInputs</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a> &amp; model,</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160;                                                         <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160;                                                         <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160;{</div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160;</div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = subgraphPtr-&gt;operators[operatorIndex];</div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160;</div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160;    <span class="keywordtype">size_t</span> inputCount = operatorPtr-&gt;inputs.size();</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TensorRawPtrVector</a> result(inputCount);</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i&lt;inputCount; ++i)</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;    {</div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160;        uint32_t inputId = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(operatorPtr-&gt;inputs[i]);</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160;        result[i] = subgraphPtr-&gt;tensors[inputId].get();</div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160;    }</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160;}</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160;</div><div class="line"><a name="l02686"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8"> 2686</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParser::TensorRawPtrVector</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">TfLiteParser::GetOutputs</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a> &amp; model,</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160;                                                          <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160;                                                          <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160;{</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160;</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = subgraphPtr-&gt;operators[operatorIndex];</div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160;</div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160;    <span class="keywordtype">size_t</span> outputCount = operatorPtr-&gt;outputs.size();</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TensorRawPtrVector</a> result(outputCount);</div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i&lt;outputCount; ++i)</div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160;    {</div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160;        uint32_t outputId = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(operatorPtr-&gt;outputs[i]);</div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160;        <a class="code" href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">CHECK_TENSOR</a>(model, subgraphIndex, outputId);</div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160;        result[i] = subgraphPtr-&gt;tensors[outputId].get();</div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160;    }</div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160;}</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160;</div><div class="line"><a name="l02706"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abda91b07a94d0f498b76655e03647d9a"> 2706</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a86428e0c674542488c7292dfbe2ce381">TfLiteParser::TensorIdRawPtrVector</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abda91b07a94d0f498b76655e03647d9a">TfLiteParser::GetSubgraphInputs</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a> &amp; model,</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160;                                                                   <span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;{</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(model, subgraphIndex);</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160;</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;    <span class="keywordtype">size_t</span> inputCount = subgraphPtr-&gt;inputs.size();</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a86428e0c674542488c7292dfbe2ce381">TensorIdRawPtrVector</a> result(inputCount);</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i&lt;inputCount; ++i)</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160;    {</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160;        uint32_t inputId = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(subgraphPtr-&gt;inputs[i]);</div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160;        <a class="code" href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">CHECK_TENSOR</a>(model, subgraphIndex, inputId);</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160;        result[i] = std::make_pair(inputId, subgraphPtr-&gt;tensors[inputId].get());</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160;    }</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160;}</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160;</div><div class="line"><a name="l02723"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afba7f99227765786c4ed9cb2acc09739"> 2723</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a86428e0c674542488c7292dfbe2ce381">TfLiteParser::TensorIdRawPtrVector</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afba7f99227765786c4ed9cb2acc09739">TfLiteParser::GetSubgraphOutputs</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a> &amp; model,</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;                                                                    <span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160;{</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(model, subgraphIndex);</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160;</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160;    <span class="keywordtype">size_t</span> outputCount = subgraphPtr-&gt;outputs.size();</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a86428e0c674542488c7292dfbe2ce381">TensorIdRawPtrVector</a> result(outputCount);</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0; i&lt;outputCount; ++i)</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160;    {</div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160;        uint32_t outputId = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(subgraphPtr-&gt;outputs[i]);</div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160;        result[i] = std::make_pair(outputId, subgraphPtr-&gt;tensors[outputId].get());</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160;    }</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160;}</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160;</div><div class="line"><a name="l02739"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575"> 2739</a></span>&#160;std::vector&lt;int32_t&gt;&amp; <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">TfLiteParser::GetInputTensorIds</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a>&amp; model,</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;                                                      <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160;                                                      <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160;{</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = subgraphPtr-&gt;operators[operatorIndex];</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160;    <span class="keywordflow">return</span> operatorPtr-&gt;inputs;</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160;}</div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160;</div><div class="line"><a name="l02749"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f"> 2749</a></span>&#160;std::vector&lt;int32_t&gt;&amp; <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">TfLiteParser::GetOutputTensorIds</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a>&amp; model,</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;                                                       <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;                                                       <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160;{</div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = subgraphPtr-&gt;operators[operatorIndex];</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160;    <span class="keywordflow">return</span> operatorPtr-&gt;outputs;</div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160;}</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160;</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160;<span class="keywordtype">void</span> TfLiteParser::RegisterInputSlots(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160;                                      <span class="keywordtype">size_t</span> operatorIndex,</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;                                      <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer,</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160;                                      <span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; tensorIndexes)</div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160;{</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160;    <span class="keywordflow">if</span> (tensorIndexes.size() != layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a9c2cba04b6d7ace4fc2a2436b82a5a63">GetNumInputSlots</a>())</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160;    {</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160;            boost::str(boost::format(<span class="stringliteral">&quot;The number of tensor inputs (%1%) does not match the number expected (%2%)&quot;</span></div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160;                                     <span class="stringliteral">&quot; for subgraph:%3% operator index:%4% %5%&quot;</span>) %</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160;                       tensorIndexes.size() %</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;                       layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a9c2cba04b6d7ace4fc2a2436b82a5a63">GetNumInputSlots</a>() %</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;                       subgraphIndex %</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;                       operatorIndex %</div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160;                       <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160;    }</div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160;</div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIndex = 0; slotIndex &lt; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a9c2cba04b6d7ace4fc2a2436b82a5a63">GetNumInputSlots</a>(); ++slotIndex)</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160;    {</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tensorIndex = tensorIndexes[slotIndex];</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;        <a class="code" href="classarmnn_1_1_i_input_slot.xhtml">armnn::IInputSlot</a>* slot = &amp;(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(slotIndex));</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160;        RegisterConsumerOfTensor(subgraphIndex, tensorIndex, slot);</div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;    }</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;}</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160;</div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160;<span class="keywordtype">void</span> TfLiteParser::RegisterOutputSlots(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;                                       <span class="keywordtype">size_t</span> operatorIndex,</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160;                                       <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer,</div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160;                                       <span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; tensorIndexes)</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;{</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160;    BOOST_ASSERT(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160;    <span class="keywordflow">if</span> (tensorIndexes.size() != layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">GetNumOutputSlots</a>())</div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160;    {</div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160;            boost::str(boost::format(<span class="stringliteral">&quot;The number of tensor outputs (%1%) does not match the number expected (%2%)&quot;</span></div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160;                                     <span class="stringliteral">&quot; for subgraph:%3% operator index:%4% %5%&quot;</span>) %</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160;                       tensorIndexes.size() %</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160;                       layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">GetNumOutputSlots</a>() %</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;                       subgraphIndex %</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160;                       operatorIndex %</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;                       <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160;    }</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;</div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> slotIndex = 0; slotIndex &lt; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">GetNumOutputSlots</a>(); ++slotIndex)</div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;    {</div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tensorIndex = tensorIndexes[slotIndex];</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160;        <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a>* slot = &amp;(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(slotIndex));</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160;        RegisterProducerOfTensor(subgraphIndex, tensorIndex, slot);</div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160;    }</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160;}</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160;</div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160;<span class="keywordtype">void</span> TfLiteParser::SetupInputLayers(<span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160;{</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;</div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abda91b07a94d0f498b76655e03647d9a">GetSubgraphInputs</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> &amp; tensorIdAndPtr : inputs)</div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160;    {</div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;        <span class="keyword">auto</span> bindingId = GenerateLayerBindingId(subgraphIndex, tensorIdAndPtr.first);</div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer =</div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160;            m_Network-&gt;AddInputLayer(bindingId, tensorIdAndPtr.second-&gt;name.c_str());</div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;        <span class="keyword">auto</span> tensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(tensorIdAndPtr.second);</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;        layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(tensorInfo);</div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160;</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;        RegisterOutputSlots(subgraphIndex,</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;                            VIRTUAL_OPERATOR_ID,</div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160;                            layer,</div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160;                            { <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(tensorIdAndPtr.first) });</div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160;    }</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160;}</div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160;</div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160;<span class="keywordtype">void</span> TfLiteParser::SetupOutputLayers(<span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;{</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afba7f99227765786c4ed9cb2acc09739">GetSubgraphOutputs</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> &amp; tensorIdAndPtr : outputs)</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160;    {</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;        <span class="keyword">auto</span> bindingId = GenerateLayerBindingId(subgraphIndex, tensorIdAndPtr.first);</div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer =</div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;            m_Network-&gt;AddOutputLayer(bindingId, tensorIdAndPtr.second-&gt;name.c_str());</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160;</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160;        RegisterInputSlots(subgraphIndex,</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160;                           VIRTUAL_OPERATOR_ID,</div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160;                           layer,</div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160;                           { <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(tensorIdAndPtr.first) });</div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160;    }</div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160;}</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160;</div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160;<span class="keywordtype">void</span> TfLiteParser::SetupConstantLayers(<span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160;{</div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;</div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = m_Model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> subgraphIndex = 0; subgraphIndex &lt; m_SubgraphConnections.size(); ++subgraphIndex)</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160;    {</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tensorIndex = 0; tensorIndex &lt; m_SubgraphConnections[subgraphIndex].size(); ++tensorIndex)</div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160;        {</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;            <span class="keywordflow">if</span> (m_SubgraphConnections[subgraphIndex][tensorIndex].outputSlot == <span class="keyword">nullptr</span> &amp;&amp;</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160;                m_SubgraphConnections[subgraphIndex][tensorIndex].inputSlots.size() &gt; 0)</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160;            {</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160;                <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">TensorRawPtr</a> tensorPtr = subgraphPtr-&gt;tensors[tensorIndex].get();</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160;                <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(tensorPtr);</div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160;                <span class="keyword">auto</span> tensorAndData = CreateConstTensor(tensorPtr,</div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160;                                                       tensorInfo,</div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160;                                                       <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a>());</div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160;</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160;                std::string layerName = boost::str(boost::format(<span class="stringliteral">&quot;Constant:%1%&quot;</span>) % tensorPtr-&gt;name);</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160;                <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *layer =</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160;                    m_Network-&gt;AddConstantLayer(tensorAndData.first, layerName.c_str());</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;</div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160;                layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(tensorInfo);</div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160;                RegisterOutputSlots(subgraphIndex,</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160;                                    VIRTUAL_OPERATOR_ID,</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160;                                    layer,</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160;                                    { tensorIndex });</div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160;</div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160;            }</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160;        }</div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160;    }</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160;}</div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160;</div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160;<span class="comment">// example usage: BufferRawPtr bufferPtr = GetBuffer(m_Model, inputs[0]-&gt;buffer);</span></div><div class="line"><a name="l02886"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222"> 2886</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">TfLiteParser::BufferRawPtr</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">TfLiteParser::GetBuffer</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a>&amp; model, <span class="keywordtype">size_t</span> bufferIndex)</div><div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160;{</div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a7c88d54e3f895030c70330a4c9d76a7a">CHECK_BUFFER</a>(model, bufferIndex);</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;    <span class="keywordflow">return</span> model-&gt;buffers[bufferIndex].get();</div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160;}</div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160;</div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160;std::pair&lt;armnn::ConstTensor, TfLiteParser::SupportedDataStorage&gt;</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;TfLiteParser::CreateConstTensorAndStoreData(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">TfLiteParser::BufferRawPtr</a> bufferPtr,</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;                                            <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">TfLiteParser::TensorRawPtr</a> tensorPtr,</div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160;                                            <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;                                            <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a> permutationVector)</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160;{</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160;    <span class="keyword">auto</span> constData = CreateConstTensorImpl&lt;T&gt;(bufferPtr,</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;                                              tensorPtr,</div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160;                                              tensorInfo,</div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160;                                              permutationVector);</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160;    TfLiteParser::SupportedDataStorage storage(std::move(constData.second));</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160;    <span class="keywordflow">return</span> std::make_pair(constData.first, std::move(storage));</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;}</div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160;</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160;std::pair&lt;armnn::ConstTensor, TfLiteParser::SupportedDataStorage&gt;</div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160;TfLiteParser::CreateConstTensor(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">TensorRawPtr</a> tensorPtr,</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160;                                <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160;                                <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;armnn::PermutationVector&amp;&gt;</a> permutationVector)</div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160;{</div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ae38d96fe05581ea025713b3e781c5a43">CHECK_TENSOR_PTR</a>(tensorPtr);</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160;    <span class="keyword">auto</span> bufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">GetBuffer</a>(m_Model, tensorPtr-&gt;buffer);</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ae6440b8ea95cf981cd7bbffa52c22fe1">CHECK_BUFFER_SIZE</a>(bufferPtr, tensorInfo, tensorPtr-&gt;buffer);</div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160;    <span class="keywordflow">switch</span> (tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>())</div><div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160;    {</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;float&gt;(bufferPtr,</div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160;                                                        tensorPtr,</div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160;                                                        tensorInfo,</div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160;                                                        permutationVector);</div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;uint8_t&gt;(bufferPtr,</div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160;                                                          tensorPtr,</div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160;                                                          tensorInfo,</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160;                                                          permutationVector);</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a>:</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;int8_t&gt;(bufferPtr,</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;                                                         tensorPtr,</div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160;                                                         tensorInfo,</div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160;                                                         permutationVector);</div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;int8_t&gt;(bufferPtr,</div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160;                                                         tensorPtr,</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;                                                         tensorInfo,</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160;                                                         permutationVector);</div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>:</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;int32_t&gt;(bufferPtr,</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160;                                                          tensorPtr,</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160;                                                          tensorInfo,</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160;                                                          permutationVector);</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160;        {</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160;            std::stringstream errString;</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160;            errString &lt;&lt; <span class="stringliteral">&quot;Unexpected datatype when creating const tensor: &quot;</span></div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160;                        &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a>(tensorInfo.GetDataType())</div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160;                        &lt;&lt; <span class="stringliteral">&quot; shape:&quot;</span> &lt;&lt; tensorInfo.GetShape()</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160;                        &lt;&lt; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(errString.str());</div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160;        }</div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160;    }</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160;}</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160;</div><div class="line"><a name="l02955"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a91ba75587a31033088cb4f156e847efb"> 2955</a></span>&#160;<a class="code" href="namespacearmnn_tf_lite_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a91ba75587a31033088cb4f156e847efb">TfLiteParser::GetNetworkInputBindingInfo</a>(<span class="keywordtype">size_t</span> subgraphId,</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160;                                                          <span class="keyword">const</span> std::string&amp; name)<span class="keyword"> const</span></div><div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphId);</div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abda91b07a94d0f498b76655e03647d9a">GetSubgraphInputs</a>(m_Model, subgraphId);</div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> &amp; input : inputs)</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160;    {</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160;        <span class="keywordflow">if</span> (input.second-&gt;name == name)</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160;        {</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;            <span class="keyword">auto</span> bindingId = GenerateLayerBindingId(subgraphId, input.first);</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160;            <span class="keywordflow">return</span> std::make_pair(bindingId, <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(input.second));</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160;        }</div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160;    }</div><div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160;</div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160;    std::stringstream bindings;</div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> &amp; input : inputs)</div><div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160;    {</div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160;        bindings &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span> &lt;&lt; input.second-&gt;name &lt;&lt; <span class="stringliteral">&quot;&#39; &quot;</span>;</div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160;    }</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160;</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160;    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160;        boost::str(</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;            boost::format(<span class="stringliteral">&quot;No input binding found for subgraph:%1% and name:%2%. &quot;</span></div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160;                          <span class="stringliteral">&quot;Possible inputs are: [%3%] %4%&quot;</span>) %</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160;            subgraphId %</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160;            name %</div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160;            bindings.str() %</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160;            <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160;}</div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;</div><div class="line"><a name="l02985"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a475b7cb5db683bb6fbb1c3fae40cb2b3"> 2985</a></span>&#160;<a class="code" href="namespacearmnn_tf_lite_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a475b7cb5db683bb6fbb1c3fae40cb2b3">TfLiteParser::GetNetworkOutputBindingInfo</a>(<span class="keywordtype">size_t</span> subgraphId,</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;                                                           <span class="keyword">const</span> std::string&amp; name)<span class="keyword"> const</span></div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphId);</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afba7f99227765786c4ed9cb2acc09739">GetSubgraphOutputs</a>(m_Model, subgraphId);</div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; outputs.size(); ++i)</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;    {</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160;        <span class="keyword">auto</span> <span class="keyword">const</span> output = outputs[i];</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160;        <span class="keywordflow">if</span> (output.second-&gt;name == name)</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160;        {</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160;            <span class="keyword">auto</span> bindingId = GenerateLayerBindingId(subgraphId, output.first);</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160;            std::vector&lt;unsigned int&gt; shape = m_OverridenOutputShapes.size() &gt; 0 ?</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160;                                                m_OverridenOutputShapes[i] : AsUnsignedVector(output.second-&gt;shape);</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160;            <span class="keywordflow">return</span> std::make_pair(bindingId, <a class="code" href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">ToTensorInfo</a>(output.second, shape));</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160;        }</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;    }</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;</div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;    std::stringstream bindings;</div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> &amp; output : outputs)</div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160;    {</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;        bindings &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span> &lt;&lt; output.second-&gt;name &lt;&lt; <span class="stringliteral">&quot;&#39; &quot;</span>;</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160;    }</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160;</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160;    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;        boost::str(</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160;            boost::format(<span class="stringliteral">&quot;No output binding found for subgraph:%1% and name:%2%. &quot;</span></div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;                          <span class="stringliteral">&quot;Possible outputs are: [%3%] %4%&quot;</span>) %</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160;            subgraphId %</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;            name %</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160;            bindings.str() %</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160;            <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160;}</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160;</div><div class="line"><a name="l03018"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ae18739116b52dbab31bbf490450beb90"> 3018</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ae18739116b52dbab31bbf490450beb90">TfLiteParser::GetSubgraphCount</a>()<span class="keyword"> const</span></div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160;    <span class="keywordflow">return</span> m_Model-&gt;subgraphs.size();</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160;}</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;</div><div class="line"><a name="l03023"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a58501692772880e7ef55485a4c95aab9"> 3023</a></span>&#160;std::vector&lt;std::string&gt; <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a58501692772880e7ef55485a4c95aab9">TfLiteParser::GetSubgraphInputTensorNames</a>(<span class="keywordtype">size_t</span> subgraphId)<span class="keyword"> const</span></div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphId);</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abda91b07a94d0f498b76655e03647d9a">GetSubgraphInputs</a>(m_Model, subgraphId);</div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160;    std::vector&lt;std::string&gt; result;</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160;    result.reserve(inputs.size());</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> &amp; input : inputs)</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160;    {</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160;        result.push_back(input.second-&gt;name);</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;    }</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160;}</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;</div><div class="line"><a name="l03036"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ab97e69d07f06e392bd0cc2e5bcbf1be6"> 3036</a></span>&#160;std::vector&lt;std::string&gt; <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ab97e69d07f06e392bd0cc2e5bcbf1be6">TfLiteParser::GetSubgraphOutputTensorNames</a>(<span class="keywordtype">size_t</span> subgraphId)<span class="keyword"> const</span></div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphId);</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afba7f99227765786c4ed9cb2acc09739">GetSubgraphOutputs</a>(m_Model, subgraphId);</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160;    std::vector&lt;std::string&gt; result;</div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;    result.reserve(outputs.size());</div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> &amp; output : outputs)</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160;    {</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160;        result.push_back(output.second-&gt;name);</div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160;    }</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160;}</div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160;</div><div class="line"><a name="l03049"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#acf8cc929eadbabf197b36f7364d3d2cb"> 3049</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml">ITfLiteParser</a>* <a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#acf8cc929eadbabf197b36f7364d3d2cb">ITfLiteParser::CreateRaw</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ITfLiteParser::TfLiteParserOptions&gt;</a>&amp; <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>)</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160;{</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a2ed4853234865d838da50085da99b2a6">TfLiteParser</a>(options);</div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160;}</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160;</div><div class="line"><a name="l03054"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a9932449a89a62cfcfd72a4fedbee1ab7"> 3054</a></span>&#160;<a class="code" href="namespacearmnn_tf_lite_parser.xhtml#af69bedce3c37be895f75146016ba8a17">ITfLiteParserPtr</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a9932449a89a62cfcfd72a4fedbee1ab7">ITfLiteParser::Create</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ITfLiteParser::TfLiteParserOptions&gt;</a>&amp; <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>)</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;{</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacearmnn_tf_lite_parser.xhtml#af69bedce3c37be895f75146016ba8a17">ITfLiteParserPtr</a>(<a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#acf8cc929eadbabf197b36f7364d3d2cb">CreateRaw</a>(options), &amp;<a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a29a2a153962a701843d5c8ae953cb032">ITfLiteParser::Destroy</a>);</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160;}</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;</div><div class="line"><a name="l03059"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a29a2a153962a701843d5c8ae953cb032"> 3059</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a29a2a153962a701843d5c8ae953cb032">ITfLiteParser::Destroy</a>(<a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml">ITfLiteParser</a>* parser)</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160;{</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160;    <span class="keyword">delete</span> parser;</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;}</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160;TfLiteParser::SupportedDataStorage::SupportedDataStorage(std::unique_ptr&lt;<span class="keywordtype">float</span>[]&gt; &amp;&amp; data)</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;: m_FloatData(std::move(data))</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160;, m_Uint8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160;, m_Int8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;, m_Int32Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;{</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160;}</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160;</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160;TfLiteParser::SupportedDataStorage::SupportedDataStorage(std::unique_ptr&lt;uint8_t[]&gt; &amp;&amp; data)</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160;: m_FloatData(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160;, m_Uint8Data(std::move(data))</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160;, m_Int8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160;, m_Int32Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;{</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160;}</div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160;</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160;TfLiteParser::SupportedDataStorage::SupportedDataStorage(std::unique_ptr&lt;int8_t[]&gt; &amp;&amp; data)</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160;: m_FloatData(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160;, m_Uint8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160;, m_Int8Data(std::move(data))</div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160;, m_Int32Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160;{</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160;}</div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160;</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160;TfLiteParser::SupportedDataStorage::SupportedDataStorage(std::unique_ptr&lt;int32_t[]&gt; &amp;&amp; data)</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;: m_FloatData(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160;, m_Uint8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;, m_Int8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160;, m_Int32Data(std::move(data))</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160;{</div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160;}</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160;</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160;} <span class="comment">// armnnTfLiteParser</span></div><div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a012b24cafd443425314d4f9e06cec6c1"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a012b24cafd443425314d4f9e06cec6c1">armnnTfLiteParser::TfLiteParser::CreateNetworkFromBinaryFile</a></div><div class="ttdeci">virtual armnn::INetworkPtr CreateNetworkFromBinaryFile(const char *graphFile) override</div><div class="ttdoc">Create the network from a flatbuffers binary file on disk. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00598">TfLiteParser.cpp:598</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Convolution2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00428">Descriptors.hpp:428</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::Convolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00438">Descriptors.hpp:438</a></div></div>
<div class="ttc" id="_tf_lite_parser_8cpp_xhtml_afbe702264a4e175da37c4941c0894bdb"><div class="ttname"><a href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a></div><div class="ttdeci">#define CHECK_MODEL(MODEL, SUBGRAPH_INDEX, OPERATOR_INDEX)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00124">TfLiteParser.cpp:124</a></div></div>
<div class="ttc" id="_ignore_unused_8hpp_xhtml"><div class="ttname"><a href="_ignore_unused_8hpp.xhtml">IgnoreUnused.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_ac2dac3b61c94de52093616be4ab17f8d"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">armnn::IConnectableLayer::GetNumOutputSlots</a></div><div class="ttdeci">virtual unsigned int GetNumOutputSlots() const =0</div><div class="ttdoc">Returns the number of connectable output slots. </div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Convolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00440">Descriptors.hpp:440</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a475b7cb5db683bb6fbb1c3fae40cb2b3"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a475b7cb5db683bb6fbb1c3fae40cb2b3">armnnTfLiteParser::TfLiteParser::GetNetworkOutputBindingInfo</a></div><div class="ttdeci">virtual BindingPointInfo GetNetworkOutputBindingInfo(size_t subgraphId, const std::string &amp;name) const override</div><div class="ttdoc">Retrieve binding info (layer id and tensor info) for the network output identified by the given layer...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02985">TfLiteParser.cpp:2985</a></div></div>
<div class="ttc" id="structarmnn_1_1_stack_descriptor_xhtml_ab218de7805899c8412d75d1fd1d846d2"><div class="ttname"><a href="structarmnn_1_1_stack_descriptor.xhtml#ab218de7805899c8412d75d1fd1d846d2">armnn::StackDescriptor::m_Axis</a></div><div class="ttdeci">uint32_t m_Axis</div><div class="ttdoc">0-based axis along which to stack the input tensors. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00972">Descriptors.hpp:972</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a988cb5e216eb87d854414c6a0282eeb4"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a988cb5e216eb87d854414c6a0282eeb4">armnnTfLiteParser::TfLiteParser::SubgraphPtr</a></div><div class="ttdeci">std::unique_ptr&lt; tflite::SubGraphT &gt; SubgraphPtr</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8hpp_source.xhtml#l00024">TfLiteParser.hpp:24</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a5336d7700f4a5bcc272fbc9216541222"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a5336d7700f4a5bcc272fbc9216541222">armnnTfLiteParser::TfLiteParser::GetBuffer</a></div><div class="ttdeci">static BufferRawPtr GetBuffer(const ModelPtr &amp;model, size_t bufferIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02886">TfLiteParser.cpp:2886</a></div></div>
<div class="ttc" id="structarmnn_1_1_views_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.xhtml">armnn::ViewsDescriptor</a></div><div class="ttdoc">A ViewsDescriptor for the SplitterLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00190">Descriptors.hpp:190</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00061">INetwork.hpp:61</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_ab509802c659de19929f18bad14a35c58"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#ab509802c659de19929f18bad14a35c58">armnn::DetectionPostProcessDescriptor::m_ScaleW</a></div><div class="ttdeci">float m_ScaleW</div><div class="ttdoc">Center size encoding scale weight. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00545">Descriptors.hpp:545</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Pooling2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00355">Descriptors.hpp:355</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::DepthwiseConvolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00490">Descriptors.hpp:490</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a858104f225c302988fba35c1cb299066"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a858104f225c302988fba35c1cb299066">armnnTfLiteParser::TfLiteParser::LoadModelFromBinary</a></div><div class="ttdeci">static ModelPtr LoadModelFromBinary(const uint8_t *binaryContent, size_t len)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02648">TfLiteParser.cpp:2648</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a9c2cba04b6d7ace4fc2a2436b82a5a63"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a9c2cba04b6d7ace4fc2a2436b82a5a63">armnn::IConnectableLayer::GetNumInputSlots</a></div><div class="ttdeci">virtual unsigned int GetNumInputSlots() const =0</div><div class="ttdoc">Returns the number of connectable input slots. </div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">armnn::TransposeConvolution2dDescriptor</a></div><div class="ttdoc">A TransposeConvolution2dDescriptor for the TransposeConvolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01079">Descriptors.hpp:1079</a></div></div>
<div class="ttc" id="_tf_lite_parser_8cpp_xhtml_a5fc762bb40634f39ff6ff4e23005a3a9"><div class="ttname"><a href="_tf_lite_parser_8cpp.xhtml#a5fc762bb40634f39ff6ff4e23005a3a9">ARMNN_THROW_PARSE_EXCEPTION</a></div><div class="ttdeci">#define ARMNN_THROW_PARSE_EXCEPTION(msg)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00036">TfLiteParser.cpp:36</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00088">Tensor.hpp:88</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::DepthwiseConvolution2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00480">Descriptors.hpp:480</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Pooling2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00349">Descriptors.hpp:349</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_ae8ee09f5e3e78ecfdf00acfdc37588dc"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ae8ee09f5e3e78ecfdf00acfdc37588dc">armnnTfLiteParser::TfLiteParser::CreateNetworkFromBinary</a></div><div class="ttdeci">virtual armnn::INetworkPtr CreateNetworkFromBinary(const std::vector&lt; uint8_t &gt; &amp;binaryContent) override</div><div class="ttdoc">Create the network from a flatbuffers binary. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00605">TfLiteParser.cpp:605</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_xhtml"><div class="ttname"><a href="classarmnn_1_1_optional.xhtml">armnn::Optional</a></div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00270">Optional.hpp:270</a></div></div>
<div class="ttc" id="structarmnn_1_1_check_location_xhtml_a5e3562cda960da001597e7dd5679b140"><div class="ttname"><a href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">armnn::CheckLocation::AsString</a></div><div class="ttdeci">std::string AsString() const</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00029">Exceptions.hpp:29</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a6d0384878432cfc9652b7ae8bc59506f"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a6d0384878432cfc9652b7ae8bc59506f">armnn::StridedSliceDescriptor::m_ShrinkAxisMask</a></div><div class="ttdeci">int32_t m_ShrinkAxisMask</div><div class="ttdoc">Shrink axis mask value. If set, the nth specification shrinks the dimensionality by 1...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01054">Descriptors.hpp:1054</a></div></div>
<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a></div><div class="ttdoc">A ReshapeDescriptor for the ReshapeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00758">Descriptors.hpp:758</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a118fe06b7c2599da60398ee311ede923"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a118fe06b7c2599da60398ee311ede923">armnn::StridedSliceDescriptor::m_Begin</a></div><div class="ttdeci">std::vector&lt; int &gt; m_Begin</div><div class="ttdoc">Begin values for the input that will be sliced. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01041">Descriptors.hpp:1041</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_abd8bee7fb9b86485a60bc7ee05114270"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abd8bee7fb9b86485a60bc7ee05114270">armnnTfLiteParser::TfLiteParser::TensorRawPtrVector</a></div><div class="ttdeci">std::vector&lt; TensorRawPtr &gt; TensorRawPtrVector</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8hpp_source.xhtml#l00029">TfLiteParser.hpp:29</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::DepthwiseConvolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00492">Descriptors.hpp:492</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00053">Tensor.hpp:53</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::StridedSliceDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01062">Descriptors.hpp:1062</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_ae64523937ea910030ad66fee6fddd51f"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#ae64523937ea910030ad66fee6fddd51f">armnn::DetectionPostProcessDescriptor::m_ScaleX</a></div><div class="ttdeci">float m_ScaleX</div><div class="ttdoc">Center size encoding scale x. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00541">Descriptors.hpp:541</a></div></div>
<div class="ttc" id="structarmnn_1_1_stack_descriptor_xhtml_a2bea87b470268bb0b73457c3733dbc04"><div class="ttname"><a href="structarmnn_1_1_stack_descriptor.xhtml#a2bea87b470268bb0b73457c3733dbc04">armnn::StackDescriptor::m_InputShape</a></div><div class="ttdeci">TensorShape m_InputShape</div><div class="ttdoc">Required shape of all input tensors. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00976">Descriptors.hpp:976</a></div></div>
<div class="ttc" id="structarmnn_1_1_fully_connected_descriptor_xhtml_a281fcaec86e17c97f7b8402633f6b55a"><div class="ttname"><a href="structarmnn_1_1_fully_connected_descriptor.xhtml#a281fcaec86e17c97f7b8402633f6b55a">armnn::FullyConnectedDescriptor::m_TransposeWeightMatrix</a></div><div class="ttdeci">bool m_TransposeWeightMatrix</div><div class="ttdoc">Enable/disable transpose weight matrix. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00388">Descriptors.hpp:388</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6d8fb685cc1ff224f25aa127fcf62c86"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">armnn::Pooling2dDescriptor::m_PoolWidth</a></div><div class="ttdeci">uint32_t m_PoolWidth</div><div class="ttdoc">Pooling width value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00357">Descriptors.hpp:357</a></div></div>
<div class="ttc" id="_tf_lite_parser_8hpp_xhtml"><div class="ttname"><a href="_tf_lite_parser_8hpp.xhtml">TfLiteParser.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml">armnn::Convolution2dDescriptor</a></div><div class="ttdoc">A Convolution2dDescriptor for the Convolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00392">Descriptors.hpp:392</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::DepthwiseConvolution2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00474">Descriptors.hpp:474</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_ac5411554ab8c02ca286af52c98f6bd87"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac5411554ab8c02ca286af52c98f6bd87">armnnTfLiteParser::TfLiteParser::LoadModelFromFile</a></div><div class="ttdeci">static ModelPtr LoadModelFromFile(const char *fileName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02624">TfLiteParser.cpp:2624</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::TransposeConvolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01117">Descriptors.hpp:1117</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_abcbdfb544ece4c31d0b37715ad0f3be0"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">armnn::TensorInfo::GetNumBytes</a></div><div class="ttdeci">unsigned int GetNumBytes() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00213">Tensor.cpp:213</a></div></div>
<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml_a869254cb56968986a78a79e1d6d4a86b"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml#a869254cb56968986a78a79e1d6d4a86b">armnn::ResizeDescriptor::m_Method</a></div><div class="ttdeci">ResizeMethod m_Method</div><div class="ttdoc">The Interpolation method to use (Bilinear, NearestNeighbor). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00749">Descriptors.hpp:749</a></div></div>
<div class="ttc" id="structarmnn_1_1_softmax_descriptor_xhtml_a8275d51ef9a584feb95726ea0522f6e5"><div class="ttname"><a href="structarmnn_1_1_softmax_descriptor.xhtml#a8275d51ef9a584feb95726ea0522f6e5">armnn::SoftmaxDescriptor::m_Beta</a></div><div class="ttdeci">float m_Beta</div><div class="ttdoc">Exponentiation value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00136">Descriptors.hpp:136</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml">armnnTfLiteParser::TfLiteParser</a></div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8hpp_source.xhtml#l00019">TfLiteParser.hpp:19</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a8c29d6ea9b4186d69aad5961c910939c"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">armnn::Pooling2dDescriptor::m_PaddingMethod</a></div><div class="ttdeci">PaddingMethod m_PaddingMethod</div><div class="ttdoc">The padding method to be used. (Exclude, IgnoreValue). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00367">Descriptors.hpp:367</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_a7e2f87544b8bc7e497e1dec8d3ca4055"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a7e2f87544b8bc7e497e1dec8d3ca4055">armnn::DetectionPostProcessDescriptor::m_DetectionsPerClass</a></div><div class="ttdeci">uint32_t m_DetectionsPerClass</div><div class="ttdoc">Detections per classes, used in Regular NMS. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00531">Descriptors.hpp:531</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_to_space_nd_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::BatchToSpaceNdDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00684">Descriptors.hpp:684</a></div></div>
<div class="ttc" id="_tf_lite_parser_8cpp_xhtml_a7c88d54e3f895030c70330a4c9d76a7a"><div class="ttname"><a href="_tf_lite_parser_8cpp.xhtml#a7c88d54e3f895030c70330a4c9d76a7a">CHECK_BUFFER</a></div><div class="ttdeci">#define CHECK_BUFFER(MODEL, BUFFER_INDEX)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00210">TfLiteParser.cpp:210</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a4b49afca01112a4f4d023726ccd38876"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a4b49afca01112a4f4d023726ccd38876">armnnTfLiteParser::TfLiteParser::GetInputs</a></div><div class="ttdeci">static TensorRawPtrVector GetInputs(const ModelPtr &amp;model, size_t subgraphIndex, size_t operatorIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02667">TfLiteParser.cpp:2667</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser_xhtml"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml">armnnTfLiteParser::ITfLiteParser</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_tf_lite_parser_8hpp_source.xhtml#l00025">ITfLiteParser.hpp:25</a></div></div>
<div class="ttc" id="classarmnn_1_1_exception_xhtml_abf843cbb29dec939d0731e491bab6f70"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">armnn::Exception::what</a></div><div class="ttdeci">virtual const char * what() const noexcept override</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8cpp_source.xhtml#l00032">Exceptions.cpp:32</a></div></div>
<div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00163">Logging.hpp:163</a></div></div>
<div class="ttc" id="classarmnn_1_1_file_not_found_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_file_not_found_exception.xhtml">armnn::FileNotFoundException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00086">Exceptions.hpp:86</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Pooling2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00353">Descriptors.hpp:353</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a></div></div>
<div class="ttc" id="namespacearmnn_utils_xhtml_a523deabeb7d0a884028b35eebfd1cb6c"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a523deabeb7d0a884028b35eebfd1cb6c">armnnUtils::ProcessConcatInputTensorInfo</a></div><div class="ttdeci">void ProcessConcatInputTensorInfo(armnn::TensorInfo &amp;inputTensorInfo, armnn::OriginsDescriptor &amp;concatDescriptor, const unsigned int &amp;concatAxis, unsigned int inputIndex, unsigned int &amp;mergeDimOrigin)</div><div class="ttdef"><b>Definition:</b> <a href="_parser_helper_8cpp_source.xhtml#l00019">ParserHelper.cpp:19</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a></div></div>
<div class="ttc" id="namespacearmnn_tf_parser_xhtml_aa78bf8d20e213dcd13d48072dfa9cd1f"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#aa78bf8d20e213dcd13d48072dfa9cd1f">armnnTfParser::CalcPadding</a></div><div class="ttdeci">void CalcPadding(uint32_t input, uint32_t kernel, uint32_t stride, uint32_t &amp;outPadHead, uint32_t &amp;outPadTail, bool samePadding)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00421">TfParser.cpp:421</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Convolution2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00424">Descriptors.hpp:424</a></div></div>
<div class="ttc" id="structarmnn_1_1_pad_descriptor_xhtml_a85f98c94e11f65a6b73f831735c040f3"><div class="ttname"><a href="structarmnn_1_1_pad_descriptor.xhtml#a85f98c94e11f65a6b73f831735c040f3">armnn::PadDescriptor::m_PadList</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; unsigned int, unsigned int &gt; &gt; m_PadList</div><div class="ttdoc">Specifies the padding for input dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00920">Descriptors.hpp:920</a></div></div>
<div class="ttc" id="namespacearmnn_tf_lite_parser_xhtml_af69bedce3c37be895f75146016ba8a17"><div class="ttname"><a href="namespacearmnn_tf_lite_parser.xhtml#af69bedce3c37be895f75146016ba8a17">armnnTfLiteParser::ITfLiteParserPtr</a></div><div class="ttdeci">std::unique_ptr&lt; ITfLiteParser, void(*)(ITfLiteParser *parser)&gt; ITfLiteParserPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_tf_lite_parser_8hpp_source.xhtml#l00023">ITfLiteParser.hpp:23</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a91ba75587a31033088cb4f156e847efb"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a91ba75587a31033088cb4f156e847efb">armnnTfLiteParser::TfLiteParser::GetNetworkInputBindingInfo</a></div><div class="ttdeci">virtual BindingPointInfo GetNetworkInputBindingInfo(size_t subgraphId, const std::string &amp;name) const override</div><div class="ttdoc">Retrieve binding info (layer id and tensor info) for the network input identified by the given layer ...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02955">TfLiteParser.cpp:2955</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2020 ARM Limited. </div><div class="ttdef"><b>Definition:</b> <a href="00__introduction_8dox_source.xhtml#l00025">00_introduction.dox:25</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
<div class="ttc" id="_cl_layer_tests_8cpp_xhtml_a37f1c3ccc9fc906be85185350dd83d48"><div class="ttname"><a href="_cl_layer_tests_8cpp.xhtml#a37f1c3ccc9fc906be85185350dd83d48">true</a></div><div class="ttdeci">DataLayout::NCHW DataLayout::NCHW DataLayout::NHWC DataLayout::NHWC true</div><div class="ttdef"><b>Definition:</b> <a href="_cl_layer_tests_8cpp_source.xhtml#l00202">ClLayerTests.cpp:202</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::TransposeConvolution2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01111">Descriptors.hpp:1111</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a61081be1483984e33db452c75d569f51"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a61081be1483984e33db452c75d569f51">armnn::StridedSliceDescriptor::m_BeginMask</a></div><div class="ttdeci">int32_t m_BeginMask</div><div class="ttdoc">Begin mask value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01049">Descriptors.hpp:1049</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_ae18739116b52dbab31bbf490450beb90"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ae18739116b52dbab31bbf490450beb90">armnnTfLiteParser::TfLiteParser::GetSubgraphCount</a></div><div class="ttdeci">virtual size_t GetSubgraphCount() const override</div><div class="ttdoc">Return the number of subgraphs in the parsed model. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l03018">TfLiteParser.cpp:3018</a></div></div>
<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml_a490ec6b59006d1fe1ec2ea30e69fb97c"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">armnn::PermutationVector::GetSize</a></div><div class="ttdeci">SizeType GetSize() const</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00202">Types.hpp:202</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">armnn::Convolution2dDescriptor::m_DilationY</a></div><div class="ttdeci">uint32_t m_DilationY</div><div class="ttdoc">Dilation along y axis. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00436">Descriptors.hpp:436</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_ac37e49c0d6e6e54f9d2015d0f11f8ee7"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#ac37e49c0d6e6e54f9d2015d0f11f8ee7">armnn::StridedSliceDescriptor::m_EndMask</a></div><div class="ttdeci">int32_t m_EndMask</div><div class="ttdoc">End mask value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01052">Descriptors.hpp:1052</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a961bbfe1db71a848eff5a1f0ab775718"><div class="ttname"><a href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">armnn::PoolingAlgorithm</a></div><div class="ttdeci">PoolingAlgorithm</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00096">Types.hpp:96</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_reference_switch_xhtml_a77c7d528ac063d870b8c8426ec81c1c3"><div class="ttname"><a href="classarmnn_1_1_optional_reference_switch.xhtml#a77c7d528ac063d870b8c8426ec81c1c3">armnn::OptionalReferenceSwitch&lt; std::is_reference&lt; T &gt;::value, T &gt;::value</a></div><div class="ttdeci">const T &amp; value() const</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00146">Optional.hpp:146</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_batch_nd_descriptor_xhtml_a85f98c94e11f65a6b73f831735c040f3"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a85f98c94e11f65a6b73f831735c040f3">armnn::SpaceToBatchNdDescriptor::m_PadList</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; unsigned int, unsigned int &gt; &gt; m_PadList</div><div class="ttdoc">Specifies the padding values for the input dimension: heightPad{top, bottom} widthPad{left, right}. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00804">Descriptors.hpp:804</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">armnn::DepthwiseConvolution2dDescriptor::m_DilationY</a></div><div class="ttdeci">uint32_t m_DilationY</div><div class="ttdoc">Dilation factor value for height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00488">Descriptors.hpp:488</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_to_space_nd_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">armnn::BatchToSpaceNdDescriptor</a></div><div class="ttdoc">A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00657">Descriptors.hpp:657</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">armnn::BoostLogSeverityMapping::error</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_aaebfa9a01a0bb8a0935114ff0140cc45"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaebfa9a01a0bb8a0935114ff0140cc45">armnnTfLiteParser::TfLiteParser::OutputShapeOfReshape</a></div><div class="ttdeci">static armnn::TensorInfo OutputShapeOfReshape(const armnn::TensorInfo &amp;inputTensorInfo, const std::vector&lt; int32_t &gt; &amp;targetDimsIn)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l01898">TfLiteParser.cpp:1898</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser_xhtml_a9932449a89a62cfcfd72a4fedbee1ab7"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a9932449a89a62cfcfd72a4fedbee1ab7">armnnTfLiteParser::ITfLiteParser::Create</a></div><div class="ttdeci">static ITfLiteParserPtr Create(const armnn::Optional&lt; TfLiteParserOptions &gt; &amp;options=armnn::EmptyOptional())</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l03054">TfLiteParser.cpp:3054</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Pooling2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00361">Descriptors.hpp:361</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ab8cf8f9fb6792e654c2d8d8382f6f01b"><div class="ttname"><a href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a></div><div class="ttdeci">int LayerBindingId</div><div class="ttdoc">Type of identifiers for bindable layers (inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00171">Types.hpp:171</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
<div class="ttc" id="_tf_lite_parser_8cpp_xhtml_aa1664dc13adbc85ac12fb584b76bfdae"><div class="ttname"><a href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">CHECK_TENSOR</a></div><div class="ttdeci">#define CHECK_TENSOR(MODEL, SUBGRAPH_INDEX, TENSOR_INDEX)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00154">TfLiteParser.cpp:154</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a81b5ff8545adad19a1c9d4ca076d552c"><div class="ttname"><a href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a></div><div class="ttdeci">constexpr const char * GetDataTypeName(DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00168">TypesUtils.hpp:168</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00090">Tensor.hpp:90</a></div></div>
<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml">armnn::ResizeDescriptor</a></div><div class="ttdoc">A ResizeDescriptor for the ResizeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00724">Descriptors.hpp:724</a></div></div>
<div class="ttc" id="structarmnn_1_1_l2_normalization_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_l2_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::L2NormalizationDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00606">Descriptors.hpp:606</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_a9ae2c9796692ebeafe19a4d3f09c8ea8"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a9ae2c9796692ebeafe19a4d3f09c8ea8">armnn::DetectionPostProcessDescriptor::m_MaxClassesPerDetection</a></div><div class="ttdeci">uint32_t m_MaxClassesPerDetection</div><div class="ttdoc">Maximum numbers of classes per detection, used in Fast NMS. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00529">Descriptors.hpp:529</a></div></div>
<div class="ttc" id="structarmnn_1_1_mean_descriptor_xhtml_a1f0d67b087c491248bd1cde3ff995a95"><div class="ttname"><a href="structarmnn_1_1_mean_descriptor.xhtml#a1f0d67b087c491248bd1cde3ff995a95">armnn::MeanDescriptor::m_Axis</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_Axis</div><div class="ttdoc">Values for the dimensions to reduce. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00895">Descriptors.hpp:895</a></div></div>
<div class="ttc" id="structarmnn_1_1_stack_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_stack_descriptor.xhtml">armnn::StackDescriptor</a></div><div class="ttdoc">A StackDescriptor for the StackLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00950">Descriptors.hpp:950</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_batch_nd_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::SpaceToBatchNdDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00806">Descriptors.hpp:806</a></div></div>
<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml_a1178f4dafdda81f59c15145ec327f7d9"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">armnn::ReshapeDescriptor::m_TargetShape</a></div><div class="ttdeci">TensorShape m_TargetShape</div><div class="ttdoc">Target shape value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00774">Descriptors.hpp:774</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_abda91b07a94d0f498b76655e03647d9a"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abda91b07a94d0f498b76655e03647d9a">armnnTfLiteParser::TfLiteParser::GetSubgraphInputs</a></div><div class="ttdeci">static TensorIdRawPtrVector GetSubgraphInputs(const ModelPtr &amp;model, size_t subgraphIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02706">TfLiteParser.cpp:2706</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a84ad865bb9b5fa0e4841aa35a14a14d8"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a84ad865bb9b5fa0e4841aa35a14a14d8">armnnTfLiteParser::TfLiteParser::GetOutputs</a></div><div class="ttdeci">static TensorRawPtrVector GetOutputs(const ModelPtr &amp;model, size_t subgraphIndex, size_t operatorIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02686">TfLiteParser.cpp:2686</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a5699e8606c37d18c03910b242cd1b010"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">armnn::Pooling2dDescriptor::m_PoolHeight</a></div><div class="ttdeci">uint32_t m_PoolHeight</div><div class="ttdoc">Pooling height value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00359">Descriptors.hpp:359</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Convolution2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00426">Descriptors.hpp:426</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_ae72089bcab60ac175557f4241b16a014"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#ae72089bcab60ac175557f4241b16a014">armnn::DetectionPostProcessDescriptor::m_MaxDetections</a></div><div class="ttdeci">uint32_t m_MaxDetections</div><div class="ttdoc">Maximum numbers of detections. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00527">Descriptors.hpp:527</a></div></div>
<div class="ttc" id="structarmnn_1_1_pad_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pad_descriptor.xhtml">armnn::PadDescriptor</a></div><div class="ttdoc">A PadDescriptor for the PadLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00901">Descriptors.hpp:901</a></div></div>
<div class="ttc" id="namespacearmnn_deserializer_xhtml_aa28868b7dc87dc4d957db6c775a591c1"><div class="ttname"><a href="namespacearmnn_deserializer.xhtml#aa28868b7dc87dc4d957db6c775a591c1">armnnDeserializer::ToTensorInfo</a></div><div class="ttdeci">armnn::TensorInfo ToTensorInfo(Deserializer::TensorRawPtr tensorPtr)</div><div class="ttdef"><b>Definition:</b> <a href="_deserializer_8cpp_source.xhtml#l00501">Deserializer.cpp:501</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Convolution2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00430">Descriptors.hpp:430</a></div></div>
<div class="ttc" id="namespacearmnn_onnx_parser_xhtml_a503ae4f55dae1486e53978657083b35d"><div class="ttname"><a href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">armnnOnnxParser::ModelPtr</a></div><div class="ttdeci">std::unique_ptr&lt; onnx::ModelProto &gt; ModelPtr</div><div class="ttdef"><b>Definition:</b> <a href="_onnx_parser_8hpp_source.xhtml#l00023">OnnxParser.hpp:23</a></div></div>
<div class="ttc" id="_tf_lite_parser_8cpp_xhtml_a315ccf3e3cb207b1fbd10a2ad3e6333a"><div class="ttname"><a href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a></div><div class="ttdeci">#define CHECK_SUBGRAPH(MODEL, SUBGRAPH_INDEX)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00079">TfLiteParser.cpp:79</a></div></div>
<div class="ttc" id="_types_utils_8hpp_xhtml"><div class="ttname"><a href="_types_utils_8hpp.xhtml">TypesUtils.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::DepthwiseConvolution2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00482">Descriptors.hpp:482</a></div></div>
<div class="ttc" id="_verification_helpers_8hpp_xhtml"><div class="ttname"><a href="_verification_helpers_8hpp.xhtml">VerificationHelpers.hpp</a></div></div>
<div class="ttc" id="_tensor_test_8cpp_xhtml_ad80e179ec400af9d2547f172f3ca05f3"><div class="ttname"><a href="_tensor_test_8cpp.xhtml#ad80e179ec400af9d2547f172f3ca05f3">CheckTensor</a></div><div class="ttdeci">void CheckTensor(const ConstTensor &amp;t)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_test_8cpp_source.xhtml#l00100">TensorTest.cpp:100</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_afba7f99227765786c4ed9cb2acc09739"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afba7f99227765786c4ed9cb2acc09739">armnnTfLiteParser::TfLiteParser::GetSubgraphOutputs</a></div><div class="ttdeci">static TensorIdRawPtrVector GetSubgraphOutputs(const ModelPtr &amp;model, size_t subgraphIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02723">TfLiteParser.cpp:2723</a></div></div>
<div class="ttc" id="_permute_8hpp_xhtml"><div class="ttname"><a href="_permute_8hpp.xhtml">Permute.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_deserializer_xhtml_a97b50f22cd99f0e09e6e48d20a35f6b2"><div class="ttname"><a href="namespacearmnn_deserializer.xhtml#a97b50f22cd99f0e09e6e48d20a35f6b2">armnnDeserializer::CheckShape</a></div><div class="ttdeci">bool CheckShape(const armnn::TensorShape &amp;actual, const std::vector&lt; uint32_t &gt; &amp;expected)</div><div class="ttdef"><b>Definition:</b> <a href="_deserializer_8cpp_source.xhtml#l00167">Deserializer.cpp:167</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00032">Types.hpp:32</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_a53c8a7f33a40e1e240256bcfcf41b101"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a53c8a7f33a40e1e240256bcfcf41b101">armnn::DetectionPostProcessDescriptor::m_NmsIouThreshold</a></div><div class="ttdeci">float m_NmsIouThreshold</div><div class="ttdoc">Intersection over union threshold. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00535">Descriptors.hpp:535</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Pooling2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00351">Descriptors.hpp:351</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">armnn::DepthwiseConvolution2dDescriptor::m_DilationX</a></div><div class="ttdeci">uint32_t m_DilationX</div><div class="ttdoc">Dilation factor value for width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00486">Descriptors.hpp:486</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::DepthwiseConvolution2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00478">Descriptors.hpp:478</a></div></div>
<div class="ttc" id="structarmnn_1_1_check_location_xhtml_ac1184445a1323e07e0da084a54aec535"><div class="ttname"><a href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">armnn::CheckLocation::FileLine</a></div><div class="ttdeci">std::string FileLine() const</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00037">Exceptions.hpp:37</a></div></div>
<div class="ttc" id="structarmnn_1_1_views_descriptor_xhtml_aae0893695f5803a3517985c7cb1ccb2e"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.xhtml#aae0893695f5803a3517985c7cb1ccb2e">armnn::ViewsDescriptor::SetViewSize</a></div><div class="ttdeci">Status SetViewSize(uint32_t view, uint32_t coord, uint32_t value)</div><div class="ttdoc">Set the size of the views. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00307">Descriptors.cpp:307</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a7c91eda2b331d607bae92cd8ebf50bb9"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a7c91eda2b331d607bae92cd8ebf50bb9">armnn::StridedSliceDescriptor::m_NewAxisMask</a></div><div class="ttdeci">int32_t m_NewAxisMask</div><div class="ttdoc">New axis mask value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01059">Descriptors.hpp:1059</a></div></div>
<div class="ttc" id="structarmnn_1_1_mean_descriptor_xhtml_a28e0548abfc4e79c48f29a3d11a062e9"><div class="ttname"><a href="structarmnn_1_1_mean_descriptor.xhtml#a28e0548abfc4e79c48f29a3d11a062e9">armnn::MeanDescriptor::m_KeepDims</a></div><div class="ttdeci">bool m_KeepDims</div><div class="ttdoc">Enable/disable keep dimensions. If true, then the reduced dimensions that are of length 1 are kept...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00897">Descriptors.hpp:897</a></div></div>
<div class="ttc" id="_parser_flatbuffers_serialize_fixture_8hpp_xhtml_a15c20a0693cd3fc4d85565e2f920d8ef"><div class="ttname"><a href="_parser_flatbuffers_serialize_fixture_8hpp.xhtml#a15c20a0693cd3fc4d85565e2f920d8ef">TensorRawPtr</a></div><div class="ttdeci">armnnSerializer::TensorInfo * TensorRawPtr</div><div class="ttdef"><b>Definition:</b> <a href="_parser_flatbuffers_serialize_fixture_8hpp_source.xhtml#l00025">ParserFlatbuffersSerializeFixture.hpp:25</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_to_space_nd_descriptor_xhtml_a02e143524aefddd40b485fcf7dea6696"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml#a02e143524aefddd40b485fcf7dea6696">armnn::BatchToSpaceNdDescriptor::m_BlockShape</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_BlockShape</div><div class="ttdoc">Block shape values. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00680">Descriptors.hpp:680</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser_xhtml_a29a2a153962a701843d5c8ae953cb032"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a29a2a153962a701843d5c8ae953cb032">armnnTfLiteParser::ITfLiteParser::Destroy</a></div><div class="ttdeci">static void Destroy(ITfLiteParser *parser)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l03059">TfLiteParser.cpp:3059</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00037">INetwork.hpp:37</a></div></div>
<div class="ttc" id="structarmnn_1_1_l2_normalization_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_l2_normalization_descriptor.xhtml">armnn::L2NormalizationDescriptor</a></div><div class="ttdoc">A L2NormalizationDescriptor for the L2NormalizationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00591">Descriptors.hpp:591</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a770b51078da02f44a819e9f95d8058b5"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">armnn::TensorInfo::GetQuantizationOffset</a></div><div class="ttdeci">int32_t GetQuantizationOffset() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00264">Tensor.cpp:264</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a047ca888c43bd7fb5702853bf72410d0"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">armnn::TensorInfo::GetQuantizationScale</a></div><div class="ttdeci">float GetQuantizationScale() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00247">Tensor.cpp:247</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_afe6c475f92d02dd1eb12acd746e4736f"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#afe6c475f92d02dd1eb12acd746e4736f">armnnTfLiteParser::TfLiteParser::GetOutputTensorIds</a></div><div class="ttdeci">static std::vector&lt; int32_t &gt; &amp; GetOutputTensorIds(const ModelPtr &amp;model, size_t subgraphIndex, size_t operatorIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02749">TfLiteParser.cpp:2749</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_aea909c7327109228ef618d459015def3"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">armnn::TensorInfo::GetDataType</a></div><div class="ttdeci">DataType GetDataType() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00095">Tensor.hpp:95</a></div></div>
<div class="ttc" id="structarmnn_1_1_origins_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_origins_descriptor.xhtml">armnn::OriginsDescriptor</a></div><div class="ttdoc">An OriginsDescriptor for the ConcatLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00147">Descriptors.hpp:147</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_base_xhtml_a86b749ce2c4bc627fa8a1fcfaf0e314f"><div class="ttname"><a href="classarmnn_1_1_optional_base.xhtml#a86b749ce2c4bc627fa8a1fcfaf0e314f">armnn::OptionalBase::has_value</a></div><div class="ttdeci">bool has_value() const noexcept</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00053">Optional.hpp:53</a></div></div>
<div class="ttc" id="structarmnn_1_1_fully_connected_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_fully_connected_descriptor.xhtml">armnn::FullyConnectedDescriptor</a></div><div class="ttdoc">A FullyConnectedDescriptor for the FullyConnectedLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00373">Descriptors.hpp:373</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_af996d82c47e43a16f4c8faa6c6b3e030"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#af996d82c47e43a16f4c8faa6c6b3e030">armnn::StridedSliceDescriptor::m_EllipsisMask</a></div><div class="ttdeci">int32_t m_EllipsisMask</div><div class="ttdoc">Ellipsis mask value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01056">Descriptors.hpp:1056</a></div></div>
<div class="ttc" id="structarmnn_1_1_fully_connected_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_fully_connected_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::FullyConnectedDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00386">Descriptors.hpp:386</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4afa662c6eb71caef475b2b981ce8eccd7">armnn::LayerType::Permute</a></div></div>
<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00199">Tensor.hpp:199</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser_xhtml_acf8cc929eadbabf197b36f7364d3d2cb"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#acf8cc929eadbabf197b36f7364d3d2cb">armnnTfLiteParser::ITfLiteParser::CreateRaw</a></div><div class="ttdeci">static ITfLiteParser * CreateRaw(const armnn::Optional&lt; TfLiteParserOptions &gt; &amp;options=armnn::EmptyOptional())</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l03049">TfLiteParser.cpp:3049</a></div></div>
<div class="ttc" id="structarmnn_1_1_check_location_xhtml"><div class="ttname"><a href="structarmnn_1_1_check_location.xhtml">armnn::CheckLocation</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00014">Exceptions.hpp:14</a></div></div>
<div class="ttc" id="_verification_helpers_8hpp_xhtml_a479b2821a7a2cbb8fa8eb7f60a47065d"><div class="ttname"><a href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a></div><div class="ttdeci">#define CHECK_VALID_SIZE(ACTUAL,...)</div><div class="ttdef"><b>Definition:</b> <a href="_verification_helpers_8hpp_source.xhtml#l00032">VerificationHelpers.hpp:32</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_a3a04b0ccee4bb2f21721ee5045e83df4"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a3a04b0ccee4bb2f21721ee5045e83df4">armnn::DetectionPostProcessDescriptor::m_NumClasses</a></div><div class="ttdeci">uint32_t m_NumClasses</div><div class="ttdoc">Number of classes. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00537">Descriptors.hpp:537</a></div></div>
<div class="ttc" id="_verification_helpers_8hpp_xhtml_aaef93dc9a69f51b59f3cdd0ff0165927"><div class="ttname"><a href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a></div><div class="ttdeci">#define CHECKED_NON_NEGATIVE(VALUE)</div><div class="ttdef"><b>Definition:</b> <a href="_verification_helpers_8hpp_source.xhtml#l00035">VerificationHelpers.hpp:35</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::TransposeConvolution2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01109">Descriptors.hpp:1109</a></div></div>
<div class="ttc" id="structarmnn_1_1_stand_in_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_stand_in_descriptor.xhtml">armnn::StandInDescriptor</a></div><div class="ttdoc">A StandInDescriptor for the StandIn layer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00980">Descriptors.hpp:980</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a37fa39012e90d568df7f774cd6d1e956"><div class="ttname"><a href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00033">NumericCast.hpp:33</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_a7ed9bc7c26df67d274d5dd4cd83adf0f"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a7ed9bc7c26df67d274d5dd4cd83adf0f">armnn::DetectionPostProcessDescriptor::m_UseRegularNms</a></div><div class="ttdeci">bool m_UseRegularNms</div><div class="ttdoc">Use Regular NMS. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00539">Descriptors.hpp:539</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::TransposeConvolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01119">Descriptors.hpp:1119</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_batch_nd_descriptor_xhtml_a02e143524aefddd40b485fcf7dea6696"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml#a02e143524aefddd40b485fcf7dea6696">armnn::SpaceToBatchNdDescriptor::m_BlockShape</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_BlockShape</div><div class="ttdoc">Block shape value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00801">Descriptors.hpp:801</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a0d53caff836b84204adbd1c28752a201"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a0d53caff836b84204adbd1c28752a201">armnn::StridedSliceDescriptor::m_Stride</a></div><div class="ttdeci">std::vector&lt; int &gt; m_Stride</div><div class="ttdoc">Stride values for the input that will be sliced. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01045">Descriptors.hpp:1045</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a58bfb9626d373249745d78b95543116e"><div class="ttname"><a href="namespacearmnn.xhtml#a58bfb9626d373249745d78b95543116e">armnn::IsActivationSupported</a></div><div class="ttdeci">bool IsActivationSupported(const BackendId &amp;backend, const TensorInfo &amp;input, const TensorInfo &amp;output, const ActivationDescriptor &amp;descriptor, char *reasonIfUnsupported=nullptr, size_t reasonIfUnsupportedMaxLength=1024)</div><div class="ttdoc">Deprecated in favor of IBackend and ILayerSupport interfaces. </div><div class="ttdef"><b>Definition:</b> <a href="_layer_support_8cpp_source.xhtml#l00069">LayerSupport.cpp:69</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a></div><div class="ttdoc">An ActivationDescriptor for the ActivationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00020">Descriptors.hpp:20</a></div></div>
<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00192">Exceptions.hpp:192</a></div></div>
<div class="ttc" id="structarmnn_1_1_stack_descriptor_xhtml_aed6086070440ceb94129bef06f70173f"><div class="ttname"><a href="structarmnn_1_1_stack_descriptor.xhtml#aed6086070440ceb94129bef06f70173f">armnn::StackDescriptor::m_NumInputs</a></div><div class="ttdeci">uint32_t m_NumInputs</div><div class="ttdoc">Number of input tensors. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00974">Descriptors.hpp:974</a></div></div>
<div class="ttc" id="structarmnn_1_1_slice_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_slice_descriptor.xhtml">armnn::SliceDescriptor</a></div><div class="ttdoc">A SliceDescriptor for the SliceLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00927">Descriptors.hpp:927</a></div></div>
<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00173">Types.hpp:173</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Convolution2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00432">Descriptors.hpp:432</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a8b4b0b88a5e79a88b8b60db76398f575"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">armnnTfLiteParser::TfLiteParser::GetInputTensorIds</a></div><div class="ttdeci">static std::vector&lt; int32_t &gt; &amp; GetInputTensorIds(const ModelPtr &amp;model, size_t subgraphIndex, size_t operatorIndex)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02739">TfLiteParser.cpp:2739</a></div></div>
<div class="ttc" id="_logging_8hpp_xhtml"><div class="ttname"><a href="_logging_8hpp.xhtml">Logging.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Pooling2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00369">Descriptors.hpp:369</a></div></div>
<div class="ttc" id="_tf_lite_parser_8cpp_xhtml_ae38d96fe05581ea025713b3e781c5a43"><div class="ttname"><a href="_tf_lite_parser_8cpp.xhtml#ae38d96fe05581ea025713b3e781c5a43">CHECK_TENSOR_PTR</a></div><div class="ttdeci">#define CHECK_TENSOR_PTR(TENSOR_PTR)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00172">TfLiteParser.cpp:172</a></div></div>
<div class="ttc" id="_parser_helper_8hpp_xhtml"><div class="ttname"><a href="_parser_helper_8hpp.xhtml">ParserHelper.hpp</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_aa61510cbd529870182e918ac6e8b9d72"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#aa61510cbd529870182e918ac6e8b9d72">armnn::DetectionPostProcessDescriptor::m_ScaleH</a></div><div class="ttdeci">float m_ScaleH</div><div class="ttdoc">Center size encoding scale height. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00547">Descriptors.hpp:547</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_aa68194dd6258ab5b04123005a066ea25"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#aa68194dd6258ab5b04123005a066ea25">armnn::StridedSliceDescriptor::m_End</a></div><div class="ttdeci">std::vector&lt; int &gt; m_End</div><div class="ttdoc">End values for the input that will be sliced. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01043">Descriptors.hpp:1043</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_batch_nd_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_space_to_batch_nd_descriptor.xhtml">armnn::SpaceToBatchNdDescriptor</a></div><div class="ttdoc">A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00778">Descriptors.hpp:778</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_a017b2990003a014234f13e999dc7c689"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">armnn::ActivationDescriptor::m_A</a></div><div class="ttdeci">float m_A</div><div class="ttdoc">Alpha upper bound value used by the activation functions. (BoundedReLu, Linear, TanH). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00037">Descriptors.hpp:37</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">armnn::Convolution2dDescriptor::m_DilationX</a></div><div class="ttdeci">uint32_t m_DilationX</div><div class="ttdoc">Dilation along x axis. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00434">Descriptors.hpp:434</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::TransposeConvolution2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01105">Descriptors.hpp:1105</a></div></div>
<div class="ttc" id="structarmnn_1_1_empty_optional_xhtml"><div class="ttname"><a href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a></div><div class="ttdoc">EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00032">Optional.hpp:32</a></div></div>
<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_aa0a90d432c9c41f9846f41f11c9e54c9"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aa0a90d432c9c41f9846f41f11c9e54c9">armnnTfLiteParser::TfLiteParser::OutputShapeOfSqueeze</a></div><div class="ttdeci">static armnn::TensorInfo OutputShapeOfSqueeze(const std::vector&lt; uint32_t &gt; &amp;squeezeDims, const armnn::TensorInfo &amp;inputTensorInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l01463">TfLiteParser.cpp:1463</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::TransposeConvolution2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01113">Descriptors.hpp:1113</a></div></div>
<div class="ttc" id="_tf_lite_parser_8cpp_xhtml_ac578671d13bca92fee7f492110247cbf"><div class="ttname"><a href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a></div><div class="ttdeci">#define CHECK_SUPPORTED_FUSED_ACTIVATION(OPTION, SUBGRAPH_INDEX, OPERATOR_INDEX)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00259">TfLiteParser.cpp:259</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a0031997bf43bd2747656c31e4977793a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">armnn::Pooling2dDescriptor::m_PoolType</a></div><div class="ttdeci">PoolingAlgorithm m_PoolType</div><div class="ttdoc">The pooling algorithm to use (Max. Average, L2). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00347">Descriptors.hpp:347</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::DepthwiseConvolution2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00484">Descriptors.hpp:484</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::TransposeConvolution2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01115">Descriptors.hpp:1115</a></div></div>
<div class="ttc" id="structarmnn_1_1_batch_to_space_nd_descriptor_xhtml_a3941f674c071c9503e00d2b59e92e454"><div class="ttname"><a href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml#a3941f674c071c9503e00d2b59e92e454">armnn::BatchToSpaceNdDescriptor::m_Crops</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; unsigned int, unsigned int &gt; &gt; m_Crops</div><div class="ttdoc">The values to crop from the input dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00682">Descriptors.hpp:682</a></div></div>
<div class="ttc" id="_descriptors_8hpp_xhtml"><div class="ttname"><a href="_descriptors_8hpp.xhtml">Descriptors.hpp</a></div></div>
<div class="ttc" id="_exceptions_8hpp_xhtml"><div class="ttname"><a href="_exceptions_8hpp.xhtml">Exceptions.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00043">Tensor.hpp:43</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_affb5b68b3eba3ed45a06c7cde7781962"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#affb5b68b3eba3ed45a06c7cde7781962">armnn::Pooling2dDescriptor::m_OutputShapeRounding</a></div><div class="ttdeci">OutputShapeRounding m_OutputShapeRounding</div><div class="ttdoc">The rounding method for the output shape. (Floor, Ceiling). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00365">Descriptors.hpp:365</a></div></div>
<div class="ttc" id="structarmnn_1_1_origins_descriptor_xhtml_a5b192c5fcd96a0f75542524cf646b355"><div class="ttname"><a href="structarmnn_1_1_origins_descriptor.xhtml#a5b192c5fcd96a0f75542524cf646b355">armnn::OriginsDescriptor::SetConcatAxis</a></div><div class="ttdeci">void SetConcatAxis(unsigned int concatAxis)</div><div class="ttdoc">Set the concatenation axis value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00150">Descriptors.cpp:150</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_aaafbda6e6816876b3d7963cfe64dd2f8"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">armnnTfLiteParser::TfLiteParser::BufferRawPtr</a></div><div class="ttdeci">const tflite::BufferT * BufferRawPtr</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8hpp_source.xhtml#l00033">TfLiteParser.hpp:33</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
<div class="ttc" id="namespacearmnn_xhtml_a9a2af2f8c4af4f9efa8e79417d505ac4"><div class="ttname"><a href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4">armnn::ResizeMethod</a></div><div class="ttdeci">ResizeMethod</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00103">Types.hpp:103</a></div></div>
<div class="ttc" id="structarmnn_1_1_mean_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_mean_descriptor.xhtml">armnn::MeanDescriptor</a></div><div class="ttdoc">A MeanDescriptor for the MeanLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00877">Descriptors.hpp:877</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a58501692772880e7ef55485a4c95aab9"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a58501692772880e7ef55485a4c95aab9">armnnTfLiteParser::TfLiteParser::GetSubgraphInputTensorNames</a></div><div class="ttdeci">virtual std::vector&lt; std::string &gt; GetSubgraphInputTensorNames(size_t subgraphId) const override</div><div class="ttdoc">Return the input tensor names for a given subgraph. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l03023">TfLiteParser.cpp:3023</a></div></div>
<div class="ttc" id="namespacearmnn_tf_lite_parser_xhtml_a9084adbf804022c874039ad40d1939e9"><div class="ttname"><a href="namespacearmnn_tf_lite_parser.xhtml#a9084adbf804022c874039ad40d1939e9">armnnTfLiteParser::BindingPointInfo</a></div><div class="ttdeci">armnn::BindingPointInfo BindingPointInfo</div><div class="ttdef"><b>Definition:</b> <a href="_i_tf_lite_parser_8hpp_source.xhtml#l00020">ITfLiteParser.hpp:20</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::TransposeConvolution2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01107">Descriptors.hpp:1107</a></div></div>
<div class="ttc" id="namespacearmnn_tf_lite_parser_xhtml"><div class="ttname"><a href="namespacearmnn_tf_lite_parser.xhtml">armnnTfLiteParser</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_tf_lite_parser_8hpp_source.xhtml#l00017">ITfLiteParser.hpp:17</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_transpose_descriptor.xhtml">armnn::TransposeDescriptor</a></div><div class="ttdoc">A TransposeDescriptor for the TransposeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01123">Descriptors.hpp:1123</a></div></div>
<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml">armnn::StridedSliceDescriptor</a></div><div class="ttdoc">A StridedSliceDescriptor for the StridedSliceLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01002">Descriptors.hpp:1002</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_afcc1c3a20bd2860e0ddd21674389246f"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">armnn::IConnectableLayer::GetName</a></div><div class="ttdeci">virtual const char * GetName() const =0</div><div class="ttdoc">Returns the name of the layer. </div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_ab97e69d07f06e392bd0cc2e5bcbf1be6"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ab97e69d07f06e392bd0cc2e5bcbf1be6">armnnTfLiteParser::TfLiteParser::GetSubgraphOutputTensorNames</a></div><div class="ttdeci">virtual std::vector&lt; std::string &gt; GetSubgraphOutputTensorNames(size_t subgraphId) const override</div><div class="ttdoc">Return the output tensor names for a given subgraph. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l03036">TfLiteParser.cpp:3036</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_a7a2156ec7d9c012ce00bbcc6afcb9028"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a7a2156ec7d9c012ce00bbcc6afcb9028">armnn::DetectionPostProcessDescriptor::m_ScaleY</a></div><div class="ttdeci">float m_ScaleY</div><div class="ttdoc">Center size encoding scale y. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00543">Descriptors.hpp:543</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml_a4392dd6b4862cc9cf95ae8f1001ba592"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml#a4392dd6b4862cc9cf95ae8f1001ba592">armnn::DetectionPostProcessDescriptor::m_NmsScoreThreshold</a></div><div class="ttdeci">float m_NmsScoreThreshold</div><div class="ttdoc">NMS score threshold. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00533">Descriptors.hpp:533</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ace74f6f9feb95a964a49d79458232703"><div class="ttname"><a href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; INetwork, void(*)(INetwork *network)&gt; INetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00101">INetwork.hpp:101</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
<div class="ttc" id="structarmnn_1_1_check_location_xhtml_a46e3b4b140e2c550342337b5fcceb9c6"><div class="ttname"><a href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">armnn::CheckLocation::m_Function</a></div><div class="ttdeci">const char * m_Function</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00016">Exceptions.hpp:16</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml">armnn::Pooling2dDescriptor</a></div><div class="ttdoc">A Pooling2dDescriptor for the Pooling2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00313">Descriptors.hpp:313</a></div></div>
<div class="ttc" id="_file_only_profiling_decorator_tests_8cpp_xhtml_a6560146509197f3e197d8d36f76c1347"><div class="ttname"><a href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a></div><div class="ttdeci">armnn::Runtime::CreationOptions::ExternalProfilingOptions options</div><div class="ttdef"><b>Definition:</b> <a href="_file_only_profiling_decorator_tests_8cpp_source.xhtml#l00045">FileOnlyProfilingDecoratorTests.cpp:45</a></div></div>
<div class="ttc" id="structarmnn_1_1_detection_post_process_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_detection_post_process_descriptor.xhtml">armnn::DetectionPostProcessDescriptor</a></div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00495">Descriptors.hpp:495</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_abfc86471394295357a23b3addd0b5b1c"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#abfc86471394295357a23b3addd0b5b1c">armnnTfLiteParser::TfLiteParser::ModelPtr</a></div><div class="ttdeci">std::unique_ptr&lt; tflite::ModelT &gt; ModelPtr</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8hpp_source.xhtml#l00023">TfLiteParser.hpp:23</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00092">Tensor.hpp:92</a></div></div>
<div class="ttc" id="_tf_lite_parser_8cpp_xhtml_ae6440b8ea95cf981cd7bbffa52c22fe1"><div class="ttname"><a href="_tf_lite_parser_8cpp.xhtml#ae6440b8ea95cf981cd7bbffa52c22fe1">CHECK_BUFFER_SIZE</a></div><div class="ttdeci">#define CHECK_BUFFER_SIZE(BUFFER_PTR, TENSOR_INFO, BUFFER_ID)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00238">TfLiteParser.cpp:238</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_a28c4c9cb15f6be3499abbc46b356060b"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">armnn::ActivationDescriptor::m_B</a></div><div class="ttdeci">float m_B</div><div class="ttdoc">Beta lower bound value used by the activation functions. (BoundedReLu, Linear, TanH). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00039">Descriptors.hpp:39</a></div></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="ttc" id="structarmnn_1_1_softmax_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_softmax_descriptor.xhtml">armnn::SoftmaxDescriptor</a></div><div class="ttdoc">A SoftmaxDescriptor for the SoftmaxLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00123">Descriptors.hpp:123</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_ac3486e6c1a291aa67efd8b280ffb83cc"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">armnnTfLiteParser::TfLiteParser::TensorRawPtr</a></div><div class="ttdeci">const tflite::TensorT * TensorRawPtr</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8hpp_source.xhtml#l00028">TfLiteParser.hpp:28</a></div></div>
<div class="ttc" id="structarmnn_1_1_views_descriptor_xhtml_a2b125117aa61f9baf3a9cb8658aa61a2"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.xhtml#a2b125117aa61f9baf3a9cb8658aa61a2">armnn::ViewsDescriptor::SetViewOriginCoord</a></div><div class="ttdeci">Status SetViewOriginCoord(uint32_t view, uint32_t coord, uint32_t value)</div><div class="ttdoc">Set the view origin coordinates. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.xhtml#l00302">Descriptors.cpp:302</a></div></div>
<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_af10fa7883e3579950f477bee92a64844"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">armnn::ActivationDescriptor::m_Function</a></div><div class="ttdeci">ActivationFunction m_Function</div><div class="ttdoc">The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00035">Descriptors.hpp:35</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_aadad81a95152fe5aad839db352d4012c"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#aadad81a95152fe5aad839db352d4012c">armnnTfLiteParser::TfLiteParser::OperatorPtr</a></div><div class="ttdeci">std::unique_ptr&lt; tflite::OperatorT &gt; OperatorPtr</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8hpp_source.xhtml#l00025">TfLiteParser.hpp:25</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_input_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_input_slot.xhtml">armnn::IInputSlot</a></div><div class="ttdoc">An input connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00024">INetwork.hpp:24</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a2ed4853234865d838da50085da99b2a6"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a2ed4853234865d838da50085da99b2a6">armnnTfLiteParser::TfLiteParser::TfLiteParser</a></div><div class="ttdeci">TfLiteParser(const armnn::Optional&lt; ITfLiteParser::TfLiteParserOptions &gt; &amp;options=armnn::EmptyOptional())</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l00488">TfLiteParser.cpp:488</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Pooling2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00363">Descriptors.hpp:363</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">armnn::DepthwiseConvolution2dDescriptor</a></div><div class="ttdoc">A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00444">Descriptors.hpp:444</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_abdcd184ed3bd648bb31d385040cafd5d"><div class="ttname"><a href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">armnn::MaxNumOfTensorDimensions</a></div><div class="ttdeci">constexpr unsigned int MaxNumOfTensorDimensions</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00018">Types.hpp:18</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Convolution2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00422">Descriptors.hpp:422</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8846406ac37fbd2204f0be16ee05d5b7"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">armnn::TensorInfo::GetNumElements</a></div><div class="ttdeci">unsigned int GetNumElements() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00093">Tensor.hpp:93</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9ea"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">armnn::ActivationFunction</a></div><div class="ttdeci">ActivationFunction</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00055">Types.hpp:55</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_xhtml_a86428e0c674542488c7292dfbe2ce381"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser.xhtml#a86428e0c674542488c7292dfbe2ce381">armnnTfLiteParser::TfLiteParser::TensorIdRawPtrVector</a></div><div class="ttdeci">std::vector&lt; TensorIdRawPtr &gt; TensorIdRawPtrVector</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8hpp_source.xhtml#l00031">TfLiteParser.hpp:31</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::DepthwiseConvolution2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00476">Descriptors.hpp:476</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_510324e450b9df55f9aac2d01fae83d8.xhtml">armnnTfLiteParser</a></li><li class="navelem"><a class="el" href="_tf_lite_parser_8cpp.xhtml">TfLiteParser.cpp</a></li>
    <li class="footer">Generated on Fri Mar 13 2020 16:09:10 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>