• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // clang-format off
2 // Generated file (from: avg_pool_v1_2.mod.py). Do not edit
CreateModel_nhwc(Model * model)3 void CreateModel_nhwc(Model *model) {
4   OperandType type0(Type::BOOL, {});
5   OperandType type1(Type::TENSOR_FLOAT32, {1, 2, 2, 1});
6   OperandType type2(Type::INT32, {});
7   // Phase 1, operands
8   auto op1 = model->addOperand(&type1);
9   auto param = model->addOperand(&type2);
10   auto param1 = model->addOperand(&type2);
11   auto param2 = model->addOperand(&type2);
12   auto param3 = model->addOperand(&type2);
13   auto param4 = model->addOperand(&type2);
14   auto param5 = model->addOperand(&type2);
15   auto param6 = model->addOperand(&type2);
16   auto param7 = model->addOperand(&type2);
17   auto param8 = model->addOperand(&type2);
18   auto layout = model->addOperand(&type0);
19   auto op4 = model->addOperand(&type1);
20   // Phase 2, operations
21   static int32_t param_init[] = {0};
22   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
23   static int32_t param1_init[] = {0};
24   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
25   static int32_t param2_init[] = {0};
26   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
27   static int32_t param3_init[] = {0};
28   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
29   static int32_t param4_init[] = {1};
30   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
31   static int32_t param5_init[] = {1};
32   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
33   static int32_t param6_init[] = {1};
34   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
35   static int32_t param7_init[] = {1};
36   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
37   static int32_t param8_init[] = {0};
38   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
39   static bool8 layout_init[] = {false};
40   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
41   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
42   // Phase 3, inputs and outputs
43   model->identifyInputsAndOutputs(
44     {op1},
45     {op4});
46   assert(model->isValid());
47 }
48 
is_ignored_nhwc(int i)49 inline bool is_ignored_nhwc(int i) {
50   static std::set<int> ignore = {};
51   return ignore.find(i) != ignore.end();
52 }
53 
CreateModel_nhwc_relaxed(Model * model)54 void CreateModel_nhwc_relaxed(Model *model) {
55   OperandType type0(Type::BOOL, {});
56   OperandType type1(Type::TENSOR_FLOAT32, {1, 2, 2, 1});
57   OperandType type2(Type::INT32, {});
58   // Phase 1, operands
59   auto op1 = model->addOperand(&type1);
60   auto param = model->addOperand(&type2);
61   auto param1 = model->addOperand(&type2);
62   auto param2 = model->addOperand(&type2);
63   auto param3 = model->addOperand(&type2);
64   auto param4 = model->addOperand(&type2);
65   auto param5 = model->addOperand(&type2);
66   auto param6 = model->addOperand(&type2);
67   auto param7 = model->addOperand(&type2);
68   auto param8 = model->addOperand(&type2);
69   auto layout = model->addOperand(&type0);
70   auto op4 = model->addOperand(&type1);
71   // Phase 2, operations
72   static int32_t param_init[] = {0};
73   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
74   static int32_t param1_init[] = {0};
75   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
76   static int32_t param2_init[] = {0};
77   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
78   static int32_t param3_init[] = {0};
79   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
80   static int32_t param4_init[] = {1};
81   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
82   static int32_t param5_init[] = {1};
83   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
84   static int32_t param6_init[] = {1};
85   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
86   static int32_t param7_init[] = {1};
87   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
88   static int32_t param8_init[] = {0};
89   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
90   static bool8 layout_init[] = {false};
91   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
92   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
93   // Phase 3, inputs and outputs
94   model->identifyInputsAndOutputs(
95     {op1},
96     {op4});
97   // Phase 4: set relaxed execution
98   model->relaxComputationFloat32toFloat16(true);
99   assert(model->isValid());
100 }
101 
is_ignored_nhwc_relaxed(int i)102 inline bool is_ignored_nhwc_relaxed(int i) {
103   static std::set<int> ignore = {};
104   return ignore.find(i) != ignore.end();
105 }
106 
CreateModel_nhwc_float16(Model * model)107 void CreateModel_nhwc_float16(Model *model) {
108   OperandType type0(Type::BOOL, {});
109   OperandType type19(Type::TENSOR_FLOAT16, {1, 2, 2, 1});
110   OperandType type2(Type::INT32, {});
111   // Phase 1, operands
112   auto op1 = model->addOperand(&type19);
113   auto param = model->addOperand(&type2);
114   auto param1 = model->addOperand(&type2);
115   auto param2 = model->addOperand(&type2);
116   auto param3 = model->addOperand(&type2);
117   auto param4 = model->addOperand(&type2);
118   auto param5 = model->addOperand(&type2);
119   auto param6 = model->addOperand(&type2);
120   auto param7 = model->addOperand(&type2);
121   auto param8 = model->addOperand(&type2);
122   auto layout = model->addOperand(&type0);
123   auto op4 = model->addOperand(&type19);
124   // Phase 2, operations
125   static int32_t param_init[] = {0};
126   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
127   static int32_t param1_init[] = {0};
128   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
129   static int32_t param2_init[] = {0};
130   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
131   static int32_t param3_init[] = {0};
132   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
133   static int32_t param4_init[] = {1};
134   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
135   static int32_t param5_init[] = {1};
136   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
137   static int32_t param6_init[] = {1};
138   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
139   static int32_t param7_init[] = {1};
140   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
141   static int32_t param8_init[] = {0};
142   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
143   static bool8 layout_init[] = {false};
144   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
145   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
146   // Phase 3, inputs and outputs
147   model->identifyInputsAndOutputs(
148     {op1},
149     {op4});
150   assert(model->isValid());
151 }
152 
is_ignored_nhwc_float16(int i)153 inline bool is_ignored_nhwc_float16(int i) {
154   static std::set<int> ignore = {};
155   return ignore.find(i) != ignore.end();
156 }
157 
CreateModel_nhwc_quant8(Model * model)158 void CreateModel_nhwc_quant8(Model *model) {
159   OperandType type0(Type::BOOL, {});
160   OperandType type2(Type::INT32, {});
161   OperandType type20(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.5f, 0);
162   // Phase 1, operands
163   auto op1 = model->addOperand(&type20);
164   auto param = model->addOperand(&type2);
165   auto param1 = model->addOperand(&type2);
166   auto param2 = model->addOperand(&type2);
167   auto param3 = model->addOperand(&type2);
168   auto param4 = model->addOperand(&type2);
169   auto param5 = model->addOperand(&type2);
170   auto param6 = model->addOperand(&type2);
171   auto param7 = model->addOperand(&type2);
172   auto param8 = model->addOperand(&type2);
173   auto layout = model->addOperand(&type0);
174   auto op4 = model->addOperand(&type20);
175   // Phase 2, operations
176   static int32_t param_init[] = {0};
177   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
178   static int32_t param1_init[] = {0};
179   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
180   static int32_t param2_init[] = {0};
181   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
182   static int32_t param3_init[] = {0};
183   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
184   static int32_t param4_init[] = {1};
185   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
186   static int32_t param5_init[] = {1};
187   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
188   static int32_t param6_init[] = {1};
189   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
190   static int32_t param7_init[] = {1};
191   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
192   static int32_t param8_init[] = {0};
193   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
194   static bool8 layout_init[] = {false};
195   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
196   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
197   // Phase 3, inputs and outputs
198   model->identifyInputsAndOutputs(
199     {op1},
200     {op4});
201   assert(model->isValid());
202 }
203 
is_ignored_nhwc_quant8(int i)204 inline bool is_ignored_nhwc_quant8(int i) {
205   static std::set<int> ignore = {};
206   return ignore.find(i) != ignore.end();
207 }
208 
CreateModel_nchw(Model * model)209 void CreateModel_nchw(Model *model) {
210   OperandType type0(Type::BOOL, {});
211   OperandType type2(Type::INT32, {});
212   OperandType type21(Type::TENSOR_FLOAT32, {1, 1, 2, 2});
213   // Phase 1, operands
214   auto op1 = model->addOperand(&type21);
215   auto param = model->addOperand(&type2);
216   auto param1 = model->addOperand(&type2);
217   auto param2 = model->addOperand(&type2);
218   auto param3 = model->addOperand(&type2);
219   auto param4 = model->addOperand(&type2);
220   auto param5 = model->addOperand(&type2);
221   auto param6 = model->addOperand(&type2);
222   auto param7 = model->addOperand(&type2);
223   auto param8 = model->addOperand(&type2);
224   auto layout = model->addOperand(&type0);
225   auto op4 = model->addOperand(&type21);
226   // Phase 2, operations
227   static int32_t param_init[] = {0};
228   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
229   static int32_t param1_init[] = {0};
230   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
231   static int32_t param2_init[] = {0};
232   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
233   static int32_t param3_init[] = {0};
234   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
235   static int32_t param4_init[] = {1};
236   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
237   static int32_t param5_init[] = {1};
238   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
239   static int32_t param6_init[] = {1};
240   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
241   static int32_t param7_init[] = {1};
242   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
243   static int32_t param8_init[] = {0};
244   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
245   static bool8 layout_init[] = {true};
246   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
247   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
248   // Phase 3, inputs and outputs
249   model->identifyInputsAndOutputs(
250     {op1},
251     {op4});
252   assert(model->isValid());
253 }
254 
is_ignored_nchw(int i)255 inline bool is_ignored_nchw(int i) {
256   static std::set<int> ignore = {};
257   return ignore.find(i) != ignore.end();
258 }
259 
CreateModel_nchw_relaxed(Model * model)260 void CreateModel_nchw_relaxed(Model *model) {
261   OperandType type0(Type::BOOL, {});
262   OperandType type2(Type::INT32, {});
263   OperandType type21(Type::TENSOR_FLOAT32, {1, 1, 2, 2});
264   // Phase 1, operands
265   auto op1 = model->addOperand(&type21);
266   auto param = model->addOperand(&type2);
267   auto param1 = model->addOperand(&type2);
268   auto param2 = model->addOperand(&type2);
269   auto param3 = model->addOperand(&type2);
270   auto param4 = model->addOperand(&type2);
271   auto param5 = model->addOperand(&type2);
272   auto param6 = model->addOperand(&type2);
273   auto param7 = model->addOperand(&type2);
274   auto param8 = model->addOperand(&type2);
275   auto layout = model->addOperand(&type0);
276   auto op4 = model->addOperand(&type21);
277   // Phase 2, operations
278   static int32_t param_init[] = {0};
279   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
280   static int32_t param1_init[] = {0};
281   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
282   static int32_t param2_init[] = {0};
283   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
284   static int32_t param3_init[] = {0};
285   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
286   static int32_t param4_init[] = {1};
287   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
288   static int32_t param5_init[] = {1};
289   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
290   static int32_t param6_init[] = {1};
291   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
292   static int32_t param7_init[] = {1};
293   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
294   static int32_t param8_init[] = {0};
295   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
296   static bool8 layout_init[] = {true};
297   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
298   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
299   // Phase 3, inputs and outputs
300   model->identifyInputsAndOutputs(
301     {op1},
302     {op4});
303   // Phase 4: set relaxed execution
304   model->relaxComputationFloat32toFloat16(true);
305   assert(model->isValid());
306 }
307 
is_ignored_nchw_relaxed(int i)308 inline bool is_ignored_nchw_relaxed(int i) {
309   static std::set<int> ignore = {};
310   return ignore.find(i) != ignore.end();
311 }
312 
CreateModel_nchw_float16(Model * model)313 void CreateModel_nchw_float16(Model *model) {
314   OperandType type0(Type::BOOL, {});
315   OperandType type2(Type::INT32, {});
316   OperandType type22(Type::TENSOR_FLOAT16, {1, 1, 2, 2});
317   // Phase 1, operands
318   auto op1 = model->addOperand(&type22);
319   auto param = model->addOperand(&type2);
320   auto param1 = model->addOperand(&type2);
321   auto param2 = model->addOperand(&type2);
322   auto param3 = model->addOperand(&type2);
323   auto param4 = model->addOperand(&type2);
324   auto param5 = model->addOperand(&type2);
325   auto param6 = model->addOperand(&type2);
326   auto param7 = model->addOperand(&type2);
327   auto param8 = model->addOperand(&type2);
328   auto layout = model->addOperand(&type0);
329   auto op4 = model->addOperand(&type22);
330   // Phase 2, operations
331   static int32_t param_init[] = {0};
332   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
333   static int32_t param1_init[] = {0};
334   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
335   static int32_t param2_init[] = {0};
336   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
337   static int32_t param3_init[] = {0};
338   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
339   static int32_t param4_init[] = {1};
340   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
341   static int32_t param5_init[] = {1};
342   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
343   static int32_t param6_init[] = {1};
344   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
345   static int32_t param7_init[] = {1};
346   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
347   static int32_t param8_init[] = {0};
348   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
349   static bool8 layout_init[] = {true};
350   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
351   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
352   // Phase 3, inputs and outputs
353   model->identifyInputsAndOutputs(
354     {op1},
355     {op4});
356   assert(model->isValid());
357 }
358 
is_ignored_nchw_float16(int i)359 inline bool is_ignored_nchw_float16(int i) {
360   static std::set<int> ignore = {};
361   return ignore.find(i) != ignore.end();
362 }
363 
CreateModel_nchw_quant8(Model * model)364 void CreateModel_nchw_quant8(Model *model) {
365   OperandType type0(Type::BOOL, {});
366   OperandType type2(Type::INT32, {});
367   OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 2}, 0.5f, 0);
368   // Phase 1, operands
369   auto op1 = model->addOperand(&type23);
370   auto param = model->addOperand(&type2);
371   auto param1 = model->addOperand(&type2);
372   auto param2 = model->addOperand(&type2);
373   auto param3 = model->addOperand(&type2);
374   auto param4 = model->addOperand(&type2);
375   auto param5 = model->addOperand(&type2);
376   auto param6 = model->addOperand(&type2);
377   auto param7 = model->addOperand(&type2);
378   auto param8 = model->addOperand(&type2);
379   auto layout = model->addOperand(&type0);
380   auto op4 = model->addOperand(&type23);
381   // Phase 2, operations
382   static int32_t param_init[] = {0};
383   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
384   static int32_t param1_init[] = {0};
385   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
386   static int32_t param2_init[] = {0};
387   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
388   static int32_t param3_init[] = {0};
389   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
390   static int32_t param4_init[] = {1};
391   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
392   static int32_t param5_init[] = {1};
393   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
394   static int32_t param6_init[] = {1};
395   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
396   static int32_t param7_init[] = {1};
397   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
398   static int32_t param8_init[] = {0};
399   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
400   static bool8 layout_init[] = {true};
401   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
402   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
403   // Phase 3, inputs and outputs
404   model->identifyInputsAndOutputs(
405     {op1},
406     {op4});
407   assert(model->isValid());
408 }
409 
is_ignored_nchw_quant8(int i)410 inline bool is_ignored_nchw_quant8(int i) {
411   static std::set<int> ignore = {};
412   return ignore.find(i) != ignore.end();
413 }
414 
CreateModel_dynamic_output_shape_nhwc(Model * model)415 void CreateModel_dynamic_output_shape_nhwc(Model *model) {
416   OperandType type0(Type::BOOL, {});
417   OperandType type1(Type::TENSOR_FLOAT32, {1, 2, 2, 1});
418   OperandType type2(Type::INT32, {});
419   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
420   // Phase 1, operands
421   auto op1 = model->addOperand(&type1);
422   auto param = model->addOperand(&type2);
423   auto param1 = model->addOperand(&type2);
424   auto param2 = model->addOperand(&type2);
425   auto param3 = model->addOperand(&type2);
426   auto param4 = model->addOperand(&type2);
427   auto param5 = model->addOperand(&type2);
428   auto param6 = model->addOperand(&type2);
429   auto param7 = model->addOperand(&type2);
430   auto param8 = model->addOperand(&type2);
431   auto layout = model->addOperand(&type0);
432   auto op4 = model->addOperand(&type24);
433   // Phase 2, operations
434   static int32_t param_init[] = {0};
435   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
436   static int32_t param1_init[] = {0};
437   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
438   static int32_t param2_init[] = {0};
439   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
440   static int32_t param3_init[] = {0};
441   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
442   static int32_t param4_init[] = {1};
443   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
444   static int32_t param5_init[] = {1};
445   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
446   static int32_t param6_init[] = {1};
447   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
448   static int32_t param7_init[] = {1};
449   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
450   static int32_t param8_init[] = {0};
451   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
452   static bool8 layout_init[] = {false};
453   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
454   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
455   // Phase 3, inputs and outputs
456   model->identifyInputsAndOutputs(
457     {op1},
458     {op4});
459   assert(model->isValid());
460 }
461 
is_ignored_dynamic_output_shape_nhwc(int i)462 inline bool is_ignored_dynamic_output_shape_nhwc(int i) {
463   static std::set<int> ignore = {};
464   return ignore.find(i) != ignore.end();
465 }
466 
CreateModel_dynamic_output_shape_nhwc_relaxed(Model * model)467 void CreateModel_dynamic_output_shape_nhwc_relaxed(Model *model) {
468   OperandType type0(Type::BOOL, {});
469   OperandType type1(Type::TENSOR_FLOAT32, {1, 2, 2, 1});
470   OperandType type2(Type::INT32, {});
471   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
472   // Phase 1, operands
473   auto op1 = model->addOperand(&type1);
474   auto param = model->addOperand(&type2);
475   auto param1 = model->addOperand(&type2);
476   auto param2 = model->addOperand(&type2);
477   auto param3 = model->addOperand(&type2);
478   auto param4 = model->addOperand(&type2);
479   auto param5 = model->addOperand(&type2);
480   auto param6 = model->addOperand(&type2);
481   auto param7 = model->addOperand(&type2);
482   auto param8 = model->addOperand(&type2);
483   auto layout = model->addOperand(&type0);
484   auto op4 = model->addOperand(&type24);
485   // Phase 2, operations
486   static int32_t param_init[] = {0};
487   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
488   static int32_t param1_init[] = {0};
489   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
490   static int32_t param2_init[] = {0};
491   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
492   static int32_t param3_init[] = {0};
493   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
494   static int32_t param4_init[] = {1};
495   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
496   static int32_t param5_init[] = {1};
497   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
498   static int32_t param6_init[] = {1};
499   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
500   static int32_t param7_init[] = {1};
501   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
502   static int32_t param8_init[] = {0};
503   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
504   static bool8 layout_init[] = {false};
505   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
506   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
507   // Phase 3, inputs and outputs
508   model->identifyInputsAndOutputs(
509     {op1},
510     {op4});
511   // Phase 4: set relaxed execution
512   model->relaxComputationFloat32toFloat16(true);
513   assert(model->isValid());
514 }
515 
is_ignored_dynamic_output_shape_nhwc_relaxed(int i)516 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed(int i) {
517   static std::set<int> ignore = {};
518   return ignore.find(i) != ignore.end();
519 }
520 
CreateModel_dynamic_output_shape_nhwc_float16(Model * model)521 void CreateModel_dynamic_output_shape_nhwc_float16(Model *model) {
522   OperandType type0(Type::BOOL, {});
523   OperandType type19(Type::TENSOR_FLOAT16, {1, 2, 2, 1});
524   OperandType type2(Type::INT32, {});
525   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
526   // Phase 1, operands
527   auto op1 = model->addOperand(&type19);
528   auto param = model->addOperand(&type2);
529   auto param1 = model->addOperand(&type2);
530   auto param2 = model->addOperand(&type2);
531   auto param3 = model->addOperand(&type2);
532   auto param4 = model->addOperand(&type2);
533   auto param5 = model->addOperand(&type2);
534   auto param6 = model->addOperand(&type2);
535   auto param7 = model->addOperand(&type2);
536   auto param8 = model->addOperand(&type2);
537   auto layout = model->addOperand(&type0);
538   auto op4 = model->addOperand(&type25);
539   // Phase 2, operations
540   static int32_t param_init[] = {0};
541   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
542   static int32_t param1_init[] = {0};
543   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
544   static int32_t param2_init[] = {0};
545   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
546   static int32_t param3_init[] = {0};
547   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
548   static int32_t param4_init[] = {1};
549   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
550   static int32_t param5_init[] = {1};
551   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
552   static int32_t param6_init[] = {1};
553   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
554   static int32_t param7_init[] = {1};
555   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
556   static int32_t param8_init[] = {0};
557   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
558   static bool8 layout_init[] = {false};
559   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
560   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
561   // Phase 3, inputs and outputs
562   model->identifyInputsAndOutputs(
563     {op1},
564     {op4});
565   assert(model->isValid());
566 }
567 
is_ignored_dynamic_output_shape_nhwc_float16(int i)568 inline bool is_ignored_dynamic_output_shape_nhwc_float16(int i) {
569   static std::set<int> ignore = {};
570   return ignore.find(i) != ignore.end();
571 }
572 
CreateModel_dynamic_output_shape_nhwc_quant8(Model * model)573 void CreateModel_dynamic_output_shape_nhwc_quant8(Model *model) {
574   OperandType type0(Type::BOOL, {});
575   OperandType type2(Type::INT32, {});
576   OperandType type20(Type::TENSOR_QUANT8_ASYMM, {1, 2, 2, 1}, 0.5f, 0);
577   OperandType type26(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
578   // Phase 1, operands
579   auto op1 = model->addOperand(&type20);
580   auto param = model->addOperand(&type2);
581   auto param1 = model->addOperand(&type2);
582   auto param2 = model->addOperand(&type2);
583   auto param3 = model->addOperand(&type2);
584   auto param4 = model->addOperand(&type2);
585   auto param5 = model->addOperand(&type2);
586   auto param6 = model->addOperand(&type2);
587   auto param7 = model->addOperand(&type2);
588   auto param8 = model->addOperand(&type2);
589   auto layout = model->addOperand(&type0);
590   auto op4 = model->addOperand(&type26);
591   // Phase 2, operations
592   static int32_t param_init[] = {0};
593   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
594   static int32_t param1_init[] = {0};
595   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
596   static int32_t param2_init[] = {0};
597   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
598   static int32_t param3_init[] = {0};
599   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
600   static int32_t param4_init[] = {1};
601   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
602   static int32_t param5_init[] = {1};
603   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
604   static int32_t param6_init[] = {1};
605   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
606   static int32_t param7_init[] = {1};
607   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
608   static int32_t param8_init[] = {0};
609   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
610   static bool8 layout_init[] = {false};
611   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
612   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
613   // Phase 3, inputs and outputs
614   model->identifyInputsAndOutputs(
615     {op1},
616     {op4});
617   assert(model->isValid());
618 }
619 
is_ignored_dynamic_output_shape_nhwc_quant8(int i)620 inline bool is_ignored_dynamic_output_shape_nhwc_quant8(int i) {
621   static std::set<int> ignore = {};
622   return ignore.find(i) != ignore.end();
623 }
624 
CreateModel_dynamic_output_shape_nchw(Model * model)625 void CreateModel_dynamic_output_shape_nchw(Model *model) {
626   OperandType type0(Type::BOOL, {});
627   OperandType type2(Type::INT32, {});
628   OperandType type21(Type::TENSOR_FLOAT32, {1, 1, 2, 2});
629   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
630   // Phase 1, operands
631   auto op1 = model->addOperand(&type21);
632   auto param = model->addOperand(&type2);
633   auto param1 = model->addOperand(&type2);
634   auto param2 = model->addOperand(&type2);
635   auto param3 = model->addOperand(&type2);
636   auto param4 = model->addOperand(&type2);
637   auto param5 = model->addOperand(&type2);
638   auto param6 = model->addOperand(&type2);
639   auto param7 = model->addOperand(&type2);
640   auto param8 = model->addOperand(&type2);
641   auto layout = model->addOperand(&type0);
642   auto op4 = model->addOperand(&type24);
643   // Phase 2, operations
644   static int32_t param_init[] = {0};
645   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
646   static int32_t param1_init[] = {0};
647   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
648   static int32_t param2_init[] = {0};
649   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
650   static int32_t param3_init[] = {0};
651   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
652   static int32_t param4_init[] = {1};
653   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
654   static int32_t param5_init[] = {1};
655   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
656   static int32_t param6_init[] = {1};
657   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
658   static int32_t param7_init[] = {1};
659   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
660   static int32_t param8_init[] = {0};
661   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
662   static bool8 layout_init[] = {true};
663   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
664   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
665   // Phase 3, inputs and outputs
666   model->identifyInputsAndOutputs(
667     {op1},
668     {op4});
669   assert(model->isValid());
670 }
671 
is_ignored_dynamic_output_shape_nchw(int i)672 inline bool is_ignored_dynamic_output_shape_nchw(int i) {
673   static std::set<int> ignore = {};
674   return ignore.find(i) != ignore.end();
675 }
676 
CreateModel_dynamic_output_shape_nchw_relaxed(Model * model)677 void CreateModel_dynamic_output_shape_nchw_relaxed(Model *model) {
678   OperandType type0(Type::BOOL, {});
679   OperandType type2(Type::INT32, {});
680   OperandType type21(Type::TENSOR_FLOAT32, {1, 1, 2, 2});
681   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
682   // Phase 1, operands
683   auto op1 = model->addOperand(&type21);
684   auto param = model->addOperand(&type2);
685   auto param1 = model->addOperand(&type2);
686   auto param2 = model->addOperand(&type2);
687   auto param3 = model->addOperand(&type2);
688   auto param4 = model->addOperand(&type2);
689   auto param5 = model->addOperand(&type2);
690   auto param6 = model->addOperand(&type2);
691   auto param7 = model->addOperand(&type2);
692   auto param8 = model->addOperand(&type2);
693   auto layout = model->addOperand(&type0);
694   auto op4 = model->addOperand(&type24);
695   // Phase 2, operations
696   static int32_t param_init[] = {0};
697   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
698   static int32_t param1_init[] = {0};
699   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
700   static int32_t param2_init[] = {0};
701   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
702   static int32_t param3_init[] = {0};
703   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
704   static int32_t param4_init[] = {1};
705   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
706   static int32_t param5_init[] = {1};
707   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
708   static int32_t param6_init[] = {1};
709   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
710   static int32_t param7_init[] = {1};
711   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
712   static int32_t param8_init[] = {0};
713   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
714   static bool8 layout_init[] = {true};
715   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
716   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
717   // Phase 3, inputs and outputs
718   model->identifyInputsAndOutputs(
719     {op1},
720     {op4});
721   // Phase 4: set relaxed execution
722   model->relaxComputationFloat32toFloat16(true);
723   assert(model->isValid());
724 }
725 
is_ignored_dynamic_output_shape_nchw_relaxed(int i)726 inline bool is_ignored_dynamic_output_shape_nchw_relaxed(int i) {
727   static std::set<int> ignore = {};
728   return ignore.find(i) != ignore.end();
729 }
730 
CreateModel_dynamic_output_shape_nchw_float16(Model * model)731 void CreateModel_dynamic_output_shape_nchw_float16(Model *model) {
732   OperandType type0(Type::BOOL, {});
733   OperandType type2(Type::INT32, {});
734   OperandType type22(Type::TENSOR_FLOAT16, {1, 1, 2, 2});
735   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
736   // Phase 1, operands
737   auto op1 = model->addOperand(&type22);
738   auto param = model->addOperand(&type2);
739   auto param1 = model->addOperand(&type2);
740   auto param2 = model->addOperand(&type2);
741   auto param3 = model->addOperand(&type2);
742   auto param4 = model->addOperand(&type2);
743   auto param5 = model->addOperand(&type2);
744   auto param6 = model->addOperand(&type2);
745   auto param7 = model->addOperand(&type2);
746   auto param8 = model->addOperand(&type2);
747   auto layout = model->addOperand(&type0);
748   auto op4 = model->addOperand(&type25);
749   // Phase 2, operations
750   static int32_t param_init[] = {0};
751   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
752   static int32_t param1_init[] = {0};
753   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
754   static int32_t param2_init[] = {0};
755   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
756   static int32_t param3_init[] = {0};
757   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
758   static int32_t param4_init[] = {1};
759   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
760   static int32_t param5_init[] = {1};
761   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
762   static int32_t param6_init[] = {1};
763   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
764   static int32_t param7_init[] = {1};
765   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
766   static int32_t param8_init[] = {0};
767   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
768   static bool8 layout_init[] = {true};
769   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
770   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
771   // Phase 3, inputs and outputs
772   model->identifyInputsAndOutputs(
773     {op1},
774     {op4});
775   assert(model->isValid());
776 }
777 
is_ignored_dynamic_output_shape_nchw_float16(int i)778 inline bool is_ignored_dynamic_output_shape_nchw_float16(int i) {
779   static std::set<int> ignore = {};
780   return ignore.find(i) != ignore.end();
781 }
782 
CreateModel_dynamic_output_shape_nchw_quant8(Model * model)783 void CreateModel_dynamic_output_shape_nchw_quant8(Model *model) {
784   OperandType type0(Type::BOOL, {});
785   OperandType type2(Type::INT32, {});
786   OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 2}, 0.5f, 0);
787   OperandType type26(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
788   // Phase 1, operands
789   auto op1 = model->addOperand(&type23);
790   auto param = model->addOperand(&type2);
791   auto param1 = model->addOperand(&type2);
792   auto param2 = model->addOperand(&type2);
793   auto param3 = model->addOperand(&type2);
794   auto param4 = model->addOperand(&type2);
795   auto param5 = model->addOperand(&type2);
796   auto param6 = model->addOperand(&type2);
797   auto param7 = model->addOperand(&type2);
798   auto param8 = model->addOperand(&type2);
799   auto layout = model->addOperand(&type0);
800   auto op4 = model->addOperand(&type26);
801   // Phase 2, operations
802   static int32_t param_init[] = {0};
803   model->setOperandValue(param, param_init, sizeof(int32_t) * 1);
804   static int32_t param1_init[] = {0};
805   model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1);
806   static int32_t param2_init[] = {0};
807   model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1);
808   static int32_t param3_init[] = {0};
809   model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1);
810   static int32_t param4_init[] = {1};
811   model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1);
812   static int32_t param5_init[] = {1};
813   model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1);
814   static int32_t param6_init[] = {1};
815   model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1);
816   static int32_t param7_init[] = {1};
817   model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1);
818   static int32_t param8_init[] = {0};
819   model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1);
820   static bool8 layout_init[] = {true};
821   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
822   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op1, param, param1, param2, param3, param4, param5, param6, param7, param8, layout}, {op4});
823   // Phase 3, inputs and outputs
824   model->identifyInputsAndOutputs(
825     {op1},
826     {op4});
827   assert(model->isValid());
828 }
829 
is_ignored_dynamic_output_shape_nchw_quant8(int i)830 inline bool is_ignored_dynamic_output_shape_nchw_quant8(int i) {
831   static std::set<int> ignore = {};
832   return ignore.find(i) != ignore.end();
833 }
834 
CreateModel_nhwc_2(Model * model)835 void CreateModel_nhwc_2(Model *model) {
836   OperandType type0(Type::BOOL, {});
837   OperandType type2(Type::INT32, {});
838   OperandType type3(Type::TENSOR_FLOAT32, {5, 52, 60, 3});
839   OperandType type4(Type::TENSOR_FLOAT32, {5, 11, 13, 3});
840   // Phase 1, operands
841   auto op11 = model->addOperand(&type3);
842   auto param9 = model->addOperand(&type2);
843   auto param10 = model->addOperand(&type2);
844   auto param11 = model->addOperand(&type2);
845   auto param12 = model->addOperand(&type2);
846   auto param13 = model->addOperand(&type2);
847   auto param14 = model->addOperand(&type2);
848   auto param15 = model->addOperand(&type2);
849   auto param16 = model->addOperand(&type2);
850   auto param17 = model->addOperand(&type2);
851   auto layout = model->addOperand(&type0);
852   auto op41 = model->addOperand(&type4);
853   // Phase 2, operations
854   static int32_t param9_init[] = {50};
855   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
856   static int32_t param10_init[] = {50};
857   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
858   static int32_t param11_init[] = {50};
859   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
860   static int32_t param12_init[] = {50};
861   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
862   static int32_t param13_init[] = {5};
863   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
864   static int32_t param14_init[] = {5};
865   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
866   static int32_t param15_init[] = {100};
867   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
868   static int32_t param16_init[] = {100};
869   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
870   static int32_t param17_init[] = {0};
871   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
872   static bool8 layout_init[] = {false};
873   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
874   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
875   // Phase 3, inputs and outputs
876   model->identifyInputsAndOutputs(
877     {op11},
878     {op41});
879   assert(model->isValid());
880 }
881 
is_ignored_nhwc_2(int i)882 inline bool is_ignored_nhwc_2(int i) {
883   static std::set<int> ignore = {};
884   return ignore.find(i) != ignore.end();
885 }
886 
CreateModel_nhwc_relaxed_2(Model * model)887 void CreateModel_nhwc_relaxed_2(Model *model) {
888   OperandType type0(Type::BOOL, {});
889   OperandType type2(Type::INT32, {});
890   OperandType type3(Type::TENSOR_FLOAT32, {5, 52, 60, 3});
891   OperandType type4(Type::TENSOR_FLOAT32, {5, 11, 13, 3});
892   // Phase 1, operands
893   auto op11 = model->addOperand(&type3);
894   auto param9 = model->addOperand(&type2);
895   auto param10 = model->addOperand(&type2);
896   auto param11 = model->addOperand(&type2);
897   auto param12 = model->addOperand(&type2);
898   auto param13 = model->addOperand(&type2);
899   auto param14 = model->addOperand(&type2);
900   auto param15 = model->addOperand(&type2);
901   auto param16 = model->addOperand(&type2);
902   auto param17 = model->addOperand(&type2);
903   auto layout = model->addOperand(&type0);
904   auto op41 = model->addOperand(&type4);
905   // Phase 2, operations
906   static int32_t param9_init[] = {50};
907   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
908   static int32_t param10_init[] = {50};
909   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
910   static int32_t param11_init[] = {50};
911   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
912   static int32_t param12_init[] = {50};
913   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
914   static int32_t param13_init[] = {5};
915   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
916   static int32_t param14_init[] = {5};
917   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
918   static int32_t param15_init[] = {100};
919   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
920   static int32_t param16_init[] = {100};
921   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
922   static int32_t param17_init[] = {0};
923   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
924   static bool8 layout_init[] = {false};
925   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
926   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
927   // Phase 3, inputs and outputs
928   model->identifyInputsAndOutputs(
929     {op11},
930     {op41});
931   // Phase 4: set relaxed execution
932   model->relaxComputationFloat32toFloat16(true);
933   assert(model->isValid());
934 }
935 
is_ignored_nhwc_relaxed_2(int i)936 inline bool is_ignored_nhwc_relaxed_2(int i) {
937   static std::set<int> ignore = {};
938   return ignore.find(i) != ignore.end();
939 }
940 
CreateModel_nhwc_float16_2(Model * model)941 void CreateModel_nhwc_float16_2(Model *model) {
942   OperandType type0(Type::BOOL, {});
943   OperandType type2(Type::INT32, {});
944   OperandType type27(Type::TENSOR_FLOAT16, {5, 52, 60, 3});
945   OperandType type28(Type::TENSOR_FLOAT16, {5, 11, 13, 3});
946   // Phase 1, operands
947   auto op11 = model->addOperand(&type27);
948   auto param9 = model->addOperand(&type2);
949   auto param10 = model->addOperand(&type2);
950   auto param11 = model->addOperand(&type2);
951   auto param12 = model->addOperand(&type2);
952   auto param13 = model->addOperand(&type2);
953   auto param14 = model->addOperand(&type2);
954   auto param15 = model->addOperand(&type2);
955   auto param16 = model->addOperand(&type2);
956   auto param17 = model->addOperand(&type2);
957   auto layout = model->addOperand(&type0);
958   auto op41 = model->addOperand(&type28);
959   // Phase 2, operations
960   static int32_t param9_init[] = {50};
961   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
962   static int32_t param10_init[] = {50};
963   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
964   static int32_t param11_init[] = {50};
965   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
966   static int32_t param12_init[] = {50};
967   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
968   static int32_t param13_init[] = {5};
969   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
970   static int32_t param14_init[] = {5};
971   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
972   static int32_t param15_init[] = {100};
973   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
974   static int32_t param16_init[] = {100};
975   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
976   static int32_t param17_init[] = {0};
977   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
978   static bool8 layout_init[] = {false};
979   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
980   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
981   // Phase 3, inputs and outputs
982   model->identifyInputsAndOutputs(
983     {op11},
984     {op41});
985   assert(model->isValid());
986 }
987 
is_ignored_nhwc_float16_2(int i)988 inline bool is_ignored_nhwc_float16_2(int i) {
989   static std::set<int> ignore = {};
990   return ignore.find(i) != ignore.end();
991 }
992 
CreateModel_nhwc_quant8_2(Model * model)993 void CreateModel_nhwc_quant8_2(Model *model) {
994   OperandType type0(Type::BOOL, {});
995   OperandType type2(Type::INT32, {});
996   OperandType type29(Type::TENSOR_QUANT8_ASYMM, {5, 52, 60, 3}, 0.5f, 0);
997   OperandType type30(Type::TENSOR_QUANT8_ASYMM, {5, 11, 13, 3}, 0.5f, 0);
998   // Phase 1, operands
999   auto op11 = model->addOperand(&type29);
1000   auto param9 = model->addOperand(&type2);
1001   auto param10 = model->addOperand(&type2);
1002   auto param11 = model->addOperand(&type2);
1003   auto param12 = model->addOperand(&type2);
1004   auto param13 = model->addOperand(&type2);
1005   auto param14 = model->addOperand(&type2);
1006   auto param15 = model->addOperand(&type2);
1007   auto param16 = model->addOperand(&type2);
1008   auto param17 = model->addOperand(&type2);
1009   auto layout = model->addOperand(&type0);
1010   auto op41 = model->addOperand(&type30);
1011   // Phase 2, operations
1012   static int32_t param9_init[] = {50};
1013   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1014   static int32_t param10_init[] = {50};
1015   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1016   static int32_t param11_init[] = {50};
1017   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1018   static int32_t param12_init[] = {50};
1019   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1020   static int32_t param13_init[] = {5};
1021   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1022   static int32_t param14_init[] = {5};
1023   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1024   static int32_t param15_init[] = {100};
1025   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1026   static int32_t param16_init[] = {100};
1027   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1028   static int32_t param17_init[] = {0};
1029   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1030   static bool8 layout_init[] = {false};
1031   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1032   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1033   // Phase 3, inputs and outputs
1034   model->identifyInputsAndOutputs(
1035     {op11},
1036     {op41});
1037   assert(model->isValid());
1038 }
1039 
is_ignored_nhwc_quant8_2(int i)1040 inline bool is_ignored_nhwc_quant8_2(int i) {
1041   static std::set<int> ignore = {};
1042   return ignore.find(i) != ignore.end();
1043 }
1044 
CreateModel_nchw_2(Model * model)1045 void CreateModel_nchw_2(Model *model) {
1046   OperandType type0(Type::BOOL, {});
1047   OperandType type2(Type::INT32, {});
1048   OperandType type31(Type::TENSOR_FLOAT32, {5, 3, 52, 60});
1049   OperandType type32(Type::TENSOR_FLOAT32, {5, 3, 11, 13});
1050   // Phase 1, operands
1051   auto op11 = model->addOperand(&type31);
1052   auto param9 = model->addOperand(&type2);
1053   auto param10 = model->addOperand(&type2);
1054   auto param11 = model->addOperand(&type2);
1055   auto param12 = model->addOperand(&type2);
1056   auto param13 = model->addOperand(&type2);
1057   auto param14 = model->addOperand(&type2);
1058   auto param15 = model->addOperand(&type2);
1059   auto param16 = model->addOperand(&type2);
1060   auto param17 = model->addOperand(&type2);
1061   auto layout = model->addOperand(&type0);
1062   auto op41 = model->addOperand(&type32);
1063   // Phase 2, operations
1064   static int32_t param9_init[] = {50};
1065   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1066   static int32_t param10_init[] = {50};
1067   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1068   static int32_t param11_init[] = {50};
1069   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1070   static int32_t param12_init[] = {50};
1071   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1072   static int32_t param13_init[] = {5};
1073   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1074   static int32_t param14_init[] = {5};
1075   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1076   static int32_t param15_init[] = {100};
1077   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1078   static int32_t param16_init[] = {100};
1079   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1080   static int32_t param17_init[] = {0};
1081   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1082   static bool8 layout_init[] = {true};
1083   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1084   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1085   // Phase 3, inputs and outputs
1086   model->identifyInputsAndOutputs(
1087     {op11},
1088     {op41});
1089   assert(model->isValid());
1090 }
1091 
is_ignored_nchw_2(int i)1092 inline bool is_ignored_nchw_2(int i) {
1093   static std::set<int> ignore = {};
1094   return ignore.find(i) != ignore.end();
1095 }
1096 
CreateModel_nchw_relaxed_2(Model * model)1097 void CreateModel_nchw_relaxed_2(Model *model) {
1098   OperandType type0(Type::BOOL, {});
1099   OperandType type2(Type::INT32, {});
1100   OperandType type31(Type::TENSOR_FLOAT32, {5, 3, 52, 60});
1101   OperandType type32(Type::TENSOR_FLOAT32, {5, 3, 11, 13});
1102   // Phase 1, operands
1103   auto op11 = model->addOperand(&type31);
1104   auto param9 = model->addOperand(&type2);
1105   auto param10 = model->addOperand(&type2);
1106   auto param11 = model->addOperand(&type2);
1107   auto param12 = model->addOperand(&type2);
1108   auto param13 = model->addOperand(&type2);
1109   auto param14 = model->addOperand(&type2);
1110   auto param15 = model->addOperand(&type2);
1111   auto param16 = model->addOperand(&type2);
1112   auto param17 = model->addOperand(&type2);
1113   auto layout = model->addOperand(&type0);
1114   auto op41 = model->addOperand(&type32);
1115   // Phase 2, operations
1116   static int32_t param9_init[] = {50};
1117   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1118   static int32_t param10_init[] = {50};
1119   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1120   static int32_t param11_init[] = {50};
1121   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1122   static int32_t param12_init[] = {50};
1123   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1124   static int32_t param13_init[] = {5};
1125   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1126   static int32_t param14_init[] = {5};
1127   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1128   static int32_t param15_init[] = {100};
1129   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1130   static int32_t param16_init[] = {100};
1131   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1132   static int32_t param17_init[] = {0};
1133   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1134   static bool8 layout_init[] = {true};
1135   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1136   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1137   // Phase 3, inputs and outputs
1138   model->identifyInputsAndOutputs(
1139     {op11},
1140     {op41});
1141   // Phase 4: set relaxed execution
1142   model->relaxComputationFloat32toFloat16(true);
1143   assert(model->isValid());
1144 }
1145 
is_ignored_nchw_relaxed_2(int i)1146 inline bool is_ignored_nchw_relaxed_2(int i) {
1147   static std::set<int> ignore = {};
1148   return ignore.find(i) != ignore.end();
1149 }
1150 
CreateModel_nchw_float16_2(Model * model)1151 void CreateModel_nchw_float16_2(Model *model) {
1152   OperandType type0(Type::BOOL, {});
1153   OperandType type2(Type::INT32, {});
1154   OperandType type33(Type::TENSOR_FLOAT16, {5, 3, 52, 60});
1155   OperandType type34(Type::TENSOR_FLOAT16, {5, 3, 11, 13});
1156   // Phase 1, operands
1157   auto op11 = model->addOperand(&type33);
1158   auto param9 = model->addOperand(&type2);
1159   auto param10 = model->addOperand(&type2);
1160   auto param11 = model->addOperand(&type2);
1161   auto param12 = model->addOperand(&type2);
1162   auto param13 = model->addOperand(&type2);
1163   auto param14 = model->addOperand(&type2);
1164   auto param15 = model->addOperand(&type2);
1165   auto param16 = model->addOperand(&type2);
1166   auto param17 = model->addOperand(&type2);
1167   auto layout = model->addOperand(&type0);
1168   auto op41 = model->addOperand(&type34);
1169   // Phase 2, operations
1170   static int32_t param9_init[] = {50};
1171   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1172   static int32_t param10_init[] = {50};
1173   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1174   static int32_t param11_init[] = {50};
1175   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1176   static int32_t param12_init[] = {50};
1177   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1178   static int32_t param13_init[] = {5};
1179   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1180   static int32_t param14_init[] = {5};
1181   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1182   static int32_t param15_init[] = {100};
1183   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1184   static int32_t param16_init[] = {100};
1185   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1186   static int32_t param17_init[] = {0};
1187   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1188   static bool8 layout_init[] = {true};
1189   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1190   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1191   // Phase 3, inputs and outputs
1192   model->identifyInputsAndOutputs(
1193     {op11},
1194     {op41});
1195   assert(model->isValid());
1196 }
1197 
is_ignored_nchw_float16_2(int i)1198 inline bool is_ignored_nchw_float16_2(int i) {
1199   static std::set<int> ignore = {};
1200   return ignore.find(i) != ignore.end();
1201 }
1202 
CreateModel_nchw_quant8_2(Model * model)1203 void CreateModel_nchw_quant8_2(Model *model) {
1204   OperandType type0(Type::BOOL, {});
1205   OperandType type2(Type::INT32, {});
1206   OperandType type35(Type::TENSOR_QUANT8_ASYMM, {5, 3, 52, 60}, 0.5f, 0);
1207   OperandType type36(Type::TENSOR_QUANT8_ASYMM, {5, 3, 11, 13}, 0.5f, 0);
1208   // Phase 1, operands
1209   auto op11 = model->addOperand(&type35);
1210   auto param9 = model->addOperand(&type2);
1211   auto param10 = model->addOperand(&type2);
1212   auto param11 = model->addOperand(&type2);
1213   auto param12 = model->addOperand(&type2);
1214   auto param13 = model->addOperand(&type2);
1215   auto param14 = model->addOperand(&type2);
1216   auto param15 = model->addOperand(&type2);
1217   auto param16 = model->addOperand(&type2);
1218   auto param17 = model->addOperand(&type2);
1219   auto layout = model->addOperand(&type0);
1220   auto op41 = model->addOperand(&type36);
1221   // Phase 2, operations
1222   static int32_t param9_init[] = {50};
1223   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1224   static int32_t param10_init[] = {50};
1225   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1226   static int32_t param11_init[] = {50};
1227   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1228   static int32_t param12_init[] = {50};
1229   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1230   static int32_t param13_init[] = {5};
1231   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1232   static int32_t param14_init[] = {5};
1233   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1234   static int32_t param15_init[] = {100};
1235   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1236   static int32_t param16_init[] = {100};
1237   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1238   static int32_t param17_init[] = {0};
1239   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1240   static bool8 layout_init[] = {true};
1241   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1242   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1243   // Phase 3, inputs and outputs
1244   model->identifyInputsAndOutputs(
1245     {op11},
1246     {op41});
1247   assert(model->isValid());
1248 }
1249 
is_ignored_nchw_quant8_2(int i)1250 inline bool is_ignored_nchw_quant8_2(int i) {
1251   static std::set<int> ignore = {};
1252   return ignore.find(i) != ignore.end();
1253 }
1254 
CreateModel_dynamic_output_shape_nhwc_2(Model * model)1255 void CreateModel_dynamic_output_shape_nhwc_2(Model *model) {
1256   OperandType type0(Type::BOOL, {});
1257   OperandType type2(Type::INT32, {});
1258   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
1259   OperandType type3(Type::TENSOR_FLOAT32, {5, 52, 60, 3});
1260   // Phase 1, operands
1261   auto op11 = model->addOperand(&type3);
1262   auto param9 = model->addOperand(&type2);
1263   auto param10 = model->addOperand(&type2);
1264   auto param11 = model->addOperand(&type2);
1265   auto param12 = model->addOperand(&type2);
1266   auto param13 = model->addOperand(&type2);
1267   auto param14 = model->addOperand(&type2);
1268   auto param15 = model->addOperand(&type2);
1269   auto param16 = model->addOperand(&type2);
1270   auto param17 = model->addOperand(&type2);
1271   auto layout = model->addOperand(&type0);
1272   auto op41 = model->addOperand(&type24);
1273   // Phase 2, operations
1274   static int32_t param9_init[] = {50};
1275   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1276   static int32_t param10_init[] = {50};
1277   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1278   static int32_t param11_init[] = {50};
1279   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1280   static int32_t param12_init[] = {50};
1281   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1282   static int32_t param13_init[] = {5};
1283   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1284   static int32_t param14_init[] = {5};
1285   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1286   static int32_t param15_init[] = {100};
1287   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1288   static int32_t param16_init[] = {100};
1289   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1290   static int32_t param17_init[] = {0};
1291   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1292   static bool8 layout_init[] = {false};
1293   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1294   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1295   // Phase 3, inputs and outputs
1296   model->identifyInputsAndOutputs(
1297     {op11},
1298     {op41});
1299   assert(model->isValid());
1300 }
1301 
is_ignored_dynamic_output_shape_nhwc_2(int i)1302 inline bool is_ignored_dynamic_output_shape_nhwc_2(int i) {
1303   static std::set<int> ignore = {};
1304   return ignore.find(i) != ignore.end();
1305 }
1306 
CreateModel_dynamic_output_shape_nhwc_relaxed_2(Model * model)1307 void CreateModel_dynamic_output_shape_nhwc_relaxed_2(Model *model) {
1308   OperandType type0(Type::BOOL, {});
1309   OperandType type2(Type::INT32, {});
1310   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
1311   OperandType type3(Type::TENSOR_FLOAT32, {5, 52, 60, 3});
1312   // Phase 1, operands
1313   auto op11 = model->addOperand(&type3);
1314   auto param9 = model->addOperand(&type2);
1315   auto param10 = model->addOperand(&type2);
1316   auto param11 = model->addOperand(&type2);
1317   auto param12 = model->addOperand(&type2);
1318   auto param13 = model->addOperand(&type2);
1319   auto param14 = model->addOperand(&type2);
1320   auto param15 = model->addOperand(&type2);
1321   auto param16 = model->addOperand(&type2);
1322   auto param17 = model->addOperand(&type2);
1323   auto layout = model->addOperand(&type0);
1324   auto op41 = model->addOperand(&type24);
1325   // Phase 2, operations
1326   static int32_t param9_init[] = {50};
1327   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1328   static int32_t param10_init[] = {50};
1329   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1330   static int32_t param11_init[] = {50};
1331   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1332   static int32_t param12_init[] = {50};
1333   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1334   static int32_t param13_init[] = {5};
1335   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1336   static int32_t param14_init[] = {5};
1337   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1338   static int32_t param15_init[] = {100};
1339   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1340   static int32_t param16_init[] = {100};
1341   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1342   static int32_t param17_init[] = {0};
1343   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1344   static bool8 layout_init[] = {false};
1345   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1346   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1347   // Phase 3, inputs and outputs
1348   model->identifyInputsAndOutputs(
1349     {op11},
1350     {op41});
1351   // Phase 4: set relaxed execution
1352   model->relaxComputationFloat32toFloat16(true);
1353   assert(model->isValid());
1354 }
1355 
is_ignored_dynamic_output_shape_nhwc_relaxed_2(int i)1356 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_2(int i) {
1357   static std::set<int> ignore = {};
1358   return ignore.find(i) != ignore.end();
1359 }
1360 
CreateModel_dynamic_output_shape_nhwc_float16_2(Model * model)1361 void CreateModel_dynamic_output_shape_nhwc_float16_2(Model *model) {
1362   OperandType type0(Type::BOOL, {});
1363   OperandType type2(Type::INT32, {});
1364   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
1365   OperandType type27(Type::TENSOR_FLOAT16, {5, 52, 60, 3});
1366   // Phase 1, operands
1367   auto op11 = model->addOperand(&type27);
1368   auto param9 = model->addOperand(&type2);
1369   auto param10 = model->addOperand(&type2);
1370   auto param11 = model->addOperand(&type2);
1371   auto param12 = model->addOperand(&type2);
1372   auto param13 = model->addOperand(&type2);
1373   auto param14 = model->addOperand(&type2);
1374   auto param15 = model->addOperand(&type2);
1375   auto param16 = model->addOperand(&type2);
1376   auto param17 = model->addOperand(&type2);
1377   auto layout = model->addOperand(&type0);
1378   auto op41 = model->addOperand(&type25);
1379   // Phase 2, operations
1380   static int32_t param9_init[] = {50};
1381   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1382   static int32_t param10_init[] = {50};
1383   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1384   static int32_t param11_init[] = {50};
1385   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1386   static int32_t param12_init[] = {50};
1387   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1388   static int32_t param13_init[] = {5};
1389   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1390   static int32_t param14_init[] = {5};
1391   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1392   static int32_t param15_init[] = {100};
1393   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1394   static int32_t param16_init[] = {100};
1395   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1396   static int32_t param17_init[] = {0};
1397   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1398   static bool8 layout_init[] = {false};
1399   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1400   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1401   // Phase 3, inputs and outputs
1402   model->identifyInputsAndOutputs(
1403     {op11},
1404     {op41});
1405   assert(model->isValid());
1406 }
1407 
is_ignored_dynamic_output_shape_nhwc_float16_2(int i)1408 inline bool is_ignored_dynamic_output_shape_nhwc_float16_2(int i) {
1409   static std::set<int> ignore = {};
1410   return ignore.find(i) != ignore.end();
1411 }
1412 
CreateModel_dynamic_output_shape_nhwc_quant8_2(Model * model)1413 void CreateModel_dynamic_output_shape_nhwc_quant8_2(Model *model) {
1414   OperandType type0(Type::BOOL, {});
1415   OperandType type2(Type::INT32, {});
1416   OperandType type26(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
1417   OperandType type29(Type::TENSOR_QUANT8_ASYMM, {5, 52, 60, 3}, 0.5f, 0);
1418   // Phase 1, operands
1419   auto op11 = model->addOperand(&type29);
1420   auto param9 = model->addOperand(&type2);
1421   auto param10 = model->addOperand(&type2);
1422   auto param11 = model->addOperand(&type2);
1423   auto param12 = model->addOperand(&type2);
1424   auto param13 = model->addOperand(&type2);
1425   auto param14 = model->addOperand(&type2);
1426   auto param15 = model->addOperand(&type2);
1427   auto param16 = model->addOperand(&type2);
1428   auto param17 = model->addOperand(&type2);
1429   auto layout = model->addOperand(&type0);
1430   auto op41 = model->addOperand(&type26);
1431   // Phase 2, operations
1432   static int32_t param9_init[] = {50};
1433   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1434   static int32_t param10_init[] = {50};
1435   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1436   static int32_t param11_init[] = {50};
1437   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1438   static int32_t param12_init[] = {50};
1439   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1440   static int32_t param13_init[] = {5};
1441   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1442   static int32_t param14_init[] = {5};
1443   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1444   static int32_t param15_init[] = {100};
1445   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1446   static int32_t param16_init[] = {100};
1447   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1448   static int32_t param17_init[] = {0};
1449   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1450   static bool8 layout_init[] = {false};
1451   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1452   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1453   // Phase 3, inputs and outputs
1454   model->identifyInputsAndOutputs(
1455     {op11},
1456     {op41});
1457   assert(model->isValid());
1458 }
1459 
is_ignored_dynamic_output_shape_nhwc_quant8_2(int i)1460 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_2(int i) {
1461   static std::set<int> ignore = {};
1462   return ignore.find(i) != ignore.end();
1463 }
1464 
CreateModel_dynamic_output_shape_nchw_2(Model * model)1465 void CreateModel_dynamic_output_shape_nchw_2(Model *model) {
1466   OperandType type0(Type::BOOL, {});
1467   OperandType type2(Type::INT32, {});
1468   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
1469   OperandType type31(Type::TENSOR_FLOAT32, {5, 3, 52, 60});
1470   // Phase 1, operands
1471   auto op11 = model->addOperand(&type31);
1472   auto param9 = model->addOperand(&type2);
1473   auto param10 = model->addOperand(&type2);
1474   auto param11 = model->addOperand(&type2);
1475   auto param12 = model->addOperand(&type2);
1476   auto param13 = model->addOperand(&type2);
1477   auto param14 = model->addOperand(&type2);
1478   auto param15 = model->addOperand(&type2);
1479   auto param16 = model->addOperand(&type2);
1480   auto param17 = model->addOperand(&type2);
1481   auto layout = model->addOperand(&type0);
1482   auto op41 = model->addOperand(&type24);
1483   // Phase 2, operations
1484   static int32_t param9_init[] = {50};
1485   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1486   static int32_t param10_init[] = {50};
1487   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1488   static int32_t param11_init[] = {50};
1489   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1490   static int32_t param12_init[] = {50};
1491   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1492   static int32_t param13_init[] = {5};
1493   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1494   static int32_t param14_init[] = {5};
1495   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1496   static int32_t param15_init[] = {100};
1497   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1498   static int32_t param16_init[] = {100};
1499   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1500   static int32_t param17_init[] = {0};
1501   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1502   static bool8 layout_init[] = {true};
1503   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1504   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1505   // Phase 3, inputs and outputs
1506   model->identifyInputsAndOutputs(
1507     {op11},
1508     {op41});
1509   assert(model->isValid());
1510 }
1511 
is_ignored_dynamic_output_shape_nchw_2(int i)1512 inline bool is_ignored_dynamic_output_shape_nchw_2(int i) {
1513   static std::set<int> ignore = {};
1514   return ignore.find(i) != ignore.end();
1515 }
1516 
CreateModel_dynamic_output_shape_nchw_relaxed_2(Model * model)1517 void CreateModel_dynamic_output_shape_nchw_relaxed_2(Model *model) {
1518   OperandType type0(Type::BOOL, {});
1519   OperandType type2(Type::INT32, {});
1520   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
1521   OperandType type31(Type::TENSOR_FLOAT32, {5, 3, 52, 60});
1522   // Phase 1, operands
1523   auto op11 = model->addOperand(&type31);
1524   auto param9 = model->addOperand(&type2);
1525   auto param10 = model->addOperand(&type2);
1526   auto param11 = model->addOperand(&type2);
1527   auto param12 = model->addOperand(&type2);
1528   auto param13 = model->addOperand(&type2);
1529   auto param14 = model->addOperand(&type2);
1530   auto param15 = model->addOperand(&type2);
1531   auto param16 = model->addOperand(&type2);
1532   auto param17 = model->addOperand(&type2);
1533   auto layout = model->addOperand(&type0);
1534   auto op41 = model->addOperand(&type24);
1535   // Phase 2, operations
1536   static int32_t param9_init[] = {50};
1537   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1538   static int32_t param10_init[] = {50};
1539   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1540   static int32_t param11_init[] = {50};
1541   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1542   static int32_t param12_init[] = {50};
1543   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1544   static int32_t param13_init[] = {5};
1545   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1546   static int32_t param14_init[] = {5};
1547   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1548   static int32_t param15_init[] = {100};
1549   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1550   static int32_t param16_init[] = {100};
1551   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1552   static int32_t param17_init[] = {0};
1553   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1554   static bool8 layout_init[] = {true};
1555   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1556   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1557   // Phase 3, inputs and outputs
1558   model->identifyInputsAndOutputs(
1559     {op11},
1560     {op41});
1561   // Phase 4: set relaxed execution
1562   model->relaxComputationFloat32toFloat16(true);
1563   assert(model->isValid());
1564 }
1565 
is_ignored_dynamic_output_shape_nchw_relaxed_2(int i)1566 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_2(int i) {
1567   static std::set<int> ignore = {};
1568   return ignore.find(i) != ignore.end();
1569 }
1570 
CreateModel_dynamic_output_shape_nchw_float16_2(Model * model)1571 void CreateModel_dynamic_output_shape_nchw_float16_2(Model *model) {
1572   OperandType type0(Type::BOOL, {});
1573   OperandType type2(Type::INT32, {});
1574   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
1575   OperandType type33(Type::TENSOR_FLOAT16, {5, 3, 52, 60});
1576   // Phase 1, operands
1577   auto op11 = model->addOperand(&type33);
1578   auto param9 = model->addOperand(&type2);
1579   auto param10 = model->addOperand(&type2);
1580   auto param11 = model->addOperand(&type2);
1581   auto param12 = model->addOperand(&type2);
1582   auto param13 = model->addOperand(&type2);
1583   auto param14 = model->addOperand(&type2);
1584   auto param15 = model->addOperand(&type2);
1585   auto param16 = model->addOperand(&type2);
1586   auto param17 = model->addOperand(&type2);
1587   auto layout = model->addOperand(&type0);
1588   auto op41 = model->addOperand(&type25);
1589   // Phase 2, operations
1590   static int32_t param9_init[] = {50};
1591   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1592   static int32_t param10_init[] = {50};
1593   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1594   static int32_t param11_init[] = {50};
1595   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1596   static int32_t param12_init[] = {50};
1597   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1598   static int32_t param13_init[] = {5};
1599   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1600   static int32_t param14_init[] = {5};
1601   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1602   static int32_t param15_init[] = {100};
1603   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1604   static int32_t param16_init[] = {100};
1605   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1606   static int32_t param17_init[] = {0};
1607   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1608   static bool8 layout_init[] = {true};
1609   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1610   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1611   // Phase 3, inputs and outputs
1612   model->identifyInputsAndOutputs(
1613     {op11},
1614     {op41});
1615   assert(model->isValid());
1616 }
1617 
is_ignored_dynamic_output_shape_nchw_float16_2(int i)1618 inline bool is_ignored_dynamic_output_shape_nchw_float16_2(int i) {
1619   static std::set<int> ignore = {};
1620   return ignore.find(i) != ignore.end();
1621 }
1622 
CreateModel_dynamic_output_shape_nchw_quant8_2(Model * model)1623 void CreateModel_dynamic_output_shape_nchw_quant8_2(Model *model) {
1624   OperandType type0(Type::BOOL, {});
1625   OperandType type2(Type::INT32, {});
1626   OperandType type26(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
1627   OperandType type35(Type::TENSOR_QUANT8_ASYMM, {5, 3, 52, 60}, 0.5f, 0);
1628   // Phase 1, operands
1629   auto op11 = model->addOperand(&type35);
1630   auto param9 = model->addOperand(&type2);
1631   auto param10 = model->addOperand(&type2);
1632   auto param11 = model->addOperand(&type2);
1633   auto param12 = model->addOperand(&type2);
1634   auto param13 = model->addOperand(&type2);
1635   auto param14 = model->addOperand(&type2);
1636   auto param15 = model->addOperand(&type2);
1637   auto param16 = model->addOperand(&type2);
1638   auto param17 = model->addOperand(&type2);
1639   auto layout = model->addOperand(&type0);
1640   auto op41 = model->addOperand(&type26);
1641   // Phase 2, operations
1642   static int32_t param9_init[] = {50};
1643   model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1);
1644   static int32_t param10_init[] = {50};
1645   model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1);
1646   static int32_t param11_init[] = {50};
1647   model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1);
1648   static int32_t param12_init[] = {50};
1649   model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1);
1650   static int32_t param13_init[] = {5};
1651   model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1);
1652   static int32_t param14_init[] = {5};
1653   model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1);
1654   static int32_t param15_init[] = {100};
1655   model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1);
1656   static int32_t param16_init[] = {100};
1657   model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1);
1658   static int32_t param17_init[] = {0};
1659   model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1);
1660   static bool8 layout_init[] = {true};
1661   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1662   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op11, param9, param10, param11, param12, param13, param14, param15, param16, param17, layout}, {op41});
1663   // Phase 3, inputs and outputs
1664   model->identifyInputsAndOutputs(
1665     {op11},
1666     {op41});
1667   assert(model->isValid());
1668 }
1669 
is_ignored_dynamic_output_shape_nchw_quant8_2(int i)1670 inline bool is_ignored_dynamic_output_shape_nchw_quant8_2(int i) {
1671   static std::set<int> ignore = {};
1672   return ignore.find(i) != ignore.end();
1673 }
1674 
CreateModel_nhwc_3(Model * model)1675 void CreateModel_nhwc_3(Model *model) {
1676   OperandType type0(Type::BOOL, {});
1677   OperandType type2(Type::INT32, {});
1678   OperandType type5(Type::TENSOR_FLOAT32, {1, 200, 180, 1});
1679   OperandType type6(Type::TENSOR_FLOAT32, {1, 96, 86, 1});
1680   // Phase 1, operands
1681   auto op12 = model->addOperand(&type5);
1682   auto param18 = model->addOperand(&type2);
1683   auto param19 = model->addOperand(&type2);
1684   auto param20 = model->addOperand(&type2);
1685   auto param21 = model->addOperand(&type2);
1686   auto param22 = model->addOperand(&type2);
1687   auto param23 = model->addOperand(&type2);
1688   auto param24 = model->addOperand(&type2);
1689   auto param25 = model->addOperand(&type2);
1690   auto param26 = model->addOperand(&type2);
1691   auto layout = model->addOperand(&type0);
1692   auto op42 = model->addOperand(&type6);
1693   // Phase 2, operations
1694   static int32_t param18_init[] = {0};
1695   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1696   static int32_t param19_init[] = {0};
1697   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1698   static int32_t param20_init[] = {0};
1699   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1700   static int32_t param21_init[] = {0};
1701   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1702   static int32_t param22_init[] = {2};
1703   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1704   static int32_t param23_init[] = {2};
1705   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1706   static int32_t param24_init[] = {10};
1707   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1708   static int32_t param25_init[] = {10};
1709   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1710   static int32_t param26_init[] = {0};
1711   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1712   static bool8 layout_init[] = {false};
1713   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1714   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1715   // Phase 3, inputs and outputs
1716   model->identifyInputsAndOutputs(
1717     {op12},
1718     {op42});
1719   assert(model->isValid());
1720 }
1721 
is_ignored_nhwc_3(int i)1722 inline bool is_ignored_nhwc_3(int i) {
1723   static std::set<int> ignore = {};
1724   return ignore.find(i) != ignore.end();
1725 }
1726 
CreateModel_nhwc_relaxed_3(Model * model)1727 void CreateModel_nhwc_relaxed_3(Model *model) {
1728   OperandType type0(Type::BOOL, {});
1729   OperandType type2(Type::INT32, {});
1730   OperandType type5(Type::TENSOR_FLOAT32, {1, 200, 180, 1});
1731   OperandType type6(Type::TENSOR_FLOAT32, {1, 96, 86, 1});
1732   // Phase 1, operands
1733   auto op12 = model->addOperand(&type5);
1734   auto param18 = model->addOperand(&type2);
1735   auto param19 = model->addOperand(&type2);
1736   auto param20 = model->addOperand(&type2);
1737   auto param21 = model->addOperand(&type2);
1738   auto param22 = model->addOperand(&type2);
1739   auto param23 = model->addOperand(&type2);
1740   auto param24 = model->addOperand(&type2);
1741   auto param25 = model->addOperand(&type2);
1742   auto param26 = model->addOperand(&type2);
1743   auto layout = model->addOperand(&type0);
1744   auto op42 = model->addOperand(&type6);
1745   // Phase 2, operations
1746   static int32_t param18_init[] = {0};
1747   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1748   static int32_t param19_init[] = {0};
1749   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1750   static int32_t param20_init[] = {0};
1751   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1752   static int32_t param21_init[] = {0};
1753   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1754   static int32_t param22_init[] = {2};
1755   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1756   static int32_t param23_init[] = {2};
1757   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1758   static int32_t param24_init[] = {10};
1759   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1760   static int32_t param25_init[] = {10};
1761   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1762   static int32_t param26_init[] = {0};
1763   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1764   static bool8 layout_init[] = {false};
1765   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1766   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1767   // Phase 3, inputs and outputs
1768   model->identifyInputsAndOutputs(
1769     {op12},
1770     {op42});
1771   // Phase 4: set relaxed execution
1772   model->relaxComputationFloat32toFloat16(true);
1773   assert(model->isValid());
1774 }
1775 
is_ignored_nhwc_relaxed_3(int i)1776 inline bool is_ignored_nhwc_relaxed_3(int i) {
1777   static std::set<int> ignore = {};
1778   return ignore.find(i) != ignore.end();
1779 }
1780 
CreateModel_nhwc_float16_3(Model * model)1781 void CreateModel_nhwc_float16_3(Model *model) {
1782   OperandType type0(Type::BOOL, {});
1783   OperandType type2(Type::INT32, {});
1784   OperandType type37(Type::TENSOR_FLOAT16, {1, 200, 180, 1});
1785   OperandType type38(Type::TENSOR_FLOAT16, {1, 96, 86, 1});
1786   // Phase 1, operands
1787   auto op12 = model->addOperand(&type37);
1788   auto param18 = model->addOperand(&type2);
1789   auto param19 = model->addOperand(&type2);
1790   auto param20 = model->addOperand(&type2);
1791   auto param21 = model->addOperand(&type2);
1792   auto param22 = model->addOperand(&type2);
1793   auto param23 = model->addOperand(&type2);
1794   auto param24 = model->addOperand(&type2);
1795   auto param25 = model->addOperand(&type2);
1796   auto param26 = model->addOperand(&type2);
1797   auto layout = model->addOperand(&type0);
1798   auto op42 = model->addOperand(&type38);
1799   // Phase 2, operations
1800   static int32_t param18_init[] = {0};
1801   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1802   static int32_t param19_init[] = {0};
1803   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1804   static int32_t param20_init[] = {0};
1805   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1806   static int32_t param21_init[] = {0};
1807   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1808   static int32_t param22_init[] = {2};
1809   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1810   static int32_t param23_init[] = {2};
1811   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1812   static int32_t param24_init[] = {10};
1813   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1814   static int32_t param25_init[] = {10};
1815   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1816   static int32_t param26_init[] = {0};
1817   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1818   static bool8 layout_init[] = {false};
1819   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1820   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1821   // Phase 3, inputs and outputs
1822   model->identifyInputsAndOutputs(
1823     {op12},
1824     {op42});
1825   assert(model->isValid());
1826 }
1827 
is_ignored_nhwc_float16_3(int i)1828 inline bool is_ignored_nhwc_float16_3(int i) {
1829   static std::set<int> ignore = {};
1830   return ignore.find(i) != ignore.end();
1831 }
1832 
CreateModel_nhwc_quant8_3(Model * model)1833 void CreateModel_nhwc_quant8_3(Model *model) {
1834   OperandType type0(Type::BOOL, {});
1835   OperandType type2(Type::INT32, {});
1836   OperandType type39(Type::TENSOR_QUANT8_ASYMM, {1, 200, 180, 1}, 0.25f, 0);
1837   OperandType type40(Type::TENSOR_QUANT8_ASYMM, {1, 96, 86, 1}, 0.25f, 0);
1838   // Phase 1, operands
1839   auto op12 = model->addOperand(&type39);
1840   auto param18 = model->addOperand(&type2);
1841   auto param19 = model->addOperand(&type2);
1842   auto param20 = model->addOperand(&type2);
1843   auto param21 = model->addOperand(&type2);
1844   auto param22 = model->addOperand(&type2);
1845   auto param23 = model->addOperand(&type2);
1846   auto param24 = model->addOperand(&type2);
1847   auto param25 = model->addOperand(&type2);
1848   auto param26 = model->addOperand(&type2);
1849   auto layout = model->addOperand(&type0);
1850   auto op42 = model->addOperand(&type40);
1851   // Phase 2, operations
1852   static int32_t param18_init[] = {0};
1853   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1854   static int32_t param19_init[] = {0};
1855   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1856   static int32_t param20_init[] = {0};
1857   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1858   static int32_t param21_init[] = {0};
1859   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1860   static int32_t param22_init[] = {2};
1861   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1862   static int32_t param23_init[] = {2};
1863   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1864   static int32_t param24_init[] = {10};
1865   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1866   static int32_t param25_init[] = {10};
1867   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1868   static int32_t param26_init[] = {0};
1869   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1870   static bool8 layout_init[] = {false};
1871   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1872   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1873   // Phase 3, inputs and outputs
1874   model->identifyInputsAndOutputs(
1875     {op12},
1876     {op42});
1877   assert(model->isValid());
1878 }
1879 
is_ignored_nhwc_quant8_3(int i)1880 inline bool is_ignored_nhwc_quant8_3(int i) {
1881   static std::set<int> ignore = {};
1882   return ignore.find(i) != ignore.end();
1883 }
1884 
CreateModel_nchw_3(Model * model)1885 void CreateModel_nchw_3(Model *model) {
1886   OperandType type0(Type::BOOL, {});
1887   OperandType type2(Type::INT32, {});
1888   OperandType type41(Type::TENSOR_FLOAT32, {1, 1, 200, 180});
1889   OperandType type42(Type::TENSOR_FLOAT32, {1, 1, 96, 86});
1890   // Phase 1, operands
1891   auto op12 = model->addOperand(&type41);
1892   auto param18 = model->addOperand(&type2);
1893   auto param19 = model->addOperand(&type2);
1894   auto param20 = model->addOperand(&type2);
1895   auto param21 = model->addOperand(&type2);
1896   auto param22 = model->addOperand(&type2);
1897   auto param23 = model->addOperand(&type2);
1898   auto param24 = model->addOperand(&type2);
1899   auto param25 = model->addOperand(&type2);
1900   auto param26 = model->addOperand(&type2);
1901   auto layout = model->addOperand(&type0);
1902   auto op42 = model->addOperand(&type42);
1903   // Phase 2, operations
1904   static int32_t param18_init[] = {0};
1905   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1906   static int32_t param19_init[] = {0};
1907   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1908   static int32_t param20_init[] = {0};
1909   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1910   static int32_t param21_init[] = {0};
1911   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1912   static int32_t param22_init[] = {2};
1913   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1914   static int32_t param23_init[] = {2};
1915   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1916   static int32_t param24_init[] = {10};
1917   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1918   static int32_t param25_init[] = {10};
1919   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1920   static int32_t param26_init[] = {0};
1921   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1922   static bool8 layout_init[] = {true};
1923   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1924   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1925   // Phase 3, inputs and outputs
1926   model->identifyInputsAndOutputs(
1927     {op12},
1928     {op42});
1929   assert(model->isValid());
1930 }
1931 
is_ignored_nchw_3(int i)1932 inline bool is_ignored_nchw_3(int i) {
1933   static std::set<int> ignore = {};
1934   return ignore.find(i) != ignore.end();
1935 }
1936 
CreateModel_nchw_relaxed_3(Model * model)1937 void CreateModel_nchw_relaxed_3(Model *model) {
1938   OperandType type0(Type::BOOL, {});
1939   OperandType type2(Type::INT32, {});
1940   OperandType type41(Type::TENSOR_FLOAT32, {1, 1, 200, 180});
1941   OperandType type42(Type::TENSOR_FLOAT32, {1, 1, 96, 86});
1942   // Phase 1, operands
1943   auto op12 = model->addOperand(&type41);
1944   auto param18 = model->addOperand(&type2);
1945   auto param19 = model->addOperand(&type2);
1946   auto param20 = model->addOperand(&type2);
1947   auto param21 = model->addOperand(&type2);
1948   auto param22 = model->addOperand(&type2);
1949   auto param23 = model->addOperand(&type2);
1950   auto param24 = model->addOperand(&type2);
1951   auto param25 = model->addOperand(&type2);
1952   auto param26 = model->addOperand(&type2);
1953   auto layout = model->addOperand(&type0);
1954   auto op42 = model->addOperand(&type42);
1955   // Phase 2, operations
1956   static int32_t param18_init[] = {0};
1957   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
1958   static int32_t param19_init[] = {0};
1959   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
1960   static int32_t param20_init[] = {0};
1961   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
1962   static int32_t param21_init[] = {0};
1963   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
1964   static int32_t param22_init[] = {2};
1965   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
1966   static int32_t param23_init[] = {2};
1967   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
1968   static int32_t param24_init[] = {10};
1969   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
1970   static int32_t param25_init[] = {10};
1971   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
1972   static int32_t param26_init[] = {0};
1973   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
1974   static bool8 layout_init[] = {true};
1975   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
1976   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
1977   // Phase 3, inputs and outputs
1978   model->identifyInputsAndOutputs(
1979     {op12},
1980     {op42});
1981   // Phase 4: set relaxed execution
1982   model->relaxComputationFloat32toFloat16(true);
1983   assert(model->isValid());
1984 }
1985 
is_ignored_nchw_relaxed_3(int i)1986 inline bool is_ignored_nchw_relaxed_3(int i) {
1987   static std::set<int> ignore = {};
1988   return ignore.find(i) != ignore.end();
1989 }
1990 
CreateModel_nchw_float16_3(Model * model)1991 void CreateModel_nchw_float16_3(Model *model) {
1992   OperandType type0(Type::BOOL, {});
1993   OperandType type2(Type::INT32, {});
1994   OperandType type43(Type::TENSOR_FLOAT16, {1, 1, 200, 180});
1995   OperandType type44(Type::TENSOR_FLOAT16, {1, 1, 96, 86});
1996   // Phase 1, operands
1997   auto op12 = model->addOperand(&type43);
1998   auto param18 = model->addOperand(&type2);
1999   auto param19 = model->addOperand(&type2);
2000   auto param20 = model->addOperand(&type2);
2001   auto param21 = model->addOperand(&type2);
2002   auto param22 = model->addOperand(&type2);
2003   auto param23 = model->addOperand(&type2);
2004   auto param24 = model->addOperand(&type2);
2005   auto param25 = model->addOperand(&type2);
2006   auto param26 = model->addOperand(&type2);
2007   auto layout = model->addOperand(&type0);
2008   auto op42 = model->addOperand(&type44);
2009   // Phase 2, operations
2010   static int32_t param18_init[] = {0};
2011   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2012   static int32_t param19_init[] = {0};
2013   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2014   static int32_t param20_init[] = {0};
2015   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2016   static int32_t param21_init[] = {0};
2017   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2018   static int32_t param22_init[] = {2};
2019   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2020   static int32_t param23_init[] = {2};
2021   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2022   static int32_t param24_init[] = {10};
2023   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2024   static int32_t param25_init[] = {10};
2025   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2026   static int32_t param26_init[] = {0};
2027   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2028   static bool8 layout_init[] = {true};
2029   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2030   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2031   // Phase 3, inputs and outputs
2032   model->identifyInputsAndOutputs(
2033     {op12},
2034     {op42});
2035   assert(model->isValid());
2036 }
2037 
is_ignored_nchw_float16_3(int i)2038 inline bool is_ignored_nchw_float16_3(int i) {
2039   static std::set<int> ignore = {};
2040   return ignore.find(i) != ignore.end();
2041 }
2042 
CreateModel_nchw_quant8_3(Model * model)2043 void CreateModel_nchw_quant8_3(Model *model) {
2044   OperandType type0(Type::BOOL, {});
2045   OperandType type2(Type::INT32, {});
2046   OperandType type45(Type::TENSOR_QUANT8_ASYMM, {1, 1, 200, 180}, 0.25f, 0);
2047   OperandType type46(Type::TENSOR_QUANT8_ASYMM, {1, 1, 96, 86}, 0.25f, 0);
2048   // Phase 1, operands
2049   auto op12 = model->addOperand(&type45);
2050   auto param18 = model->addOperand(&type2);
2051   auto param19 = model->addOperand(&type2);
2052   auto param20 = model->addOperand(&type2);
2053   auto param21 = model->addOperand(&type2);
2054   auto param22 = model->addOperand(&type2);
2055   auto param23 = model->addOperand(&type2);
2056   auto param24 = model->addOperand(&type2);
2057   auto param25 = model->addOperand(&type2);
2058   auto param26 = model->addOperand(&type2);
2059   auto layout = model->addOperand(&type0);
2060   auto op42 = model->addOperand(&type46);
2061   // Phase 2, operations
2062   static int32_t param18_init[] = {0};
2063   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2064   static int32_t param19_init[] = {0};
2065   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2066   static int32_t param20_init[] = {0};
2067   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2068   static int32_t param21_init[] = {0};
2069   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2070   static int32_t param22_init[] = {2};
2071   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2072   static int32_t param23_init[] = {2};
2073   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2074   static int32_t param24_init[] = {10};
2075   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2076   static int32_t param25_init[] = {10};
2077   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2078   static int32_t param26_init[] = {0};
2079   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2080   static bool8 layout_init[] = {true};
2081   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2082   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2083   // Phase 3, inputs and outputs
2084   model->identifyInputsAndOutputs(
2085     {op12},
2086     {op42});
2087   assert(model->isValid());
2088 }
2089 
is_ignored_nchw_quant8_3(int i)2090 inline bool is_ignored_nchw_quant8_3(int i) {
2091   static std::set<int> ignore = {};
2092   return ignore.find(i) != ignore.end();
2093 }
2094 
CreateModel_dynamic_output_shape_nhwc_3(Model * model)2095 void CreateModel_dynamic_output_shape_nhwc_3(Model *model) {
2096   OperandType type0(Type::BOOL, {});
2097   OperandType type2(Type::INT32, {});
2098   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2099   OperandType type5(Type::TENSOR_FLOAT32, {1, 200, 180, 1});
2100   // Phase 1, operands
2101   auto op12 = model->addOperand(&type5);
2102   auto param18 = model->addOperand(&type2);
2103   auto param19 = model->addOperand(&type2);
2104   auto param20 = model->addOperand(&type2);
2105   auto param21 = model->addOperand(&type2);
2106   auto param22 = model->addOperand(&type2);
2107   auto param23 = model->addOperand(&type2);
2108   auto param24 = model->addOperand(&type2);
2109   auto param25 = model->addOperand(&type2);
2110   auto param26 = model->addOperand(&type2);
2111   auto layout = model->addOperand(&type0);
2112   auto op42 = model->addOperand(&type24);
2113   // Phase 2, operations
2114   static int32_t param18_init[] = {0};
2115   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2116   static int32_t param19_init[] = {0};
2117   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2118   static int32_t param20_init[] = {0};
2119   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2120   static int32_t param21_init[] = {0};
2121   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2122   static int32_t param22_init[] = {2};
2123   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2124   static int32_t param23_init[] = {2};
2125   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2126   static int32_t param24_init[] = {10};
2127   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2128   static int32_t param25_init[] = {10};
2129   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2130   static int32_t param26_init[] = {0};
2131   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2132   static bool8 layout_init[] = {false};
2133   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2134   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2135   // Phase 3, inputs and outputs
2136   model->identifyInputsAndOutputs(
2137     {op12},
2138     {op42});
2139   assert(model->isValid());
2140 }
2141 
is_ignored_dynamic_output_shape_nhwc_3(int i)2142 inline bool is_ignored_dynamic_output_shape_nhwc_3(int i) {
2143   static std::set<int> ignore = {};
2144   return ignore.find(i) != ignore.end();
2145 }
2146 
CreateModel_dynamic_output_shape_nhwc_relaxed_3(Model * model)2147 void CreateModel_dynamic_output_shape_nhwc_relaxed_3(Model *model) {
2148   OperandType type0(Type::BOOL, {});
2149   OperandType type2(Type::INT32, {});
2150   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2151   OperandType type5(Type::TENSOR_FLOAT32, {1, 200, 180, 1});
2152   // Phase 1, operands
2153   auto op12 = model->addOperand(&type5);
2154   auto param18 = model->addOperand(&type2);
2155   auto param19 = model->addOperand(&type2);
2156   auto param20 = model->addOperand(&type2);
2157   auto param21 = model->addOperand(&type2);
2158   auto param22 = model->addOperand(&type2);
2159   auto param23 = model->addOperand(&type2);
2160   auto param24 = model->addOperand(&type2);
2161   auto param25 = model->addOperand(&type2);
2162   auto param26 = model->addOperand(&type2);
2163   auto layout = model->addOperand(&type0);
2164   auto op42 = model->addOperand(&type24);
2165   // Phase 2, operations
2166   static int32_t param18_init[] = {0};
2167   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2168   static int32_t param19_init[] = {0};
2169   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2170   static int32_t param20_init[] = {0};
2171   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2172   static int32_t param21_init[] = {0};
2173   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2174   static int32_t param22_init[] = {2};
2175   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2176   static int32_t param23_init[] = {2};
2177   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2178   static int32_t param24_init[] = {10};
2179   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2180   static int32_t param25_init[] = {10};
2181   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2182   static int32_t param26_init[] = {0};
2183   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2184   static bool8 layout_init[] = {false};
2185   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2186   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2187   // Phase 3, inputs and outputs
2188   model->identifyInputsAndOutputs(
2189     {op12},
2190     {op42});
2191   // Phase 4: set relaxed execution
2192   model->relaxComputationFloat32toFloat16(true);
2193   assert(model->isValid());
2194 }
2195 
is_ignored_dynamic_output_shape_nhwc_relaxed_3(int i)2196 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_3(int i) {
2197   static std::set<int> ignore = {};
2198   return ignore.find(i) != ignore.end();
2199 }
2200 
CreateModel_dynamic_output_shape_nhwc_float16_3(Model * model)2201 void CreateModel_dynamic_output_shape_nhwc_float16_3(Model *model) {
2202   OperandType type0(Type::BOOL, {});
2203   OperandType type2(Type::INT32, {});
2204   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
2205   OperandType type37(Type::TENSOR_FLOAT16, {1, 200, 180, 1});
2206   // Phase 1, operands
2207   auto op12 = model->addOperand(&type37);
2208   auto param18 = model->addOperand(&type2);
2209   auto param19 = model->addOperand(&type2);
2210   auto param20 = model->addOperand(&type2);
2211   auto param21 = model->addOperand(&type2);
2212   auto param22 = model->addOperand(&type2);
2213   auto param23 = model->addOperand(&type2);
2214   auto param24 = model->addOperand(&type2);
2215   auto param25 = model->addOperand(&type2);
2216   auto param26 = model->addOperand(&type2);
2217   auto layout = model->addOperand(&type0);
2218   auto op42 = model->addOperand(&type25);
2219   // Phase 2, operations
2220   static int32_t param18_init[] = {0};
2221   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2222   static int32_t param19_init[] = {0};
2223   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2224   static int32_t param20_init[] = {0};
2225   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2226   static int32_t param21_init[] = {0};
2227   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2228   static int32_t param22_init[] = {2};
2229   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2230   static int32_t param23_init[] = {2};
2231   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2232   static int32_t param24_init[] = {10};
2233   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2234   static int32_t param25_init[] = {10};
2235   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2236   static int32_t param26_init[] = {0};
2237   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2238   static bool8 layout_init[] = {false};
2239   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2240   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2241   // Phase 3, inputs and outputs
2242   model->identifyInputsAndOutputs(
2243     {op12},
2244     {op42});
2245   assert(model->isValid());
2246 }
2247 
is_ignored_dynamic_output_shape_nhwc_float16_3(int i)2248 inline bool is_ignored_dynamic_output_shape_nhwc_float16_3(int i) {
2249   static std::set<int> ignore = {};
2250   return ignore.find(i) != ignore.end();
2251 }
2252 
CreateModel_dynamic_output_shape_nhwc_quant8_3(Model * model)2253 void CreateModel_dynamic_output_shape_nhwc_quant8_3(Model *model) {
2254   OperandType type0(Type::BOOL, {});
2255   OperandType type2(Type::INT32, {});
2256   OperandType type39(Type::TENSOR_QUANT8_ASYMM, {1, 200, 180, 1}, 0.25f, 0);
2257   OperandType type47(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.25f, 0);
2258   // Phase 1, operands
2259   auto op12 = model->addOperand(&type39);
2260   auto param18 = model->addOperand(&type2);
2261   auto param19 = model->addOperand(&type2);
2262   auto param20 = model->addOperand(&type2);
2263   auto param21 = model->addOperand(&type2);
2264   auto param22 = model->addOperand(&type2);
2265   auto param23 = model->addOperand(&type2);
2266   auto param24 = model->addOperand(&type2);
2267   auto param25 = model->addOperand(&type2);
2268   auto param26 = model->addOperand(&type2);
2269   auto layout = model->addOperand(&type0);
2270   auto op42 = model->addOperand(&type47);
2271   // Phase 2, operations
2272   static int32_t param18_init[] = {0};
2273   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2274   static int32_t param19_init[] = {0};
2275   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2276   static int32_t param20_init[] = {0};
2277   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2278   static int32_t param21_init[] = {0};
2279   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2280   static int32_t param22_init[] = {2};
2281   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2282   static int32_t param23_init[] = {2};
2283   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2284   static int32_t param24_init[] = {10};
2285   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2286   static int32_t param25_init[] = {10};
2287   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2288   static int32_t param26_init[] = {0};
2289   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2290   static bool8 layout_init[] = {false};
2291   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2292   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2293   // Phase 3, inputs and outputs
2294   model->identifyInputsAndOutputs(
2295     {op12},
2296     {op42});
2297   assert(model->isValid());
2298 }
2299 
is_ignored_dynamic_output_shape_nhwc_quant8_3(int i)2300 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_3(int i) {
2301   static std::set<int> ignore = {};
2302   return ignore.find(i) != ignore.end();
2303 }
2304 
CreateModel_dynamic_output_shape_nchw_3(Model * model)2305 void CreateModel_dynamic_output_shape_nchw_3(Model *model) {
2306   OperandType type0(Type::BOOL, {});
2307   OperandType type2(Type::INT32, {});
2308   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2309   OperandType type41(Type::TENSOR_FLOAT32, {1, 1, 200, 180});
2310   // Phase 1, operands
2311   auto op12 = model->addOperand(&type41);
2312   auto param18 = model->addOperand(&type2);
2313   auto param19 = model->addOperand(&type2);
2314   auto param20 = model->addOperand(&type2);
2315   auto param21 = model->addOperand(&type2);
2316   auto param22 = model->addOperand(&type2);
2317   auto param23 = model->addOperand(&type2);
2318   auto param24 = model->addOperand(&type2);
2319   auto param25 = model->addOperand(&type2);
2320   auto param26 = model->addOperand(&type2);
2321   auto layout = model->addOperand(&type0);
2322   auto op42 = model->addOperand(&type24);
2323   // Phase 2, operations
2324   static int32_t param18_init[] = {0};
2325   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2326   static int32_t param19_init[] = {0};
2327   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2328   static int32_t param20_init[] = {0};
2329   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2330   static int32_t param21_init[] = {0};
2331   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2332   static int32_t param22_init[] = {2};
2333   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2334   static int32_t param23_init[] = {2};
2335   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2336   static int32_t param24_init[] = {10};
2337   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2338   static int32_t param25_init[] = {10};
2339   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2340   static int32_t param26_init[] = {0};
2341   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2342   static bool8 layout_init[] = {true};
2343   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2344   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2345   // Phase 3, inputs and outputs
2346   model->identifyInputsAndOutputs(
2347     {op12},
2348     {op42});
2349   assert(model->isValid());
2350 }
2351 
is_ignored_dynamic_output_shape_nchw_3(int i)2352 inline bool is_ignored_dynamic_output_shape_nchw_3(int i) {
2353   static std::set<int> ignore = {};
2354   return ignore.find(i) != ignore.end();
2355 }
2356 
CreateModel_dynamic_output_shape_nchw_relaxed_3(Model * model)2357 void CreateModel_dynamic_output_shape_nchw_relaxed_3(Model *model) {
2358   OperandType type0(Type::BOOL, {});
2359   OperandType type2(Type::INT32, {});
2360   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2361   OperandType type41(Type::TENSOR_FLOAT32, {1, 1, 200, 180});
2362   // Phase 1, operands
2363   auto op12 = model->addOperand(&type41);
2364   auto param18 = model->addOperand(&type2);
2365   auto param19 = model->addOperand(&type2);
2366   auto param20 = model->addOperand(&type2);
2367   auto param21 = model->addOperand(&type2);
2368   auto param22 = model->addOperand(&type2);
2369   auto param23 = model->addOperand(&type2);
2370   auto param24 = model->addOperand(&type2);
2371   auto param25 = model->addOperand(&type2);
2372   auto param26 = model->addOperand(&type2);
2373   auto layout = model->addOperand(&type0);
2374   auto op42 = model->addOperand(&type24);
2375   // Phase 2, operations
2376   static int32_t param18_init[] = {0};
2377   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2378   static int32_t param19_init[] = {0};
2379   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2380   static int32_t param20_init[] = {0};
2381   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2382   static int32_t param21_init[] = {0};
2383   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2384   static int32_t param22_init[] = {2};
2385   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2386   static int32_t param23_init[] = {2};
2387   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2388   static int32_t param24_init[] = {10};
2389   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2390   static int32_t param25_init[] = {10};
2391   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2392   static int32_t param26_init[] = {0};
2393   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2394   static bool8 layout_init[] = {true};
2395   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2396   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2397   // Phase 3, inputs and outputs
2398   model->identifyInputsAndOutputs(
2399     {op12},
2400     {op42});
2401   // Phase 4: set relaxed execution
2402   model->relaxComputationFloat32toFloat16(true);
2403   assert(model->isValid());
2404 }
2405 
is_ignored_dynamic_output_shape_nchw_relaxed_3(int i)2406 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_3(int i) {
2407   static std::set<int> ignore = {};
2408   return ignore.find(i) != ignore.end();
2409 }
2410 
CreateModel_dynamic_output_shape_nchw_float16_3(Model * model)2411 void CreateModel_dynamic_output_shape_nchw_float16_3(Model *model) {
2412   OperandType type0(Type::BOOL, {});
2413   OperandType type2(Type::INT32, {});
2414   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
2415   OperandType type43(Type::TENSOR_FLOAT16, {1, 1, 200, 180});
2416   // Phase 1, operands
2417   auto op12 = model->addOperand(&type43);
2418   auto param18 = model->addOperand(&type2);
2419   auto param19 = model->addOperand(&type2);
2420   auto param20 = model->addOperand(&type2);
2421   auto param21 = model->addOperand(&type2);
2422   auto param22 = model->addOperand(&type2);
2423   auto param23 = model->addOperand(&type2);
2424   auto param24 = model->addOperand(&type2);
2425   auto param25 = model->addOperand(&type2);
2426   auto param26 = model->addOperand(&type2);
2427   auto layout = model->addOperand(&type0);
2428   auto op42 = model->addOperand(&type25);
2429   // Phase 2, operations
2430   static int32_t param18_init[] = {0};
2431   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2432   static int32_t param19_init[] = {0};
2433   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2434   static int32_t param20_init[] = {0};
2435   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2436   static int32_t param21_init[] = {0};
2437   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2438   static int32_t param22_init[] = {2};
2439   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2440   static int32_t param23_init[] = {2};
2441   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2442   static int32_t param24_init[] = {10};
2443   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2444   static int32_t param25_init[] = {10};
2445   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2446   static int32_t param26_init[] = {0};
2447   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2448   static bool8 layout_init[] = {true};
2449   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2450   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2451   // Phase 3, inputs and outputs
2452   model->identifyInputsAndOutputs(
2453     {op12},
2454     {op42});
2455   assert(model->isValid());
2456 }
2457 
is_ignored_dynamic_output_shape_nchw_float16_3(int i)2458 inline bool is_ignored_dynamic_output_shape_nchw_float16_3(int i) {
2459   static std::set<int> ignore = {};
2460   return ignore.find(i) != ignore.end();
2461 }
2462 
CreateModel_dynamic_output_shape_nchw_quant8_3(Model * model)2463 void CreateModel_dynamic_output_shape_nchw_quant8_3(Model *model) {
2464   OperandType type0(Type::BOOL, {});
2465   OperandType type2(Type::INT32, {});
2466   OperandType type45(Type::TENSOR_QUANT8_ASYMM, {1, 1, 200, 180}, 0.25f, 0);
2467   OperandType type47(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.25f, 0);
2468   // Phase 1, operands
2469   auto op12 = model->addOperand(&type45);
2470   auto param18 = model->addOperand(&type2);
2471   auto param19 = model->addOperand(&type2);
2472   auto param20 = model->addOperand(&type2);
2473   auto param21 = model->addOperand(&type2);
2474   auto param22 = model->addOperand(&type2);
2475   auto param23 = model->addOperand(&type2);
2476   auto param24 = model->addOperand(&type2);
2477   auto param25 = model->addOperand(&type2);
2478   auto param26 = model->addOperand(&type2);
2479   auto layout = model->addOperand(&type0);
2480   auto op42 = model->addOperand(&type47);
2481   // Phase 2, operations
2482   static int32_t param18_init[] = {0};
2483   model->setOperandValue(param18, param18_init, sizeof(int32_t) * 1);
2484   static int32_t param19_init[] = {0};
2485   model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1);
2486   static int32_t param20_init[] = {0};
2487   model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1);
2488   static int32_t param21_init[] = {0};
2489   model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1);
2490   static int32_t param22_init[] = {2};
2491   model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1);
2492   static int32_t param23_init[] = {2};
2493   model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1);
2494   static int32_t param24_init[] = {10};
2495   model->setOperandValue(param24, param24_init, sizeof(int32_t) * 1);
2496   static int32_t param25_init[] = {10};
2497   model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1);
2498   static int32_t param26_init[] = {0};
2499   model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1);
2500   static bool8 layout_init[] = {true};
2501   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2502   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op12, param18, param19, param20, param21, param22, param23, param24, param25, param26, layout}, {op42});
2503   // Phase 3, inputs and outputs
2504   model->identifyInputsAndOutputs(
2505     {op12},
2506     {op42});
2507   assert(model->isValid());
2508 }
2509 
is_ignored_dynamic_output_shape_nchw_quant8_3(int i)2510 inline bool is_ignored_dynamic_output_shape_nchw_quant8_3(int i) {
2511   static std::set<int> ignore = {};
2512   return ignore.find(i) != ignore.end();
2513 }
2514 
CreateModel_nhwc_4(Model * model)2515 void CreateModel_nhwc_4(Model *model) {
2516   OperandType type0(Type::BOOL, {});
2517   OperandType type2(Type::INT32, {});
2518   OperandType type3(Type::TENSOR_FLOAT32, {5, 52, 60, 3});
2519   OperandType type4(Type::TENSOR_FLOAT32, {5, 11, 13, 3});
2520   // Phase 1, operands
2521   auto op13 = model->addOperand(&type3);
2522   auto param27 = model->addOperand(&type2);
2523   auto param28 = model->addOperand(&type2);
2524   auto param29 = model->addOperand(&type2);
2525   auto param30 = model->addOperand(&type2);
2526   auto param31 = model->addOperand(&type2);
2527   auto param32 = model->addOperand(&type2);
2528   auto param33 = model->addOperand(&type2);
2529   auto param34 = model->addOperand(&type2);
2530   auto param35 = model->addOperand(&type2);
2531   auto layout = model->addOperand(&type0);
2532   auto op43 = model->addOperand(&type4);
2533   // Phase 2, operations
2534   static int32_t param27_init[] = {50};
2535   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2536   static int32_t param28_init[] = {50};
2537   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2538   static int32_t param29_init[] = {50};
2539   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2540   static int32_t param30_init[] = {50};
2541   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2542   static int32_t param31_init[] = {5};
2543   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2544   static int32_t param32_init[] = {5};
2545   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2546   static int32_t param33_init[] = {100};
2547   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
2548   static int32_t param34_init[] = {100};
2549   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
2550   static int32_t param35_init[] = {3};
2551   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
2552   static bool8 layout_init[] = {false};
2553   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2554   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
2555   // Phase 3, inputs and outputs
2556   model->identifyInputsAndOutputs(
2557     {op13},
2558     {op43});
2559   assert(model->isValid());
2560 }
2561 
is_ignored_nhwc_4(int i)2562 inline bool is_ignored_nhwc_4(int i) {
2563   static std::set<int> ignore = {};
2564   return ignore.find(i) != ignore.end();
2565 }
2566 
CreateModel_nhwc_relaxed_4(Model * model)2567 void CreateModel_nhwc_relaxed_4(Model *model) {
2568   OperandType type0(Type::BOOL, {});
2569   OperandType type2(Type::INT32, {});
2570   OperandType type3(Type::TENSOR_FLOAT32, {5, 52, 60, 3});
2571   OperandType type4(Type::TENSOR_FLOAT32, {5, 11, 13, 3});
2572   // Phase 1, operands
2573   auto op13 = model->addOperand(&type3);
2574   auto param27 = model->addOperand(&type2);
2575   auto param28 = model->addOperand(&type2);
2576   auto param29 = model->addOperand(&type2);
2577   auto param30 = model->addOperand(&type2);
2578   auto param31 = model->addOperand(&type2);
2579   auto param32 = model->addOperand(&type2);
2580   auto param33 = model->addOperand(&type2);
2581   auto param34 = model->addOperand(&type2);
2582   auto param35 = model->addOperand(&type2);
2583   auto layout = model->addOperand(&type0);
2584   auto op43 = model->addOperand(&type4);
2585   // Phase 2, operations
2586   static int32_t param27_init[] = {50};
2587   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2588   static int32_t param28_init[] = {50};
2589   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2590   static int32_t param29_init[] = {50};
2591   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2592   static int32_t param30_init[] = {50};
2593   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2594   static int32_t param31_init[] = {5};
2595   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2596   static int32_t param32_init[] = {5};
2597   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2598   static int32_t param33_init[] = {100};
2599   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
2600   static int32_t param34_init[] = {100};
2601   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
2602   static int32_t param35_init[] = {3};
2603   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
2604   static bool8 layout_init[] = {false};
2605   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2606   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
2607   // Phase 3, inputs and outputs
2608   model->identifyInputsAndOutputs(
2609     {op13},
2610     {op43});
2611   // Phase 4: set relaxed execution
2612   model->relaxComputationFloat32toFloat16(true);
2613   assert(model->isValid());
2614 }
2615 
is_ignored_nhwc_relaxed_4(int i)2616 inline bool is_ignored_nhwc_relaxed_4(int i) {
2617   static std::set<int> ignore = {};
2618   return ignore.find(i) != ignore.end();
2619 }
2620 
CreateModel_nhwc_float16_4(Model * model)2621 void CreateModel_nhwc_float16_4(Model *model) {
2622   OperandType type0(Type::BOOL, {});
2623   OperandType type2(Type::INT32, {});
2624   OperandType type27(Type::TENSOR_FLOAT16, {5, 52, 60, 3});
2625   OperandType type28(Type::TENSOR_FLOAT16, {5, 11, 13, 3});
2626   // Phase 1, operands
2627   auto op13 = model->addOperand(&type27);
2628   auto param27 = model->addOperand(&type2);
2629   auto param28 = model->addOperand(&type2);
2630   auto param29 = model->addOperand(&type2);
2631   auto param30 = model->addOperand(&type2);
2632   auto param31 = model->addOperand(&type2);
2633   auto param32 = model->addOperand(&type2);
2634   auto param33 = model->addOperand(&type2);
2635   auto param34 = model->addOperand(&type2);
2636   auto param35 = model->addOperand(&type2);
2637   auto layout = model->addOperand(&type0);
2638   auto op43 = model->addOperand(&type28);
2639   // Phase 2, operations
2640   static int32_t param27_init[] = {50};
2641   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2642   static int32_t param28_init[] = {50};
2643   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2644   static int32_t param29_init[] = {50};
2645   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2646   static int32_t param30_init[] = {50};
2647   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2648   static int32_t param31_init[] = {5};
2649   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2650   static int32_t param32_init[] = {5};
2651   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2652   static int32_t param33_init[] = {100};
2653   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
2654   static int32_t param34_init[] = {100};
2655   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
2656   static int32_t param35_init[] = {3};
2657   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
2658   static bool8 layout_init[] = {false};
2659   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2660   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
2661   // Phase 3, inputs and outputs
2662   model->identifyInputsAndOutputs(
2663     {op13},
2664     {op43});
2665   assert(model->isValid());
2666 }
2667 
is_ignored_nhwc_float16_4(int i)2668 inline bool is_ignored_nhwc_float16_4(int i) {
2669   static std::set<int> ignore = {};
2670   return ignore.find(i) != ignore.end();
2671 }
2672 
CreateModel_nhwc_quant8_4(Model * model)2673 void CreateModel_nhwc_quant8_4(Model *model) {
2674   OperandType type0(Type::BOOL, {});
2675   OperandType type2(Type::INT32, {});
2676   OperandType type29(Type::TENSOR_QUANT8_ASYMM, {5, 52, 60, 3}, 0.5f, 0);
2677   OperandType type30(Type::TENSOR_QUANT8_ASYMM, {5, 11, 13, 3}, 0.5f, 0);
2678   // Phase 1, operands
2679   auto op13 = model->addOperand(&type29);
2680   auto param27 = model->addOperand(&type2);
2681   auto param28 = model->addOperand(&type2);
2682   auto param29 = model->addOperand(&type2);
2683   auto param30 = model->addOperand(&type2);
2684   auto param31 = model->addOperand(&type2);
2685   auto param32 = model->addOperand(&type2);
2686   auto param33 = model->addOperand(&type2);
2687   auto param34 = model->addOperand(&type2);
2688   auto param35 = model->addOperand(&type2);
2689   auto layout = model->addOperand(&type0);
2690   auto op43 = model->addOperand(&type30);
2691   // Phase 2, operations
2692   static int32_t param27_init[] = {50};
2693   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2694   static int32_t param28_init[] = {50};
2695   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2696   static int32_t param29_init[] = {50};
2697   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2698   static int32_t param30_init[] = {50};
2699   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2700   static int32_t param31_init[] = {5};
2701   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2702   static int32_t param32_init[] = {5};
2703   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2704   static int32_t param33_init[] = {100};
2705   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
2706   static int32_t param34_init[] = {100};
2707   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
2708   static int32_t param35_init[] = {3};
2709   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
2710   static bool8 layout_init[] = {false};
2711   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2712   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
2713   // Phase 3, inputs and outputs
2714   model->identifyInputsAndOutputs(
2715     {op13},
2716     {op43});
2717   assert(model->isValid());
2718 }
2719 
is_ignored_nhwc_quant8_4(int i)2720 inline bool is_ignored_nhwc_quant8_4(int i) {
2721   static std::set<int> ignore = {};
2722   return ignore.find(i) != ignore.end();
2723 }
2724 
CreateModel_nchw_4(Model * model)2725 void CreateModel_nchw_4(Model *model) {
2726   OperandType type0(Type::BOOL, {});
2727   OperandType type2(Type::INT32, {});
2728   OperandType type31(Type::TENSOR_FLOAT32, {5, 3, 52, 60});
2729   OperandType type32(Type::TENSOR_FLOAT32, {5, 3, 11, 13});
2730   // Phase 1, operands
2731   auto op13 = model->addOperand(&type31);
2732   auto param27 = model->addOperand(&type2);
2733   auto param28 = model->addOperand(&type2);
2734   auto param29 = model->addOperand(&type2);
2735   auto param30 = model->addOperand(&type2);
2736   auto param31 = model->addOperand(&type2);
2737   auto param32 = model->addOperand(&type2);
2738   auto param33 = model->addOperand(&type2);
2739   auto param34 = model->addOperand(&type2);
2740   auto param35 = model->addOperand(&type2);
2741   auto layout = model->addOperand(&type0);
2742   auto op43 = model->addOperand(&type32);
2743   // Phase 2, operations
2744   static int32_t param27_init[] = {50};
2745   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2746   static int32_t param28_init[] = {50};
2747   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2748   static int32_t param29_init[] = {50};
2749   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2750   static int32_t param30_init[] = {50};
2751   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2752   static int32_t param31_init[] = {5};
2753   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2754   static int32_t param32_init[] = {5};
2755   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2756   static int32_t param33_init[] = {100};
2757   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
2758   static int32_t param34_init[] = {100};
2759   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
2760   static int32_t param35_init[] = {3};
2761   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
2762   static bool8 layout_init[] = {true};
2763   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2764   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
2765   // Phase 3, inputs and outputs
2766   model->identifyInputsAndOutputs(
2767     {op13},
2768     {op43});
2769   assert(model->isValid());
2770 }
2771 
is_ignored_nchw_4(int i)2772 inline bool is_ignored_nchw_4(int i) {
2773   static std::set<int> ignore = {};
2774   return ignore.find(i) != ignore.end();
2775 }
2776 
CreateModel_nchw_relaxed_4(Model * model)2777 void CreateModel_nchw_relaxed_4(Model *model) {
2778   OperandType type0(Type::BOOL, {});
2779   OperandType type2(Type::INT32, {});
2780   OperandType type31(Type::TENSOR_FLOAT32, {5, 3, 52, 60});
2781   OperandType type32(Type::TENSOR_FLOAT32, {5, 3, 11, 13});
2782   // Phase 1, operands
2783   auto op13 = model->addOperand(&type31);
2784   auto param27 = model->addOperand(&type2);
2785   auto param28 = model->addOperand(&type2);
2786   auto param29 = model->addOperand(&type2);
2787   auto param30 = model->addOperand(&type2);
2788   auto param31 = model->addOperand(&type2);
2789   auto param32 = model->addOperand(&type2);
2790   auto param33 = model->addOperand(&type2);
2791   auto param34 = model->addOperand(&type2);
2792   auto param35 = model->addOperand(&type2);
2793   auto layout = model->addOperand(&type0);
2794   auto op43 = model->addOperand(&type32);
2795   // Phase 2, operations
2796   static int32_t param27_init[] = {50};
2797   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2798   static int32_t param28_init[] = {50};
2799   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2800   static int32_t param29_init[] = {50};
2801   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2802   static int32_t param30_init[] = {50};
2803   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2804   static int32_t param31_init[] = {5};
2805   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2806   static int32_t param32_init[] = {5};
2807   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2808   static int32_t param33_init[] = {100};
2809   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
2810   static int32_t param34_init[] = {100};
2811   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
2812   static int32_t param35_init[] = {3};
2813   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
2814   static bool8 layout_init[] = {true};
2815   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2816   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
2817   // Phase 3, inputs and outputs
2818   model->identifyInputsAndOutputs(
2819     {op13},
2820     {op43});
2821   // Phase 4: set relaxed execution
2822   model->relaxComputationFloat32toFloat16(true);
2823   assert(model->isValid());
2824 }
2825 
is_ignored_nchw_relaxed_4(int i)2826 inline bool is_ignored_nchw_relaxed_4(int i) {
2827   static std::set<int> ignore = {};
2828   return ignore.find(i) != ignore.end();
2829 }
2830 
CreateModel_nchw_float16_4(Model * model)2831 void CreateModel_nchw_float16_4(Model *model) {
2832   OperandType type0(Type::BOOL, {});
2833   OperandType type2(Type::INT32, {});
2834   OperandType type33(Type::TENSOR_FLOAT16, {5, 3, 52, 60});
2835   OperandType type34(Type::TENSOR_FLOAT16, {5, 3, 11, 13});
2836   // Phase 1, operands
2837   auto op13 = model->addOperand(&type33);
2838   auto param27 = model->addOperand(&type2);
2839   auto param28 = model->addOperand(&type2);
2840   auto param29 = model->addOperand(&type2);
2841   auto param30 = model->addOperand(&type2);
2842   auto param31 = model->addOperand(&type2);
2843   auto param32 = model->addOperand(&type2);
2844   auto param33 = model->addOperand(&type2);
2845   auto param34 = model->addOperand(&type2);
2846   auto param35 = model->addOperand(&type2);
2847   auto layout = model->addOperand(&type0);
2848   auto op43 = model->addOperand(&type34);
2849   // Phase 2, operations
2850   static int32_t param27_init[] = {50};
2851   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2852   static int32_t param28_init[] = {50};
2853   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2854   static int32_t param29_init[] = {50};
2855   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2856   static int32_t param30_init[] = {50};
2857   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2858   static int32_t param31_init[] = {5};
2859   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2860   static int32_t param32_init[] = {5};
2861   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2862   static int32_t param33_init[] = {100};
2863   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
2864   static int32_t param34_init[] = {100};
2865   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
2866   static int32_t param35_init[] = {3};
2867   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
2868   static bool8 layout_init[] = {true};
2869   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2870   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
2871   // Phase 3, inputs and outputs
2872   model->identifyInputsAndOutputs(
2873     {op13},
2874     {op43});
2875   assert(model->isValid());
2876 }
2877 
is_ignored_nchw_float16_4(int i)2878 inline bool is_ignored_nchw_float16_4(int i) {
2879   static std::set<int> ignore = {};
2880   return ignore.find(i) != ignore.end();
2881 }
2882 
CreateModel_nchw_quant8_4(Model * model)2883 void CreateModel_nchw_quant8_4(Model *model) {
2884   OperandType type0(Type::BOOL, {});
2885   OperandType type2(Type::INT32, {});
2886   OperandType type35(Type::TENSOR_QUANT8_ASYMM, {5, 3, 52, 60}, 0.5f, 0);
2887   OperandType type36(Type::TENSOR_QUANT8_ASYMM, {5, 3, 11, 13}, 0.5f, 0);
2888   // Phase 1, operands
2889   auto op13 = model->addOperand(&type35);
2890   auto param27 = model->addOperand(&type2);
2891   auto param28 = model->addOperand(&type2);
2892   auto param29 = model->addOperand(&type2);
2893   auto param30 = model->addOperand(&type2);
2894   auto param31 = model->addOperand(&type2);
2895   auto param32 = model->addOperand(&type2);
2896   auto param33 = model->addOperand(&type2);
2897   auto param34 = model->addOperand(&type2);
2898   auto param35 = model->addOperand(&type2);
2899   auto layout = model->addOperand(&type0);
2900   auto op43 = model->addOperand(&type36);
2901   // Phase 2, operations
2902   static int32_t param27_init[] = {50};
2903   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2904   static int32_t param28_init[] = {50};
2905   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2906   static int32_t param29_init[] = {50};
2907   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2908   static int32_t param30_init[] = {50};
2909   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2910   static int32_t param31_init[] = {5};
2911   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2912   static int32_t param32_init[] = {5};
2913   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2914   static int32_t param33_init[] = {100};
2915   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
2916   static int32_t param34_init[] = {100};
2917   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
2918   static int32_t param35_init[] = {3};
2919   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
2920   static bool8 layout_init[] = {true};
2921   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2922   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
2923   // Phase 3, inputs and outputs
2924   model->identifyInputsAndOutputs(
2925     {op13},
2926     {op43});
2927   assert(model->isValid());
2928 }
2929 
is_ignored_nchw_quant8_4(int i)2930 inline bool is_ignored_nchw_quant8_4(int i) {
2931   static std::set<int> ignore = {};
2932   return ignore.find(i) != ignore.end();
2933 }
2934 
CreateModel_dynamic_output_shape_nhwc_4(Model * model)2935 void CreateModel_dynamic_output_shape_nhwc_4(Model *model) {
2936   OperandType type0(Type::BOOL, {});
2937   OperandType type2(Type::INT32, {});
2938   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2939   OperandType type3(Type::TENSOR_FLOAT32, {5, 52, 60, 3});
2940   // Phase 1, operands
2941   auto op13 = model->addOperand(&type3);
2942   auto param27 = model->addOperand(&type2);
2943   auto param28 = model->addOperand(&type2);
2944   auto param29 = model->addOperand(&type2);
2945   auto param30 = model->addOperand(&type2);
2946   auto param31 = model->addOperand(&type2);
2947   auto param32 = model->addOperand(&type2);
2948   auto param33 = model->addOperand(&type2);
2949   auto param34 = model->addOperand(&type2);
2950   auto param35 = model->addOperand(&type2);
2951   auto layout = model->addOperand(&type0);
2952   auto op43 = model->addOperand(&type24);
2953   // Phase 2, operations
2954   static int32_t param27_init[] = {50};
2955   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
2956   static int32_t param28_init[] = {50};
2957   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
2958   static int32_t param29_init[] = {50};
2959   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
2960   static int32_t param30_init[] = {50};
2961   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
2962   static int32_t param31_init[] = {5};
2963   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
2964   static int32_t param32_init[] = {5};
2965   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
2966   static int32_t param33_init[] = {100};
2967   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
2968   static int32_t param34_init[] = {100};
2969   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
2970   static int32_t param35_init[] = {3};
2971   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
2972   static bool8 layout_init[] = {false};
2973   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
2974   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
2975   // Phase 3, inputs and outputs
2976   model->identifyInputsAndOutputs(
2977     {op13},
2978     {op43});
2979   assert(model->isValid());
2980 }
2981 
is_ignored_dynamic_output_shape_nhwc_4(int i)2982 inline bool is_ignored_dynamic_output_shape_nhwc_4(int i) {
2983   static std::set<int> ignore = {};
2984   return ignore.find(i) != ignore.end();
2985 }
2986 
CreateModel_dynamic_output_shape_nhwc_relaxed_4(Model * model)2987 void CreateModel_dynamic_output_shape_nhwc_relaxed_4(Model *model) {
2988   OperandType type0(Type::BOOL, {});
2989   OperandType type2(Type::INT32, {});
2990   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
2991   OperandType type3(Type::TENSOR_FLOAT32, {5, 52, 60, 3});
2992   // Phase 1, operands
2993   auto op13 = model->addOperand(&type3);
2994   auto param27 = model->addOperand(&type2);
2995   auto param28 = model->addOperand(&type2);
2996   auto param29 = model->addOperand(&type2);
2997   auto param30 = model->addOperand(&type2);
2998   auto param31 = model->addOperand(&type2);
2999   auto param32 = model->addOperand(&type2);
3000   auto param33 = model->addOperand(&type2);
3001   auto param34 = model->addOperand(&type2);
3002   auto param35 = model->addOperand(&type2);
3003   auto layout = model->addOperand(&type0);
3004   auto op43 = model->addOperand(&type24);
3005   // Phase 2, operations
3006   static int32_t param27_init[] = {50};
3007   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3008   static int32_t param28_init[] = {50};
3009   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3010   static int32_t param29_init[] = {50};
3011   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3012   static int32_t param30_init[] = {50};
3013   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3014   static int32_t param31_init[] = {5};
3015   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3016   static int32_t param32_init[] = {5};
3017   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3018   static int32_t param33_init[] = {100};
3019   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3020   static int32_t param34_init[] = {100};
3021   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
3022   static int32_t param35_init[] = {3};
3023   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3024   static bool8 layout_init[] = {false};
3025   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3026   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
3027   // Phase 3, inputs and outputs
3028   model->identifyInputsAndOutputs(
3029     {op13},
3030     {op43});
3031   // Phase 4: set relaxed execution
3032   model->relaxComputationFloat32toFloat16(true);
3033   assert(model->isValid());
3034 }
3035 
is_ignored_dynamic_output_shape_nhwc_relaxed_4(int i)3036 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_4(int i) {
3037   static std::set<int> ignore = {};
3038   return ignore.find(i) != ignore.end();
3039 }
3040 
CreateModel_dynamic_output_shape_nhwc_float16_4(Model * model)3041 void CreateModel_dynamic_output_shape_nhwc_float16_4(Model *model) {
3042   OperandType type0(Type::BOOL, {});
3043   OperandType type2(Type::INT32, {});
3044   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
3045   OperandType type27(Type::TENSOR_FLOAT16, {5, 52, 60, 3});
3046   // Phase 1, operands
3047   auto op13 = model->addOperand(&type27);
3048   auto param27 = model->addOperand(&type2);
3049   auto param28 = model->addOperand(&type2);
3050   auto param29 = model->addOperand(&type2);
3051   auto param30 = model->addOperand(&type2);
3052   auto param31 = model->addOperand(&type2);
3053   auto param32 = model->addOperand(&type2);
3054   auto param33 = model->addOperand(&type2);
3055   auto param34 = model->addOperand(&type2);
3056   auto param35 = model->addOperand(&type2);
3057   auto layout = model->addOperand(&type0);
3058   auto op43 = model->addOperand(&type25);
3059   // Phase 2, operations
3060   static int32_t param27_init[] = {50};
3061   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3062   static int32_t param28_init[] = {50};
3063   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3064   static int32_t param29_init[] = {50};
3065   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3066   static int32_t param30_init[] = {50};
3067   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3068   static int32_t param31_init[] = {5};
3069   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3070   static int32_t param32_init[] = {5};
3071   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3072   static int32_t param33_init[] = {100};
3073   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3074   static int32_t param34_init[] = {100};
3075   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
3076   static int32_t param35_init[] = {3};
3077   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3078   static bool8 layout_init[] = {false};
3079   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3080   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
3081   // Phase 3, inputs and outputs
3082   model->identifyInputsAndOutputs(
3083     {op13},
3084     {op43});
3085   assert(model->isValid());
3086 }
3087 
is_ignored_dynamic_output_shape_nhwc_float16_4(int i)3088 inline bool is_ignored_dynamic_output_shape_nhwc_float16_4(int i) {
3089   static std::set<int> ignore = {};
3090   return ignore.find(i) != ignore.end();
3091 }
3092 
CreateModel_dynamic_output_shape_nhwc_quant8_4(Model * model)3093 void CreateModel_dynamic_output_shape_nhwc_quant8_4(Model *model) {
3094   OperandType type0(Type::BOOL, {});
3095   OperandType type2(Type::INT32, {});
3096   OperandType type26(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
3097   OperandType type29(Type::TENSOR_QUANT8_ASYMM, {5, 52, 60, 3}, 0.5f, 0);
3098   // Phase 1, operands
3099   auto op13 = model->addOperand(&type29);
3100   auto param27 = model->addOperand(&type2);
3101   auto param28 = model->addOperand(&type2);
3102   auto param29 = model->addOperand(&type2);
3103   auto param30 = model->addOperand(&type2);
3104   auto param31 = model->addOperand(&type2);
3105   auto param32 = model->addOperand(&type2);
3106   auto param33 = model->addOperand(&type2);
3107   auto param34 = model->addOperand(&type2);
3108   auto param35 = model->addOperand(&type2);
3109   auto layout = model->addOperand(&type0);
3110   auto op43 = model->addOperand(&type26);
3111   // Phase 2, operations
3112   static int32_t param27_init[] = {50};
3113   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3114   static int32_t param28_init[] = {50};
3115   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3116   static int32_t param29_init[] = {50};
3117   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3118   static int32_t param30_init[] = {50};
3119   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3120   static int32_t param31_init[] = {5};
3121   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3122   static int32_t param32_init[] = {5};
3123   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3124   static int32_t param33_init[] = {100};
3125   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3126   static int32_t param34_init[] = {100};
3127   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
3128   static int32_t param35_init[] = {3};
3129   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3130   static bool8 layout_init[] = {false};
3131   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3132   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
3133   // Phase 3, inputs and outputs
3134   model->identifyInputsAndOutputs(
3135     {op13},
3136     {op43});
3137   assert(model->isValid());
3138 }
3139 
is_ignored_dynamic_output_shape_nhwc_quant8_4(int i)3140 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_4(int i) {
3141   static std::set<int> ignore = {};
3142   return ignore.find(i) != ignore.end();
3143 }
3144 
CreateModel_dynamic_output_shape_nchw_4(Model * model)3145 void CreateModel_dynamic_output_shape_nchw_4(Model *model) {
3146   OperandType type0(Type::BOOL, {});
3147   OperandType type2(Type::INT32, {});
3148   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
3149   OperandType type31(Type::TENSOR_FLOAT32, {5, 3, 52, 60});
3150   // Phase 1, operands
3151   auto op13 = model->addOperand(&type31);
3152   auto param27 = model->addOperand(&type2);
3153   auto param28 = model->addOperand(&type2);
3154   auto param29 = model->addOperand(&type2);
3155   auto param30 = model->addOperand(&type2);
3156   auto param31 = model->addOperand(&type2);
3157   auto param32 = model->addOperand(&type2);
3158   auto param33 = model->addOperand(&type2);
3159   auto param34 = model->addOperand(&type2);
3160   auto param35 = model->addOperand(&type2);
3161   auto layout = model->addOperand(&type0);
3162   auto op43 = model->addOperand(&type24);
3163   // Phase 2, operations
3164   static int32_t param27_init[] = {50};
3165   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3166   static int32_t param28_init[] = {50};
3167   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3168   static int32_t param29_init[] = {50};
3169   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3170   static int32_t param30_init[] = {50};
3171   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3172   static int32_t param31_init[] = {5};
3173   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3174   static int32_t param32_init[] = {5};
3175   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3176   static int32_t param33_init[] = {100};
3177   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3178   static int32_t param34_init[] = {100};
3179   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
3180   static int32_t param35_init[] = {3};
3181   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3182   static bool8 layout_init[] = {true};
3183   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3184   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
3185   // Phase 3, inputs and outputs
3186   model->identifyInputsAndOutputs(
3187     {op13},
3188     {op43});
3189   assert(model->isValid());
3190 }
3191 
is_ignored_dynamic_output_shape_nchw_4(int i)3192 inline bool is_ignored_dynamic_output_shape_nchw_4(int i) {
3193   static std::set<int> ignore = {};
3194   return ignore.find(i) != ignore.end();
3195 }
3196 
CreateModel_dynamic_output_shape_nchw_relaxed_4(Model * model)3197 void CreateModel_dynamic_output_shape_nchw_relaxed_4(Model *model) {
3198   OperandType type0(Type::BOOL, {});
3199   OperandType type2(Type::INT32, {});
3200   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
3201   OperandType type31(Type::TENSOR_FLOAT32, {5, 3, 52, 60});
3202   // Phase 1, operands
3203   auto op13 = model->addOperand(&type31);
3204   auto param27 = model->addOperand(&type2);
3205   auto param28 = model->addOperand(&type2);
3206   auto param29 = model->addOperand(&type2);
3207   auto param30 = model->addOperand(&type2);
3208   auto param31 = model->addOperand(&type2);
3209   auto param32 = model->addOperand(&type2);
3210   auto param33 = model->addOperand(&type2);
3211   auto param34 = model->addOperand(&type2);
3212   auto param35 = model->addOperand(&type2);
3213   auto layout = model->addOperand(&type0);
3214   auto op43 = model->addOperand(&type24);
3215   // Phase 2, operations
3216   static int32_t param27_init[] = {50};
3217   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3218   static int32_t param28_init[] = {50};
3219   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3220   static int32_t param29_init[] = {50};
3221   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3222   static int32_t param30_init[] = {50};
3223   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3224   static int32_t param31_init[] = {5};
3225   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3226   static int32_t param32_init[] = {5};
3227   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3228   static int32_t param33_init[] = {100};
3229   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3230   static int32_t param34_init[] = {100};
3231   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
3232   static int32_t param35_init[] = {3};
3233   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3234   static bool8 layout_init[] = {true};
3235   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3236   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
3237   // Phase 3, inputs and outputs
3238   model->identifyInputsAndOutputs(
3239     {op13},
3240     {op43});
3241   // Phase 4: set relaxed execution
3242   model->relaxComputationFloat32toFloat16(true);
3243   assert(model->isValid());
3244 }
3245 
is_ignored_dynamic_output_shape_nchw_relaxed_4(int i)3246 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_4(int i) {
3247   static std::set<int> ignore = {};
3248   return ignore.find(i) != ignore.end();
3249 }
3250 
CreateModel_dynamic_output_shape_nchw_float16_4(Model * model)3251 void CreateModel_dynamic_output_shape_nchw_float16_4(Model *model) {
3252   OperandType type0(Type::BOOL, {});
3253   OperandType type2(Type::INT32, {});
3254   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
3255   OperandType type33(Type::TENSOR_FLOAT16, {5, 3, 52, 60});
3256   // Phase 1, operands
3257   auto op13 = model->addOperand(&type33);
3258   auto param27 = model->addOperand(&type2);
3259   auto param28 = model->addOperand(&type2);
3260   auto param29 = model->addOperand(&type2);
3261   auto param30 = model->addOperand(&type2);
3262   auto param31 = model->addOperand(&type2);
3263   auto param32 = model->addOperand(&type2);
3264   auto param33 = model->addOperand(&type2);
3265   auto param34 = model->addOperand(&type2);
3266   auto param35 = model->addOperand(&type2);
3267   auto layout = model->addOperand(&type0);
3268   auto op43 = model->addOperand(&type25);
3269   // Phase 2, operations
3270   static int32_t param27_init[] = {50};
3271   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3272   static int32_t param28_init[] = {50};
3273   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3274   static int32_t param29_init[] = {50};
3275   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3276   static int32_t param30_init[] = {50};
3277   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3278   static int32_t param31_init[] = {5};
3279   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3280   static int32_t param32_init[] = {5};
3281   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3282   static int32_t param33_init[] = {100};
3283   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3284   static int32_t param34_init[] = {100};
3285   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
3286   static int32_t param35_init[] = {3};
3287   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3288   static bool8 layout_init[] = {true};
3289   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3290   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
3291   // Phase 3, inputs and outputs
3292   model->identifyInputsAndOutputs(
3293     {op13},
3294     {op43});
3295   assert(model->isValid());
3296 }
3297 
is_ignored_dynamic_output_shape_nchw_float16_4(int i)3298 inline bool is_ignored_dynamic_output_shape_nchw_float16_4(int i) {
3299   static std::set<int> ignore = {};
3300   return ignore.find(i) != ignore.end();
3301 }
3302 
CreateModel_dynamic_output_shape_nchw_quant8_4(Model * model)3303 void CreateModel_dynamic_output_shape_nchw_quant8_4(Model *model) {
3304   OperandType type0(Type::BOOL, {});
3305   OperandType type2(Type::INT32, {});
3306   OperandType type26(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.5f, 0);
3307   OperandType type35(Type::TENSOR_QUANT8_ASYMM, {5, 3, 52, 60}, 0.5f, 0);
3308   // Phase 1, operands
3309   auto op13 = model->addOperand(&type35);
3310   auto param27 = model->addOperand(&type2);
3311   auto param28 = model->addOperand(&type2);
3312   auto param29 = model->addOperand(&type2);
3313   auto param30 = model->addOperand(&type2);
3314   auto param31 = model->addOperand(&type2);
3315   auto param32 = model->addOperand(&type2);
3316   auto param33 = model->addOperand(&type2);
3317   auto param34 = model->addOperand(&type2);
3318   auto param35 = model->addOperand(&type2);
3319   auto layout = model->addOperand(&type0);
3320   auto op43 = model->addOperand(&type26);
3321   // Phase 2, operations
3322   static int32_t param27_init[] = {50};
3323   model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1);
3324   static int32_t param28_init[] = {50};
3325   model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1);
3326   static int32_t param29_init[] = {50};
3327   model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1);
3328   static int32_t param30_init[] = {50};
3329   model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1);
3330   static int32_t param31_init[] = {5};
3331   model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1);
3332   static int32_t param32_init[] = {5};
3333   model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1);
3334   static int32_t param33_init[] = {100};
3335   model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1);
3336   static int32_t param34_init[] = {100};
3337   model->setOperandValue(param34, param34_init, sizeof(int32_t) * 1);
3338   static int32_t param35_init[] = {3};
3339   model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1);
3340   static bool8 layout_init[] = {true};
3341   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3342   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op13, param27, param28, param29, param30, param31, param32, param33, param34, param35, layout}, {op43});
3343   // Phase 3, inputs and outputs
3344   model->identifyInputsAndOutputs(
3345     {op13},
3346     {op43});
3347   assert(model->isValid());
3348 }
3349 
is_ignored_dynamic_output_shape_nchw_quant8_4(int i)3350 inline bool is_ignored_dynamic_output_shape_nchw_quant8_4(int i) {
3351   static std::set<int> ignore = {};
3352   return ignore.find(i) != ignore.end();
3353 }
3354 
CreateModel_nhwc_5(Model * model)3355 void CreateModel_nhwc_5(Model *model) {
3356   OperandType type0(Type::BOOL, {});
3357   OperandType type2(Type::INT32, {});
3358   OperandType type7(Type::TENSOR_FLOAT32, {1, 2, 4, 1});
3359   OperandType type8(Type::TENSOR_FLOAT32, {1, 1, 2, 1});
3360   // Phase 1, operands
3361   auto op14 = model->addOperand(&type7);
3362   auto param36 = model->addOperand(&type2);
3363   auto param37 = model->addOperand(&type2);
3364   auto param38 = model->addOperand(&type2);
3365   auto param39 = model->addOperand(&type2);
3366   auto param40 = model->addOperand(&type2);
3367   auto param41 = model->addOperand(&type2);
3368   auto layout = model->addOperand(&type0);
3369   auto op44 = model->addOperand(&type8);
3370   // Phase 2, operations
3371   static int32_t param36_init[] = {1};
3372   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3373   static int32_t param37_init[] = {2};
3374   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3375   static int32_t param38_init[] = {2};
3376   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3377   static int32_t param39_init[] = {2};
3378   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3379   static int32_t param40_init[] = {2};
3380   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3381   static int32_t param41_init[] = {0};
3382   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3383   static bool8 layout_init[] = {false};
3384   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3385   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3386   // Phase 3, inputs and outputs
3387   model->identifyInputsAndOutputs(
3388     {op14},
3389     {op44});
3390   assert(model->isValid());
3391 }
3392 
is_ignored_nhwc_5(int i)3393 inline bool is_ignored_nhwc_5(int i) {
3394   static std::set<int> ignore = {};
3395   return ignore.find(i) != ignore.end();
3396 }
3397 
CreateModel_nhwc_relaxed_5(Model * model)3398 void CreateModel_nhwc_relaxed_5(Model *model) {
3399   OperandType type0(Type::BOOL, {});
3400   OperandType type2(Type::INT32, {});
3401   OperandType type7(Type::TENSOR_FLOAT32, {1, 2, 4, 1});
3402   OperandType type8(Type::TENSOR_FLOAT32, {1, 1, 2, 1});
3403   // Phase 1, operands
3404   auto op14 = model->addOperand(&type7);
3405   auto param36 = model->addOperand(&type2);
3406   auto param37 = model->addOperand(&type2);
3407   auto param38 = model->addOperand(&type2);
3408   auto param39 = model->addOperand(&type2);
3409   auto param40 = model->addOperand(&type2);
3410   auto param41 = model->addOperand(&type2);
3411   auto layout = model->addOperand(&type0);
3412   auto op44 = model->addOperand(&type8);
3413   // Phase 2, operations
3414   static int32_t param36_init[] = {1};
3415   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3416   static int32_t param37_init[] = {2};
3417   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3418   static int32_t param38_init[] = {2};
3419   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3420   static int32_t param39_init[] = {2};
3421   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3422   static int32_t param40_init[] = {2};
3423   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3424   static int32_t param41_init[] = {0};
3425   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3426   static bool8 layout_init[] = {false};
3427   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3428   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3429   // Phase 3, inputs and outputs
3430   model->identifyInputsAndOutputs(
3431     {op14},
3432     {op44});
3433   // Phase 4: set relaxed execution
3434   model->relaxComputationFloat32toFloat16(true);
3435   assert(model->isValid());
3436 }
3437 
is_ignored_nhwc_relaxed_5(int i)3438 inline bool is_ignored_nhwc_relaxed_5(int i) {
3439   static std::set<int> ignore = {};
3440   return ignore.find(i) != ignore.end();
3441 }
3442 
CreateModel_nhwc_float16_5(Model * model)3443 void CreateModel_nhwc_float16_5(Model *model) {
3444   OperandType type0(Type::BOOL, {});
3445   OperandType type2(Type::INT32, {});
3446   OperandType type48(Type::TENSOR_FLOAT16, {1, 2, 4, 1});
3447   OperandType type49(Type::TENSOR_FLOAT16, {1, 1, 2, 1});
3448   // Phase 1, operands
3449   auto op14 = model->addOperand(&type48);
3450   auto param36 = model->addOperand(&type2);
3451   auto param37 = model->addOperand(&type2);
3452   auto param38 = model->addOperand(&type2);
3453   auto param39 = model->addOperand(&type2);
3454   auto param40 = model->addOperand(&type2);
3455   auto param41 = model->addOperand(&type2);
3456   auto layout = model->addOperand(&type0);
3457   auto op44 = model->addOperand(&type49);
3458   // Phase 2, operations
3459   static int32_t param36_init[] = {1};
3460   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3461   static int32_t param37_init[] = {2};
3462   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3463   static int32_t param38_init[] = {2};
3464   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3465   static int32_t param39_init[] = {2};
3466   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3467   static int32_t param40_init[] = {2};
3468   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3469   static int32_t param41_init[] = {0};
3470   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3471   static bool8 layout_init[] = {false};
3472   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3473   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3474   // Phase 3, inputs and outputs
3475   model->identifyInputsAndOutputs(
3476     {op14},
3477     {op44});
3478   assert(model->isValid());
3479 }
3480 
is_ignored_nhwc_float16_5(int i)3481 inline bool is_ignored_nhwc_float16_5(int i) {
3482   static std::set<int> ignore = {};
3483   return ignore.find(i) != ignore.end();
3484 }
3485 
CreateModel_nhwc_quant8_5(Model * model)3486 void CreateModel_nhwc_quant8_5(Model *model) {
3487   OperandType type0(Type::BOOL, {});
3488   OperandType type2(Type::INT32, {});
3489   OperandType type50(Type::TENSOR_QUANT8_ASYMM, {1, 2, 4, 1}, 0.25f, 0);
3490   OperandType type51(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 1}, 0.25f, 0);
3491   // Phase 1, operands
3492   auto op14 = model->addOperand(&type50);
3493   auto param36 = model->addOperand(&type2);
3494   auto param37 = model->addOperand(&type2);
3495   auto param38 = model->addOperand(&type2);
3496   auto param39 = model->addOperand(&type2);
3497   auto param40 = model->addOperand(&type2);
3498   auto param41 = model->addOperand(&type2);
3499   auto layout = model->addOperand(&type0);
3500   auto op44 = model->addOperand(&type51);
3501   // Phase 2, operations
3502   static int32_t param36_init[] = {1};
3503   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3504   static int32_t param37_init[] = {2};
3505   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3506   static int32_t param38_init[] = {2};
3507   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3508   static int32_t param39_init[] = {2};
3509   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3510   static int32_t param40_init[] = {2};
3511   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3512   static int32_t param41_init[] = {0};
3513   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3514   static bool8 layout_init[] = {false};
3515   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3516   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3517   // Phase 3, inputs and outputs
3518   model->identifyInputsAndOutputs(
3519     {op14},
3520     {op44});
3521   assert(model->isValid());
3522 }
3523 
is_ignored_nhwc_quant8_5(int i)3524 inline bool is_ignored_nhwc_quant8_5(int i) {
3525   static std::set<int> ignore = {};
3526   return ignore.find(i) != ignore.end();
3527 }
3528 
CreateModel_nchw_5(Model * model)3529 void CreateModel_nchw_5(Model *model) {
3530   OperandType type0(Type::BOOL, {});
3531   OperandType type2(Type::INT32, {});
3532   OperandType type52(Type::TENSOR_FLOAT32, {1, 1, 2, 4});
3533   OperandType type53(Type::TENSOR_FLOAT32, {1, 1, 1, 2});
3534   // Phase 1, operands
3535   auto op14 = model->addOperand(&type52);
3536   auto param36 = model->addOperand(&type2);
3537   auto param37 = model->addOperand(&type2);
3538   auto param38 = model->addOperand(&type2);
3539   auto param39 = model->addOperand(&type2);
3540   auto param40 = model->addOperand(&type2);
3541   auto param41 = model->addOperand(&type2);
3542   auto layout = model->addOperand(&type0);
3543   auto op44 = model->addOperand(&type53);
3544   // Phase 2, operations
3545   static int32_t param36_init[] = {1};
3546   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3547   static int32_t param37_init[] = {2};
3548   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3549   static int32_t param38_init[] = {2};
3550   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3551   static int32_t param39_init[] = {2};
3552   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3553   static int32_t param40_init[] = {2};
3554   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3555   static int32_t param41_init[] = {0};
3556   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3557   static bool8 layout_init[] = {true};
3558   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3559   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3560   // Phase 3, inputs and outputs
3561   model->identifyInputsAndOutputs(
3562     {op14},
3563     {op44});
3564   assert(model->isValid());
3565 }
3566 
is_ignored_nchw_5(int i)3567 inline bool is_ignored_nchw_5(int i) {
3568   static std::set<int> ignore = {};
3569   return ignore.find(i) != ignore.end();
3570 }
3571 
CreateModel_nchw_relaxed_5(Model * model)3572 void CreateModel_nchw_relaxed_5(Model *model) {
3573   OperandType type0(Type::BOOL, {});
3574   OperandType type2(Type::INT32, {});
3575   OperandType type52(Type::TENSOR_FLOAT32, {1, 1, 2, 4});
3576   OperandType type53(Type::TENSOR_FLOAT32, {1, 1, 1, 2});
3577   // Phase 1, operands
3578   auto op14 = model->addOperand(&type52);
3579   auto param36 = model->addOperand(&type2);
3580   auto param37 = model->addOperand(&type2);
3581   auto param38 = model->addOperand(&type2);
3582   auto param39 = model->addOperand(&type2);
3583   auto param40 = model->addOperand(&type2);
3584   auto param41 = model->addOperand(&type2);
3585   auto layout = model->addOperand(&type0);
3586   auto op44 = model->addOperand(&type53);
3587   // Phase 2, operations
3588   static int32_t param36_init[] = {1};
3589   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3590   static int32_t param37_init[] = {2};
3591   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3592   static int32_t param38_init[] = {2};
3593   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3594   static int32_t param39_init[] = {2};
3595   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3596   static int32_t param40_init[] = {2};
3597   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3598   static int32_t param41_init[] = {0};
3599   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3600   static bool8 layout_init[] = {true};
3601   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3602   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3603   // Phase 3, inputs and outputs
3604   model->identifyInputsAndOutputs(
3605     {op14},
3606     {op44});
3607   // Phase 4: set relaxed execution
3608   model->relaxComputationFloat32toFloat16(true);
3609   assert(model->isValid());
3610 }
3611 
is_ignored_nchw_relaxed_5(int i)3612 inline bool is_ignored_nchw_relaxed_5(int i) {
3613   static std::set<int> ignore = {};
3614   return ignore.find(i) != ignore.end();
3615 }
3616 
CreateModel_nchw_float16_5(Model * model)3617 void CreateModel_nchw_float16_5(Model *model) {
3618   OperandType type0(Type::BOOL, {});
3619   OperandType type2(Type::INT32, {});
3620   OperandType type54(Type::TENSOR_FLOAT16, {1, 1, 2, 4});
3621   OperandType type55(Type::TENSOR_FLOAT16, {1, 1, 1, 2});
3622   // Phase 1, operands
3623   auto op14 = model->addOperand(&type54);
3624   auto param36 = model->addOperand(&type2);
3625   auto param37 = model->addOperand(&type2);
3626   auto param38 = model->addOperand(&type2);
3627   auto param39 = model->addOperand(&type2);
3628   auto param40 = model->addOperand(&type2);
3629   auto param41 = model->addOperand(&type2);
3630   auto layout = model->addOperand(&type0);
3631   auto op44 = model->addOperand(&type55);
3632   // Phase 2, operations
3633   static int32_t param36_init[] = {1};
3634   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3635   static int32_t param37_init[] = {2};
3636   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3637   static int32_t param38_init[] = {2};
3638   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3639   static int32_t param39_init[] = {2};
3640   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3641   static int32_t param40_init[] = {2};
3642   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3643   static int32_t param41_init[] = {0};
3644   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3645   static bool8 layout_init[] = {true};
3646   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3647   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3648   // Phase 3, inputs and outputs
3649   model->identifyInputsAndOutputs(
3650     {op14},
3651     {op44});
3652   assert(model->isValid());
3653 }
3654 
is_ignored_nchw_float16_5(int i)3655 inline bool is_ignored_nchw_float16_5(int i) {
3656   static std::set<int> ignore = {};
3657   return ignore.find(i) != ignore.end();
3658 }
3659 
CreateModel_nchw_quant8_5(Model * model)3660 void CreateModel_nchw_quant8_5(Model *model) {
3661   OperandType type0(Type::BOOL, {});
3662   OperandType type2(Type::INT32, {});
3663   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 4}, 0.25f, 0);
3664   OperandType type57(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 2}, 0.25f, 0);
3665   // Phase 1, operands
3666   auto op14 = model->addOperand(&type56);
3667   auto param36 = model->addOperand(&type2);
3668   auto param37 = model->addOperand(&type2);
3669   auto param38 = model->addOperand(&type2);
3670   auto param39 = model->addOperand(&type2);
3671   auto param40 = model->addOperand(&type2);
3672   auto param41 = model->addOperand(&type2);
3673   auto layout = model->addOperand(&type0);
3674   auto op44 = model->addOperand(&type57);
3675   // Phase 2, operations
3676   static int32_t param36_init[] = {1};
3677   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3678   static int32_t param37_init[] = {2};
3679   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3680   static int32_t param38_init[] = {2};
3681   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3682   static int32_t param39_init[] = {2};
3683   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3684   static int32_t param40_init[] = {2};
3685   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3686   static int32_t param41_init[] = {0};
3687   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3688   static bool8 layout_init[] = {true};
3689   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3690   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3691   // Phase 3, inputs and outputs
3692   model->identifyInputsAndOutputs(
3693     {op14},
3694     {op44});
3695   assert(model->isValid());
3696 }
3697 
is_ignored_nchw_quant8_5(int i)3698 inline bool is_ignored_nchw_quant8_5(int i) {
3699   static std::set<int> ignore = {};
3700   return ignore.find(i) != ignore.end();
3701 }
3702 
CreateModel_dynamic_output_shape_nhwc_5(Model * model)3703 void CreateModel_dynamic_output_shape_nhwc_5(Model *model) {
3704   OperandType type0(Type::BOOL, {});
3705   OperandType type2(Type::INT32, {});
3706   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
3707   OperandType type7(Type::TENSOR_FLOAT32, {1, 2, 4, 1});
3708   // Phase 1, operands
3709   auto op14 = model->addOperand(&type7);
3710   auto param36 = model->addOperand(&type2);
3711   auto param37 = model->addOperand(&type2);
3712   auto param38 = model->addOperand(&type2);
3713   auto param39 = model->addOperand(&type2);
3714   auto param40 = model->addOperand(&type2);
3715   auto param41 = model->addOperand(&type2);
3716   auto layout = model->addOperand(&type0);
3717   auto op44 = model->addOperand(&type24);
3718   // Phase 2, operations
3719   static int32_t param36_init[] = {1};
3720   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3721   static int32_t param37_init[] = {2};
3722   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3723   static int32_t param38_init[] = {2};
3724   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3725   static int32_t param39_init[] = {2};
3726   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3727   static int32_t param40_init[] = {2};
3728   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3729   static int32_t param41_init[] = {0};
3730   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3731   static bool8 layout_init[] = {false};
3732   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3733   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3734   // Phase 3, inputs and outputs
3735   model->identifyInputsAndOutputs(
3736     {op14},
3737     {op44});
3738   assert(model->isValid());
3739 }
3740 
is_ignored_dynamic_output_shape_nhwc_5(int i)3741 inline bool is_ignored_dynamic_output_shape_nhwc_5(int i) {
3742   static std::set<int> ignore = {};
3743   return ignore.find(i) != ignore.end();
3744 }
3745 
CreateModel_dynamic_output_shape_nhwc_relaxed_5(Model * model)3746 void CreateModel_dynamic_output_shape_nhwc_relaxed_5(Model *model) {
3747   OperandType type0(Type::BOOL, {});
3748   OperandType type2(Type::INT32, {});
3749   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
3750   OperandType type7(Type::TENSOR_FLOAT32, {1, 2, 4, 1});
3751   // Phase 1, operands
3752   auto op14 = model->addOperand(&type7);
3753   auto param36 = model->addOperand(&type2);
3754   auto param37 = model->addOperand(&type2);
3755   auto param38 = model->addOperand(&type2);
3756   auto param39 = model->addOperand(&type2);
3757   auto param40 = model->addOperand(&type2);
3758   auto param41 = model->addOperand(&type2);
3759   auto layout = model->addOperand(&type0);
3760   auto op44 = model->addOperand(&type24);
3761   // Phase 2, operations
3762   static int32_t param36_init[] = {1};
3763   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3764   static int32_t param37_init[] = {2};
3765   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3766   static int32_t param38_init[] = {2};
3767   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3768   static int32_t param39_init[] = {2};
3769   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3770   static int32_t param40_init[] = {2};
3771   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3772   static int32_t param41_init[] = {0};
3773   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3774   static bool8 layout_init[] = {false};
3775   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3776   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3777   // Phase 3, inputs and outputs
3778   model->identifyInputsAndOutputs(
3779     {op14},
3780     {op44});
3781   // Phase 4: set relaxed execution
3782   model->relaxComputationFloat32toFloat16(true);
3783   assert(model->isValid());
3784 }
3785 
is_ignored_dynamic_output_shape_nhwc_relaxed_5(int i)3786 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_5(int i) {
3787   static std::set<int> ignore = {};
3788   return ignore.find(i) != ignore.end();
3789 }
3790 
CreateModel_dynamic_output_shape_nhwc_float16_5(Model * model)3791 void CreateModel_dynamic_output_shape_nhwc_float16_5(Model *model) {
3792   OperandType type0(Type::BOOL, {});
3793   OperandType type2(Type::INT32, {});
3794   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
3795   OperandType type48(Type::TENSOR_FLOAT16, {1, 2, 4, 1});
3796   // Phase 1, operands
3797   auto op14 = model->addOperand(&type48);
3798   auto param36 = model->addOperand(&type2);
3799   auto param37 = model->addOperand(&type2);
3800   auto param38 = model->addOperand(&type2);
3801   auto param39 = model->addOperand(&type2);
3802   auto param40 = model->addOperand(&type2);
3803   auto param41 = model->addOperand(&type2);
3804   auto layout = model->addOperand(&type0);
3805   auto op44 = model->addOperand(&type25);
3806   // Phase 2, operations
3807   static int32_t param36_init[] = {1};
3808   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3809   static int32_t param37_init[] = {2};
3810   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3811   static int32_t param38_init[] = {2};
3812   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3813   static int32_t param39_init[] = {2};
3814   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3815   static int32_t param40_init[] = {2};
3816   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3817   static int32_t param41_init[] = {0};
3818   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3819   static bool8 layout_init[] = {false};
3820   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3821   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3822   // Phase 3, inputs and outputs
3823   model->identifyInputsAndOutputs(
3824     {op14},
3825     {op44});
3826   assert(model->isValid());
3827 }
3828 
is_ignored_dynamic_output_shape_nhwc_float16_5(int i)3829 inline bool is_ignored_dynamic_output_shape_nhwc_float16_5(int i) {
3830   static std::set<int> ignore = {};
3831   return ignore.find(i) != ignore.end();
3832 }
3833 
CreateModel_dynamic_output_shape_nhwc_quant8_5(Model * model)3834 void CreateModel_dynamic_output_shape_nhwc_quant8_5(Model *model) {
3835   OperandType type0(Type::BOOL, {});
3836   OperandType type2(Type::INT32, {});
3837   OperandType type47(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.25f, 0);
3838   OperandType type50(Type::TENSOR_QUANT8_ASYMM, {1, 2, 4, 1}, 0.25f, 0);
3839   // Phase 1, operands
3840   auto op14 = model->addOperand(&type50);
3841   auto param36 = model->addOperand(&type2);
3842   auto param37 = model->addOperand(&type2);
3843   auto param38 = model->addOperand(&type2);
3844   auto param39 = model->addOperand(&type2);
3845   auto param40 = model->addOperand(&type2);
3846   auto param41 = model->addOperand(&type2);
3847   auto layout = model->addOperand(&type0);
3848   auto op44 = model->addOperand(&type47);
3849   // Phase 2, operations
3850   static int32_t param36_init[] = {1};
3851   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3852   static int32_t param37_init[] = {2};
3853   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3854   static int32_t param38_init[] = {2};
3855   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3856   static int32_t param39_init[] = {2};
3857   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3858   static int32_t param40_init[] = {2};
3859   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3860   static int32_t param41_init[] = {0};
3861   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3862   static bool8 layout_init[] = {false};
3863   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3864   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3865   // Phase 3, inputs and outputs
3866   model->identifyInputsAndOutputs(
3867     {op14},
3868     {op44});
3869   assert(model->isValid());
3870 }
3871 
is_ignored_dynamic_output_shape_nhwc_quant8_5(int i)3872 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_5(int i) {
3873   static std::set<int> ignore = {};
3874   return ignore.find(i) != ignore.end();
3875 }
3876 
CreateModel_dynamic_output_shape_nchw_5(Model * model)3877 void CreateModel_dynamic_output_shape_nchw_5(Model *model) {
3878   OperandType type0(Type::BOOL, {});
3879   OperandType type2(Type::INT32, {});
3880   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
3881   OperandType type52(Type::TENSOR_FLOAT32, {1, 1, 2, 4});
3882   // Phase 1, operands
3883   auto op14 = model->addOperand(&type52);
3884   auto param36 = model->addOperand(&type2);
3885   auto param37 = model->addOperand(&type2);
3886   auto param38 = model->addOperand(&type2);
3887   auto param39 = model->addOperand(&type2);
3888   auto param40 = model->addOperand(&type2);
3889   auto param41 = model->addOperand(&type2);
3890   auto layout = model->addOperand(&type0);
3891   auto op44 = model->addOperand(&type24);
3892   // Phase 2, operations
3893   static int32_t param36_init[] = {1};
3894   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3895   static int32_t param37_init[] = {2};
3896   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3897   static int32_t param38_init[] = {2};
3898   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3899   static int32_t param39_init[] = {2};
3900   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3901   static int32_t param40_init[] = {2};
3902   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3903   static int32_t param41_init[] = {0};
3904   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3905   static bool8 layout_init[] = {true};
3906   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3907   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3908   // Phase 3, inputs and outputs
3909   model->identifyInputsAndOutputs(
3910     {op14},
3911     {op44});
3912   assert(model->isValid());
3913 }
3914 
is_ignored_dynamic_output_shape_nchw_5(int i)3915 inline bool is_ignored_dynamic_output_shape_nchw_5(int i) {
3916   static std::set<int> ignore = {};
3917   return ignore.find(i) != ignore.end();
3918 }
3919 
CreateModel_dynamic_output_shape_nchw_relaxed_5(Model * model)3920 void CreateModel_dynamic_output_shape_nchw_relaxed_5(Model *model) {
3921   OperandType type0(Type::BOOL, {});
3922   OperandType type2(Type::INT32, {});
3923   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
3924   OperandType type52(Type::TENSOR_FLOAT32, {1, 1, 2, 4});
3925   // Phase 1, operands
3926   auto op14 = model->addOperand(&type52);
3927   auto param36 = model->addOperand(&type2);
3928   auto param37 = model->addOperand(&type2);
3929   auto param38 = model->addOperand(&type2);
3930   auto param39 = model->addOperand(&type2);
3931   auto param40 = model->addOperand(&type2);
3932   auto param41 = model->addOperand(&type2);
3933   auto layout = model->addOperand(&type0);
3934   auto op44 = model->addOperand(&type24);
3935   // Phase 2, operations
3936   static int32_t param36_init[] = {1};
3937   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3938   static int32_t param37_init[] = {2};
3939   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3940   static int32_t param38_init[] = {2};
3941   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3942   static int32_t param39_init[] = {2};
3943   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3944   static int32_t param40_init[] = {2};
3945   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3946   static int32_t param41_init[] = {0};
3947   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3948   static bool8 layout_init[] = {true};
3949   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3950   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3951   // Phase 3, inputs and outputs
3952   model->identifyInputsAndOutputs(
3953     {op14},
3954     {op44});
3955   // Phase 4: set relaxed execution
3956   model->relaxComputationFloat32toFloat16(true);
3957   assert(model->isValid());
3958 }
3959 
is_ignored_dynamic_output_shape_nchw_relaxed_5(int i)3960 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_5(int i) {
3961   static std::set<int> ignore = {};
3962   return ignore.find(i) != ignore.end();
3963 }
3964 
CreateModel_dynamic_output_shape_nchw_float16_5(Model * model)3965 void CreateModel_dynamic_output_shape_nchw_float16_5(Model *model) {
3966   OperandType type0(Type::BOOL, {});
3967   OperandType type2(Type::INT32, {});
3968   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
3969   OperandType type54(Type::TENSOR_FLOAT16, {1, 1, 2, 4});
3970   // Phase 1, operands
3971   auto op14 = model->addOperand(&type54);
3972   auto param36 = model->addOperand(&type2);
3973   auto param37 = model->addOperand(&type2);
3974   auto param38 = model->addOperand(&type2);
3975   auto param39 = model->addOperand(&type2);
3976   auto param40 = model->addOperand(&type2);
3977   auto param41 = model->addOperand(&type2);
3978   auto layout = model->addOperand(&type0);
3979   auto op44 = model->addOperand(&type25);
3980   // Phase 2, operations
3981   static int32_t param36_init[] = {1};
3982   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
3983   static int32_t param37_init[] = {2};
3984   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
3985   static int32_t param38_init[] = {2};
3986   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
3987   static int32_t param39_init[] = {2};
3988   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
3989   static int32_t param40_init[] = {2};
3990   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
3991   static int32_t param41_init[] = {0};
3992   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
3993   static bool8 layout_init[] = {true};
3994   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
3995   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
3996   // Phase 3, inputs and outputs
3997   model->identifyInputsAndOutputs(
3998     {op14},
3999     {op44});
4000   assert(model->isValid());
4001 }
4002 
is_ignored_dynamic_output_shape_nchw_float16_5(int i)4003 inline bool is_ignored_dynamic_output_shape_nchw_float16_5(int i) {
4004   static std::set<int> ignore = {};
4005   return ignore.find(i) != ignore.end();
4006 }
4007 
CreateModel_dynamic_output_shape_nchw_quant8_5(Model * model)4008 void CreateModel_dynamic_output_shape_nchw_quant8_5(Model *model) {
4009   OperandType type0(Type::BOOL, {});
4010   OperandType type2(Type::INT32, {});
4011   OperandType type47(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.25f, 0);
4012   OperandType type56(Type::TENSOR_QUANT8_ASYMM, {1, 1, 2, 4}, 0.25f, 0);
4013   // Phase 1, operands
4014   auto op14 = model->addOperand(&type56);
4015   auto param36 = model->addOperand(&type2);
4016   auto param37 = model->addOperand(&type2);
4017   auto param38 = model->addOperand(&type2);
4018   auto param39 = model->addOperand(&type2);
4019   auto param40 = model->addOperand(&type2);
4020   auto param41 = model->addOperand(&type2);
4021   auto layout = model->addOperand(&type0);
4022   auto op44 = model->addOperand(&type47);
4023   // Phase 2, operations
4024   static int32_t param36_init[] = {1};
4025   model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1);
4026   static int32_t param37_init[] = {2};
4027   model->setOperandValue(param37, param37_init, sizeof(int32_t) * 1);
4028   static int32_t param38_init[] = {2};
4029   model->setOperandValue(param38, param38_init, sizeof(int32_t) * 1);
4030   static int32_t param39_init[] = {2};
4031   model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1);
4032   static int32_t param40_init[] = {2};
4033   model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1);
4034   static int32_t param41_init[] = {0};
4035   model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1);
4036   static bool8 layout_init[] = {true};
4037   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4038   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {op14, param36, param37, param38, param39, param40, param41, layout}, {op44});
4039   // Phase 3, inputs and outputs
4040   model->identifyInputsAndOutputs(
4041     {op14},
4042     {op44});
4043   assert(model->isValid());
4044 }
4045 
is_ignored_dynamic_output_shape_nchw_quant8_5(int i)4046 inline bool is_ignored_dynamic_output_shape_nchw_quant8_5(int i) {
4047   static std::set<int> ignore = {};
4048   return ignore.find(i) != ignore.end();
4049 }
4050 
CreateModel_zero_sized_nhwc(Model * model)4051 void CreateModel_zero_sized_nhwc(Model *model) {
4052   OperandType type0(Type::BOOL, {});
4053   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
4054   OperandType type11(Type::TENSOR_FLOAT32, {0});
4055   OperandType type12(Type::TENSOR_INT32, {0});
4056   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
4057   OperandType type14(Type::TENSOR_INT32, {1});
4058   OperandType type15(Type::FLOAT32, {});
4059   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
4060   OperandType type17(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
4061   OperandType type18(Type::TENSOR_FLOAT32, {0, 1, 1, 1});
4062   OperandType type2(Type::INT32, {});
4063   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
4064   // Phase 1, operands
4065   auto scores = model->addOperand(&type9);
4066   auto roi = model->addOperand(&type10);
4067   auto param42 = model->addOperand(&type14);
4068   auto param43 = model->addOperand(&type15);
4069   auto param44 = model->addOperand(&type2);
4070   auto param45 = model->addOperand(&type2);
4071   auto param46 = model->addOperand(&type15);
4072   auto param47 = model->addOperand(&type15);
4073   auto param48 = model->addOperand(&type15);
4074   auto scoresOut = model->addOperand(&type11);
4075   auto roiOut = model->addOperand(&type13);
4076   auto classesOut = model->addOperand(&type12);
4077   auto batchSplitOut = model->addOperand(&type12);
4078   auto in = model->addOperand(&type16);
4079   auto param49 = model->addOperand(&type2);
4080   auto param50 = model->addOperand(&type2);
4081   auto param51 = model->addOperand(&type15);
4082   auto param52 = model->addOperand(&type15);
4083   auto param53 = model->addOperand(&type2);
4084   auto param54 = model->addOperand(&type2);
4085   auto layout = model->addOperand(&type0);
4086   auto featureMap = model->addOperand(&type17);
4087   auto param55 = model->addOperand(&type2);
4088   auto param56 = model->addOperand(&type2);
4089   auto param57 = model->addOperand(&type2);
4090   auto param58 = model->addOperand(&type2);
4091   auto param59 = model->addOperand(&type2);
4092   auto param60 = model->addOperand(&type2);
4093   auto param61 = model->addOperand(&type2);
4094   auto param62 = model->addOperand(&type2);
4095   auto param63 = model->addOperand(&type2);
4096   auto out = model->addOperand(&type18);
4097   // Phase 2, operations
4098   static float scores_init[] = {0.9f, 0.1f};
4099   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
4100   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4101   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
4102   static int32_t param42_init[] = {0};
4103   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
4104   static float param43_init[] = {0.3f};
4105   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4106   static int32_t param44_init[] = {-1};
4107   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4108   static int32_t param45_init[] = {0};
4109   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4110   static float param46_init[] = {0.4f};
4111   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
4112   static float param47_init[] = {1.0f};
4113   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
4114   static float param48_init[] = {0.3f};
4115   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
4116   static int32_t param49_init[] = {2};
4117   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4118   static int32_t param50_init[] = {2};
4119   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4120   static float param51_init[] = {2.0f};
4121   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
4122   static float param52_init[] = {2.0f};
4123   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
4124   static int32_t param53_init[] = {4};
4125   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4126   static int32_t param54_init[] = {4};
4127   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4128   static bool8 layout_init[] = {false};
4129   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4130   static int32_t param55_init[] = {0};
4131   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
4132   static int32_t param56_init[] = {0};
4133   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
4134   static int32_t param57_init[] = {0};
4135   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
4136   static int32_t param58_init[] = {0};
4137   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
4138   static int32_t param59_init[] = {1};
4139   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
4140   static int32_t param60_init[] = {1};
4141   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
4142   static int32_t param61_init[] = {2};
4143   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
4144   static int32_t param62_init[] = {2};
4145   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
4146   static int32_t param63_init[] = {0};
4147   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
4148   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
4149   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
4150   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
4151   // Phase 3, inputs and outputs
4152   model->identifyInputsAndOutputs(
4153     {in},
4154     {scoresOut, classesOut, out});
4155   assert(model->isValid());
4156 }
4157 
is_ignored_zero_sized_nhwc(int i)4158 inline bool is_ignored_zero_sized_nhwc(int i) {
4159   static std::set<int> ignore = {};
4160   return ignore.find(i) != ignore.end();
4161 }
4162 
CreateModel_zero_sized_nhwc_relaxed(Model * model)4163 void CreateModel_zero_sized_nhwc_relaxed(Model *model) {
4164   OperandType type0(Type::BOOL, {});
4165   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
4166   OperandType type11(Type::TENSOR_FLOAT32, {0});
4167   OperandType type12(Type::TENSOR_INT32, {0});
4168   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
4169   OperandType type14(Type::TENSOR_INT32, {1});
4170   OperandType type15(Type::FLOAT32, {});
4171   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
4172   OperandType type17(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
4173   OperandType type18(Type::TENSOR_FLOAT32, {0, 1, 1, 1});
4174   OperandType type2(Type::INT32, {});
4175   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
4176   // Phase 1, operands
4177   auto scores = model->addOperand(&type9);
4178   auto roi = model->addOperand(&type10);
4179   auto param42 = model->addOperand(&type14);
4180   auto param43 = model->addOperand(&type15);
4181   auto param44 = model->addOperand(&type2);
4182   auto param45 = model->addOperand(&type2);
4183   auto param46 = model->addOperand(&type15);
4184   auto param47 = model->addOperand(&type15);
4185   auto param48 = model->addOperand(&type15);
4186   auto scoresOut = model->addOperand(&type11);
4187   auto roiOut = model->addOperand(&type13);
4188   auto classesOut = model->addOperand(&type12);
4189   auto batchSplitOut = model->addOperand(&type12);
4190   auto in = model->addOperand(&type16);
4191   auto param49 = model->addOperand(&type2);
4192   auto param50 = model->addOperand(&type2);
4193   auto param51 = model->addOperand(&type15);
4194   auto param52 = model->addOperand(&type15);
4195   auto param53 = model->addOperand(&type2);
4196   auto param54 = model->addOperand(&type2);
4197   auto layout = model->addOperand(&type0);
4198   auto featureMap = model->addOperand(&type17);
4199   auto param55 = model->addOperand(&type2);
4200   auto param56 = model->addOperand(&type2);
4201   auto param57 = model->addOperand(&type2);
4202   auto param58 = model->addOperand(&type2);
4203   auto param59 = model->addOperand(&type2);
4204   auto param60 = model->addOperand(&type2);
4205   auto param61 = model->addOperand(&type2);
4206   auto param62 = model->addOperand(&type2);
4207   auto param63 = model->addOperand(&type2);
4208   auto out = model->addOperand(&type18);
4209   // Phase 2, operations
4210   static float scores_init[] = {0.9f, 0.1f};
4211   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
4212   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4213   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
4214   static int32_t param42_init[] = {0};
4215   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
4216   static float param43_init[] = {0.3f};
4217   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4218   static int32_t param44_init[] = {-1};
4219   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4220   static int32_t param45_init[] = {0};
4221   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4222   static float param46_init[] = {0.4f};
4223   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
4224   static float param47_init[] = {1.0f};
4225   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
4226   static float param48_init[] = {0.3f};
4227   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
4228   static int32_t param49_init[] = {2};
4229   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4230   static int32_t param50_init[] = {2};
4231   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4232   static float param51_init[] = {2.0f};
4233   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
4234   static float param52_init[] = {2.0f};
4235   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
4236   static int32_t param53_init[] = {4};
4237   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4238   static int32_t param54_init[] = {4};
4239   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4240   static bool8 layout_init[] = {false};
4241   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4242   static int32_t param55_init[] = {0};
4243   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
4244   static int32_t param56_init[] = {0};
4245   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
4246   static int32_t param57_init[] = {0};
4247   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
4248   static int32_t param58_init[] = {0};
4249   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
4250   static int32_t param59_init[] = {1};
4251   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
4252   static int32_t param60_init[] = {1};
4253   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
4254   static int32_t param61_init[] = {2};
4255   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
4256   static int32_t param62_init[] = {2};
4257   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
4258   static int32_t param63_init[] = {0};
4259   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
4260   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
4261   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
4262   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
4263   // Phase 3, inputs and outputs
4264   model->identifyInputsAndOutputs(
4265     {in},
4266     {scoresOut, classesOut, out});
4267   // Phase 4: set relaxed execution
4268   model->relaxComputationFloat32toFloat16(true);
4269   assert(model->isValid());
4270 }
4271 
is_ignored_zero_sized_nhwc_relaxed(int i)4272 inline bool is_ignored_zero_sized_nhwc_relaxed(int i) {
4273   static std::set<int> ignore = {};
4274   return ignore.find(i) != ignore.end();
4275 }
4276 
CreateModel_zero_sized_nhwc_quant8(Model * model)4277 void CreateModel_zero_sized_nhwc_quant8(Model *model) {
4278   OperandType type0(Type::BOOL, {});
4279   OperandType type12(Type::TENSOR_INT32, {0});
4280   OperandType type14(Type::TENSOR_INT32, {1});
4281   OperandType type15(Type::FLOAT32, {});
4282   OperandType type2(Type::INT32, {});
4283   OperandType type58(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 1}, 0.1f, 128);
4284   OperandType type59(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
4285   OperandType type60(Type::TENSOR_QUANT8_ASYMM, {0, 1, 1, 1}, 0.1f, 128);
4286   OperandType type61(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
4287   OperandType type62(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
4288   OperandType type63(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
4289   OperandType type64(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
4290   // Phase 1, operands
4291   auto scores = model->addOperand(&type63);
4292   auto roi = model->addOperand(&type61);
4293   auto param42 = model->addOperand(&type14);
4294   auto param43 = model->addOperand(&type15);
4295   auto param44 = model->addOperand(&type2);
4296   auto param45 = model->addOperand(&type2);
4297   auto param46 = model->addOperand(&type15);
4298   auto param47 = model->addOperand(&type15);
4299   auto param48 = model->addOperand(&type15);
4300   auto scoresOut = model->addOperand(&type64);
4301   auto roiOut = model->addOperand(&type62);
4302   auto classesOut = model->addOperand(&type12);
4303   auto batchSplitOut = model->addOperand(&type12);
4304   auto in = model->addOperand(&type59);
4305   auto param49 = model->addOperand(&type2);
4306   auto param50 = model->addOperand(&type2);
4307   auto param51 = model->addOperand(&type15);
4308   auto param52 = model->addOperand(&type15);
4309   auto param53 = model->addOperand(&type2);
4310   auto param54 = model->addOperand(&type2);
4311   auto layout = model->addOperand(&type0);
4312   auto featureMap = model->addOperand(&type58);
4313   auto param55 = model->addOperand(&type2);
4314   auto param56 = model->addOperand(&type2);
4315   auto param57 = model->addOperand(&type2);
4316   auto param58 = model->addOperand(&type2);
4317   auto param59 = model->addOperand(&type2);
4318   auto param60 = model->addOperand(&type2);
4319   auto param61 = model->addOperand(&type2);
4320   auto param62 = model->addOperand(&type2);
4321   auto param63 = model->addOperand(&type2);
4322   auto out = model->addOperand(&type60);
4323   // Phase 2, operations
4324   static uint8_t scores_init[] = {137, 129};
4325   model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2);
4326   static uint16_t roi_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
4327   model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8);
4328   static int32_t param42_init[] = {0};
4329   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
4330   static float param43_init[] = {0.3f};
4331   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4332   static int32_t param44_init[] = {-1};
4333   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4334   static int32_t param45_init[] = {0};
4335   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4336   static float param46_init[] = {0.4f};
4337   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
4338   static float param47_init[] = {1.0f};
4339   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
4340   static float param48_init[] = {0.3f};
4341   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
4342   static int32_t param49_init[] = {2};
4343   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4344   static int32_t param50_init[] = {2};
4345   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4346   static float param51_init[] = {2.0f};
4347   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
4348   static float param52_init[] = {2.0f};
4349   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
4350   static int32_t param53_init[] = {4};
4351   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4352   static int32_t param54_init[] = {4};
4353   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4354   static bool8 layout_init[] = {false};
4355   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4356   static int32_t param55_init[] = {0};
4357   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
4358   static int32_t param56_init[] = {0};
4359   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
4360   static int32_t param57_init[] = {0};
4361   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
4362   static int32_t param58_init[] = {0};
4363   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
4364   static int32_t param59_init[] = {1};
4365   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
4366   static int32_t param60_init[] = {1};
4367   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
4368   static int32_t param61_init[] = {2};
4369   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
4370   static int32_t param62_init[] = {2};
4371   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
4372   static int32_t param63_init[] = {0};
4373   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
4374   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
4375   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
4376   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
4377   // Phase 3, inputs and outputs
4378   model->identifyInputsAndOutputs(
4379     {in},
4380     {scoresOut, classesOut, out});
4381   assert(model->isValid());
4382 }
4383 
is_ignored_zero_sized_nhwc_quant8(int i)4384 inline bool is_ignored_zero_sized_nhwc_quant8(int i) {
4385   static std::set<int> ignore = {};
4386   return ignore.find(i) != ignore.end();
4387 }
4388 
CreateModel_zero_sized_nhwc_float16(Model * model)4389 void CreateModel_zero_sized_nhwc_float16(Model *model) {
4390   OperandType type0(Type::BOOL, {});
4391   OperandType type12(Type::TENSOR_INT32, {0});
4392   OperandType type14(Type::TENSOR_INT32, {1});
4393   OperandType type2(Type::INT32, {});
4394   OperandType type65(Type::TENSOR_FLOAT16, {0, 2, 2, 1});
4395   OperandType type66(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
4396   OperandType type67(Type::TENSOR_FLOAT16, {0, 1, 1, 1});
4397   OperandType type68(Type::FLOAT16, {});
4398   OperandType type69(Type::TENSOR_FLOAT16, {1, 8});
4399   OperandType type70(Type::TENSOR_FLOAT16, {0, 4});
4400   OperandType type71(Type::TENSOR_FLOAT16, {1, 2});
4401   OperandType type72(Type::TENSOR_FLOAT16, {0});
4402   // Phase 1, operands
4403   auto scores = model->addOperand(&type71);
4404   auto roi = model->addOperand(&type69);
4405   auto param42 = model->addOperand(&type14);
4406   auto param43 = model->addOperand(&type68);
4407   auto param44 = model->addOperand(&type2);
4408   auto param45 = model->addOperand(&type2);
4409   auto param46 = model->addOperand(&type68);
4410   auto param47 = model->addOperand(&type68);
4411   auto param48 = model->addOperand(&type68);
4412   auto scoresOut = model->addOperand(&type72);
4413   auto roiOut = model->addOperand(&type70);
4414   auto classesOut = model->addOperand(&type12);
4415   auto batchSplitOut = model->addOperand(&type12);
4416   auto in = model->addOperand(&type66);
4417   auto param49 = model->addOperand(&type2);
4418   auto param50 = model->addOperand(&type2);
4419   auto param51 = model->addOperand(&type68);
4420   auto param52 = model->addOperand(&type68);
4421   auto param53 = model->addOperand(&type2);
4422   auto param54 = model->addOperand(&type2);
4423   auto layout = model->addOperand(&type0);
4424   auto featureMap = model->addOperand(&type65);
4425   auto param55 = model->addOperand(&type2);
4426   auto param56 = model->addOperand(&type2);
4427   auto param57 = model->addOperand(&type2);
4428   auto param58 = model->addOperand(&type2);
4429   auto param59 = model->addOperand(&type2);
4430   auto param60 = model->addOperand(&type2);
4431   auto param61 = model->addOperand(&type2);
4432   auto param62 = model->addOperand(&type2);
4433   auto param63 = model->addOperand(&type2);
4434   auto out = model->addOperand(&type67);
4435   // Phase 2, operations
4436   static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f};
4437   model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2);
4438   static _Float16 roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4439   model->setOperandValue(roi, roi_init, sizeof(_Float16) * 8);
4440   static int32_t param42_init[] = {0};
4441   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
4442   static _Float16 param43_init[] = {0.30000001192092896f};
4443   model->setOperandValue(param43, param43_init, sizeof(_Float16) * 1);
4444   static int32_t param44_init[] = {-1};
4445   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4446   static int32_t param45_init[] = {0};
4447   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4448   static _Float16 param46_init[] = {0.4000000059604645f};
4449   model->setOperandValue(param46, param46_init, sizeof(_Float16) * 1);
4450   static _Float16 param47_init[] = {1.0f};
4451   model->setOperandValue(param47, param47_init, sizeof(_Float16) * 1);
4452   static _Float16 param48_init[] = {0.30000001192092896f};
4453   model->setOperandValue(param48, param48_init, sizeof(_Float16) * 1);
4454   static int32_t param49_init[] = {2};
4455   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4456   static int32_t param50_init[] = {2};
4457   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4458   static _Float16 param51_init[] = {2.0f};
4459   model->setOperandValue(param51, param51_init, sizeof(_Float16) * 1);
4460   static _Float16 param52_init[] = {2.0f};
4461   model->setOperandValue(param52, param52_init, sizeof(_Float16) * 1);
4462   static int32_t param53_init[] = {4};
4463   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4464   static int32_t param54_init[] = {4};
4465   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4466   static bool8 layout_init[] = {false};
4467   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4468   static int32_t param55_init[] = {0};
4469   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
4470   static int32_t param56_init[] = {0};
4471   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
4472   static int32_t param57_init[] = {0};
4473   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
4474   static int32_t param58_init[] = {0};
4475   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
4476   static int32_t param59_init[] = {1};
4477   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
4478   static int32_t param60_init[] = {1};
4479   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
4480   static int32_t param61_init[] = {2};
4481   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
4482   static int32_t param62_init[] = {2};
4483   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
4484   static int32_t param63_init[] = {0};
4485   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
4486   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
4487   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
4488   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
4489   // Phase 3, inputs and outputs
4490   model->identifyInputsAndOutputs(
4491     {in},
4492     {scoresOut, classesOut, out});
4493   assert(model->isValid());
4494 }
4495 
is_ignored_zero_sized_nhwc_float16(int i)4496 inline bool is_ignored_zero_sized_nhwc_float16(int i) {
4497   static std::set<int> ignore = {};
4498   return ignore.find(i) != ignore.end();
4499 }
4500 
CreateModel_zero_sized_nchw(Model * model)4501 void CreateModel_zero_sized_nchw(Model *model) {
4502   OperandType type0(Type::BOOL, {});
4503   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
4504   OperandType type11(Type::TENSOR_FLOAT32, {0});
4505   OperandType type12(Type::TENSOR_INT32, {0});
4506   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
4507   OperandType type14(Type::TENSOR_INT32, {1});
4508   OperandType type15(Type::FLOAT32, {});
4509   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
4510   OperandType type18(Type::TENSOR_FLOAT32, {0, 1, 1, 1});
4511   OperandType type2(Type::INT32, {});
4512   OperandType type73(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
4513   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
4514   // Phase 1, operands
4515   auto scores = model->addOperand(&type9);
4516   auto roi = model->addOperand(&type10);
4517   auto param42 = model->addOperand(&type14);
4518   auto param43 = model->addOperand(&type15);
4519   auto param44 = model->addOperand(&type2);
4520   auto param45 = model->addOperand(&type2);
4521   auto param46 = model->addOperand(&type15);
4522   auto param47 = model->addOperand(&type15);
4523   auto param48 = model->addOperand(&type15);
4524   auto scoresOut = model->addOperand(&type11);
4525   auto roiOut = model->addOperand(&type13);
4526   auto classesOut = model->addOperand(&type12);
4527   auto batchSplitOut = model->addOperand(&type12);
4528   auto in = model->addOperand(&type16);
4529   auto param49 = model->addOperand(&type2);
4530   auto param50 = model->addOperand(&type2);
4531   auto param51 = model->addOperand(&type15);
4532   auto param52 = model->addOperand(&type15);
4533   auto param53 = model->addOperand(&type2);
4534   auto param54 = model->addOperand(&type2);
4535   auto layout = model->addOperand(&type0);
4536   auto featureMap = model->addOperand(&type73);
4537   auto param55 = model->addOperand(&type2);
4538   auto param56 = model->addOperand(&type2);
4539   auto param57 = model->addOperand(&type2);
4540   auto param58 = model->addOperand(&type2);
4541   auto param59 = model->addOperand(&type2);
4542   auto param60 = model->addOperand(&type2);
4543   auto param61 = model->addOperand(&type2);
4544   auto param62 = model->addOperand(&type2);
4545   auto param63 = model->addOperand(&type2);
4546   auto out = model->addOperand(&type18);
4547   // Phase 2, operations
4548   static float scores_init[] = {0.9f, 0.1f};
4549   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
4550   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4551   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
4552   static int32_t param42_init[] = {0};
4553   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
4554   static float param43_init[] = {0.3f};
4555   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4556   static int32_t param44_init[] = {-1};
4557   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4558   static int32_t param45_init[] = {0};
4559   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4560   static float param46_init[] = {0.4f};
4561   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
4562   static float param47_init[] = {1.0f};
4563   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
4564   static float param48_init[] = {0.3f};
4565   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
4566   static int32_t param49_init[] = {2};
4567   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4568   static int32_t param50_init[] = {2};
4569   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4570   static float param51_init[] = {2.0f};
4571   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
4572   static float param52_init[] = {2.0f};
4573   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
4574   static int32_t param53_init[] = {4};
4575   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4576   static int32_t param54_init[] = {4};
4577   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4578   static bool8 layout_init[] = {true};
4579   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4580   static int32_t param55_init[] = {0};
4581   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
4582   static int32_t param56_init[] = {0};
4583   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
4584   static int32_t param57_init[] = {0};
4585   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
4586   static int32_t param58_init[] = {0};
4587   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
4588   static int32_t param59_init[] = {1};
4589   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
4590   static int32_t param60_init[] = {1};
4591   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
4592   static int32_t param61_init[] = {2};
4593   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
4594   static int32_t param62_init[] = {2};
4595   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
4596   static int32_t param63_init[] = {0};
4597   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
4598   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
4599   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
4600   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
4601   // Phase 3, inputs and outputs
4602   model->identifyInputsAndOutputs(
4603     {in},
4604     {scoresOut, classesOut, out});
4605   assert(model->isValid());
4606 }
4607 
is_ignored_zero_sized_nchw(int i)4608 inline bool is_ignored_zero_sized_nchw(int i) {
4609   static std::set<int> ignore = {};
4610   return ignore.find(i) != ignore.end();
4611 }
4612 
CreateModel_zero_sized_nchw_relaxed(Model * model)4613 void CreateModel_zero_sized_nchw_relaxed(Model *model) {
4614   OperandType type0(Type::BOOL, {});
4615   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
4616   OperandType type11(Type::TENSOR_FLOAT32, {0});
4617   OperandType type12(Type::TENSOR_INT32, {0});
4618   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
4619   OperandType type14(Type::TENSOR_INT32, {1});
4620   OperandType type15(Type::FLOAT32, {});
4621   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
4622   OperandType type18(Type::TENSOR_FLOAT32, {0, 1, 1, 1});
4623   OperandType type2(Type::INT32, {});
4624   OperandType type73(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
4625   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
4626   // Phase 1, operands
4627   auto scores = model->addOperand(&type9);
4628   auto roi = model->addOperand(&type10);
4629   auto param42 = model->addOperand(&type14);
4630   auto param43 = model->addOperand(&type15);
4631   auto param44 = model->addOperand(&type2);
4632   auto param45 = model->addOperand(&type2);
4633   auto param46 = model->addOperand(&type15);
4634   auto param47 = model->addOperand(&type15);
4635   auto param48 = model->addOperand(&type15);
4636   auto scoresOut = model->addOperand(&type11);
4637   auto roiOut = model->addOperand(&type13);
4638   auto classesOut = model->addOperand(&type12);
4639   auto batchSplitOut = model->addOperand(&type12);
4640   auto in = model->addOperand(&type16);
4641   auto param49 = model->addOperand(&type2);
4642   auto param50 = model->addOperand(&type2);
4643   auto param51 = model->addOperand(&type15);
4644   auto param52 = model->addOperand(&type15);
4645   auto param53 = model->addOperand(&type2);
4646   auto param54 = model->addOperand(&type2);
4647   auto layout = model->addOperand(&type0);
4648   auto featureMap = model->addOperand(&type73);
4649   auto param55 = model->addOperand(&type2);
4650   auto param56 = model->addOperand(&type2);
4651   auto param57 = model->addOperand(&type2);
4652   auto param58 = model->addOperand(&type2);
4653   auto param59 = model->addOperand(&type2);
4654   auto param60 = model->addOperand(&type2);
4655   auto param61 = model->addOperand(&type2);
4656   auto param62 = model->addOperand(&type2);
4657   auto param63 = model->addOperand(&type2);
4658   auto out = model->addOperand(&type18);
4659   // Phase 2, operations
4660   static float scores_init[] = {0.9f, 0.1f};
4661   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
4662   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4663   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
4664   static int32_t param42_init[] = {0};
4665   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
4666   static float param43_init[] = {0.3f};
4667   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4668   static int32_t param44_init[] = {-1};
4669   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4670   static int32_t param45_init[] = {0};
4671   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4672   static float param46_init[] = {0.4f};
4673   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
4674   static float param47_init[] = {1.0f};
4675   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
4676   static float param48_init[] = {0.3f};
4677   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
4678   static int32_t param49_init[] = {2};
4679   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4680   static int32_t param50_init[] = {2};
4681   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4682   static float param51_init[] = {2.0f};
4683   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
4684   static float param52_init[] = {2.0f};
4685   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
4686   static int32_t param53_init[] = {4};
4687   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4688   static int32_t param54_init[] = {4};
4689   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4690   static bool8 layout_init[] = {true};
4691   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4692   static int32_t param55_init[] = {0};
4693   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
4694   static int32_t param56_init[] = {0};
4695   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
4696   static int32_t param57_init[] = {0};
4697   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
4698   static int32_t param58_init[] = {0};
4699   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
4700   static int32_t param59_init[] = {1};
4701   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
4702   static int32_t param60_init[] = {1};
4703   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
4704   static int32_t param61_init[] = {2};
4705   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
4706   static int32_t param62_init[] = {2};
4707   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
4708   static int32_t param63_init[] = {0};
4709   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
4710   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
4711   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
4712   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
4713   // Phase 3, inputs and outputs
4714   model->identifyInputsAndOutputs(
4715     {in},
4716     {scoresOut, classesOut, out});
4717   // Phase 4: set relaxed execution
4718   model->relaxComputationFloat32toFloat16(true);
4719   assert(model->isValid());
4720 }
4721 
is_ignored_zero_sized_nchw_relaxed(int i)4722 inline bool is_ignored_zero_sized_nchw_relaxed(int i) {
4723   static std::set<int> ignore = {};
4724   return ignore.find(i) != ignore.end();
4725 }
4726 
CreateModel_zero_sized_nchw_quant8(Model * model)4727 void CreateModel_zero_sized_nchw_quant8(Model *model) {
4728   OperandType type0(Type::BOOL, {});
4729   OperandType type12(Type::TENSOR_INT32, {0});
4730   OperandType type14(Type::TENSOR_INT32, {1});
4731   OperandType type15(Type::FLOAT32, {});
4732   OperandType type2(Type::INT32, {});
4733   OperandType type59(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
4734   OperandType type60(Type::TENSOR_QUANT8_ASYMM, {0, 1, 1, 1}, 0.1f, 128);
4735   OperandType type61(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
4736   OperandType type62(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
4737   OperandType type63(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
4738   OperandType type64(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
4739   OperandType type74(Type::TENSOR_QUANT8_ASYMM, {0, 1, 2, 2}, 0.1f, 128);
4740   // Phase 1, operands
4741   auto scores = model->addOperand(&type63);
4742   auto roi = model->addOperand(&type61);
4743   auto param42 = model->addOperand(&type14);
4744   auto param43 = model->addOperand(&type15);
4745   auto param44 = model->addOperand(&type2);
4746   auto param45 = model->addOperand(&type2);
4747   auto param46 = model->addOperand(&type15);
4748   auto param47 = model->addOperand(&type15);
4749   auto param48 = model->addOperand(&type15);
4750   auto scoresOut = model->addOperand(&type64);
4751   auto roiOut = model->addOperand(&type62);
4752   auto classesOut = model->addOperand(&type12);
4753   auto batchSplitOut = model->addOperand(&type12);
4754   auto in = model->addOperand(&type59);
4755   auto param49 = model->addOperand(&type2);
4756   auto param50 = model->addOperand(&type2);
4757   auto param51 = model->addOperand(&type15);
4758   auto param52 = model->addOperand(&type15);
4759   auto param53 = model->addOperand(&type2);
4760   auto param54 = model->addOperand(&type2);
4761   auto layout = model->addOperand(&type0);
4762   auto featureMap = model->addOperand(&type74);
4763   auto param55 = model->addOperand(&type2);
4764   auto param56 = model->addOperand(&type2);
4765   auto param57 = model->addOperand(&type2);
4766   auto param58 = model->addOperand(&type2);
4767   auto param59 = model->addOperand(&type2);
4768   auto param60 = model->addOperand(&type2);
4769   auto param61 = model->addOperand(&type2);
4770   auto param62 = model->addOperand(&type2);
4771   auto param63 = model->addOperand(&type2);
4772   auto out = model->addOperand(&type60);
4773   // Phase 2, operations
4774   static uint8_t scores_init[] = {137, 129};
4775   model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2);
4776   static uint16_t roi_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
4777   model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8);
4778   static int32_t param42_init[] = {0};
4779   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
4780   static float param43_init[] = {0.3f};
4781   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
4782   static int32_t param44_init[] = {-1};
4783   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4784   static int32_t param45_init[] = {0};
4785   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4786   static float param46_init[] = {0.4f};
4787   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
4788   static float param47_init[] = {1.0f};
4789   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
4790   static float param48_init[] = {0.3f};
4791   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
4792   static int32_t param49_init[] = {2};
4793   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4794   static int32_t param50_init[] = {2};
4795   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4796   static float param51_init[] = {2.0f};
4797   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
4798   static float param52_init[] = {2.0f};
4799   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
4800   static int32_t param53_init[] = {4};
4801   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4802   static int32_t param54_init[] = {4};
4803   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4804   static bool8 layout_init[] = {true};
4805   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4806   static int32_t param55_init[] = {0};
4807   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
4808   static int32_t param56_init[] = {0};
4809   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
4810   static int32_t param57_init[] = {0};
4811   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
4812   static int32_t param58_init[] = {0};
4813   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
4814   static int32_t param59_init[] = {1};
4815   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
4816   static int32_t param60_init[] = {1};
4817   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
4818   static int32_t param61_init[] = {2};
4819   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
4820   static int32_t param62_init[] = {2};
4821   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
4822   static int32_t param63_init[] = {0};
4823   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
4824   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
4825   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
4826   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
4827   // Phase 3, inputs and outputs
4828   model->identifyInputsAndOutputs(
4829     {in},
4830     {scoresOut, classesOut, out});
4831   assert(model->isValid());
4832 }
4833 
is_ignored_zero_sized_nchw_quant8(int i)4834 inline bool is_ignored_zero_sized_nchw_quant8(int i) {
4835   static std::set<int> ignore = {};
4836   return ignore.find(i) != ignore.end();
4837 }
4838 
CreateModel_zero_sized_nchw_float16(Model * model)4839 void CreateModel_zero_sized_nchw_float16(Model *model) {
4840   OperandType type0(Type::BOOL, {});
4841   OperandType type12(Type::TENSOR_INT32, {0});
4842   OperandType type14(Type::TENSOR_INT32, {1});
4843   OperandType type2(Type::INT32, {});
4844   OperandType type66(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
4845   OperandType type67(Type::TENSOR_FLOAT16, {0, 1, 1, 1});
4846   OperandType type68(Type::FLOAT16, {});
4847   OperandType type69(Type::TENSOR_FLOAT16, {1, 8});
4848   OperandType type70(Type::TENSOR_FLOAT16, {0, 4});
4849   OperandType type71(Type::TENSOR_FLOAT16, {1, 2});
4850   OperandType type72(Type::TENSOR_FLOAT16, {0});
4851   OperandType type75(Type::TENSOR_FLOAT16, {0, 1, 2, 2});
4852   // Phase 1, operands
4853   auto scores = model->addOperand(&type71);
4854   auto roi = model->addOperand(&type69);
4855   auto param42 = model->addOperand(&type14);
4856   auto param43 = model->addOperand(&type68);
4857   auto param44 = model->addOperand(&type2);
4858   auto param45 = model->addOperand(&type2);
4859   auto param46 = model->addOperand(&type68);
4860   auto param47 = model->addOperand(&type68);
4861   auto param48 = model->addOperand(&type68);
4862   auto scoresOut = model->addOperand(&type72);
4863   auto roiOut = model->addOperand(&type70);
4864   auto classesOut = model->addOperand(&type12);
4865   auto batchSplitOut = model->addOperand(&type12);
4866   auto in = model->addOperand(&type66);
4867   auto param49 = model->addOperand(&type2);
4868   auto param50 = model->addOperand(&type2);
4869   auto param51 = model->addOperand(&type68);
4870   auto param52 = model->addOperand(&type68);
4871   auto param53 = model->addOperand(&type2);
4872   auto param54 = model->addOperand(&type2);
4873   auto layout = model->addOperand(&type0);
4874   auto featureMap = model->addOperand(&type75);
4875   auto param55 = model->addOperand(&type2);
4876   auto param56 = model->addOperand(&type2);
4877   auto param57 = model->addOperand(&type2);
4878   auto param58 = model->addOperand(&type2);
4879   auto param59 = model->addOperand(&type2);
4880   auto param60 = model->addOperand(&type2);
4881   auto param61 = model->addOperand(&type2);
4882   auto param62 = model->addOperand(&type2);
4883   auto param63 = model->addOperand(&type2);
4884   auto out = model->addOperand(&type67);
4885   // Phase 2, operations
4886   static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f};
4887   model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2);
4888   static _Float16 roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
4889   model->setOperandValue(roi, roi_init, sizeof(_Float16) * 8);
4890   static int32_t param42_init[] = {0};
4891   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
4892   static _Float16 param43_init[] = {0.30000001192092896f};
4893   model->setOperandValue(param43, param43_init, sizeof(_Float16) * 1);
4894   static int32_t param44_init[] = {-1};
4895   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
4896   static int32_t param45_init[] = {0};
4897   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
4898   static _Float16 param46_init[] = {0.4000000059604645f};
4899   model->setOperandValue(param46, param46_init, sizeof(_Float16) * 1);
4900   static _Float16 param47_init[] = {1.0f};
4901   model->setOperandValue(param47, param47_init, sizeof(_Float16) * 1);
4902   static _Float16 param48_init[] = {0.30000001192092896f};
4903   model->setOperandValue(param48, param48_init, sizeof(_Float16) * 1);
4904   static int32_t param49_init[] = {2};
4905   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
4906   static int32_t param50_init[] = {2};
4907   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
4908   static _Float16 param51_init[] = {2.0f};
4909   model->setOperandValue(param51, param51_init, sizeof(_Float16) * 1);
4910   static _Float16 param52_init[] = {2.0f};
4911   model->setOperandValue(param52, param52_init, sizeof(_Float16) * 1);
4912   static int32_t param53_init[] = {4};
4913   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
4914   static int32_t param54_init[] = {4};
4915   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
4916   static bool8 layout_init[] = {true};
4917   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
4918   static int32_t param55_init[] = {0};
4919   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
4920   static int32_t param56_init[] = {0};
4921   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
4922   static int32_t param57_init[] = {0};
4923   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
4924   static int32_t param58_init[] = {0};
4925   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
4926   static int32_t param59_init[] = {1};
4927   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
4928   static int32_t param60_init[] = {1};
4929   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
4930   static int32_t param61_init[] = {2};
4931   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
4932   static int32_t param62_init[] = {2};
4933   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
4934   static int32_t param63_init[] = {0};
4935   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
4936   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
4937   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
4938   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
4939   // Phase 3, inputs and outputs
4940   model->identifyInputsAndOutputs(
4941     {in},
4942     {scoresOut, classesOut, out});
4943   assert(model->isValid());
4944 }
4945 
is_ignored_zero_sized_nchw_float16(int i)4946 inline bool is_ignored_zero_sized_nchw_float16(int i) {
4947   static std::set<int> ignore = {};
4948   return ignore.find(i) != ignore.end();
4949 }
4950 
CreateModel_zero_sized_dynamic_output_shape_nhwc(Model * model)4951 void CreateModel_zero_sized_dynamic_output_shape_nhwc(Model *model) {
4952   OperandType type0(Type::BOOL, {});
4953   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
4954   OperandType type11(Type::TENSOR_FLOAT32, {0});
4955   OperandType type12(Type::TENSOR_INT32, {0});
4956   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
4957   OperandType type14(Type::TENSOR_INT32, {1});
4958   OperandType type15(Type::FLOAT32, {});
4959   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
4960   OperandType type17(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
4961   OperandType type2(Type::INT32, {});
4962   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
4963   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
4964   // Phase 1, operands
4965   auto scores = model->addOperand(&type9);
4966   auto roi = model->addOperand(&type10);
4967   auto param42 = model->addOperand(&type14);
4968   auto param43 = model->addOperand(&type15);
4969   auto param44 = model->addOperand(&type2);
4970   auto param45 = model->addOperand(&type2);
4971   auto param46 = model->addOperand(&type15);
4972   auto param47 = model->addOperand(&type15);
4973   auto param48 = model->addOperand(&type15);
4974   auto scoresOut = model->addOperand(&type11);
4975   auto roiOut = model->addOperand(&type13);
4976   auto classesOut = model->addOperand(&type12);
4977   auto batchSplitOut = model->addOperand(&type12);
4978   auto in = model->addOperand(&type16);
4979   auto param49 = model->addOperand(&type2);
4980   auto param50 = model->addOperand(&type2);
4981   auto param51 = model->addOperand(&type15);
4982   auto param52 = model->addOperand(&type15);
4983   auto param53 = model->addOperand(&type2);
4984   auto param54 = model->addOperand(&type2);
4985   auto layout = model->addOperand(&type0);
4986   auto featureMap = model->addOperand(&type17);
4987   auto param55 = model->addOperand(&type2);
4988   auto param56 = model->addOperand(&type2);
4989   auto param57 = model->addOperand(&type2);
4990   auto param58 = model->addOperand(&type2);
4991   auto param59 = model->addOperand(&type2);
4992   auto param60 = model->addOperand(&type2);
4993   auto param61 = model->addOperand(&type2);
4994   auto param62 = model->addOperand(&type2);
4995   auto param63 = model->addOperand(&type2);
4996   auto out = model->addOperand(&type24);
4997   // Phase 2, operations
4998   static float scores_init[] = {0.9f, 0.1f};
4999   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
5000   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5001   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
5002   static int32_t param42_init[] = {0};
5003   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
5004   static float param43_init[] = {0.3f};
5005   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
5006   static int32_t param44_init[] = {-1};
5007   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
5008   static int32_t param45_init[] = {0};
5009   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
5010   static float param46_init[] = {0.4f};
5011   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
5012   static float param47_init[] = {1.0f};
5013   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
5014   static float param48_init[] = {0.3f};
5015   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
5016   static int32_t param49_init[] = {2};
5017   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
5018   static int32_t param50_init[] = {2};
5019   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
5020   static float param51_init[] = {2.0f};
5021   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
5022   static float param52_init[] = {2.0f};
5023   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
5024   static int32_t param53_init[] = {4};
5025   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
5026   static int32_t param54_init[] = {4};
5027   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
5028   static bool8 layout_init[] = {false};
5029   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5030   static int32_t param55_init[] = {0};
5031   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5032   static int32_t param56_init[] = {0};
5033   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
5034   static int32_t param57_init[] = {0};
5035   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5036   static int32_t param58_init[] = {0};
5037   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5038   static int32_t param59_init[] = {1};
5039   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
5040   static int32_t param60_init[] = {1};
5041   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
5042   static int32_t param61_init[] = {2};
5043   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
5044   static int32_t param62_init[] = {2};
5045   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5046   static int32_t param63_init[] = {0};
5047   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5048   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
5049   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
5050   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
5051   // Phase 3, inputs and outputs
5052   model->identifyInputsAndOutputs(
5053     {in},
5054     {scoresOut, classesOut, out});
5055   assert(model->isValid());
5056 }
5057 
is_ignored_zero_sized_dynamic_output_shape_nhwc(int i)5058 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc(int i) {
5059   static std::set<int> ignore = {};
5060   return ignore.find(i) != ignore.end();
5061 }
5062 
CreateModel_zero_sized_dynamic_output_shape_nhwc_relaxed(Model * model)5063 void CreateModel_zero_sized_dynamic_output_shape_nhwc_relaxed(Model *model) {
5064   OperandType type0(Type::BOOL, {});
5065   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
5066   OperandType type11(Type::TENSOR_FLOAT32, {0});
5067   OperandType type12(Type::TENSOR_INT32, {0});
5068   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
5069   OperandType type14(Type::TENSOR_INT32, {1});
5070   OperandType type15(Type::FLOAT32, {});
5071   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5072   OperandType type17(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
5073   OperandType type2(Type::INT32, {});
5074   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
5075   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
5076   // Phase 1, operands
5077   auto scores = model->addOperand(&type9);
5078   auto roi = model->addOperand(&type10);
5079   auto param42 = model->addOperand(&type14);
5080   auto param43 = model->addOperand(&type15);
5081   auto param44 = model->addOperand(&type2);
5082   auto param45 = model->addOperand(&type2);
5083   auto param46 = model->addOperand(&type15);
5084   auto param47 = model->addOperand(&type15);
5085   auto param48 = model->addOperand(&type15);
5086   auto scoresOut = model->addOperand(&type11);
5087   auto roiOut = model->addOperand(&type13);
5088   auto classesOut = model->addOperand(&type12);
5089   auto batchSplitOut = model->addOperand(&type12);
5090   auto in = model->addOperand(&type16);
5091   auto param49 = model->addOperand(&type2);
5092   auto param50 = model->addOperand(&type2);
5093   auto param51 = model->addOperand(&type15);
5094   auto param52 = model->addOperand(&type15);
5095   auto param53 = model->addOperand(&type2);
5096   auto param54 = model->addOperand(&type2);
5097   auto layout = model->addOperand(&type0);
5098   auto featureMap = model->addOperand(&type17);
5099   auto param55 = model->addOperand(&type2);
5100   auto param56 = model->addOperand(&type2);
5101   auto param57 = model->addOperand(&type2);
5102   auto param58 = model->addOperand(&type2);
5103   auto param59 = model->addOperand(&type2);
5104   auto param60 = model->addOperand(&type2);
5105   auto param61 = model->addOperand(&type2);
5106   auto param62 = model->addOperand(&type2);
5107   auto param63 = model->addOperand(&type2);
5108   auto out = model->addOperand(&type24);
5109   // Phase 2, operations
5110   static float scores_init[] = {0.9f, 0.1f};
5111   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
5112   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5113   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
5114   static int32_t param42_init[] = {0};
5115   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
5116   static float param43_init[] = {0.3f};
5117   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
5118   static int32_t param44_init[] = {-1};
5119   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
5120   static int32_t param45_init[] = {0};
5121   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
5122   static float param46_init[] = {0.4f};
5123   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
5124   static float param47_init[] = {1.0f};
5125   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
5126   static float param48_init[] = {0.3f};
5127   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
5128   static int32_t param49_init[] = {2};
5129   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
5130   static int32_t param50_init[] = {2};
5131   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
5132   static float param51_init[] = {2.0f};
5133   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
5134   static float param52_init[] = {2.0f};
5135   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
5136   static int32_t param53_init[] = {4};
5137   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
5138   static int32_t param54_init[] = {4};
5139   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
5140   static bool8 layout_init[] = {false};
5141   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5142   static int32_t param55_init[] = {0};
5143   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5144   static int32_t param56_init[] = {0};
5145   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
5146   static int32_t param57_init[] = {0};
5147   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5148   static int32_t param58_init[] = {0};
5149   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5150   static int32_t param59_init[] = {1};
5151   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
5152   static int32_t param60_init[] = {1};
5153   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
5154   static int32_t param61_init[] = {2};
5155   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
5156   static int32_t param62_init[] = {2};
5157   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5158   static int32_t param63_init[] = {0};
5159   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5160   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
5161   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
5162   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
5163   // Phase 3, inputs and outputs
5164   model->identifyInputsAndOutputs(
5165     {in},
5166     {scoresOut, classesOut, out});
5167   // Phase 4: set relaxed execution
5168   model->relaxComputationFloat32toFloat16(true);
5169   assert(model->isValid());
5170 }
5171 
is_ignored_zero_sized_dynamic_output_shape_nhwc_relaxed(int i)5172 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_relaxed(int i) {
5173   static std::set<int> ignore = {};
5174   return ignore.find(i) != ignore.end();
5175 }
5176 
CreateModel_zero_sized_dynamic_output_shape_nhwc_quant8(Model * model)5177 void CreateModel_zero_sized_dynamic_output_shape_nhwc_quant8(Model *model) {
5178   OperandType type0(Type::BOOL, {});
5179   OperandType type12(Type::TENSOR_INT32, {0});
5180   OperandType type14(Type::TENSOR_INT32, {1});
5181   OperandType type15(Type::FLOAT32, {});
5182   OperandType type2(Type::INT32, {});
5183   OperandType type58(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 1}, 0.1f, 128);
5184   OperandType type59(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
5185   OperandType type61(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
5186   OperandType type62(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
5187   OperandType type63(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
5188   OperandType type64(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
5189   OperandType type76(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128);
5190   // Phase 1, operands
5191   auto scores = model->addOperand(&type63);
5192   auto roi = model->addOperand(&type61);
5193   auto param42 = model->addOperand(&type14);
5194   auto param43 = model->addOperand(&type15);
5195   auto param44 = model->addOperand(&type2);
5196   auto param45 = model->addOperand(&type2);
5197   auto param46 = model->addOperand(&type15);
5198   auto param47 = model->addOperand(&type15);
5199   auto param48 = model->addOperand(&type15);
5200   auto scoresOut = model->addOperand(&type64);
5201   auto roiOut = model->addOperand(&type62);
5202   auto classesOut = model->addOperand(&type12);
5203   auto batchSplitOut = model->addOperand(&type12);
5204   auto in = model->addOperand(&type59);
5205   auto param49 = model->addOperand(&type2);
5206   auto param50 = model->addOperand(&type2);
5207   auto param51 = model->addOperand(&type15);
5208   auto param52 = model->addOperand(&type15);
5209   auto param53 = model->addOperand(&type2);
5210   auto param54 = model->addOperand(&type2);
5211   auto layout = model->addOperand(&type0);
5212   auto featureMap = model->addOperand(&type58);
5213   auto param55 = model->addOperand(&type2);
5214   auto param56 = model->addOperand(&type2);
5215   auto param57 = model->addOperand(&type2);
5216   auto param58 = model->addOperand(&type2);
5217   auto param59 = model->addOperand(&type2);
5218   auto param60 = model->addOperand(&type2);
5219   auto param61 = model->addOperand(&type2);
5220   auto param62 = model->addOperand(&type2);
5221   auto param63 = model->addOperand(&type2);
5222   auto out = model->addOperand(&type76);
5223   // Phase 2, operations
5224   static uint8_t scores_init[] = {137, 129};
5225   model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2);
5226   static uint16_t roi_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
5227   model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8);
5228   static int32_t param42_init[] = {0};
5229   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
5230   static float param43_init[] = {0.3f};
5231   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
5232   static int32_t param44_init[] = {-1};
5233   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
5234   static int32_t param45_init[] = {0};
5235   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
5236   static float param46_init[] = {0.4f};
5237   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
5238   static float param47_init[] = {1.0f};
5239   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
5240   static float param48_init[] = {0.3f};
5241   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
5242   static int32_t param49_init[] = {2};
5243   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
5244   static int32_t param50_init[] = {2};
5245   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
5246   static float param51_init[] = {2.0f};
5247   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
5248   static float param52_init[] = {2.0f};
5249   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
5250   static int32_t param53_init[] = {4};
5251   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
5252   static int32_t param54_init[] = {4};
5253   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
5254   static bool8 layout_init[] = {false};
5255   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5256   static int32_t param55_init[] = {0};
5257   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5258   static int32_t param56_init[] = {0};
5259   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
5260   static int32_t param57_init[] = {0};
5261   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5262   static int32_t param58_init[] = {0};
5263   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5264   static int32_t param59_init[] = {1};
5265   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
5266   static int32_t param60_init[] = {1};
5267   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
5268   static int32_t param61_init[] = {2};
5269   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
5270   static int32_t param62_init[] = {2};
5271   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5272   static int32_t param63_init[] = {0};
5273   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5274   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
5275   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
5276   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
5277   // Phase 3, inputs and outputs
5278   model->identifyInputsAndOutputs(
5279     {in},
5280     {scoresOut, classesOut, out});
5281   assert(model->isValid());
5282 }
5283 
is_ignored_zero_sized_dynamic_output_shape_nhwc_quant8(int i)5284 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_quant8(int i) {
5285   static std::set<int> ignore = {};
5286   return ignore.find(i) != ignore.end();
5287 }
5288 
CreateModel_zero_sized_dynamic_output_shape_nhwc_float16(Model * model)5289 void CreateModel_zero_sized_dynamic_output_shape_nhwc_float16(Model *model) {
5290   OperandType type0(Type::BOOL, {});
5291   OperandType type12(Type::TENSOR_INT32, {0});
5292   OperandType type14(Type::TENSOR_INT32, {1});
5293   OperandType type2(Type::INT32, {});
5294   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
5295   OperandType type65(Type::TENSOR_FLOAT16, {0, 2, 2, 1});
5296   OperandType type66(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
5297   OperandType type68(Type::FLOAT16, {});
5298   OperandType type69(Type::TENSOR_FLOAT16, {1, 8});
5299   OperandType type70(Type::TENSOR_FLOAT16, {0, 4});
5300   OperandType type71(Type::TENSOR_FLOAT16, {1, 2});
5301   OperandType type77(Type::TENSOR_FLOAT16, {0});
5302   // Phase 1, operands
5303   auto scores = model->addOperand(&type71);
5304   auto roi = model->addOperand(&type69);
5305   auto param42 = model->addOperand(&type14);
5306   auto param43 = model->addOperand(&type68);
5307   auto param44 = model->addOperand(&type2);
5308   auto param45 = model->addOperand(&type2);
5309   auto param46 = model->addOperand(&type68);
5310   auto param47 = model->addOperand(&type68);
5311   auto param48 = model->addOperand(&type68);
5312   auto scoresOut = model->addOperand(&type77);
5313   auto roiOut = model->addOperand(&type70);
5314   auto classesOut = model->addOperand(&type12);
5315   auto batchSplitOut = model->addOperand(&type12);
5316   auto in = model->addOperand(&type66);
5317   auto param49 = model->addOperand(&type2);
5318   auto param50 = model->addOperand(&type2);
5319   auto param51 = model->addOperand(&type68);
5320   auto param52 = model->addOperand(&type68);
5321   auto param53 = model->addOperand(&type2);
5322   auto param54 = model->addOperand(&type2);
5323   auto layout = model->addOperand(&type0);
5324   auto featureMap = model->addOperand(&type65);
5325   auto param55 = model->addOperand(&type2);
5326   auto param56 = model->addOperand(&type2);
5327   auto param57 = model->addOperand(&type2);
5328   auto param58 = model->addOperand(&type2);
5329   auto param59 = model->addOperand(&type2);
5330   auto param60 = model->addOperand(&type2);
5331   auto param61 = model->addOperand(&type2);
5332   auto param62 = model->addOperand(&type2);
5333   auto param63 = model->addOperand(&type2);
5334   auto out = model->addOperand(&type25);
5335   // Phase 2, operations
5336   static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f};
5337   model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2);
5338   static _Float16 roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5339   model->setOperandValue(roi, roi_init, sizeof(_Float16) * 8);
5340   static int32_t param42_init[] = {0};
5341   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
5342   static _Float16 param43_init[] = {0.30000001192092896f};
5343   model->setOperandValue(param43, param43_init, sizeof(_Float16) * 1);
5344   static int32_t param44_init[] = {-1};
5345   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
5346   static int32_t param45_init[] = {0};
5347   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
5348   static _Float16 param46_init[] = {0.4000000059604645f};
5349   model->setOperandValue(param46, param46_init, sizeof(_Float16) * 1);
5350   static _Float16 param47_init[] = {1.0f};
5351   model->setOperandValue(param47, param47_init, sizeof(_Float16) * 1);
5352   static _Float16 param48_init[] = {0.30000001192092896f};
5353   model->setOperandValue(param48, param48_init, sizeof(_Float16) * 1);
5354   static int32_t param49_init[] = {2};
5355   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
5356   static int32_t param50_init[] = {2};
5357   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
5358   static _Float16 param51_init[] = {2.0f};
5359   model->setOperandValue(param51, param51_init, sizeof(_Float16) * 1);
5360   static _Float16 param52_init[] = {2.0f};
5361   model->setOperandValue(param52, param52_init, sizeof(_Float16) * 1);
5362   static int32_t param53_init[] = {4};
5363   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
5364   static int32_t param54_init[] = {4};
5365   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
5366   static bool8 layout_init[] = {false};
5367   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5368   static int32_t param55_init[] = {0};
5369   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5370   static int32_t param56_init[] = {0};
5371   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
5372   static int32_t param57_init[] = {0};
5373   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5374   static int32_t param58_init[] = {0};
5375   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5376   static int32_t param59_init[] = {1};
5377   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
5378   static int32_t param60_init[] = {1};
5379   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
5380   static int32_t param61_init[] = {2};
5381   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
5382   static int32_t param62_init[] = {2};
5383   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5384   static int32_t param63_init[] = {0};
5385   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5386   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
5387   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
5388   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
5389   // Phase 3, inputs and outputs
5390   model->identifyInputsAndOutputs(
5391     {in},
5392     {scoresOut, classesOut, out});
5393   assert(model->isValid());
5394 }
5395 
is_ignored_zero_sized_dynamic_output_shape_nhwc_float16(int i)5396 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_float16(int i) {
5397   static std::set<int> ignore = {};
5398   return ignore.find(i) != ignore.end();
5399 }
5400 
CreateModel_zero_sized_dynamic_output_shape_nchw(Model * model)5401 void CreateModel_zero_sized_dynamic_output_shape_nchw(Model *model) {
5402   OperandType type0(Type::BOOL, {});
5403   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
5404   OperandType type11(Type::TENSOR_FLOAT32, {0});
5405   OperandType type12(Type::TENSOR_INT32, {0});
5406   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
5407   OperandType type14(Type::TENSOR_INT32, {1});
5408   OperandType type15(Type::FLOAT32, {});
5409   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5410   OperandType type2(Type::INT32, {});
5411   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
5412   OperandType type73(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
5413   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
5414   // Phase 1, operands
5415   auto scores = model->addOperand(&type9);
5416   auto roi = model->addOperand(&type10);
5417   auto param42 = model->addOperand(&type14);
5418   auto param43 = model->addOperand(&type15);
5419   auto param44 = model->addOperand(&type2);
5420   auto param45 = model->addOperand(&type2);
5421   auto param46 = model->addOperand(&type15);
5422   auto param47 = model->addOperand(&type15);
5423   auto param48 = model->addOperand(&type15);
5424   auto scoresOut = model->addOperand(&type11);
5425   auto roiOut = model->addOperand(&type13);
5426   auto classesOut = model->addOperand(&type12);
5427   auto batchSplitOut = model->addOperand(&type12);
5428   auto in = model->addOperand(&type16);
5429   auto param49 = model->addOperand(&type2);
5430   auto param50 = model->addOperand(&type2);
5431   auto param51 = model->addOperand(&type15);
5432   auto param52 = model->addOperand(&type15);
5433   auto param53 = model->addOperand(&type2);
5434   auto param54 = model->addOperand(&type2);
5435   auto layout = model->addOperand(&type0);
5436   auto featureMap = model->addOperand(&type73);
5437   auto param55 = model->addOperand(&type2);
5438   auto param56 = model->addOperand(&type2);
5439   auto param57 = model->addOperand(&type2);
5440   auto param58 = model->addOperand(&type2);
5441   auto param59 = model->addOperand(&type2);
5442   auto param60 = model->addOperand(&type2);
5443   auto param61 = model->addOperand(&type2);
5444   auto param62 = model->addOperand(&type2);
5445   auto param63 = model->addOperand(&type2);
5446   auto out = model->addOperand(&type24);
5447   // Phase 2, operations
5448   static float scores_init[] = {0.9f, 0.1f};
5449   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
5450   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5451   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
5452   static int32_t param42_init[] = {0};
5453   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
5454   static float param43_init[] = {0.3f};
5455   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
5456   static int32_t param44_init[] = {-1};
5457   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
5458   static int32_t param45_init[] = {0};
5459   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
5460   static float param46_init[] = {0.4f};
5461   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
5462   static float param47_init[] = {1.0f};
5463   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
5464   static float param48_init[] = {0.3f};
5465   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
5466   static int32_t param49_init[] = {2};
5467   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
5468   static int32_t param50_init[] = {2};
5469   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
5470   static float param51_init[] = {2.0f};
5471   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
5472   static float param52_init[] = {2.0f};
5473   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
5474   static int32_t param53_init[] = {4};
5475   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
5476   static int32_t param54_init[] = {4};
5477   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
5478   static bool8 layout_init[] = {true};
5479   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5480   static int32_t param55_init[] = {0};
5481   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5482   static int32_t param56_init[] = {0};
5483   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
5484   static int32_t param57_init[] = {0};
5485   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5486   static int32_t param58_init[] = {0};
5487   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5488   static int32_t param59_init[] = {1};
5489   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
5490   static int32_t param60_init[] = {1};
5491   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
5492   static int32_t param61_init[] = {2};
5493   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
5494   static int32_t param62_init[] = {2};
5495   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5496   static int32_t param63_init[] = {0};
5497   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5498   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
5499   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
5500   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
5501   // Phase 3, inputs and outputs
5502   model->identifyInputsAndOutputs(
5503     {in},
5504     {scoresOut, classesOut, out});
5505   assert(model->isValid());
5506 }
5507 
is_ignored_zero_sized_dynamic_output_shape_nchw(int i)5508 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw(int i) {
5509   static std::set<int> ignore = {};
5510   return ignore.find(i) != ignore.end();
5511 }
5512 
CreateModel_zero_sized_dynamic_output_shape_nchw_relaxed(Model * model)5513 void CreateModel_zero_sized_dynamic_output_shape_nchw_relaxed(Model *model) {
5514   OperandType type0(Type::BOOL, {});
5515   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
5516   OperandType type11(Type::TENSOR_FLOAT32, {0});
5517   OperandType type12(Type::TENSOR_INT32, {0});
5518   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
5519   OperandType type14(Type::TENSOR_INT32, {1});
5520   OperandType type15(Type::FLOAT32, {});
5521   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5522   OperandType type2(Type::INT32, {});
5523   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
5524   OperandType type73(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
5525   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
5526   // Phase 1, operands
5527   auto scores = model->addOperand(&type9);
5528   auto roi = model->addOperand(&type10);
5529   auto param42 = model->addOperand(&type14);
5530   auto param43 = model->addOperand(&type15);
5531   auto param44 = model->addOperand(&type2);
5532   auto param45 = model->addOperand(&type2);
5533   auto param46 = model->addOperand(&type15);
5534   auto param47 = model->addOperand(&type15);
5535   auto param48 = model->addOperand(&type15);
5536   auto scoresOut = model->addOperand(&type11);
5537   auto roiOut = model->addOperand(&type13);
5538   auto classesOut = model->addOperand(&type12);
5539   auto batchSplitOut = model->addOperand(&type12);
5540   auto in = model->addOperand(&type16);
5541   auto param49 = model->addOperand(&type2);
5542   auto param50 = model->addOperand(&type2);
5543   auto param51 = model->addOperand(&type15);
5544   auto param52 = model->addOperand(&type15);
5545   auto param53 = model->addOperand(&type2);
5546   auto param54 = model->addOperand(&type2);
5547   auto layout = model->addOperand(&type0);
5548   auto featureMap = model->addOperand(&type73);
5549   auto param55 = model->addOperand(&type2);
5550   auto param56 = model->addOperand(&type2);
5551   auto param57 = model->addOperand(&type2);
5552   auto param58 = model->addOperand(&type2);
5553   auto param59 = model->addOperand(&type2);
5554   auto param60 = model->addOperand(&type2);
5555   auto param61 = model->addOperand(&type2);
5556   auto param62 = model->addOperand(&type2);
5557   auto param63 = model->addOperand(&type2);
5558   auto out = model->addOperand(&type24);
5559   // Phase 2, operations
5560   static float scores_init[] = {0.9f, 0.1f};
5561   model->setOperandValue(scores, scores_init, sizeof(float) * 2);
5562   static float roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5563   model->setOperandValue(roi, roi_init, sizeof(float) * 8);
5564   static int32_t param42_init[] = {0};
5565   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
5566   static float param43_init[] = {0.3f};
5567   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
5568   static int32_t param44_init[] = {-1};
5569   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
5570   static int32_t param45_init[] = {0};
5571   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
5572   static float param46_init[] = {0.4f};
5573   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
5574   static float param47_init[] = {1.0f};
5575   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
5576   static float param48_init[] = {0.3f};
5577   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
5578   static int32_t param49_init[] = {2};
5579   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
5580   static int32_t param50_init[] = {2};
5581   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
5582   static float param51_init[] = {2.0f};
5583   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
5584   static float param52_init[] = {2.0f};
5585   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
5586   static int32_t param53_init[] = {4};
5587   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
5588   static int32_t param54_init[] = {4};
5589   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
5590   static bool8 layout_init[] = {true};
5591   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5592   static int32_t param55_init[] = {0};
5593   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5594   static int32_t param56_init[] = {0};
5595   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
5596   static int32_t param57_init[] = {0};
5597   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5598   static int32_t param58_init[] = {0};
5599   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5600   static int32_t param59_init[] = {1};
5601   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
5602   static int32_t param60_init[] = {1};
5603   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
5604   static int32_t param61_init[] = {2};
5605   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
5606   static int32_t param62_init[] = {2};
5607   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5608   static int32_t param63_init[] = {0};
5609   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5610   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
5611   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
5612   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
5613   // Phase 3, inputs and outputs
5614   model->identifyInputsAndOutputs(
5615     {in},
5616     {scoresOut, classesOut, out});
5617   // Phase 4: set relaxed execution
5618   model->relaxComputationFloat32toFloat16(true);
5619   assert(model->isValid());
5620 }
5621 
is_ignored_zero_sized_dynamic_output_shape_nchw_relaxed(int i)5622 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_relaxed(int i) {
5623   static std::set<int> ignore = {};
5624   return ignore.find(i) != ignore.end();
5625 }
5626 
CreateModel_zero_sized_dynamic_output_shape_nchw_quant8(Model * model)5627 void CreateModel_zero_sized_dynamic_output_shape_nchw_quant8(Model *model) {
5628   OperandType type0(Type::BOOL, {});
5629   OperandType type12(Type::TENSOR_INT32, {0});
5630   OperandType type14(Type::TENSOR_INT32, {1});
5631   OperandType type15(Type::FLOAT32, {});
5632   OperandType type2(Type::INT32, {});
5633   OperandType type59(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
5634   OperandType type61(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
5635   OperandType type62(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
5636   OperandType type63(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
5637   OperandType type64(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
5638   OperandType type74(Type::TENSOR_QUANT8_ASYMM, {0, 1, 2, 2}, 0.1f, 128);
5639   OperandType type76(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128);
5640   // Phase 1, operands
5641   auto scores = model->addOperand(&type63);
5642   auto roi = model->addOperand(&type61);
5643   auto param42 = model->addOperand(&type14);
5644   auto param43 = model->addOperand(&type15);
5645   auto param44 = model->addOperand(&type2);
5646   auto param45 = model->addOperand(&type2);
5647   auto param46 = model->addOperand(&type15);
5648   auto param47 = model->addOperand(&type15);
5649   auto param48 = model->addOperand(&type15);
5650   auto scoresOut = model->addOperand(&type64);
5651   auto roiOut = model->addOperand(&type62);
5652   auto classesOut = model->addOperand(&type12);
5653   auto batchSplitOut = model->addOperand(&type12);
5654   auto in = model->addOperand(&type59);
5655   auto param49 = model->addOperand(&type2);
5656   auto param50 = model->addOperand(&type2);
5657   auto param51 = model->addOperand(&type15);
5658   auto param52 = model->addOperand(&type15);
5659   auto param53 = model->addOperand(&type2);
5660   auto param54 = model->addOperand(&type2);
5661   auto layout = model->addOperand(&type0);
5662   auto featureMap = model->addOperand(&type74);
5663   auto param55 = model->addOperand(&type2);
5664   auto param56 = model->addOperand(&type2);
5665   auto param57 = model->addOperand(&type2);
5666   auto param58 = model->addOperand(&type2);
5667   auto param59 = model->addOperand(&type2);
5668   auto param60 = model->addOperand(&type2);
5669   auto param61 = model->addOperand(&type2);
5670   auto param62 = model->addOperand(&type2);
5671   auto param63 = model->addOperand(&type2);
5672   auto out = model->addOperand(&type76);
5673   // Phase 2, operations
5674   static uint8_t scores_init[] = {137, 129};
5675   model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2);
5676   static uint16_t roi_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
5677   model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8);
5678   static int32_t param42_init[] = {0};
5679   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
5680   static float param43_init[] = {0.3f};
5681   model->setOperandValue(param43, param43_init, sizeof(float) * 1);
5682   static int32_t param44_init[] = {-1};
5683   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
5684   static int32_t param45_init[] = {0};
5685   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
5686   static float param46_init[] = {0.4f};
5687   model->setOperandValue(param46, param46_init, sizeof(float) * 1);
5688   static float param47_init[] = {1.0f};
5689   model->setOperandValue(param47, param47_init, sizeof(float) * 1);
5690   static float param48_init[] = {0.3f};
5691   model->setOperandValue(param48, param48_init, sizeof(float) * 1);
5692   static int32_t param49_init[] = {2};
5693   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
5694   static int32_t param50_init[] = {2};
5695   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
5696   static float param51_init[] = {2.0f};
5697   model->setOperandValue(param51, param51_init, sizeof(float) * 1);
5698   static float param52_init[] = {2.0f};
5699   model->setOperandValue(param52, param52_init, sizeof(float) * 1);
5700   static int32_t param53_init[] = {4};
5701   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
5702   static int32_t param54_init[] = {4};
5703   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
5704   static bool8 layout_init[] = {true};
5705   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5706   static int32_t param55_init[] = {0};
5707   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5708   static int32_t param56_init[] = {0};
5709   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
5710   static int32_t param57_init[] = {0};
5711   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5712   static int32_t param58_init[] = {0};
5713   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5714   static int32_t param59_init[] = {1};
5715   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
5716   static int32_t param60_init[] = {1};
5717   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
5718   static int32_t param61_init[] = {2};
5719   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
5720   static int32_t param62_init[] = {2};
5721   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5722   static int32_t param63_init[] = {0};
5723   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5724   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
5725   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
5726   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
5727   // Phase 3, inputs and outputs
5728   model->identifyInputsAndOutputs(
5729     {in},
5730     {scoresOut, classesOut, out});
5731   assert(model->isValid());
5732 }
5733 
is_ignored_zero_sized_dynamic_output_shape_nchw_quant8(int i)5734 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_quant8(int i) {
5735   static std::set<int> ignore = {};
5736   return ignore.find(i) != ignore.end();
5737 }
5738 
CreateModel_zero_sized_dynamic_output_shape_nchw_float16(Model * model)5739 void CreateModel_zero_sized_dynamic_output_shape_nchw_float16(Model *model) {
5740   OperandType type0(Type::BOOL, {});
5741   OperandType type12(Type::TENSOR_INT32, {0});
5742   OperandType type14(Type::TENSOR_INT32, {1});
5743   OperandType type2(Type::INT32, {});
5744   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
5745   OperandType type66(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
5746   OperandType type68(Type::FLOAT16, {});
5747   OperandType type69(Type::TENSOR_FLOAT16, {1, 8});
5748   OperandType type70(Type::TENSOR_FLOAT16, {0, 4});
5749   OperandType type71(Type::TENSOR_FLOAT16, {1, 2});
5750   OperandType type75(Type::TENSOR_FLOAT16, {0, 1, 2, 2});
5751   OperandType type77(Type::TENSOR_FLOAT16, {0});
5752   // Phase 1, operands
5753   auto scores = model->addOperand(&type71);
5754   auto roi = model->addOperand(&type69);
5755   auto param42 = model->addOperand(&type14);
5756   auto param43 = model->addOperand(&type68);
5757   auto param44 = model->addOperand(&type2);
5758   auto param45 = model->addOperand(&type2);
5759   auto param46 = model->addOperand(&type68);
5760   auto param47 = model->addOperand(&type68);
5761   auto param48 = model->addOperand(&type68);
5762   auto scoresOut = model->addOperand(&type77);
5763   auto roiOut = model->addOperand(&type70);
5764   auto classesOut = model->addOperand(&type12);
5765   auto batchSplitOut = model->addOperand(&type12);
5766   auto in = model->addOperand(&type66);
5767   auto param49 = model->addOperand(&type2);
5768   auto param50 = model->addOperand(&type2);
5769   auto param51 = model->addOperand(&type68);
5770   auto param52 = model->addOperand(&type68);
5771   auto param53 = model->addOperand(&type2);
5772   auto param54 = model->addOperand(&type2);
5773   auto layout = model->addOperand(&type0);
5774   auto featureMap = model->addOperand(&type75);
5775   auto param55 = model->addOperand(&type2);
5776   auto param56 = model->addOperand(&type2);
5777   auto param57 = model->addOperand(&type2);
5778   auto param58 = model->addOperand(&type2);
5779   auto param59 = model->addOperand(&type2);
5780   auto param60 = model->addOperand(&type2);
5781   auto param61 = model->addOperand(&type2);
5782   auto param62 = model->addOperand(&type2);
5783   auto param63 = model->addOperand(&type2);
5784   auto out = model->addOperand(&type25);
5785   // Phase 2, operations
5786   static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f};
5787   model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2);
5788   static _Float16 roi_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5789   model->setOperandValue(roi, roi_init, sizeof(_Float16) * 8);
5790   static int32_t param42_init[] = {0};
5791   model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1);
5792   static _Float16 param43_init[] = {0.30000001192092896f};
5793   model->setOperandValue(param43, param43_init, sizeof(_Float16) * 1);
5794   static int32_t param44_init[] = {-1};
5795   model->setOperandValue(param44, param44_init, sizeof(int32_t) * 1);
5796   static int32_t param45_init[] = {0};
5797   model->setOperandValue(param45, param45_init, sizeof(int32_t) * 1);
5798   static _Float16 param46_init[] = {0.4000000059604645f};
5799   model->setOperandValue(param46, param46_init, sizeof(_Float16) * 1);
5800   static _Float16 param47_init[] = {1.0f};
5801   model->setOperandValue(param47, param47_init, sizeof(_Float16) * 1);
5802   static _Float16 param48_init[] = {0.30000001192092896f};
5803   model->setOperandValue(param48, param48_init, sizeof(_Float16) * 1);
5804   static int32_t param49_init[] = {2};
5805   model->setOperandValue(param49, param49_init, sizeof(int32_t) * 1);
5806   static int32_t param50_init[] = {2};
5807   model->setOperandValue(param50, param50_init, sizeof(int32_t) * 1);
5808   static _Float16 param51_init[] = {2.0f};
5809   model->setOperandValue(param51, param51_init, sizeof(_Float16) * 1);
5810   static _Float16 param52_init[] = {2.0f};
5811   model->setOperandValue(param52, param52_init, sizeof(_Float16) * 1);
5812   static int32_t param53_init[] = {4};
5813   model->setOperandValue(param53, param53_init, sizeof(int32_t) * 1);
5814   static int32_t param54_init[] = {4};
5815   model->setOperandValue(param54, param54_init, sizeof(int32_t) * 1);
5816   static bool8 layout_init[] = {true};
5817   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5818   static int32_t param55_init[] = {0};
5819   model->setOperandValue(param55, param55_init, sizeof(int32_t) * 1);
5820   static int32_t param56_init[] = {0};
5821   model->setOperandValue(param56, param56_init, sizeof(int32_t) * 1);
5822   static int32_t param57_init[] = {0};
5823   model->setOperandValue(param57, param57_init, sizeof(int32_t) * 1);
5824   static int32_t param58_init[] = {0};
5825   model->setOperandValue(param58, param58_init, sizeof(int32_t) * 1);
5826   static int32_t param59_init[] = {1};
5827   model->setOperandValue(param59, param59_init, sizeof(int32_t) * 1);
5828   static int32_t param60_init[] = {1};
5829   model->setOperandValue(param60, param60_init, sizeof(int32_t) * 1);
5830   static int32_t param61_init[] = {2};
5831   model->setOperandValue(param61, param61_init, sizeof(int32_t) * 1);
5832   static int32_t param62_init[] = {2};
5833   model->setOperandValue(param62, param62_init, sizeof(int32_t) * 1);
5834   static int32_t param63_init[] = {0};
5835   model->setOperandValue(param63, param63_init, sizeof(int32_t) * 1);
5836   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param42, param43, param44, param45, param46, param47, param48}, {scoresOut, roiOut, classesOut, batchSplitOut});
5837   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param49, param50, param51, param52, param53, param54, layout}, {featureMap});
5838   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap, param55, param56, param57, param58, param59, param60, param61, param62, param63, layout}, {out});
5839   // Phase 3, inputs and outputs
5840   model->identifyInputsAndOutputs(
5841     {in},
5842     {scoresOut, classesOut, out});
5843   assert(model->isValid());
5844 }
5845 
is_ignored_zero_sized_dynamic_output_shape_nchw_float16(int i)5846 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_float16(int i) {
5847   static std::set<int> ignore = {};
5848   return ignore.find(i) != ignore.end();
5849 }
5850 
CreateModel_zero_sized_nhwc_2(Model * model)5851 void CreateModel_zero_sized_nhwc_2(Model *model) {
5852   OperandType type0(Type::BOOL, {});
5853   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
5854   OperandType type11(Type::TENSOR_FLOAT32, {0});
5855   OperandType type12(Type::TENSOR_INT32, {0});
5856   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
5857   OperandType type14(Type::TENSOR_INT32, {1});
5858   OperandType type15(Type::FLOAT32, {});
5859   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5860   OperandType type17(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
5861   OperandType type2(Type::INT32, {});
5862   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
5863   // Phase 1, operands
5864   auto scores1 = model->addOperand(&type9);
5865   auto roi1 = model->addOperand(&type10);
5866   auto param64 = model->addOperand(&type14);
5867   auto param65 = model->addOperand(&type15);
5868   auto param66 = model->addOperand(&type2);
5869   auto param67 = model->addOperand(&type2);
5870   auto param68 = model->addOperand(&type15);
5871   auto param69 = model->addOperand(&type15);
5872   auto param70 = model->addOperand(&type15);
5873   auto scoresOut1 = model->addOperand(&type11);
5874   auto roiOut1 = model->addOperand(&type13);
5875   auto classesOut1 = model->addOperand(&type12);
5876   auto batchSplitOut1 = model->addOperand(&type12);
5877   auto in1 = model->addOperand(&type16);
5878   auto param71 = model->addOperand(&type2);
5879   auto param72 = model->addOperand(&type2);
5880   auto param73 = model->addOperand(&type15);
5881   auto param74 = model->addOperand(&type15);
5882   auto param75 = model->addOperand(&type2);
5883   auto param76 = model->addOperand(&type2);
5884   auto layout = model->addOperand(&type0);
5885   auto featureMap1 = model->addOperand(&type17);
5886   auto param77 = model->addOperand(&type2);
5887   auto param78 = model->addOperand(&type2);
5888   auto param79 = model->addOperand(&type2);
5889   auto param80 = model->addOperand(&type2);
5890   auto param81 = model->addOperand(&type2);
5891   auto param82 = model->addOperand(&type2);
5892   auto out1 = model->addOperand(&type17);
5893   // Phase 2, operations
5894   static float scores1_init[] = {0.9f, 0.1f};
5895   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
5896   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5897   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
5898   static int32_t param64_init[] = {0};
5899   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
5900   static float param65_init[] = {0.3f};
5901   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
5902   static int32_t param66_init[] = {-1};
5903   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
5904   static int32_t param67_init[] = {0};
5905   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
5906   static float param68_init[] = {0.4f};
5907   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
5908   static float param69_init[] = {1.0f};
5909   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
5910   static float param70_init[] = {0.3f};
5911   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
5912   static int32_t param71_init[] = {2};
5913   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
5914   static int32_t param72_init[] = {2};
5915   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
5916   static float param73_init[] = {2.0f};
5917   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
5918   static float param74_init[] = {2.0f};
5919   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
5920   static int32_t param75_init[] = {4};
5921   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
5922   static int32_t param76_init[] = {4};
5923   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
5924   static bool8 layout_init[] = {false};
5925   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
5926   static int32_t param77_init[] = {1};
5927   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
5928   static int32_t param78_init[] = {1};
5929   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
5930   static int32_t param79_init[] = {1};
5931   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
5932   static int32_t param80_init[] = {2};
5933   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
5934   static int32_t param81_init[] = {2};
5935   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
5936   static int32_t param82_init[] = {0};
5937   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
5938   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
5939   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
5940   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
5941   // Phase 3, inputs and outputs
5942   model->identifyInputsAndOutputs(
5943     {in1},
5944     {scoresOut1, classesOut1, out1});
5945   assert(model->isValid());
5946 }
5947 
is_ignored_zero_sized_nhwc_2(int i)5948 inline bool is_ignored_zero_sized_nhwc_2(int i) {
5949   static std::set<int> ignore = {};
5950   return ignore.find(i) != ignore.end();
5951 }
5952 
CreateModel_zero_sized_nhwc_relaxed_2(Model * model)5953 void CreateModel_zero_sized_nhwc_relaxed_2(Model *model) {
5954   OperandType type0(Type::BOOL, {});
5955   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
5956   OperandType type11(Type::TENSOR_FLOAT32, {0});
5957   OperandType type12(Type::TENSOR_INT32, {0});
5958   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
5959   OperandType type14(Type::TENSOR_INT32, {1});
5960   OperandType type15(Type::FLOAT32, {});
5961   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
5962   OperandType type17(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
5963   OperandType type2(Type::INT32, {});
5964   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
5965   // Phase 1, operands
5966   auto scores1 = model->addOperand(&type9);
5967   auto roi1 = model->addOperand(&type10);
5968   auto param64 = model->addOperand(&type14);
5969   auto param65 = model->addOperand(&type15);
5970   auto param66 = model->addOperand(&type2);
5971   auto param67 = model->addOperand(&type2);
5972   auto param68 = model->addOperand(&type15);
5973   auto param69 = model->addOperand(&type15);
5974   auto param70 = model->addOperand(&type15);
5975   auto scoresOut1 = model->addOperand(&type11);
5976   auto roiOut1 = model->addOperand(&type13);
5977   auto classesOut1 = model->addOperand(&type12);
5978   auto batchSplitOut1 = model->addOperand(&type12);
5979   auto in1 = model->addOperand(&type16);
5980   auto param71 = model->addOperand(&type2);
5981   auto param72 = model->addOperand(&type2);
5982   auto param73 = model->addOperand(&type15);
5983   auto param74 = model->addOperand(&type15);
5984   auto param75 = model->addOperand(&type2);
5985   auto param76 = model->addOperand(&type2);
5986   auto layout = model->addOperand(&type0);
5987   auto featureMap1 = model->addOperand(&type17);
5988   auto param77 = model->addOperand(&type2);
5989   auto param78 = model->addOperand(&type2);
5990   auto param79 = model->addOperand(&type2);
5991   auto param80 = model->addOperand(&type2);
5992   auto param81 = model->addOperand(&type2);
5993   auto param82 = model->addOperand(&type2);
5994   auto out1 = model->addOperand(&type17);
5995   // Phase 2, operations
5996   static float scores1_init[] = {0.9f, 0.1f};
5997   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
5998   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
5999   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
6000   static int32_t param64_init[] = {0};
6001   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6002   static float param65_init[] = {0.3f};
6003   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6004   static int32_t param66_init[] = {-1};
6005   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6006   static int32_t param67_init[] = {0};
6007   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6008   static float param68_init[] = {0.4f};
6009   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
6010   static float param69_init[] = {1.0f};
6011   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
6012   static float param70_init[] = {0.3f};
6013   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
6014   static int32_t param71_init[] = {2};
6015   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6016   static int32_t param72_init[] = {2};
6017   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6018   static float param73_init[] = {2.0f};
6019   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
6020   static float param74_init[] = {2.0f};
6021   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
6022   static int32_t param75_init[] = {4};
6023   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6024   static int32_t param76_init[] = {4};
6025   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6026   static bool8 layout_init[] = {false};
6027   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6028   static int32_t param77_init[] = {1};
6029   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6030   static int32_t param78_init[] = {1};
6031   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6032   static int32_t param79_init[] = {1};
6033   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6034   static int32_t param80_init[] = {2};
6035   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6036   static int32_t param81_init[] = {2};
6037   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6038   static int32_t param82_init[] = {0};
6039   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6040   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6041   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6042   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6043   // Phase 3, inputs and outputs
6044   model->identifyInputsAndOutputs(
6045     {in1},
6046     {scoresOut1, classesOut1, out1});
6047   // Phase 4: set relaxed execution
6048   model->relaxComputationFloat32toFloat16(true);
6049   assert(model->isValid());
6050 }
6051 
is_ignored_zero_sized_nhwc_relaxed_2(int i)6052 inline bool is_ignored_zero_sized_nhwc_relaxed_2(int i) {
6053   static std::set<int> ignore = {};
6054   return ignore.find(i) != ignore.end();
6055 }
6056 
CreateModel_zero_sized_nhwc_quant8_2(Model * model)6057 void CreateModel_zero_sized_nhwc_quant8_2(Model *model) {
6058   OperandType type0(Type::BOOL, {});
6059   OperandType type12(Type::TENSOR_INT32, {0});
6060   OperandType type14(Type::TENSOR_INT32, {1});
6061   OperandType type15(Type::FLOAT32, {});
6062   OperandType type2(Type::INT32, {});
6063   OperandType type58(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 1}, 0.1f, 128);
6064   OperandType type59(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
6065   OperandType type61(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
6066   OperandType type62(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
6067   OperandType type63(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
6068   OperandType type64(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
6069   // Phase 1, operands
6070   auto scores1 = model->addOperand(&type63);
6071   auto roi1 = model->addOperand(&type61);
6072   auto param64 = model->addOperand(&type14);
6073   auto param65 = model->addOperand(&type15);
6074   auto param66 = model->addOperand(&type2);
6075   auto param67 = model->addOperand(&type2);
6076   auto param68 = model->addOperand(&type15);
6077   auto param69 = model->addOperand(&type15);
6078   auto param70 = model->addOperand(&type15);
6079   auto scoresOut1 = model->addOperand(&type64);
6080   auto roiOut1 = model->addOperand(&type62);
6081   auto classesOut1 = model->addOperand(&type12);
6082   auto batchSplitOut1 = model->addOperand(&type12);
6083   auto in1 = model->addOperand(&type59);
6084   auto param71 = model->addOperand(&type2);
6085   auto param72 = model->addOperand(&type2);
6086   auto param73 = model->addOperand(&type15);
6087   auto param74 = model->addOperand(&type15);
6088   auto param75 = model->addOperand(&type2);
6089   auto param76 = model->addOperand(&type2);
6090   auto layout = model->addOperand(&type0);
6091   auto featureMap1 = model->addOperand(&type58);
6092   auto param77 = model->addOperand(&type2);
6093   auto param78 = model->addOperand(&type2);
6094   auto param79 = model->addOperand(&type2);
6095   auto param80 = model->addOperand(&type2);
6096   auto param81 = model->addOperand(&type2);
6097   auto param82 = model->addOperand(&type2);
6098   auto out1 = model->addOperand(&type58);
6099   // Phase 2, operations
6100   static uint8_t scores1_init[] = {137, 129};
6101   model->setOperandValue(scores1, scores1_init, sizeof(uint8_t) * 2);
6102   static uint16_t roi1_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
6103   model->setOperandValue(roi1, roi1_init, sizeof(uint16_t) * 8);
6104   static int32_t param64_init[] = {0};
6105   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6106   static float param65_init[] = {0.3f};
6107   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6108   static int32_t param66_init[] = {-1};
6109   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6110   static int32_t param67_init[] = {0};
6111   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6112   static float param68_init[] = {0.4f};
6113   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
6114   static float param69_init[] = {1.0f};
6115   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
6116   static float param70_init[] = {0.3f};
6117   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
6118   static int32_t param71_init[] = {2};
6119   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6120   static int32_t param72_init[] = {2};
6121   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6122   static float param73_init[] = {2.0f};
6123   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
6124   static float param74_init[] = {2.0f};
6125   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
6126   static int32_t param75_init[] = {4};
6127   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6128   static int32_t param76_init[] = {4};
6129   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6130   static bool8 layout_init[] = {false};
6131   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6132   static int32_t param77_init[] = {1};
6133   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6134   static int32_t param78_init[] = {1};
6135   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6136   static int32_t param79_init[] = {1};
6137   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6138   static int32_t param80_init[] = {2};
6139   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6140   static int32_t param81_init[] = {2};
6141   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6142   static int32_t param82_init[] = {0};
6143   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6144   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6145   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6146   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6147   // Phase 3, inputs and outputs
6148   model->identifyInputsAndOutputs(
6149     {in1},
6150     {scoresOut1, classesOut1, out1});
6151   assert(model->isValid());
6152 }
6153 
is_ignored_zero_sized_nhwc_quant8_2(int i)6154 inline bool is_ignored_zero_sized_nhwc_quant8_2(int i) {
6155   static std::set<int> ignore = {};
6156   return ignore.find(i) != ignore.end();
6157 }
6158 
CreateModel_zero_sized_nhwc_float16_2(Model * model)6159 void CreateModel_zero_sized_nhwc_float16_2(Model *model) {
6160   OperandType type0(Type::BOOL, {});
6161   OperandType type12(Type::TENSOR_INT32, {0});
6162   OperandType type14(Type::TENSOR_INT32, {1});
6163   OperandType type2(Type::INT32, {});
6164   OperandType type65(Type::TENSOR_FLOAT16, {0, 2, 2, 1});
6165   OperandType type66(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
6166   OperandType type68(Type::FLOAT16, {});
6167   OperandType type69(Type::TENSOR_FLOAT16, {1, 8});
6168   OperandType type70(Type::TENSOR_FLOAT16, {0, 4});
6169   OperandType type71(Type::TENSOR_FLOAT16, {1, 2});
6170   OperandType type72(Type::TENSOR_FLOAT16, {0});
6171   // Phase 1, operands
6172   auto scores1 = model->addOperand(&type71);
6173   auto roi1 = model->addOperand(&type69);
6174   auto param64 = model->addOperand(&type14);
6175   auto param65 = model->addOperand(&type68);
6176   auto param66 = model->addOperand(&type2);
6177   auto param67 = model->addOperand(&type2);
6178   auto param68 = model->addOperand(&type68);
6179   auto param69 = model->addOperand(&type68);
6180   auto param70 = model->addOperand(&type68);
6181   auto scoresOut1 = model->addOperand(&type72);
6182   auto roiOut1 = model->addOperand(&type70);
6183   auto classesOut1 = model->addOperand(&type12);
6184   auto batchSplitOut1 = model->addOperand(&type12);
6185   auto in1 = model->addOperand(&type66);
6186   auto param71 = model->addOperand(&type2);
6187   auto param72 = model->addOperand(&type2);
6188   auto param73 = model->addOperand(&type68);
6189   auto param74 = model->addOperand(&type68);
6190   auto param75 = model->addOperand(&type2);
6191   auto param76 = model->addOperand(&type2);
6192   auto layout = model->addOperand(&type0);
6193   auto featureMap1 = model->addOperand(&type65);
6194   auto param77 = model->addOperand(&type2);
6195   auto param78 = model->addOperand(&type2);
6196   auto param79 = model->addOperand(&type2);
6197   auto param80 = model->addOperand(&type2);
6198   auto param81 = model->addOperand(&type2);
6199   auto param82 = model->addOperand(&type2);
6200   auto out1 = model->addOperand(&type65);
6201   // Phase 2, operations
6202   static _Float16 scores1_init[] = {0.8999999761581421f, 0.10000000149011612f};
6203   model->setOperandValue(scores1, scores1_init, sizeof(_Float16) * 2);
6204   static _Float16 roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6205   model->setOperandValue(roi1, roi1_init, sizeof(_Float16) * 8);
6206   static int32_t param64_init[] = {0};
6207   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6208   static _Float16 param65_init[] = {0.30000001192092896f};
6209   model->setOperandValue(param65, param65_init, sizeof(_Float16) * 1);
6210   static int32_t param66_init[] = {-1};
6211   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6212   static int32_t param67_init[] = {0};
6213   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6214   static _Float16 param68_init[] = {0.4000000059604645f};
6215   model->setOperandValue(param68, param68_init, sizeof(_Float16) * 1);
6216   static _Float16 param69_init[] = {1.0f};
6217   model->setOperandValue(param69, param69_init, sizeof(_Float16) * 1);
6218   static _Float16 param70_init[] = {0.30000001192092896f};
6219   model->setOperandValue(param70, param70_init, sizeof(_Float16) * 1);
6220   static int32_t param71_init[] = {2};
6221   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6222   static int32_t param72_init[] = {2};
6223   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6224   static _Float16 param73_init[] = {2.0f};
6225   model->setOperandValue(param73, param73_init, sizeof(_Float16) * 1);
6226   static _Float16 param74_init[] = {2.0f};
6227   model->setOperandValue(param74, param74_init, sizeof(_Float16) * 1);
6228   static int32_t param75_init[] = {4};
6229   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6230   static int32_t param76_init[] = {4};
6231   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6232   static bool8 layout_init[] = {false};
6233   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6234   static int32_t param77_init[] = {1};
6235   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6236   static int32_t param78_init[] = {1};
6237   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6238   static int32_t param79_init[] = {1};
6239   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6240   static int32_t param80_init[] = {2};
6241   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6242   static int32_t param81_init[] = {2};
6243   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6244   static int32_t param82_init[] = {0};
6245   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6246   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6247   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6248   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6249   // Phase 3, inputs and outputs
6250   model->identifyInputsAndOutputs(
6251     {in1},
6252     {scoresOut1, classesOut1, out1});
6253   assert(model->isValid());
6254 }
6255 
is_ignored_zero_sized_nhwc_float16_2(int i)6256 inline bool is_ignored_zero_sized_nhwc_float16_2(int i) {
6257   static std::set<int> ignore = {};
6258   return ignore.find(i) != ignore.end();
6259 }
6260 
CreateModel_zero_sized_nchw_2(Model * model)6261 void CreateModel_zero_sized_nchw_2(Model *model) {
6262   OperandType type0(Type::BOOL, {});
6263   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
6264   OperandType type11(Type::TENSOR_FLOAT32, {0});
6265   OperandType type12(Type::TENSOR_INT32, {0});
6266   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
6267   OperandType type14(Type::TENSOR_INT32, {1});
6268   OperandType type15(Type::FLOAT32, {});
6269   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
6270   OperandType type2(Type::INT32, {});
6271   OperandType type73(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
6272   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
6273   // Phase 1, operands
6274   auto scores1 = model->addOperand(&type9);
6275   auto roi1 = model->addOperand(&type10);
6276   auto param64 = model->addOperand(&type14);
6277   auto param65 = model->addOperand(&type15);
6278   auto param66 = model->addOperand(&type2);
6279   auto param67 = model->addOperand(&type2);
6280   auto param68 = model->addOperand(&type15);
6281   auto param69 = model->addOperand(&type15);
6282   auto param70 = model->addOperand(&type15);
6283   auto scoresOut1 = model->addOperand(&type11);
6284   auto roiOut1 = model->addOperand(&type13);
6285   auto classesOut1 = model->addOperand(&type12);
6286   auto batchSplitOut1 = model->addOperand(&type12);
6287   auto in1 = model->addOperand(&type16);
6288   auto param71 = model->addOperand(&type2);
6289   auto param72 = model->addOperand(&type2);
6290   auto param73 = model->addOperand(&type15);
6291   auto param74 = model->addOperand(&type15);
6292   auto param75 = model->addOperand(&type2);
6293   auto param76 = model->addOperand(&type2);
6294   auto layout = model->addOperand(&type0);
6295   auto featureMap1 = model->addOperand(&type73);
6296   auto param77 = model->addOperand(&type2);
6297   auto param78 = model->addOperand(&type2);
6298   auto param79 = model->addOperand(&type2);
6299   auto param80 = model->addOperand(&type2);
6300   auto param81 = model->addOperand(&type2);
6301   auto param82 = model->addOperand(&type2);
6302   auto out1 = model->addOperand(&type73);
6303   // Phase 2, operations
6304   static float scores1_init[] = {0.9f, 0.1f};
6305   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
6306   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6307   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
6308   static int32_t param64_init[] = {0};
6309   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6310   static float param65_init[] = {0.3f};
6311   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6312   static int32_t param66_init[] = {-1};
6313   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6314   static int32_t param67_init[] = {0};
6315   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6316   static float param68_init[] = {0.4f};
6317   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
6318   static float param69_init[] = {1.0f};
6319   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
6320   static float param70_init[] = {0.3f};
6321   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
6322   static int32_t param71_init[] = {2};
6323   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6324   static int32_t param72_init[] = {2};
6325   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6326   static float param73_init[] = {2.0f};
6327   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
6328   static float param74_init[] = {2.0f};
6329   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
6330   static int32_t param75_init[] = {4};
6331   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6332   static int32_t param76_init[] = {4};
6333   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6334   static bool8 layout_init[] = {true};
6335   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6336   static int32_t param77_init[] = {1};
6337   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6338   static int32_t param78_init[] = {1};
6339   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6340   static int32_t param79_init[] = {1};
6341   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6342   static int32_t param80_init[] = {2};
6343   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6344   static int32_t param81_init[] = {2};
6345   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6346   static int32_t param82_init[] = {0};
6347   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6348   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6349   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6350   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6351   // Phase 3, inputs and outputs
6352   model->identifyInputsAndOutputs(
6353     {in1},
6354     {scoresOut1, classesOut1, out1});
6355   assert(model->isValid());
6356 }
6357 
is_ignored_zero_sized_nchw_2(int i)6358 inline bool is_ignored_zero_sized_nchw_2(int i) {
6359   static std::set<int> ignore = {};
6360   return ignore.find(i) != ignore.end();
6361 }
6362 
CreateModel_zero_sized_nchw_relaxed_2(Model * model)6363 void CreateModel_zero_sized_nchw_relaxed_2(Model *model) {
6364   OperandType type0(Type::BOOL, {});
6365   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
6366   OperandType type11(Type::TENSOR_FLOAT32, {0});
6367   OperandType type12(Type::TENSOR_INT32, {0});
6368   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
6369   OperandType type14(Type::TENSOR_INT32, {1});
6370   OperandType type15(Type::FLOAT32, {});
6371   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
6372   OperandType type2(Type::INT32, {});
6373   OperandType type73(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
6374   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
6375   // Phase 1, operands
6376   auto scores1 = model->addOperand(&type9);
6377   auto roi1 = model->addOperand(&type10);
6378   auto param64 = model->addOperand(&type14);
6379   auto param65 = model->addOperand(&type15);
6380   auto param66 = model->addOperand(&type2);
6381   auto param67 = model->addOperand(&type2);
6382   auto param68 = model->addOperand(&type15);
6383   auto param69 = model->addOperand(&type15);
6384   auto param70 = model->addOperand(&type15);
6385   auto scoresOut1 = model->addOperand(&type11);
6386   auto roiOut1 = model->addOperand(&type13);
6387   auto classesOut1 = model->addOperand(&type12);
6388   auto batchSplitOut1 = model->addOperand(&type12);
6389   auto in1 = model->addOperand(&type16);
6390   auto param71 = model->addOperand(&type2);
6391   auto param72 = model->addOperand(&type2);
6392   auto param73 = model->addOperand(&type15);
6393   auto param74 = model->addOperand(&type15);
6394   auto param75 = model->addOperand(&type2);
6395   auto param76 = model->addOperand(&type2);
6396   auto layout = model->addOperand(&type0);
6397   auto featureMap1 = model->addOperand(&type73);
6398   auto param77 = model->addOperand(&type2);
6399   auto param78 = model->addOperand(&type2);
6400   auto param79 = model->addOperand(&type2);
6401   auto param80 = model->addOperand(&type2);
6402   auto param81 = model->addOperand(&type2);
6403   auto param82 = model->addOperand(&type2);
6404   auto out1 = model->addOperand(&type73);
6405   // Phase 2, operations
6406   static float scores1_init[] = {0.9f, 0.1f};
6407   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
6408   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6409   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
6410   static int32_t param64_init[] = {0};
6411   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6412   static float param65_init[] = {0.3f};
6413   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6414   static int32_t param66_init[] = {-1};
6415   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6416   static int32_t param67_init[] = {0};
6417   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6418   static float param68_init[] = {0.4f};
6419   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
6420   static float param69_init[] = {1.0f};
6421   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
6422   static float param70_init[] = {0.3f};
6423   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
6424   static int32_t param71_init[] = {2};
6425   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6426   static int32_t param72_init[] = {2};
6427   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6428   static float param73_init[] = {2.0f};
6429   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
6430   static float param74_init[] = {2.0f};
6431   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
6432   static int32_t param75_init[] = {4};
6433   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6434   static int32_t param76_init[] = {4};
6435   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6436   static bool8 layout_init[] = {true};
6437   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6438   static int32_t param77_init[] = {1};
6439   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6440   static int32_t param78_init[] = {1};
6441   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6442   static int32_t param79_init[] = {1};
6443   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6444   static int32_t param80_init[] = {2};
6445   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6446   static int32_t param81_init[] = {2};
6447   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6448   static int32_t param82_init[] = {0};
6449   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6450   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6451   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6452   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6453   // Phase 3, inputs and outputs
6454   model->identifyInputsAndOutputs(
6455     {in1},
6456     {scoresOut1, classesOut1, out1});
6457   // Phase 4: set relaxed execution
6458   model->relaxComputationFloat32toFloat16(true);
6459   assert(model->isValid());
6460 }
6461 
is_ignored_zero_sized_nchw_relaxed_2(int i)6462 inline bool is_ignored_zero_sized_nchw_relaxed_2(int i) {
6463   static std::set<int> ignore = {};
6464   return ignore.find(i) != ignore.end();
6465 }
6466 
CreateModel_zero_sized_nchw_quant8_2(Model * model)6467 void CreateModel_zero_sized_nchw_quant8_2(Model *model) {
6468   OperandType type0(Type::BOOL, {});
6469   OperandType type12(Type::TENSOR_INT32, {0});
6470   OperandType type14(Type::TENSOR_INT32, {1});
6471   OperandType type15(Type::FLOAT32, {});
6472   OperandType type2(Type::INT32, {});
6473   OperandType type59(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
6474   OperandType type61(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
6475   OperandType type62(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
6476   OperandType type63(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
6477   OperandType type64(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
6478   OperandType type74(Type::TENSOR_QUANT8_ASYMM, {0, 1, 2, 2}, 0.1f, 128);
6479   // Phase 1, operands
6480   auto scores1 = model->addOperand(&type63);
6481   auto roi1 = model->addOperand(&type61);
6482   auto param64 = model->addOperand(&type14);
6483   auto param65 = model->addOperand(&type15);
6484   auto param66 = model->addOperand(&type2);
6485   auto param67 = model->addOperand(&type2);
6486   auto param68 = model->addOperand(&type15);
6487   auto param69 = model->addOperand(&type15);
6488   auto param70 = model->addOperand(&type15);
6489   auto scoresOut1 = model->addOperand(&type64);
6490   auto roiOut1 = model->addOperand(&type62);
6491   auto classesOut1 = model->addOperand(&type12);
6492   auto batchSplitOut1 = model->addOperand(&type12);
6493   auto in1 = model->addOperand(&type59);
6494   auto param71 = model->addOperand(&type2);
6495   auto param72 = model->addOperand(&type2);
6496   auto param73 = model->addOperand(&type15);
6497   auto param74 = model->addOperand(&type15);
6498   auto param75 = model->addOperand(&type2);
6499   auto param76 = model->addOperand(&type2);
6500   auto layout = model->addOperand(&type0);
6501   auto featureMap1 = model->addOperand(&type74);
6502   auto param77 = model->addOperand(&type2);
6503   auto param78 = model->addOperand(&type2);
6504   auto param79 = model->addOperand(&type2);
6505   auto param80 = model->addOperand(&type2);
6506   auto param81 = model->addOperand(&type2);
6507   auto param82 = model->addOperand(&type2);
6508   auto out1 = model->addOperand(&type74);
6509   // Phase 2, operations
6510   static uint8_t scores1_init[] = {137, 129};
6511   model->setOperandValue(scores1, scores1_init, sizeof(uint8_t) * 2);
6512   static uint16_t roi1_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
6513   model->setOperandValue(roi1, roi1_init, sizeof(uint16_t) * 8);
6514   static int32_t param64_init[] = {0};
6515   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6516   static float param65_init[] = {0.3f};
6517   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6518   static int32_t param66_init[] = {-1};
6519   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6520   static int32_t param67_init[] = {0};
6521   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6522   static float param68_init[] = {0.4f};
6523   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
6524   static float param69_init[] = {1.0f};
6525   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
6526   static float param70_init[] = {0.3f};
6527   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
6528   static int32_t param71_init[] = {2};
6529   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6530   static int32_t param72_init[] = {2};
6531   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6532   static float param73_init[] = {2.0f};
6533   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
6534   static float param74_init[] = {2.0f};
6535   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
6536   static int32_t param75_init[] = {4};
6537   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6538   static int32_t param76_init[] = {4};
6539   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6540   static bool8 layout_init[] = {true};
6541   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6542   static int32_t param77_init[] = {1};
6543   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6544   static int32_t param78_init[] = {1};
6545   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6546   static int32_t param79_init[] = {1};
6547   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6548   static int32_t param80_init[] = {2};
6549   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6550   static int32_t param81_init[] = {2};
6551   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6552   static int32_t param82_init[] = {0};
6553   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6554   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6555   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6556   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6557   // Phase 3, inputs and outputs
6558   model->identifyInputsAndOutputs(
6559     {in1},
6560     {scoresOut1, classesOut1, out1});
6561   assert(model->isValid());
6562 }
6563 
is_ignored_zero_sized_nchw_quant8_2(int i)6564 inline bool is_ignored_zero_sized_nchw_quant8_2(int i) {
6565   static std::set<int> ignore = {};
6566   return ignore.find(i) != ignore.end();
6567 }
6568 
CreateModel_zero_sized_nchw_float16_2(Model * model)6569 void CreateModel_zero_sized_nchw_float16_2(Model *model) {
6570   OperandType type0(Type::BOOL, {});
6571   OperandType type12(Type::TENSOR_INT32, {0});
6572   OperandType type14(Type::TENSOR_INT32, {1});
6573   OperandType type2(Type::INT32, {});
6574   OperandType type66(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
6575   OperandType type68(Type::FLOAT16, {});
6576   OperandType type69(Type::TENSOR_FLOAT16, {1, 8});
6577   OperandType type70(Type::TENSOR_FLOAT16, {0, 4});
6578   OperandType type71(Type::TENSOR_FLOAT16, {1, 2});
6579   OperandType type72(Type::TENSOR_FLOAT16, {0});
6580   OperandType type75(Type::TENSOR_FLOAT16, {0, 1, 2, 2});
6581   // Phase 1, operands
6582   auto scores1 = model->addOperand(&type71);
6583   auto roi1 = model->addOperand(&type69);
6584   auto param64 = model->addOperand(&type14);
6585   auto param65 = model->addOperand(&type68);
6586   auto param66 = model->addOperand(&type2);
6587   auto param67 = model->addOperand(&type2);
6588   auto param68 = model->addOperand(&type68);
6589   auto param69 = model->addOperand(&type68);
6590   auto param70 = model->addOperand(&type68);
6591   auto scoresOut1 = model->addOperand(&type72);
6592   auto roiOut1 = model->addOperand(&type70);
6593   auto classesOut1 = model->addOperand(&type12);
6594   auto batchSplitOut1 = model->addOperand(&type12);
6595   auto in1 = model->addOperand(&type66);
6596   auto param71 = model->addOperand(&type2);
6597   auto param72 = model->addOperand(&type2);
6598   auto param73 = model->addOperand(&type68);
6599   auto param74 = model->addOperand(&type68);
6600   auto param75 = model->addOperand(&type2);
6601   auto param76 = model->addOperand(&type2);
6602   auto layout = model->addOperand(&type0);
6603   auto featureMap1 = model->addOperand(&type75);
6604   auto param77 = model->addOperand(&type2);
6605   auto param78 = model->addOperand(&type2);
6606   auto param79 = model->addOperand(&type2);
6607   auto param80 = model->addOperand(&type2);
6608   auto param81 = model->addOperand(&type2);
6609   auto param82 = model->addOperand(&type2);
6610   auto out1 = model->addOperand(&type75);
6611   // Phase 2, operations
6612   static _Float16 scores1_init[] = {0.8999999761581421f, 0.10000000149011612f};
6613   model->setOperandValue(scores1, scores1_init, sizeof(_Float16) * 2);
6614   static _Float16 roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6615   model->setOperandValue(roi1, roi1_init, sizeof(_Float16) * 8);
6616   static int32_t param64_init[] = {0};
6617   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6618   static _Float16 param65_init[] = {0.30000001192092896f};
6619   model->setOperandValue(param65, param65_init, sizeof(_Float16) * 1);
6620   static int32_t param66_init[] = {-1};
6621   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6622   static int32_t param67_init[] = {0};
6623   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6624   static _Float16 param68_init[] = {0.4000000059604645f};
6625   model->setOperandValue(param68, param68_init, sizeof(_Float16) * 1);
6626   static _Float16 param69_init[] = {1.0f};
6627   model->setOperandValue(param69, param69_init, sizeof(_Float16) * 1);
6628   static _Float16 param70_init[] = {0.30000001192092896f};
6629   model->setOperandValue(param70, param70_init, sizeof(_Float16) * 1);
6630   static int32_t param71_init[] = {2};
6631   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6632   static int32_t param72_init[] = {2};
6633   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6634   static _Float16 param73_init[] = {2.0f};
6635   model->setOperandValue(param73, param73_init, sizeof(_Float16) * 1);
6636   static _Float16 param74_init[] = {2.0f};
6637   model->setOperandValue(param74, param74_init, sizeof(_Float16) * 1);
6638   static int32_t param75_init[] = {4};
6639   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6640   static int32_t param76_init[] = {4};
6641   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6642   static bool8 layout_init[] = {true};
6643   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6644   static int32_t param77_init[] = {1};
6645   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6646   static int32_t param78_init[] = {1};
6647   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6648   static int32_t param79_init[] = {1};
6649   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6650   static int32_t param80_init[] = {2};
6651   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6652   static int32_t param81_init[] = {2};
6653   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6654   static int32_t param82_init[] = {0};
6655   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6656   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6657   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6658   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6659   // Phase 3, inputs and outputs
6660   model->identifyInputsAndOutputs(
6661     {in1},
6662     {scoresOut1, classesOut1, out1});
6663   assert(model->isValid());
6664 }
6665 
is_ignored_zero_sized_nchw_float16_2(int i)6666 inline bool is_ignored_zero_sized_nchw_float16_2(int i) {
6667   static std::set<int> ignore = {};
6668   return ignore.find(i) != ignore.end();
6669 }
6670 
CreateModel_zero_sized_dynamic_output_shape_nhwc_2(Model * model)6671 void CreateModel_zero_sized_dynamic_output_shape_nhwc_2(Model *model) {
6672   OperandType type0(Type::BOOL, {});
6673   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
6674   OperandType type11(Type::TENSOR_FLOAT32, {0});
6675   OperandType type12(Type::TENSOR_INT32, {0});
6676   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
6677   OperandType type14(Type::TENSOR_INT32, {1});
6678   OperandType type15(Type::FLOAT32, {});
6679   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
6680   OperandType type17(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
6681   OperandType type2(Type::INT32, {});
6682   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
6683   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
6684   // Phase 1, operands
6685   auto scores1 = model->addOperand(&type9);
6686   auto roi1 = model->addOperand(&type10);
6687   auto param64 = model->addOperand(&type14);
6688   auto param65 = model->addOperand(&type15);
6689   auto param66 = model->addOperand(&type2);
6690   auto param67 = model->addOperand(&type2);
6691   auto param68 = model->addOperand(&type15);
6692   auto param69 = model->addOperand(&type15);
6693   auto param70 = model->addOperand(&type15);
6694   auto scoresOut1 = model->addOperand(&type11);
6695   auto roiOut1 = model->addOperand(&type13);
6696   auto classesOut1 = model->addOperand(&type12);
6697   auto batchSplitOut1 = model->addOperand(&type12);
6698   auto in1 = model->addOperand(&type16);
6699   auto param71 = model->addOperand(&type2);
6700   auto param72 = model->addOperand(&type2);
6701   auto param73 = model->addOperand(&type15);
6702   auto param74 = model->addOperand(&type15);
6703   auto param75 = model->addOperand(&type2);
6704   auto param76 = model->addOperand(&type2);
6705   auto layout = model->addOperand(&type0);
6706   auto featureMap1 = model->addOperand(&type17);
6707   auto param77 = model->addOperand(&type2);
6708   auto param78 = model->addOperand(&type2);
6709   auto param79 = model->addOperand(&type2);
6710   auto param80 = model->addOperand(&type2);
6711   auto param81 = model->addOperand(&type2);
6712   auto param82 = model->addOperand(&type2);
6713   auto out1 = model->addOperand(&type24);
6714   // Phase 2, operations
6715   static float scores1_init[] = {0.9f, 0.1f};
6716   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
6717   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6718   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
6719   static int32_t param64_init[] = {0};
6720   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6721   static float param65_init[] = {0.3f};
6722   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6723   static int32_t param66_init[] = {-1};
6724   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6725   static int32_t param67_init[] = {0};
6726   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6727   static float param68_init[] = {0.4f};
6728   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
6729   static float param69_init[] = {1.0f};
6730   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
6731   static float param70_init[] = {0.3f};
6732   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
6733   static int32_t param71_init[] = {2};
6734   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6735   static int32_t param72_init[] = {2};
6736   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6737   static float param73_init[] = {2.0f};
6738   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
6739   static float param74_init[] = {2.0f};
6740   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
6741   static int32_t param75_init[] = {4};
6742   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6743   static int32_t param76_init[] = {4};
6744   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6745   static bool8 layout_init[] = {false};
6746   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6747   static int32_t param77_init[] = {1};
6748   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6749   static int32_t param78_init[] = {1};
6750   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6751   static int32_t param79_init[] = {1};
6752   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6753   static int32_t param80_init[] = {2};
6754   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6755   static int32_t param81_init[] = {2};
6756   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6757   static int32_t param82_init[] = {0};
6758   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6759   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6760   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6761   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6762   // Phase 3, inputs and outputs
6763   model->identifyInputsAndOutputs(
6764     {in1},
6765     {scoresOut1, classesOut1, out1});
6766   assert(model->isValid());
6767 }
6768 
is_ignored_zero_sized_dynamic_output_shape_nhwc_2(int i)6769 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_2(int i) {
6770   static std::set<int> ignore = {};
6771   return ignore.find(i) != ignore.end();
6772 }
6773 
CreateModel_zero_sized_dynamic_output_shape_nhwc_relaxed_2(Model * model)6774 void CreateModel_zero_sized_dynamic_output_shape_nhwc_relaxed_2(Model *model) {
6775   OperandType type0(Type::BOOL, {});
6776   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
6777   OperandType type11(Type::TENSOR_FLOAT32, {0});
6778   OperandType type12(Type::TENSOR_INT32, {0});
6779   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
6780   OperandType type14(Type::TENSOR_INT32, {1});
6781   OperandType type15(Type::FLOAT32, {});
6782   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
6783   OperandType type17(Type::TENSOR_FLOAT32, {0, 2, 2, 1});
6784   OperandType type2(Type::INT32, {});
6785   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
6786   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
6787   // Phase 1, operands
6788   auto scores1 = model->addOperand(&type9);
6789   auto roi1 = model->addOperand(&type10);
6790   auto param64 = model->addOperand(&type14);
6791   auto param65 = model->addOperand(&type15);
6792   auto param66 = model->addOperand(&type2);
6793   auto param67 = model->addOperand(&type2);
6794   auto param68 = model->addOperand(&type15);
6795   auto param69 = model->addOperand(&type15);
6796   auto param70 = model->addOperand(&type15);
6797   auto scoresOut1 = model->addOperand(&type11);
6798   auto roiOut1 = model->addOperand(&type13);
6799   auto classesOut1 = model->addOperand(&type12);
6800   auto batchSplitOut1 = model->addOperand(&type12);
6801   auto in1 = model->addOperand(&type16);
6802   auto param71 = model->addOperand(&type2);
6803   auto param72 = model->addOperand(&type2);
6804   auto param73 = model->addOperand(&type15);
6805   auto param74 = model->addOperand(&type15);
6806   auto param75 = model->addOperand(&type2);
6807   auto param76 = model->addOperand(&type2);
6808   auto layout = model->addOperand(&type0);
6809   auto featureMap1 = model->addOperand(&type17);
6810   auto param77 = model->addOperand(&type2);
6811   auto param78 = model->addOperand(&type2);
6812   auto param79 = model->addOperand(&type2);
6813   auto param80 = model->addOperand(&type2);
6814   auto param81 = model->addOperand(&type2);
6815   auto param82 = model->addOperand(&type2);
6816   auto out1 = model->addOperand(&type24);
6817   // Phase 2, operations
6818   static float scores1_init[] = {0.9f, 0.1f};
6819   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
6820   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
6821   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
6822   static int32_t param64_init[] = {0};
6823   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6824   static float param65_init[] = {0.3f};
6825   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6826   static int32_t param66_init[] = {-1};
6827   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6828   static int32_t param67_init[] = {0};
6829   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6830   static float param68_init[] = {0.4f};
6831   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
6832   static float param69_init[] = {1.0f};
6833   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
6834   static float param70_init[] = {0.3f};
6835   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
6836   static int32_t param71_init[] = {2};
6837   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6838   static int32_t param72_init[] = {2};
6839   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6840   static float param73_init[] = {2.0f};
6841   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
6842   static float param74_init[] = {2.0f};
6843   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
6844   static int32_t param75_init[] = {4};
6845   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6846   static int32_t param76_init[] = {4};
6847   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6848   static bool8 layout_init[] = {false};
6849   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6850   static int32_t param77_init[] = {1};
6851   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6852   static int32_t param78_init[] = {1};
6853   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6854   static int32_t param79_init[] = {1};
6855   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6856   static int32_t param80_init[] = {2};
6857   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6858   static int32_t param81_init[] = {2};
6859   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6860   static int32_t param82_init[] = {0};
6861   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6862   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6863   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6864   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6865   // Phase 3, inputs and outputs
6866   model->identifyInputsAndOutputs(
6867     {in1},
6868     {scoresOut1, classesOut1, out1});
6869   // Phase 4: set relaxed execution
6870   model->relaxComputationFloat32toFloat16(true);
6871   assert(model->isValid());
6872 }
6873 
is_ignored_zero_sized_dynamic_output_shape_nhwc_relaxed_2(int i)6874 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_relaxed_2(int i) {
6875   static std::set<int> ignore = {};
6876   return ignore.find(i) != ignore.end();
6877 }
6878 
CreateModel_zero_sized_dynamic_output_shape_nhwc_quant8_2(Model * model)6879 void CreateModel_zero_sized_dynamic_output_shape_nhwc_quant8_2(Model *model) {
6880   OperandType type0(Type::BOOL, {});
6881   OperandType type12(Type::TENSOR_INT32, {0});
6882   OperandType type14(Type::TENSOR_INT32, {1});
6883   OperandType type15(Type::FLOAT32, {});
6884   OperandType type2(Type::INT32, {});
6885   OperandType type58(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 1}, 0.1f, 128);
6886   OperandType type59(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
6887   OperandType type61(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
6888   OperandType type62(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
6889   OperandType type63(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
6890   OperandType type64(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
6891   OperandType type76(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128);
6892   // Phase 1, operands
6893   auto scores1 = model->addOperand(&type63);
6894   auto roi1 = model->addOperand(&type61);
6895   auto param64 = model->addOperand(&type14);
6896   auto param65 = model->addOperand(&type15);
6897   auto param66 = model->addOperand(&type2);
6898   auto param67 = model->addOperand(&type2);
6899   auto param68 = model->addOperand(&type15);
6900   auto param69 = model->addOperand(&type15);
6901   auto param70 = model->addOperand(&type15);
6902   auto scoresOut1 = model->addOperand(&type64);
6903   auto roiOut1 = model->addOperand(&type62);
6904   auto classesOut1 = model->addOperand(&type12);
6905   auto batchSplitOut1 = model->addOperand(&type12);
6906   auto in1 = model->addOperand(&type59);
6907   auto param71 = model->addOperand(&type2);
6908   auto param72 = model->addOperand(&type2);
6909   auto param73 = model->addOperand(&type15);
6910   auto param74 = model->addOperand(&type15);
6911   auto param75 = model->addOperand(&type2);
6912   auto param76 = model->addOperand(&type2);
6913   auto layout = model->addOperand(&type0);
6914   auto featureMap1 = model->addOperand(&type58);
6915   auto param77 = model->addOperand(&type2);
6916   auto param78 = model->addOperand(&type2);
6917   auto param79 = model->addOperand(&type2);
6918   auto param80 = model->addOperand(&type2);
6919   auto param81 = model->addOperand(&type2);
6920   auto param82 = model->addOperand(&type2);
6921   auto out1 = model->addOperand(&type76);
6922   // Phase 2, operations
6923   static uint8_t scores1_init[] = {137, 129};
6924   model->setOperandValue(scores1, scores1_init, sizeof(uint8_t) * 2);
6925   static uint16_t roi1_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
6926   model->setOperandValue(roi1, roi1_init, sizeof(uint16_t) * 8);
6927   static int32_t param64_init[] = {0};
6928   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
6929   static float param65_init[] = {0.3f};
6930   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
6931   static int32_t param66_init[] = {-1};
6932   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
6933   static int32_t param67_init[] = {0};
6934   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
6935   static float param68_init[] = {0.4f};
6936   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
6937   static float param69_init[] = {1.0f};
6938   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
6939   static float param70_init[] = {0.3f};
6940   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
6941   static int32_t param71_init[] = {2};
6942   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
6943   static int32_t param72_init[] = {2};
6944   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
6945   static float param73_init[] = {2.0f};
6946   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
6947   static float param74_init[] = {2.0f};
6948   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
6949   static int32_t param75_init[] = {4};
6950   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
6951   static int32_t param76_init[] = {4};
6952   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
6953   static bool8 layout_init[] = {false};
6954   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
6955   static int32_t param77_init[] = {1};
6956   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
6957   static int32_t param78_init[] = {1};
6958   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
6959   static int32_t param79_init[] = {1};
6960   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
6961   static int32_t param80_init[] = {2};
6962   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
6963   static int32_t param81_init[] = {2};
6964   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
6965   static int32_t param82_init[] = {0};
6966   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
6967   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
6968   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
6969   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
6970   // Phase 3, inputs and outputs
6971   model->identifyInputsAndOutputs(
6972     {in1},
6973     {scoresOut1, classesOut1, out1});
6974   assert(model->isValid());
6975 }
6976 
is_ignored_zero_sized_dynamic_output_shape_nhwc_quant8_2(int i)6977 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_quant8_2(int i) {
6978   static std::set<int> ignore = {};
6979   return ignore.find(i) != ignore.end();
6980 }
6981 
CreateModel_zero_sized_dynamic_output_shape_nhwc_float16_2(Model * model)6982 void CreateModel_zero_sized_dynamic_output_shape_nhwc_float16_2(Model *model) {
6983   OperandType type0(Type::BOOL, {});
6984   OperandType type12(Type::TENSOR_INT32, {0});
6985   OperandType type14(Type::TENSOR_INT32, {1});
6986   OperandType type2(Type::INT32, {});
6987   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
6988   OperandType type65(Type::TENSOR_FLOAT16, {0, 2, 2, 1});
6989   OperandType type66(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
6990   OperandType type68(Type::FLOAT16, {});
6991   OperandType type69(Type::TENSOR_FLOAT16, {1, 8});
6992   OperandType type70(Type::TENSOR_FLOAT16, {0, 4});
6993   OperandType type71(Type::TENSOR_FLOAT16, {1, 2});
6994   OperandType type77(Type::TENSOR_FLOAT16, {0});
6995   // Phase 1, operands
6996   auto scores1 = model->addOperand(&type71);
6997   auto roi1 = model->addOperand(&type69);
6998   auto param64 = model->addOperand(&type14);
6999   auto param65 = model->addOperand(&type68);
7000   auto param66 = model->addOperand(&type2);
7001   auto param67 = model->addOperand(&type2);
7002   auto param68 = model->addOperand(&type68);
7003   auto param69 = model->addOperand(&type68);
7004   auto param70 = model->addOperand(&type68);
7005   auto scoresOut1 = model->addOperand(&type77);
7006   auto roiOut1 = model->addOperand(&type70);
7007   auto classesOut1 = model->addOperand(&type12);
7008   auto batchSplitOut1 = model->addOperand(&type12);
7009   auto in1 = model->addOperand(&type66);
7010   auto param71 = model->addOperand(&type2);
7011   auto param72 = model->addOperand(&type2);
7012   auto param73 = model->addOperand(&type68);
7013   auto param74 = model->addOperand(&type68);
7014   auto param75 = model->addOperand(&type2);
7015   auto param76 = model->addOperand(&type2);
7016   auto layout = model->addOperand(&type0);
7017   auto featureMap1 = model->addOperand(&type65);
7018   auto param77 = model->addOperand(&type2);
7019   auto param78 = model->addOperand(&type2);
7020   auto param79 = model->addOperand(&type2);
7021   auto param80 = model->addOperand(&type2);
7022   auto param81 = model->addOperand(&type2);
7023   auto param82 = model->addOperand(&type2);
7024   auto out1 = model->addOperand(&type25);
7025   // Phase 2, operations
7026   static _Float16 scores1_init[] = {0.8999999761581421f, 0.10000000149011612f};
7027   model->setOperandValue(scores1, scores1_init, sizeof(_Float16) * 2);
7028   static _Float16 roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
7029   model->setOperandValue(roi1, roi1_init, sizeof(_Float16) * 8);
7030   static int32_t param64_init[] = {0};
7031   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
7032   static _Float16 param65_init[] = {0.30000001192092896f};
7033   model->setOperandValue(param65, param65_init, sizeof(_Float16) * 1);
7034   static int32_t param66_init[] = {-1};
7035   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
7036   static int32_t param67_init[] = {0};
7037   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
7038   static _Float16 param68_init[] = {0.4000000059604645f};
7039   model->setOperandValue(param68, param68_init, sizeof(_Float16) * 1);
7040   static _Float16 param69_init[] = {1.0f};
7041   model->setOperandValue(param69, param69_init, sizeof(_Float16) * 1);
7042   static _Float16 param70_init[] = {0.30000001192092896f};
7043   model->setOperandValue(param70, param70_init, sizeof(_Float16) * 1);
7044   static int32_t param71_init[] = {2};
7045   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
7046   static int32_t param72_init[] = {2};
7047   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
7048   static _Float16 param73_init[] = {2.0f};
7049   model->setOperandValue(param73, param73_init, sizeof(_Float16) * 1);
7050   static _Float16 param74_init[] = {2.0f};
7051   model->setOperandValue(param74, param74_init, sizeof(_Float16) * 1);
7052   static int32_t param75_init[] = {4};
7053   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
7054   static int32_t param76_init[] = {4};
7055   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
7056   static bool8 layout_init[] = {false};
7057   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
7058   static int32_t param77_init[] = {1};
7059   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
7060   static int32_t param78_init[] = {1};
7061   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
7062   static int32_t param79_init[] = {1};
7063   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
7064   static int32_t param80_init[] = {2};
7065   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
7066   static int32_t param81_init[] = {2};
7067   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
7068   static int32_t param82_init[] = {0};
7069   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
7070   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
7071   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
7072   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
7073   // Phase 3, inputs and outputs
7074   model->identifyInputsAndOutputs(
7075     {in1},
7076     {scoresOut1, classesOut1, out1});
7077   assert(model->isValid());
7078 }
7079 
is_ignored_zero_sized_dynamic_output_shape_nhwc_float16_2(int i)7080 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_float16_2(int i) {
7081   static std::set<int> ignore = {};
7082   return ignore.find(i) != ignore.end();
7083 }
7084 
CreateModel_zero_sized_dynamic_output_shape_nchw_2(Model * model)7085 void CreateModel_zero_sized_dynamic_output_shape_nchw_2(Model *model) {
7086   OperandType type0(Type::BOOL, {});
7087   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
7088   OperandType type11(Type::TENSOR_FLOAT32, {0});
7089   OperandType type12(Type::TENSOR_INT32, {0});
7090   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
7091   OperandType type14(Type::TENSOR_INT32, {1});
7092   OperandType type15(Type::FLOAT32, {});
7093   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
7094   OperandType type2(Type::INT32, {});
7095   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
7096   OperandType type73(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
7097   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
7098   // Phase 1, operands
7099   auto scores1 = model->addOperand(&type9);
7100   auto roi1 = model->addOperand(&type10);
7101   auto param64 = model->addOperand(&type14);
7102   auto param65 = model->addOperand(&type15);
7103   auto param66 = model->addOperand(&type2);
7104   auto param67 = model->addOperand(&type2);
7105   auto param68 = model->addOperand(&type15);
7106   auto param69 = model->addOperand(&type15);
7107   auto param70 = model->addOperand(&type15);
7108   auto scoresOut1 = model->addOperand(&type11);
7109   auto roiOut1 = model->addOperand(&type13);
7110   auto classesOut1 = model->addOperand(&type12);
7111   auto batchSplitOut1 = model->addOperand(&type12);
7112   auto in1 = model->addOperand(&type16);
7113   auto param71 = model->addOperand(&type2);
7114   auto param72 = model->addOperand(&type2);
7115   auto param73 = model->addOperand(&type15);
7116   auto param74 = model->addOperand(&type15);
7117   auto param75 = model->addOperand(&type2);
7118   auto param76 = model->addOperand(&type2);
7119   auto layout = model->addOperand(&type0);
7120   auto featureMap1 = model->addOperand(&type73);
7121   auto param77 = model->addOperand(&type2);
7122   auto param78 = model->addOperand(&type2);
7123   auto param79 = model->addOperand(&type2);
7124   auto param80 = model->addOperand(&type2);
7125   auto param81 = model->addOperand(&type2);
7126   auto param82 = model->addOperand(&type2);
7127   auto out1 = model->addOperand(&type24);
7128   // Phase 2, operations
7129   static float scores1_init[] = {0.9f, 0.1f};
7130   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
7131   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
7132   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
7133   static int32_t param64_init[] = {0};
7134   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
7135   static float param65_init[] = {0.3f};
7136   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
7137   static int32_t param66_init[] = {-1};
7138   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
7139   static int32_t param67_init[] = {0};
7140   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
7141   static float param68_init[] = {0.4f};
7142   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
7143   static float param69_init[] = {1.0f};
7144   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
7145   static float param70_init[] = {0.3f};
7146   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
7147   static int32_t param71_init[] = {2};
7148   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
7149   static int32_t param72_init[] = {2};
7150   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
7151   static float param73_init[] = {2.0f};
7152   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
7153   static float param74_init[] = {2.0f};
7154   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
7155   static int32_t param75_init[] = {4};
7156   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
7157   static int32_t param76_init[] = {4};
7158   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
7159   static bool8 layout_init[] = {true};
7160   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
7161   static int32_t param77_init[] = {1};
7162   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
7163   static int32_t param78_init[] = {1};
7164   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
7165   static int32_t param79_init[] = {1};
7166   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
7167   static int32_t param80_init[] = {2};
7168   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
7169   static int32_t param81_init[] = {2};
7170   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
7171   static int32_t param82_init[] = {0};
7172   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
7173   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
7174   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
7175   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
7176   // Phase 3, inputs and outputs
7177   model->identifyInputsAndOutputs(
7178     {in1},
7179     {scoresOut1, classesOut1, out1});
7180   assert(model->isValid());
7181 }
7182 
is_ignored_zero_sized_dynamic_output_shape_nchw_2(int i)7183 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_2(int i) {
7184   static std::set<int> ignore = {};
7185   return ignore.find(i) != ignore.end();
7186 }
7187 
CreateModel_zero_sized_dynamic_output_shape_nchw_relaxed_2(Model * model)7188 void CreateModel_zero_sized_dynamic_output_shape_nchw_relaxed_2(Model *model) {
7189   OperandType type0(Type::BOOL, {});
7190   OperandType type10(Type::TENSOR_FLOAT32, {1, 8});
7191   OperandType type11(Type::TENSOR_FLOAT32, {0});
7192   OperandType type12(Type::TENSOR_INT32, {0});
7193   OperandType type13(Type::TENSOR_FLOAT32, {0, 4});
7194   OperandType type14(Type::TENSOR_INT32, {1});
7195   OperandType type15(Type::FLOAT32, {});
7196   OperandType type16(Type::TENSOR_FLOAT32, {1, 1, 1, 1});
7197   OperandType type2(Type::INT32, {});
7198   OperandType type24(Type::TENSOR_FLOAT32, {0, 0, 0, 0});
7199   OperandType type73(Type::TENSOR_FLOAT32, {0, 1, 2, 2});
7200   OperandType type9(Type::TENSOR_FLOAT32, {1, 2});
7201   // Phase 1, operands
7202   auto scores1 = model->addOperand(&type9);
7203   auto roi1 = model->addOperand(&type10);
7204   auto param64 = model->addOperand(&type14);
7205   auto param65 = model->addOperand(&type15);
7206   auto param66 = model->addOperand(&type2);
7207   auto param67 = model->addOperand(&type2);
7208   auto param68 = model->addOperand(&type15);
7209   auto param69 = model->addOperand(&type15);
7210   auto param70 = model->addOperand(&type15);
7211   auto scoresOut1 = model->addOperand(&type11);
7212   auto roiOut1 = model->addOperand(&type13);
7213   auto classesOut1 = model->addOperand(&type12);
7214   auto batchSplitOut1 = model->addOperand(&type12);
7215   auto in1 = model->addOperand(&type16);
7216   auto param71 = model->addOperand(&type2);
7217   auto param72 = model->addOperand(&type2);
7218   auto param73 = model->addOperand(&type15);
7219   auto param74 = model->addOperand(&type15);
7220   auto param75 = model->addOperand(&type2);
7221   auto param76 = model->addOperand(&type2);
7222   auto layout = model->addOperand(&type0);
7223   auto featureMap1 = model->addOperand(&type73);
7224   auto param77 = model->addOperand(&type2);
7225   auto param78 = model->addOperand(&type2);
7226   auto param79 = model->addOperand(&type2);
7227   auto param80 = model->addOperand(&type2);
7228   auto param81 = model->addOperand(&type2);
7229   auto param82 = model->addOperand(&type2);
7230   auto out1 = model->addOperand(&type24);
7231   // Phase 2, operations
7232   static float scores1_init[] = {0.9f, 0.1f};
7233   model->setOperandValue(scores1, scores1_init, sizeof(float) * 2);
7234   static float roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
7235   model->setOperandValue(roi1, roi1_init, sizeof(float) * 8);
7236   static int32_t param64_init[] = {0};
7237   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
7238   static float param65_init[] = {0.3f};
7239   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
7240   static int32_t param66_init[] = {-1};
7241   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
7242   static int32_t param67_init[] = {0};
7243   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
7244   static float param68_init[] = {0.4f};
7245   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
7246   static float param69_init[] = {1.0f};
7247   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
7248   static float param70_init[] = {0.3f};
7249   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
7250   static int32_t param71_init[] = {2};
7251   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
7252   static int32_t param72_init[] = {2};
7253   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
7254   static float param73_init[] = {2.0f};
7255   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
7256   static float param74_init[] = {2.0f};
7257   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
7258   static int32_t param75_init[] = {4};
7259   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
7260   static int32_t param76_init[] = {4};
7261   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
7262   static bool8 layout_init[] = {true};
7263   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
7264   static int32_t param77_init[] = {1};
7265   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
7266   static int32_t param78_init[] = {1};
7267   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
7268   static int32_t param79_init[] = {1};
7269   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
7270   static int32_t param80_init[] = {2};
7271   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
7272   static int32_t param81_init[] = {2};
7273   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
7274   static int32_t param82_init[] = {0};
7275   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
7276   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
7277   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
7278   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
7279   // Phase 3, inputs and outputs
7280   model->identifyInputsAndOutputs(
7281     {in1},
7282     {scoresOut1, classesOut1, out1});
7283   // Phase 4: set relaxed execution
7284   model->relaxComputationFloat32toFloat16(true);
7285   assert(model->isValid());
7286 }
7287 
is_ignored_zero_sized_dynamic_output_shape_nchw_relaxed_2(int i)7288 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_relaxed_2(int i) {
7289   static std::set<int> ignore = {};
7290   return ignore.find(i) != ignore.end();
7291 }
7292 
CreateModel_zero_sized_dynamic_output_shape_nchw_quant8_2(Model * model)7293 void CreateModel_zero_sized_dynamic_output_shape_nchw_quant8_2(Model *model) {
7294   OperandType type0(Type::BOOL, {});
7295   OperandType type12(Type::TENSOR_INT32, {0});
7296   OperandType type14(Type::TENSOR_INT32, {1});
7297   OperandType type15(Type::FLOAT32, {});
7298   OperandType type2(Type::INT32, {});
7299   OperandType type59(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128);
7300   OperandType type61(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0);
7301   OperandType type62(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0);
7302   OperandType type63(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128);
7303   OperandType type64(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128);
7304   OperandType type74(Type::TENSOR_QUANT8_ASYMM, {0, 1, 2, 2}, 0.1f, 128);
7305   OperandType type76(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128);
7306   // Phase 1, operands
7307   auto scores1 = model->addOperand(&type63);
7308   auto roi1 = model->addOperand(&type61);
7309   auto param64 = model->addOperand(&type14);
7310   auto param65 = model->addOperand(&type15);
7311   auto param66 = model->addOperand(&type2);
7312   auto param67 = model->addOperand(&type2);
7313   auto param68 = model->addOperand(&type15);
7314   auto param69 = model->addOperand(&type15);
7315   auto param70 = model->addOperand(&type15);
7316   auto scoresOut1 = model->addOperand(&type64);
7317   auto roiOut1 = model->addOperand(&type62);
7318   auto classesOut1 = model->addOperand(&type12);
7319   auto batchSplitOut1 = model->addOperand(&type12);
7320   auto in1 = model->addOperand(&type59);
7321   auto param71 = model->addOperand(&type2);
7322   auto param72 = model->addOperand(&type2);
7323   auto param73 = model->addOperand(&type15);
7324   auto param74 = model->addOperand(&type15);
7325   auto param75 = model->addOperand(&type2);
7326   auto param76 = model->addOperand(&type2);
7327   auto layout = model->addOperand(&type0);
7328   auto featureMap1 = model->addOperand(&type74);
7329   auto param77 = model->addOperand(&type2);
7330   auto param78 = model->addOperand(&type2);
7331   auto param79 = model->addOperand(&type2);
7332   auto param80 = model->addOperand(&type2);
7333   auto param81 = model->addOperand(&type2);
7334   auto param82 = model->addOperand(&type2);
7335   auto out1 = model->addOperand(&type76);
7336   // Phase 2, operations
7337   static uint8_t scores1_init[] = {137, 129};
7338   model->setOperandValue(scores1, scores1_init, sizeof(uint8_t) * 2);
7339   static uint16_t roi1_init[] = {8, 8, 80, 80, 0, 0, 80, 80};
7340   model->setOperandValue(roi1, roi1_init, sizeof(uint16_t) * 8);
7341   static int32_t param64_init[] = {0};
7342   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
7343   static float param65_init[] = {0.3f};
7344   model->setOperandValue(param65, param65_init, sizeof(float) * 1);
7345   static int32_t param66_init[] = {-1};
7346   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
7347   static int32_t param67_init[] = {0};
7348   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
7349   static float param68_init[] = {0.4f};
7350   model->setOperandValue(param68, param68_init, sizeof(float) * 1);
7351   static float param69_init[] = {1.0f};
7352   model->setOperandValue(param69, param69_init, sizeof(float) * 1);
7353   static float param70_init[] = {0.3f};
7354   model->setOperandValue(param70, param70_init, sizeof(float) * 1);
7355   static int32_t param71_init[] = {2};
7356   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
7357   static int32_t param72_init[] = {2};
7358   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
7359   static float param73_init[] = {2.0f};
7360   model->setOperandValue(param73, param73_init, sizeof(float) * 1);
7361   static float param74_init[] = {2.0f};
7362   model->setOperandValue(param74, param74_init, sizeof(float) * 1);
7363   static int32_t param75_init[] = {4};
7364   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
7365   static int32_t param76_init[] = {4};
7366   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
7367   static bool8 layout_init[] = {true};
7368   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
7369   static int32_t param77_init[] = {1};
7370   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
7371   static int32_t param78_init[] = {1};
7372   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
7373   static int32_t param79_init[] = {1};
7374   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
7375   static int32_t param80_init[] = {2};
7376   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
7377   static int32_t param81_init[] = {2};
7378   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
7379   static int32_t param82_init[] = {0};
7380   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
7381   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
7382   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
7383   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
7384   // Phase 3, inputs and outputs
7385   model->identifyInputsAndOutputs(
7386     {in1},
7387     {scoresOut1, classesOut1, out1});
7388   assert(model->isValid());
7389 }
7390 
is_ignored_zero_sized_dynamic_output_shape_nchw_quant8_2(int i)7391 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_quant8_2(int i) {
7392   static std::set<int> ignore = {};
7393   return ignore.find(i) != ignore.end();
7394 }
7395 
CreateModel_zero_sized_dynamic_output_shape_nchw_float16_2(Model * model)7396 void CreateModel_zero_sized_dynamic_output_shape_nchw_float16_2(Model *model) {
7397   OperandType type0(Type::BOOL, {});
7398   OperandType type12(Type::TENSOR_INT32, {0});
7399   OperandType type14(Type::TENSOR_INT32, {1});
7400   OperandType type2(Type::INT32, {});
7401   OperandType type25(Type::TENSOR_FLOAT16, {0, 0, 0, 0});
7402   OperandType type66(Type::TENSOR_FLOAT16, {1, 1, 1, 1});
7403   OperandType type68(Type::FLOAT16, {});
7404   OperandType type69(Type::TENSOR_FLOAT16, {1, 8});
7405   OperandType type70(Type::TENSOR_FLOAT16, {0, 4});
7406   OperandType type71(Type::TENSOR_FLOAT16, {1, 2});
7407   OperandType type75(Type::TENSOR_FLOAT16, {0, 1, 2, 2});
7408   OperandType type77(Type::TENSOR_FLOAT16, {0});
7409   // Phase 1, operands
7410   auto scores1 = model->addOperand(&type71);
7411   auto roi1 = model->addOperand(&type69);
7412   auto param64 = model->addOperand(&type14);
7413   auto param65 = model->addOperand(&type68);
7414   auto param66 = model->addOperand(&type2);
7415   auto param67 = model->addOperand(&type2);
7416   auto param68 = model->addOperand(&type68);
7417   auto param69 = model->addOperand(&type68);
7418   auto param70 = model->addOperand(&type68);
7419   auto scoresOut1 = model->addOperand(&type77);
7420   auto roiOut1 = model->addOperand(&type70);
7421   auto classesOut1 = model->addOperand(&type12);
7422   auto batchSplitOut1 = model->addOperand(&type12);
7423   auto in1 = model->addOperand(&type66);
7424   auto param71 = model->addOperand(&type2);
7425   auto param72 = model->addOperand(&type2);
7426   auto param73 = model->addOperand(&type68);
7427   auto param74 = model->addOperand(&type68);
7428   auto param75 = model->addOperand(&type2);
7429   auto param76 = model->addOperand(&type2);
7430   auto layout = model->addOperand(&type0);
7431   auto featureMap1 = model->addOperand(&type75);
7432   auto param77 = model->addOperand(&type2);
7433   auto param78 = model->addOperand(&type2);
7434   auto param79 = model->addOperand(&type2);
7435   auto param80 = model->addOperand(&type2);
7436   auto param81 = model->addOperand(&type2);
7437   auto param82 = model->addOperand(&type2);
7438   auto out1 = model->addOperand(&type25);
7439   // Phase 2, operations
7440   static _Float16 scores1_init[] = {0.8999999761581421f, 0.10000000149011612f};
7441   model->setOperandValue(scores1, scores1_init, sizeof(_Float16) * 2);
7442   static _Float16 roi1_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f};
7443   model->setOperandValue(roi1, roi1_init, sizeof(_Float16) * 8);
7444   static int32_t param64_init[] = {0};
7445   model->setOperandValue(param64, param64_init, sizeof(int32_t) * 1);
7446   static _Float16 param65_init[] = {0.30000001192092896f};
7447   model->setOperandValue(param65, param65_init, sizeof(_Float16) * 1);
7448   static int32_t param66_init[] = {-1};
7449   model->setOperandValue(param66, param66_init, sizeof(int32_t) * 1);
7450   static int32_t param67_init[] = {0};
7451   model->setOperandValue(param67, param67_init, sizeof(int32_t) * 1);
7452   static _Float16 param68_init[] = {0.4000000059604645f};
7453   model->setOperandValue(param68, param68_init, sizeof(_Float16) * 1);
7454   static _Float16 param69_init[] = {1.0f};
7455   model->setOperandValue(param69, param69_init, sizeof(_Float16) * 1);
7456   static _Float16 param70_init[] = {0.30000001192092896f};
7457   model->setOperandValue(param70, param70_init, sizeof(_Float16) * 1);
7458   static int32_t param71_init[] = {2};
7459   model->setOperandValue(param71, param71_init, sizeof(int32_t) * 1);
7460   static int32_t param72_init[] = {2};
7461   model->setOperandValue(param72, param72_init, sizeof(int32_t) * 1);
7462   static _Float16 param73_init[] = {2.0f};
7463   model->setOperandValue(param73, param73_init, sizeof(_Float16) * 1);
7464   static _Float16 param74_init[] = {2.0f};
7465   model->setOperandValue(param74, param74_init, sizeof(_Float16) * 1);
7466   static int32_t param75_init[] = {4};
7467   model->setOperandValue(param75, param75_init, sizeof(int32_t) * 1);
7468   static int32_t param76_init[] = {4};
7469   model->setOperandValue(param76, param76_init, sizeof(int32_t) * 1);
7470   static bool8 layout_init[] = {true};
7471   model->setOperandValue(layout, layout_init, sizeof(bool8) * 1);
7472   static int32_t param77_init[] = {1};
7473   model->setOperandValue(param77, param77_init, sizeof(int32_t) * 1);
7474   static int32_t param78_init[] = {1};
7475   model->setOperandValue(param78, param78_init, sizeof(int32_t) * 1);
7476   static int32_t param79_init[] = {1};
7477   model->setOperandValue(param79, param79_init, sizeof(int32_t) * 1);
7478   static int32_t param80_init[] = {2};
7479   model->setOperandValue(param80, param80_init, sizeof(int32_t) * 1);
7480   static int32_t param81_init[] = {2};
7481   model->setOperandValue(param81, param81_init, sizeof(int32_t) * 1);
7482   static int32_t param82_init[] = {0};
7483   model->setOperandValue(param82, param82_init, sizeof(int32_t) * 1);
7484   model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores1, roi1, param64, param65, param66, param67, param68, param69, param70}, {scoresOut1, roiOut1, classesOut1, batchSplitOut1});
7485   model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roiOut1, batchSplitOut1, param71, param72, param73, param74, param75, param76, layout}, {featureMap1});
7486   model->addOperation(ANEURALNETWORKS_AVERAGE_POOL_2D, {featureMap1, param77, param78, param79, param80, param81, param82, layout}, {out1});
7487   // Phase 3, inputs and outputs
7488   model->identifyInputsAndOutputs(
7489     {in1},
7490     {scoresOut1, classesOut1, out1});
7491   assert(model->isValid());
7492 }
7493 
is_ignored_zero_sized_dynamic_output_shape_nchw_float16_2(int i)7494 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_float16_2(int i) {
7495   static std::set<int> ignore = {};
7496   return ignore.find(i) != ignore.end();
7497 }
7498 
7499