aboutsummaryrefslogtreecommitdiff
path: root/21.02/_tf_lite_parser_8cpp_source.xhtml
blob: d4f02492db8f6e1ea437f6cebb3063a5479ce03b (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
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
<!-- 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">21.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 and Contributors. 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 &quot;<a class="code" href="include_2armnn_tf_lite_parser_2_version_8hpp.xhtml">armnnTfLiteParser/Version.hpp</a>&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_backend_options_8hpp.xhtml">armnn/BackendOptions.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="_descriptors_8hpp.xhtml">armnn/Descriptors.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="_exceptions_8hpp.xhtml">armnn/Exceptions.hpp</a>&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</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="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_tensor_8hpp.xhtml">armnn/Tensor.hpp</a>&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_tensor_utils_8hpp.xhtml">armnnUtils/TensorUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</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="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_assert_8hpp.xhtml">armnn/utility/Assert.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="_ignore_unused_8hpp.xhtml">armnn/utility/IgnoreUnused.hpp</a>&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_numeric_cast_8hpp.xhtml">armnn/utility/NumericCast.hpp</a>&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment">// armnnUtils:</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</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="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_filesystem_8hpp.xhtml">Filesystem.hpp</a>&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;<a class="code" href="_parser_helper_8hpp.xhtml">ParserHelper.hpp</a>&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</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="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">// The generated code based on the Tf Lite schema:</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;schema_generated.h&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &lt;flatbuffers/flexbuffers.h&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#include &lt;fmt/format.h&gt;</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#include &lt;numeric&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#a5fc762bb40634f39ff6ff4e23005a3a9">   42</a></span>&#160;<span class="preprocessor">#define ARMNN_THROW_PARSE_EXCEPTION(msg) \</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">          { \</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</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="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">               &lt;&lt; &quot;: &quot; \</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">               &lt;&lt; CHECK_LOCATION().AsString()).str()); \</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">          }</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;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</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="l00051"></a><span class="lineno">   51</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn_tf_lite_parser.xhtml">armnnTfLiteParser</a></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;{</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;ITfLiteParser::ITfLiteParser(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;TfLiteParserOptions&gt;</a>&amp; options) :</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    pTfLiteParserImpl(<span class="keyword">new</span> TfLiteParserImpl(options)) {}</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;ITfLiteParser::~ITfLiteParser() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#acf8cc929eadbabf197b36f7364d3d2cb">   59</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml">ITfLiteParser</a>* ITfLiteParser::CreateRaw(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;TfLiteParserOptions&gt;</a>&amp; options)</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml">ITfLiteParser</a>(options);</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;}</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a9932449a89a62cfcfd72a4fedbee1ab7">   64</a></span>&#160;<a class="code" href="namespacearmnn_tf_lite_parser.xhtml#af69bedce3c37be895f75146016ba8a17">ITfLiteParserPtr</a> ITfLiteParser::Create(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt;TfLiteParserOptions&gt;</a>&amp; options)</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;{</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacearmnn_tf_lite_parser.xhtml#af69bedce3c37be895f75146016ba8a17">ITfLiteParserPtr</a>(CreateRaw(options), &amp;ITfLiteParser::Destroy);</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;}</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"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a29a2a153962a701843d5c8ae953cb032">   69</a></span>&#160;<span class="keywordtype">void</span> ITfLiteParser::Destroy(<a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml">ITfLiteParser</a>* parser)</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;{</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keyword">delete</span> parser;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;}</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a6bf5861864c8828e59df24a7868c5439">   74</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a> ITfLiteParser::CreateNetworkFromBinaryFile(<span class="keyword">const</span> <span class="keywordtype">char</span>* graphFile)</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;{</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keywordflow">return</span> pTfLiteParserImpl-&gt;<a class="code" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a6bf5861864c8828e59df24a7868c5439">CreateNetworkFromBinaryFile</a>(graphFile);</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="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#aaa88c7afbe8e8f777d05f99a2a540a99">   79</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a> ITfLiteParser::CreateNetworkFromBinary(<span class="keyword">const</span> std::vector&lt;uint8_t&gt; &amp; binaryContent)</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;{</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">return</span> pTfLiteParserImpl-&gt;CreateNetworkFromBinary(binaryContent);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;}</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a913d452e7766210b59a69d3c658b2862">   84</a></span>&#160;<a class="code" href="namespacearmnn_tf_lite_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> ITfLiteParser::GetNetworkInputBindingInfo(<span class="keywordtype">size_t</span> subgraphId,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                                                           <span class="keyword">const</span> std::string&amp; name)<span class="keyword"> const</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="keywordflow">return</span> pTfLiteParserImpl-&gt;GetNetworkInputBindingInfo(subgraphId, name);</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;</div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a59139faede3a07a43c4c8f86bb03dc43">   90</a></span>&#160;<a class="code" href="namespacearmnn_tf_lite_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> ITfLiteParser::GetNetworkOutputBindingInfo(<span class="keywordtype">size_t</span> subgraphId,</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                                                            <span class="keyword">const</span> std::string&amp; name)<span class="keyword"> const</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    <span class="keywordflow">return</span> pTfLiteParserImpl-&gt;GetNetworkOutputBindingInfo(subgraphId, name);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;}</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a1b7aed8466cc5792966d271a65285d0e">   96</a></span>&#160;<span class="keywordtype">size_t</span> ITfLiteParser::GetSubgraphCount()<span class="keyword"> const</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="keywordflow">return</span> pTfLiteParserImpl-&gt;GetSubgraphCount();</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;}</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"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#afe1ea028d8fcb9942c204d4415ff3319">  101</a></span>&#160;std::vector&lt;std::string&gt; ITfLiteParser::GetSubgraphInputTensorNames(<span class="keywordtype">size_t</span> subgraphId)<span class="keyword"> const</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keywordflow">return</span> pTfLiteParserImpl-&gt;GetSubgraphInputTensorNames(subgraphId);</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;}</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a949070abe70fabe18cc1eb29d5853f47">  106</a></span>&#160;std::vector&lt;std::string&gt; ITfLiteParser::GetSubgraphOutputTensorNames(<span class="keywordtype">size_t</span> subgraphId)<span class="keyword"> const</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <span class="keywordflow">return</span> pTfLiteParserImpl-&gt;GetSubgraphOutputTensorNames(subgraphId);</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;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="keyword">namespace</span></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;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</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="l00115"></a><span class="lineno">  115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="keywordtype">void</span> CheckSubgraph(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">TfLiteParserImpl::ModelPtr</a> &amp; model,</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;                   <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00118"></a><span class="lineno">  118</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="l00119"></a><span class="lineno">  119</span>&#160;{</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordflow">if</span> (model.get() == <span class="keyword">nullptr</span>)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;            fmt::format(<span class="stringliteral">&quot;{} was called with invalid (null) model. &quot;</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</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="l00125"></a><span class="lineno">  125</span>&#160;                        <span class="stringliteral">&quot;subgraph:{} at {}&quot;</span>,</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a>,</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;                        subgraphIndex,</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    }</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (subgraphIndex &gt;= model-&gt;subgraphs.size())</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;            fmt::format(<span class="stringliteral">&quot;{} was called with an invalid subgraph index. &quot;</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;                        <span class="stringliteral">&quot;subgraph:{} at {}&quot;</span>,</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a>,</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;                        subgraphIndex,</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    }</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;</div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">  141</a></span>&#160;<span class="preprocessor">#define CHECK_SUBGRAPH(MODEL, SUBGRAPH_INDEX) \</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="preprocessor">    CheckSubgraph(MODEL, SUBGRAPH_INDEX, CHECK_LOCATION())</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="keywordtype">void</span> CheckModel(<span class="keyword">const</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">TfLiteParserImpl::ModelPtr</a> &amp; model,</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;                <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;                <span class="keywordtype">size_t</span> operatorIndex,</div><div class="line"><a name="l00147"></a><span class="lineno">  147</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="l00148"></a><span class="lineno">  148</span>&#160;{</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <span class="keywordflow">if</span> (model.get() == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    {</div><div class="line"><a name="l00151"></a><span class="lineno">  151</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="l00152"></a><span class="lineno">  152</span>&#160;            fmt::format(<span class="stringliteral">&quot;{} was called with invalid (null) model. &quot;</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</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="l00154"></a><span class="lineno">  154</span>&#160;                        <span class="stringliteral">&quot;subgraph:{} operator:{} at {}&quot;</span>,</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a>,</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;                        subgraphIndex,</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;                        operatorIndex,</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</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">else</span> <span class="keywordflow">if</span> (subgraphIndex &gt;= model-&gt;subgraphs.size())</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;            fmt::format(<span class="stringliteral">&quot;{} was called with an invalid subgraph index. &quot;</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;                        <span class="stringliteral">&quot;subgraph:{} operator:{} at {}&quot;</span>,</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a>,</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;                        subgraphIndex,</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;                        operatorIndex,</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</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;    <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="l00171"></a><span class="lineno">  171</span>&#160;             operatorIndex != VIRTUAL_OPERATOR_ID)</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    {</div><div class="line"><a name="l00173"></a><span class="lineno">  173</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="l00174"></a><span class="lineno">  174</span>&#160;            fmt::format(<span class="stringliteral">&quot;{} was called with an invalid operator index. &quot;</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;                        <span class="stringliteral">&quot;subgraph:{} operator:{} at {}&quot;</span>,</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a>,</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;                        subgraphIndex,</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;                        operatorIndex,</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</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;}</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">  183</a></span>&#160;<span class="preprocessor">#define CHECK_MODEL(MODEL, SUBGRAPH_INDEX, OPERATOR_INDEX) \</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="preprocessor">    CheckModel(MODEL, SUBGRAPH_INDEX, OPERATOR_INDEX, CHECK_LOCATION())</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</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">TfLiteParserImpl::ModelPtr</a> &amp; model,</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                 <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;                 <span class="keywordtype">size_t</span> tensorIndex,</div><div class="line"><a name="l00189"></a><span class="lineno">  189</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="l00190"></a><span class="lineno">  190</span>&#160;{</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="comment">// not checking model, because I assume CHECK_MODEL already run</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    <span class="comment">// and checked that. An assert would do.</span></div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(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="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="comment">// also subgraph index should be checked by CHECK_MODEL so</span></div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    <span class="comment">// I only add an assert here</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(subgraphIndex &lt; model-&gt;subgraphs.size(), <span class="stringliteral">&quot;Expecting a valid subgraph index&quot;</span>);</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="comment">// the tensor index is the only one to check here</span></div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <span class="keywordflow">if</span> (tensorIndex &gt;= model-&gt;subgraphs[subgraphIndex]-&gt;tensors.size())</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;            fmt::format(<span class="stringliteral">&quot;{} was called with an invalid tensor index. &quot;</span></div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;                        <span class="stringliteral">&quot;subgraph:{} tensor:{} at {}&quot;</span>,</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a>,</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;                        subgraphIndex,</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;                        tensorIndex,</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</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">  210</span>&#160;}</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">  212</a></span>&#160;<span class="preprocessor">#define CHECK_TENSOR(MODEL, SUBGRAPH_INDEX, TENSOR_INDEX) \</span></div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="preprocessor">    CheckTensor(MODEL, SUBGRAPH_INDEX, TENSOR_INDEX, CHECK_LOCATION())</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="keywordtype">void</span> CheckTensorPtr(<a class="code" href="namespacearmnn_deserializer.xhtml#a80888061963ddd18e87105807a035d9a">TfLiteParserImpl::TensorRawPtr</a> rawPtr,</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> (rawPtr == <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;            fmt::format(<span class="stringliteral">&quot;{} was called with a null tensor pointer at {}&quot;</span>, location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a>, location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    }</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;}</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#ae38d96fe05581ea025713b3e781c5a43">  225</a></span>&#160;<span class="preprocessor">#define CHECK_TENSOR_PTR(TENSOR_PTR) \</span></div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="preprocessor">    CheckTensorPtr(TENSOR_PTR, CHECK_LOCATION())</span></div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="keywordtype">void</span> CheckBuffer(<span class="keyword">const</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">TfLiteParserImpl::ModelPtr</a> &amp; model,</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;                 <span class="keywordtype">size_t</span> bufferIndex,</div><div class="line"><a name="l00230"></a><span class="lineno">  230</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="l00231"></a><span class="lineno">  231</span>&#160;{</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keywordflow">if</span> (model.get() == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    {</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>(</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;            fmt::format(<span class="stringliteral">&quot;{} was called with invalid (null) model. &quot;</span></div><div class="line"><a name="l00236"></a><span class="lineno">  236</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="l00237"></a><span class="lineno">  237</span>&#160;                        <span class="stringliteral">&quot;buffer:{} at {}&quot;</span>,</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a>,</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;                        bufferIndex,</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    }</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bufferIndex &gt;= model-&gt;buffers.size())</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    {</div><div class="line"><a name="l00244"></a><span class="lineno">  244</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="l00245"></a><span class="lineno">  245</span>&#160;            fmt::format(<span class="stringliteral">&quot;{} was called with an invalid buffer index. &quot;</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;                        <span class="stringliteral">&quot;buffer index:{} at {}&quot;</span>,</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a46e3b4b140e2c550342337b5fcceb9c6">m_Function</a>,</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;                        bufferIndex,</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#ac1184445a1323e07e0da084a54aec535">FileLine</a>()));</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    }</div><div class="line"><a name="l00251"></a><span class="lineno">  251</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="l00252"></a><span class="lineno">  252</span>&#160;    {</div><div class="line"><a name="l00253"></a><span class="lineno">  253</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="l00254"></a><span class="lineno">  254</span>&#160;            fmt::format(<span class="stringliteral">&quot;The buffer #{} is null. {}&quot;</span>,</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;                        bufferIndex,</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">AsString</a>()));</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">  259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#a7c88d54e3f895030c70330a4c9d76a7a">  260</a></span>&#160;<span class="preprocessor">#define CHECK_BUFFER(MODEL, BUFFER_INDEX) \</span></div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="preprocessor">    CheckBuffer(MODEL, BUFFER_INDEX, CHECK_LOCATION())</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<span class="keywordtype">void</span> CheckBufferSize(TfLiteParserImpl::BufferRawPtr bufferPtr,</div><div class="line"><a name="l00264"></a><span class="lineno">  264</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="l00265"></a><span class="lineno">  265</span>&#160;                     uint32_t bufferId,</div><div class="line"><a name="l00266"></a><span class="lineno">  266</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="l00267"></a><span class="lineno">  267</span>&#160;{</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    <span class="keywordflow">if</span> (bufferPtr == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    {</div><div class="line"><a name="l00270"></a><span class="lineno">  270</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="l00271"></a><span class="lineno">  271</span>&#160;            fmt::format(<span class="stringliteral">&quot;BufferPtr is null for buffer:{}. {}&quot;</span>,</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;                        bufferId,</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;                        location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">AsString</a>()));</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    }</div><div class="line"><a name="l00275"></a><span class="lineno">  275</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="l00276"></a><span class="lineno">  276</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="l00277"></a><span class="lineno">  277</span>&#160;    {</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</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="l00280"></a><span class="lineno">  280</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="l00281"></a><span class="lineno">  281</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="l00282"></a><span class="lineno">  282</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="l00283"></a><span class="lineno">  283</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="l00284"></a><span class="lineno">  284</span>&#160;    }</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;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#ae6440b8ea95cf981cd7bbffa52c22fe1">  287</a></span>&#160;<span class="preprocessor">#define CHECK_BUFFER_SIZE(BUFFER_PTR, TENSOR_INFO, BUFFER_ID) \</span></div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;<span class="preprocessor">    CheckBufferSize(BUFFER_PTR, TENSOR_INFO, BUFFER_ID, CHECK_LOCATION())</span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</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="l00291"></a><span class="lineno">  291</span>&#160;{</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <span class="keywordflow">switch</span>(activationType)</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    {</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_NONE:</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU:</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU6:</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_TANH:</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;        {</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</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;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        {</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;        }</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;}</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">  308</a></span>&#160;<span class="preprocessor">#define CHECK_SUPPORTED_FUSED_ACTIVATION(OPTION, SUBGRAPH_INDEX, OPERATOR_INDEX) \</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;<span class="preprocessor">    do { \</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<span class="preprocessor">        if (IsActivationSupported(OPTION-&gt;fused_activation_function) == false) \</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;<span class="preprocessor">        { \</span></div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<span class="preprocessor">            throw ParseException( \</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;<span class="preprocessor">                fmt::format(&quot;TfLite parser doesn&#39;t suppport fused activation: &quot; \</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;<span class="preprocessor">                            &quot;{}/{} in {} subgraph:{} operator:{} at {}&quot;, \</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;<span class="preprocessor">                            OPTION-&gt;fused_activation_function, \</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;<span class="preprocessor">                            tflite::EnumNameActivationFunctionType(\</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;<span class="preprocessor">                            OPTION-&gt;fused_activation_function), \</span></div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;<span class="preprocessor">                            __func__, \</span></div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;<span class="preprocessor">                            SUBGRAPH_INDEX, \</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="preprocessor">                            OPERATOR_INDEX, \</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;<span class="preprocessor">                            CHECK_LOCATION().FileLine())); \</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="preprocessor">        } \</span></div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;<span class="preprocessor">    } while(false)</span></div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</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="l00327"></a><span class="lineno">  327</span>&#160;{</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    std::vector&lt;unsigned int&gt; result;</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    result.reserve(in.size());</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp; i : in)</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;        result.push_back(<a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(i));</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="keywordflow">return</span> result;</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;}</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="keywordtype">void</span> <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">CalcPadding</a>(uint32_t inputSize,</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;                 uint32_t filterSize,</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;                 uint32_t stride,</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;                 uint32_t dilation,</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;                 uint32_t&amp; paddingFront,</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;                 uint32_t&amp; paddingBack,</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;                 tflite::Padding padding)</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;    paddingFront = 0;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    paddingBack = 0;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="keywordflow">if</span> (padding == tflite::Padding_SAME)</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    {</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;        uint32_t outputSize = (inputSize + stride - 1) / stride;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;        uint32_t dilatedSize = filterSize + (dilation - 1) * (filterSize - 1);</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;        uint32_t temp = (outputSize - 1) * stride + dilatedSize;</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;        <span class="keywordflow">if</span> (temp &gt; inputSize)</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;        {</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;            paddingFront = (temp - inputSize) / 2;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;            paddingBack = (temp - inputSize) - paddingFront;</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;    }</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;}</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;<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(<a class="code" href="namespacearmnn_deserializer.xhtml#a80888061963ddd18e87105807a035d9a">TfLiteParserImpl::TensorRawPtr</a> tensorPtr,</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;                               <span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; shapes,</div><div class="line"><a name="l00362"></a><span class="lineno">  362</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="l00363"></a><span class="lineno">  363</span>&#160;                               <span class="keyword">const</span> <span class="keywordtype">bool</span> outputTensor = <span class="keyword">false</span>)</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;{</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a> type;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ae38d96fe05581ea025713b3e781c5a43">CHECK_TENSOR_PTR</a>(tensorPtr);</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">switch</span> (tensorPtr-&gt;type)</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;        <span class="keywordflow">case</span> tflite::TensorType_UINT8:</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;            type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>;</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_FLOAT32:</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;            type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>;</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_INT8:</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">// Per-tensor</span></div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;                type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>;</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;            }</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;            <span class="keywordflow">else</span></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;                <span class="comment">// Per-channel</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;                type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a>;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;            }</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_INT16:</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;            type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a053c769dcf82d66ef326c86980c02ba7">armnn::DataType::QSymmS16</a>;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_INT32:</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;            type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>;</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;        <span class="keywordflow">case</span> tflite::TensorType_INT64:</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;            type = <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">armnn::DataType::Signed64</a>;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;        {</div><div class="line"><a name="l00399"></a><span class="lineno">  399</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="l00400"></a><span class="lineno">  400</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="l00401"></a><span class="lineno">  401</span>&#160;                fmt::format(<span class="stringliteral">&quot;Unsupported data type {} = {} for tensor: {}. {}&quot;</span>,</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;                            tensorPtr-&gt;type,</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;                            tflite::EnumNameTensorType(tensorPtr-&gt;type),</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;                            tensorPtr-&gt;name,</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;                            location.<a class="code" href="structarmnn_1_1_check_location.xhtml#a5e3562cda960da001597e7dd5679b140">AsString</a>()));</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        }</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    }</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    std::vector&lt;unsigned int&gt; safeShape = shapes;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <span class="keywordtype">bool</span> isDynamic = <span class="keyword">false</span>;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    <span class="keywordflow">if</span> (safeShape.size() == 0)</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;        safeShape.push_back(1);</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;        <span class="keywordflow">if</span> (outputTensor)</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;        {</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;            isDynamic = <span class="keyword">true</span>;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;        }</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    }</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    <span class="keywordtype">float</span> quantizationScale = 0.0f;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    int32_t quantizationOffset = 0;</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;    <span class="keywordflow">if</span> (tensorPtr-&gt;quantization.get())</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    {</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;        <span class="keywordflow">if</span> (tensorPtr-&gt;quantization-&gt;scale.size() &lt;= 1)</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;            <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="l00427"></a><span class="lineno">  427</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="l00428"></a><span class="lineno">  428</span>&#160;</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;            <span class="keywordflow">if</span> (tensorPtr-&gt;quantization-&gt;scale.size() == 1)</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;            {</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;                quantizationScale = tensorPtr-&gt;quantization-&gt;scale[0];</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;            }</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;            <span class="keywordflow">if</span> (tensorPtr-&gt;quantization-&gt;zero_point.size() == 1)</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;            {</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;                <span class="comment">// NOTE: we lose precision here when converting from 64 bit to 32</span></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;                <span class="comment">//       but this is what we support at the moment in ArmNN</span></div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;                quantizationOffset = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;int32_t&gt;(tensorPtr-&gt;quantization-&gt;zero_point[0]);</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;            }</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;            <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> tensorShape(armnn::numeric_cast&lt;unsigned int&gt;(safeShape.size()),</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;                                    safeShape.data());</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;            <span class="keywordflow">if</span> (isDynamic)</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;            {</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;                tensorShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(1, <span class="keyword">false</span>);</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;            }</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;            <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> result(tensorShape,</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;                                     type,</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;                                     quantizationScale,</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;                                     quantizationOffset);</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;            <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;        }</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        {</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;            std::vector&lt;float&gt; quantizationScales;</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;            std::vector&lt;int32_t&gt; quantizationOffsets;</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;            <span class="comment">// Scale</span></div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;            std::copy(tensorPtr-&gt;quantization-&gt;scale.begin(),</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;                      tensorPtr-&gt;quantization-&gt;scale.end(),</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;                      std::back_inserter(quantizationScales));</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;            <span class="comment">// QSymmS8 Per-axis</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;            <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> tensorShape(armnn::numeric_cast&lt;unsigned int&gt;(safeShape.size()),</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;                                    safeShape.data());</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;            <span class="keywordflow">if</span> (isDynamic)</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;            {</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;                tensorShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(1, <span class="keyword">false</span>);</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;            }</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;            <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> result(tensorShape,</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;                                     type,</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;                                     quantizationScales,</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;                                     dimensionMappings[armnn::numeric_cast&lt;unsigned int&gt;(</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;                                         tensorPtr-&gt;quantization-&gt;quantized_dimension)]);</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;            <span class="keywordflow">return</span> result;</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;    }</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    <span class="keywordflow">else</span></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;        <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> tensorShape(armnn::numeric_cast&lt;unsigned int&gt;(safeShape.size()),</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;                                safeShape.data());</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;        <span class="keywordflow">if</span> (isDynamic)</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;            tensorShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(1, <span class="keyword">false</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;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> result(tensorShape,</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;                                 type,</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;                                 quantizationScale,</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;                                 quantizationOffset);</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;        <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    }</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;}</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;<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(<a class="code" href="namespacearmnn_deserializer.xhtml#a80888061963ddd18e87105807a035d9a">TfLiteParserImpl::TensorRawPtr</a> tensorPtr,</div><div class="line"><a name="l00494"></a><span class="lineno">  494</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="l00495"></a><span class="lineno">  495</span>&#160;{</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    <span class="keyword">auto</span> <span class="keyword">const</span> &amp; dimensions = AsUnsignedVector(tensorPtr-&gt;shape);</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(tensorPtr, dimensions, dimensionMappings);</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;}</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(<a class="code" href="namespacearmnn_deserializer.xhtml#a80888061963ddd18e87105807a035d9a">TfLiteParserImpl::TensorRawPtr</a> tensorPtr,</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;                               <span class="keyword">const</span> <span class="keywordtype">bool</span> outputTensor)</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;{</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    <span class="keyword">auto</span> <span class="keyword">const</span> &amp; dimensions = AsUnsignedVector(tensorPtr-&gt;shape);</div><div class="line"><a name="l00504"></a><span class="lineno">  504</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="l00505"></a><span class="lineno">  505</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(tensorPtr, dimensions, dimensionMappings, outputTensor);</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;}</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;std::pair&lt;armnn::ConstTensor, std::unique_ptr&lt;T[]&gt;&gt;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;CreateConstTensorImpl(TfLiteParserImpl::BufferRawPtr bufferPtr,</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;                      <a class="code" href="namespacearmnn_deserializer.xhtml#a80888061963ddd18e87105807a035d9a">TfLiteParserImpl::TensorRawPtr</a> tensorPtr,</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;                      <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l00513"></a><span class="lineno">  513</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="l00514"></a><span class="lineno">  514</span>&#160;{</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(tensorPtr);</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(tensorPtr != <span class="keyword">nullptr</span>, <span class="stringliteral">&quot;tensorPtr is null&quot;</span>);</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(bufferPtr != <span class="keyword">nullptr</span>,</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;        fmt::format(<span class="stringliteral">&quot;Buffer for buffer:{} is null&quot;</span>, tensorPtr-&gt;buffer).c_str());</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;</div><div class="line"><a name="l00520"></a><span class="lineno">  520</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="l00521"></a><span class="lineno">  521</span>&#160;</div><div class="line"><a name="l00522"></a><span class="lineno">  522</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="l00523"></a><span class="lineno">  523</span>&#160;    {</div><div class="line"><a name="l00524"></a><span class="lineno">  524</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="l00525"></a><span class="lineno">  525</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="l00526"></a><span class="lineno">  526</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="l00527"></a><span class="lineno">  527</span>&#160;    }</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <span class="keywordflow">else</span></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;        ::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="l00531"></a><span class="lineno">  531</span>&#160;    }</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;    <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="l00534"></a><span class="lineno">  534</span>&#160;}</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;<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="l00537"></a><span class="lineno">  537</span>&#160;{</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    <span class="comment">// generate the binding id by shifting the tensor id by 8 bit</span></div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    <span class="comment">// and add the subgraph id, which allows 256 subgraphs</span></div><div class="line"><a name="l00540"></a><span class="lineno">  540</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="l00541"></a><span class="lineno">  541</span>&#160;}</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;</div><div class="line"><a name="l00543"></a><span class="lineno">  543</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="l00544"></a><span class="lineno">  544</span>&#160;{</div><div class="line"><a name="l00545"></a><span class="lineno">  545</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="l00546"></a><span class="lineno">  546</span>&#160;    <span class="keywordflow">if</span> (actualSize != expected.size())</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="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    }</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;    <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="l00552"></a><span class="lineno">  552</span>&#160;    {</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;        <span class="keywordflow">if</span> (expected[i] &lt; 0 ||</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;            actual[i] != static_cast&lt;unsigned int&gt;(expected[i]))</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;        {</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</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;    }</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;}</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;<span class="keywordtype">void</span> CheckMatchingQuantization(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; first,</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;                               <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; second,</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;                               <span class="keyword">const</span> std::string&amp; descName,</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;                               std::string <span class="keyword">const</span>&amp; firstName,</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;                               std::string <span class="keyword">const</span>&amp; secondName)</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;{</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    <span class="keywordflow">if</span> (!first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a7c00efeb540198b33b8558c76e5cc2dd">IsQuantized</a>() ||</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;        !second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a7c00efeb540198b33b8558c76e5cc2dd">IsQuantized</a>())</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    {</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;        <span class="comment">// Not a quantized type, ignore the validation</span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    }</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;    <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> firstDataType  = first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>();</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> secondDataType = second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>();</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;    <span class="keywordflow">if</span> (firstDataType != secondDataType)</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    {</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: &quot;</span> + firstName + <span class="stringliteral">&quot; and &quot;</span> + secondName +</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;                                       <span class="stringliteral">&quot; must be of the same quantized type, &quot;</span> +</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;                                       firstName + <span class="stringliteral">&quot; is &quot;</span> + <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(firstDataType) + <span class="stringliteral">&quot;, &quot;</span> +</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;                                       secondName + <span class="stringliteral">&quot; is &quot;</span> + <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">GetDataTypeName</a>(secondDataType));</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    }</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    <span class="keywordflow">if</span> (!first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a22f377fc4e10dc1773a3f979061e85f1">IsTypeSpaceMatch</a>(second))</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(descName + <span class="stringliteral">&quot;: &quot;</span> + firstName + <span class="stringliteral">&quot; and &quot;</span> + secondName +</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;                                       <span class="stringliteral">&quot; must have the same quantization space, &quot;</span> +</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;                                       firstName + <span class="stringliteral">&quot; has offset &quot;</span> + std::to_string(first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()) +</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;                                       <span class="stringliteral">&quot; and scale &quot;</span> + std::to_string(first.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>()) + <span class="stringliteral">&quot;, &quot;</span> +</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;                                       secondName + <span class="stringliteral">&quot; has offset &quot;</span> + std::to_string(second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()) +</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;                                       <span class="stringliteral">&quot; and scale &quot;</span> + std::to_string(second.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>()));</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    }</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">  598</span>&#160;} <span class="comment">// &lt;anonymous&gt;</span></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"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#ad9199a42f5fae611db182fb4c31a11df">  600</a></span>&#160;TfLiteParserImpl::TfLiteParserImpl(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ITfLiteParser::TfLiteParserOptions&gt;</a>&amp; options)</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;: m_Options(options)</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;, m_Network(nullptr, nullptr)</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;, m_ParserFunctions(<a class="code" href="namespacetflite.xhtml">tflite</a>::BuiltinOperator_MAX+1, &amp;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml">TfLiteParserImpl</a>::ParseUnsupportedOperator)</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">  605</span>&#160;    <span class="comment">// register supported operators</span></div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_ADD]                     = &amp;TfLiteParserImpl::ParseAdd;</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_AVERAGE_POOL_2D]         = &amp;TfLiteParserImpl::ParseAveragePool2D;</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_BATCH_TO_SPACE_ND]       = &amp;TfLiteParserImpl::ParseBatchToSpaceND;</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_CONCATENATION]           = &amp;TfLiteParserImpl::ParseConcatenation;</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_CONV_2D]                 = &amp;TfLiteParserImpl::ParseConv2D;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_CUSTOM]                  = &amp;TfLiteParserImpl::ParseCustomOperator;</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_DEPTH_TO_SPACE]          = &amp;TfLiteParserImpl::ParseDepthToSpace;</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_DEPTHWISE_CONV_2D]       = &amp;TfLiteParserImpl::ParseDepthwiseConv2D;</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_DEQUANTIZE]              = &amp;TfLiteParserImpl::ParseDequantize;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_ELU]                     = &amp;TfLiteParserImpl::ParseElu;</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_EXP]                     = &amp;TfLiteParserImpl::ParseExp;</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_FULLY_CONNECTED]         = &amp;TfLiteParserImpl::ParseFullyConnected;</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_GATHER]                  = &amp;TfLiteParserImpl::ParseGather;</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_HARD_SWISH]              = &amp;TfLiteParserImpl::ParseHardSwish;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_LEAKY_RELU]              = &amp;TfLiteParserImpl::ParseLeakyRelu;</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_LOGISTIC]                = &amp;TfLiteParserImpl::ParseLogistic;</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_L2_NORMALIZATION]        = &amp;TfLiteParserImpl::ParseL2Normalization;</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MAX_POOL_2D]             = &amp;TfLiteParserImpl::ParseMaxPool2D;</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MAXIMUM]                 = &amp;TfLiteParserImpl::ParseMaximum;</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MEAN]                    = &amp;TfLiteParserImpl::ParseMean;</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MINIMUM]                 = &amp;TfLiteParserImpl::ParseMinimum;</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_MUL]                     = &amp;TfLiteParserImpl::ParseMul;</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_NEG]                     = &amp;TfLiteParserImpl::ParseNeg;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_PACK]                    = &amp;TfLiteParserImpl::ParsePack;</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_PAD]                     = &amp;TfLiteParserImpl::ParsePad;</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_QUANTIZE]                = &amp;TfLiteParserImpl::ParseQuantize;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RELU]                    = &amp;TfLiteParserImpl::ParseRelu;</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RELU6]                   = &amp;TfLiteParserImpl::ParseRelu6;</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_REDUCE_MAX]              = &amp;TfLiteParserImpl::ParseReduceMax;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_REDUCE_MIN]              = &amp;TfLiteParserImpl::ParseReduceMin;</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RESHAPE]                 = &amp;TfLiteParserImpl::ParseReshape;</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RESIZE_BILINEAR]         = &amp;TfLiteParserImpl::ParseResizeBilinear;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_RESIZE_NEAREST_NEIGHBOR] = &amp;TfLiteParserImpl::ParseResizeNearestNeighbor;</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SLICE]                   = &amp;TfLiteParserImpl::ParseSlice;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SOFTMAX]                 = &amp;TfLiteParserImpl::ParseSoftmax;</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SPACE_TO_BATCH_ND]       = &amp;TfLiteParserImpl::ParseSpaceToBatchND;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SPLIT]                   = &amp;TfLiteParserImpl::ParseSplit;</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SPLIT_V]                 = &amp;TfLiteParserImpl::ParseSplitV;</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SQUEEZE]                 = &amp;TfLiteParserImpl::ParseSqueeze;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_STRIDED_SLICE]           = &amp;TfLiteParserImpl::ParseStridedSlice;</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SUB]                     = &amp;TfLiteParserImpl::ParseSub;</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_SUM]                     = &amp;TfLiteParserImpl::ParseSum;</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_TANH]                    = &amp;TfLiteParserImpl::ParseTanH;</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_TRANSPOSE]               = &amp;TfLiteParserImpl::ParseTranspose;</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_TRANSPOSE_CONV]          = &amp;TfLiteParserImpl::ParseTransposeConv;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_UNPACK]                  = &amp;TfLiteParserImpl::ParseUnpack;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_DIV]                     = &amp;TfLiteParserImpl::ParseDiv;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    m_ParserFunctions[tflite::BuiltinOperator_ARG_MAX]                 = &amp;TfLiteParserImpl::ParseArgMax;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    <span class="comment">// register supported custom operators</span></div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;    m_CustomParserFunctions[<span class="stringliteral">&quot;TFLite_Detection_PostProcess&quot;</span>]      = &amp;TfLiteParserImpl::ParseDetectionPostProcess;</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;}</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ResetParser()</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;{</div><div class="line"><a name="l00660"></a><span class="lineno">  660</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="l00661"></a><span class="lineno">  661</span>&#160;    m_Model = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    m_SubgraphConnections.clear();</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;</div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aed935c554e4f6a4e7b9dcde057d00877">  665</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_impl.xhtml#aed935c554e4f6a4e7b9dcde057d00877">TfLiteParserImpl::CreateNetworkFromBinaryFile</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* graphFile)</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;{</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    ResetParser();</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;    m_Model = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#af9590c2ae8d68b5da999d3d6ab21dd3b">LoadModelFromFile</a>(graphFile);</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    <span class="keywordflow">return</span> CreateNetworkFromModel();</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;</div><div class="line"><a name="l00672"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a32a96909bc8a8ee9076bd4d5c1028301">  672</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_impl.xhtml#a32a96909bc8a8ee9076bd4d5c1028301">TfLiteParserImpl::CreateNetworkFromBinary</a>(<span class="keyword">const</span> std::vector&lt;uint8_t&gt; &amp; binaryContent)</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;    ResetParser();</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    m_Model = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a7f3fc56b7306b444f06f45cdc4032bbf">LoadModelFromBinary</a>(binaryContent.data(), binaryContent.size());</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;    <span class="keywordflow">return</span> CreateNetworkFromModel();</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;</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;<a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> TfLiteParserImpl::CreateNetworkFromModel()</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;</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    <span class="keyword">using</span> <a class="code" href="namespacearmnn.xhtml#a4de71c3661093e5c4ae7775114f43413">NetworkOptions</a> = std::vector&lt;BackendOptions&gt;;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a4de71c3661093e5c4ae7775114f43413">NetworkOptions</a> networkOptions = {};</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;    <span class="keywordflow">if</span> (m_Options &amp;&amp; m_Options.value().m_InferAndValidate)</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;        <a class="code" href="structarmnn_1_1_backend_options.xhtml">BackendOptions</a> shapeInferenceMethodOption(<span class="stringliteral">&quot;ShapeInferenceMethod&quot;</span>,</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;                                                  {</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;                                                      { <span class="stringliteral">&quot;InferAndValidate&quot;</span>, <span class="keyword">true</span> }</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;</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;        networkOptions.push_back(shapeInferenceMethodOption);</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    }</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;    m_Network = INetwork::Create(networkOptions);</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(m_Model.get() != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    <span class="keywordflow">if</span> (m_Model-&gt;subgraphs.size() != 1)</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    {</div><div class="line"><a name="l00699"></a><span class="lineno">  699</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="l00700"></a><span class="lineno">  700</span>&#160;                fmt::format(<span class="stringliteral">&quot;Current TfLite parser only supports 1 subgraph. Current one has: {} {}&quot;</span>,</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;                            m_Model-&gt;subgraphs.size(),</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;                            <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</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="keywordtype">size_t</span> subgraphIndex = 0;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    <span class="keywordtype">size_t</span> operatorIndex = 0;</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    {</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a988cb5e216eb87d854414c6a0282eeb4">SubgraphPtr</a> <span class="keyword">const</span>&amp; subgraph : m_Model-&gt;subgraphs)</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;        {</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;            m_SubgraphConnections.emplace_back(subgraph-&gt;tensors.size());</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;            <span class="keywordflow">for</span> (<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aadad81a95152fe5aad839db352d4012c">OperatorPtr</a> <span class="keyword">const</span>&amp; op : subgraph-&gt;operators)</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;            {</div><div class="line"><a name="l00714"></a><span class="lineno">  714</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="l00715"></a><span class="lineno">  715</span>&#160;                <span class="keyword">auto</span> builtinCode = opCodePtr-&gt;builtin_code;</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;                <span class="keywordflow">if</span> (builtinCode &gt; tflite::BuiltinOperator_MAX)</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;                {</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;                    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(fmt::format(<span class="stringliteral">&quot;Operator code {} is out of range 0-{}. &quot;</span></div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;                                                     <span class="stringliteral">&quot;subgraph:{} operator idx:{}. {}&quot;</span>,</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;                                                     builtinCode, tflite::BuiltinOperator_MAX, subgraphIndex,</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;                                                     operatorIndex, <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;                }</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;                <span class="comment">// lookup and call the parser function</span></div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;                <span class="keyword">auto</span>&amp; parserFunction = m_ParserFunctions[builtinCode];</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;                (this-&gt;*parserFunction)(subgraphIndex, operatorIndex);</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;                ++operatorIndex;</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;            }</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;            SetupInputLayers(subgraphIndex);</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;            SetupOutputLayers(subgraphIndex);</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;            SetupConstantLayers(subgraphIndex);</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;            ++subgraphIndex;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;            operatorIndex = 0;</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;        }</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    }</div><div class="line"><a name="l00739"></a><span class="lineno">  739</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="l00740"></a><span class="lineno">  740</span>&#160;    {</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;        std::stringstream errorString;</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;        errorString &lt;&lt; <span class="stringliteral">&quot;Failed to parse operator #&quot;</span> &lt;&lt; operatorIndex &lt;&lt; <span class="stringliteral">&quot; within subgraph #&quot;</span></div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;                    &lt;&lt; subgraphIndex &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="l00744"></a><span class="lineno">  744</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="l00745"></a><span class="lineno">  745</span>&#160;        std::stringstream errors;</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;        errors &lt;&lt; errorString.str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00747"></a><span class="lineno">  747</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="l00748"></a><span class="lineno">  748</span>&#160;    }</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;</div><div class="line"><a name="l00750"></a><span class="lineno">  750</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="l00751"></a><span class="lineno">  751</span>&#160;    <span class="keywordflow">for</span> (subgraphIndex = 0; subgraphIndex &lt; m_SubgraphConnections.size(); ++subgraphIndex)</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    {</div><div class="line"><a name="l00753"></a><span class="lineno">  753</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="l00754"></a><span class="lineno">  754</span>&#160;        {</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;            <span class="keywordflow">if</span> (m_SubgraphConnections[subgraphIndex][tensorIndex].outputSlot != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;            {</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;                <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> inputSlotIdx = 0;</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;                    inputSlotIdx &lt; m_SubgraphConnections[subgraphIndex][tensorIndex].inputSlots.size();</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;                    ++inputSlotIdx)</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;                    m_SubgraphConnections[subgraphIndex][tensorIndex].outputSlot-&gt;Connect(</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;                        *(m_SubgraphConnections[subgraphIndex][tensorIndex].inputSlots[inputSlotIdx]));</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;                }</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;    }</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;    <span class="keywordflow">return</span> std::move(m_Network);</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;</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::RegisterProducerOfTensor(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;                                                <span class="keywordtype">size_t</span> tensorIndex,</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;                                                <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a>* slot)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">CHECK_TENSOR</a>(m_Model, subgraphIndex, tensorIndex);</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(m_SubgraphConnections.size() &gt; subgraphIndex);</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(m_SubgraphConnections[subgraphIndex].size() &gt; tensorIndex);</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    TensorSlots &amp; tensorSlots = m_SubgraphConnections[subgraphIndex][tensorIndex];</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    <span class="comment">// assuming there is only one producer for that tensor</span></div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    <span class="keywordflow">if</span> (tensorSlots.outputSlot != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;    {</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(fmt::format(<span class="stringliteral">&quot;Another layer has already registered itself as the producer of &quot;</span></div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;                                         <span class="stringliteral">&quot;subgraph:{} tensor:{} {}&quot;</span>,</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;                                         subgraphIndex,</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;                                         tensorIndex,</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;    tensorSlots.outputSlot = slot;</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;}</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="keywordtype">void</span> TfLiteParserImpl::RegisterConsumerOfTensor(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;                                                <span class="keywordtype">size_t</span> tensorIndex,</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;                                                <a class="code" href="classarmnn_1_1_i_input_slot.xhtml">armnn::IInputSlot</a>* slot)</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;{</div><div class="line"><a name="l00798"></a><span class="lineno">  798</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="l00799"></a><span class="lineno">  799</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(m_SubgraphConnections.size() &gt; subgraphIndex);</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(m_SubgraphConnections[subgraphIndex].size() &gt; tensorIndex);</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    TensorSlots &amp; tensorSlots = m_SubgraphConnections[subgraphIndex][tensorIndex];</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    tensorSlots.inputSlots.push_back(slot);</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;}</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;<span class="keywordtype">void</span> TfLiteParserImpl::ParseCustomOperator(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;{</div><div class="line"><a name="l00808"></a><span class="lineno">  808</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="l00809"></a><span class="lineno">  809</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    <span class="comment">// NOTE: By default we presume the custom operator is not supported</span></div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;    <span class="keyword">auto</span> customParserFunction = &amp;TfLiteParserImpl::ParseUnsupportedOperator;</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;    <span class="comment">// Identify custom code defined for custom operator</span></div><div class="line"><a name="l00814"></a><span class="lineno">  814</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="l00815"></a><span class="lineno">  815</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="l00816"></a><span class="lineno">  816</span>&#160;</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    <span class="comment">// Find parser function that correspondes to custom code (if any)</span></div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    <span class="keyword">auto</span> iterator = m_CustomParserFunctions.find(customCode);</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    <span class="keywordflow">if</span> (iterator != m_CustomParserFunctions.end())</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;        customParserFunction = iterator-&gt;second;</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;</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;    <span class="comment">// Run parser function</span></div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    (this-&gt;*customParserFunction)(subgraphIndex, operatorIndex);</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;}</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseUnsupportedOperator(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;{</div><div class="line"><a name="l00830"></a><span class="lineno">  830</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="l00831"></a><span class="lineno">  831</span>&#160;</div><div class="line"><a name="l00832"></a><span class="lineno">  832</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="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> opcodeIndex = operatorPtr-&gt;opcode_index;</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    <span class="keyword">auto</span> opcode      = m_Model-&gt;operator_codes[opcodeIndex]-&gt;builtin_code;</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;    <span class="keywordflow">if</span> (!m_Options || !m_Options.value().m_StandInLayerForUnsupported)</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    {</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;        <span class="comment">// Do not add StandInLayer, throw ParseException instead</span></div><div class="line"><a name="l00840"></a><span class="lineno">  840</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="l00841"></a><span class="lineno">  841</span>&#160;            fmt::format(<span class="stringliteral">&quot;Operator not supported. &quot;</span></div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;                        <span class="stringliteral">&quot;subgraph:{} operator:{} &quot;</span></div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;                        <span class="stringliteral">&quot;opcode_index:{} opcode:{} / {} {}&quot;</span>,</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;                        subgraphIndex,</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;                        operatorIndex,</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;                        opcodeIndex,</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;                        opcode,</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;                        tflite::EnumNameBuiltinOperator(opcode),</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    }</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    <span class="keyword">auto</span> inputs  = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs  = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(inputs.size());</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numOutputs = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(outputs.size());</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;    <a class="code" href="structarmnn_1_1_stand_in_descriptor.xhtml">StandInDescriptor</a> descriptor(numInputs, numOutputs);</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;StandIn:{}:{}:{}&quot;</span>, subgraphIndex, operatorIndex, opcode);</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="comment">// Add a non-executable StandInLayer as a placeholder for any unsupported operator</span></div><div class="line"><a name="l00862"></a><span class="lineno">  862</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="l00863"></a><span class="lineno">  863</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;</div><div class="line"><a name="l00865"></a><span class="lineno">  865</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="l00866"></a><span class="lineno">  866</span>&#160;    {</div><div class="line"><a name="l00867"></a><span class="lineno">  867</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#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[i], <span class="keyword">true</span>));</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;    }</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;    <span class="keyword">auto</span> inputTensorIds  = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;    <span class="keyword">auto</span> outputTensorIds = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</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;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, inputTensorIds);</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIds);</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;}</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseConv2D(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;{</div><div class="line"><a name="l00879"></a><span class="lineno">  879</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="l00880"></a><span class="lineno">  880</span>&#160;</div><div class="line"><a name="l00881"></a><span class="lineno">  881</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="l00882"></a><span class="lineno">  882</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsConv2DOptions();</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(options, subgraphIndex, operatorIndex);</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;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> desc;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</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="l00888"></a><span class="lineno">  888</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>(options-&gt;stride_w);</div><div class="line"><a name="l00889"></a><span class="lineno">  889</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>(options-&gt;stride_h);</div><div class="line"><a name="l00890"></a><span class="lineno">  890</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="l00891"></a><span class="lineno">  891</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>(options-&gt;dilation_w_factor);</div><div class="line"><a name="l00892"></a><span class="lineno">  892</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>(options-&gt;dilation_h_factor);</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00895"></a><span class="lineno">  895</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="l00896"></a><span class="lineno">  896</span>&#160;</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> filterTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    <span class="comment">// assuming input is NHWC</span></div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputTensorInfo.GetShape()[1];</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth  = inputTensorInfo.GetShape()[2];</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;    <span class="comment">// assuming the filter is OHWI : Output, H, W, Input</span></div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;    <span class="comment">// which is essentially the same as NHWC</span></div><div class="line"><a name="l00909"></a><span class="lineno">  909</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="l00910"></a><span class="lineno">  910</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="l00911"></a><span class="lineno">  911</span>&#160;</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">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="l00913"></a><span class="lineno">  913</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>, options-&gt;padding);</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">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="l00915"></a><span class="lineno">  915</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>, options-&gt;padding);</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;    <span class="keyword">auto</span> filterTensorAndData = CreateConstTensor(inputs[1],</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;                                                 filterTensorInfo,</div><div class="line"><a name="l00919"></a><span class="lineno">  919</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="l00920"></a><span class="lineno">  920</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="l00921"></a><span class="lineno">  921</span>&#160;</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Conv2D:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;    <span class="keywordflow">if</span> (inputs.size() == 3)</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;        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="l00927"></a><span class="lineno">  927</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> biasTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;        <span class="keyword">auto</span> biasTensorAndData = CreateConstTensor(inputs[2],</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;                                                   biasTensorInfo,</div><div class="line"><a name="l00930"></a><span class="lineno">  930</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="l00931"></a><span class="lineno">  931</span>&#160;        layer = m_Network-&gt;AddConvolution2dLayer(desc,</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;                                                 filterTensorAndData.first,</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;                                                 <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(biasTensorAndData.first),</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;                                                 layerName.c_str());</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;    }</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;    {</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;        layer = m_Network-&gt;AddConvolution2dLayer(desc,</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;                                                 filterTensorAndData.first,</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;                                                 <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;                                                 layerName.c_str());</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;    }</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l00947"></a><span class="lineno">  947</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="l00948"></a><span class="lineno">  948</span>&#160;</div><div class="line"><a name="l00949"></a><span class="lineno">  949</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="l00950"></a><span class="lineno">  950</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;    layer = AddFusedActivationLayer(layer, 0, options-&gt;fused_activation_function);</div><div class="line"><a name="l00955"></a><span class="lineno">  955</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="l00956"></a><span class="lineno">  956</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;}</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseDepthwiseConv2D(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;{</div><div class="line"><a name="l00962"></a><span class="lineno">  962</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="l00963"></a><span class="lineno">  963</span>&#160;</div><div class="line"><a name="l00964"></a><span class="lineno">  964</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="l00965"></a><span class="lineno">  965</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsDepthwiseConv2DOptions();</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(options, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> desc;</div><div class="line"><a name="l00970"></a><span class="lineno">  970</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="l00971"></a><span class="lineno">  971</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>(options-&gt;stride_w);</div><div class="line"><a name="l00972"></a><span class="lineno">  972</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>(options-&gt;stride_h);</div><div class="line"><a name="l00973"></a><span class="lineno">  973</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="l00974"></a><span class="lineno">  974</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(options-&gt;depth_multiplier);</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00977"></a><span class="lineno">  977</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="l00978"></a><span class="lineno">  978</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l00980"></a><span class="lineno">  980</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>(options-&gt;dilation_w_factor);</div><div class="line"><a name="l00981"></a><span class="lineno">  981</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>(options-&gt;dilation_h_factor);</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;    <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="l00984"></a><span class="lineno">  984</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="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="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> filterTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1], permutationVector);</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;    <span class="comment">// Assuming input is NHWC</span></div><div class="line"><a name="l00990"></a><span class="lineno">  990</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="l00991"></a><span class="lineno">  991</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="l00992"></a><span class="lineno">  992</span>&#160;</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;    <span class="comment">// TensorflowLite weights come in the format [1, H, W, I * M]</span></div><div class="line"><a name="l00994"></a><span class="lineno">  994</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="l00995"></a><span class="lineno">  995</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="l00996"></a><span class="lineno">  996</span>&#160;</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    <span class="comment">// Reshape weights as [ H, W, I, M ]</span></div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;    filterTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>({ filterHeight,</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;                                filterWidth,</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;                                inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[3],</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</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="l01002"></a><span class="lineno"> 1002</span>&#160;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">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="l01004"></a><span class="lineno"> 1004</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>, options-&gt;padding);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">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="l01006"></a><span class="lineno"> 1006</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>, options-&gt;padding);</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;    <span class="keyword">auto</span> filterTensorAndData = CreateConstTensor(inputs[1], filterTensorInfo, permutationVector);</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</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="l01010"></a><span class="lineno"> 1010</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;DepthwiseConv2D:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;    <span class="keywordflow">if</span> (inputs.size() == 3)</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;    {</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</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="l01015"></a><span class="lineno"> 1015</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> biasTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;        <span class="keyword">auto</span> biasTensorAndData = CreateConstTensor(inputs[2],</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;                                                   biasTensorInfo,</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</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="l01019"></a><span class="lineno"> 1019</span>&#160;        layer = m_Network-&gt;AddDepthwiseConvolution2dLayer(desc,</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;                                                          filterTensorAndData.first,</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;                                                          <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(biasTensorAndData.first),</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;                                                          layerName.c_str());</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">else</span></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;        layer = m_Network-&gt;AddDepthwiseConvolution2dLayer(desc,</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;                                                          filterTensorAndData.first,</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;                                                          <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;                                                          layerName.c_str());</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;    }</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</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="l01035"></a><span class="lineno"> 1035</span>&#160;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</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="l01037"></a><span class="lineno"> 1037</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;    layer = AddFusedActivationLayer(layer, 0, options-&gt;fused_activation_function);</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</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="l01043"></a><span class="lineno"> 1043</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[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;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseDequantize(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</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">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Dequantize:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</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="l01060"></a><span class="lineno"> 1060</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</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="l01064"></a><span class="lineno"> 1064</span>&#160;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;}</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="keywordtype">void</span> TfLiteParserImpl::ParseExp(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;{</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</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="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">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</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;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Exp:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;    <a class="code" href="structarmnn_1_1_elementwise_unary_descriptor.xhtml">ElementwiseUnaryDescriptor</a> desc;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;    desc.<a class="code" href="structarmnn_1_1_elementwise_unary_descriptor.xhtml#afe768be66897eb3d73284424e3239b23">m_Operation</a> = UnaryOperation::Exp;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddElementwiseUnaryLayer(desc, layerName.c_str());</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</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="l01091"></a><span class="lineno"> 1091</span>&#160;</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</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> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;}</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;<span class="keywordtype">void</span> TfLiteParserImpl::ParseTranspose(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;{</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</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="l01102"></a><span class="lineno"> 1102</span>&#160;</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</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="l01105"></a><span class="lineno"> 1105</span>&#160;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Transpose:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;    <a class="code" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a> desc;</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="keywordflow">if</span> (inputs.size() == 2)</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    {</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> permuteTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;        <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> permuteBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</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="l01117"></a><span class="lineno"> 1117</span>&#160;        std::vector&lt;unsigned int&gt; permuteShape(numPermVecElements);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</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="l01119"></a><span class="lineno"> 1119</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="l01120"></a><span class="lineno"> 1120</span>&#160;</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;        desc = <a class="code" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a>(permutationVector);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;    }</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;    CheckMatchingQuantization(inputTensorInfo, outputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&quot;</span>);</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddTransposeLayer(desc, layerName.c_str());</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</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="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> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</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;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseTransposeConv(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</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="l01144"></a><span class="lineno"> 1144</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsTransposeConvOptions();</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;    <a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml">TransposeConvolution2dDescriptor</a> desc;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</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="l01148"></a><span class="lineno"> 1148</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>(options-&gt;stride_w);</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</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>(options-&gt;stride_h);</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</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="l01151"></a><span class="lineno"> 1151</span>&#160;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    <span class="keywordflow">if</span> (inputs.size() == 4)</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;    {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;        desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;    }</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;    <span class="keywordflow">else</span></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="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 3);</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;</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;    <span class="keywordflow">if</span> (inputs[0])</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;    {</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;        std::vector&lt;int&gt; output_shape(tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;        <span class="keywordflow">if</span> (tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() == DataType::Signed32)</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;        {</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;            ::memcpy(output_shape.data(), <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[0]-&gt;buffer)-&gt;data.data(), tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</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="keywordflow">if</span> (tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>() == DataType::QAsymmU8)</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;            <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i &lt; tensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>(); i++)</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;                output_shape[i] = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[0]-&gt;buffer)-&gt;data.data()[i];</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;            }</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="comment">// Change from signed to unsigned int to store in TransposeConvolution2dDescriptor.</span></div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> dimension : output_shape)</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;            desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a78f5b213a603b55d0fabea389e89f203">m_OutputShape</a>.push_back(static_cast&lt;unsigned int&gt;(dimension));</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;        }</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;        desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a9bc46a2ad56319786bad30be9ab2dc6a">m_OutputShapeEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;    }</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> filterTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</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;    <span class="comment">// TfLite uses NHWC tensors</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;    <span class="keyword">const</span> <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="l01192"></a><span class="lineno"> 1192</span>&#160;    <span class="keyword">const</span> <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="l01193"></a><span class="lineno"> 1193</span>&#160;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</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="l01195"></a><span class="lineno"> 1195</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="l01196"></a><span class="lineno"> 1196</span>&#160;</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">CalcPadding</a>(inputHeight,</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;                filterHeight,</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>,</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;                1, <span class="comment">// DilationY</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>,</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>,</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;                options-&gt;padding);</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;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">CalcPadding</a>(inputWidth,</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;                filterWidth,</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>,</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;                1, <span class="comment">// DilationX</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>,</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;                desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>,</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;                options-&gt;padding);</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    <span class="keyword">auto</span> filterTensorAndData = CreateConstTensor(inputs[1],</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;                                                 filterTensorInfo,</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</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="l01216"></a><span class="lineno"> 1216</span>&#160;</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</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="l01218"></a><span class="lineno"> 1218</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;TransposeConv:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;    <span class="keywordflow">if</span> (desc.<a class="code" href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a>)</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;    {</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;        <span class="keyword">auto</span> biasTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[3]);</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;        <span class="keyword">auto</span> biasConstTensor = CreateConstTensor(inputs[3],</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;                                                 biasTensorInfo,</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</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="l01226"></a><span class="lineno"> 1226</span>&#160;        layer = m_Network-&gt;AddTransposeConvolution2dLayer(desc,</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;                                                          filterTensorAndData.first,</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;                                                          biasConstTensor.first,</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;                                                          layerName.c_str());</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;    <span class="keywordflow">else</span></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;        layer = m_Network-&gt;AddTransposeConvolution2dLayer(desc,</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;                                                          filterTensorAndData.first,</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;                                                          <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;                                                          layerName.c_str());</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;</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</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="l01243"></a><span class="lineno"> 1243</span>&#160;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</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="l01245"></a><span class="lineno"> 1245</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[2]});</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;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseAveragePool2D(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    ParsePool(subgraphIndex, operatorIndex, PoolingAlgorithm::Average);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;}</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="keywordtype">void</span> TfLiteParserImpl::ParseBatchToSpaceND(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;{</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</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="l01260"></a><span class="lineno"> 1260</span>&#160;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 3);</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;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> blockShapeTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> blockShapeBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> cropsTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> cropsBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[2]-&gt;buffer);</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;    std::vector&lt;unsigned int&gt; blockShape(blockShapeTensorInfo.GetNumElements());</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;    ::memcpy(blockShape.data(), blockShapeBufferPtr-&gt;data.data(), blockShapeTensorInfo.GetNumBytes());</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</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="l01277"></a><span class="lineno"> 1277</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="l01278"></a><span class="lineno"> 1278</span>&#160;</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;    <span class="keywordtype">size_t</span> step = 2;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;    std::vector&lt;std::pair&lt;unsigned int, unsigned int&gt;&gt; crops;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</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="l01282"></a><span class="lineno"> 1282</span>&#160;    {</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;        crops.emplace_back(cropsVector[i * step], cropsVector[i * step + 1]);</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;    }</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;    <a class="code" href="structarmnn_1_1_batch_to_space_nd_descriptor.xhtml">armnn::BatchToSpaceNdDescriptor</a> desc;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</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="l01288"></a><span class="lineno"> 1288</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="l01289"></a><span class="lineno"> 1289</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="l01290"></a><span class="lineno"> 1290</span>&#160;</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;BatchToSpaceND:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;    CheckMatchingQuantization(inputTensorInfo, outputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&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;    <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="l01298"></a><span class="lineno"> 1298</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</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="l01300"></a><span class="lineno"> 1300</span>&#160;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;}</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseL2Normalization(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;{</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</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="l01311"></a><span class="lineno"> 1311</span>&#160;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;    <a class="code" href="structarmnn_1_1_l2_normalization_descriptor.xhtml">L2NormalizationDescriptor</a> desc;</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</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="l01320"></a><span class="lineno"> 1320</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;L2Normalization:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</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="l01322"></a><span class="lineno"> 1322</span>&#160;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</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_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</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="l01327"></a><span class="lineno"> 1327</span>&#160;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;}</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseMaxPool2D(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    ParsePool(subgraphIndex, operatorIndex, PoolingAlgorithm::Max);</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;}</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseMaximum(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</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> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</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>(outputs.size(), 1);</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Maximum:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</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="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;    CheckMatchingQuantization(inputTensorInfo, input1TensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Input 1&quot;</span>);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;    CheckMatchingQuantization(inputTensorInfo, outputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&quot;</span>);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</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="l01360"></a><span class="lineno"> 1360</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</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="l01362"></a><span class="lineno"> 1362</span>&#160;</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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;</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseMinimum(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Minimum:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;    CheckMatchingQuantization(inputTensorInfo, input1TensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Input 1&quot;</span>);</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;    CheckMatchingQuantization(inputTensorInfo, outputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&quot;</span>);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</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="l01390"></a><span class="lineno"> 1390</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</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="l01392"></a><span class="lineno"> 1392</span>&#160;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParsePool(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;                                 <span class="keywordtype">size_t</span> operatorIndex,</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;                                 <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">PoolingAlgorithm</a> algorithm)</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;{</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</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="l01405"></a><span class="lineno"> 1405</span>&#160;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</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="l01407"></a><span class="lineno"> 1407</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsPool2DOptions();</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(options, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;    std::string layerName;</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;    <span class="keywordflow">switch</span> (algorithm)</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="keywordflow">case</span> PoolingAlgorithm::Average:</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;            layerName =</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;                fmt::format(<span class="stringliteral">&quot;AveragePool2D:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;        <span class="keywordflow">case</span> PoolingAlgorithm::Max:</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;            layerName =</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;                fmt::format(<span class="stringliteral">&quot;MaxPool2D:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;            <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Unsupported Pooling Algorithm&quot;</span>);</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;    }</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;    <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> desc;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;    desc.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a> = algorithm;</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</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>(options-&gt;stride_w);</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</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>(options-&gt;stride_h);</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</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>(options-&gt;filter_width);</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</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>(options-&gt;filter_height);</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</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="l01435"></a><span class="lineno"> 1435</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="l01436"></a><span class="lineno"> 1436</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="l01437"></a><span class="lineno"> 1437</span>&#160;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;    <span class="comment">// assuming input is NHWC</span></div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputHeight = inputTensorInfo.GetShape()[1];</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputWidth  = inputTensorInfo.GetShape()[2];</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">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="l01447"></a><span class="lineno"> 1447</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>, options-&gt;padding);</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;    <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">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="l01449"></a><span class="lineno"> 1449</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>, options-&gt;padding);</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> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;    CheckMatchingQuantization(inputTensorInfo, outputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&quot;</span>);</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</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="l01458"></a><span class="lineno"> 1458</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</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="l01460"></a><span class="lineno"> 1460</span>&#160;</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</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="l01462"></a><span class="lineno"> 1462</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</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;    layer = AddFusedActivationLayer(layer, 0, options-&gt;fused_activation_function);</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</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="l01468"></a><span class="lineno"> 1468</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;}</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;<span class="keywordtype">void</span> TfLiteParserImpl::ParseSlice(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;{</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</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="l01475"></a><span class="lineno"> 1475</span>&#160;</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 3);</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <a class="code" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a> desc;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;    <span class="comment">// set begin tensor info for slice descriptor</span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> beginTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> beginBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</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="l01488"></a><span class="lineno"> 1488</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="l01489"></a><span class="lineno"> 1489</span>&#160;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;    <span class="comment">// set size tensor info for slice descriptor</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> sizeTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> sizeBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[2]-&gt;buffer);</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;    std::vector&lt;unsigned int&gt; size(sizeTensorInfo.GetNumElements());</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;    ::memcpy(size.data(), sizeBufferPtr-&gt;data.data(), sizeTensorInfo.GetNumBytes());</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;    desc = <a class="code" href="structarmnn_1_1_slice_descriptor.xhtml">SliceDescriptor</a>(begin, size);</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;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Slice:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;    CheckMatchingQuantization(inputTensorInfo, outputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&quot;</span>);</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;    <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="l01505"></a><span class="lineno"> 1505</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="l01506"></a><span class="lineno"> 1506</span>&#160;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</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="l01508"></a><span class="lineno"> 1508</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</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="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="l01513"></a><span class="lineno"> 1513</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;}</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;<span class="keywordtype">void</span> TfLiteParserImpl::ParseSoftmax(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> 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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</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="l01521"></a><span class="lineno"> 1521</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsSoftmaxOptions();</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;    <a class="code" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> desc;</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;    desc.<a class="code" href="structarmnn_1_1_softmax_descriptor.xhtml#a8275d51ef9a584feb95726ea0522f6e5">m_Beta</a> = options-&gt;beta;</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Softmax:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</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="l01533"></a><span class="lineno"> 1533</span>&#160;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</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="l01536"></a><span class="lineno"> 1536</span>&#160;</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</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="l01538"></a><span class="lineno"> 1538</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</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="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_impl.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> TfLiteParserImpl::ParseSpaceToBatchND(<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_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">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(), 3);</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_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> blockShapeTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> blockShapeBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</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="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> padListTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> padListBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[2]-&gt;buffer);</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;    std::vector&lt;unsigned int&gt; blockShape(blockShapeTensorInfo.GetNumElements());</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;    ::memcpy(blockShape.data(), blockShapeBufferPtr-&gt;data.data(), blockShapeTensorInfo.GetNumBytes());</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</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="l01567"></a><span class="lineno"> 1567</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="l01568"></a><span class="lineno"> 1568</span>&#160;</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;    <span class="keywordtype">size_t</span> step = 2;</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;    std::vector&lt;std::pair&lt;unsigned int, unsigned int&gt;&gt; padList;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</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="l01572"></a><span class="lineno"> 1572</span>&#160;    {</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;        padList.emplace_back(padListVector[i * step], padListVector[i * step + 1]);</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;    }</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</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="l01577"></a><span class="lineno"> 1577</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="l01578"></a><span class="lineno"> 1578</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="l01579"></a><span class="lineno"> 1579</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="l01580"></a><span class="lineno"> 1580</span>&#160;</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;SpaceToBatchND:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;    CheckMatchingQuantization(inputTensorInfo, outputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&quot;</span>);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</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="l01588"></a><span class="lineno"> 1588</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</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="l01590"></a><span class="lineno"> 1590</span>&#160;</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;}</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;</div><div class="line"><a name="l01598"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aa0a90d432c9c41f9846f41f11c9e54c9"> 1598</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_impl.xhtml#aa0a90d432c9c41f9846f41f11c9e54c9">TfLiteParserImpl::OutputShapeOfSqueeze</a>(<span class="keyword">const</span> std::vector&lt;uint32_t&gt; &amp; squeezeDimsIn,</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</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="l01600"></a><span class="lineno"> 1600</span>&#160;{</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</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="l01602"></a><span class="lineno"> 1602</span>&#160;    std::vector&lt;uint32_t&gt; squeezeDims = squeezeDimsIn;</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</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="l01604"></a><span class="lineno"> 1604</span>&#160;</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</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="l01606"></a><span class="lineno"> 1606</span>&#160;    {</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</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="l01609"></a><span class="lineno"> 1609</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="l01610"></a><span class="lineno"> 1610</span>&#160;           &lt;&lt; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</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="l01612"></a><span class="lineno"> 1612</span>&#160;    }</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;    <span class="keywordflow">if</span> (squeezeDims.empty())</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;        squeezeDims.assign(dimensionSequence,</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;                           dimensionSequence+inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</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;</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;    std::vector&lt;uint32_t&gt; outputDims;</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</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="l01622"></a><span class="lineno"> 1622</span>&#160;    {</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;        <span class="keywordtype">bool</span> skipSqueeze = (std::find(squeezeDims.begin(), squeezeDims.end(), i) == squeezeDims.end());</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</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="l01625"></a><span class="lineno"> 1625</span>&#160;        <span class="keywordflow">if</span> (skipSqueeze || currentDimension != 1)</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;        {</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;            outputDims.push_back(currentDimension);</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;        }</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;</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;    <span class="keywordflow">if</span> (outputDims.size() &gt; 4)</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;    {</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</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="l01635"></a><span class="lineno"> 1635</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="l01636"></a><span class="lineno"> 1636</span>&#160;           &lt;&lt; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</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="l01638"></a><span class="lineno"> 1638</span>&#160;    }</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;    <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="l01641"></a><span class="lineno"> 1641</span>&#160;                                       outputDims.data());</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;    <span class="comment">// we need to preserve the tensor type and the quantization data as well</span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outTensorInfo = inputTensorInfo;</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;    outTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(outShape);</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;    <span class="keywordflow">return</span> outTensorInfo;</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;}</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseSqueeze(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;{</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</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="l01653"></a><span class="lineno"> 1653</span>&#160;</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 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> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <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="l01661"></a><span class="lineno"> 1661</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsSqueezeOptions();</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Squeeze:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo =</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;        <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aa0a90d432c9c41f9846f41f11c9e54c9">TfLiteParserImpl::OutputShapeOfSqueeze</a>(AsUnsignedVector(options-&gt;squeeze_dims),</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;                                           inputTensorInfo);</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;    CheckMatchingQuantization(inputTensorInfo, outputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&quot;</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;    <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> reshapeDesc;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</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="l01672"></a><span class="lineno"> 1672</span>&#160;</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</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="l01674"></a><span class="lineno"> 1674</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</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="l01676"></a><span class="lineno"> 1676</span>&#160;</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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;</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseStridedSlice(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 4);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</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="l01695"></a><span class="lineno"> 1695</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsStridedSliceOptions();</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;    <a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> desc;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a61081be1483984e33db452c75d569f51">m_BeginMask</a> = options-&gt;begin_mask;</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#af996d82c47e43a16f4c8faa6c6b3e030">m_EllipsisMask</a> = options-&gt;ellipsis_mask;</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#ac37e49c0d6e6e54f9d2015d0f11f8ee7">m_EndMask</a> = options-&gt;end_mask;</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a7c91eda2b331d607bae92cd8ebf50bb9">m_NewAxisMask</a> = options-&gt;new_axis_mask;</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a6d0384878432cfc9652b7ae8bc59506f">m_ShrinkAxisMask</a> = options-&gt;shrink_axis_mask;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</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="l01704"></a><span class="lineno"> 1704</span>&#160;</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> beginTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> beginBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</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;    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="l01709"></a><span class="lineno"> 1709</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="l01710"></a><span class="lineno"> 1710</span>&#160;</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> endTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> endBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[2]-&gt;buffer);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;    std::vector&lt;int&gt; end(endTensorInfo.GetNumElements());</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;    ::memcpy(end.data(), endBufferPtr-&gt;data.data(), endTensorInfo.GetNumBytes());</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> strideTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[3]);</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> strideBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[3]-&gt;buffer);</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;    std::vector&lt;int&gt; stride(strideTensorInfo.GetNumElements());</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;    ::memcpy(stride.data(), strideBufferPtr-&gt;data.data(), strideTensorInfo.GetNumBytes());</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;    desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a118fe06b7c2599da60398ee311ede923">m_Begin</a> = begin;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</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="l01725"></a><span class="lineno"> 1725</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="l01726"></a><span class="lineno"> 1726</span>&#160;</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;StridedSlice:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</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="l01729"></a><span class="lineno"> 1729</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</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="l01733"></a><span class="lineno"> 1733</span>&#160;</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[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;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;}</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="keywordtype">void</span> TfLiteParserImpl::ParseSub(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;{</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</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="l01744"></a><span class="lineno"> 1744</span>&#160;</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</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="l01746"></a><span class="lineno"> 1746</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsSubOptions();</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</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;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Sub:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</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="l01759"></a><span class="lineno"> 1759</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</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="l01763"></a><span class="lineno"> 1763</span>&#160;</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;    layer = AddFusedActivationLayer(layer, 0, options-&gt;fused_activation_function);</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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;</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseDiv(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</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="l01778"></a><span class="lineno"> 1778</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsDivOptions();</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Div:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddDivisionLayer(layerName.c_str());</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</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="l01795"></a><span class="lineno"> 1795</span>&#160;</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;    layer = AddFusedActivationLayer(layer, 0, options-&gt;fused_activation_function);</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;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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;</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseAdd(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</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="l01809"></a><span class="lineno"> 1809</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsAddOptions();</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</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;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Add:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</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="l01822"></a><span class="lineno"> 1822</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</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="l01826"></a><span class="lineno"> 1826</span>&#160;</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;    layer = AddFusedActivationLayer(layer, 0, options-&gt;fused_activation_function);</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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;</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseMul(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;{</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</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="l01838"></a><span class="lineno"> 1838</span>&#160;</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</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="l01840"></a><span class="lineno"> 1840</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsMulOptions();</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> input1TensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Mul:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</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="l01853"></a><span class="lineno"> 1853</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</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="l01857"></a><span class="lineno"> 1857</span>&#160;</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;    layer = AddFusedActivationLayer(layer, 0, options-&gt;fused_activation_function);</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;}</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;<span class="keywordtype">void</span> TfLiteParserImpl::ParseMean(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;{</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</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="l01869"></a><span class="lineno"> 1869</span>&#160;</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> dimTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> bufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</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;    <a class="code" href="structarmnn_1_1_mean_descriptor.xhtml">armnn::MeanDescriptor</a> desc;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;    std::vector&lt;unsigned int&gt; axis(dimTensorInfo.GetNumElements());</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;    ::memcpy(axis.data(), bufferPtr-&gt;data.data(), dimTensorInfo.GetNumBytes());</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;    desc.<a class="code" href="structarmnn_1_1_mean_descriptor.xhtml#a1f0d67b087c491248bd1cde3ff995a95">m_Axis</a> = axis;</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</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;    desc.<a class="code" href="structarmnn_1_1_mean_descriptor.xhtml#a28e0548abfc4e79c48f29a3d11a062e9">m_KeepDims</a> =</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</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="l01888"></a><span class="lineno"> 1888</span>&#160;            <a class="code" href="_cl_layer_tests_8cpp.xhtml#a88d84cc49602ca19491dea9c998035fe">true</a> : <span class="keyword">false</span>;</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Mean:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</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="l01892"></a><span class="lineno"> 1892</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</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;    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="l01895"></a><span class="lineno"> 1895</span>&#160;</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;}</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseNeg(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;{</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</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="l01906"></a><span class="lineno"> 1906</span>&#160;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;  <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;  <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;  <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;  <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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> layerName = fmt::format(<span class="stringliteral">&quot;Neg:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;  <a class="code" href="structarmnn_1_1_elementwise_unary_descriptor.xhtml">armnn::ElementwiseUnaryDescriptor</a> descriptor(<a class="code" href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">armnn::UnaryOperation::Neg</a>);</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;  <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddElementwiseUnaryLayer(descriptor, layerName.c_str());</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;  <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;  <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</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="l01920"></a><span class="lineno"> 1920</span>&#160;</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;  <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;  RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;  <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;  RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;}</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;<span class="keywordtype">void</span> TfLiteParserImpl::ParsePad(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;{</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</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="l01931"></a><span class="lineno"> 1931</span>&#160;</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParserImpl::TensorRawPtrVector</a> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParserImpl::TensorRawPtrVector</a> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> padTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> bufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;    std::vector&lt;unsigned int&gt; padBuffer(padTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;    ::memcpy(padBuffer.data(), bufferPtr-&gt;data.data(), padTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;    <span class="keywordtype">size_t</span> step = 2;</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;    <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">armnn::PadDescriptor</a> desc;</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;    <span class="keywordflow">if</span> (inputTensorInfo.IsQuantized())</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;        desc.<a class="code" href="structarmnn_1_1_pad_descriptor.xhtml#a410fa919f78af0f0f100bd1594eca4ab">m_PadValue</a> = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(inputTensorInfo.GetQuantizationOffset());</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;    }</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; padTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() / step; ++i)</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;        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="l01954"></a><span class="lineno"> 1954</span>&#160;    }</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Pad:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</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="l01960"></a><span class="lineno"> 1960</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</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="l01962"></a><span class="lineno"> 1962</span>&#160;</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;}</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseQuantize(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</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;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</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="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Quantize:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</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;    <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="l01983"></a><span class="lineno"> 1983</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</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="l01987"></a><span class="lineno"> 1987</span>&#160;</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;}</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseRelu(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;{</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;    ParseActivation(subgraphIndex,operatorIndex, ActivationFunction::ReLu);</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;}</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseRelu6(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    ParseActivation(subgraphIndex,operatorIndex, ActivationFunction::BoundedReLu);</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;}</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseLeakyRelu(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;{</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;    ParseActivation(subgraphIndex, operatorIndex, ActivationFunction::LeakyReLu);</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;}</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="keywordtype">void</span> TfLiteParserImpl::ParseLogistic(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;{</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;    ParseActivation(subgraphIndex,operatorIndex,ActivationFunction::Sigmoid);</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;}</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseTanH(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    ParseActivation(subgraphIndex,operatorIndex,ActivationFunction::TanH);</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;</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseElu(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    ParseActivation(subgraphIndex, operatorIndex, ActivationFunction::Elu);</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;</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseHardSwish(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    ParseActivation(subgraphIndex, operatorIndex, ActivationFunction::HardSwish);</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;</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::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="l02031"></a><span class="lineno"> 2031</span>&#160;{</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</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="l02033"></a><span class="lineno"> 2033</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="l02034"></a><span class="lineno"> 2034</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(operatorPtr);</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 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="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Activation:&quot;</span>);</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;    <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;    activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = activationType;</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;    <span class="keywordflow">switch</span> (activationType)</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;    {</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;        <span class="keywordflow">case</span> ActivationFunction::ReLu:</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;        {</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;            layerName += fmt::format(<span class="stringliteral">&quot;RELU:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;            <span class="keywordflow">break</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">case</span> ActivationFunction::BoundedReLu:</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;            layerName += fmt::format(<span class="stringliteral">&quot;RELU6:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</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="l02057"></a><span class="lineno"> 2057</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="l02058"></a><span class="lineno"> 2058</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;        }</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;        <span class="keywordflow">case</span> ActivationFunction::Sigmoid:</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;            layerName += fmt::format(<span class="stringliteral">&quot;SIGMOID:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</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> ActivationFunction::TanH:</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 += fmt::format(<span class="stringliteral">&quot;TANH:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</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="l02069"></a><span class="lineno"> 2069</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="l02070"></a><span class="lineno"> 2070</span>&#160;            <span class="keywordflow">break</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">case</span> ActivationFunction::LeakyReLu:</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;        {</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;            layerName += fmt::format(<span class="stringliteral">&quot;LEAKYRELU:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;            <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsLeakyReluOptions();</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;            activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a> = options-&gt;alpha;</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;        }</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;        <span class="keywordflow">case</span> ActivationFunction::Elu:</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;        {</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;            layerName += fmt::format(<span class="stringliteral">&quot;ELU:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</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="l02083"></a><span class="lineno"> 2083</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;        }</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;        <span class="keywordflow">case</span> ActivationFunction::HardSwish:</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;        {</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;            layerName += fmt::format(<span class="stringliteral">&quot;HARDSWISH:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;            <span class="keywordflow">break</span>;</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="keywordflow">default</span>:</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;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;                fmt::format(<span class="stringliteral">&quot;Unexpected ActivationFunction[{}] when creating layerName {} &quot;</span>,</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;                            static_cast&lt;int&gt;(activationType), <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;        }</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;</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</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="l02099"></a><span class="lineno"> 2099</span>&#160;</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</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="l02102"></a><span class="lineno"> 2102</span>&#160;</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</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="l02104"></a><span class="lineno"> 2104</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</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="l02109"></a><span class="lineno"> 2109</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaebfa9a01a0bb8a0935114ff0140cc45"> 2112</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_impl.xhtml#aaebfa9a01a0bb8a0935114ff0140cc45">TfLiteParserImpl::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="l02113"></a><span class="lineno"> 2113</span>&#160;                                                         <span class="keyword">const</span> std::vector&lt;int32_t&gt; &amp; targetDimsIn)</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;{</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;    std::vector&lt;unsigned int&gt; outputDims(targetDimsIn.begin(), targetDimsIn.end());</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</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="l02117"></a><span class="lineno"> 2117</span>&#160;</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;    <span class="keywordflow">if</span> (stretchDim != targetDimsIn.end())</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;    {</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;        <span class="keywordflow">if</span> (std::find(std::next(stretchDim), targetDimsIn.end(), -1) != targetDimsIn.end())</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;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;                fmt::format(<span class="stringliteral">&quot;At most one component of shape can be -1 {}&quot;</span>, <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;        }</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;        <span class="keyword">auto</span> targetNumElements =</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;            <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;                std::accumulate(targetDimsIn.begin(), targetDimsIn.end(), -1, std::multiplies&lt;int32_t&gt;()));</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</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="l02131"></a><span class="lineno"> 2131</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="l02132"></a><span class="lineno"> 2132</span>&#160;    }</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</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="l02135"></a><span class="lineno"> 2135</span>&#160;</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> reshapeInfo = inputTensorInfo;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;    reshapeInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(outputShape);</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;    <span class="keywordflow">return</span> reshapeInfo;</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> TfLiteParserImpl::ParseReshape(<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">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <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="l02152"></a><span class="lineno"> 2152</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsReshapeOptions();</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Reshape:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> actualOutputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;    CheckMatchingQuantization(inputTensorInfo, actualOutputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&quot;</span>);</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;    <span class="comment">// Extracting new shape for the output</span></div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;    <span class="comment">// There are two ways it can be passed</span></div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;    <span class="comment">//  * First is to define the target shape in the operator built-in options</span></div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;    <span class="comment">//  * Second is to pass it as a second input tensor</span></div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;    std::vector&lt;int32_t&gt; targetShape;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;    <span class="keywordtype">bool</span> targetShapeFound = <span class="keyword">false</span>;</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;    <span class="comment">// Check if built-in options were given</span></div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;    <span class="keywordflow">if</span> (options != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;    {</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;        <span class="comment">// make sure the parameter is given</span></div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;        <span class="keywordflow">if</span> (options-&gt;new_shape.empty() == <span class="keyword">false</span>)</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;        {</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;            targetShape = options-&gt;new_shape;</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;            targetShapeFound = <span class="keyword">true</span>;</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;    }</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;    <span class="comment">// If there is no built-in option given or if the built-in new_shape parameter was empty</span></div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;    <span class="keywordflow">if</span> (!targetShapeFound)</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;    {</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;        <span class="comment">// Check for a second input tensor</span></div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</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="l02181"></a><span class="lineno"> 2181</span>&#160;        {</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;            <span class="keywordflow">if</span> (inputs[1]-&gt;is_variable)</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;            {</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</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="l02185"></a><span class="lineno"> 2185</span>&#160;            }</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;            <span class="keywordflow">if</span> (inputs[1]-&gt;shape.size() != 1)</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;            {</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</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="l02190"></a><span class="lineno"> 2190</span>&#160;            }</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">if</span> (inputs[1]-&gt;type != tflite::TensorType_INT32)</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;                <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="l02195"></a><span class="lineno"> 2195</span>&#160;            }</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;            <span class="comment">// Extract target shape from input</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;            <span class="keyword">auto</span> bufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;            <span class="keyword">auto</span> values = <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="l02200"></a><span class="lineno"> 2200</span>&#160;            <span class="keywordflow">if</span> (!values)</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;            {</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;                <a class="code" href="_tf_lite_parser_8cpp.xhtml#a5fc762bb40634f39ff6ff4e23005a3a9">ARMNN_THROW_PARSE_EXCEPTION</a>(<span class="stringliteral">&quot;Reshape operator target shape input buffer data is null&quot;</span>);</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;            }</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</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="l02205"></a><span class="lineno"> 2205</span>&#160;            {</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;                targetShape.push_back(values[i]);</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;            }</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;        }</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;        {</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</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="l02212"></a><span class="lineno"> 2212</span>&#160;                                        <span class="stringliteral">&quot;At least one method required&quot;</span>);</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;        }</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;</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> reshapeOutputTensorInfo =</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;        <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaebfa9a01a0bb8a0935114ff0140cc45">TfLiteParserImpl::OutputShapeOfReshape</a>(inputTensorInfo, targetShape);</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;    <span class="comment">// Check for valid input size and that reshape parameters equal output shape</span></div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</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="l02221"></a><span class="lineno"> 2221</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="l02222"></a><span class="lineno"> 2222</span>&#160;    {</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;        ss &lt;&lt; <span class="stringliteral">&quot;New shape defined in reshape parameters &quot;</span></div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;           &lt;&lt; reshapeOutputTensorShape</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;           &lt;&lt; <span class="stringliteral">&quot; does not equal output shape &quot;</span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;           &lt;&lt; actualOutputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;           &lt;&lt; <span class="stringliteral">&quot;: &quot;</span></div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;           &lt;&lt; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</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="l02231"></a><span class="lineno"> 2231</span>&#160;    }</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;    <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> reshapeDesc;</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</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="l02235"></a><span class="lineno"> 2235</span>&#160;</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</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="l02237"></a><span class="lineno"> 2237</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</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="l02239"></a><span class="lineno"> 2239</span>&#160;</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;}</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseResizeBilinear(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;{</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;    ParseResize(subgraphIndex, operatorIndex, ResizeMethod::Bilinear);</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;}</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="keywordtype">void</span> TfLiteParserImpl::ParseResizeNearestNeighbor(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160;{</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;    ParseResize(subgraphIndex, operatorIndex, ResizeMethod::NearestNeighbor);</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> TfLiteParserImpl::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="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">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;</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_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">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(), 1);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> sizeTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;    <span class="comment">// Data for the parsed tensor args (size) must be stored locally.</span></div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;    std::vector&lt;int32_t&gt; sizeTensorData(sizeTensorInfo.GetNumElements());</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> sizeBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;    ::memcpy(sizeTensorData.data(), sizeBufferPtr-&gt;data.data(), sizeTensorInfo.GetNumBytes());</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;    <a class="code" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> desc;</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;    desc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#a869254cb56968986a78a79e1d6d4a86b">m_Method</a>       = resizeMethod;</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</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="l02278"></a><span class="lineno"> 2278</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="l02279"></a><span class="lineno"> 2279</span>&#160;    desc.m_DataLayout   = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Resize:&quot;</span>);</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">switch</span> (resizeMethod)</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;        <span class="keywordflow">case</span> ResizeMethod::Bilinear:</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;            layerName += fmt::format(<span class="stringliteral">&quot;BILINEAR:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</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;            <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="l02290"></a><span class="lineno"> 2290</span>&#160;            <span class="keyword">const</span> <span class="keyword">auto</span> * options     = operatorPtr-&gt;builtin_options.AsResizeBilinearOptions();</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;            desc.m_AlignCorners = options-&gt;align_corners;</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;        }</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;        <span class="keywordflow">case</span> ResizeMethod::NearestNeighbor:</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;            layerName += fmt::format(<span class="stringliteral">&quot;NEARESTNEIGHBOR:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;        }</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160;        <span class="keywordflow">default</span>:</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="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;                fmt::format(<span class="stringliteral">&quot;Unexpected ResizeMethod[{}] when creating layerName {} &quot;</span>,</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;                            static_cast&lt;int&gt;(resizeMethod), <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</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;    }</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;    CheckMatchingQuantization(inputTensorInfo, outputTensorInfo, layerName, <span class="stringliteral">&quot;Input 0&quot;</span>, <span class="stringliteral">&quot;Output 0&quot;</span>);</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</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="l02313"></a><span class="lineno"> 2313</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</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="l02315"></a><span class="lineno"> 2315</span>&#160;</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</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;</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseConcatenation(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160;{</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</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="l02326"></a><span class="lineno"> 2326</span>&#160;</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</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="l02328"></a><span class="lineno"> 2328</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsConcatenationOptions();</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160;</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(options, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</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="l02337"></a><span class="lineno"> 2337</span>&#160;    uint32_t inputRank = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]).<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</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="l02340"></a><span class="lineno"> 2340</span>&#160;        (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputRank) + options-&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="l02341"></a><span class="lineno"> 2341</span>&#160;</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</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="l02343"></a><span class="lineno"> 2343</span>&#160;    concatDescriptor.<a class="code" href="structarmnn_1_1_origins_descriptor.xhtml#a5b192c5fcd96a0f75542524cf646b355">SetConcatAxis</a>(concatDimInput);</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160;</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mergeDimOrigin = 0;</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</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="l02348"></a><span class="lineno"> 2348</span>&#160;    {</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[viewIndex]);</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160;        <span class="comment">// This set up concatDescriptor view origin</span></div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160;        <a class="code" href="namespacearmnn_utils.xhtml#a523deabeb7d0a884028b35eebfd1cb6c">armnnUtils::ProcessConcatInputTensorInfo</a>(</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160;            inputTensorInfo, concatDescriptor, concatDimInput, viewIndex, mergeDimOrigin);</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160;    }</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="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Concatenation:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160;</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</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="l02360"></a><span class="lineno"> 2360</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</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="l02362"></a><span class="lineno"> 2362</span>&#160;</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes});</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160;    <span class="comment">// add fused activation layer</span></div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;    layer = AddFusedActivationLayer(layer, 0, options-&gt;fused_activation_function);</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;}</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseFullyConnected(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, 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;    <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="l02378"></a><span class="lineno"> 2378</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> options = operatorRfr-&gt;builtin_options.AsFullyConnectedOptions();</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ac578671d13bca92fee7f492110247cbf">CHECK_SUPPORTED_FUSED_ACTIVATION</a>(options, subgraphIndex, operatorIndex);</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;    <a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> desc;</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</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="l02384"></a><span class="lineno"> 2384</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="l02385"></a><span class="lineno"> 2385</span>&#160;</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> filterTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</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="comment">// Fully Connected Layer accepts two dimensional weights input</span></div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</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="l02394"></a><span class="lineno"> 2394</span>&#160;    <span class="keywordflow">if</span> (weightsDimension != 2)</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;    {</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</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="l02397"></a><span class="lineno"> 2397</span>&#160;            fmt::format(<span class="stringliteral">&quot;Dimension {} for Fully Connected weights is not supported by Armnn. &quot;</span></div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;                        <span class="stringliteral">&quot;Node {}&quot;</span>,</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;                        weightsDimension,</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</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;</div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;    <span class="keyword">auto</span> filterTensorAndData = CreateConstTensor(inputs[1],</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;                                                 filterTensorInfo,</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</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="l02406"></a><span class="lineno"> 2406</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="l02407"></a><span class="lineno"> 2407</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;FullyConnected:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</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="keywordflow">if</span> (inputs.size() == 3)</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160;    {</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</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="l02412"></a><span class="lineno"> 2412</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> biasTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;        <span class="keyword">auto</span> biasTensorAndData = CreateConstTensor(inputs[2],</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;                                                   biasTensorInfo,</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</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="l02416"></a><span class="lineno"> 2416</span>&#160;        layer = m_Network-&gt;AddFullyConnectedLayer(desc,</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;                                                  filterTensorAndData.first,</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;                                                  <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(biasTensorAndData.first),</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;                                                  layerName.c_str());</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="keywordflow">else</span></div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;    {</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160;        layer = m_Network-&gt;AddFullyConnectedLayer(desc,</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;                                                  filterTensorAndData.first,</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160;                                                  <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160;                                                  layerName.c_str());</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;    }</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</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;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160;</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</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="l02435"></a><span class="lineno"> 2435</span>&#160;    {</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160;        <span class="comment">// Add reshape to flatten to 2D [batch_size, input_size],</span></div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</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="l02438"></a><span class="lineno"> 2438</span>&#160;        <span class="comment">// matching the second dimension of weights,</span></div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</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="l02440"></a><span class="lineno"> 2440</span>&#160;        std::vector&lt;unsigned int&gt; reshapedDimensions(2);</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;        reshapedDimensions[1] = filterTensorInfo.GetShape()[1];</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</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="l02443"></a><span class="lineno"> 2443</span>&#160;</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</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="l02445"></a><span class="lineno"> 2445</span>&#160;        {</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</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="l02447"></a><span class="lineno"> 2447</span>&#160;                    fmt::format(<span class="stringliteral">&quot;Failed to deduce input tensor shape from filter size {} {}&quot;</span>,</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160;                                reshapedDimensions[1],</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;                                <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;        }</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;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> reshapedTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</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="l02454"></a><span class="lineno"> 2454</span>&#160;</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160;        std::string reshapeLayerName = fmt::format(<span class="stringliteral">&quot;Reshape_for:{}&quot;</span>, layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">GetName</a>());</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160;        <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a> desc;</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</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="l02458"></a><span class="lineno"> 2458</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="l02459"></a><span class="lineno"> 2459</span>&#160;</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</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="l02461"></a><span class="lineno"> 2461</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="l02462"></a><span class="lineno"> 2462</span>&#160;</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160;        RegisterInputSlots(subgraphIndex, operatorIndex, reshapeLayer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;    }</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;    {</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;        <span class="comment">// register the input connection slot for the layer</span></div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;        <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160;        RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;    }</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</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="l02474"></a><span class="lineno"> 2474</span>&#160;</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</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="l02476"></a><span class="lineno"> 2476</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="l02477"></a><span class="lineno"> 2477</span>&#160;                                                                             options-&gt;fused_activation_function);</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</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="l02480"></a><span class="lineno"> 2480</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, fusedActivationLayer, {outputTensorIndexes[0]});</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;}</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseDetectionPostProcess(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;{</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</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="l02487"></a><span class="lineno"> 2487</span>&#160;</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</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="l02489"></a><span class="lineno"> 2489</span>&#160;</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 4);</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;    <span class="comment">// Obtain custom options from flexbuffers</span></div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;    <span class="keyword">auto</span> custom_options = operatorPtr-&gt;custom_options;</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</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="l02497"></a><span class="lineno"> 2497</span>&#160;</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;    <span class="comment">// Obtain descriptor information from tf lite</span></div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;    <a class="code" href="structarmnn_1_1_detection_post_process_descriptor.xhtml">DetectionPostProcessDescriptor</a> desc;</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</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="l02501"></a><span class="lineno"> 2501</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="l02502"></a><span class="lineno"> 2502</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="l02503"></a><span class="lineno"> 2503</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="l02504"></a><span class="lineno"> 2504</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="l02505"></a><span class="lineno"> 2505</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="l02506"></a><span class="lineno"> 2506</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="l02507"></a><span class="lineno"> 2507</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="l02508"></a><span class="lineno"> 2508</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="l02509"></a><span class="lineno"> 2509</span>&#160;</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;    <span class="keywordflow">if</span> (!(m[<span class="stringliteral">&quot;use_regular_nms&quot;</span>].IsNull()))</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;    {</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</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="l02513"></a><span class="lineno"> 2513</span>&#160;    }</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;    <span class="keywordflow">if</span> (!(m[<span class="stringliteral">&quot;detections_per_class&quot;</span>].IsNull()))</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;    {</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</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="l02517"></a><span class="lineno"> 2517</span>&#160;    }</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</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="l02520"></a><span class="lineno"> 2520</span>&#160;    {</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</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="l02522"></a><span class="lineno"> 2522</span>&#160;                                       <span class="stringliteral">&quot;must be positive and less than or equal to 1.&quot;</span>);</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;    }</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> anchorTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[2]);</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;    <span class="keyword">auto</span> anchorTensorAndData = CreateConstTensor(inputs[2], anchorTensorInfo,</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</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="l02528"></a><span class="lineno"> 2528</span>&#160;</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;DetectionPostProcess:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</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="l02531"></a><span class="lineno"> 2531</span>&#160;                                                                       layerName.c_str());</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;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</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;    <span class="comment">// The model does not specify the output shapes.</span></div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</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="l02537"></a><span class="lineno"> 2537</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="l02538"></a><span class="lineno"> 2538</span>&#160;    m_OverridenOutputShapes.push_back({ 1, numDetectedBox, 4 });</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;    m_OverridenOutputShapes.push_back({ 1, numDetectedBox });</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;    m_OverridenOutputShapes.push_back({ 1, numDetectedBox });</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160;    m_OverridenOutputShapes.push_back({ 1 });</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;    <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="l02544"></a><span class="lineno"> 2544</span>&#160;    {</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> detectionBoxOutputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[i], m_OverridenOutputShapes[i]);</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</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="l02547"></a><span class="lineno"> 2547</span>&#160;    }</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="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="l02550"></a><span class="lineno"> 2550</span>&#160;    <span class="comment">// only the tensors for the inputs are relevant, exclude the const tensors</span></div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</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;    <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="l02555"></a><span class="lineno"> 2555</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0],</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;                                                              outputTensorIndexes[1],</div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;                                                              outputTensorIndexes[2],</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;                                                              outputTensorIndexes[3]});</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;<span class="comment"></span></div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;<span class="comment">/// The TfLite Pack operator is equivalent to the ArmNN Stack operator</span></div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;<span class="comment"></span><span class="keywordtype">void</span> TfLiteParserImpl::ParsePack(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;{</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</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="l02566"></a><span class="lineno"> 2566</span>&#160;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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">if</span> (inputs.size() &lt; 1)</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="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="l02574"></a><span class="lineno"> 2574</span>&#160;    }</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="keyword">const</span> <span class="keyword">auto</span>&amp; operatorPtr = m_Model-&gt;subgraphs[subgraphIndex]-&gt;operators[operatorIndex];</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span>* options = operatorPtr-&gt;builtin_options.AsPackOptions();</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160;</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;    <a class="code" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> desc;</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</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>(options-&gt;axis);</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</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="l02582"></a><span class="lineno"> 2582</span>&#160;</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</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="l02584"></a><span class="lineno"> 2584</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</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="l02586"></a><span class="lineno"> 2586</span>&#160;</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Pack:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</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="l02589"></a><span class="lineno"> 2589</span>&#160;</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</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;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</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="l02594"></a><span class="lineno"> 2594</span>&#160;</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes});</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;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;}</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseUnpack(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</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="l02607"></a><span class="lineno"> 2607</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsUnpackOptions();</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160;</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;    <span class="comment">// This unpackAxis indicates the axis to unpack</span></div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</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>(options-&gt;axis);</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;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</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_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160;    <span class="keywordflow">if</span> (unpackAxis &gt;= inputTensorInfo.GetNumDimensions())</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160;    {</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</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="l02620"></a><span class="lineno"> 2620</span>&#160;                fmt::format(<span class="stringliteral">&quot;The unpack axis: {} cannot be greater than or equal to &quot;</span></div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;                            <span class="stringliteral">&quot;the number of input dimension {} {}&quot;</span>,</div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;                            unpackAxis,</div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160;                            inputTensorInfo.GetNumDimensions(),</div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;                            <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</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;</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</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>(options-&gt;num);</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</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="l02629"></a><span class="lineno"> 2629</span>&#160;    <span class="keywordflow">if</span>(unpackNum == 0)</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;        unpackNum = inputTensorInfo.GetShape()[unpackAxis];</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;    }</div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;    <span class="comment">// If unpack number cannot be inferred and is still zero, throw ParseException.</span></div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;    <span class="keywordflow">if</span>(unpackNum == 0)</div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;    {</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</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="l02638"></a><span class="lineno"> 2638</span>&#160;    }</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), unpackNum);</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;    <span class="keyword">auto</span> inputDimSize = inputTensorInfo.GetNumDimensions();</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160;    std::vector&lt;unsigned int&gt; unpackDimSizes(inputDimSize);</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160;</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;    <span class="comment">// Add current input shape to unpackDimSizes</span></div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</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="l02648"></a><span class="lineno"> 2648</span>&#160;    {</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;        unpackDimSizes[i] = inputTensorInfo.GetShape()[i];</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;    }</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">if</span> (unpackDimSizes[unpackAxis] != unpackNum)</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160;    {</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</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="l02655"></a><span class="lineno"> 2655</span>&#160;                             <span class="stringliteral">&quot;unpack along.&quot;</span>);</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160;    }</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;    unpackDimSizes[unpackAxis] /= unpackNum;</div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160;</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</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="l02661"></a><span class="lineno"> 2661</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="l02662"></a><span class="lineno"> 2662</span>&#160;    {</div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160;        <span class="comment">// Set the size of the views.</span></div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</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="l02665"></a><span class="lineno"> 2665</span>&#160;        {</div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</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="l02667"></a><span class="lineno"> 2667</span>&#160;        }</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</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="l02669"></a><span class="lineno"> 2669</span>&#160;    }</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;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Unpack:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</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="l02673"></a><span class="lineno"> 2673</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160;</div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</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="l02676"></a><span class="lineno"> 2676</span>&#160;                                            unpackDimSizes.data());</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160;</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160;</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</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="l02682"></a><span class="lineno"> 2682</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="l02683"></a><span class="lineno"> 2683</span>&#160;    {</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[k], <span class="keyword">true</span>);</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160;        std::string reshapeLayerName = fmt::format(<span class="stringliteral">&quot;Reshape_for:{}&quot;</span>, layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">GetName</a>());</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160;        <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a> desc;</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</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="l02688"></a><span class="lineno"> 2688</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="l02689"></a><span class="lineno"> 2689</span>&#160;</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</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="l02691"></a><span class="lineno"> 2691</span>&#160;                                                                outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>(),</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;                                                                outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a047ca888c43bd7fb5702853bf72410d0">GetQuantizationScale</a>(),</div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160;                                                                outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a770b51078da02f44a819e9f95d8058b5">GetQuantizationOffset</a>()));</div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</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="l02695"></a><span class="lineno"> 2695</span>&#160;</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</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="l02697"></a><span class="lineno"> 2697</span>&#160;</div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</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="l02699"></a><span class="lineno"> 2699</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="l02700"></a><span class="lineno"> 2700</span>&#160;        RegisterProducerOfTensor(subgraphIndex, reshapedOutputId, slot);</div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160;    }</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;</div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseSplit(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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"> 2706</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="l02707"></a><span class="lineno"> 2707</span>&#160;</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</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="l02709"></a><span class="lineno"> 2709</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsSplitOptions();</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160;</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</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>(options-&gt;num_splits);</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160;    <span class="comment">// If number of splits cannot be inferred and is zero, throw ParseException.</span></div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;    <span class="keywordflow">if</span>(numSplits == 0)</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;        <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="l02717"></a><span class="lineno"> 2717</span>&#160;    }</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160;</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), numSplits);</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160;</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> axisTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160;</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> axisBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[0]-&gt;buffer);</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</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="l02729"></a><span class="lineno"> 2729</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="l02730"></a><span class="lineno"> 2730</span>&#160;</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(axisTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() == 1);</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</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="l02733"></a><span class="lineno"> 2733</span>&#160;</div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160;    <span class="keyword">auto</span> inputDimSize = inputTensorInfo.GetNumDimensions();</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160;    <span class="keywordflow">if</span> (inputDimSize &gt; <a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>)</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;    {</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</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="l02738"></a><span class="lineno"> 2738</span>&#160;            fmt::format(<span class="stringliteral">&quot;The number of dimensions: {} for input tensors of the split op cannot be greater than {} {}&quot;</span>,</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160;                        inputTensorInfo.GetNumDimensions(),</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;                        <a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>,</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</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;</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;    std::vector&lt;unsigned int&gt; splitterDimSizes(inputDimSize);</div><div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160;</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160;    <span class="comment">// Add current input shape to splitterDimSizes</span></div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</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="l02748"></a><span class="lineno"> 2748</span>&#160;    {</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160;        splitterDimSizes[i] = inputTensorInfo.GetShape()[i];</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;    }</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160;    <span class="keywordflow">if</span> (splitterDimSizes[splitDim] % numSplits != 0)</div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160;    {</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</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="l02755"></a><span class="lineno"> 2755</span>&#160;    }</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160;    splitterDimSizes[splitDim] /= numSplits;</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;    <a class="code" href="structarmnn_1_1_views_descriptor.xhtml">SplitterDescriptor</a> splitDesc(numSplits, inputDimSize);</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</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="l02760"></a><span class="lineno"> 2760</span>&#160;    {</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;        <span class="comment">// Set the size of the views.</span></div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</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="l02763"></a><span class="lineno"> 2763</span>&#160;        {</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</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="l02765"></a><span class="lineno"> 2765</span>&#160;        }</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</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="l02767"></a><span class="lineno"> 2767</span>&#160;    }</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Split:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</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="l02771"></a><span class="lineno"> 2771</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[1]});</div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160;</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</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="l02777"></a><span class="lineno"> 2777</span>&#160;    {</div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[k], <span class="keyword">true</span>);</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</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="l02780"></a><span class="lineno"> 2780</span>&#160;    }</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</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"><a class="line" href="namespacearmnn_tf_lite_parser.xhtml#a85c693ec44ec126eb56462857fe634fc"> 2786</a></span>&#160;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacearmnn_tf_lite_parser.xhtml#a85c693ec44ec126eb56462857fe634fc">ComputeWrappedIndex</a>(<span class="keywordtype">int</span> idx, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDimsIn)</div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;{</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160;    <span class="keywordtype">int</span> numDims = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(numDimsIn);</div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160;    <span class="keywordtype">int</span> v = idx &lt; 0 ? numDims + idx : idx;</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(v &gt;= 0);</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(v &lt; numDims);</div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160;</div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(v);</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;</div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseSplitV(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160;{</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</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="l02799"></a><span class="lineno"> 2799</span>&#160;</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</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="l02801"></a><span class="lineno"> 2801</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsSplitVOptions();</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;</div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 3);</div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160;</div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;    <span class="keyword">auto</span>&amp; inputTensor = inputs[0];</div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160;    <span class="keyword">auto</span>&amp; splitsTensor = inputs[1];</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160;    <span class="keyword">auto</span>&amp; axisTensor = inputs[2];</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160;</div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputTensor);</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> splitsInfo      = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(splitsTensor);</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> axisTensorInfo  = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(axisTensor);</div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(axisTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() == 1);</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;    <span class="comment">// Inputs</span></div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;    <span class="keyword">auto</span> inputDimSize = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160;    <span class="keywordflow">if</span> (inputDimSize &gt; <a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>)</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160;    {</div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</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="l02820"></a><span class="lineno"> 2820</span>&#160;            fmt::format(<span class="stringliteral">&quot;The number of dimensions: {} for input tensors of the &quot;</span></div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160;                        <span class="stringliteral">&quot;SplitV op cannot be greater than {} {}&quot;</span>,</div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160;                        inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;                        <a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>,</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;    }</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;    <span class="comment">// Get split axis</span></div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> axisBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, axisTensor-&gt;buffer);</div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160;    std::vector&lt;int&gt; axisData(axisTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</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="l02831"></a><span class="lineno"> 2831</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> splitDim = <a class="code" href="namespacearmnn_tf_lite_parser.xhtml#a85c693ec44ec126eb56462857fe634fc">ComputeWrappedIndex</a>(axisData[0], inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</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;    <span class="comment">// Set split sizes</span></div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(splitsInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(), 1);</div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSplits{0};</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;</div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;    <span class="keywordflow">if</span>(options)</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;    {</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;        numSplits = <a class="code" href="_verification_helpers_8hpp.xhtml#aaef93dc9a69f51b59f3cdd0ff0165927">CHECKED_NON_NEGATIVE</a>(options-&gt;num_splits);</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="keywordflow">else</span></div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160;    {</div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;        numSplits = splitsInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>();</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;</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160;    <span class="keywordflow">if</span> (numSplits &lt;=0)</div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160;    {</div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(<span class="stringliteral">&quot;SplitV has invalid number of splits&quot;</span>);</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;    std::vector&lt;int&gt; splitsData(numSplits);</div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> splitsBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, splitsTensor-&gt;buffer);</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160;    ::memcpy(splitsData.data(), splitsBufferPtr-&gt;data.data(), splitsInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0;</div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;    <span class="keywordtype">int</span> numInferred{0};</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inferIdx{0};</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160;    <span class="keywordtype">int</span> splitSum{0};</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> split : splitsData)</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> (split &lt; 0)</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160;        {</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160;            numInferred++;</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160;            inferIdx = idx;</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160;        }</div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160;        {</div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160;            splitSum += split;</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;        idx++;</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160;    }</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160;    <span class="comment">// Check for inferred Axis</span></div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;    <span class="keywordflow">if</span> (numInferred == 0)</div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160;    {</div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160;        <span class="keywordflow">if</span> (splitSum != armnn::numeric_cast&lt;int&gt;(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[splitDim]))</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160;        {</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(<span class="stringliteral">&quot;SplitV split_sizes does not sum to the dimension of value along split_dim.&quot;</span>);</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160;        }</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;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (numInferred == 1)</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;        splitsData[inferIdx] = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">int</span>&gt;(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[splitDim]) - splitSum;</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;    <span class="keywordflow">else</span></div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160;    {</div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(<span class="stringliteral">&quot;Cannot infer split size for more than one split&quot;</span>);</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;</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;    <span class="comment">//Ouput size validation</span></div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), numSplits);</div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160;</div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160;    <span class="comment">// Setup Armnn descriptor</span></div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;    <a class="code" href="structarmnn_1_1_views_descriptor.xhtml">SplitterDescriptor</a> splitDesc(numSplits, inputDimSize);</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> accumSplit = 0;</div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</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="l02897"></a><span class="lineno"> 2897</span>&#160;    {</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> splitSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(splitsData[j]);</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160;</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;        <span class="comment">// Set the size of the views.</span></div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx &lt; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); ++dimIdx)</div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160;        {</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160;            <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimSize = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dimIdx];</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160;            <span class="keywordflow">if</span> (dimIdx == splitDim)</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;                dimSize = splitSize;</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160;            }</div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160;            splitDesc.SetViewSize(j, dimIdx, dimSize);</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160;        }</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160;</div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160;        splitDesc.SetViewOriginCoord(j, splitDim, accumSplit);</div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160;        accumSplit += splitSize;</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160;    }</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160;</div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;SplitV:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</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="l02917"></a><span class="lineno"> 2917</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;</div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160;</div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</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="l02923"></a><span class="lineno"> 2923</span>&#160;    {</div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[k], <span class="keyword">true</span>);</div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</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="l02926"></a><span class="lineno"> 2926</span>&#160;    }</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160;</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;}</div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160;</div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseArgMax(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160;{</div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</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="l02935"></a><span class="lineno"> 2935</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> *options = operatorPtr-&gt;builtin_options.AsArgMaxOptions();</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</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="l02938"></a><span class="lineno"> 2938</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160;</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160;</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;ArgMax:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160;</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> sizeTensorInfo0 = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> sizeTensorInfo1 = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160;</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160;    <span class="comment">// Get const axis value from model and set it to descriptor.</span></div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> axisBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</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;    <a class="code" href="structarmnn_1_1_arg_min_max_descriptor.xhtml">ArgMinMaxDescriptor</a> desc;</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160;    desc.<a class="code" href="structarmnn_1_1_arg_min_max_descriptor.xhtml#a214c3636fdf0ea5bac8edb42d0e6c7f0">m_Axis</a> = axisBufferPtr-&gt;data.data()[0];</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160;    <span class="comment">// If output_type is int32 then set Signed32 else Signed64. Default type is Signed64.</span></div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160;    desc.<a class="code" href="structarmnn_1_1_arg_min_max_descriptor.xhtml#abce784834696eb928c620f1fafe71a8d">m_Output_Type</a> = options-&gt;output_type == 3 ? <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a> : <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">armnn::DataType::Signed64</a>;</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160;    desc.<a class="code" href="structarmnn_1_1_arg_min_max_descriptor.xhtml#ab1ae6f520bb1a4da191a0ae907477f23">m_Function</a> = ArgMinMaxFunction::Max;</div><div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160;</div><div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160;    <span class="comment">// Register a ArgMax layer.</span></div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *layer = m_Network-&gt;AddArgMinMaxLayer(desc, layerName.c_str());</div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160;</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</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="l02963"></a><span class="lineno"> 2963</span>&#160;</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;    <span class="comment">// Register input tensor to the layer.</span></div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</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;    <span class="comment">// Register output tensor to the layer.</span></div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</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;</div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseGather(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160;</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParserImpl::TensorRawPtrVector</a> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParserImpl::TensorRawPtrVector</a> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160;</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> indicesTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160;</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;    <a class="code" href="structarmnn_1_1_gather_descriptor.xhtml">armnn::GatherDescriptor</a> gatherDescriptor;</div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160;</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</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="l02989"></a><span class="lineno"> 2989</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsGatherOptions();</div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160;    <span class="keyword">auto</span> axis = options-&gt;axis;</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> inputDimensions = <span class="keyword">static_cast&lt;</span>int32_t<span class="keyword">&gt;</span>(inputTensorInfo.GetNumDimensions());</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160;    <span class="keyword">auto</span> indicesDimensions = indicesTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160;    <span class="keyword">auto</span> outputDimensions = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160;    <span class="keywordflow">if</span> (((axis &lt; -inputDimensions) &amp;&amp; (axis &lt; 0)) || ((axis &gt;= inputDimensions) &amp;&amp; (axis &gt; 0)))</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160;    {</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</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="l02998"></a><span class="lineno"> 2998</span>&#160;            fmt::format(<span class="stringliteral">&quot;Operation has invalid axis: {} It is out of bounds [ -{}, {} ) {}&quot;</span>,</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160;                        axis,</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;                        inputDimensions, inputDimensions,</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;    }</div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160;    <span class="keywordflow">if</span> (outputDimensions != static_cast&lt;unsigned int&gt;(inputDimensions) + indicesDimensions - 1)</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;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160;            fmt::format(<span class="stringliteral">&quot;Operation has invalid output dimensions: {} Output must be an ({} + {} - 1) -D tensor {}&quot;</span>,</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160;                        outputDimensions,</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160;                        inputDimensions, indicesDimensions,</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160;    }</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160;    gatherDescriptor.<a class="code" href="structarmnn_1_1_gather_descriptor.xhtml#a35d11c7d509d1adbae1ae01c58394a7f">m_Axis</a> = axis;</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Gather:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddGatherLayer(gatherDescriptor, layerName.c_str());</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</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="l03018"></a><span class="lineno"> 3018</span>&#160;</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0], inputTensorIndexes[1]});</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;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160;}</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseDepthToSpace(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160;{</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</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="l03029"></a><span class="lineno"> 3029</span>&#160;</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParserImpl::TensorRawPtrVector</a> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 1);</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParserImpl::TensorRawPtrVector</a> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</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;    <a class="code" href="structarmnn_1_1_space_to_depth_descriptor.xhtml">armnn::DepthToSpaceDescriptor</a> descriptor;</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160;</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</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="l03038"></a><span class="lineno"> 3038</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> * options = operatorPtr-&gt;builtin_options.AsDepthToSpaceOptions();</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160;    <span class="keyword">auto</span> blockSize = options-&gt;block_size;</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160;    <span class="keywordflow">if</span> (blockSize &lt; 2)</div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;    {</div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</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="l03043"></a><span class="lineno"> 3043</span>&#160;            fmt::format(<span class="stringliteral">&quot;Operation has invalid block size: {} Block size should be &gt;= 2 {}&quot;</span>,</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160;                        blockSize,</div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160;    }</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160;    descriptor.m_BlockSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(blockSize);</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"> 3049</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;DepthToSpace:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = m_Network-&gt;AddDepthToSpaceLayer(descriptor, layerName.c_str());</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0], <span class="keyword">true</span>);</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</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="l03054"></a><span class="lineno"> 3054</span>&#160;</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</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;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, {outputTensorIndexes[0]});</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;</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseSum(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</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;    ParseReduce(subgraphIndex, operatorIndex, <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">armnn::ReduceOperation::Sum</a>);</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;}</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160;</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseReduceMax(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;{</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;    ParseReduce(subgraphIndex, operatorIndex, <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">armnn::ReduceOperation::Max</a>);</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;<span class="keywordtype">void</span> TfLiteParserImpl::ParseReduceMin(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160;{</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160;    ParseReduce(subgraphIndex, operatorIndex, <a class="code" href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ReduceOperation::Min</a>);</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160;}</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160;</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::ParseReduce(<span class="keywordtype">size_t</span> subgraphIndex, <span class="keywordtype">size_t</span> operatorIndex, <a class="code" href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0">ReduceOperation</a> reduceOperation)</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;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160;</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</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="l03082"></a><span class="lineno"> 3082</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> *options = operatorPtr-&gt;builtin_options.AsReducerOptions();</div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160;</div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">GetInputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(inputs.size(), 2);</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;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">GetOutputs</a>(m_Model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160;    <a class="code" href="_verification_helpers_8hpp.xhtml#a479b2821a7a2cbb8fa8eb7f60a47065d">CHECK_VALID_SIZE</a>(outputs.size(), 1);</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;</div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160;    <span class="keyword">auto</span> layerName = fmt::format(<span class="stringliteral">&quot;Reduce:{}:{}&quot;</span>, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo0 = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[0]);</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> inputTensorInfo1 = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(inputs[1]);</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;    <a class="code" href="structarmnn_1_1_reduce_descriptor.xhtml">ReduceDescriptor</a> desc;</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">BufferRawPtr</a> axisBufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, inputs[1]-&gt;buffer);</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160;    <span class="comment">// Get const axis value from model and set it to descriptor.</span></div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160;    <span class="keywordflow">if</span> (axisBufferPtr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160;    {</div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;        std::vector&lt;int32_t&gt; axisData(inputTensorInfo1.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;        ::memcpy(axisData.data(), axisBufferPtr-&gt;data.data(), inputTensorInfo1.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abcbdfb544ece4c31d0b37715ad0f3be0">GetNumBytes</a>());</div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160;</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160;        <span class="comment">// Convert the axis to unsigned int and remove duplicates.</span></div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160;        <span class="keyword">auto</span> rank = <span class="keyword">static_cast&lt;</span>int32_t<span class="keyword">&gt;</span>(inputTensorInfo0.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;        std::set&lt;unsigned int&gt; uniqueAxis;</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160;        std::transform(axisData.begin(),</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;                       axisData.end(),</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160;                       std::inserter(uniqueAxis, uniqueAxis.begin()),</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160;                       [rank](<span class="keywordtype">int</span> i)-&gt;unsigned <span class="keywordtype">int</span>{</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;                               <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(((i + rank) % rank)); });</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160;        desc.<a class="code" href="structarmnn_1_1_reduce_descriptor.xhtml#aa1c6fc8c96404252f1072632fc5acb59">m_vAxis</a>.assign(uniqueAxis.begin(), uniqueAxis.end());</div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;    }</div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;    {</div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160;        <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; inputTensorInfo0.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); ++i)</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160;        {</div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;            desc.<a class="code" href="structarmnn_1_1_reduce_descriptor.xhtml#aa1c6fc8c96404252f1072632fc5acb59">m_vAxis</a>.push_back(i);</div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160;        }</div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;    }</div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160;</div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160;    desc.<a class="code" href="structarmnn_1_1_reduce_descriptor.xhtml#a28e0548abfc4e79c48f29a3d11a062e9">m_KeepDims</a>        = options-&gt;keep_dims;</div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160;    desc.<a class="code" href="structarmnn_1_1_reduce_descriptor.xhtml#aa57c67b1da0011b1abb30170146e870f">m_ReduceOperation</a> = reduceOperation;</div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160;</div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160;    <span class="comment">// Register a new layer object, Sum.</span></div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *layer = m_Network-&gt;AddReduceLayer(desc, layerName.c_str());</div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160;</div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(outputs[0]);</div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</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="l03129"></a><span class="lineno"> 3129</span>&#160;</div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160;    <span class="comment">// Register input tensor to the layer.</span></div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160;    <span class="keyword">auto</span> inputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">GetInputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160;    RegisterInputSlots(subgraphIndex, operatorIndex, layer, {inputTensorIndexes[0]});</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160;</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160;    <span class="comment">// Register output tensor to the layer.</span></div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160;    <span class="keyword">auto</span> outputTensorIndexes = AsUnsignedVector(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">GetOutputTensorIds</a>(m_Model, subgraphIndex, operatorIndex));</div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;    RegisterOutputSlots(subgraphIndex, operatorIndex, layer, outputTensorIndexes);</div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160;}</div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* TfLiteParserImpl::AddFusedActivationLayer(<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* prevLayer,</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160;                                                                    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputSlot,</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160;                                                                    tflite::ActivationFunctionType activationType)</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160;{</div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160;    <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</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="l03145"></a><span class="lineno"> 3145</span>&#160;</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160;    <span class="keywordflow">switch</span>(activationType)</div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160;    {</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_NONE:</div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160;        {</div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160;            <span class="comment">// this is a no-op: return previous layer</span></div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160;            <span class="keywordflow">return</span> prevLayer;</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160;        }</div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU:</div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160;        {</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</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="l03156"></a><span class="lineno"> 3156</span>&#160;            layerName += <span class="stringliteral">&quot;:RELU&quot;</span>;</div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160;        }</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU6:</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160;        {</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</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="l03162"></a><span class="lineno"> 3162</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="l03163"></a><span class="lineno"> 3163</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="l03164"></a><span class="lineno"> 3164</span>&#160;            layerName += <span class="stringliteral">&quot;:RELU6&quot;</span>;</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160;        }</div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_TANH:</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160;        {</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</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="l03170"></a><span class="lineno"> 3170</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="l03171"></a><span class="lineno"> 3171</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="l03172"></a><span class="lineno"> 3172</span>&#160;            layerName += <span class="stringliteral">&quot;:TANH&quot;</span>;</div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160;        }</div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160;</div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</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="l03177"></a><span class="lineno"> 3177</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_RELU_N1_TO_1:</div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160;        <span class="keywordflow">case</span> tflite::ActivationFunctionType_SIGN_BIT:</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160;        {</div><div class="line"><a name="l03181"></a><span class="lineno"> 3181</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="l03182"></a><span class="lineno"> 3182</span>&#160;                fmt::format(<span class="stringliteral">&quot;TfLite parser doesn&#39;t suppport fused activation: &quot;</span></div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160;                            <span class="stringliteral">&quot;{}/{} {} &quot;</span>,</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160;                            activationType,</div><div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160;                            tflite::EnumNameActivationFunctionType(activationType),</div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160;                            <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160;</div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160;        }</div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160;    }</div><div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160;</div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160;    <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* activationLayer =</div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160;        m_Network-&gt;AddActivationLayer(activationDesc, layerName.c_str());</div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160;</div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</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="l03195"></a><span class="lineno"> 3195</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="l03196"></a><span class="lineno"> 3196</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="l03197"></a><span class="lineno"> 3197</span>&#160;    <span class="keywordflow">return</span> activationLayer;</div><div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160;}</div><div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160;</div><div class="line"><a name="l03200"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#af9590c2ae8d68b5da999d3d6ab21dd3b"> 3200</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">TfLiteParserImpl::ModelPtr</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#af9590c2ae8d68b5da999d3d6ab21dd3b">TfLiteParserImpl::LoadModelFromFile</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * fileName)</div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;{</div><div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160;    <span class="keywordflow">if</span> (fileName == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160;    {</div><div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;Invalid (null) file name {}&quot;</span>,</div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160;                                       <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160;    }</div><div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160;    std::error_code errorCode;</div><div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160;    fs::path pathToFile(fileName);</div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160;    <span class="keywordflow">if</span> (!fs::exists(pathToFile, errorCode))</div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160;    {</div><div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160;        <span class="comment">//fmt::format() could not be used here (format error)</span></div><div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160;        std::stringstream msg;</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160;        msg &lt;&lt; <span class="stringliteral">&quot;Cannot find the file (&quot;</span> &lt;&lt; fileName &lt;&lt; <span class="stringliteral">&quot;) errorCode: &quot;</span> &lt;&lt; errorCode</div><div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160;            &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>&#160;</div><div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_file_not_found_exception.xhtml">FileNotFoundException</a>(msg.str());</div><div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160;    }</div><div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160;    std::ifstream file(fileName, std::ios::binary);</div><div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160;    std::string fileContent((std::istreambuf_iterator&lt;char&gt;(file)), std::istreambuf_iterator&lt;char&gt;());</div><div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a7f3fc56b7306b444f06f45cdc4032bbf">LoadModelFromBinary</a>(reinterpret_cast&lt;const uint8_t *&gt;(fileContent.c_str()),</div><div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160;                               fileContent.size());</div><div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160;}</div><div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160;</div><div class="line"><a name="l03224"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a7f3fc56b7306b444f06f45cdc4032bbf"> 3224</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">TfLiteParserImpl::ModelPtr</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a7f3fc56b7306b444f06f45cdc4032bbf">TfLiteParserImpl::LoadModelFromBinary</a>(<span class="keyword">const</span> uint8_t * binaryContent, <span class="keywordtype">size_t</span> len)</div><div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160;{</div><div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160;    <span class="keywordflow">if</span> (binaryContent == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160;     {</div><div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(fmt::format(<span class="stringliteral">&quot;Invalid (null) binary content {}&quot;</span>,</div><div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160;                                       <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>&#160;     }</div><div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160;    flatbuffers::Verifier verifier(binaryContent, len);</div><div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160;    <span class="keywordflow">if</span> (verifier.VerifyBuffer&lt;tflite::Model&gt;() == <span class="keyword">false</span>)</div><div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160;    {</div><div class="line"><a name="l03234"></a><span class="lineno"> 3234</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="l03235"></a><span class="lineno"> 3235</span>&#160;            fmt::format(<span class="stringliteral">&quot;Buffer doesn&#39;t conform to the expected Tensorflow Lite &quot;</span></div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160;                        <span class="stringliteral">&quot;flatbuffers format. size:{} {}&quot;</span>,</div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;                        len,</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160;    }</div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160;    <span class="keywordflow">return</span> tflite::UnPackModel(binaryContent);</div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160;}</div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160;</div><div class="line"><a name="l03243"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb"> 3243</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParserImpl::TensorRawPtrVector</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">TfLiteParserImpl::GetInputs</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a> &amp; model,</div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160;                                                                 <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160;                                                                 <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160;{</div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160;</div><div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = subgraphPtr-&gt;operators[operatorIndex];</div><div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>&#160;</div><div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>&#160;    <span class="keywordtype">size_t</span> inputCount = operatorPtr-&gt;inputs.size();</div><div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TensorRawPtrVector</a> result(inputCount);</div><div class="line"><a name="l03254"></a><span class="lineno"> 3254</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="l03255"></a><span class="lineno"> 3255</span>&#160;    {</div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</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="l03257"></a><span class="lineno"> 3257</span>&#160;        result[i] = subgraphPtr-&gt;tensors[inputId].get();</div><div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160;    }</div><div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160;}</div><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160;</div><div class="line"><a name="l03262"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488"> 3262</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TfLiteParserImpl::TensorRawPtrVector</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">TfLiteParserImpl::GetOutputs</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a> &amp; model,</div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;                                                                  <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160;                                                                  <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160;{</div><div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>&#160;</div><div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = subgraphPtr-&gt;operators[operatorIndex];</div><div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>&#160;</div><div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>&#160;    <span class="keywordtype">size_t</span> outputCount = operatorPtr-&gt;outputs.size();</div><div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">TensorRawPtrVector</a> result(outputCount);</div><div class="line"><a name="l03273"></a><span class="lineno"> 3273</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="l03274"></a><span class="lineno"> 3274</span>&#160;    {</div><div class="line"><a name="l03275"></a><span class="lineno"> 3275</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="l03276"></a><span class="lineno"> 3276</span>&#160;        <a class="code" href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">CHECK_TENSOR</a>(model, subgraphIndex, outputId);</div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;        result[i] = subgraphPtr-&gt;tensors[outputId].get();</div><div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160;    }</div><div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160;}</div><div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160;</div><div class="line"><a name="l03282"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a20518e431cb501b172371b850e6c3ec7"> 3282</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a86428e0c674542488c7292dfbe2ce381">TfLiteParserImpl::TensorIdRawPtrVector</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a20518e431cb501b172371b850e6c3ec7">TfLiteParserImpl::GetSubgraphInputs</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a> &amp; model,</div><div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160;                                                                           <span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160;{</div><div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(model, subgraphIndex);</div><div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>&#160;</div><div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>&#160;    <span class="keywordtype">size_t</span> inputCount = subgraphPtr-&gt;inputs.size();</div><div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a86428e0c674542488c7292dfbe2ce381">TensorIdRawPtrVector</a> result(inputCount);</div><div class="line"><a name="l03290"></a><span class="lineno"> 3290</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="l03291"></a><span class="lineno"> 3291</span>&#160;    {</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</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="l03293"></a><span class="lineno"> 3293</span>&#160;        <a class="code" href="_tf_lite_parser_8cpp.xhtml#aa1664dc13adbc85ac12fb584b76bfdae">CHECK_TENSOR</a>(model, subgraphIndex, inputId);</div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160;        result[i] = std::make_pair(inputId, subgraphPtr-&gt;tensors[inputId].get());</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160;    }</div><div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160;}</div><div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>&#160;</div><div class="line"><a name="l03299"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a1bd7b663eb19e2355b6aa5c36232d6fc"> 3299</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a86428e0c674542488c7292dfbe2ce381">TfLiteParserImpl::TensorIdRawPtrVector</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a1bd7b663eb19e2355b6aa5c36232d6fc">TfLiteParserImpl::GetSubgraphOutputs</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a> &amp; model,</div><div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160;                                                                            <span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160;{</div><div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(model, subgraphIndex);</div><div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160;</div><div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>&#160;    <span class="keywordtype">size_t</span> outputCount = subgraphPtr-&gt;outputs.size();</div><div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>&#160;    <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a86428e0c674542488c7292dfbe2ce381">TensorIdRawPtrVector</a> result(outputCount);</div><div class="line"><a name="l03307"></a><span class="lineno"> 3307</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="l03308"></a><span class="lineno"> 3308</span>&#160;    {</div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</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="l03310"></a><span class="lineno"> 3310</span>&#160;        result[i] = std::make_pair(outputId, subgraphPtr-&gt;tensors[outputId].get());</div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160;    }</div><div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>&#160;}</div><div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>&#160;</div><div class="line"><a name="l03315"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575"> 3315</a></span>&#160;std::vector&lt;int32_t&gt;&amp; <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">TfLiteParserImpl::GetInputTensorIds</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a>&amp; model,</div><div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>&#160;                                                          <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160;                                                          <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160;{</div><div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = subgraphPtr-&gt;operators[operatorIndex];</div><div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>&#160;    <span class="keywordflow">return</span> operatorPtr-&gt;inputs;</div><div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>&#160;}</div><div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>&#160;</div><div class="line"><a name="l03325"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f"> 3325</a></span>&#160;std::vector&lt;int32_t&gt;&amp; <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">TfLiteParserImpl::GetOutputTensorIds</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a>&amp; model,</div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160;                                                           <span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;                                                           <span class="keywordtype">size_t</span> operatorIndex)</div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160;{</div><div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#afbe702264a4e175da37c4941c0894bdb">CHECK_MODEL</a>(model, subgraphIndex, operatorIndex);</div><div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; subgraphPtr = model-&gt;subgraphs[subgraphIndex];</div><div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> &amp; operatorPtr = subgraphPtr-&gt;operators[operatorIndex];</div><div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160;    <span class="keywordflow">return</span> operatorPtr-&gt;outputs;</div><div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160;}</div><div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160;</div><div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::RegisterInputSlots(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160;                                          <span class="keywordtype">size_t</span> operatorIndex,</div><div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160;                                          <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer,</div><div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160;                                          <span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; tensorIndexes)</div><div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160;{</div><div class="line"><a name="l03340"></a><span class="lineno"> 3340</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="l03341"></a><span class="lineno"> 3341</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</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="l03343"></a><span class="lineno"> 3343</span>&#160;    {</div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</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="l03345"></a><span class="lineno"> 3345</span>&#160;            fmt::format(<span class="stringliteral">&quot;The number of tensor inputs ({}) does not match the number expected ({})&quot;</span></div><div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160;                        <span class="stringliteral">&quot; for subgraph:{} operator index:{} {}&quot;</span>,</div><div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>&#160;                        tensorIndexes.size(),</div><div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>&#160;                        layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a9c2cba04b6d7ace4fc2a2436b82a5a63">GetNumInputSlots</a>(),</div><div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>&#160;                        subgraphIndex,</div><div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>&#160;                        operatorIndex,</div><div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>&#160;    }</div><div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160;</div><div class="line"><a name="l03354"></a><span class="lineno"> 3354</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="l03355"></a><span class="lineno"> 3355</span>&#160;    {</div><div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tensorIndex = tensorIndexes[slotIndex];</div><div class="line"><a name="l03357"></a><span class="lineno"> 3357</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="l03358"></a><span class="lineno"> 3358</span>&#160;        RegisterConsumerOfTensor(subgraphIndex, tensorIndex, slot);</div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160;    }</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160;}</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160;</div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::RegisterOutputSlots(<span class="keywordtype">size_t</span> subgraphIndex,</div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160;                                           <span class="keywordtype">size_t</span> operatorIndex,</div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>&#160;                                           <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer,</div><div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>&#160;                                           <span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; tensorIndexes)</div><div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>&#160;{</div><div class="line"><a name="l03367"></a><span class="lineno"> 3367</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="l03368"></a><span class="lineno"> 3368</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l03369"></a><span class="lineno"> 3369</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="l03370"></a><span class="lineno"> 3370</span>&#160;    {</div><div class="line"><a name="l03371"></a><span class="lineno"> 3371</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="l03372"></a><span class="lineno"> 3372</span>&#160;            fmt::format(<span class="stringliteral">&quot;The number of tensor outputs ({}) does not match the number expected ({})&quot;</span></div><div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160;                        <span class="stringliteral">&quot; for subgraph:{} operator index:{} {}&quot;</span>,</div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160;                        tensorIndexes.size(),</div><div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160;                        layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">GetNumOutputSlots</a>(),</div><div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>&#160;                        subgraphIndex,</div><div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>&#160;                        operatorIndex,</div><div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160;                        <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160;    }</div><div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160;</div><div class="line"><a name="l03381"></a><span class="lineno"> 3381</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="l03382"></a><span class="lineno"> 3382</span>&#160;    {</div><div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tensorIndex = tensorIndexes[slotIndex];</div><div class="line"><a name="l03384"></a><span class="lineno"> 3384</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="l03385"></a><span class="lineno"> 3385</span>&#160;        RegisterProducerOfTensor(subgraphIndex, tensorIndex, slot);</div><div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>&#160;    }</div><div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>&#160;}</div><div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160;</div><div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::SetupInputLayers(<span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160;{</div><div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>&#160;</div><div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a20518e431cb501b172371b850e6c3ec7">GetSubgraphInputs</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l03394"></a><span class="lineno"> 3394</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="l03395"></a><span class="lineno"> 3395</span>&#160;    {</div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160;        <span class="keyword">auto</span> bindingId = GenerateLayerBindingId(subgraphIndex, tensorIdAndPtr.first);</div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer =</div><div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>&#160;            m_Network-&gt;AddInputLayer(bindingId, tensorIdAndPtr.second-&gt;name.c_str());</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160;</div><div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160;        <span class="keyword">auto</span> tensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(tensorIdAndPtr.second);</div><div class="line"><a name="l03401"></a><span class="lineno"> 3401</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="l03402"></a><span class="lineno"> 3402</span>&#160;</div><div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160;        RegisterOutputSlots(subgraphIndex,</div><div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>&#160;                            VIRTUAL_OPERATOR_ID,</div><div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160;                            layer,</div><div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>&#160;                            { <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(tensorIdAndPtr.first) });</div><div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>&#160;    }</div><div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>&#160;}</div><div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160;</div><div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::SetupOutputLayers(<span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160;{</div><div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>&#160;</div><div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a1bd7b663eb19e2355b6aa5c36232d6fc">GetSubgraphOutputs</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l03415"></a><span class="lineno"> 3415</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="l03416"></a><span class="lineno"> 3416</span>&#160;    {</div><div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>&#160;        <span class="keyword">auto</span> bindingId = GenerateLayerBindingId(subgraphIndex, tensorIdAndPtr.first);</div><div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer =</div><div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>&#160;            m_Network-&gt;AddOutputLayer(bindingId, tensorIdAndPtr.second-&gt;name.c_str());</div><div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>&#160;</div><div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>&#160;        RegisterInputSlots(subgraphIndex,</div><div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160;                           VIRTUAL_OPERATOR_ID,</div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160;                           layer,</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160;                           { <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(tensorIdAndPtr.first) });</div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160;    }</div><div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160;}</div><div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>&#160;</div><div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>&#160;<span class="keywordtype">void</span> TfLiteParserImpl::SetupConstantLayers(<span class="keywordtype">size_t</span> subgraphIndex)</div><div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>&#160;{</div><div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphIndex);</div><div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>&#160;</div><div class="line"><a name="l03432"></a><span class="lineno"> 3432</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="l03433"></a><span class="lineno"> 3433</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="l03434"></a><span class="lineno"> 3434</span>&#160;    {</div><div class="line"><a name="l03435"></a><span class="lineno"> 3435</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="l03436"></a><span class="lineno"> 3436</span>&#160;        {</div><div class="line"><a name="l03437"></a><span class="lineno"> 3437</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="l03438"></a><span class="lineno"> 3438</span>&#160;                m_SubgraphConnections[subgraphIndex][tensorIndex].inputSlots.size() &gt; 0)</div><div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>&#160;            {</div><div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160;                <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">TensorRawPtr</a> tensorPtr = subgraphPtr-&gt;tensors[tensorIndex].get();</div><div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160;                <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> tensorInfo = <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(tensorPtr);</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160;                <span class="keyword">auto</span> tensorAndData = CreateConstTensor(tensorPtr,</div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160;                                                       tensorInfo,</div><div class="line"><a name="l03444"></a><span class="lineno"> 3444</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="l03445"></a><span class="lineno"> 3445</span>&#160;</div><div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>&#160;                std::string layerName = fmt::format(<span class="stringliteral">&quot;Constant:{}&quot;</span>, tensorPtr-&gt;name);</div><div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>&#160;                <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *layer =</div><div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>&#160;                    m_Network-&gt;AddConstantLayer(tensorAndData.first, layerName.c_str());</div><div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>&#160;</div><div class="line"><a name="l03450"></a><span class="lineno"> 3450</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="l03451"></a><span class="lineno"> 3451</span>&#160;                RegisterOutputSlots(subgraphIndex,</div><div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>&#160;                                    VIRTUAL_OPERATOR_ID,</div><div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>&#160;                                    layer,</div><div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160;                                    { tensorIndex });</div><div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>&#160;</div><div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>&#160;            }</div><div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>&#160;        }</div><div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>&#160;    }</div><div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>&#160;}</div><div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160;</div><div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>&#160;<span class="comment">// example usage: BufferRawPtr bufferPtr = GetBuffer(m_Model, inputs[0]-&gt;buffer);</span></div><div class="line"><a name="l03462"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538"> 3462</a></span>&#160;<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">TfLiteParserImpl::BufferRawPtr</a> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">TfLiteParserImpl::GetBuffer</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">ModelPtr</a>&amp; model, <span class="keywordtype">size_t</span> bufferIndex)</div><div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>&#160;{</div><div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a7c88d54e3f895030c70330a4c9d76a7a">CHECK_BUFFER</a>(model, bufferIndex);</div><div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>&#160;    <span class="keywordflow">return</span> model-&gt;buffers[bufferIndex].get();</div><div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>&#160;}</div><div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160;</div><div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>&#160;std::pair&lt;armnn::ConstTensor, TfLiteParserImpl::SupportedDataStorage&gt;</div><div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>&#160;TfLiteParserImpl::CreateConstTensorAndStoreData(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">TfLiteParserImpl::BufferRawPtr</a> bufferPtr,</div><div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>&#160;                                            <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">TfLiteParserImpl::TensorRawPtr</a> tensorPtr,</div><div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>&#160;                                            <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l03473"></a><span class="lineno"> 3473</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="l03474"></a><span class="lineno"> 3474</span>&#160;{</div><div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160;    <span class="keyword">auto</span> constData = CreateConstTensorImpl&lt;T&gt;(bufferPtr,</div><div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>&#160;                                              tensorPtr,</div><div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160;                                              tensorInfo,</div><div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160;                                              permutationVector);</div><div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>&#160;    TfLiteParserImpl::SupportedDataStorage storage(std::move(constData.second));</div><div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>&#160;    <span class="keywordflow">return</span> std::make_pair(constData.first, std::move(storage));</div><div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>&#160;}</div><div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>&#160;</div><div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>&#160;std::pair&lt;armnn::ConstTensor, TfLiteParserImpl::SupportedDataStorage&gt;</div><div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>&#160;TfLiteParserImpl::CreateConstTensor(<a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">TensorRawPtr</a> tensorPtr,</div><div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>&#160;                                <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>&amp; tensorInfo,</div><div class="line"><a name="l03486"></a><span class="lineno"> 3486</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="l03487"></a><span class="lineno"> 3487</span>&#160;{</div><div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#ae38d96fe05581ea025713b3e781c5a43">CHECK_TENSOR_PTR</a>(tensorPtr);</div><div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>&#160;    <span class="keyword">auto</span> bufferPtr = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">GetBuffer</a>(m_Model, tensorPtr-&gt;buffer);</div><div class="line"><a name="l03490"></a><span class="lineno"> 3490</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="l03491"></a><span class="lineno"> 3491</span>&#160;</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</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="l03493"></a><span class="lineno"> 3493</span>&#160;    {</div><div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>:</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;float&gt;(bufferPtr,</div><div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160;                                                        tensorPtr,</div><div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>&#160;                                                        tensorInfo,</div><div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>&#160;                                                        permutationVector);</div><div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a0a3f57c876f5a230244c38e1453a8a6e">armnn::DataType::QAsymmU8</a>:</div><div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;uint8_t&gt;(bufferPtr,</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160;                                                          tensorPtr,</div><div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>&#160;                                                          tensorInfo,</div><div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>&#160;                                                          permutationVector);</div><div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a>:</div><div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;int8_t&gt;(bufferPtr,</div><div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>&#160;                                                         tensorPtr,</div><div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>&#160;                                                         tensorInfo,</div><div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>&#160;                                                         permutationVector);</div><div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9d02ea768c081d4bdb2b7cab0b3f510d">armnn::DataType::QAsymmS8</a>:</div><div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;int8_t&gt;(bufferPtr,</div><div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>&#160;                                                         tensorPtr,</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160;                                                         tensorInfo,</div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160;                                                         permutationVector);</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>:</div><div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160;            <span class="keywordflow">return</span> CreateConstTensorAndStoreData&lt;int32_t&gt;(bufferPtr,</div><div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160;                                                          tensorPtr,</div><div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160;                                                          tensorInfo,</div><div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160;                                                          permutationVector);</div><div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160;        {</div><div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>&#160;            std::stringstream errString;</div><div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>&#160;            errString &lt;&lt; <span class="stringliteral">&quot;Unexpected datatype when creating const tensor: &quot;</span></div><div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>&#160;                        &lt;&lt; <a class="code" href="namespacearmnn.xhtml#a81b5ff8545adad19a1c9d4ca076d552c">armnn::GetDataTypeName</a>(tensorInfo.GetDataType())</div><div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>&#160;                        &lt;&lt; <span class="stringliteral">&quot; shape:&quot;</span> &lt;&lt; tensorInfo.GetShape()</div><div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>&#160;                        &lt;&lt; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString();</div><div class="line"><a name="l03526"></a><span class="lineno"> 3526</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="l03527"></a><span class="lineno"> 3527</span>&#160;        }</div><div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160;    }</div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160;}</div><div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160;</div><div class="line"><a name="l03531"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a913d452e7766210b59a69d3c658b2862"> 3531</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_impl.xhtml#a913d452e7766210b59a69d3c658b2862">TfLiteParserImpl::GetNetworkInputBindingInfo</a>(<span class="keywordtype">size_t</span> subgraphId,</div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160;                                                              <span class="keyword">const</span> std::string&amp; name)<span class="keyword"> const</span></div><div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphId);</div><div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a20518e431cb501b172371b850e6c3ec7">GetSubgraphInputs</a>(m_Model, subgraphId);</div><div class="line"><a name="l03536"></a><span class="lineno"> 3536</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="l03537"></a><span class="lineno"> 3537</span>&#160;    {</div><div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160;        <span class="keywordflow">if</span> (input.second-&gt;name == name)</div><div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160;        {</div><div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160;            <span class="keyword">auto</span> bindingId = GenerateLayerBindingId(subgraphId, input.first);</div><div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160;            <span class="keywordflow">return</span> std::make_pair(bindingId, <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(input.second));</div><div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160;        }</div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160;    }</div><div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160;</div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160;    std::stringstream bindings;</div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</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="l03547"></a><span class="lineno"> 3547</span>&#160;    {</div><div class="line"><a name="l03548"></a><span class="lineno"> 3548</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="l03549"></a><span class="lineno"> 3549</span>&#160;    }</div><div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160;</div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</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="l03552"></a><span class="lineno"> 3552</span>&#160;        fmt::format(<span class="stringliteral">&quot;No input binding found for subgraph:{} and name:{}. &quot;</span></div><div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160;                    <span class="stringliteral">&quot;Possible inputs are: [{}] {}&quot;</span>,</div><div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160;                    subgraphId,</div><div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>&#160;                    name,</div><div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>&#160;                    bindings.str(),</div><div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160;                    <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;}</div><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;</div><div class="line"><a name="l03560"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a59139faede3a07a43c4c8f86bb03dc43"> 3560</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_impl.xhtml#a59139faede3a07a43c4c8f86bb03dc43">TfLiteParserImpl::GetNetworkOutputBindingInfo</a>(<span class="keywordtype">size_t</span> subgraphId,</div><div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160;                                                               <span class="keyword">const</span> std::string&amp; name)<span class="keyword"> const</span></div><div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphId);</div><div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a1bd7b663eb19e2355b6aa5c36232d6fc">GetSubgraphOutputs</a>(m_Model, subgraphId);</div><div class="line"><a name="l03565"></a><span class="lineno"> 3565</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="l03566"></a><span class="lineno"> 3566</span>&#160;    {</div><div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>&#160;        <span class="keyword">auto</span> <span class="keyword">const</span> output = outputs[i];</div><div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160;        <span class="keywordflow">if</span> (output.second-&gt;name == name)</div><div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>&#160;        {</div><div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>&#160;            <span class="keyword">auto</span> bindingId = GenerateLayerBindingId(subgraphId, output.first);</div><div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>&#160;            std::vector&lt;unsigned int&gt; shape = m_OverridenOutputShapes.size() &gt; 0 ?</div><div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>&#160;                                                m_OverridenOutputShapes[i] : AsUnsignedVector(output.second-&gt;shape);</div><div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>&#160;            <span class="keywordflow">return</span> std::make_pair(bindingId, <a class="code" href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">ToTensorInfo</a>(output.second, shape));</div><div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>&#160;        }</div><div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160;    }</div><div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>&#160;</div><div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>&#160;    std::stringstream bindings;</div><div class="line"><a name="l03578"></a><span class="lineno"> 3578</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="l03579"></a><span class="lineno"> 3579</span>&#160;    {</div><div class="line"><a name="l03580"></a><span class="lineno"> 3580</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="l03581"></a><span class="lineno"> 3581</span>&#160;    }</div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160;</div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</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="l03584"></a><span class="lineno"> 3584</span>&#160;        fmt::format(<span class="stringliteral">&quot;No output binding found for subgraph:{} and name:{}. &quot;</span></div><div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160;                    <span class="stringliteral">&quot;Possible outputs are: [{}] {}&quot;</span>,</div><div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160;                    subgraphId,</div><div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>&#160;                    name,</div><div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160;                    bindings.str(),</div><div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160;                    <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160;}</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160;</div><div class="line"><a name="l03592"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a1b7aed8466cc5792966d271a65285d0e"> 3592</a></span>&#160;<span class="keywordtype">size_t</span> <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a1b7aed8466cc5792966d271a65285d0e">TfLiteParserImpl::GetSubgraphCount</a>()<span class="keyword"> const</span></div><div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160;    <span class="keywordflow">return</span> m_Model-&gt;subgraphs.size();</div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160;}</div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160;</div><div class="line"><a name="l03597"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe1ea028d8fcb9942c204d4415ff3319"> 3597</a></span>&#160;std::vector&lt;std::string&gt; <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe1ea028d8fcb9942c204d4415ff3319">TfLiteParserImpl::GetSubgraphInputTensorNames</a>(<span class="keywordtype">size_t</span> subgraphId)<span class="keyword"> const</span></div><div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphId);</div><div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160;    <span class="keyword">auto</span> inputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a20518e431cb501b172371b850e6c3ec7">GetSubgraphInputs</a>(m_Model, subgraphId);</div><div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160;    std::vector&lt;std::string&gt; result;</div><div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160;    result.reserve(inputs.size());</div><div class="line"><a name="l03603"></a><span class="lineno"> 3603</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="l03604"></a><span class="lineno"> 3604</span>&#160;    {</div><div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>&#160;        result.push_back(input.second-&gt;name);</div><div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160;    }</div><div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160;}</div><div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>&#160;</div><div class="line"><a name="l03610"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a949070abe70fabe18cc1eb29d5853f47"> 3610</a></span>&#160;std::vector&lt;std::string&gt; <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a949070abe70fabe18cc1eb29d5853f47">TfLiteParserImpl::GetSubgraphOutputTensorNames</a>(<span class="keywordtype">size_t</span> subgraphId)<span class="keyword"> const</span></div><div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>&#160;    <a class="code" href="_tf_lite_parser_8cpp.xhtml#a315ccf3e3cb207b1fbd10a2ad3e6333a">CHECK_SUBGRAPH</a>(m_Model, subgraphId);</div><div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160;    <span class="keyword">auto</span> outputs = <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a1bd7b663eb19e2355b6aa5c36232d6fc">GetSubgraphOutputs</a>(m_Model, subgraphId);</div><div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>&#160;    std::vector&lt;std::string&gt; result;</div><div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>&#160;    result.reserve(outputs.size());</div><div class="line"><a name="l03616"></a><span class="lineno"> 3616</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="l03617"></a><span class="lineno"> 3617</span>&#160;    {</div><div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>&#160;        result.push_back(output.second-&gt;name);</div><div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>&#160;    }</div><div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160;}</div><div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160;</div><div class="line"><a name="l03623"></a><span class="lineno"><a class="line" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aa09a8bb02eed50715082d8b7fccd2f8d"> 3623</a></span>&#160;<span class="keyword">const</span> std::string <a class="code" href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aa09a8bb02eed50715082d8b7fccd2f8d">TfLiteParserImpl::GetVersion</a>()</div><div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160;{</div><div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="include_2armnn_tf_lite_parser_2_version_8hpp.xhtml#a88c7ccef0cfc85702b48557ec804ef9a">TFLITE_PARSER_VERSION</a>;</div><div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160;}</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160;</div><div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160;TfLiteParserImpl::SupportedDataStorage::SupportedDataStorage(std::unique_ptr&lt;<span class="keywordtype">float</span>[]&gt; &amp;&amp; data)</div><div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>&#160;: m_FloatData(std::move(data))</div><div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>&#160;, m_Uint8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>&#160;, m_Int8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>&#160;, m_Int32Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>&#160;{</div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160;}</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160;</div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160;TfLiteParserImpl::SupportedDataStorage::SupportedDataStorage(std::unique_ptr&lt;uint8_t[]&gt; &amp;&amp; data)</div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160;: m_FloatData(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160;, m_Uint8Data(std::move(data))</div><div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>&#160;, m_Int8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>&#160;, m_Int32Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160;{</div><div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160;}</div><div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160;</div><div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>&#160;TfLiteParserImpl::SupportedDataStorage::SupportedDataStorage(std::unique_ptr&lt;int8_t[]&gt; &amp;&amp; data)</div><div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160;: m_FloatData(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160;, m_Uint8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160;, m_Int8Data(std::move(data))</div><div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160;, m_Int32Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>&#160;{</div><div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160;}</div><div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160;</div><div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160;TfLiteParserImpl::SupportedDataStorage::SupportedDataStorage(std::unique_ptr&lt;int32_t[]&gt; &amp;&amp; data)</div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;: m_FloatData(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160;, m_Uint8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160;, m_Int8Data(<span class="keyword">nullptr</span>)</div><div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>&#160;, m_Int32Data(std::move(data))</div><div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>&#160;{</div><div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160;}</div><div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>&#160;</div><div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>&#160;} <span class="comment">// armnnTfLiteParser</span></div><div class="ttc" id="namespacetflite_xhtml"><div class="ttname"><a href="namespacetflite.xhtml">tflite</a></div><div class="ttdef"><b>Definition:</b> <a href="armnn__external__delegate_8cpp_source.xhtml#l00011">armnn_external_delegate.cpp:11</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#l00444">Descriptors.hpp:444</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#l00454">Descriptors.hpp:454</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#l00183">TfLiteParser.cpp:183</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_abfc86471394295357a23b3addd0b5b1c"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abfc86471394295357a23b3addd0b5b1c">armnnTfLiteParser::TfLiteParserImpl::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="_ignore_unused_8hpp_xhtml"><div class="ttname"><a href="_ignore_unused_8hpp.xhtml">IgnoreUnused.hpp</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a1bd7b663eb19e2355b6aa5c36232d6fc"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a1bd7b663eb19e2355b6aa5c36232d6fc">armnnTfLiteParser::TfLiteParserImpl::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#l03299">TfLiteParser.cpp:3299</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#l00456">Descriptors.hpp:456</a></div></div>
<div class="ttc" id="structarmnn_1_1_elementwise_unary_descriptor_xhtml_afe768be66897eb3d73284424e3239b23"><div class="ttname"><a href="structarmnn_1_1_elementwise_unary_descriptor.xhtml#afe768be66897eb3d73284424e3239b23">armnn::ElementwiseUnaryDescriptor::m_Operation</a></div><div class="ttdeci">UnaryOperation m_Operation</div><div class="ttdoc">Specifies the elementwiseUnary operation to execute. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00114">Descriptors.hpp:114</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#l01046">Descriptors.hpp:1046</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#l00206">Descriptors.hpp:206</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#l00062">INetwork.hpp:62</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#l00561">Descriptors.hpp:561</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a22f377fc4e10dc1773a3f979061e85f1"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a22f377fc4e10dc1773a3f979061e85f1">armnn::TensorInfo::IsTypeSpaceMatch</a></div><div class="ttdeci">bool IsTypeSpaceMatch(const TensorInfo &amp;other) const</div><div class="ttdoc">Check that the types are the same and, if quantize, that the quantization parameters are the same...</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00423">Tensor.cpp:423</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#l00371">Descriptors.hpp:371</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#l00506">Descriptors.hpp:506</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#l01213">Descriptors.hpp:1213</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#l00042">TfLiteParser.cpp:42</a></div></div>
<div class="ttc" id="_tensor_8hpp_xhtml"><div class="ttname"><a href="_tensor_8hpp.xhtml">Tensor.hpp</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#l00187">Tensor.hpp:187</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#l00496">Descriptors.hpp:496</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#l00365">Descriptors.hpp:365</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="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_ac3486e6c1a291aa67efd8b280ffb83cc"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#ac3486e6c1a291aa67efd8b280ffb83cc">armnnTfLiteParser::TfLiteParserImpl::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_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#l01128">Descriptors.hpp:1128</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#l00832">Descriptors.hpp:832</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#l01115">Descriptors.hpp:1115</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_aaafbda6e6816876b3d7963cfe64dd2f8"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaafbda6e6816876b3d7963cfe64dd2f8">armnnTfLiteParser::TfLiteParserImpl::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="structarmnn_1_1_pad_descriptor_xhtml_a410fa919f78af0f0f100bd1594eca4ab"><div class="ttname"><a href="structarmnn_1_1_pad_descriptor.xhtml#a410fa919f78af0f0f100bd1594eca4ab">armnn::PadDescriptor::m_PadValue</a></div><div class="ttdeci">float m_PadValue</div><div class="ttdoc">Optional value to use for padding, defaults to 0. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00997">Descriptors.hpp:997</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#l00508">Descriptors.hpp:508</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#l00152">Tensor.hpp:152</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#l01136">Descriptors.hpp:1136</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#l00557">Descriptors.hpp:557</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#l01050">Descriptors.hpp:1050</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#l00404">Descriptors.hpp:404</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#l00373">Descriptors.hpp:373</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#l00408">Descriptors.hpp:408</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#l00490">Descriptors.hpp:490</a></div></div>
<div class="ttc" id="structarmnn_1_1_reduce_descriptor_xhtml_a28e0548abfc4e79c48f29a3d11a062e9"><div class="ttname"><a href="structarmnn_1_1_reduce_descriptor.xhtml#a28e0548abfc4e79c48f29a3d11a062e9">armnn::ReduceDescriptor::m_KeepDims</a></div><div class="ttdeci">bool m_KeepDims</div><div class="ttdoc">if true then output shape has no change. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01320">Descriptors.hpp:1320</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#l01254">Descriptors.hpp:1254</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_a78f5b213a603b55d0fabea389e89f203"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a78f5b213a603b55d0fabea389e89f203">armnn::TransposeConvolution2dDescriptor::m_OutputShape</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_OutputShape</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01259">Descriptors.hpp:1259</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#l00418">Tensor.cpp:418</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#l00821">Descriptors.hpp:821</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#l00152">Descriptors.hpp:152</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser_xhtml_a6bf5861864c8828e59df24a7868c5439"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_i_tf_lite_parser.xhtml#a6bf5861864c8828e59df24a7868c5439">armnnTfLiteParser::ITfLiteParser::CreateNetworkFromBinaryFile</a></div><div class="ttdeci">armnn::INetworkPtr CreateNetworkFromBinaryFile(const char *graphFile)</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#l00074">TfLiteParser.cpp:74</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#l00383">Descriptors.hpp:383</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a59139faede3a07a43c4c8f86bb03dc43"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a59139faede3a07a43c4c8f86bb03dc43">armnnTfLiteParser::TfLiteParserImpl::GetNetworkOutputBindingInfo</a></div><div class="ttdeci">BindingPointInfo GetNetworkOutputBindingInfo(size_t subgraphId, const std::string &amp;name) const</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#l03560">TfLiteParser.cpp:3560</a></div></div>
<div class="ttc" id="structarmnn_1_1_arg_min_max_descriptor_xhtml_ab1ae6f520bb1a4da191a0ae907477f23"><div class="ttname"><a href="structarmnn_1_1_arg_min_max_descriptor.xhtml#ab1ae6f520bb1a4da191a0ae907477f23">armnn::ArgMinMaxDescriptor::m_Function</a></div><div class="ttdeci">ArgMinMaxFunction m_Function</div><div class="ttdoc">Specify if the function is to find Min or Max. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00070">Descriptors.hpp:70</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#l00547">Descriptors.hpp:547</a></div></div>
<div class="ttc" id="structarmnn_1_1_transpose_convolution2d_descriptor_xhtml_a9bc46a2ad56319786bad30be9ab2dc6a"><div class="ttname"><a href="structarmnn_1_1_transpose_convolution2d_descriptor.xhtml#a9bc46a2ad56319786bad30be9ab2dc6a">armnn::TransposeConvolution2dDescriptor::m_OutputShapeEnabled</a></div><div class="ttdeci">bool m_OutputShapeEnabled</div><div class="ttdoc">Output shape if it has been specified. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01258">Descriptors.hpp:1258</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#l00700">Descriptors.hpp:700</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#l00260">TfLiteParser.cpp:260</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#l00026">ITfLiteParser.hpp:26</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#l00202">Logging.hpp:202</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#l00369">Descriptors.hpp:369</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a4de71c3661093e5c4ae7775114f43413"><div class="ttname"><a href="namespacearmnn.xhtml#a4de71c3661093e5c4ae7775114f43413">armnn::NetworkOptions</a></div><div class="ttdeci">std::vector&lt; BackendOptions &gt; NetworkOptions</div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00015">BackendOptions.hpp:15</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a949070abe70fabe18cc1eb29d5853f47"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a949070abe70fabe18cc1eb29d5853f47">armnnTfLiteParser::TfLiteParserImpl::GetSubgraphOutputTensorNames</a></div><div class="ttdeci">std::vector&lt; std::string &gt; GetSubgraphOutputTensorNames(size_t subgraphId) const</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#l03610">TfLiteParser.cpp:3610</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_ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6ae1b3c9c6087a93b07c83e0b04f377a8d">armnn::DataType::Signed64</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="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#l00440">Descriptors.hpp:440</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#l00994">Descriptors.hpp:994</a></div></div>
<div class="ttc" id="structarmnn_1_1_reduce_descriptor_xhtml_aa57c67b1da0011b1abb30170146e870f"><div class="ttname"><a href="structarmnn_1_1_reduce_descriptor.xhtml#aa57c67b1da0011b1abb30170146e870f">armnn::ReduceDescriptor::m_ReduceOperation</a></div><div class="ttdeci">ReduceOperation m_ReduceOperation</div><div class="ttdoc">Specifies the reduction operation to execute. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01324">Descriptors.hpp:1324</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#l00024">ITfLiteParser.hpp:24</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_aadad81a95152fe5aad839db352d4012c"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aadad81a95152fe5aad839db352d4012c">armnnTfLiteParser::TfLiteParserImpl::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="namespacearmnn_tf_lite_parser_xhtml_a85c693ec44ec126eb56462857fe634fc"><div class="ttname"><a href="namespacearmnn_tf_lite_parser.xhtml#a85c693ec44ec126eb56462857fe634fc">armnnTfLiteParser::ComputeWrappedIndex</a></div><div class="ttdeci">unsigned int ComputeWrappedIndex(int idx, unsigned int numDimsIn)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l02786">TfLiteParser.cpp:2786</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors. </div><div class="ttdef"><b>Definition:</b> <a href="01__00__software__tools_8dox_source.xhtml#l00006">01_00_software_tools.dox:6</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml">armnnTfLiteParser::TfLiteParserImpl</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="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="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#l01248">Descriptors.hpp:1248</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#l01123">Descriptors.hpp:1123</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd"><div class="ttname"><a href="namespacearmnn.xhtml#a1cfaa710db2a54673b21d2ea2da757c8afb278fa5defd7e699fcbc930c3e76ccd">armnn::UnaryOperation::Neg</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_impl_xhtml_aaebfa9a01a0bb8a0935114ff0140cc45"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aaebfa9a01a0bb8a0935114ff0140cc45">armnnTfLiteParser::TfLiteParserImpl::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#l02112">TfLiteParser.cpp:2112</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#l00241">Types.hpp:241</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#l00452">Descriptors.hpp:452</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#l01126">Descriptors.hpp:1126</a></div></div>
<div class="ttc" id="structarmnn_1_1_space_to_depth_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_space_to_depth_descriptor.xhtml">armnn::SpaceToDepthDescriptor</a></div><div class="ttdoc">A SpaceToDepthDescriptor for the SpaceToDepthLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00884">Descriptors.hpp:884</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#l00104">Types.hpp:104</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#l00878">Descriptors.hpp:878</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#l00504">Descriptors.hpp:504</a></div></div>
<div class="ttc" id="_filesystem_8hpp_xhtml"><div class="ttname"><a href="_filesystem_8hpp.xhtml">Filesystem.hpp</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#l00673">Descriptors.hpp:673</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="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#l00377">Descriptors.hpp:377</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#l00210">Types.hpp:210</a></div></div>
<div class="ttc" id="include_2armnn_tf_lite_parser_2_version_8hpp_xhtml_a88c7ccef0cfc85702b48557ec804ef9a"><div class="ttname"><a href="include_2armnn_tf_lite_parser_2_version_8hpp.xhtml#a88c7ccef0cfc85702b48557ec804ef9a">TFLITE_PARSER_VERSION</a></div><div class="ttdeci">#define TFLITE_PARSER_VERSION</div><div class="ttdoc">TFLITE_PARSER_VERSION: &quot;X.Y.Z&quot; where: X = Major version number Y = Minor version number Z = Patch ver...</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_tf_lite_parser_2_version_8hpp_source.xhtml#l00025">Version.hpp:25</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="_numeric_cast_8hpp_xhtml"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml">NumericCast.hpp</a></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#l00212">TfLiteParser.cpp:212</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#l00180">TypesUtils.hpp:180</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#l00189">Tensor.hpp:189</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a32a96909bc8a8ee9076bd4d5c1028301"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a32a96909bc8a8ee9076bd4d5c1028301">armnnTfLiteParser::TfLiteParserImpl::CreateNetworkFromBinary</a></div><div class="ttdeci">armnn::INetworkPtr CreateNetworkFromBinary(const std::vector&lt; uint8_t &gt; &amp;binaryContent)</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#l00672">TfLiteParser.cpp:672</a></div></div>
<div class="ttc" id="_backend_options_8hpp_xhtml"><div class="ttname"><a href="_backend_options_8hpp.xhtml">BackendOptions.hpp</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#l00794">Descriptors.hpp:794</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a720f0206e377dd1808acc94b3b12c538"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a720f0206e377dd1808acc94b3b12c538">armnnTfLiteParser::TfLiteParserImpl::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#l03462">TfLiteParser.cpp:3462</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#l00622">Descriptors.hpp:622</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#l00545">Descriptors.hpp:545</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#l00969">Descriptors.hpp:969</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#l01024">Descriptors.hpp:1024</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#l00880">Descriptors.hpp:880</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#l00848">Descriptors.hpp:848</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_aed935c554e4f6a4e7b9dcde057d00877"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aed935c554e4f6a4e7b9dcde057d00877">armnnTfLiteParser::TfLiteParserImpl::CreateNetworkFromBinaryFile</a></div><div class="ttdeci">armnn::INetworkPtr CreateNetworkFromBinaryFile(const char *graphFile)</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#l00665">TfLiteParser.cpp:665</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#l00375">Descriptors.hpp:375</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#l00442">Descriptors.hpp:442</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#l00543">Descriptors.hpp:543</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#l00975">Descriptors.hpp:975</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#l00446">Descriptors.hpp:446</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#l00141">TfLiteParser.cpp:141</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#l00498">Descriptors.hpp:498</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="namespacearmnn_xhtml_abc05539fc6e7907f32ef0fb242e3b3b0"><div class="ttname"><a href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0">armnn::ReduceOperation</a></div><div class="ttdeci">ReduceOperation</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00111">Types.hpp:111</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#l00165">TensorTest.cpp:165</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="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a913d452e7766210b59a69d3c658b2862"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a913d452e7766210b59a69d3c658b2862">armnnTfLiteParser::TfLiteParserImpl::GetNetworkInputBindingInfo</a></div><div class="ttdeci">BindingPointInfo GetNetworkInputBindingInfo(size_t subgraphId, const std::string &amp;name) const</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#l03531">TfLiteParser.cpp:3531</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#l00187">Deserializer.cpp:187</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a7f3fc56b7306b444f06f45cdc4032bbf"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a7f3fc56b7306b444f06f45cdc4032bbf">armnnTfLiteParser::TfLiteParserImpl::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#l03224">TfLiteParser.cpp:3224</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="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_aa0a90d432c9c41f9846f41f11c9e54c9"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aa0a90d432c9c41f9846f41f11c9e54c9">armnnTfLiteParser::TfLiteParserImpl::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#l01598">TfLiteParser.cpp:1598</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#l00551">Descriptors.hpp:551</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#l00367">Descriptors.hpp:367</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a86428e0c674542488c7292dfbe2ce381"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a86428e0c674542488c7292dfbe2ce381">armnnTfLiteParser::TfLiteParserImpl::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_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#l00502">Descriptors.hpp:502</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#l00494">Descriptors.hpp:494</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#l00315">Descriptors.cpp:315</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</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#l01133">Descriptors.hpp:1133</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#l00971">Descriptors.hpp:971</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a8b4b0b88a5e79a88b8b60db76398f575"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a8b4b0b88a5e79a88b8b60db76398f575">armnnTfLiteParser::TfLiteParserImpl::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#l03315">TfLiteParser.cpp:3315</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#l00696">Descriptors.hpp:696</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#l00038">INetwork.hpp:38</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#l00607">Descriptors.hpp:607</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#l00469">Tensor.cpp:469</a></div></div>
<div class="ttc" id="structarmnn_1_1_arg_min_max_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_arg_min_max_descriptor.xhtml">armnn::ArgMinMaxDescriptor</a></div><div class="ttdoc">An ArgMinMaxDescriptor for ArgMinMaxLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00056">Descriptors.hpp:56</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_aa09a8bb02eed50715082d8b7fccd2f8d"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#aa09a8bb02eed50715082d8b7fccd2f8d">armnnTfLiteParser::TfLiteParserImpl::GetVersion</a></div><div class="ttdeci">static const std::string GetVersion()</div><div class="ttdoc">Retrieve version in X.Y.Z form. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_lite_parser_8cpp_source.xhtml#l03623">TfLiteParser.cpp:3623</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#l00452">Tensor.cpp:452</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#l00194">Tensor.hpp:194</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#l00163">Descriptors.hpp:163</a></div></div>
<div class="ttc" id="structarmnn_1_1_reduce_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_reduce_descriptor.xhtml">armnn::ReduceDescriptor</a></div><div class="ttdoc">A ReduceDescriptor for the REDUCE operators. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01304">Descriptors.hpp:1304</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#l00389">Descriptors.hpp:389</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#l01130">Descriptors.hpp:1130</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#l00402">Descriptors.hpp:402</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_af9590c2ae8d68b5da999d3d6ab21dd3b"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#af9590c2ae8d68b5da999d3d6ab21dd3b">armnnTfLiteParser::TfLiteParserImpl::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#l03200">TfLiteParser.cpp:3200</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#l00314">Tensor.hpp:314</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="structarmnn_1_1_gather_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_gather_descriptor.xhtml">armnn::GatherDescriptor</a></div><div class="ttdoc">A GatherDescriptor for the GatherLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00742">Descriptors.hpp:742</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#l00553">Descriptors.hpp:553</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="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_abd8bee7fb9b86485a60bc7ee05114270"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#abd8bee7fb9b86485a60bc7ee05114270">armnnTfLiteParser::TfLiteParserImpl::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="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a1b7aed8466cc5792966d271a65285d0e"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a1b7aed8466cc5792966d271a65285d0e">armnnTfLiteParser::TfLiteParserImpl::GetSubgraphCount</a></div><div class="ttdeci">size_t GetSubgraphCount() const</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#l03592">TfLiteParser.cpp:3592</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#l01246">Descriptors.hpp:1246</a></div></div>
<div class="ttc" id="namespacearmnn_tf_parser_xhtml_aca0a31de02d5c087029bb28c9202b4d6"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">armnnTfParser::CalcPadding</a></div><div class="ttdeci">void CalcPadding(uint32_t inputSize, uint32_t filterSize, uint32_t stride, uint32_t dilation, uint32_t &amp;paddingFront, uint32_t &amp;paddingBack, bool samePadding)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00429">TfParser.cpp:429</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</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#l01054">Descriptors.hpp:1054</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#l00555">Descriptors.hpp:555</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#l01256">Descriptors.hpp:1256</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#l00875">Descriptors.hpp:875</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#l01119">Descriptors.hpp:1119</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#l00025">Descriptors.hpp:25</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#l00197">Exceptions.hpp:197</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#l01048">Descriptors.hpp:1048</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#l01001">Descriptors.hpp:1001</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#l00212">Types.hpp:212</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#l00448">Descriptors.hpp:448</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a988cb5e216eb87d854414c6a0282eeb4"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a988cb5e216eb87d854414c6a0282eeb4">armnnTfLiteParser::TfLiteParserImpl::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="_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#l00385">Descriptors.hpp:385</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#l00225">TfLiteParser.cpp:225</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_reduce_descriptor_xhtml_aa1c6fc8c96404252f1072632fc5acb59"><div class="ttname"><a href="structarmnn_1_1_reduce_descriptor.xhtml#aa1c6fc8c96404252f1072632fc5acb59">armnn::ReduceDescriptor::m_vAxis</a></div><div class="ttdeci">std::vector&lt; uint32_t &gt; m_vAxis</div><div class="ttdoc">The indices of the dimensions to reduce. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01322">Descriptors.hpp:1322</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#l00563">Descriptors.hpp:563</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#l01117">Descriptors.hpp:1117</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#l00852">Descriptors.hpp:852</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a20518e431cb501b172371b850e6c3ec7"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a20518e431cb501b172371b850e6c3ec7">armnnTfLiteParser::TfLiteParserImpl::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#l03282">TfLiteParser.cpp:3282</a></div></div>
<div class="ttc" id="structarmnn_1_1_backend_options_xhtml"><div class="ttname"><a href="structarmnn_1_1_backend_options.xhtml">armnn::BackendOptions</a></div><div class="ttdoc">Struct for the users to pass backend specific options. </div><div class="ttdef"><b>Definition:</b> <a href="_backend_options_8hpp_source.xhtml#l00020">BackendOptions.hpp:20</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, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00050">Descriptors.hpp:50</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a342a58ab95b91af13b24dd4bdc7e09bb"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a342a58ab95b91af13b24dd4bdc7e09bb">armnnTfLiteParser::TfLiteParserImpl::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#l03243">TfLiteParser.cpp:3243</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#l00450">Descriptors.hpp:450</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml"><div class="ttname"><a href="_assert_8hpp.xhtml">Assert.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_deserializer_xhtml_a80888061963ddd18e87105807a035d9a"><div class="ttname"><a href="namespacearmnn_deserializer.xhtml#a80888061963ddd18e87105807a035d9a">armnnDeserializer::TensorRawPtr</a></div><div class="ttdeci">const armnnSerializer::TensorInfo * TensorRawPtr</div><div class="ttdef"><b>Definition:</b> <a href="_deserializer_8hpp_source.xhtml#l00020">Deserializer.hpp:20</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_a279d0891900c191d5a0139e5c11fe488"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#a279d0891900c191d5a0139e5c11fe488">armnnTfLiteParser::TfLiteParserImpl::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#l03262">TfLiteParser.cpp:3262</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#l01242">Descriptors.hpp:1242</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="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#l01250">Descriptors.hpp:1250</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_afe6c475f92d02dd1eb12acd746e4736f"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe6c475f92d02dd1eb12acd746e4736f">armnnTfLiteParser::TfLiteParserImpl::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#l03325">TfLiteParser.cpp:3325</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#l00308">TfLiteParser.cpp:308</a></div></div>
<div class="ttc" id="structarmnn_1_1_gather_descriptor_xhtml_a35d11c7d509d1adbae1ae01c58394a7f"><div class="ttname"><a href="structarmnn_1_1_gather_descriptor.xhtml#a35d11c7d509d1adbae1ae01c58394a7f">armnn::GatherDescriptor::m_Axis</a></div><div class="ttdeci">int32_t m_Axis</div><div class="ttdoc">The axis in params to gather indices from. </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_elementwise_unary_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_elementwise_unary_descriptor.xhtml">armnn::ElementwiseUnaryDescriptor</a></div><div class="ttdoc">A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00098">Descriptors.hpp:98</a></div></div>
<div class="ttc" id="_tensor_utils_8hpp_xhtml"><div class="ttname"><a href="_tensor_utils_8hpp.xhtml">TensorUtils.hpp</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#l00363">Descriptors.hpp:363</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#l00500">Descriptors.hpp:500</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#l01252">Descriptors.hpp:1252</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#l00698">Descriptors.hpp:698</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="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</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#l00381">Descriptors.hpp:381</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#l00158">Descriptors.cpp:158</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#l00119">Types.hpp:119</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#l00951">Descriptors.hpp:951</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="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">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#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="namespacearmnn_deserializer_xhtml_a948b8c615ff06defa3b80d2352259ff2"><div class="ttname"><a href="namespacearmnn_deserializer.xhtml#a948b8c615ff06defa3b80d2352259ff2">armnnDeserializer::ToTensorInfo</a></div><div class="ttdeci">armnn::TensorInfo ToTensorInfo(TensorRawPtr tensorPtr)</div><div class="ttdef"><b>Definition:</b> <a href="_deserializer_8cpp_source.xhtml#l00568">Deserializer.cpp:568</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#l01244">Descriptors.hpp:1244</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#l01263">Descriptors.hpp:1263</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#l01076">Descriptors.hpp:1076</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="structarmnn_1_1_arg_min_max_descriptor_xhtml_a214c3636fdf0ea5bac8edb42d0e6c7f0"><div class="ttname"><a href="structarmnn_1_1_arg_min_max_descriptor.xhtml#a214c3636fdf0ea5bac8edb42d0e6c7f0">armnn::ArgMinMaxDescriptor::m_Axis</a></div><div class="ttdeci">int m_Axis</div><div class="ttdoc">Axis to reduce across the input tensor. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00072">Descriptors.hpp:72</a></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="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a9945327825b115e93a3b89f4302e76db">armnn::DataType::QSymmS8</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5"><div class="ttname"><a href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0aa0ec87054b5e5b7847d0d8780a01a3d5">armnn::ReduceOperation::Sum</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#l00559">Descriptors.hpp:559</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#l00549">Descriptors.hpp:549</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#l00173">INetwork.hpp:173</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="namespacearmnn_xhtml_abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233"><div class="ttname"><a href="namespacearmnn.xhtml#abc05539fc6e7907f32ef0fb242e3b3b0a6a061313d22e51e0f25b7cd4dc065233">armnn::ReduceOperation::Max</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#l00329">Descriptors.hpp:329</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#l00511">Descriptors.hpp:511</a></div></div>
<div class="ttc" id="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl_xhtml_afe1ea028d8fcb9942c204d4415ff3319"><div class="ttname"><a href="classarmnn_tf_lite_parser_1_1_tf_lite_parser_impl.xhtml#afe1ea028d8fcb9942c204d4415ff3319">armnnTfLiteParser::TfLiteParserImpl::GetSubgraphInputTensorNames</a></div><div class="ttdeci">std::vector&lt; std::string &gt; GetSubgraphInputTensorNames(size_t subgraphId) const</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#l03597">TfLiteParser.cpp:3597</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#l00191">Tensor.hpp:191</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#l00287">TfLiteParser.cpp:287</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#l00052">Descriptors.hpp:52</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a7c00efeb540198b33b8558c76e5cc2dd"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a7c00efeb540198b33b8558c76e5cc2dd">armnn::TensorInfo::IsQuantized</a></div><div class="ttdeci">bool IsQuantized() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00495">Tensor.cpp:495</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#l00139">Descriptors.hpp:139</a></div></div>
<div class="ttc" id="_cl_layer_tests_8cpp_xhtml_a88d84cc49602ca19491dea9c998035fe"><div class="ttname"><a href="_cl_layer_tests_8cpp.xhtml#a88d84cc49602ca19491dea9c998035fe">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#l00212">ClLayerTests.cpp:212</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#l00310">Descriptors.cpp:310</a></div></div>
<div class="ttc" id="include_2armnn_tf_lite_parser_2_version_8hpp_xhtml"><div class="ttname"><a href="include_2armnn_tf_lite_parser_2_version_8hpp.xhtml">Version.hpp</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, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00048">Descriptors.hpp:48</a></div></div>
<div class="ttc" id="structarmnn_1_1_arg_min_max_descriptor_xhtml_abce784834696eb928c620f1fafe71a8d"><div class="ttname"><a href="structarmnn_1_1_arg_min_max_descriptor.xhtml#abce784834696eb928c620f1fafe71a8d">armnn::ArgMinMaxDescriptor::m_Output_Type</a></div><div class="ttdeci">armnn::DataType m_Output_Type</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00074">Descriptors.hpp:74</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#l00025">INetwork.hpp:25</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#l00379">Descriptors.hpp:379</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#l00460">Descriptors.hpp:460</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#l00438">Descriptors.hpp:438</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#l00192">Tensor.hpp:192</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#l00056">Types.hpp:56</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2"><div class="ttname"><a href="namespacearmnn.xhtml#ae7e8cbf71db6a490789ca6dcaa8deeaea78d811e98514cd165dda532286610fd2">armnn::ArgMinMaxFunction::Min</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#l00492">Descriptors.hpp:492</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 Thu Feb 25 2021 17:27:50 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>