1 // clang-format off
2 // Generated file (from: bbox_graph.mod.py). Do not edit
3 // Create the model
createTestModel_zero_sized()4 Model createTestModel_zero_sized() {
5 const std::vector<Operand> operands = {
6 {
7 .type = OperandType::TENSOR_FLOAT32,
8 .dimensions = {1, 1, 1, 1},
9 .numberOfConsumers = 1,
10 .scale = 0.0f,
11 .zeroPoint = 0,
12 .lifetime = OperandLifeTime::MODEL_INPUT,
13 .location = {.poolIndex = 0, .offset = 0, .length = 0},
14 },
15 {
16 .type = OperandType::TENSOR_FLOAT32,
17 .dimensions = {1, 1, 1, 4},
18 .numberOfConsumers = 1,
19 .scale = 0.0f,
20 .zeroPoint = 0,
21 .lifetime = OperandLifeTime::MODEL_INPUT,
22 .location = {.poolIndex = 0, .offset = 0, .length = 0},
23 },
24 {
25 .type = OperandType::TENSOR_FLOAT32,
26 .dimensions = {1, 4},
27 .numberOfConsumers = 1,
28 .scale = 0.0f,
29 .zeroPoint = 0,
30 .lifetime = OperandLifeTime::MODEL_INPUT,
31 .location = {.poolIndex = 0, .offset = 0, .length = 0},
32 },
33 {
34 .type = OperandType::TENSOR_FLOAT32,
35 .dimensions = {1, 2},
36 .numberOfConsumers = 2,
37 .scale = 0.0f,
38 .zeroPoint = 0,
39 .lifetime = OperandLifeTime::MODEL_INPUT,
40 .location = {.poolIndex = 0, .offset = 0, .length = 0},
41 },
42 {
43 .type = OperandType::FLOAT32,
44 .dimensions = {},
45 .numberOfConsumers = 1,
46 .scale = 0.0f,
47 .zeroPoint = 0,
48 .lifetime = OperandLifeTime::CONSTANT_COPY,
49 .location = {.poolIndex = 0, .offset = 0, .length = 4},
50 },
51 {
52 .type = OperandType::FLOAT32,
53 .dimensions = {},
54 .numberOfConsumers = 1,
55 .scale = 0.0f,
56 .zeroPoint = 0,
57 .lifetime = OperandLifeTime::CONSTANT_COPY,
58 .location = {.poolIndex = 0, .offset = 4, .length = 4},
59 },
60 {
61 .type = OperandType::INT32,
62 .dimensions = {},
63 .numberOfConsumers = 1,
64 .scale = 0.0f,
65 .zeroPoint = 0,
66 .lifetime = OperandLifeTime::CONSTANT_COPY,
67 .location = {.poolIndex = 0, .offset = 8, .length = 4},
68 },
69 {
70 .type = OperandType::INT32,
71 .dimensions = {},
72 .numberOfConsumers = 1,
73 .scale = 0.0f,
74 .zeroPoint = 0,
75 .lifetime = OperandLifeTime::CONSTANT_COPY,
76 .location = {.poolIndex = 0, .offset = 12, .length = 4},
77 },
78 {
79 .type = OperandType::FLOAT32,
80 .dimensions = {},
81 .numberOfConsumers = 1,
82 .scale = 0.0f,
83 .zeroPoint = 0,
84 .lifetime = OperandLifeTime::CONSTANT_COPY,
85 .location = {.poolIndex = 0, .offset = 16, .length = 4},
86 },
87 {
88 .type = OperandType::FLOAT32,
89 .dimensions = {},
90 .numberOfConsumers = 1,
91 .scale = 0.0f,
92 .zeroPoint = 0,
93 .lifetime = OperandLifeTime::CONSTANT_COPY,
94 .location = {.poolIndex = 0, .offset = 20, .length = 4},
95 },
96 {
97 .type = OperandType::BOOL,
98 .dimensions = {},
99 .numberOfConsumers = 2,
100 .scale = 0.0f,
101 .zeroPoint = 0,
102 .lifetime = OperandLifeTime::CONSTANT_COPY,
103 .location = {.poolIndex = 0, .offset = 24, .length = 1},
104 },
105 {
106 .type = OperandType::TENSOR_FLOAT32,
107 .dimensions = {0},
108 .numberOfConsumers = 0,
109 .scale = 0.0f,
110 .zeroPoint = 0,
111 .lifetime = OperandLifeTime::MODEL_OUTPUT,
112 .location = {.poolIndex = 0, .offset = 0, .length = 0},
113 },
114 {
115 .type = OperandType::TENSOR_FLOAT32,
116 .dimensions = {0, 4},
117 .numberOfConsumers = 2,
118 .scale = 0.0f,
119 .zeroPoint = 0,
120 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
121 .location = {.poolIndex = 0, .offset = 0, .length = 0},
122 },
123 {
124 .type = OperandType::TENSOR_INT32,
125 .dimensions = {0},
126 .numberOfConsumers = 3,
127 .scale = 0.0f,
128 .zeroPoint = 0,
129 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
130 .location = {.poolIndex = 0, .offset = 0, .length = 0},
131 },
132 {
133 .type = OperandType::TENSOR_FLOAT32,
134 .dimensions = {1, 1, 1, 1},
135 .numberOfConsumers = 1,
136 .scale = 0.0f,
137 .zeroPoint = 0,
138 .lifetime = OperandLifeTime::MODEL_INPUT,
139 .location = {.poolIndex = 0, .offset = 0, .length = 0},
140 },
141 {
142 .type = OperandType::INT32,
143 .dimensions = {},
144 .numberOfConsumers = 1,
145 .scale = 0.0f,
146 .zeroPoint = 0,
147 .lifetime = OperandLifeTime::CONSTANT_COPY,
148 .location = {.poolIndex = 0, .offset = 25, .length = 4},
149 },
150 {
151 .type = OperandType::INT32,
152 .dimensions = {},
153 .numberOfConsumers = 1,
154 .scale = 0.0f,
155 .zeroPoint = 0,
156 .lifetime = OperandLifeTime::CONSTANT_COPY,
157 .location = {.poolIndex = 0, .offset = 29, .length = 4},
158 },
159 {
160 .type = OperandType::FLOAT32,
161 .dimensions = {},
162 .numberOfConsumers = 1,
163 .scale = 0.0f,
164 .zeroPoint = 0,
165 .lifetime = OperandLifeTime::CONSTANT_COPY,
166 .location = {.poolIndex = 0, .offset = 33, .length = 4},
167 },
168 {
169 .type = OperandType::FLOAT32,
170 .dimensions = {},
171 .numberOfConsumers = 1,
172 .scale = 0.0f,
173 .zeroPoint = 0,
174 .lifetime = OperandLifeTime::CONSTANT_COPY,
175 .location = {.poolIndex = 0, .offset = 37, .length = 4},
176 },
177 {
178 .type = OperandType::INT32,
179 .dimensions = {},
180 .numberOfConsumers = 1,
181 .scale = 0.0f,
182 .zeroPoint = 0,
183 .lifetime = OperandLifeTime::CONSTANT_COPY,
184 .location = {.poolIndex = 0, .offset = 41, .length = 4},
185 },
186 {
187 .type = OperandType::INT32,
188 .dimensions = {},
189 .numberOfConsumers = 1,
190 .scale = 0.0f,
191 .zeroPoint = 0,
192 .lifetime = OperandLifeTime::CONSTANT_COPY,
193 .location = {.poolIndex = 0, .offset = 45, .length = 4},
194 },
195 {
196 .type = OperandType::TENSOR_FLOAT32,
197 .dimensions = {0, 2, 2, 1},
198 .numberOfConsumers = 2,
199 .scale = 0.0f,
200 .zeroPoint = 0,
201 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
202 .location = {.poolIndex = 0, .offset = 0, .length = 0},
203 },
204 {
205 .type = OperandType::TENSOR_FLOAT32,
206 .dimensions = {8, 4},
207 .numberOfConsumers = 1,
208 .scale = 0.0f,
209 .zeroPoint = 0,
210 .lifetime = OperandLifeTime::CONSTANT_COPY,
211 .location = {.poolIndex = 0, .offset = 49, .length = 128},
212 },
213 {
214 .type = OperandType::TENSOR_FLOAT32,
215 .dimensions = {8},
216 .numberOfConsumers = 1,
217 .scale = 0.0f,
218 .zeroPoint = 0,
219 .lifetime = OperandLifeTime::CONSTANT_COPY,
220 .location = {.poolIndex = 0, .offset = 177, .length = 32},
221 },
222 {
223 .type = OperandType::INT32,
224 .dimensions = {},
225 .numberOfConsumers = 1,
226 .scale = 0.0f,
227 .zeroPoint = 0,
228 .lifetime = OperandLifeTime::CONSTANT_COPY,
229 .location = {.poolIndex = 0, .offset = 209, .length = 4},
230 },
231 {
232 .type = OperandType::TENSOR_FLOAT32,
233 .dimensions = {0, 8},
234 .numberOfConsumers = 1,
235 .scale = 0.0f,
236 .zeroPoint = 0,
237 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
238 .location = {.poolIndex = 0, .offset = 0, .length = 0},
239 },
240 {
241 .type = OperandType::TENSOR_FLOAT32,
242 .dimensions = {2, 4},
243 .numberOfConsumers = 1,
244 .scale = 0.0f,
245 .zeroPoint = 0,
246 .lifetime = OperandLifeTime::CONSTANT_COPY,
247 .location = {.poolIndex = 0, .offset = 213, .length = 32},
248 },
249 {
250 .type = OperandType::TENSOR_FLOAT32,
251 .dimensions = {2},
252 .numberOfConsumers = 1,
253 .scale = 0.0f,
254 .zeroPoint = 0,
255 .lifetime = OperandLifeTime::CONSTANT_COPY,
256 .location = {.poolIndex = 0, .offset = 245, .length = 8},
257 },
258 {
259 .type = OperandType::INT32,
260 .dimensions = {},
261 .numberOfConsumers = 1,
262 .scale = 0.0f,
263 .zeroPoint = 0,
264 .lifetime = OperandLifeTime::CONSTANT_COPY,
265 .location = {.poolIndex = 0, .offset = 253, .length = 4},
266 },
267 {
268 .type = OperandType::TENSOR_FLOAT32,
269 .dimensions = {0, 2},
270 .numberOfConsumers = 1,
271 .scale = 0.0f,
272 .zeroPoint = 0,
273 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
274 .location = {.poolIndex = 0, .offset = 0, .length = 0},
275 },
276 {
277 .type = OperandType::TENSOR_FLOAT32,
278 .dimensions = {0, 8},
279 .numberOfConsumers = 1,
280 .scale = 0.0f,
281 .zeroPoint = 0,
282 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
283 .location = {.poolIndex = 0, .offset = 0, .length = 0},
284 },
285 {
286 .type = OperandType::FLOAT32,
287 .dimensions = {},
288 .numberOfConsumers = 1,
289 .scale = 0.0f,
290 .zeroPoint = 0,
291 .lifetime = OperandLifeTime::CONSTANT_COPY,
292 .location = {.poolIndex = 0, .offset = 257, .length = 4},
293 },
294 {
295 .type = OperandType::INT32,
296 .dimensions = {},
297 .numberOfConsumers = 1,
298 .scale = 0.0f,
299 .zeroPoint = 0,
300 .lifetime = OperandLifeTime::CONSTANT_COPY,
301 .location = {.poolIndex = 0, .offset = 261, .length = 4},
302 },
303 {
304 .type = OperandType::INT32,
305 .dimensions = {},
306 .numberOfConsumers = 1,
307 .scale = 0.0f,
308 .zeroPoint = 0,
309 .lifetime = OperandLifeTime::CONSTANT_COPY,
310 .location = {.poolIndex = 0, .offset = 265, .length = 4},
311 },
312 {
313 .type = OperandType::FLOAT32,
314 .dimensions = {},
315 .numberOfConsumers = 1,
316 .scale = 0.0f,
317 .zeroPoint = 0,
318 .lifetime = OperandLifeTime::CONSTANT_COPY,
319 .location = {.poolIndex = 0, .offset = 269, .length = 4},
320 },
321 {
322 .type = OperandType::FLOAT32,
323 .dimensions = {},
324 .numberOfConsumers = 1,
325 .scale = 0.0f,
326 .zeroPoint = 0,
327 .lifetime = OperandLifeTime::CONSTANT_COPY,
328 .location = {.poolIndex = 0, .offset = 273, .length = 4},
329 },
330 {
331 .type = OperandType::FLOAT32,
332 .dimensions = {},
333 .numberOfConsumers = 1,
334 .scale = 0.0f,
335 .zeroPoint = 0,
336 .lifetime = OperandLifeTime::CONSTANT_COPY,
337 .location = {.poolIndex = 0, .offset = 277, .length = 4},
338 },
339 {
340 .type = OperandType::TENSOR_FLOAT32,
341 .dimensions = {0},
342 .numberOfConsumers = 0,
343 .scale = 0.0f,
344 .zeroPoint = 0,
345 .lifetime = OperandLifeTime::MODEL_OUTPUT,
346 .location = {.poolIndex = 0, .offset = 0, .length = 0},
347 },
348 {
349 .type = OperandType::TENSOR_FLOAT32,
350 .dimensions = {0, 4},
351 .numberOfConsumers = 0,
352 .scale = 0.0f,
353 .zeroPoint = 0,
354 .lifetime = OperandLifeTime::MODEL_OUTPUT,
355 .location = {.poolIndex = 0, .offset = 0, .length = 0},
356 },
357 {
358 .type = OperandType::TENSOR_INT32,
359 .dimensions = {0},
360 .numberOfConsumers = 0,
361 .scale = 0.0f,
362 .zeroPoint = 0,
363 .lifetime = OperandLifeTime::MODEL_OUTPUT,
364 .location = {.poolIndex = 0, .offset = 0, .length = 0},
365 },
366 {
367 .type = OperandType::TENSOR_INT32,
368 .dimensions = {0},
369 .numberOfConsumers = 0,
370 .scale = 0.0f,
371 .zeroPoint = 0,
372 .lifetime = OperandLifeTime::MODEL_OUTPUT,
373 .location = {.poolIndex = 0, .offset = 0, .length = 0},
374 }
375 };
376
377 const std::vector<Operation> operations = {
378 {
379 .type = OperationType::GENERATE_PROPOSALS,
380 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
381 .outputs = {11, 12, 13},
382 },
383 {
384 .type = OperationType::ROI_ALIGN,
385 .inputs = {14, 12, 13, 15, 16, 17, 18, 19, 20, 10},
386 .outputs = {21},
387 },
388 {
389 .type = OperationType::FULLY_CONNECTED,
390 .inputs = {21, 22, 23, 24},
391 .outputs = {25},
392 },
393 {
394 .type = OperationType::FULLY_CONNECTED,
395 .inputs = {21, 26, 27, 28},
396 .outputs = {29},
397 },
398 {
399 .type = OperationType::AXIS_ALIGNED_BBOX_TRANSFORM,
400 .inputs = {12, 25, 13, 3},
401 .outputs = {30},
402 },
403 {
404 .type = OperationType::BOX_WITH_NMS_LIMIT,
405 .inputs = {29, 30, 13, 31, 32, 33, 34, 35, 36},
406 .outputs = {37, 38, 39, 40},
407 }
408 };
409
410 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 14};
411 const std::vector<uint32_t> outputIndexes = {11, 37, 38, 39, 40};
412 std::vector<uint8_t> operandValues = {
413 0, 0, 128, 63, 0, 0, 128, 63, 255, 255, 255, 255, 255, 255, 255, 255, 154, 153, 153, 62, 0, 0, 32, 65, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 205, 204, 204, 61, 255, 255, 255, 255, 0, 0, 0, 0, 154, 153, 153, 62, 0, 0, 128, 63, 205, 204, 204, 61
414 };
415 const std::vector<hidl_memory> pools = {};
416
417 return {
418 .operands = operands,
419 .operations = operations,
420 .inputIndexes = inputIndexes,
421 .outputIndexes = outputIndexes,
422 .operandValues = operandValues,
423 .pools = pools,
424 };
425 }
426
is_ignored_zero_sized(int i)427 inline bool is_ignored_zero_sized(int i) {
428 static std::set<int> ignore = {};
429 return ignore.find(i) != ignore.end();
430 }
431
432 // Create the model
createTestModel_zero_sized_relaxed()433 Model createTestModel_zero_sized_relaxed() {
434 const std::vector<Operand> operands = {
435 {
436 .type = OperandType::TENSOR_FLOAT32,
437 .dimensions = {1, 1, 1, 1},
438 .numberOfConsumers = 1,
439 .scale = 0.0f,
440 .zeroPoint = 0,
441 .lifetime = OperandLifeTime::MODEL_INPUT,
442 .location = {.poolIndex = 0, .offset = 0, .length = 0},
443 },
444 {
445 .type = OperandType::TENSOR_FLOAT32,
446 .dimensions = {1, 1, 1, 4},
447 .numberOfConsumers = 1,
448 .scale = 0.0f,
449 .zeroPoint = 0,
450 .lifetime = OperandLifeTime::MODEL_INPUT,
451 .location = {.poolIndex = 0, .offset = 0, .length = 0},
452 },
453 {
454 .type = OperandType::TENSOR_FLOAT32,
455 .dimensions = {1, 4},
456 .numberOfConsumers = 1,
457 .scale = 0.0f,
458 .zeroPoint = 0,
459 .lifetime = OperandLifeTime::MODEL_INPUT,
460 .location = {.poolIndex = 0, .offset = 0, .length = 0},
461 },
462 {
463 .type = OperandType::TENSOR_FLOAT32,
464 .dimensions = {1, 2},
465 .numberOfConsumers = 2,
466 .scale = 0.0f,
467 .zeroPoint = 0,
468 .lifetime = OperandLifeTime::MODEL_INPUT,
469 .location = {.poolIndex = 0, .offset = 0, .length = 0},
470 },
471 {
472 .type = OperandType::FLOAT32,
473 .dimensions = {},
474 .numberOfConsumers = 1,
475 .scale = 0.0f,
476 .zeroPoint = 0,
477 .lifetime = OperandLifeTime::CONSTANT_COPY,
478 .location = {.poolIndex = 0, .offset = 0, .length = 4},
479 },
480 {
481 .type = OperandType::FLOAT32,
482 .dimensions = {},
483 .numberOfConsumers = 1,
484 .scale = 0.0f,
485 .zeroPoint = 0,
486 .lifetime = OperandLifeTime::CONSTANT_COPY,
487 .location = {.poolIndex = 0, .offset = 4, .length = 4},
488 },
489 {
490 .type = OperandType::INT32,
491 .dimensions = {},
492 .numberOfConsumers = 1,
493 .scale = 0.0f,
494 .zeroPoint = 0,
495 .lifetime = OperandLifeTime::CONSTANT_COPY,
496 .location = {.poolIndex = 0, .offset = 8, .length = 4},
497 },
498 {
499 .type = OperandType::INT32,
500 .dimensions = {},
501 .numberOfConsumers = 1,
502 .scale = 0.0f,
503 .zeroPoint = 0,
504 .lifetime = OperandLifeTime::CONSTANT_COPY,
505 .location = {.poolIndex = 0, .offset = 12, .length = 4},
506 },
507 {
508 .type = OperandType::FLOAT32,
509 .dimensions = {},
510 .numberOfConsumers = 1,
511 .scale = 0.0f,
512 .zeroPoint = 0,
513 .lifetime = OperandLifeTime::CONSTANT_COPY,
514 .location = {.poolIndex = 0, .offset = 16, .length = 4},
515 },
516 {
517 .type = OperandType::FLOAT32,
518 .dimensions = {},
519 .numberOfConsumers = 1,
520 .scale = 0.0f,
521 .zeroPoint = 0,
522 .lifetime = OperandLifeTime::CONSTANT_COPY,
523 .location = {.poolIndex = 0, .offset = 20, .length = 4},
524 },
525 {
526 .type = OperandType::BOOL,
527 .dimensions = {},
528 .numberOfConsumers = 2,
529 .scale = 0.0f,
530 .zeroPoint = 0,
531 .lifetime = OperandLifeTime::CONSTANT_COPY,
532 .location = {.poolIndex = 0, .offset = 24, .length = 1},
533 },
534 {
535 .type = OperandType::TENSOR_FLOAT32,
536 .dimensions = {0},
537 .numberOfConsumers = 0,
538 .scale = 0.0f,
539 .zeroPoint = 0,
540 .lifetime = OperandLifeTime::MODEL_OUTPUT,
541 .location = {.poolIndex = 0, .offset = 0, .length = 0},
542 },
543 {
544 .type = OperandType::TENSOR_FLOAT32,
545 .dimensions = {0, 4},
546 .numberOfConsumers = 2,
547 .scale = 0.0f,
548 .zeroPoint = 0,
549 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
550 .location = {.poolIndex = 0, .offset = 0, .length = 0},
551 },
552 {
553 .type = OperandType::TENSOR_INT32,
554 .dimensions = {0},
555 .numberOfConsumers = 3,
556 .scale = 0.0f,
557 .zeroPoint = 0,
558 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
559 .location = {.poolIndex = 0, .offset = 0, .length = 0},
560 },
561 {
562 .type = OperandType::TENSOR_FLOAT32,
563 .dimensions = {1, 1, 1, 1},
564 .numberOfConsumers = 1,
565 .scale = 0.0f,
566 .zeroPoint = 0,
567 .lifetime = OperandLifeTime::MODEL_INPUT,
568 .location = {.poolIndex = 0, .offset = 0, .length = 0},
569 },
570 {
571 .type = OperandType::INT32,
572 .dimensions = {},
573 .numberOfConsumers = 1,
574 .scale = 0.0f,
575 .zeroPoint = 0,
576 .lifetime = OperandLifeTime::CONSTANT_COPY,
577 .location = {.poolIndex = 0, .offset = 25, .length = 4},
578 },
579 {
580 .type = OperandType::INT32,
581 .dimensions = {},
582 .numberOfConsumers = 1,
583 .scale = 0.0f,
584 .zeroPoint = 0,
585 .lifetime = OperandLifeTime::CONSTANT_COPY,
586 .location = {.poolIndex = 0, .offset = 29, .length = 4},
587 },
588 {
589 .type = OperandType::FLOAT32,
590 .dimensions = {},
591 .numberOfConsumers = 1,
592 .scale = 0.0f,
593 .zeroPoint = 0,
594 .lifetime = OperandLifeTime::CONSTANT_COPY,
595 .location = {.poolIndex = 0, .offset = 33, .length = 4},
596 },
597 {
598 .type = OperandType::FLOAT32,
599 .dimensions = {},
600 .numberOfConsumers = 1,
601 .scale = 0.0f,
602 .zeroPoint = 0,
603 .lifetime = OperandLifeTime::CONSTANT_COPY,
604 .location = {.poolIndex = 0, .offset = 37, .length = 4},
605 },
606 {
607 .type = OperandType::INT32,
608 .dimensions = {},
609 .numberOfConsumers = 1,
610 .scale = 0.0f,
611 .zeroPoint = 0,
612 .lifetime = OperandLifeTime::CONSTANT_COPY,
613 .location = {.poolIndex = 0, .offset = 41, .length = 4},
614 },
615 {
616 .type = OperandType::INT32,
617 .dimensions = {},
618 .numberOfConsumers = 1,
619 .scale = 0.0f,
620 .zeroPoint = 0,
621 .lifetime = OperandLifeTime::CONSTANT_COPY,
622 .location = {.poolIndex = 0, .offset = 45, .length = 4},
623 },
624 {
625 .type = OperandType::TENSOR_FLOAT32,
626 .dimensions = {0, 2, 2, 1},
627 .numberOfConsumers = 2,
628 .scale = 0.0f,
629 .zeroPoint = 0,
630 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
631 .location = {.poolIndex = 0, .offset = 0, .length = 0},
632 },
633 {
634 .type = OperandType::TENSOR_FLOAT32,
635 .dimensions = {8, 4},
636 .numberOfConsumers = 1,
637 .scale = 0.0f,
638 .zeroPoint = 0,
639 .lifetime = OperandLifeTime::CONSTANT_COPY,
640 .location = {.poolIndex = 0, .offset = 49, .length = 128},
641 },
642 {
643 .type = OperandType::TENSOR_FLOAT32,
644 .dimensions = {8},
645 .numberOfConsumers = 1,
646 .scale = 0.0f,
647 .zeroPoint = 0,
648 .lifetime = OperandLifeTime::CONSTANT_COPY,
649 .location = {.poolIndex = 0, .offset = 177, .length = 32},
650 },
651 {
652 .type = OperandType::INT32,
653 .dimensions = {},
654 .numberOfConsumers = 1,
655 .scale = 0.0f,
656 .zeroPoint = 0,
657 .lifetime = OperandLifeTime::CONSTANT_COPY,
658 .location = {.poolIndex = 0, .offset = 209, .length = 4},
659 },
660 {
661 .type = OperandType::TENSOR_FLOAT32,
662 .dimensions = {0, 8},
663 .numberOfConsumers = 1,
664 .scale = 0.0f,
665 .zeroPoint = 0,
666 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
667 .location = {.poolIndex = 0, .offset = 0, .length = 0},
668 },
669 {
670 .type = OperandType::TENSOR_FLOAT32,
671 .dimensions = {2, 4},
672 .numberOfConsumers = 1,
673 .scale = 0.0f,
674 .zeroPoint = 0,
675 .lifetime = OperandLifeTime::CONSTANT_COPY,
676 .location = {.poolIndex = 0, .offset = 213, .length = 32},
677 },
678 {
679 .type = OperandType::TENSOR_FLOAT32,
680 .dimensions = {2},
681 .numberOfConsumers = 1,
682 .scale = 0.0f,
683 .zeroPoint = 0,
684 .lifetime = OperandLifeTime::CONSTANT_COPY,
685 .location = {.poolIndex = 0, .offset = 245, .length = 8},
686 },
687 {
688 .type = OperandType::INT32,
689 .dimensions = {},
690 .numberOfConsumers = 1,
691 .scale = 0.0f,
692 .zeroPoint = 0,
693 .lifetime = OperandLifeTime::CONSTANT_COPY,
694 .location = {.poolIndex = 0, .offset = 253, .length = 4},
695 },
696 {
697 .type = OperandType::TENSOR_FLOAT32,
698 .dimensions = {0, 2},
699 .numberOfConsumers = 1,
700 .scale = 0.0f,
701 .zeroPoint = 0,
702 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
703 .location = {.poolIndex = 0, .offset = 0, .length = 0},
704 },
705 {
706 .type = OperandType::TENSOR_FLOAT32,
707 .dimensions = {0, 8},
708 .numberOfConsumers = 1,
709 .scale = 0.0f,
710 .zeroPoint = 0,
711 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
712 .location = {.poolIndex = 0, .offset = 0, .length = 0},
713 },
714 {
715 .type = OperandType::FLOAT32,
716 .dimensions = {},
717 .numberOfConsumers = 1,
718 .scale = 0.0f,
719 .zeroPoint = 0,
720 .lifetime = OperandLifeTime::CONSTANT_COPY,
721 .location = {.poolIndex = 0, .offset = 257, .length = 4},
722 },
723 {
724 .type = OperandType::INT32,
725 .dimensions = {},
726 .numberOfConsumers = 1,
727 .scale = 0.0f,
728 .zeroPoint = 0,
729 .lifetime = OperandLifeTime::CONSTANT_COPY,
730 .location = {.poolIndex = 0, .offset = 261, .length = 4},
731 },
732 {
733 .type = OperandType::INT32,
734 .dimensions = {},
735 .numberOfConsumers = 1,
736 .scale = 0.0f,
737 .zeroPoint = 0,
738 .lifetime = OperandLifeTime::CONSTANT_COPY,
739 .location = {.poolIndex = 0, .offset = 265, .length = 4},
740 },
741 {
742 .type = OperandType::FLOAT32,
743 .dimensions = {},
744 .numberOfConsumers = 1,
745 .scale = 0.0f,
746 .zeroPoint = 0,
747 .lifetime = OperandLifeTime::CONSTANT_COPY,
748 .location = {.poolIndex = 0, .offset = 269, .length = 4},
749 },
750 {
751 .type = OperandType::FLOAT32,
752 .dimensions = {},
753 .numberOfConsumers = 1,
754 .scale = 0.0f,
755 .zeroPoint = 0,
756 .lifetime = OperandLifeTime::CONSTANT_COPY,
757 .location = {.poolIndex = 0, .offset = 273, .length = 4},
758 },
759 {
760 .type = OperandType::FLOAT32,
761 .dimensions = {},
762 .numberOfConsumers = 1,
763 .scale = 0.0f,
764 .zeroPoint = 0,
765 .lifetime = OperandLifeTime::CONSTANT_COPY,
766 .location = {.poolIndex = 0, .offset = 277, .length = 4},
767 },
768 {
769 .type = OperandType::TENSOR_FLOAT32,
770 .dimensions = {0},
771 .numberOfConsumers = 0,
772 .scale = 0.0f,
773 .zeroPoint = 0,
774 .lifetime = OperandLifeTime::MODEL_OUTPUT,
775 .location = {.poolIndex = 0, .offset = 0, .length = 0},
776 },
777 {
778 .type = OperandType::TENSOR_FLOAT32,
779 .dimensions = {0, 4},
780 .numberOfConsumers = 0,
781 .scale = 0.0f,
782 .zeroPoint = 0,
783 .lifetime = OperandLifeTime::MODEL_OUTPUT,
784 .location = {.poolIndex = 0, .offset = 0, .length = 0},
785 },
786 {
787 .type = OperandType::TENSOR_INT32,
788 .dimensions = {0},
789 .numberOfConsumers = 0,
790 .scale = 0.0f,
791 .zeroPoint = 0,
792 .lifetime = OperandLifeTime::MODEL_OUTPUT,
793 .location = {.poolIndex = 0, .offset = 0, .length = 0},
794 },
795 {
796 .type = OperandType::TENSOR_INT32,
797 .dimensions = {0},
798 .numberOfConsumers = 0,
799 .scale = 0.0f,
800 .zeroPoint = 0,
801 .lifetime = OperandLifeTime::MODEL_OUTPUT,
802 .location = {.poolIndex = 0, .offset = 0, .length = 0},
803 }
804 };
805
806 const std::vector<Operation> operations = {
807 {
808 .type = OperationType::GENERATE_PROPOSALS,
809 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
810 .outputs = {11, 12, 13},
811 },
812 {
813 .type = OperationType::ROI_ALIGN,
814 .inputs = {14, 12, 13, 15, 16, 17, 18, 19, 20, 10},
815 .outputs = {21},
816 },
817 {
818 .type = OperationType::FULLY_CONNECTED,
819 .inputs = {21, 22, 23, 24},
820 .outputs = {25},
821 },
822 {
823 .type = OperationType::FULLY_CONNECTED,
824 .inputs = {21, 26, 27, 28},
825 .outputs = {29},
826 },
827 {
828 .type = OperationType::AXIS_ALIGNED_BBOX_TRANSFORM,
829 .inputs = {12, 25, 13, 3},
830 .outputs = {30},
831 },
832 {
833 .type = OperationType::BOX_WITH_NMS_LIMIT,
834 .inputs = {29, 30, 13, 31, 32, 33, 34, 35, 36},
835 .outputs = {37, 38, 39, 40},
836 }
837 };
838
839 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 14};
840 const std::vector<uint32_t> outputIndexes = {11, 37, 38, 39, 40};
841 std::vector<uint8_t> operandValues = {
842 0, 0, 128, 63, 0, 0, 128, 63, 255, 255, 255, 255, 255, 255, 255, 255, 154, 153, 153, 62, 0, 0, 32, 65, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 205, 204, 204, 61, 255, 255, 255, 255, 0, 0, 0, 0, 154, 153, 153, 62, 0, 0, 128, 63, 205, 204, 204, 61
843 };
844 const std::vector<hidl_memory> pools = {};
845
846 return {
847 .operands = operands,
848 .operations = operations,
849 .inputIndexes = inputIndexes,
850 .outputIndexes = outputIndexes,
851 .operandValues = operandValues,
852 .pools = pools,
853 .relaxComputationFloat32toFloat16 = true,
854 };
855 }
856
is_ignored_zero_sized_relaxed(int i)857 inline bool is_ignored_zero_sized_relaxed(int i) {
858 static std::set<int> ignore = {};
859 return ignore.find(i) != ignore.end();
860 }
861
862 // Create the model
createTestModel_zero_sized_float16()863 Model createTestModel_zero_sized_float16() {
864 const std::vector<Operand> operands = {
865 {
866 .type = OperandType::TENSOR_FLOAT16,
867 .dimensions = {1, 1, 1, 1},
868 .numberOfConsumers = 1,
869 .scale = 0.0f,
870 .zeroPoint = 0,
871 .lifetime = OperandLifeTime::MODEL_INPUT,
872 .location = {.poolIndex = 0, .offset = 0, .length = 0},
873 },
874 {
875 .type = OperandType::TENSOR_FLOAT16,
876 .dimensions = {1, 1, 1, 4},
877 .numberOfConsumers = 1,
878 .scale = 0.0f,
879 .zeroPoint = 0,
880 .lifetime = OperandLifeTime::MODEL_INPUT,
881 .location = {.poolIndex = 0, .offset = 0, .length = 0},
882 },
883 {
884 .type = OperandType::TENSOR_FLOAT16,
885 .dimensions = {1, 4},
886 .numberOfConsumers = 1,
887 .scale = 0.0f,
888 .zeroPoint = 0,
889 .lifetime = OperandLifeTime::MODEL_INPUT,
890 .location = {.poolIndex = 0, .offset = 0, .length = 0},
891 },
892 {
893 .type = OperandType::TENSOR_FLOAT16,
894 .dimensions = {1, 2},
895 .numberOfConsumers = 2,
896 .scale = 0.0f,
897 .zeroPoint = 0,
898 .lifetime = OperandLifeTime::MODEL_INPUT,
899 .location = {.poolIndex = 0, .offset = 0, .length = 0},
900 },
901 {
902 .type = OperandType::FLOAT16,
903 .dimensions = {},
904 .numberOfConsumers = 1,
905 .scale = 0.0f,
906 .zeroPoint = 0,
907 .lifetime = OperandLifeTime::CONSTANT_COPY,
908 .location = {.poolIndex = 0, .offset = 0, .length = 2},
909 },
910 {
911 .type = OperandType::FLOAT16,
912 .dimensions = {},
913 .numberOfConsumers = 1,
914 .scale = 0.0f,
915 .zeroPoint = 0,
916 .lifetime = OperandLifeTime::CONSTANT_COPY,
917 .location = {.poolIndex = 0, .offset = 2, .length = 2},
918 },
919 {
920 .type = OperandType::INT32,
921 .dimensions = {},
922 .numberOfConsumers = 1,
923 .scale = 0.0f,
924 .zeroPoint = 0,
925 .lifetime = OperandLifeTime::CONSTANT_COPY,
926 .location = {.poolIndex = 0, .offset = 4, .length = 4},
927 },
928 {
929 .type = OperandType::INT32,
930 .dimensions = {},
931 .numberOfConsumers = 1,
932 .scale = 0.0f,
933 .zeroPoint = 0,
934 .lifetime = OperandLifeTime::CONSTANT_COPY,
935 .location = {.poolIndex = 0, .offset = 8, .length = 4},
936 },
937 {
938 .type = OperandType::FLOAT16,
939 .dimensions = {},
940 .numberOfConsumers = 1,
941 .scale = 0.0f,
942 .zeroPoint = 0,
943 .lifetime = OperandLifeTime::CONSTANT_COPY,
944 .location = {.poolIndex = 0, .offset = 12, .length = 2},
945 },
946 {
947 .type = OperandType::FLOAT16,
948 .dimensions = {},
949 .numberOfConsumers = 1,
950 .scale = 0.0f,
951 .zeroPoint = 0,
952 .lifetime = OperandLifeTime::CONSTANT_COPY,
953 .location = {.poolIndex = 0, .offset = 14, .length = 2},
954 },
955 {
956 .type = OperandType::BOOL,
957 .dimensions = {},
958 .numberOfConsumers = 2,
959 .scale = 0.0f,
960 .zeroPoint = 0,
961 .lifetime = OperandLifeTime::CONSTANT_COPY,
962 .location = {.poolIndex = 0, .offset = 16, .length = 1},
963 },
964 {
965 .type = OperandType::TENSOR_FLOAT16,
966 .dimensions = {0},
967 .numberOfConsumers = 0,
968 .scale = 0.0f,
969 .zeroPoint = 0,
970 .lifetime = OperandLifeTime::MODEL_OUTPUT,
971 .location = {.poolIndex = 0, .offset = 0, .length = 0},
972 },
973 {
974 .type = OperandType::TENSOR_FLOAT16,
975 .dimensions = {0, 4},
976 .numberOfConsumers = 2,
977 .scale = 0.0f,
978 .zeroPoint = 0,
979 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
980 .location = {.poolIndex = 0, .offset = 0, .length = 0},
981 },
982 {
983 .type = OperandType::TENSOR_INT32,
984 .dimensions = {0},
985 .numberOfConsumers = 3,
986 .scale = 0.0f,
987 .zeroPoint = 0,
988 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
989 .location = {.poolIndex = 0, .offset = 0, .length = 0},
990 },
991 {
992 .type = OperandType::TENSOR_FLOAT16,
993 .dimensions = {1, 1, 1, 1},
994 .numberOfConsumers = 1,
995 .scale = 0.0f,
996 .zeroPoint = 0,
997 .lifetime = OperandLifeTime::MODEL_INPUT,
998 .location = {.poolIndex = 0, .offset = 0, .length = 0},
999 },
1000 {
1001 .type = OperandType::INT32,
1002 .dimensions = {},
1003 .numberOfConsumers = 1,
1004 .scale = 0.0f,
1005 .zeroPoint = 0,
1006 .lifetime = OperandLifeTime::CONSTANT_COPY,
1007 .location = {.poolIndex = 0, .offset = 17, .length = 4},
1008 },
1009 {
1010 .type = OperandType::INT32,
1011 .dimensions = {},
1012 .numberOfConsumers = 1,
1013 .scale = 0.0f,
1014 .zeroPoint = 0,
1015 .lifetime = OperandLifeTime::CONSTANT_COPY,
1016 .location = {.poolIndex = 0, .offset = 21, .length = 4},
1017 },
1018 {
1019 .type = OperandType::FLOAT16,
1020 .dimensions = {},
1021 .numberOfConsumers = 1,
1022 .scale = 0.0f,
1023 .zeroPoint = 0,
1024 .lifetime = OperandLifeTime::CONSTANT_COPY,
1025 .location = {.poolIndex = 0, .offset = 25, .length = 2},
1026 },
1027 {
1028 .type = OperandType::FLOAT16,
1029 .dimensions = {},
1030 .numberOfConsumers = 1,
1031 .scale = 0.0f,
1032 .zeroPoint = 0,
1033 .lifetime = OperandLifeTime::CONSTANT_COPY,
1034 .location = {.poolIndex = 0, .offset = 27, .length = 2},
1035 },
1036 {
1037 .type = OperandType::INT32,
1038 .dimensions = {},
1039 .numberOfConsumers = 1,
1040 .scale = 0.0f,
1041 .zeroPoint = 0,
1042 .lifetime = OperandLifeTime::CONSTANT_COPY,
1043 .location = {.poolIndex = 0, .offset = 29, .length = 4},
1044 },
1045 {
1046 .type = OperandType::INT32,
1047 .dimensions = {},
1048 .numberOfConsumers = 1,
1049 .scale = 0.0f,
1050 .zeroPoint = 0,
1051 .lifetime = OperandLifeTime::CONSTANT_COPY,
1052 .location = {.poolIndex = 0, .offset = 33, .length = 4},
1053 },
1054 {
1055 .type = OperandType::TENSOR_FLOAT16,
1056 .dimensions = {0, 2, 2, 1},
1057 .numberOfConsumers = 2,
1058 .scale = 0.0f,
1059 .zeroPoint = 0,
1060 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1061 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1062 },
1063 {
1064 .type = OperandType::TENSOR_FLOAT16,
1065 .dimensions = {8, 4},
1066 .numberOfConsumers = 1,
1067 .scale = 0.0f,
1068 .zeroPoint = 0,
1069 .lifetime = OperandLifeTime::CONSTANT_COPY,
1070 .location = {.poolIndex = 0, .offset = 37, .length = 64},
1071 },
1072 {
1073 .type = OperandType::TENSOR_FLOAT16,
1074 .dimensions = {8},
1075 .numberOfConsumers = 1,
1076 .scale = 0.0f,
1077 .zeroPoint = 0,
1078 .lifetime = OperandLifeTime::CONSTANT_COPY,
1079 .location = {.poolIndex = 0, .offset = 101, .length = 16},
1080 },
1081 {
1082 .type = OperandType::INT32,
1083 .dimensions = {},
1084 .numberOfConsumers = 1,
1085 .scale = 0.0f,
1086 .zeroPoint = 0,
1087 .lifetime = OperandLifeTime::CONSTANT_COPY,
1088 .location = {.poolIndex = 0, .offset = 117, .length = 4},
1089 },
1090 {
1091 .type = OperandType::TENSOR_FLOAT16,
1092 .dimensions = {0, 8},
1093 .numberOfConsumers = 1,
1094 .scale = 0.0f,
1095 .zeroPoint = 0,
1096 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1097 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1098 },
1099 {
1100 .type = OperandType::TENSOR_FLOAT16,
1101 .dimensions = {2, 4},
1102 .numberOfConsumers = 1,
1103 .scale = 0.0f,
1104 .zeroPoint = 0,
1105 .lifetime = OperandLifeTime::CONSTANT_COPY,
1106 .location = {.poolIndex = 0, .offset = 121, .length = 16},
1107 },
1108 {
1109 .type = OperandType::TENSOR_FLOAT16,
1110 .dimensions = {2},
1111 .numberOfConsumers = 1,
1112 .scale = 0.0f,
1113 .zeroPoint = 0,
1114 .lifetime = OperandLifeTime::CONSTANT_COPY,
1115 .location = {.poolIndex = 0, .offset = 137, .length = 4},
1116 },
1117 {
1118 .type = OperandType::INT32,
1119 .dimensions = {},
1120 .numberOfConsumers = 1,
1121 .scale = 0.0f,
1122 .zeroPoint = 0,
1123 .lifetime = OperandLifeTime::CONSTANT_COPY,
1124 .location = {.poolIndex = 0, .offset = 141, .length = 4},
1125 },
1126 {
1127 .type = OperandType::TENSOR_FLOAT16,
1128 .dimensions = {0, 2},
1129 .numberOfConsumers = 1,
1130 .scale = 0.0f,
1131 .zeroPoint = 0,
1132 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1133 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1134 },
1135 {
1136 .type = OperandType::TENSOR_FLOAT16,
1137 .dimensions = {0, 8},
1138 .numberOfConsumers = 1,
1139 .scale = 0.0f,
1140 .zeroPoint = 0,
1141 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1142 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1143 },
1144 {
1145 .type = OperandType::FLOAT16,
1146 .dimensions = {},
1147 .numberOfConsumers = 1,
1148 .scale = 0.0f,
1149 .zeroPoint = 0,
1150 .lifetime = OperandLifeTime::CONSTANT_COPY,
1151 .location = {.poolIndex = 0, .offset = 145, .length = 2},
1152 },
1153 {
1154 .type = OperandType::INT32,
1155 .dimensions = {},
1156 .numberOfConsumers = 1,
1157 .scale = 0.0f,
1158 .zeroPoint = 0,
1159 .lifetime = OperandLifeTime::CONSTANT_COPY,
1160 .location = {.poolIndex = 0, .offset = 147, .length = 4},
1161 },
1162 {
1163 .type = OperandType::INT32,
1164 .dimensions = {},
1165 .numberOfConsumers = 1,
1166 .scale = 0.0f,
1167 .zeroPoint = 0,
1168 .lifetime = OperandLifeTime::CONSTANT_COPY,
1169 .location = {.poolIndex = 0, .offset = 151, .length = 4},
1170 },
1171 {
1172 .type = OperandType::FLOAT16,
1173 .dimensions = {},
1174 .numberOfConsumers = 1,
1175 .scale = 0.0f,
1176 .zeroPoint = 0,
1177 .lifetime = OperandLifeTime::CONSTANT_COPY,
1178 .location = {.poolIndex = 0, .offset = 155, .length = 2},
1179 },
1180 {
1181 .type = OperandType::FLOAT16,
1182 .dimensions = {},
1183 .numberOfConsumers = 1,
1184 .scale = 0.0f,
1185 .zeroPoint = 0,
1186 .lifetime = OperandLifeTime::CONSTANT_COPY,
1187 .location = {.poolIndex = 0, .offset = 157, .length = 2},
1188 },
1189 {
1190 .type = OperandType::FLOAT16,
1191 .dimensions = {},
1192 .numberOfConsumers = 1,
1193 .scale = 0.0f,
1194 .zeroPoint = 0,
1195 .lifetime = OperandLifeTime::CONSTANT_COPY,
1196 .location = {.poolIndex = 0, .offset = 159, .length = 2},
1197 },
1198 {
1199 .type = OperandType::TENSOR_FLOAT16,
1200 .dimensions = {0},
1201 .numberOfConsumers = 0,
1202 .scale = 0.0f,
1203 .zeroPoint = 0,
1204 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1205 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1206 },
1207 {
1208 .type = OperandType::TENSOR_FLOAT16,
1209 .dimensions = {0, 4},
1210 .numberOfConsumers = 0,
1211 .scale = 0.0f,
1212 .zeroPoint = 0,
1213 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1214 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1215 },
1216 {
1217 .type = OperandType::TENSOR_INT32,
1218 .dimensions = {0},
1219 .numberOfConsumers = 0,
1220 .scale = 0.0f,
1221 .zeroPoint = 0,
1222 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1223 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1224 },
1225 {
1226 .type = OperandType::TENSOR_INT32,
1227 .dimensions = {0},
1228 .numberOfConsumers = 0,
1229 .scale = 0.0f,
1230 .zeroPoint = 0,
1231 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1232 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1233 }
1234 };
1235
1236 const std::vector<Operation> operations = {
1237 {
1238 .type = OperationType::GENERATE_PROPOSALS,
1239 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
1240 .outputs = {11, 12, 13},
1241 },
1242 {
1243 .type = OperationType::ROI_ALIGN,
1244 .inputs = {14, 12, 13, 15, 16, 17, 18, 19, 20, 10},
1245 .outputs = {21},
1246 },
1247 {
1248 .type = OperationType::FULLY_CONNECTED,
1249 .inputs = {21, 22, 23, 24},
1250 .outputs = {25},
1251 },
1252 {
1253 .type = OperationType::FULLY_CONNECTED,
1254 .inputs = {21, 26, 27, 28},
1255 .outputs = {29},
1256 },
1257 {
1258 .type = OperationType::AXIS_ALIGNED_BBOX_TRANSFORM,
1259 .inputs = {12, 25, 13, 3},
1260 .outputs = {30},
1261 },
1262 {
1263 .type = OperationType::BOX_WITH_NMS_LIMIT,
1264 .inputs = {29, 30, 13, 31, 32, 33, 34, 35, 36},
1265 .outputs = {37, 38, 39, 40},
1266 }
1267 };
1268
1269 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 14};
1270 const std::vector<uint32_t> outputIndexes = {11, 37, 38, 39, 40};
1271 std::vector<uint8_t> operandValues = {
1272 0, 60, 0, 60, 255, 255, 255, 255, 255, 255, 255, 255, 205, 52, 0, 73, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 60, 0, 60, 4, 0, 0, 0, 4, 0, 0, 0, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 0, 0, 0, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 0, 0, 0, 102, 46, 255, 255, 255, 255, 0, 0, 0, 0, 205, 52, 0, 60, 102, 46
1273 };
1274 const std::vector<hidl_memory> pools = {};
1275
1276 return {
1277 .operands = operands,
1278 .operations = operations,
1279 .inputIndexes = inputIndexes,
1280 .outputIndexes = outputIndexes,
1281 .operandValues = operandValues,
1282 .pools = pools,
1283 };
1284 }
1285
is_ignored_zero_sized_float16(int i)1286 inline bool is_ignored_zero_sized_float16(int i) {
1287 static std::set<int> ignore = {};
1288 return ignore.find(i) != ignore.end();
1289 }
1290
1291 // Create the model
createTestModel_zero_sized_quant8()1292 Model createTestModel_zero_sized_quant8() {
1293 const std::vector<Operand> operands = {
1294 {
1295 .type = OperandType::TENSOR_QUANT8_ASYMM,
1296 .dimensions = {1, 1, 1, 1},
1297 .numberOfConsumers = 1,
1298 .scale = 0.1f,
1299 .zeroPoint = 128,
1300 .lifetime = OperandLifeTime::MODEL_INPUT,
1301 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1302 },
1303 {
1304 .type = OperandType::TENSOR_QUANT8_ASYMM,
1305 .dimensions = {1, 1, 1, 4},
1306 .numberOfConsumers = 1,
1307 .scale = 0.1f,
1308 .zeroPoint = 128,
1309 .lifetime = OperandLifeTime::MODEL_INPUT,
1310 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1311 },
1312 {
1313 .type = OperandType::TENSOR_QUANT16_SYMM,
1314 .dimensions = {1, 4},
1315 .numberOfConsumers = 1,
1316 .scale = 0.125f,
1317 .zeroPoint = 0,
1318 .lifetime = OperandLifeTime::MODEL_INPUT,
1319 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1320 },
1321 {
1322 .type = OperandType::TENSOR_QUANT16_ASYMM,
1323 .dimensions = {1, 2},
1324 .numberOfConsumers = 2,
1325 .scale = 0.125f,
1326 .zeroPoint = 0,
1327 .lifetime = OperandLifeTime::MODEL_INPUT,
1328 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1329 },
1330 {
1331 .type = OperandType::FLOAT32,
1332 .dimensions = {},
1333 .numberOfConsumers = 1,
1334 .scale = 0.0f,
1335 .zeroPoint = 0,
1336 .lifetime = OperandLifeTime::CONSTANT_COPY,
1337 .location = {.poolIndex = 0, .offset = 0, .length = 4},
1338 },
1339 {
1340 .type = OperandType::FLOAT32,
1341 .dimensions = {},
1342 .numberOfConsumers = 1,
1343 .scale = 0.0f,
1344 .zeroPoint = 0,
1345 .lifetime = OperandLifeTime::CONSTANT_COPY,
1346 .location = {.poolIndex = 0, .offset = 4, .length = 4},
1347 },
1348 {
1349 .type = OperandType::INT32,
1350 .dimensions = {},
1351 .numberOfConsumers = 1,
1352 .scale = 0.0f,
1353 .zeroPoint = 0,
1354 .lifetime = OperandLifeTime::CONSTANT_COPY,
1355 .location = {.poolIndex = 0, .offset = 8, .length = 4},
1356 },
1357 {
1358 .type = OperandType::INT32,
1359 .dimensions = {},
1360 .numberOfConsumers = 1,
1361 .scale = 0.0f,
1362 .zeroPoint = 0,
1363 .lifetime = OperandLifeTime::CONSTANT_COPY,
1364 .location = {.poolIndex = 0, .offset = 12, .length = 4},
1365 },
1366 {
1367 .type = OperandType::FLOAT32,
1368 .dimensions = {},
1369 .numberOfConsumers = 1,
1370 .scale = 0.0f,
1371 .zeroPoint = 0,
1372 .lifetime = OperandLifeTime::CONSTANT_COPY,
1373 .location = {.poolIndex = 0, .offset = 16, .length = 4},
1374 },
1375 {
1376 .type = OperandType::FLOAT32,
1377 .dimensions = {},
1378 .numberOfConsumers = 1,
1379 .scale = 0.0f,
1380 .zeroPoint = 0,
1381 .lifetime = OperandLifeTime::CONSTANT_COPY,
1382 .location = {.poolIndex = 0, .offset = 20, .length = 4},
1383 },
1384 {
1385 .type = OperandType::BOOL,
1386 .dimensions = {},
1387 .numberOfConsumers = 2,
1388 .scale = 0.0f,
1389 .zeroPoint = 0,
1390 .lifetime = OperandLifeTime::CONSTANT_COPY,
1391 .location = {.poolIndex = 0, .offset = 24, .length = 1},
1392 },
1393 {
1394 .type = OperandType::TENSOR_QUANT8_ASYMM,
1395 .dimensions = {0},
1396 .numberOfConsumers = 0,
1397 .scale = 0.1f,
1398 .zeroPoint = 128,
1399 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1400 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1401 },
1402 {
1403 .type = OperandType::TENSOR_QUANT16_ASYMM,
1404 .dimensions = {0, 4},
1405 .numberOfConsumers = 2,
1406 .scale = 0.125f,
1407 .zeroPoint = 0,
1408 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1409 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1410 },
1411 {
1412 .type = OperandType::TENSOR_INT32,
1413 .dimensions = {0},
1414 .numberOfConsumers = 3,
1415 .scale = 0.0f,
1416 .zeroPoint = 0,
1417 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1418 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1419 },
1420 {
1421 .type = OperandType::TENSOR_QUANT8_ASYMM,
1422 .dimensions = {1, 1, 1, 1},
1423 .numberOfConsumers = 1,
1424 .scale = 0.1f,
1425 .zeroPoint = 128,
1426 .lifetime = OperandLifeTime::MODEL_INPUT,
1427 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1428 },
1429 {
1430 .type = OperandType::INT32,
1431 .dimensions = {},
1432 .numberOfConsumers = 1,
1433 .scale = 0.0f,
1434 .zeroPoint = 0,
1435 .lifetime = OperandLifeTime::CONSTANT_COPY,
1436 .location = {.poolIndex = 0, .offset = 25, .length = 4},
1437 },
1438 {
1439 .type = OperandType::INT32,
1440 .dimensions = {},
1441 .numberOfConsumers = 1,
1442 .scale = 0.0f,
1443 .zeroPoint = 0,
1444 .lifetime = OperandLifeTime::CONSTANT_COPY,
1445 .location = {.poolIndex = 0, .offset = 29, .length = 4},
1446 },
1447 {
1448 .type = OperandType::FLOAT32,
1449 .dimensions = {},
1450 .numberOfConsumers = 1,
1451 .scale = 0.0f,
1452 .zeroPoint = 0,
1453 .lifetime = OperandLifeTime::CONSTANT_COPY,
1454 .location = {.poolIndex = 0, .offset = 33, .length = 4},
1455 },
1456 {
1457 .type = OperandType::FLOAT32,
1458 .dimensions = {},
1459 .numberOfConsumers = 1,
1460 .scale = 0.0f,
1461 .zeroPoint = 0,
1462 .lifetime = OperandLifeTime::CONSTANT_COPY,
1463 .location = {.poolIndex = 0, .offset = 37, .length = 4},
1464 },
1465 {
1466 .type = OperandType::INT32,
1467 .dimensions = {},
1468 .numberOfConsumers = 1,
1469 .scale = 0.0f,
1470 .zeroPoint = 0,
1471 .lifetime = OperandLifeTime::CONSTANT_COPY,
1472 .location = {.poolIndex = 0, .offset = 41, .length = 4},
1473 },
1474 {
1475 .type = OperandType::INT32,
1476 .dimensions = {},
1477 .numberOfConsumers = 1,
1478 .scale = 0.0f,
1479 .zeroPoint = 0,
1480 .lifetime = OperandLifeTime::CONSTANT_COPY,
1481 .location = {.poolIndex = 0, .offset = 45, .length = 4},
1482 },
1483 {
1484 .type = OperandType::TENSOR_QUANT8_ASYMM,
1485 .dimensions = {0, 2, 2, 1},
1486 .numberOfConsumers = 2,
1487 .scale = 0.1f,
1488 .zeroPoint = 128,
1489 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1490 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1491 },
1492 {
1493 .type = OperandType::TENSOR_QUANT8_ASYMM,
1494 .dimensions = {8, 4},
1495 .numberOfConsumers = 1,
1496 .scale = 0.1f,
1497 .zeroPoint = 128,
1498 .lifetime = OperandLifeTime::CONSTANT_COPY,
1499 .location = {.poolIndex = 0, .offset = 49, .length = 32},
1500 },
1501 {
1502 .type = OperandType::TENSOR_INT32,
1503 .dimensions = {8},
1504 .numberOfConsumers = 1,
1505 .scale = 0.01f,
1506 .zeroPoint = 0,
1507 .lifetime = OperandLifeTime::CONSTANT_COPY,
1508 .location = {.poolIndex = 0, .offset = 81, .length = 32},
1509 },
1510 {
1511 .type = OperandType::INT32,
1512 .dimensions = {},
1513 .numberOfConsumers = 1,
1514 .scale = 0.0f,
1515 .zeroPoint = 0,
1516 .lifetime = OperandLifeTime::CONSTANT_COPY,
1517 .location = {.poolIndex = 0, .offset = 113, .length = 4},
1518 },
1519 {
1520 .type = OperandType::TENSOR_QUANT8_ASYMM,
1521 .dimensions = {0, 8},
1522 .numberOfConsumers = 1,
1523 .scale = 0.1f,
1524 .zeroPoint = 128,
1525 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1526 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1527 },
1528 {
1529 .type = OperandType::TENSOR_QUANT8_ASYMM,
1530 .dimensions = {2, 4},
1531 .numberOfConsumers = 1,
1532 .scale = 0.1f,
1533 .zeroPoint = 128,
1534 .lifetime = OperandLifeTime::CONSTANT_COPY,
1535 .location = {.poolIndex = 0, .offset = 117, .length = 8},
1536 },
1537 {
1538 .type = OperandType::TENSOR_INT32,
1539 .dimensions = {2},
1540 .numberOfConsumers = 1,
1541 .scale = 0.01f,
1542 .zeroPoint = 0,
1543 .lifetime = OperandLifeTime::CONSTANT_COPY,
1544 .location = {.poolIndex = 0, .offset = 125, .length = 8},
1545 },
1546 {
1547 .type = OperandType::INT32,
1548 .dimensions = {},
1549 .numberOfConsumers = 1,
1550 .scale = 0.0f,
1551 .zeroPoint = 0,
1552 .lifetime = OperandLifeTime::CONSTANT_COPY,
1553 .location = {.poolIndex = 0, .offset = 133, .length = 4},
1554 },
1555 {
1556 .type = OperandType::TENSOR_QUANT8_ASYMM,
1557 .dimensions = {0, 2},
1558 .numberOfConsumers = 1,
1559 .scale = 0.1f,
1560 .zeroPoint = 128,
1561 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1562 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1563 },
1564 {
1565 .type = OperandType::TENSOR_QUANT16_ASYMM,
1566 .dimensions = {0, 8},
1567 .numberOfConsumers = 1,
1568 .scale = 0.125f,
1569 .zeroPoint = 0,
1570 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1571 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1572 },
1573 {
1574 .type = OperandType::FLOAT32,
1575 .dimensions = {},
1576 .numberOfConsumers = 1,
1577 .scale = 0.0f,
1578 .zeroPoint = 0,
1579 .lifetime = OperandLifeTime::CONSTANT_COPY,
1580 .location = {.poolIndex = 0, .offset = 137, .length = 4},
1581 },
1582 {
1583 .type = OperandType::INT32,
1584 .dimensions = {},
1585 .numberOfConsumers = 1,
1586 .scale = 0.0f,
1587 .zeroPoint = 0,
1588 .lifetime = OperandLifeTime::CONSTANT_COPY,
1589 .location = {.poolIndex = 0, .offset = 141, .length = 4},
1590 },
1591 {
1592 .type = OperandType::INT32,
1593 .dimensions = {},
1594 .numberOfConsumers = 1,
1595 .scale = 0.0f,
1596 .zeroPoint = 0,
1597 .lifetime = OperandLifeTime::CONSTANT_COPY,
1598 .location = {.poolIndex = 0, .offset = 145, .length = 4},
1599 },
1600 {
1601 .type = OperandType::FLOAT32,
1602 .dimensions = {},
1603 .numberOfConsumers = 1,
1604 .scale = 0.0f,
1605 .zeroPoint = 0,
1606 .lifetime = OperandLifeTime::CONSTANT_COPY,
1607 .location = {.poolIndex = 0, .offset = 149, .length = 4},
1608 },
1609 {
1610 .type = OperandType::FLOAT32,
1611 .dimensions = {},
1612 .numberOfConsumers = 1,
1613 .scale = 0.0f,
1614 .zeroPoint = 0,
1615 .lifetime = OperandLifeTime::CONSTANT_COPY,
1616 .location = {.poolIndex = 0, .offset = 153, .length = 4},
1617 },
1618 {
1619 .type = OperandType::FLOAT32,
1620 .dimensions = {},
1621 .numberOfConsumers = 1,
1622 .scale = 0.0f,
1623 .zeroPoint = 0,
1624 .lifetime = OperandLifeTime::CONSTANT_COPY,
1625 .location = {.poolIndex = 0, .offset = 157, .length = 4},
1626 },
1627 {
1628 .type = OperandType::TENSOR_QUANT8_ASYMM,
1629 .dimensions = {0},
1630 .numberOfConsumers = 0,
1631 .scale = 0.1f,
1632 .zeroPoint = 128,
1633 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1634 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1635 },
1636 {
1637 .type = OperandType::TENSOR_QUANT16_ASYMM,
1638 .dimensions = {0, 4},
1639 .numberOfConsumers = 0,
1640 .scale = 0.125f,
1641 .zeroPoint = 0,
1642 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1643 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1644 },
1645 {
1646 .type = OperandType::TENSOR_INT32,
1647 .dimensions = {0},
1648 .numberOfConsumers = 0,
1649 .scale = 0.0f,
1650 .zeroPoint = 0,
1651 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1652 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1653 },
1654 {
1655 .type = OperandType::TENSOR_INT32,
1656 .dimensions = {0},
1657 .numberOfConsumers = 0,
1658 .scale = 0.0f,
1659 .zeroPoint = 0,
1660 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1661 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1662 }
1663 };
1664
1665 const std::vector<Operation> operations = {
1666 {
1667 .type = OperationType::GENERATE_PROPOSALS,
1668 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
1669 .outputs = {11, 12, 13},
1670 },
1671 {
1672 .type = OperationType::ROI_ALIGN,
1673 .inputs = {14, 12, 13, 15, 16, 17, 18, 19, 20, 10},
1674 .outputs = {21},
1675 },
1676 {
1677 .type = OperationType::FULLY_CONNECTED,
1678 .inputs = {21, 22, 23, 24},
1679 .outputs = {25},
1680 },
1681 {
1682 .type = OperationType::FULLY_CONNECTED,
1683 .inputs = {21, 26, 27, 28},
1684 .outputs = {29},
1685 },
1686 {
1687 .type = OperationType::AXIS_ALIGNED_BBOX_TRANSFORM,
1688 .inputs = {12, 25, 13, 3},
1689 .outputs = {30},
1690 },
1691 {
1692 .type = OperationType::BOX_WITH_NMS_LIMIT,
1693 .inputs = {29, 30, 13, 31, 32, 33, 34, 35, 36},
1694 .outputs = {37, 38, 39, 40},
1695 }
1696 };
1697
1698 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 14};
1699 const std::vector<uint32_t> outputIndexes = {11, 37, 38, 39, 40};
1700 std::vector<uint8_t> operandValues = {
1701 0, 0, 128, 63, 0, 0, 128, 63, 255, 255, 255, 255, 255, 255, 255, 255, 154, 153, 153, 62, 0, 0, 32, 65, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 4, 0, 0, 0, 4, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 100, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 205, 204, 204, 61, 255, 255, 255, 255, 0, 0, 0, 0, 154, 153, 153, 62, 0, 0, 128, 63, 205, 204, 204, 61
1702 };
1703 const std::vector<hidl_memory> pools = {};
1704
1705 return {
1706 .operands = operands,
1707 .operations = operations,
1708 .inputIndexes = inputIndexes,
1709 .outputIndexes = outputIndexes,
1710 .operandValues = operandValues,
1711 .pools = pools,
1712 };
1713 }
1714
is_ignored_zero_sized_quant8(int i)1715 inline bool is_ignored_zero_sized_quant8(int i) {
1716 static std::set<int> ignore = {};
1717 return ignore.find(i) != ignore.end();
1718 }
1719
1720 // Create the model
createTestModel_zero_sized_dynamic_output_shape()1721 Model createTestModel_zero_sized_dynamic_output_shape() {
1722 const std::vector<Operand> operands = {
1723 {
1724 .type = OperandType::TENSOR_FLOAT32,
1725 .dimensions = {1, 1, 1, 1},
1726 .numberOfConsumers = 1,
1727 .scale = 0.0f,
1728 .zeroPoint = 0,
1729 .lifetime = OperandLifeTime::MODEL_INPUT,
1730 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1731 },
1732 {
1733 .type = OperandType::TENSOR_FLOAT32,
1734 .dimensions = {1, 1, 1, 4},
1735 .numberOfConsumers = 1,
1736 .scale = 0.0f,
1737 .zeroPoint = 0,
1738 .lifetime = OperandLifeTime::MODEL_INPUT,
1739 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1740 },
1741 {
1742 .type = OperandType::TENSOR_FLOAT32,
1743 .dimensions = {1, 4},
1744 .numberOfConsumers = 1,
1745 .scale = 0.0f,
1746 .zeroPoint = 0,
1747 .lifetime = OperandLifeTime::MODEL_INPUT,
1748 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1749 },
1750 {
1751 .type = OperandType::TENSOR_FLOAT32,
1752 .dimensions = {1, 2},
1753 .numberOfConsumers = 2,
1754 .scale = 0.0f,
1755 .zeroPoint = 0,
1756 .lifetime = OperandLifeTime::MODEL_INPUT,
1757 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1758 },
1759 {
1760 .type = OperandType::FLOAT32,
1761 .dimensions = {},
1762 .numberOfConsumers = 1,
1763 .scale = 0.0f,
1764 .zeroPoint = 0,
1765 .lifetime = OperandLifeTime::CONSTANT_COPY,
1766 .location = {.poolIndex = 0, .offset = 0, .length = 4},
1767 },
1768 {
1769 .type = OperandType::FLOAT32,
1770 .dimensions = {},
1771 .numberOfConsumers = 1,
1772 .scale = 0.0f,
1773 .zeroPoint = 0,
1774 .lifetime = OperandLifeTime::CONSTANT_COPY,
1775 .location = {.poolIndex = 0, .offset = 4, .length = 4},
1776 },
1777 {
1778 .type = OperandType::INT32,
1779 .dimensions = {},
1780 .numberOfConsumers = 1,
1781 .scale = 0.0f,
1782 .zeroPoint = 0,
1783 .lifetime = OperandLifeTime::CONSTANT_COPY,
1784 .location = {.poolIndex = 0, .offset = 8, .length = 4},
1785 },
1786 {
1787 .type = OperandType::INT32,
1788 .dimensions = {},
1789 .numberOfConsumers = 1,
1790 .scale = 0.0f,
1791 .zeroPoint = 0,
1792 .lifetime = OperandLifeTime::CONSTANT_COPY,
1793 .location = {.poolIndex = 0, .offset = 12, .length = 4},
1794 },
1795 {
1796 .type = OperandType::FLOAT32,
1797 .dimensions = {},
1798 .numberOfConsumers = 1,
1799 .scale = 0.0f,
1800 .zeroPoint = 0,
1801 .lifetime = OperandLifeTime::CONSTANT_COPY,
1802 .location = {.poolIndex = 0, .offset = 16, .length = 4},
1803 },
1804 {
1805 .type = OperandType::FLOAT32,
1806 .dimensions = {},
1807 .numberOfConsumers = 1,
1808 .scale = 0.0f,
1809 .zeroPoint = 0,
1810 .lifetime = OperandLifeTime::CONSTANT_COPY,
1811 .location = {.poolIndex = 0, .offset = 20, .length = 4},
1812 },
1813 {
1814 .type = OperandType::BOOL,
1815 .dimensions = {},
1816 .numberOfConsumers = 2,
1817 .scale = 0.0f,
1818 .zeroPoint = 0,
1819 .lifetime = OperandLifeTime::CONSTANT_COPY,
1820 .location = {.poolIndex = 0, .offset = 24, .length = 1},
1821 },
1822 {
1823 .type = OperandType::TENSOR_FLOAT32,
1824 .dimensions = {0},
1825 .numberOfConsumers = 0,
1826 .scale = 0.0f,
1827 .zeroPoint = 0,
1828 .lifetime = OperandLifeTime::MODEL_OUTPUT,
1829 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1830 },
1831 {
1832 .type = OperandType::TENSOR_FLOAT32,
1833 .dimensions = {0, 4},
1834 .numberOfConsumers = 2,
1835 .scale = 0.0f,
1836 .zeroPoint = 0,
1837 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1838 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1839 },
1840 {
1841 .type = OperandType::TENSOR_INT32,
1842 .dimensions = {0},
1843 .numberOfConsumers = 3,
1844 .scale = 0.0f,
1845 .zeroPoint = 0,
1846 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1847 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1848 },
1849 {
1850 .type = OperandType::TENSOR_FLOAT32,
1851 .dimensions = {1, 1, 1, 1},
1852 .numberOfConsumers = 1,
1853 .scale = 0.0f,
1854 .zeroPoint = 0,
1855 .lifetime = OperandLifeTime::MODEL_INPUT,
1856 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1857 },
1858 {
1859 .type = OperandType::INT32,
1860 .dimensions = {},
1861 .numberOfConsumers = 1,
1862 .scale = 0.0f,
1863 .zeroPoint = 0,
1864 .lifetime = OperandLifeTime::CONSTANT_COPY,
1865 .location = {.poolIndex = 0, .offset = 25, .length = 4},
1866 },
1867 {
1868 .type = OperandType::INT32,
1869 .dimensions = {},
1870 .numberOfConsumers = 1,
1871 .scale = 0.0f,
1872 .zeroPoint = 0,
1873 .lifetime = OperandLifeTime::CONSTANT_COPY,
1874 .location = {.poolIndex = 0, .offset = 29, .length = 4},
1875 },
1876 {
1877 .type = OperandType::FLOAT32,
1878 .dimensions = {},
1879 .numberOfConsumers = 1,
1880 .scale = 0.0f,
1881 .zeroPoint = 0,
1882 .lifetime = OperandLifeTime::CONSTANT_COPY,
1883 .location = {.poolIndex = 0, .offset = 33, .length = 4},
1884 },
1885 {
1886 .type = OperandType::FLOAT32,
1887 .dimensions = {},
1888 .numberOfConsumers = 1,
1889 .scale = 0.0f,
1890 .zeroPoint = 0,
1891 .lifetime = OperandLifeTime::CONSTANT_COPY,
1892 .location = {.poolIndex = 0, .offset = 37, .length = 4},
1893 },
1894 {
1895 .type = OperandType::INT32,
1896 .dimensions = {},
1897 .numberOfConsumers = 1,
1898 .scale = 0.0f,
1899 .zeroPoint = 0,
1900 .lifetime = OperandLifeTime::CONSTANT_COPY,
1901 .location = {.poolIndex = 0, .offset = 41, .length = 4},
1902 },
1903 {
1904 .type = OperandType::INT32,
1905 .dimensions = {},
1906 .numberOfConsumers = 1,
1907 .scale = 0.0f,
1908 .zeroPoint = 0,
1909 .lifetime = OperandLifeTime::CONSTANT_COPY,
1910 .location = {.poolIndex = 0, .offset = 45, .length = 4},
1911 },
1912 {
1913 .type = OperandType::TENSOR_FLOAT32,
1914 .dimensions = {0, 2, 2, 1},
1915 .numberOfConsumers = 2,
1916 .scale = 0.0f,
1917 .zeroPoint = 0,
1918 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1919 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1920 },
1921 {
1922 .type = OperandType::TENSOR_FLOAT32,
1923 .dimensions = {8, 4},
1924 .numberOfConsumers = 1,
1925 .scale = 0.0f,
1926 .zeroPoint = 0,
1927 .lifetime = OperandLifeTime::CONSTANT_COPY,
1928 .location = {.poolIndex = 0, .offset = 49, .length = 128},
1929 },
1930 {
1931 .type = OperandType::TENSOR_FLOAT32,
1932 .dimensions = {8},
1933 .numberOfConsumers = 1,
1934 .scale = 0.0f,
1935 .zeroPoint = 0,
1936 .lifetime = OperandLifeTime::CONSTANT_COPY,
1937 .location = {.poolIndex = 0, .offset = 177, .length = 32},
1938 },
1939 {
1940 .type = OperandType::INT32,
1941 .dimensions = {},
1942 .numberOfConsumers = 1,
1943 .scale = 0.0f,
1944 .zeroPoint = 0,
1945 .lifetime = OperandLifeTime::CONSTANT_COPY,
1946 .location = {.poolIndex = 0, .offset = 209, .length = 4},
1947 },
1948 {
1949 .type = OperandType::TENSOR_FLOAT32,
1950 .dimensions = {0, 8},
1951 .numberOfConsumers = 1,
1952 .scale = 0.0f,
1953 .zeroPoint = 0,
1954 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1955 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1956 },
1957 {
1958 .type = OperandType::TENSOR_FLOAT32,
1959 .dimensions = {2, 4},
1960 .numberOfConsumers = 1,
1961 .scale = 0.0f,
1962 .zeroPoint = 0,
1963 .lifetime = OperandLifeTime::CONSTANT_COPY,
1964 .location = {.poolIndex = 0, .offset = 213, .length = 32},
1965 },
1966 {
1967 .type = OperandType::TENSOR_FLOAT32,
1968 .dimensions = {2},
1969 .numberOfConsumers = 1,
1970 .scale = 0.0f,
1971 .zeroPoint = 0,
1972 .lifetime = OperandLifeTime::CONSTANT_COPY,
1973 .location = {.poolIndex = 0, .offset = 245, .length = 8},
1974 },
1975 {
1976 .type = OperandType::INT32,
1977 .dimensions = {},
1978 .numberOfConsumers = 1,
1979 .scale = 0.0f,
1980 .zeroPoint = 0,
1981 .lifetime = OperandLifeTime::CONSTANT_COPY,
1982 .location = {.poolIndex = 0, .offset = 253, .length = 4},
1983 },
1984 {
1985 .type = OperandType::TENSOR_FLOAT32,
1986 .dimensions = {0, 2},
1987 .numberOfConsumers = 1,
1988 .scale = 0.0f,
1989 .zeroPoint = 0,
1990 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
1991 .location = {.poolIndex = 0, .offset = 0, .length = 0},
1992 },
1993 {
1994 .type = OperandType::TENSOR_FLOAT32,
1995 .dimensions = {0, 8},
1996 .numberOfConsumers = 1,
1997 .scale = 0.0f,
1998 .zeroPoint = 0,
1999 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2000 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2001 },
2002 {
2003 .type = OperandType::FLOAT32,
2004 .dimensions = {},
2005 .numberOfConsumers = 1,
2006 .scale = 0.0f,
2007 .zeroPoint = 0,
2008 .lifetime = OperandLifeTime::CONSTANT_COPY,
2009 .location = {.poolIndex = 0, .offset = 257, .length = 4},
2010 },
2011 {
2012 .type = OperandType::INT32,
2013 .dimensions = {},
2014 .numberOfConsumers = 1,
2015 .scale = 0.0f,
2016 .zeroPoint = 0,
2017 .lifetime = OperandLifeTime::CONSTANT_COPY,
2018 .location = {.poolIndex = 0, .offset = 261, .length = 4},
2019 },
2020 {
2021 .type = OperandType::INT32,
2022 .dimensions = {},
2023 .numberOfConsumers = 1,
2024 .scale = 0.0f,
2025 .zeroPoint = 0,
2026 .lifetime = OperandLifeTime::CONSTANT_COPY,
2027 .location = {.poolIndex = 0, .offset = 265, .length = 4},
2028 },
2029 {
2030 .type = OperandType::FLOAT32,
2031 .dimensions = {},
2032 .numberOfConsumers = 1,
2033 .scale = 0.0f,
2034 .zeroPoint = 0,
2035 .lifetime = OperandLifeTime::CONSTANT_COPY,
2036 .location = {.poolIndex = 0, .offset = 269, .length = 4},
2037 },
2038 {
2039 .type = OperandType::FLOAT32,
2040 .dimensions = {},
2041 .numberOfConsumers = 1,
2042 .scale = 0.0f,
2043 .zeroPoint = 0,
2044 .lifetime = OperandLifeTime::CONSTANT_COPY,
2045 .location = {.poolIndex = 0, .offset = 273, .length = 4},
2046 },
2047 {
2048 .type = OperandType::FLOAT32,
2049 .dimensions = {},
2050 .numberOfConsumers = 1,
2051 .scale = 0.0f,
2052 .zeroPoint = 0,
2053 .lifetime = OperandLifeTime::CONSTANT_COPY,
2054 .location = {.poolIndex = 0, .offset = 277, .length = 4},
2055 },
2056 {
2057 .type = OperandType::TENSOR_FLOAT32,
2058 .dimensions = {0},
2059 .numberOfConsumers = 0,
2060 .scale = 0.0f,
2061 .zeroPoint = 0,
2062 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2063 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2064 },
2065 {
2066 .type = OperandType::TENSOR_FLOAT32,
2067 .dimensions = {0, 0},
2068 .numberOfConsumers = 0,
2069 .scale = 0.0f,
2070 .zeroPoint = 0,
2071 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2072 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2073 },
2074 {
2075 .type = OperandType::TENSOR_INT32,
2076 .dimensions = {0},
2077 .numberOfConsumers = 0,
2078 .scale = 0.0f,
2079 .zeroPoint = 0,
2080 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2081 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2082 },
2083 {
2084 .type = OperandType::TENSOR_INT32,
2085 .dimensions = {0},
2086 .numberOfConsumers = 0,
2087 .scale = 0.0f,
2088 .zeroPoint = 0,
2089 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2090 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2091 }
2092 };
2093
2094 const std::vector<Operation> operations = {
2095 {
2096 .type = OperationType::GENERATE_PROPOSALS,
2097 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
2098 .outputs = {11, 12, 13},
2099 },
2100 {
2101 .type = OperationType::ROI_ALIGN,
2102 .inputs = {14, 12, 13, 15, 16, 17, 18, 19, 20, 10},
2103 .outputs = {21},
2104 },
2105 {
2106 .type = OperationType::FULLY_CONNECTED,
2107 .inputs = {21, 22, 23, 24},
2108 .outputs = {25},
2109 },
2110 {
2111 .type = OperationType::FULLY_CONNECTED,
2112 .inputs = {21, 26, 27, 28},
2113 .outputs = {29},
2114 },
2115 {
2116 .type = OperationType::AXIS_ALIGNED_BBOX_TRANSFORM,
2117 .inputs = {12, 25, 13, 3},
2118 .outputs = {30},
2119 },
2120 {
2121 .type = OperationType::BOX_WITH_NMS_LIMIT,
2122 .inputs = {29, 30, 13, 31, 32, 33, 34, 35, 36},
2123 .outputs = {37, 38, 39, 40},
2124 }
2125 };
2126
2127 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 14};
2128 const std::vector<uint32_t> outputIndexes = {11, 37, 38, 39, 40};
2129 std::vector<uint8_t> operandValues = {
2130 0, 0, 128, 63, 0, 0, 128, 63, 255, 255, 255, 255, 255, 255, 255, 255, 154, 153, 153, 62, 0, 0, 32, 65, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 205, 204, 204, 61, 255, 255, 255, 255, 0, 0, 0, 0, 154, 153, 153, 62, 0, 0, 128, 63, 205, 204, 204, 61
2131 };
2132 const std::vector<hidl_memory> pools = {};
2133
2134 return {
2135 .operands = operands,
2136 .operations = operations,
2137 .inputIndexes = inputIndexes,
2138 .outputIndexes = outputIndexes,
2139 .operandValues = operandValues,
2140 .pools = pools,
2141 };
2142 }
2143
is_ignored_zero_sized_dynamic_output_shape(int i)2144 inline bool is_ignored_zero_sized_dynamic_output_shape(int i) {
2145 static std::set<int> ignore = {};
2146 return ignore.find(i) != ignore.end();
2147 }
2148
2149 // Create the model
createTestModel_zero_sized_dynamic_output_shape_relaxed()2150 Model createTestModel_zero_sized_dynamic_output_shape_relaxed() {
2151 const std::vector<Operand> operands = {
2152 {
2153 .type = OperandType::TENSOR_FLOAT32,
2154 .dimensions = {1, 1, 1, 1},
2155 .numberOfConsumers = 1,
2156 .scale = 0.0f,
2157 .zeroPoint = 0,
2158 .lifetime = OperandLifeTime::MODEL_INPUT,
2159 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2160 },
2161 {
2162 .type = OperandType::TENSOR_FLOAT32,
2163 .dimensions = {1, 1, 1, 4},
2164 .numberOfConsumers = 1,
2165 .scale = 0.0f,
2166 .zeroPoint = 0,
2167 .lifetime = OperandLifeTime::MODEL_INPUT,
2168 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2169 },
2170 {
2171 .type = OperandType::TENSOR_FLOAT32,
2172 .dimensions = {1, 4},
2173 .numberOfConsumers = 1,
2174 .scale = 0.0f,
2175 .zeroPoint = 0,
2176 .lifetime = OperandLifeTime::MODEL_INPUT,
2177 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2178 },
2179 {
2180 .type = OperandType::TENSOR_FLOAT32,
2181 .dimensions = {1, 2},
2182 .numberOfConsumers = 2,
2183 .scale = 0.0f,
2184 .zeroPoint = 0,
2185 .lifetime = OperandLifeTime::MODEL_INPUT,
2186 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2187 },
2188 {
2189 .type = OperandType::FLOAT32,
2190 .dimensions = {},
2191 .numberOfConsumers = 1,
2192 .scale = 0.0f,
2193 .zeroPoint = 0,
2194 .lifetime = OperandLifeTime::CONSTANT_COPY,
2195 .location = {.poolIndex = 0, .offset = 0, .length = 4},
2196 },
2197 {
2198 .type = OperandType::FLOAT32,
2199 .dimensions = {},
2200 .numberOfConsumers = 1,
2201 .scale = 0.0f,
2202 .zeroPoint = 0,
2203 .lifetime = OperandLifeTime::CONSTANT_COPY,
2204 .location = {.poolIndex = 0, .offset = 4, .length = 4},
2205 },
2206 {
2207 .type = OperandType::INT32,
2208 .dimensions = {},
2209 .numberOfConsumers = 1,
2210 .scale = 0.0f,
2211 .zeroPoint = 0,
2212 .lifetime = OperandLifeTime::CONSTANT_COPY,
2213 .location = {.poolIndex = 0, .offset = 8, .length = 4},
2214 },
2215 {
2216 .type = OperandType::INT32,
2217 .dimensions = {},
2218 .numberOfConsumers = 1,
2219 .scale = 0.0f,
2220 .zeroPoint = 0,
2221 .lifetime = OperandLifeTime::CONSTANT_COPY,
2222 .location = {.poolIndex = 0, .offset = 12, .length = 4},
2223 },
2224 {
2225 .type = OperandType::FLOAT32,
2226 .dimensions = {},
2227 .numberOfConsumers = 1,
2228 .scale = 0.0f,
2229 .zeroPoint = 0,
2230 .lifetime = OperandLifeTime::CONSTANT_COPY,
2231 .location = {.poolIndex = 0, .offset = 16, .length = 4},
2232 },
2233 {
2234 .type = OperandType::FLOAT32,
2235 .dimensions = {},
2236 .numberOfConsumers = 1,
2237 .scale = 0.0f,
2238 .zeroPoint = 0,
2239 .lifetime = OperandLifeTime::CONSTANT_COPY,
2240 .location = {.poolIndex = 0, .offset = 20, .length = 4},
2241 },
2242 {
2243 .type = OperandType::BOOL,
2244 .dimensions = {},
2245 .numberOfConsumers = 2,
2246 .scale = 0.0f,
2247 .zeroPoint = 0,
2248 .lifetime = OperandLifeTime::CONSTANT_COPY,
2249 .location = {.poolIndex = 0, .offset = 24, .length = 1},
2250 },
2251 {
2252 .type = OperandType::TENSOR_FLOAT32,
2253 .dimensions = {0},
2254 .numberOfConsumers = 0,
2255 .scale = 0.0f,
2256 .zeroPoint = 0,
2257 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2258 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2259 },
2260 {
2261 .type = OperandType::TENSOR_FLOAT32,
2262 .dimensions = {0, 4},
2263 .numberOfConsumers = 2,
2264 .scale = 0.0f,
2265 .zeroPoint = 0,
2266 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2267 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2268 },
2269 {
2270 .type = OperandType::TENSOR_INT32,
2271 .dimensions = {0},
2272 .numberOfConsumers = 3,
2273 .scale = 0.0f,
2274 .zeroPoint = 0,
2275 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2276 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2277 },
2278 {
2279 .type = OperandType::TENSOR_FLOAT32,
2280 .dimensions = {1, 1, 1, 1},
2281 .numberOfConsumers = 1,
2282 .scale = 0.0f,
2283 .zeroPoint = 0,
2284 .lifetime = OperandLifeTime::MODEL_INPUT,
2285 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2286 },
2287 {
2288 .type = OperandType::INT32,
2289 .dimensions = {},
2290 .numberOfConsumers = 1,
2291 .scale = 0.0f,
2292 .zeroPoint = 0,
2293 .lifetime = OperandLifeTime::CONSTANT_COPY,
2294 .location = {.poolIndex = 0, .offset = 25, .length = 4},
2295 },
2296 {
2297 .type = OperandType::INT32,
2298 .dimensions = {},
2299 .numberOfConsumers = 1,
2300 .scale = 0.0f,
2301 .zeroPoint = 0,
2302 .lifetime = OperandLifeTime::CONSTANT_COPY,
2303 .location = {.poolIndex = 0, .offset = 29, .length = 4},
2304 },
2305 {
2306 .type = OperandType::FLOAT32,
2307 .dimensions = {},
2308 .numberOfConsumers = 1,
2309 .scale = 0.0f,
2310 .zeroPoint = 0,
2311 .lifetime = OperandLifeTime::CONSTANT_COPY,
2312 .location = {.poolIndex = 0, .offset = 33, .length = 4},
2313 },
2314 {
2315 .type = OperandType::FLOAT32,
2316 .dimensions = {},
2317 .numberOfConsumers = 1,
2318 .scale = 0.0f,
2319 .zeroPoint = 0,
2320 .lifetime = OperandLifeTime::CONSTANT_COPY,
2321 .location = {.poolIndex = 0, .offset = 37, .length = 4},
2322 },
2323 {
2324 .type = OperandType::INT32,
2325 .dimensions = {},
2326 .numberOfConsumers = 1,
2327 .scale = 0.0f,
2328 .zeroPoint = 0,
2329 .lifetime = OperandLifeTime::CONSTANT_COPY,
2330 .location = {.poolIndex = 0, .offset = 41, .length = 4},
2331 },
2332 {
2333 .type = OperandType::INT32,
2334 .dimensions = {},
2335 .numberOfConsumers = 1,
2336 .scale = 0.0f,
2337 .zeroPoint = 0,
2338 .lifetime = OperandLifeTime::CONSTANT_COPY,
2339 .location = {.poolIndex = 0, .offset = 45, .length = 4},
2340 },
2341 {
2342 .type = OperandType::TENSOR_FLOAT32,
2343 .dimensions = {0, 2, 2, 1},
2344 .numberOfConsumers = 2,
2345 .scale = 0.0f,
2346 .zeroPoint = 0,
2347 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2348 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2349 },
2350 {
2351 .type = OperandType::TENSOR_FLOAT32,
2352 .dimensions = {8, 4},
2353 .numberOfConsumers = 1,
2354 .scale = 0.0f,
2355 .zeroPoint = 0,
2356 .lifetime = OperandLifeTime::CONSTANT_COPY,
2357 .location = {.poolIndex = 0, .offset = 49, .length = 128},
2358 },
2359 {
2360 .type = OperandType::TENSOR_FLOAT32,
2361 .dimensions = {8},
2362 .numberOfConsumers = 1,
2363 .scale = 0.0f,
2364 .zeroPoint = 0,
2365 .lifetime = OperandLifeTime::CONSTANT_COPY,
2366 .location = {.poolIndex = 0, .offset = 177, .length = 32},
2367 },
2368 {
2369 .type = OperandType::INT32,
2370 .dimensions = {},
2371 .numberOfConsumers = 1,
2372 .scale = 0.0f,
2373 .zeroPoint = 0,
2374 .lifetime = OperandLifeTime::CONSTANT_COPY,
2375 .location = {.poolIndex = 0, .offset = 209, .length = 4},
2376 },
2377 {
2378 .type = OperandType::TENSOR_FLOAT32,
2379 .dimensions = {0, 8},
2380 .numberOfConsumers = 1,
2381 .scale = 0.0f,
2382 .zeroPoint = 0,
2383 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2384 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2385 },
2386 {
2387 .type = OperandType::TENSOR_FLOAT32,
2388 .dimensions = {2, 4},
2389 .numberOfConsumers = 1,
2390 .scale = 0.0f,
2391 .zeroPoint = 0,
2392 .lifetime = OperandLifeTime::CONSTANT_COPY,
2393 .location = {.poolIndex = 0, .offset = 213, .length = 32},
2394 },
2395 {
2396 .type = OperandType::TENSOR_FLOAT32,
2397 .dimensions = {2},
2398 .numberOfConsumers = 1,
2399 .scale = 0.0f,
2400 .zeroPoint = 0,
2401 .lifetime = OperandLifeTime::CONSTANT_COPY,
2402 .location = {.poolIndex = 0, .offset = 245, .length = 8},
2403 },
2404 {
2405 .type = OperandType::INT32,
2406 .dimensions = {},
2407 .numberOfConsumers = 1,
2408 .scale = 0.0f,
2409 .zeroPoint = 0,
2410 .lifetime = OperandLifeTime::CONSTANT_COPY,
2411 .location = {.poolIndex = 0, .offset = 253, .length = 4},
2412 },
2413 {
2414 .type = OperandType::TENSOR_FLOAT32,
2415 .dimensions = {0, 2},
2416 .numberOfConsumers = 1,
2417 .scale = 0.0f,
2418 .zeroPoint = 0,
2419 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2420 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2421 },
2422 {
2423 .type = OperandType::TENSOR_FLOAT32,
2424 .dimensions = {0, 8},
2425 .numberOfConsumers = 1,
2426 .scale = 0.0f,
2427 .zeroPoint = 0,
2428 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2429 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2430 },
2431 {
2432 .type = OperandType::FLOAT32,
2433 .dimensions = {},
2434 .numberOfConsumers = 1,
2435 .scale = 0.0f,
2436 .zeroPoint = 0,
2437 .lifetime = OperandLifeTime::CONSTANT_COPY,
2438 .location = {.poolIndex = 0, .offset = 257, .length = 4},
2439 },
2440 {
2441 .type = OperandType::INT32,
2442 .dimensions = {},
2443 .numberOfConsumers = 1,
2444 .scale = 0.0f,
2445 .zeroPoint = 0,
2446 .lifetime = OperandLifeTime::CONSTANT_COPY,
2447 .location = {.poolIndex = 0, .offset = 261, .length = 4},
2448 },
2449 {
2450 .type = OperandType::INT32,
2451 .dimensions = {},
2452 .numberOfConsumers = 1,
2453 .scale = 0.0f,
2454 .zeroPoint = 0,
2455 .lifetime = OperandLifeTime::CONSTANT_COPY,
2456 .location = {.poolIndex = 0, .offset = 265, .length = 4},
2457 },
2458 {
2459 .type = OperandType::FLOAT32,
2460 .dimensions = {},
2461 .numberOfConsumers = 1,
2462 .scale = 0.0f,
2463 .zeroPoint = 0,
2464 .lifetime = OperandLifeTime::CONSTANT_COPY,
2465 .location = {.poolIndex = 0, .offset = 269, .length = 4},
2466 },
2467 {
2468 .type = OperandType::FLOAT32,
2469 .dimensions = {},
2470 .numberOfConsumers = 1,
2471 .scale = 0.0f,
2472 .zeroPoint = 0,
2473 .lifetime = OperandLifeTime::CONSTANT_COPY,
2474 .location = {.poolIndex = 0, .offset = 273, .length = 4},
2475 },
2476 {
2477 .type = OperandType::FLOAT32,
2478 .dimensions = {},
2479 .numberOfConsumers = 1,
2480 .scale = 0.0f,
2481 .zeroPoint = 0,
2482 .lifetime = OperandLifeTime::CONSTANT_COPY,
2483 .location = {.poolIndex = 0, .offset = 277, .length = 4},
2484 },
2485 {
2486 .type = OperandType::TENSOR_FLOAT32,
2487 .dimensions = {0},
2488 .numberOfConsumers = 0,
2489 .scale = 0.0f,
2490 .zeroPoint = 0,
2491 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2492 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2493 },
2494 {
2495 .type = OperandType::TENSOR_FLOAT32,
2496 .dimensions = {0, 0},
2497 .numberOfConsumers = 0,
2498 .scale = 0.0f,
2499 .zeroPoint = 0,
2500 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2501 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2502 },
2503 {
2504 .type = OperandType::TENSOR_INT32,
2505 .dimensions = {0},
2506 .numberOfConsumers = 0,
2507 .scale = 0.0f,
2508 .zeroPoint = 0,
2509 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2510 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2511 },
2512 {
2513 .type = OperandType::TENSOR_INT32,
2514 .dimensions = {0},
2515 .numberOfConsumers = 0,
2516 .scale = 0.0f,
2517 .zeroPoint = 0,
2518 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2519 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2520 }
2521 };
2522
2523 const std::vector<Operation> operations = {
2524 {
2525 .type = OperationType::GENERATE_PROPOSALS,
2526 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
2527 .outputs = {11, 12, 13},
2528 },
2529 {
2530 .type = OperationType::ROI_ALIGN,
2531 .inputs = {14, 12, 13, 15, 16, 17, 18, 19, 20, 10},
2532 .outputs = {21},
2533 },
2534 {
2535 .type = OperationType::FULLY_CONNECTED,
2536 .inputs = {21, 22, 23, 24},
2537 .outputs = {25},
2538 },
2539 {
2540 .type = OperationType::FULLY_CONNECTED,
2541 .inputs = {21, 26, 27, 28},
2542 .outputs = {29},
2543 },
2544 {
2545 .type = OperationType::AXIS_ALIGNED_BBOX_TRANSFORM,
2546 .inputs = {12, 25, 13, 3},
2547 .outputs = {30},
2548 },
2549 {
2550 .type = OperationType::BOX_WITH_NMS_LIMIT,
2551 .inputs = {29, 30, 13, 31, 32, 33, 34, 35, 36},
2552 .outputs = {37, 38, 39, 40},
2553 }
2554 };
2555
2556 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 14};
2557 const std::vector<uint32_t> outputIndexes = {11, 37, 38, 39, 40};
2558 std::vector<uint8_t> operandValues = {
2559 0, 0, 128, 63, 0, 0, 128, 63, 255, 255, 255, 255, 255, 255, 255, 255, 154, 153, 153, 62, 0, 0, 32, 65, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 0, 0, 205, 204, 204, 61, 255, 255, 255, 255, 0, 0, 0, 0, 154, 153, 153, 62, 0, 0, 128, 63, 205, 204, 204, 61
2560 };
2561 const std::vector<hidl_memory> pools = {};
2562
2563 return {
2564 .operands = operands,
2565 .operations = operations,
2566 .inputIndexes = inputIndexes,
2567 .outputIndexes = outputIndexes,
2568 .operandValues = operandValues,
2569 .pools = pools,
2570 .relaxComputationFloat32toFloat16 = true,
2571 };
2572 }
2573
is_ignored_zero_sized_dynamic_output_shape_relaxed(int i)2574 inline bool is_ignored_zero_sized_dynamic_output_shape_relaxed(int i) {
2575 static std::set<int> ignore = {};
2576 return ignore.find(i) != ignore.end();
2577 }
2578
2579 // Create the model
createTestModel_zero_sized_dynamic_output_shape_float16()2580 Model createTestModel_zero_sized_dynamic_output_shape_float16() {
2581 const std::vector<Operand> operands = {
2582 {
2583 .type = OperandType::TENSOR_FLOAT16,
2584 .dimensions = {1, 1, 1, 1},
2585 .numberOfConsumers = 1,
2586 .scale = 0.0f,
2587 .zeroPoint = 0,
2588 .lifetime = OperandLifeTime::MODEL_INPUT,
2589 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2590 },
2591 {
2592 .type = OperandType::TENSOR_FLOAT16,
2593 .dimensions = {1, 1, 1, 4},
2594 .numberOfConsumers = 1,
2595 .scale = 0.0f,
2596 .zeroPoint = 0,
2597 .lifetime = OperandLifeTime::MODEL_INPUT,
2598 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2599 },
2600 {
2601 .type = OperandType::TENSOR_FLOAT16,
2602 .dimensions = {1, 4},
2603 .numberOfConsumers = 1,
2604 .scale = 0.0f,
2605 .zeroPoint = 0,
2606 .lifetime = OperandLifeTime::MODEL_INPUT,
2607 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2608 },
2609 {
2610 .type = OperandType::TENSOR_FLOAT16,
2611 .dimensions = {1, 2},
2612 .numberOfConsumers = 2,
2613 .scale = 0.0f,
2614 .zeroPoint = 0,
2615 .lifetime = OperandLifeTime::MODEL_INPUT,
2616 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2617 },
2618 {
2619 .type = OperandType::FLOAT16,
2620 .dimensions = {},
2621 .numberOfConsumers = 1,
2622 .scale = 0.0f,
2623 .zeroPoint = 0,
2624 .lifetime = OperandLifeTime::CONSTANT_COPY,
2625 .location = {.poolIndex = 0, .offset = 0, .length = 2},
2626 },
2627 {
2628 .type = OperandType::FLOAT16,
2629 .dimensions = {},
2630 .numberOfConsumers = 1,
2631 .scale = 0.0f,
2632 .zeroPoint = 0,
2633 .lifetime = OperandLifeTime::CONSTANT_COPY,
2634 .location = {.poolIndex = 0, .offset = 2, .length = 2},
2635 },
2636 {
2637 .type = OperandType::INT32,
2638 .dimensions = {},
2639 .numberOfConsumers = 1,
2640 .scale = 0.0f,
2641 .zeroPoint = 0,
2642 .lifetime = OperandLifeTime::CONSTANT_COPY,
2643 .location = {.poolIndex = 0, .offset = 4, .length = 4},
2644 },
2645 {
2646 .type = OperandType::INT32,
2647 .dimensions = {},
2648 .numberOfConsumers = 1,
2649 .scale = 0.0f,
2650 .zeroPoint = 0,
2651 .lifetime = OperandLifeTime::CONSTANT_COPY,
2652 .location = {.poolIndex = 0, .offset = 8, .length = 4},
2653 },
2654 {
2655 .type = OperandType::FLOAT16,
2656 .dimensions = {},
2657 .numberOfConsumers = 1,
2658 .scale = 0.0f,
2659 .zeroPoint = 0,
2660 .lifetime = OperandLifeTime::CONSTANT_COPY,
2661 .location = {.poolIndex = 0, .offset = 12, .length = 2},
2662 },
2663 {
2664 .type = OperandType::FLOAT16,
2665 .dimensions = {},
2666 .numberOfConsumers = 1,
2667 .scale = 0.0f,
2668 .zeroPoint = 0,
2669 .lifetime = OperandLifeTime::CONSTANT_COPY,
2670 .location = {.poolIndex = 0, .offset = 14, .length = 2},
2671 },
2672 {
2673 .type = OperandType::BOOL,
2674 .dimensions = {},
2675 .numberOfConsumers = 2,
2676 .scale = 0.0f,
2677 .zeroPoint = 0,
2678 .lifetime = OperandLifeTime::CONSTANT_COPY,
2679 .location = {.poolIndex = 0, .offset = 16, .length = 1},
2680 },
2681 {
2682 .type = OperandType::TENSOR_FLOAT16,
2683 .dimensions = {0},
2684 .numberOfConsumers = 0,
2685 .scale = 0.0f,
2686 .zeroPoint = 0,
2687 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2688 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2689 },
2690 {
2691 .type = OperandType::TENSOR_FLOAT16,
2692 .dimensions = {0, 4},
2693 .numberOfConsumers = 2,
2694 .scale = 0.0f,
2695 .zeroPoint = 0,
2696 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2697 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2698 },
2699 {
2700 .type = OperandType::TENSOR_INT32,
2701 .dimensions = {0},
2702 .numberOfConsumers = 3,
2703 .scale = 0.0f,
2704 .zeroPoint = 0,
2705 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2706 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2707 },
2708 {
2709 .type = OperandType::TENSOR_FLOAT16,
2710 .dimensions = {1, 1, 1, 1},
2711 .numberOfConsumers = 1,
2712 .scale = 0.0f,
2713 .zeroPoint = 0,
2714 .lifetime = OperandLifeTime::MODEL_INPUT,
2715 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2716 },
2717 {
2718 .type = OperandType::INT32,
2719 .dimensions = {},
2720 .numberOfConsumers = 1,
2721 .scale = 0.0f,
2722 .zeroPoint = 0,
2723 .lifetime = OperandLifeTime::CONSTANT_COPY,
2724 .location = {.poolIndex = 0, .offset = 17, .length = 4},
2725 },
2726 {
2727 .type = OperandType::INT32,
2728 .dimensions = {},
2729 .numberOfConsumers = 1,
2730 .scale = 0.0f,
2731 .zeroPoint = 0,
2732 .lifetime = OperandLifeTime::CONSTANT_COPY,
2733 .location = {.poolIndex = 0, .offset = 21, .length = 4},
2734 },
2735 {
2736 .type = OperandType::FLOAT16,
2737 .dimensions = {},
2738 .numberOfConsumers = 1,
2739 .scale = 0.0f,
2740 .zeroPoint = 0,
2741 .lifetime = OperandLifeTime::CONSTANT_COPY,
2742 .location = {.poolIndex = 0, .offset = 25, .length = 2},
2743 },
2744 {
2745 .type = OperandType::FLOAT16,
2746 .dimensions = {},
2747 .numberOfConsumers = 1,
2748 .scale = 0.0f,
2749 .zeroPoint = 0,
2750 .lifetime = OperandLifeTime::CONSTANT_COPY,
2751 .location = {.poolIndex = 0, .offset = 27, .length = 2},
2752 },
2753 {
2754 .type = OperandType::INT32,
2755 .dimensions = {},
2756 .numberOfConsumers = 1,
2757 .scale = 0.0f,
2758 .zeroPoint = 0,
2759 .lifetime = OperandLifeTime::CONSTANT_COPY,
2760 .location = {.poolIndex = 0, .offset = 29, .length = 4},
2761 },
2762 {
2763 .type = OperandType::INT32,
2764 .dimensions = {},
2765 .numberOfConsumers = 1,
2766 .scale = 0.0f,
2767 .zeroPoint = 0,
2768 .lifetime = OperandLifeTime::CONSTANT_COPY,
2769 .location = {.poolIndex = 0, .offset = 33, .length = 4},
2770 },
2771 {
2772 .type = OperandType::TENSOR_FLOAT16,
2773 .dimensions = {0, 2, 2, 1},
2774 .numberOfConsumers = 2,
2775 .scale = 0.0f,
2776 .zeroPoint = 0,
2777 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2778 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2779 },
2780 {
2781 .type = OperandType::TENSOR_FLOAT16,
2782 .dimensions = {8, 4},
2783 .numberOfConsumers = 1,
2784 .scale = 0.0f,
2785 .zeroPoint = 0,
2786 .lifetime = OperandLifeTime::CONSTANT_COPY,
2787 .location = {.poolIndex = 0, .offset = 37, .length = 64},
2788 },
2789 {
2790 .type = OperandType::TENSOR_FLOAT16,
2791 .dimensions = {8},
2792 .numberOfConsumers = 1,
2793 .scale = 0.0f,
2794 .zeroPoint = 0,
2795 .lifetime = OperandLifeTime::CONSTANT_COPY,
2796 .location = {.poolIndex = 0, .offset = 101, .length = 16},
2797 },
2798 {
2799 .type = OperandType::INT32,
2800 .dimensions = {},
2801 .numberOfConsumers = 1,
2802 .scale = 0.0f,
2803 .zeroPoint = 0,
2804 .lifetime = OperandLifeTime::CONSTANT_COPY,
2805 .location = {.poolIndex = 0, .offset = 117, .length = 4},
2806 },
2807 {
2808 .type = OperandType::TENSOR_FLOAT16,
2809 .dimensions = {0, 8},
2810 .numberOfConsumers = 1,
2811 .scale = 0.0f,
2812 .zeroPoint = 0,
2813 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2814 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2815 },
2816 {
2817 .type = OperandType::TENSOR_FLOAT16,
2818 .dimensions = {2, 4},
2819 .numberOfConsumers = 1,
2820 .scale = 0.0f,
2821 .zeroPoint = 0,
2822 .lifetime = OperandLifeTime::CONSTANT_COPY,
2823 .location = {.poolIndex = 0, .offset = 121, .length = 16},
2824 },
2825 {
2826 .type = OperandType::TENSOR_FLOAT16,
2827 .dimensions = {2},
2828 .numberOfConsumers = 1,
2829 .scale = 0.0f,
2830 .zeroPoint = 0,
2831 .lifetime = OperandLifeTime::CONSTANT_COPY,
2832 .location = {.poolIndex = 0, .offset = 137, .length = 4},
2833 },
2834 {
2835 .type = OperandType::INT32,
2836 .dimensions = {},
2837 .numberOfConsumers = 1,
2838 .scale = 0.0f,
2839 .zeroPoint = 0,
2840 .lifetime = OperandLifeTime::CONSTANT_COPY,
2841 .location = {.poolIndex = 0, .offset = 141, .length = 4},
2842 },
2843 {
2844 .type = OperandType::TENSOR_FLOAT16,
2845 .dimensions = {0, 2},
2846 .numberOfConsumers = 1,
2847 .scale = 0.0f,
2848 .zeroPoint = 0,
2849 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2850 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2851 },
2852 {
2853 .type = OperandType::TENSOR_FLOAT16,
2854 .dimensions = {0, 8},
2855 .numberOfConsumers = 1,
2856 .scale = 0.0f,
2857 .zeroPoint = 0,
2858 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
2859 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2860 },
2861 {
2862 .type = OperandType::FLOAT16,
2863 .dimensions = {},
2864 .numberOfConsumers = 1,
2865 .scale = 0.0f,
2866 .zeroPoint = 0,
2867 .lifetime = OperandLifeTime::CONSTANT_COPY,
2868 .location = {.poolIndex = 0, .offset = 145, .length = 2},
2869 },
2870 {
2871 .type = OperandType::INT32,
2872 .dimensions = {},
2873 .numberOfConsumers = 1,
2874 .scale = 0.0f,
2875 .zeroPoint = 0,
2876 .lifetime = OperandLifeTime::CONSTANT_COPY,
2877 .location = {.poolIndex = 0, .offset = 147, .length = 4},
2878 },
2879 {
2880 .type = OperandType::INT32,
2881 .dimensions = {},
2882 .numberOfConsumers = 1,
2883 .scale = 0.0f,
2884 .zeroPoint = 0,
2885 .lifetime = OperandLifeTime::CONSTANT_COPY,
2886 .location = {.poolIndex = 0, .offset = 151, .length = 4},
2887 },
2888 {
2889 .type = OperandType::FLOAT16,
2890 .dimensions = {},
2891 .numberOfConsumers = 1,
2892 .scale = 0.0f,
2893 .zeroPoint = 0,
2894 .lifetime = OperandLifeTime::CONSTANT_COPY,
2895 .location = {.poolIndex = 0, .offset = 155, .length = 2},
2896 },
2897 {
2898 .type = OperandType::FLOAT16,
2899 .dimensions = {},
2900 .numberOfConsumers = 1,
2901 .scale = 0.0f,
2902 .zeroPoint = 0,
2903 .lifetime = OperandLifeTime::CONSTANT_COPY,
2904 .location = {.poolIndex = 0, .offset = 157, .length = 2},
2905 },
2906 {
2907 .type = OperandType::FLOAT16,
2908 .dimensions = {},
2909 .numberOfConsumers = 1,
2910 .scale = 0.0f,
2911 .zeroPoint = 0,
2912 .lifetime = OperandLifeTime::CONSTANT_COPY,
2913 .location = {.poolIndex = 0, .offset = 159, .length = 2},
2914 },
2915 {
2916 .type = OperandType::TENSOR_FLOAT16,
2917 .dimensions = {0},
2918 .numberOfConsumers = 0,
2919 .scale = 0.0f,
2920 .zeroPoint = 0,
2921 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2922 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2923 },
2924 {
2925 .type = OperandType::TENSOR_FLOAT16,
2926 .dimensions = {0, 0},
2927 .numberOfConsumers = 0,
2928 .scale = 0.0f,
2929 .zeroPoint = 0,
2930 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2931 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2932 },
2933 {
2934 .type = OperandType::TENSOR_INT32,
2935 .dimensions = {0},
2936 .numberOfConsumers = 0,
2937 .scale = 0.0f,
2938 .zeroPoint = 0,
2939 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2940 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2941 },
2942 {
2943 .type = OperandType::TENSOR_INT32,
2944 .dimensions = {0},
2945 .numberOfConsumers = 0,
2946 .scale = 0.0f,
2947 .zeroPoint = 0,
2948 .lifetime = OperandLifeTime::MODEL_OUTPUT,
2949 .location = {.poolIndex = 0, .offset = 0, .length = 0},
2950 }
2951 };
2952
2953 const std::vector<Operation> operations = {
2954 {
2955 .type = OperationType::GENERATE_PROPOSALS,
2956 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
2957 .outputs = {11, 12, 13},
2958 },
2959 {
2960 .type = OperationType::ROI_ALIGN,
2961 .inputs = {14, 12, 13, 15, 16, 17, 18, 19, 20, 10},
2962 .outputs = {21},
2963 },
2964 {
2965 .type = OperationType::FULLY_CONNECTED,
2966 .inputs = {21, 22, 23, 24},
2967 .outputs = {25},
2968 },
2969 {
2970 .type = OperationType::FULLY_CONNECTED,
2971 .inputs = {21, 26, 27, 28},
2972 .outputs = {29},
2973 },
2974 {
2975 .type = OperationType::AXIS_ALIGNED_BBOX_TRANSFORM,
2976 .inputs = {12, 25, 13, 3},
2977 .outputs = {30},
2978 },
2979 {
2980 .type = OperationType::BOX_WITH_NMS_LIMIT,
2981 .inputs = {29, 30, 13, 31, 32, 33, 34, 35, 36},
2982 .outputs = {37, 38, 39, 40},
2983 }
2984 };
2985
2986 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 14};
2987 const std::vector<uint32_t> outputIndexes = {11, 37, 38, 39, 40};
2988 std::vector<uint8_t> operandValues = {
2989 0, 60, 0, 60, 255, 255, 255, 255, 255, 255, 255, 255, 205, 52, 0, 73, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 60, 0, 60, 4, 0, 0, 0, 4, 0, 0, 0, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 0, 0, 0, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 60, 0, 0, 0, 0, 102, 46, 255, 255, 255, 255, 0, 0, 0, 0, 205, 52, 0, 60, 102, 46
2990 };
2991 const std::vector<hidl_memory> pools = {};
2992
2993 return {
2994 .operands = operands,
2995 .operations = operations,
2996 .inputIndexes = inputIndexes,
2997 .outputIndexes = outputIndexes,
2998 .operandValues = operandValues,
2999 .pools = pools,
3000 };
3001 }
3002
is_ignored_zero_sized_dynamic_output_shape_float16(int i)3003 inline bool is_ignored_zero_sized_dynamic_output_shape_float16(int i) {
3004 static std::set<int> ignore = {};
3005 return ignore.find(i) != ignore.end();
3006 }
3007
3008 // Create the model
createTestModel_zero_sized_dynamic_output_shape_quant8()3009 Model createTestModel_zero_sized_dynamic_output_shape_quant8() {
3010 const std::vector<Operand> operands = {
3011 {
3012 .type = OperandType::TENSOR_QUANT8_ASYMM,
3013 .dimensions = {1, 1, 1, 1},
3014 .numberOfConsumers = 1,
3015 .scale = 0.1f,
3016 .zeroPoint = 128,
3017 .lifetime = OperandLifeTime::MODEL_INPUT,
3018 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3019 },
3020 {
3021 .type = OperandType::TENSOR_QUANT8_ASYMM,
3022 .dimensions = {1, 1, 1, 4},
3023 .numberOfConsumers = 1,
3024 .scale = 0.1f,
3025 .zeroPoint = 128,
3026 .lifetime = OperandLifeTime::MODEL_INPUT,
3027 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3028 },
3029 {
3030 .type = OperandType::TENSOR_QUANT16_SYMM,
3031 .dimensions = {1, 4},
3032 .numberOfConsumers = 1,
3033 .scale = 0.125f,
3034 .zeroPoint = 0,
3035 .lifetime = OperandLifeTime::MODEL_INPUT,
3036 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3037 },
3038 {
3039 .type = OperandType::TENSOR_QUANT16_ASYMM,
3040 .dimensions = {1, 2},
3041 .numberOfConsumers = 2,
3042 .scale = 0.125f,
3043 .zeroPoint = 0,
3044 .lifetime = OperandLifeTime::MODEL_INPUT,
3045 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3046 },
3047 {
3048 .type = OperandType::FLOAT32,
3049 .dimensions = {},
3050 .numberOfConsumers = 1,
3051 .scale = 0.0f,
3052 .zeroPoint = 0,
3053 .lifetime = OperandLifeTime::CONSTANT_COPY,
3054 .location = {.poolIndex = 0, .offset = 0, .length = 4},
3055 },
3056 {
3057 .type = OperandType::FLOAT32,
3058 .dimensions = {},
3059 .numberOfConsumers = 1,
3060 .scale = 0.0f,
3061 .zeroPoint = 0,
3062 .lifetime = OperandLifeTime::CONSTANT_COPY,
3063 .location = {.poolIndex = 0, .offset = 4, .length = 4},
3064 },
3065 {
3066 .type = OperandType::INT32,
3067 .dimensions = {},
3068 .numberOfConsumers = 1,
3069 .scale = 0.0f,
3070 .zeroPoint = 0,
3071 .lifetime = OperandLifeTime::CONSTANT_COPY,
3072 .location = {.poolIndex = 0, .offset = 8, .length = 4},
3073 },
3074 {
3075 .type = OperandType::INT32,
3076 .dimensions = {},
3077 .numberOfConsumers = 1,
3078 .scale = 0.0f,
3079 .zeroPoint = 0,
3080 .lifetime = OperandLifeTime::CONSTANT_COPY,
3081 .location = {.poolIndex = 0, .offset = 12, .length = 4},
3082 },
3083 {
3084 .type = OperandType::FLOAT32,
3085 .dimensions = {},
3086 .numberOfConsumers = 1,
3087 .scale = 0.0f,
3088 .zeroPoint = 0,
3089 .lifetime = OperandLifeTime::CONSTANT_COPY,
3090 .location = {.poolIndex = 0, .offset = 16, .length = 4},
3091 },
3092 {
3093 .type = OperandType::FLOAT32,
3094 .dimensions = {},
3095 .numberOfConsumers = 1,
3096 .scale = 0.0f,
3097 .zeroPoint = 0,
3098 .lifetime = OperandLifeTime::CONSTANT_COPY,
3099 .location = {.poolIndex = 0, .offset = 20, .length = 4},
3100 },
3101 {
3102 .type = OperandType::BOOL,
3103 .dimensions = {},
3104 .numberOfConsumers = 2,
3105 .scale = 0.0f,
3106 .zeroPoint = 0,
3107 .lifetime = OperandLifeTime::CONSTANT_COPY,
3108 .location = {.poolIndex = 0, .offset = 24, .length = 1},
3109 },
3110 {
3111 .type = OperandType::TENSOR_QUANT8_ASYMM,
3112 .dimensions = {0},
3113 .numberOfConsumers = 0,
3114 .scale = 0.1f,
3115 .zeroPoint = 128,
3116 .lifetime = OperandLifeTime::MODEL_OUTPUT,
3117 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3118 },
3119 {
3120 .type = OperandType::TENSOR_QUANT16_ASYMM,
3121 .dimensions = {0, 4},
3122 .numberOfConsumers = 2,
3123 .scale = 0.125f,
3124 .zeroPoint = 0,
3125 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
3126 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3127 },
3128 {
3129 .type = OperandType::TENSOR_INT32,
3130 .dimensions = {0},
3131 .numberOfConsumers = 3,
3132 .scale = 0.0f,
3133 .zeroPoint = 0,
3134 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
3135 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3136 },
3137 {
3138 .type = OperandType::TENSOR_QUANT8_ASYMM,
3139 .dimensions = {1, 1, 1, 1},
3140 .numberOfConsumers = 1,
3141 .scale = 0.1f,
3142 .zeroPoint = 128,
3143 .lifetime = OperandLifeTime::MODEL_INPUT,
3144 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3145 },
3146 {
3147 .type = OperandType::INT32,
3148 .dimensions = {},
3149 .numberOfConsumers = 1,
3150 .scale = 0.0f,
3151 .zeroPoint = 0,
3152 .lifetime = OperandLifeTime::CONSTANT_COPY,
3153 .location = {.poolIndex = 0, .offset = 25, .length = 4},
3154 },
3155 {
3156 .type = OperandType::INT32,
3157 .dimensions = {},
3158 .numberOfConsumers = 1,
3159 .scale = 0.0f,
3160 .zeroPoint = 0,
3161 .lifetime = OperandLifeTime::CONSTANT_COPY,
3162 .location = {.poolIndex = 0, .offset = 29, .length = 4},
3163 },
3164 {
3165 .type = OperandType::FLOAT32,
3166 .dimensions = {},
3167 .numberOfConsumers = 1,
3168 .scale = 0.0f,
3169 .zeroPoint = 0,
3170 .lifetime = OperandLifeTime::CONSTANT_COPY,
3171 .location = {.poolIndex = 0, .offset = 33, .length = 4},
3172 },
3173 {
3174 .type = OperandType::FLOAT32,
3175 .dimensions = {},
3176 .numberOfConsumers = 1,
3177 .scale = 0.0f,
3178 .zeroPoint = 0,
3179 .lifetime = OperandLifeTime::CONSTANT_COPY,
3180 .location = {.poolIndex = 0, .offset = 37, .length = 4},
3181 },
3182 {
3183 .type = OperandType::INT32,
3184 .dimensions = {},
3185 .numberOfConsumers = 1,
3186 .scale = 0.0f,
3187 .zeroPoint = 0,
3188 .lifetime = OperandLifeTime::CONSTANT_COPY,
3189 .location = {.poolIndex = 0, .offset = 41, .length = 4},
3190 },
3191 {
3192 .type = OperandType::INT32,
3193 .dimensions = {},
3194 .numberOfConsumers = 1,
3195 .scale = 0.0f,
3196 .zeroPoint = 0,
3197 .lifetime = OperandLifeTime::CONSTANT_COPY,
3198 .location = {.poolIndex = 0, .offset = 45, .length = 4},
3199 },
3200 {
3201 .type = OperandType::TENSOR_QUANT8_ASYMM,
3202 .dimensions = {0, 2, 2, 1},
3203 .numberOfConsumers = 2,
3204 .scale = 0.1f,
3205 .zeroPoint = 128,
3206 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
3207 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3208 },
3209 {
3210 .type = OperandType::TENSOR_QUANT8_ASYMM,
3211 .dimensions = {8, 4},
3212 .numberOfConsumers = 1,
3213 .scale = 0.1f,
3214 .zeroPoint = 128,
3215 .lifetime = OperandLifeTime::CONSTANT_COPY,
3216 .location = {.poolIndex = 0, .offset = 49, .length = 32},
3217 },
3218 {
3219 .type = OperandType::TENSOR_INT32,
3220 .dimensions = {8},
3221 .numberOfConsumers = 1,
3222 .scale = 0.01f,
3223 .zeroPoint = 0,
3224 .lifetime = OperandLifeTime::CONSTANT_COPY,
3225 .location = {.poolIndex = 0, .offset = 81, .length = 32},
3226 },
3227 {
3228 .type = OperandType::INT32,
3229 .dimensions = {},
3230 .numberOfConsumers = 1,
3231 .scale = 0.0f,
3232 .zeroPoint = 0,
3233 .lifetime = OperandLifeTime::CONSTANT_COPY,
3234 .location = {.poolIndex = 0, .offset = 113, .length = 4},
3235 },
3236 {
3237 .type = OperandType::TENSOR_QUANT8_ASYMM,
3238 .dimensions = {0, 8},
3239 .numberOfConsumers = 1,
3240 .scale = 0.1f,
3241 .zeroPoint = 128,
3242 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
3243 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3244 },
3245 {
3246 .type = OperandType::TENSOR_QUANT8_ASYMM,
3247 .dimensions = {2, 4},
3248 .numberOfConsumers = 1,
3249 .scale = 0.1f,
3250 .zeroPoint = 128,
3251 .lifetime = OperandLifeTime::CONSTANT_COPY,
3252 .location = {.poolIndex = 0, .offset = 117, .length = 8},
3253 },
3254 {
3255 .type = OperandType::TENSOR_INT32,
3256 .dimensions = {2},
3257 .numberOfConsumers = 1,
3258 .scale = 0.01f,
3259 .zeroPoint = 0,
3260 .lifetime = OperandLifeTime::CONSTANT_COPY,
3261 .location = {.poolIndex = 0, .offset = 125, .length = 8},
3262 },
3263 {
3264 .type = OperandType::INT32,
3265 .dimensions = {},
3266 .numberOfConsumers = 1,
3267 .scale = 0.0f,
3268 .zeroPoint = 0,
3269 .lifetime = OperandLifeTime::CONSTANT_COPY,
3270 .location = {.poolIndex = 0, .offset = 133, .length = 4},
3271 },
3272 {
3273 .type = OperandType::TENSOR_QUANT8_ASYMM,
3274 .dimensions = {0, 2},
3275 .numberOfConsumers = 1,
3276 .scale = 0.1f,
3277 .zeroPoint = 128,
3278 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
3279 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3280 },
3281 {
3282 .type = OperandType::TENSOR_QUANT16_ASYMM,
3283 .dimensions = {0, 8},
3284 .numberOfConsumers = 1,
3285 .scale = 0.125f,
3286 .zeroPoint = 0,
3287 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE,
3288 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3289 },
3290 {
3291 .type = OperandType::FLOAT32,
3292 .dimensions = {},
3293 .numberOfConsumers = 1,
3294 .scale = 0.0f,
3295 .zeroPoint = 0,
3296 .lifetime = OperandLifeTime::CONSTANT_COPY,
3297 .location = {.poolIndex = 0, .offset = 137, .length = 4},
3298 },
3299 {
3300 .type = OperandType::INT32,
3301 .dimensions = {},
3302 .numberOfConsumers = 1,
3303 .scale = 0.0f,
3304 .zeroPoint = 0,
3305 .lifetime = OperandLifeTime::CONSTANT_COPY,
3306 .location = {.poolIndex = 0, .offset = 141, .length = 4},
3307 },
3308 {
3309 .type = OperandType::INT32,
3310 .dimensions = {},
3311 .numberOfConsumers = 1,
3312 .scale = 0.0f,
3313 .zeroPoint = 0,
3314 .lifetime = OperandLifeTime::CONSTANT_COPY,
3315 .location = {.poolIndex = 0, .offset = 145, .length = 4},
3316 },
3317 {
3318 .type = OperandType::FLOAT32,
3319 .dimensions = {},
3320 .numberOfConsumers = 1,
3321 .scale = 0.0f,
3322 .zeroPoint = 0,
3323 .lifetime = OperandLifeTime::CONSTANT_COPY,
3324 .location = {.poolIndex = 0, .offset = 149, .length = 4},
3325 },
3326 {
3327 .type = OperandType::FLOAT32,
3328 .dimensions = {},
3329 .numberOfConsumers = 1,
3330 .scale = 0.0f,
3331 .zeroPoint = 0,
3332 .lifetime = OperandLifeTime::CONSTANT_COPY,
3333 .location = {.poolIndex = 0, .offset = 153, .length = 4},
3334 },
3335 {
3336 .type = OperandType::FLOAT32,
3337 .dimensions = {},
3338 .numberOfConsumers = 1,
3339 .scale = 0.0f,
3340 .zeroPoint = 0,
3341 .lifetime = OperandLifeTime::CONSTANT_COPY,
3342 .location = {.poolIndex = 0, .offset = 157, .length = 4},
3343 },
3344 {
3345 .type = OperandType::TENSOR_QUANT8_ASYMM,
3346 .dimensions = {0},
3347 .numberOfConsumers = 0,
3348 .scale = 0.1f,
3349 .zeroPoint = 128,
3350 .lifetime = OperandLifeTime::MODEL_OUTPUT,
3351 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3352 },
3353 {
3354 .type = OperandType::TENSOR_QUANT16_ASYMM,
3355 .dimensions = {0, 0},
3356 .numberOfConsumers = 0,
3357 .scale = 0.125f,
3358 .zeroPoint = 0,
3359 .lifetime = OperandLifeTime::MODEL_OUTPUT,
3360 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3361 },
3362 {
3363 .type = OperandType::TENSOR_INT32,
3364 .dimensions = {0},
3365 .numberOfConsumers = 0,
3366 .scale = 0.0f,
3367 .zeroPoint = 0,
3368 .lifetime = OperandLifeTime::MODEL_OUTPUT,
3369 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3370 },
3371 {
3372 .type = OperandType::TENSOR_INT32,
3373 .dimensions = {0},
3374 .numberOfConsumers = 0,
3375 .scale = 0.0f,
3376 .zeroPoint = 0,
3377 .lifetime = OperandLifeTime::MODEL_OUTPUT,
3378 .location = {.poolIndex = 0, .offset = 0, .length = 0},
3379 }
3380 };
3381
3382 const std::vector<Operation> operations = {
3383 {
3384 .type = OperationType::GENERATE_PROPOSALS,
3385 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
3386 .outputs = {11, 12, 13},
3387 },
3388 {
3389 .type = OperationType::ROI_ALIGN,
3390 .inputs = {14, 12, 13, 15, 16, 17, 18, 19, 20, 10},
3391 .outputs = {21},
3392 },
3393 {
3394 .type = OperationType::FULLY_CONNECTED,
3395 .inputs = {21, 22, 23, 24},
3396 .outputs = {25},
3397 },
3398 {
3399 .type = OperationType::FULLY_CONNECTED,
3400 .inputs = {21, 26, 27, 28},
3401 .outputs = {29},
3402 },
3403 {
3404 .type = OperationType::AXIS_ALIGNED_BBOX_TRANSFORM,
3405 .inputs = {12, 25, 13, 3},
3406 .outputs = {30},
3407 },
3408 {
3409 .type = OperationType::BOX_WITH_NMS_LIMIT,
3410 .inputs = {29, 30, 13, 31, 32, 33, 34, 35, 36},
3411 .outputs = {37, 38, 39, 40},
3412 }
3413 };
3414
3415 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 14};
3416 const std::vector<uint32_t> outputIndexes = {11, 37, 38, 39, 40};
3417 std::vector<uint8_t> operandValues = {
3418 0, 0, 128, 63, 0, 0, 128, 63, 255, 255, 255, 255, 255, 255, 255, 255, 154, 153, 153, 62, 0, 0, 32, 65, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 63, 4, 0, 0, 0, 4, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 100, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 205, 204, 204, 61, 255, 255, 255, 255, 0, 0, 0, 0, 154, 153, 153, 62, 0, 0, 128, 63, 205, 204, 204, 61
3419 };
3420 const std::vector<hidl_memory> pools = {};
3421
3422 return {
3423 .operands = operands,
3424 .operations = operations,
3425 .inputIndexes = inputIndexes,
3426 .outputIndexes = outputIndexes,
3427 .operandValues = operandValues,
3428 .pools = pools,
3429 };
3430 }
3431
is_ignored_zero_sized_dynamic_output_shape_quant8(int i)3432 inline bool is_ignored_zero_sized_dynamic_output_shape_quant8(int i) {
3433 static std::set<int> ignore = {};
3434 return ignore.find(i) != ignore.end();
3435 }
3436
3437