1 // clang-format off 2 // Generated file (from: slice.mod.py). Do not edit 3 // Create the model 4 Model createTestModel() { 5 const std::vector<Operand> operands = { 6 { 7 .type = OperandType::TENSOR_FLOAT32, 8 .dimensions = {4}, 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_INT32, 17 .dimensions = {1}, 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_INT32, 26 .dimensions = {1}, 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 = {2}, 36 .numberOfConsumers = 0, 37 .scale = 0.0f, 38 .zeroPoint = 0, 39 .lifetime = OperandLifeTime::MODEL_OUTPUT, 40 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 41 } 42 }; 43 44 const std::vector<Operation> operations = { 45 { 46 .type = OperationType::SLICE, 47 .inputs = {0, 1, 2}, 48 .outputs = {3}, 49 } 50 }; 51 52 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 53 const std::vector<uint32_t> outputIndexes = {3}; 54 std::vector<uint8_t> operandValues = {}; 55 const std::vector<hidl_memory> pools = {}; 56 57 return { 58 .operands = operands, 59 .operations = operations, 60 .inputIndexes = inputIndexes, 61 .outputIndexes = outputIndexes, 62 .operandValues = operandValues, 63 .pools = pools, 64 }; 65 } 66 67 inline bool is_ignored(int i) { 68 static std::set<int> ignore = {}; 69 return ignore.find(i) != ignore.end(); 70 } 71 72 // Create the model 73 Model createTestModel_relaxed() { 74 const std::vector<Operand> operands = { 75 { 76 .type = OperandType::TENSOR_FLOAT32, 77 .dimensions = {4}, 78 .numberOfConsumers = 1, 79 .scale = 0.0f, 80 .zeroPoint = 0, 81 .lifetime = OperandLifeTime::MODEL_INPUT, 82 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 83 }, 84 { 85 .type = OperandType::TENSOR_INT32, 86 .dimensions = {1}, 87 .numberOfConsumers = 1, 88 .scale = 0.0f, 89 .zeroPoint = 0, 90 .lifetime = OperandLifeTime::MODEL_INPUT, 91 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 92 }, 93 { 94 .type = OperandType::TENSOR_INT32, 95 .dimensions = {1}, 96 .numberOfConsumers = 1, 97 .scale = 0.0f, 98 .zeroPoint = 0, 99 .lifetime = OperandLifeTime::MODEL_INPUT, 100 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 101 }, 102 { 103 .type = OperandType::TENSOR_FLOAT32, 104 .dimensions = {2}, 105 .numberOfConsumers = 0, 106 .scale = 0.0f, 107 .zeroPoint = 0, 108 .lifetime = OperandLifeTime::MODEL_OUTPUT, 109 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 110 } 111 }; 112 113 const std::vector<Operation> operations = { 114 { 115 .type = OperationType::SLICE, 116 .inputs = {0, 1, 2}, 117 .outputs = {3}, 118 } 119 }; 120 121 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 122 const std::vector<uint32_t> outputIndexes = {3}; 123 std::vector<uint8_t> operandValues = {}; 124 const std::vector<hidl_memory> pools = {}; 125 126 return { 127 .operands = operands, 128 .operations = operations, 129 .inputIndexes = inputIndexes, 130 .outputIndexes = outputIndexes, 131 .operandValues = operandValues, 132 .pools = pools, 133 .relaxComputationFloat32toFloat16 = true, 134 }; 135 } 136 137 inline bool is_ignored_relaxed(int i) { 138 static std::set<int> ignore = {}; 139 return ignore.find(i) != ignore.end(); 140 } 141 142 // Create the model 143 Model createTestModel_float16() { 144 const std::vector<Operand> operands = { 145 { 146 .type = OperandType::TENSOR_FLOAT16, 147 .dimensions = {4}, 148 .numberOfConsumers = 1, 149 .scale = 0.0f, 150 .zeroPoint = 0, 151 .lifetime = OperandLifeTime::MODEL_INPUT, 152 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 153 }, 154 { 155 .type = OperandType::TENSOR_INT32, 156 .dimensions = {1}, 157 .numberOfConsumers = 1, 158 .scale = 0.0f, 159 .zeroPoint = 0, 160 .lifetime = OperandLifeTime::MODEL_INPUT, 161 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 162 }, 163 { 164 .type = OperandType::TENSOR_INT32, 165 .dimensions = {1}, 166 .numberOfConsumers = 1, 167 .scale = 0.0f, 168 .zeroPoint = 0, 169 .lifetime = OperandLifeTime::MODEL_INPUT, 170 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 171 }, 172 { 173 .type = OperandType::TENSOR_FLOAT16, 174 .dimensions = {2}, 175 .numberOfConsumers = 0, 176 .scale = 0.0f, 177 .zeroPoint = 0, 178 .lifetime = OperandLifeTime::MODEL_OUTPUT, 179 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 180 } 181 }; 182 183 const std::vector<Operation> operations = { 184 { 185 .type = OperationType::SLICE, 186 .inputs = {0, 1, 2}, 187 .outputs = {3}, 188 } 189 }; 190 191 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 192 const std::vector<uint32_t> outputIndexes = {3}; 193 std::vector<uint8_t> operandValues = {}; 194 const std::vector<hidl_memory> pools = {}; 195 196 return { 197 .operands = operands, 198 .operations = operations, 199 .inputIndexes = inputIndexes, 200 .outputIndexes = outputIndexes, 201 .operandValues = operandValues, 202 .pools = pools, 203 }; 204 } 205 206 inline bool is_ignored_float16(int i) { 207 static std::set<int> ignore = {}; 208 return ignore.find(i) != ignore.end(); 209 } 210 211 // Create the model 212 Model createTestModel_dynamic_output_shape() { 213 const std::vector<Operand> operands = { 214 { 215 .type = OperandType::TENSOR_FLOAT32, 216 .dimensions = {4}, 217 .numberOfConsumers = 1, 218 .scale = 0.0f, 219 .zeroPoint = 0, 220 .lifetime = OperandLifeTime::MODEL_INPUT, 221 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 222 }, 223 { 224 .type = OperandType::TENSOR_INT32, 225 .dimensions = {1}, 226 .numberOfConsumers = 1, 227 .scale = 0.0f, 228 .zeroPoint = 0, 229 .lifetime = OperandLifeTime::MODEL_INPUT, 230 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 231 }, 232 { 233 .type = OperandType::TENSOR_INT32, 234 .dimensions = {1}, 235 .numberOfConsumers = 1, 236 .scale = 0.0f, 237 .zeroPoint = 0, 238 .lifetime = OperandLifeTime::MODEL_INPUT, 239 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 240 }, 241 { 242 .type = OperandType::TENSOR_FLOAT32, 243 .dimensions = {0}, 244 .numberOfConsumers = 0, 245 .scale = 0.0f, 246 .zeroPoint = 0, 247 .lifetime = OperandLifeTime::MODEL_OUTPUT, 248 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 249 } 250 }; 251 252 const std::vector<Operation> operations = { 253 { 254 .type = OperationType::SLICE, 255 .inputs = {0, 1, 2}, 256 .outputs = {3}, 257 } 258 }; 259 260 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 261 const std::vector<uint32_t> outputIndexes = {3}; 262 std::vector<uint8_t> operandValues = {}; 263 const std::vector<hidl_memory> pools = {}; 264 265 return { 266 .operands = operands, 267 .operations = operations, 268 .inputIndexes = inputIndexes, 269 .outputIndexes = outputIndexes, 270 .operandValues = operandValues, 271 .pools = pools, 272 }; 273 } 274 275 inline bool is_ignored_dynamic_output_shape(int i) { 276 static std::set<int> ignore = {}; 277 return ignore.find(i) != ignore.end(); 278 } 279 280 // Create the model 281 Model createTestModel_dynamic_output_shape_relaxed() { 282 const std::vector<Operand> operands = { 283 { 284 .type = OperandType::TENSOR_FLOAT32, 285 .dimensions = {4}, 286 .numberOfConsumers = 1, 287 .scale = 0.0f, 288 .zeroPoint = 0, 289 .lifetime = OperandLifeTime::MODEL_INPUT, 290 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 291 }, 292 { 293 .type = OperandType::TENSOR_INT32, 294 .dimensions = {1}, 295 .numberOfConsumers = 1, 296 .scale = 0.0f, 297 .zeroPoint = 0, 298 .lifetime = OperandLifeTime::MODEL_INPUT, 299 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 300 }, 301 { 302 .type = OperandType::TENSOR_INT32, 303 .dimensions = {1}, 304 .numberOfConsumers = 1, 305 .scale = 0.0f, 306 .zeroPoint = 0, 307 .lifetime = OperandLifeTime::MODEL_INPUT, 308 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 309 }, 310 { 311 .type = OperandType::TENSOR_FLOAT32, 312 .dimensions = {0}, 313 .numberOfConsumers = 0, 314 .scale = 0.0f, 315 .zeroPoint = 0, 316 .lifetime = OperandLifeTime::MODEL_OUTPUT, 317 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 318 } 319 }; 320 321 const std::vector<Operation> operations = { 322 { 323 .type = OperationType::SLICE, 324 .inputs = {0, 1, 2}, 325 .outputs = {3}, 326 } 327 }; 328 329 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 330 const std::vector<uint32_t> outputIndexes = {3}; 331 std::vector<uint8_t> operandValues = {}; 332 const std::vector<hidl_memory> pools = {}; 333 334 return { 335 .operands = operands, 336 .operations = operations, 337 .inputIndexes = inputIndexes, 338 .outputIndexes = outputIndexes, 339 .operandValues = operandValues, 340 .pools = pools, 341 .relaxComputationFloat32toFloat16 = true, 342 }; 343 } 344 345 inline bool is_ignored_dynamic_output_shape_relaxed(int i) { 346 static std::set<int> ignore = {}; 347 return ignore.find(i) != ignore.end(); 348 } 349 350 // Create the model 351 Model createTestModel_dynamic_output_shape_float16() { 352 const std::vector<Operand> operands = { 353 { 354 .type = OperandType::TENSOR_FLOAT16, 355 .dimensions = {4}, 356 .numberOfConsumers = 1, 357 .scale = 0.0f, 358 .zeroPoint = 0, 359 .lifetime = OperandLifeTime::MODEL_INPUT, 360 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 361 }, 362 { 363 .type = OperandType::TENSOR_INT32, 364 .dimensions = {1}, 365 .numberOfConsumers = 1, 366 .scale = 0.0f, 367 .zeroPoint = 0, 368 .lifetime = OperandLifeTime::MODEL_INPUT, 369 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 370 }, 371 { 372 .type = OperandType::TENSOR_INT32, 373 .dimensions = {1}, 374 .numberOfConsumers = 1, 375 .scale = 0.0f, 376 .zeroPoint = 0, 377 .lifetime = OperandLifeTime::MODEL_INPUT, 378 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 379 }, 380 { 381 .type = OperandType::TENSOR_FLOAT16, 382 .dimensions = {0}, 383 .numberOfConsumers = 0, 384 .scale = 0.0f, 385 .zeroPoint = 0, 386 .lifetime = OperandLifeTime::MODEL_OUTPUT, 387 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 388 } 389 }; 390 391 const std::vector<Operation> operations = { 392 { 393 .type = OperationType::SLICE, 394 .inputs = {0, 1, 2}, 395 .outputs = {3}, 396 } 397 }; 398 399 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 400 const std::vector<uint32_t> outputIndexes = {3}; 401 std::vector<uint8_t> operandValues = {}; 402 const std::vector<hidl_memory> pools = {}; 403 404 return { 405 .operands = operands, 406 .operations = operations, 407 .inputIndexes = inputIndexes, 408 .outputIndexes = outputIndexes, 409 .operandValues = operandValues, 410 .pools = pools, 411 }; 412 } 413 414 inline bool is_ignored_dynamic_output_shape_float16(int i) { 415 static std::set<int> ignore = {}; 416 return ignore.find(i) != ignore.end(); 417 } 418 419 // Create the model 420 Model createTestModel_2() { 421 const std::vector<Operand> operands = { 422 { 423 .type = OperandType::TENSOR_FLOAT32, 424 .dimensions = {2, 3}, 425 .numberOfConsumers = 1, 426 .scale = 0.0f, 427 .zeroPoint = 0, 428 .lifetime = OperandLifeTime::MODEL_INPUT, 429 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 430 }, 431 { 432 .type = OperandType::TENSOR_INT32, 433 .dimensions = {2}, 434 .numberOfConsumers = 1, 435 .scale = 0.0f, 436 .zeroPoint = 0, 437 .lifetime = OperandLifeTime::MODEL_INPUT, 438 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 439 }, 440 { 441 .type = OperandType::TENSOR_INT32, 442 .dimensions = {2}, 443 .numberOfConsumers = 1, 444 .scale = 0.0f, 445 .zeroPoint = 0, 446 .lifetime = OperandLifeTime::MODEL_INPUT, 447 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 448 }, 449 { 450 .type = OperandType::TENSOR_FLOAT32, 451 .dimensions = {1, 2}, 452 .numberOfConsumers = 0, 453 .scale = 0.0f, 454 .zeroPoint = 0, 455 .lifetime = OperandLifeTime::MODEL_OUTPUT, 456 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 457 } 458 }; 459 460 const std::vector<Operation> operations = { 461 { 462 .type = OperationType::SLICE, 463 .inputs = {0, 1, 2}, 464 .outputs = {3}, 465 } 466 }; 467 468 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 469 const std::vector<uint32_t> outputIndexes = {3}; 470 std::vector<uint8_t> operandValues = {}; 471 const std::vector<hidl_memory> pools = {}; 472 473 return { 474 .operands = operands, 475 .operations = operations, 476 .inputIndexes = inputIndexes, 477 .outputIndexes = outputIndexes, 478 .operandValues = operandValues, 479 .pools = pools, 480 }; 481 } 482 483 inline bool is_ignored_2(int i) { 484 static std::set<int> ignore = {}; 485 return ignore.find(i) != ignore.end(); 486 } 487 488 // Create the model 489 Model createTestModel_relaxed_2() { 490 const std::vector<Operand> operands = { 491 { 492 .type = OperandType::TENSOR_FLOAT32, 493 .dimensions = {2, 3}, 494 .numberOfConsumers = 1, 495 .scale = 0.0f, 496 .zeroPoint = 0, 497 .lifetime = OperandLifeTime::MODEL_INPUT, 498 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 499 }, 500 { 501 .type = OperandType::TENSOR_INT32, 502 .dimensions = {2}, 503 .numberOfConsumers = 1, 504 .scale = 0.0f, 505 .zeroPoint = 0, 506 .lifetime = OperandLifeTime::MODEL_INPUT, 507 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 508 }, 509 { 510 .type = OperandType::TENSOR_INT32, 511 .dimensions = {2}, 512 .numberOfConsumers = 1, 513 .scale = 0.0f, 514 .zeroPoint = 0, 515 .lifetime = OperandLifeTime::MODEL_INPUT, 516 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 517 }, 518 { 519 .type = OperandType::TENSOR_FLOAT32, 520 .dimensions = {1, 2}, 521 .numberOfConsumers = 0, 522 .scale = 0.0f, 523 .zeroPoint = 0, 524 .lifetime = OperandLifeTime::MODEL_OUTPUT, 525 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 526 } 527 }; 528 529 const std::vector<Operation> operations = { 530 { 531 .type = OperationType::SLICE, 532 .inputs = {0, 1, 2}, 533 .outputs = {3}, 534 } 535 }; 536 537 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 538 const std::vector<uint32_t> outputIndexes = {3}; 539 std::vector<uint8_t> operandValues = {}; 540 const std::vector<hidl_memory> pools = {}; 541 542 return { 543 .operands = operands, 544 .operations = operations, 545 .inputIndexes = inputIndexes, 546 .outputIndexes = outputIndexes, 547 .operandValues = operandValues, 548 .pools = pools, 549 .relaxComputationFloat32toFloat16 = true, 550 }; 551 } 552 553 inline bool is_ignored_relaxed_2(int i) { 554 static std::set<int> ignore = {}; 555 return ignore.find(i) != ignore.end(); 556 } 557 558 // Create the model 559 Model createTestModel_float16_2() { 560 const std::vector<Operand> operands = { 561 { 562 .type = OperandType::TENSOR_FLOAT16, 563 .dimensions = {2, 3}, 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::TENSOR_INT32, 572 .dimensions = {2}, 573 .numberOfConsumers = 1, 574 .scale = 0.0f, 575 .zeroPoint = 0, 576 .lifetime = OperandLifeTime::MODEL_INPUT, 577 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 578 }, 579 { 580 .type = OperandType::TENSOR_INT32, 581 .dimensions = {2}, 582 .numberOfConsumers = 1, 583 .scale = 0.0f, 584 .zeroPoint = 0, 585 .lifetime = OperandLifeTime::MODEL_INPUT, 586 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 587 }, 588 { 589 .type = OperandType::TENSOR_FLOAT16, 590 .dimensions = {1, 2}, 591 .numberOfConsumers = 0, 592 .scale = 0.0f, 593 .zeroPoint = 0, 594 .lifetime = OperandLifeTime::MODEL_OUTPUT, 595 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 596 } 597 }; 598 599 const std::vector<Operation> operations = { 600 { 601 .type = OperationType::SLICE, 602 .inputs = {0, 1, 2}, 603 .outputs = {3}, 604 } 605 }; 606 607 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 608 const std::vector<uint32_t> outputIndexes = {3}; 609 std::vector<uint8_t> operandValues = {}; 610 const std::vector<hidl_memory> pools = {}; 611 612 return { 613 .operands = operands, 614 .operations = operations, 615 .inputIndexes = inputIndexes, 616 .outputIndexes = outputIndexes, 617 .operandValues = operandValues, 618 .pools = pools, 619 }; 620 } 621 622 inline bool is_ignored_float16_2(int i) { 623 static std::set<int> ignore = {}; 624 return ignore.find(i) != ignore.end(); 625 } 626 627 // Create the model 628 Model createTestModel_dynamic_output_shape_2() { 629 const std::vector<Operand> operands = { 630 { 631 .type = OperandType::TENSOR_FLOAT32, 632 .dimensions = {2, 3}, 633 .numberOfConsumers = 1, 634 .scale = 0.0f, 635 .zeroPoint = 0, 636 .lifetime = OperandLifeTime::MODEL_INPUT, 637 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 638 }, 639 { 640 .type = OperandType::TENSOR_INT32, 641 .dimensions = {2}, 642 .numberOfConsumers = 1, 643 .scale = 0.0f, 644 .zeroPoint = 0, 645 .lifetime = OperandLifeTime::MODEL_INPUT, 646 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 647 }, 648 { 649 .type = OperandType::TENSOR_INT32, 650 .dimensions = {2}, 651 .numberOfConsumers = 1, 652 .scale = 0.0f, 653 .zeroPoint = 0, 654 .lifetime = OperandLifeTime::MODEL_INPUT, 655 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 656 }, 657 { 658 .type = OperandType::TENSOR_FLOAT32, 659 .dimensions = {0, 0}, 660 .numberOfConsumers = 0, 661 .scale = 0.0f, 662 .zeroPoint = 0, 663 .lifetime = OperandLifeTime::MODEL_OUTPUT, 664 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 665 } 666 }; 667 668 const std::vector<Operation> operations = { 669 { 670 .type = OperationType::SLICE, 671 .inputs = {0, 1, 2}, 672 .outputs = {3}, 673 } 674 }; 675 676 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 677 const std::vector<uint32_t> outputIndexes = {3}; 678 std::vector<uint8_t> operandValues = {}; 679 const std::vector<hidl_memory> pools = {}; 680 681 return { 682 .operands = operands, 683 .operations = operations, 684 .inputIndexes = inputIndexes, 685 .outputIndexes = outputIndexes, 686 .operandValues = operandValues, 687 .pools = pools, 688 }; 689 } 690 691 inline bool is_ignored_dynamic_output_shape_2(int i) { 692 static std::set<int> ignore = {}; 693 return ignore.find(i) != ignore.end(); 694 } 695 696 // Create the model 697 Model createTestModel_dynamic_output_shape_relaxed_2() { 698 const std::vector<Operand> operands = { 699 { 700 .type = OperandType::TENSOR_FLOAT32, 701 .dimensions = {2, 3}, 702 .numberOfConsumers = 1, 703 .scale = 0.0f, 704 .zeroPoint = 0, 705 .lifetime = OperandLifeTime::MODEL_INPUT, 706 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 707 }, 708 { 709 .type = OperandType::TENSOR_INT32, 710 .dimensions = {2}, 711 .numberOfConsumers = 1, 712 .scale = 0.0f, 713 .zeroPoint = 0, 714 .lifetime = OperandLifeTime::MODEL_INPUT, 715 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 716 }, 717 { 718 .type = OperandType::TENSOR_INT32, 719 .dimensions = {2}, 720 .numberOfConsumers = 1, 721 .scale = 0.0f, 722 .zeroPoint = 0, 723 .lifetime = OperandLifeTime::MODEL_INPUT, 724 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 725 }, 726 { 727 .type = OperandType::TENSOR_FLOAT32, 728 .dimensions = {0, 0}, 729 .numberOfConsumers = 0, 730 .scale = 0.0f, 731 .zeroPoint = 0, 732 .lifetime = OperandLifeTime::MODEL_OUTPUT, 733 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 734 } 735 }; 736 737 const std::vector<Operation> operations = { 738 { 739 .type = OperationType::SLICE, 740 .inputs = {0, 1, 2}, 741 .outputs = {3}, 742 } 743 }; 744 745 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 746 const std::vector<uint32_t> outputIndexes = {3}; 747 std::vector<uint8_t> operandValues = {}; 748 const std::vector<hidl_memory> pools = {}; 749 750 return { 751 .operands = operands, 752 .operations = operations, 753 .inputIndexes = inputIndexes, 754 .outputIndexes = outputIndexes, 755 .operandValues = operandValues, 756 .pools = pools, 757 .relaxComputationFloat32toFloat16 = true, 758 }; 759 } 760 761 inline bool is_ignored_dynamic_output_shape_relaxed_2(int i) { 762 static std::set<int> ignore = {}; 763 return ignore.find(i) != ignore.end(); 764 } 765 766 // Create the model 767 Model createTestModel_dynamic_output_shape_float16_2() { 768 const std::vector<Operand> operands = { 769 { 770 .type = OperandType::TENSOR_FLOAT16, 771 .dimensions = {2, 3}, 772 .numberOfConsumers = 1, 773 .scale = 0.0f, 774 .zeroPoint = 0, 775 .lifetime = OperandLifeTime::MODEL_INPUT, 776 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 777 }, 778 { 779 .type = OperandType::TENSOR_INT32, 780 .dimensions = {2}, 781 .numberOfConsumers = 1, 782 .scale = 0.0f, 783 .zeroPoint = 0, 784 .lifetime = OperandLifeTime::MODEL_INPUT, 785 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 786 }, 787 { 788 .type = OperandType::TENSOR_INT32, 789 .dimensions = {2}, 790 .numberOfConsumers = 1, 791 .scale = 0.0f, 792 .zeroPoint = 0, 793 .lifetime = OperandLifeTime::MODEL_INPUT, 794 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 795 }, 796 { 797 .type = OperandType::TENSOR_FLOAT16, 798 .dimensions = {0, 0}, 799 .numberOfConsumers = 0, 800 .scale = 0.0f, 801 .zeroPoint = 0, 802 .lifetime = OperandLifeTime::MODEL_OUTPUT, 803 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 804 } 805 }; 806 807 const std::vector<Operation> operations = { 808 { 809 .type = OperationType::SLICE, 810 .inputs = {0, 1, 2}, 811 .outputs = {3}, 812 } 813 }; 814 815 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 816 const std::vector<uint32_t> outputIndexes = {3}; 817 std::vector<uint8_t> operandValues = {}; 818 const std::vector<hidl_memory> pools = {}; 819 820 return { 821 .operands = operands, 822 .operations = operations, 823 .inputIndexes = inputIndexes, 824 .outputIndexes = outputIndexes, 825 .operandValues = operandValues, 826 .pools = pools, 827 }; 828 } 829 830 inline bool is_ignored_dynamic_output_shape_float16_2(int i) { 831 static std::set<int> ignore = {}; 832 return ignore.find(i) != ignore.end(); 833 } 834 835 // Create the model 836 Model createTestModel_3() { 837 const std::vector<Operand> operands = { 838 { 839 .type = OperandType::TENSOR_FLOAT32, 840 .dimensions = {2, 3, 2}, 841 .numberOfConsumers = 1, 842 .scale = 0.0f, 843 .zeroPoint = 0, 844 .lifetime = OperandLifeTime::MODEL_INPUT, 845 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 846 }, 847 { 848 .type = OperandType::TENSOR_INT32, 849 .dimensions = {3}, 850 .numberOfConsumers = 1, 851 .scale = 0.0f, 852 .zeroPoint = 0, 853 .lifetime = OperandLifeTime::MODEL_INPUT, 854 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 855 }, 856 { 857 .type = OperandType::TENSOR_INT32, 858 .dimensions = {3}, 859 .numberOfConsumers = 1, 860 .scale = 0.0f, 861 .zeroPoint = 0, 862 .lifetime = OperandLifeTime::MODEL_INPUT, 863 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 864 }, 865 { 866 .type = OperandType::TENSOR_FLOAT32, 867 .dimensions = {2, 3, 2}, 868 .numberOfConsumers = 0, 869 .scale = 0.0f, 870 .zeroPoint = 0, 871 .lifetime = OperandLifeTime::MODEL_OUTPUT, 872 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 873 } 874 }; 875 876 const std::vector<Operation> operations = { 877 { 878 .type = OperationType::SLICE, 879 .inputs = {0, 1, 2}, 880 .outputs = {3}, 881 } 882 }; 883 884 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 885 const std::vector<uint32_t> outputIndexes = {3}; 886 std::vector<uint8_t> operandValues = {}; 887 const std::vector<hidl_memory> pools = {}; 888 889 return { 890 .operands = operands, 891 .operations = operations, 892 .inputIndexes = inputIndexes, 893 .outputIndexes = outputIndexes, 894 .operandValues = operandValues, 895 .pools = pools, 896 }; 897 } 898 899 inline bool is_ignored_3(int i) { 900 static std::set<int> ignore = {}; 901 return ignore.find(i) != ignore.end(); 902 } 903 904 // Create the model 905 Model createTestModel_relaxed_3() { 906 const std::vector<Operand> operands = { 907 { 908 .type = OperandType::TENSOR_FLOAT32, 909 .dimensions = {2, 3, 2}, 910 .numberOfConsumers = 1, 911 .scale = 0.0f, 912 .zeroPoint = 0, 913 .lifetime = OperandLifeTime::MODEL_INPUT, 914 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 915 }, 916 { 917 .type = OperandType::TENSOR_INT32, 918 .dimensions = {3}, 919 .numberOfConsumers = 1, 920 .scale = 0.0f, 921 .zeroPoint = 0, 922 .lifetime = OperandLifeTime::MODEL_INPUT, 923 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 924 }, 925 { 926 .type = OperandType::TENSOR_INT32, 927 .dimensions = {3}, 928 .numberOfConsumers = 1, 929 .scale = 0.0f, 930 .zeroPoint = 0, 931 .lifetime = OperandLifeTime::MODEL_INPUT, 932 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 933 }, 934 { 935 .type = OperandType::TENSOR_FLOAT32, 936 .dimensions = {2, 3, 2}, 937 .numberOfConsumers = 0, 938 .scale = 0.0f, 939 .zeroPoint = 0, 940 .lifetime = OperandLifeTime::MODEL_OUTPUT, 941 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 942 } 943 }; 944 945 const std::vector<Operation> operations = { 946 { 947 .type = OperationType::SLICE, 948 .inputs = {0, 1, 2}, 949 .outputs = {3}, 950 } 951 }; 952 953 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 954 const std::vector<uint32_t> outputIndexes = {3}; 955 std::vector<uint8_t> operandValues = {}; 956 const std::vector<hidl_memory> pools = {}; 957 958 return { 959 .operands = operands, 960 .operations = operations, 961 .inputIndexes = inputIndexes, 962 .outputIndexes = outputIndexes, 963 .operandValues = operandValues, 964 .pools = pools, 965 .relaxComputationFloat32toFloat16 = true, 966 }; 967 } 968 969 inline bool is_ignored_relaxed_3(int i) { 970 static std::set<int> ignore = {}; 971 return ignore.find(i) != ignore.end(); 972 } 973 974 // Create the model 975 Model createTestModel_float16_3() { 976 const std::vector<Operand> operands = { 977 { 978 .type = OperandType::TENSOR_FLOAT16, 979 .dimensions = {2, 3, 2}, 980 .numberOfConsumers = 1, 981 .scale = 0.0f, 982 .zeroPoint = 0, 983 .lifetime = OperandLifeTime::MODEL_INPUT, 984 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 985 }, 986 { 987 .type = OperandType::TENSOR_INT32, 988 .dimensions = {3}, 989 .numberOfConsumers = 1, 990 .scale = 0.0f, 991 .zeroPoint = 0, 992 .lifetime = OperandLifeTime::MODEL_INPUT, 993 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 994 }, 995 { 996 .type = OperandType::TENSOR_INT32, 997 .dimensions = {3}, 998 .numberOfConsumers = 1, 999 .scale = 0.0f, 1000 .zeroPoint = 0, 1001 .lifetime = OperandLifeTime::MODEL_INPUT, 1002 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1003 }, 1004 { 1005 .type = OperandType::TENSOR_FLOAT16, 1006 .dimensions = {2, 3, 2}, 1007 .numberOfConsumers = 0, 1008 .scale = 0.0f, 1009 .zeroPoint = 0, 1010 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1011 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1012 } 1013 }; 1014 1015 const std::vector<Operation> operations = { 1016 { 1017 .type = OperationType::SLICE, 1018 .inputs = {0, 1, 2}, 1019 .outputs = {3}, 1020 } 1021 }; 1022 1023 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1024 const std::vector<uint32_t> outputIndexes = {3}; 1025 std::vector<uint8_t> operandValues = {}; 1026 const std::vector<hidl_memory> pools = {}; 1027 1028 return { 1029 .operands = operands, 1030 .operations = operations, 1031 .inputIndexes = inputIndexes, 1032 .outputIndexes = outputIndexes, 1033 .operandValues = operandValues, 1034 .pools = pools, 1035 }; 1036 } 1037 1038 inline bool is_ignored_float16_3(int i) { 1039 static std::set<int> ignore = {}; 1040 return ignore.find(i) != ignore.end(); 1041 } 1042 1043 // Create the model 1044 Model createTestModel_dynamic_output_shape_3() { 1045 const std::vector<Operand> operands = { 1046 { 1047 .type = OperandType::TENSOR_FLOAT32, 1048 .dimensions = {2, 3, 2}, 1049 .numberOfConsumers = 1, 1050 .scale = 0.0f, 1051 .zeroPoint = 0, 1052 .lifetime = OperandLifeTime::MODEL_INPUT, 1053 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1054 }, 1055 { 1056 .type = OperandType::TENSOR_INT32, 1057 .dimensions = {3}, 1058 .numberOfConsumers = 1, 1059 .scale = 0.0f, 1060 .zeroPoint = 0, 1061 .lifetime = OperandLifeTime::MODEL_INPUT, 1062 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1063 }, 1064 { 1065 .type = OperandType::TENSOR_INT32, 1066 .dimensions = {3}, 1067 .numberOfConsumers = 1, 1068 .scale = 0.0f, 1069 .zeroPoint = 0, 1070 .lifetime = OperandLifeTime::MODEL_INPUT, 1071 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1072 }, 1073 { 1074 .type = OperandType::TENSOR_FLOAT32, 1075 .dimensions = {0, 0, 0}, 1076 .numberOfConsumers = 0, 1077 .scale = 0.0f, 1078 .zeroPoint = 0, 1079 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1080 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1081 } 1082 }; 1083 1084 const std::vector<Operation> operations = { 1085 { 1086 .type = OperationType::SLICE, 1087 .inputs = {0, 1, 2}, 1088 .outputs = {3}, 1089 } 1090 }; 1091 1092 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1093 const std::vector<uint32_t> outputIndexes = {3}; 1094 std::vector<uint8_t> operandValues = {}; 1095 const std::vector<hidl_memory> pools = {}; 1096 1097 return { 1098 .operands = operands, 1099 .operations = operations, 1100 .inputIndexes = inputIndexes, 1101 .outputIndexes = outputIndexes, 1102 .operandValues = operandValues, 1103 .pools = pools, 1104 }; 1105 } 1106 1107 inline bool is_ignored_dynamic_output_shape_3(int i) { 1108 static std::set<int> ignore = {}; 1109 return ignore.find(i) != ignore.end(); 1110 } 1111 1112 // Create the model 1113 Model createTestModel_dynamic_output_shape_relaxed_3() { 1114 const std::vector<Operand> operands = { 1115 { 1116 .type = OperandType::TENSOR_FLOAT32, 1117 .dimensions = {2, 3, 2}, 1118 .numberOfConsumers = 1, 1119 .scale = 0.0f, 1120 .zeroPoint = 0, 1121 .lifetime = OperandLifeTime::MODEL_INPUT, 1122 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1123 }, 1124 { 1125 .type = OperandType::TENSOR_INT32, 1126 .dimensions = {3}, 1127 .numberOfConsumers = 1, 1128 .scale = 0.0f, 1129 .zeroPoint = 0, 1130 .lifetime = OperandLifeTime::MODEL_INPUT, 1131 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1132 }, 1133 { 1134 .type = OperandType::TENSOR_INT32, 1135 .dimensions = {3}, 1136 .numberOfConsumers = 1, 1137 .scale = 0.0f, 1138 .zeroPoint = 0, 1139 .lifetime = OperandLifeTime::MODEL_INPUT, 1140 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1141 }, 1142 { 1143 .type = OperandType::TENSOR_FLOAT32, 1144 .dimensions = {0, 0, 0}, 1145 .numberOfConsumers = 0, 1146 .scale = 0.0f, 1147 .zeroPoint = 0, 1148 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1149 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1150 } 1151 }; 1152 1153 const std::vector<Operation> operations = { 1154 { 1155 .type = OperationType::SLICE, 1156 .inputs = {0, 1, 2}, 1157 .outputs = {3}, 1158 } 1159 }; 1160 1161 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1162 const std::vector<uint32_t> outputIndexes = {3}; 1163 std::vector<uint8_t> operandValues = {}; 1164 const std::vector<hidl_memory> pools = {}; 1165 1166 return { 1167 .operands = operands, 1168 .operations = operations, 1169 .inputIndexes = inputIndexes, 1170 .outputIndexes = outputIndexes, 1171 .operandValues = operandValues, 1172 .pools = pools, 1173 .relaxComputationFloat32toFloat16 = true, 1174 }; 1175 } 1176 1177 inline bool is_ignored_dynamic_output_shape_relaxed_3(int i) { 1178 static std::set<int> ignore = {}; 1179 return ignore.find(i) != ignore.end(); 1180 } 1181 1182 // Create the model 1183 Model createTestModel_dynamic_output_shape_float16_3() { 1184 const std::vector<Operand> operands = { 1185 { 1186 .type = OperandType::TENSOR_FLOAT16, 1187 .dimensions = {2, 3, 2}, 1188 .numberOfConsumers = 1, 1189 .scale = 0.0f, 1190 .zeroPoint = 0, 1191 .lifetime = OperandLifeTime::MODEL_INPUT, 1192 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1193 }, 1194 { 1195 .type = OperandType::TENSOR_INT32, 1196 .dimensions = {3}, 1197 .numberOfConsumers = 1, 1198 .scale = 0.0f, 1199 .zeroPoint = 0, 1200 .lifetime = OperandLifeTime::MODEL_INPUT, 1201 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1202 }, 1203 { 1204 .type = OperandType::TENSOR_INT32, 1205 .dimensions = {3}, 1206 .numberOfConsumers = 1, 1207 .scale = 0.0f, 1208 .zeroPoint = 0, 1209 .lifetime = OperandLifeTime::MODEL_INPUT, 1210 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1211 }, 1212 { 1213 .type = OperandType::TENSOR_FLOAT16, 1214 .dimensions = {0, 0, 0}, 1215 .numberOfConsumers = 0, 1216 .scale = 0.0f, 1217 .zeroPoint = 0, 1218 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1219 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1220 } 1221 }; 1222 1223 const std::vector<Operation> operations = { 1224 { 1225 .type = OperationType::SLICE, 1226 .inputs = {0, 1, 2}, 1227 .outputs = {3}, 1228 } 1229 }; 1230 1231 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1232 const std::vector<uint32_t> outputIndexes = {3}; 1233 std::vector<uint8_t> operandValues = {}; 1234 const std::vector<hidl_memory> pools = {}; 1235 1236 return { 1237 .operands = operands, 1238 .operations = operations, 1239 .inputIndexes = inputIndexes, 1240 .outputIndexes = outputIndexes, 1241 .operandValues = operandValues, 1242 .pools = pools, 1243 }; 1244 } 1245 1246 inline bool is_ignored_dynamic_output_shape_float16_3(int i) { 1247 static std::set<int> ignore = {}; 1248 return ignore.find(i) != ignore.end(); 1249 } 1250 1251 // Create the model 1252 Model createTestModel_4() { 1253 const std::vector<Operand> operands = { 1254 { 1255 .type = OperandType::TENSOR_FLOAT32, 1256 .dimensions = {4, 1, 1, 1}, 1257 .numberOfConsumers = 1, 1258 .scale = 0.0f, 1259 .zeroPoint = 0, 1260 .lifetime = OperandLifeTime::MODEL_INPUT, 1261 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1262 }, 1263 { 1264 .type = OperandType::TENSOR_INT32, 1265 .dimensions = {4}, 1266 .numberOfConsumers = 1, 1267 .scale = 0.0f, 1268 .zeroPoint = 0, 1269 .lifetime = OperandLifeTime::MODEL_INPUT, 1270 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1271 }, 1272 { 1273 .type = OperandType::TENSOR_INT32, 1274 .dimensions = {4}, 1275 .numberOfConsumers = 1, 1276 .scale = 0.0f, 1277 .zeroPoint = 0, 1278 .lifetime = OperandLifeTime::MODEL_INPUT, 1279 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1280 }, 1281 { 1282 .type = OperandType::TENSOR_FLOAT32, 1283 .dimensions = {3, 1, 1, 1}, 1284 .numberOfConsumers = 0, 1285 .scale = 0.0f, 1286 .zeroPoint = 0, 1287 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1288 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1289 } 1290 }; 1291 1292 const std::vector<Operation> operations = { 1293 { 1294 .type = OperationType::SLICE, 1295 .inputs = {0, 1, 2}, 1296 .outputs = {3}, 1297 } 1298 }; 1299 1300 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1301 const std::vector<uint32_t> outputIndexes = {3}; 1302 std::vector<uint8_t> operandValues = {}; 1303 const std::vector<hidl_memory> pools = {}; 1304 1305 return { 1306 .operands = operands, 1307 .operations = operations, 1308 .inputIndexes = inputIndexes, 1309 .outputIndexes = outputIndexes, 1310 .operandValues = operandValues, 1311 .pools = pools, 1312 }; 1313 } 1314 1315 inline bool is_ignored_4(int i) { 1316 static std::set<int> ignore = {}; 1317 return ignore.find(i) != ignore.end(); 1318 } 1319 1320 // Create the model 1321 Model createTestModel_relaxed_4() { 1322 const std::vector<Operand> operands = { 1323 { 1324 .type = OperandType::TENSOR_FLOAT32, 1325 .dimensions = {4, 1, 1, 1}, 1326 .numberOfConsumers = 1, 1327 .scale = 0.0f, 1328 .zeroPoint = 0, 1329 .lifetime = OperandLifeTime::MODEL_INPUT, 1330 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1331 }, 1332 { 1333 .type = OperandType::TENSOR_INT32, 1334 .dimensions = {4}, 1335 .numberOfConsumers = 1, 1336 .scale = 0.0f, 1337 .zeroPoint = 0, 1338 .lifetime = OperandLifeTime::MODEL_INPUT, 1339 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1340 }, 1341 { 1342 .type = OperandType::TENSOR_INT32, 1343 .dimensions = {4}, 1344 .numberOfConsumers = 1, 1345 .scale = 0.0f, 1346 .zeroPoint = 0, 1347 .lifetime = OperandLifeTime::MODEL_INPUT, 1348 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1349 }, 1350 { 1351 .type = OperandType::TENSOR_FLOAT32, 1352 .dimensions = {3, 1, 1, 1}, 1353 .numberOfConsumers = 0, 1354 .scale = 0.0f, 1355 .zeroPoint = 0, 1356 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1357 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1358 } 1359 }; 1360 1361 const std::vector<Operation> operations = { 1362 { 1363 .type = OperationType::SLICE, 1364 .inputs = {0, 1, 2}, 1365 .outputs = {3}, 1366 } 1367 }; 1368 1369 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1370 const std::vector<uint32_t> outputIndexes = {3}; 1371 std::vector<uint8_t> operandValues = {}; 1372 const std::vector<hidl_memory> pools = {}; 1373 1374 return { 1375 .operands = operands, 1376 .operations = operations, 1377 .inputIndexes = inputIndexes, 1378 .outputIndexes = outputIndexes, 1379 .operandValues = operandValues, 1380 .pools = pools, 1381 .relaxComputationFloat32toFloat16 = true, 1382 }; 1383 } 1384 1385 inline bool is_ignored_relaxed_4(int i) { 1386 static std::set<int> ignore = {}; 1387 return ignore.find(i) != ignore.end(); 1388 } 1389 1390 // Create the model 1391 Model createTestModel_float16_4() { 1392 const std::vector<Operand> operands = { 1393 { 1394 .type = OperandType::TENSOR_FLOAT16, 1395 .dimensions = {4, 1, 1, 1}, 1396 .numberOfConsumers = 1, 1397 .scale = 0.0f, 1398 .zeroPoint = 0, 1399 .lifetime = OperandLifeTime::MODEL_INPUT, 1400 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1401 }, 1402 { 1403 .type = OperandType::TENSOR_INT32, 1404 .dimensions = {4}, 1405 .numberOfConsumers = 1, 1406 .scale = 0.0f, 1407 .zeroPoint = 0, 1408 .lifetime = OperandLifeTime::MODEL_INPUT, 1409 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1410 }, 1411 { 1412 .type = OperandType::TENSOR_INT32, 1413 .dimensions = {4}, 1414 .numberOfConsumers = 1, 1415 .scale = 0.0f, 1416 .zeroPoint = 0, 1417 .lifetime = OperandLifeTime::MODEL_INPUT, 1418 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1419 }, 1420 { 1421 .type = OperandType::TENSOR_FLOAT16, 1422 .dimensions = {3, 1, 1, 1}, 1423 .numberOfConsumers = 0, 1424 .scale = 0.0f, 1425 .zeroPoint = 0, 1426 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1427 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1428 } 1429 }; 1430 1431 const std::vector<Operation> operations = { 1432 { 1433 .type = OperationType::SLICE, 1434 .inputs = {0, 1, 2}, 1435 .outputs = {3}, 1436 } 1437 }; 1438 1439 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1440 const std::vector<uint32_t> outputIndexes = {3}; 1441 std::vector<uint8_t> operandValues = {}; 1442 const std::vector<hidl_memory> pools = {}; 1443 1444 return { 1445 .operands = operands, 1446 .operations = operations, 1447 .inputIndexes = inputIndexes, 1448 .outputIndexes = outputIndexes, 1449 .operandValues = operandValues, 1450 .pools = pools, 1451 }; 1452 } 1453 1454 inline bool is_ignored_float16_4(int i) { 1455 static std::set<int> ignore = {}; 1456 return ignore.find(i) != ignore.end(); 1457 } 1458 1459 // Create the model 1460 Model createTestModel_dynamic_output_shape_4() { 1461 const std::vector<Operand> operands = { 1462 { 1463 .type = OperandType::TENSOR_FLOAT32, 1464 .dimensions = {4, 1, 1, 1}, 1465 .numberOfConsumers = 1, 1466 .scale = 0.0f, 1467 .zeroPoint = 0, 1468 .lifetime = OperandLifeTime::MODEL_INPUT, 1469 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1470 }, 1471 { 1472 .type = OperandType::TENSOR_INT32, 1473 .dimensions = {4}, 1474 .numberOfConsumers = 1, 1475 .scale = 0.0f, 1476 .zeroPoint = 0, 1477 .lifetime = OperandLifeTime::MODEL_INPUT, 1478 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1479 }, 1480 { 1481 .type = OperandType::TENSOR_INT32, 1482 .dimensions = {4}, 1483 .numberOfConsumers = 1, 1484 .scale = 0.0f, 1485 .zeroPoint = 0, 1486 .lifetime = OperandLifeTime::MODEL_INPUT, 1487 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1488 }, 1489 { 1490 .type = OperandType::TENSOR_FLOAT32, 1491 .dimensions = {0, 0, 0, 0}, 1492 .numberOfConsumers = 0, 1493 .scale = 0.0f, 1494 .zeroPoint = 0, 1495 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1496 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1497 } 1498 }; 1499 1500 const std::vector<Operation> operations = { 1501 { 1502 .type = OperationType::SLICE, 1503 .inputs = {0, 1, 2}, 1504 .outputs = {3}, 1505 } 1506 }; 1507 1508 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1509 const std::vector<uint32_t> outputIndexes = {3}; 1510 std::vector<uint8_t> operandValues = {}; 1511 const std::vector<hidl_memory> pools = {}; 1512 1513 return { 1514 .operands = operands, 1515 .operations = operations, 1516 .inputIndexes = inputIndexes, 1517 .outputIndexes = outputIndexes, 1518 .operandValues = operandValues, 1519 .pools = pools, 1520 }; 1521 } 1522 1523 inline bool is_ignored_dynamic_output_shape_4(int i) { 1524 static std::set<int> ignore = {}; 1525 return ignore.find(i) != ignore.end(); 1526 } 1527 1528 // Create the model 1529 Model createTestModel_dynamic_output_shape_relaxed_4() { 1530 const std::vector<Operand> operands = { 1531 { 1532 .type = OperandType::TENSOR_FLOAT32, 1533 .dimensions = {4, 1, 1, 1}, 1534 .numberOfConsumers = 1, 1535 .scale = 0.0f, 1536 .zeroPoint = 0, 1537 .lifetime = OperandLifeTime::MODEL_INPUT, 1538 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1539 }, 1540 { 1541 .type = OperandType::TENSOR_INT32, 1542 .dimensions = {4}, 1543 .numberOfConsumers = 1, 1544 .scale = 0.0f, 1545 .zeroPoint = 0, 1546 .lifetime = OperandLifeTime::MODEL_INPUT, 1547 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1548 }, 1549 { 1550 .type = OperandType::TENSOR_INT32, 1551 .dimensions = {4}, 1552 .numberOfConsumers = 1, 1553 .scale = 0.0f, 1554 .zeroPoint = 0, 1555 .lifetime = OperandLifeTime::MODEL_INPUT, 1556 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1557 }, 1558 { 1559 .type = OperandType::TENSOR_FLOAT32, 1560 .dimensions = {0, 0, 0, 0}, 1561 .numberOfConsumers = 0, 1562 .scale = 0.0f, 1563 .zeroPoint = 0, 1564 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1565 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1566 } 1567 }; 1568 1569 const std::vector<Operation> operations = { 1570 { 1571 .type = OperationType::SLICE, 1572 .inputs = {0, 1, 2}, 1573 .outputs = {3}, 1574 } 1575 }; 1576 1577 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1578 const std::vector<uint32_t> outputIndexes = {3}; 1579 std::vector<uint8_t> operandValues = {}; 1580 const std::vector<hidl_memory> pools = {}; 1581 1582 return { 1583 .operands = operands, 1584 .operations = operations, 1585 .inputIndexes = inputIndexes, 1586 .outputIndexes = outputIndexes, 1587 .operandValues = operandValues, 1588 .pools = pools, 1589 .relaxComputationFloat32toFloat16 = true, 1590 }; 1591 } 1592 1593 inline bool is_ignored_dynamic_output_shape_relaxed_4(int i) { 1594 static std::set<int> ignore = {}; 1595 return ignore.find(i) != ignore.end(); 1596 } 1597 1598 // Create the model 1599 Model createTestModel_dynamic_output_shape_float16_4() { 1600 const std::vector<Operand> operands = { 1601 { 1602 .type = OperandType::TENSOR_FLOAT16, 1603 .dimensions = {4, 1, 1, 1}, 1604 .numberOfConsumers = 1, 1605 .scale = 0.0f, 1606 .zeroPoint = 0, 1607 .lifetime = OperandLifeTime::MODEL_INPUT, 1608 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1609 }, 1610 { 1611 .type = OperandType::TENSOR_INT32, 1612 .dimensions = {4}, 1613 .numberOfConsumers = 1, 1614 .scale = 0.0f, 1615 .zeroPoint = 0, 1616 .lifetime = OperandLifeTime::MODEL_INPUT, 1617 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1618 }, 1619 { 1620 .type = OperandType::TENSOR_INT32, 1621 .dimensions = {4}, 1622 .numberOfConsumers = 1, 1623 .scale = 0.0f, 1624 .zeroPoint = 0, 1625 .lifetime = OperandLifeTime::MODEL_INPUT, 1626 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1627 }, 1628 { 1629 .type = OperandType::TENSOR_FLOAT16, 1630 .dimensions = {0, 0, 0, 0}, 1631 .numberOfConsumers = 0, 1632 .scale = 0.0f, 1633 .zeroPoint = 0, 1634 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1635 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1636 } 1637 }; 1638 1639 const std::vector<Operation> operations = { 1640 { 1641 .type = OperationType::SLICE, 1642 .inputs = {0, 1, 2}, 1643 .outputs = {3}, 1644 } 1645 }; 1646 1647 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1648 const std::vector<uint32_t> outputIndexes = {3}; 1649 std::vector<uint8_t> operandValues = {}; 1650 const std::vector<hidl_memory> pools = {}; 1651 1652 return { 1653 .operands = operands, 1654 .operations = operations, 1655 .inputIndexes = inputIndexes, 1656 .outputIndexes = outputIndexes, 1657 .operandValues = operandValues, 1658 .pools = pools, 1659 }; 1660 } 1661 1662 inline bool is_ignored_dynamic_output_shape_float16_4(int i) { 1663 static std::set<int> ignore = {}; 1664 return ignore.find(i) != ignore.end(); 1665 } 1666 1667 // Create the model 1668 Model createTestModel_5() { 1669 const std::vector<Operand> operands = { 1670 { 1671 .type = OperandType::TENSOR_INT32, 1672 .dimensions = {3, 2, 3, 1}, 1673 .numberOfConsumers = 1, 1674 .scale = 0.0f, 1675 .zeroPoint = 0, 1676 .lifetime = OperandLifeTime::MODEL_INPUT, 1677 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1678 }, 1679 { 1680 .type = OperandType::TENSOR_INT32, 1681 .dimensions = {4}, 1682 .numberOfConsumers = 1, 1683 .scale = 0.0f, 1684 .zeroPoint = 0, 1685 .lifetime = OperandLifeTime::MODEL_INPUT, 1686 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1687 }, 1688 { 1689 .type = OperandType::TENSOR_INT32, 1690 .dimensions = {4}, 1691 .numberOfConsumers = 1, 1692 .scale = 0.0f, 1693 .zeroPoint = 0, 1694 .lifetime = OperandLifeTime::MODEL_INPUT, 1695 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1696 }, 1697 { 1698 .type = OperandType::TENSOR_INT32, 1699 .dimensions = {1, 1, 3, 1}, 1700 .numberOfConsumers = 0, 1701 .scale = 0.0f, 1702 .zeroPoint = 0, 1703 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1704 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1705 } 1706 }; 1707 1708 const std::vector<Operation> operations = { 1709 { 1710 .type = OperationType::SLICE, 1711 .inputs = {0, 1, 2}, 1712 .outputs = {3}, 1713 } 1714 }; 1715 1716 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1717 const std::vector<uint32_t> outputIndexes = {3}; 1718 std::vector<uint8_t> operandValues = {}; 1719 const std::vector<hidl_memory> pools = {}; 1720 1721 return { 1722 .operands = operands, 1723 .operations = operations, 1724 .inputIndexes = inputIndexes, 1725 .outputIndexes = outputIndexes, 1726 .operandValues = operandValues, 1727 .pools = pools, 1728 }; 1729 } 1730 1731 inline bool is_ignored_5(int i) { 1732 static std::set<int> ignore = {}; 1733 return ignore.find(i) != ignore.end(); 1734 } 1735 1736 // Create the model 1737 Model createTestModel_relaxed_5() { 1738 const std::vector<Operand> operands = { 1739 { 1740 .type = OperandType::TENSOR_INT32, 1741 .dimensions = {3, 2, 3, 1}, 1742 .numberOfConsumers = 1, 1743 .scale = 0.0f, 1744 .zeroPoint = 0, 1745 .lifetime = OperandLifeTime::MODEL_INPUT, 1746 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1747 }, 1748 { 1749 .type = OperandType::TENSOR_INT32, 1750 .dimensions = {4}, 1751 .numberOfConsumers = 1, 1752 .scale = 0.0f, 1753 .zeroPoint = 0, 1754 .lifetime = OperandLifeTime::MODEL_INPUT, 1755 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1756 }, 1757 { 1758 .type = OperandType::TENSOR_INT32, 1759 .dimensions = {4}, 1760 .numberOfConsumers = 1, 1761 .scale = 0.0f, 1762 .zeroPoint = 0, 1763 .lifetime = OperandLifeTime::MODEL_INPUT, 1764 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1765 }, 1766 { 1767 .type = OperandType::TENSOR_INT32, 1768 .dimensions = {1, 1, 3, 1}, 1769 .numberOfConsumers = 0, 1770 .scale = 0.0f, 1771 .zeroPoint = 0, 1772 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1773 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1774 } 1775 }; 1776 1777 const std::vector<Operation> operations = { 1778 { 1779 .type = OperationType::SLICE, 1780 .inputs = {0, 1, 2}, 1781 .outputs = {3}, 1782 } 1783 }; 1784 1785 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1786 const std::vector<uint32_t> outputIndexes = {3}; 1787 std::vector<uint8_t> operandValues = {}; 1788 const std::vector<hidl_memory> pools = {}; 1789 1790 return { 1791 .operands = operands, 1792 .operations = operations, 1793 .inputIndexes = inputIndexes, 1794 .outputIndexes = outputIndexes, 1795 .operandValues = operandValues, 1796 .pools = pools, 1797 .relaxComputationFloat32toFloat16 = true, 1798 }; 1799 } 1800 1801 inline bool is_ignored_relaxed_5(int i) { 1802 static std::set<int> ignore = {}; 1803 return ignore.find(i) != ignore.end(); 1804 } 1805 1806 // Create the model 1807 Model createTestModel_float16_5() { 1808 const std::vector<Operand> operands = { 1809 { 1810 .type = OperandType::TENSOR_INT32, 1811 .dimensions = {3, 2, 3, 1}, 1812 .numberOfConsumers = 1, 1813 .scale = 0.0f, 1814 .zeroPoint = 0, 1815 .lifetime = OperandLifeTime::MODEL_INPUT, 1816 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1817 }, 1818 { 1819 .type = OperandType::TENSOR_INT32, 1820 .dimensions = {4}, 1821 .numberOfConsumers = 1, 1822 .scale = 0.0f, 1823 .zeroPoint = 0, 1824 .lifetime = OperandLifeTime::MODEL_INPUT, 1825 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1826 }, 1827 { 1828 .type = OperandType::TENSOR_INT32, 1829 .dimensions = {4}, 1830 .numberOfConsumers = 1, 1831 .scale = 0.0f, 1832 .zeroPoint = 0, 1833 .lifetime = OperandLifeTime::MODEL_INPUT, 1834 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1835 }, 1836 { 1837 .type = OperandType::TENSOR_INT32, 1838 .dimensions = {1, 1, 3, 1}, 1839 .numberOfConsumers = 0, 1840 .scale = 0.0f, 1841 .zeroPoint = 0, 1842 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1843 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1844 } 1845 }; 1846 1847 const std::vector<Operation> operations = { 1848 { 1849 .type = OperationType::SLICE, 1850 .inputs = {0, 1, 2}, 1851 .outputs = {3}, 1852 } 1853 }; 1854 1855 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1856 const std::vector<uint32_t> outputIndexes = {3}; 1857 std::vector<uint8_t> operandValues = {}; 1858 const std::vector<hidl_memory> pools = {}; 1859 1860 return { 1861 .operands = operands, 1862 .operations = operations, 1863 .inputIndexes = inputIndexes, 1864 .outputIndexes = outputIndexes, 1865 .operandValues = operandValues, 1866 .pools = pools, 1867 }; 1868 } 1869 1870 inline bool is_ignored_float16_5(int i) { 1871 static std::set<int> ignore = {}; 1872 return ignore.find(i) != ignore.end(); 1873 } 1874 1875 // Create the model 1876 Model createTestModel_dynamic_output_shape_5() { 1877 const std::vector<Operand> operands = { 1878 { 1879 .type = OperandType::TENSOR_INT32, 1880 .dimensions = {3, 2, 3, 1}, 1881 .numberOfConsumers = 1, 1882 .scale = 0.0f, 1883 .zeroPoint = 0, 1884 .lifetime = OperandLifeTime::MODEL_INPUT, 1885 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1886 }, 1887 { 1888 .type = OperandType::TENSOR_INT32, 1889 .dimensions = {4}, 1890 .numberOfConsumers = 1, 1891 .scale = 0.0f, 1892 .zeroPoint = 0, 1893 .lifetime = OperandLifeTime::MODEL_INPUT, 1894 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1895 }, 1896 { 1897 .type = OperandType::TENSOR_INT32, 1898 .dimensions = {4}, 1899 .numberOfConsumers = 1, 1900 .scale = 0.0f, 1901 .zeroPoint = 0, 1902 .lifetime = OperandLifeTime::MODEL_INPUT, 1903 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1904 }, 1905 { 1906 .type = OperandType::TENSOR_INT32, 1907 .dimensions = {0, 0, 0, 0}, 1908 .numberOfConsumers = 0, 1909 .scale = 0.0f, 1910 .zeroPoint = 0, 1911 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1912 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1913 } 1914 }; 1915 1916 const std::vector<Operation> operations = { 1917 { 1918 .type = OperationType::SLICE, 1919 .inputs = {0, 1, 2}, 1920 .outputs = {3}, 1921 } 1922 }; 1923 1924 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1925 const std::vector<uint32_t> outputIndexes = {3}; 1926 std::vector<uint8_t> operandValues = {}; 1927 const std::vector<hidl_memory> pools = {}; 1928 1929 return { 1930 .operands = operands, 1931 .operations = operations, 1932 .inputIndexes = inputIndexes, 1933 .outputIndexes = outputIndexes, 1934 .operandValues = operandValues, 1935 .pools = pools, 1936 }; 1937 } 1938 1939 inline bool is_ignored_dynamic_output_shape_5(int i) { 1940 static std::set<int> ignore = {}; 1941 return ignore.find(i) != ignore.end(); 1942 } 1943 1944 // Create the model 1945 Model createTestModel_dynamic_output_shape_relaxed_5() { 1946 const std::vector<Operand> operands = { 1947 { 1948 .type = OperandType::TENSOR_INT32, 1949 .dimensions = {3, 2, 3, 1}, 1950 .numberOfConsumers = 1, 1951 .scale = 0.0f, 1952 .zeroPoint = 0, 1953 .lifetime = OperandLifeTime::MODEL_INPUT, 1954 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1955 }, 1956 { 1957 .type = OperandType::TENSOR_INT32, 1958 .dimensions = {4}, 1959 .numberOfConsumers = 1, 1960 .scale = 0.0f, 1961 .zeroPoint = 0, 1962 .lifetime = OperandLifeTime::MODEL_INPUT, 1963 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1964 }, 1965 { 1966 .type = OperandType::TENSOR_INT32, 1967 .dimensions = {4}, 1968 .numberOfConsumers = 1, 1969 .scale = 0.0f, 1970 .zeroPoint = 0, 1971 .lifetime = OperandLifeTime::MODEL_INPUT, 1972 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1973 }, 1974 { 1975 .type = OperandType::TENSOR_INT32, 1976 .dimensions = {0, 0, 0, 0}, 1977 .numberOfConsumers = 0, 1978 .scale = 0.0f, 1979 .zeroPoint = 0, 1980 .lifetime = OperandLifeTime::MODEL_OUTPUT, 1981 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 1982 } 1983 }; 1984 1985 const std::vector<Operation> operations = { 1986 { 1987 .type = OperationType::SLICE, 1988 .inputs = {0, 1, 2}, 1989 .outputs = {3}, 1990 } 1991 }; 1992 1993 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 1994 const std::vector<uint32_t> outputIndexes = {3}; 1995 std::vector<uint8_t> operandValues = {}; 1996 const std::vector<hidl_memory> pools = {}; 1997 1998 return { 1999 .operands = operands, 2000 .operations = operations, 2001 .inputIndexes = inputIndexes, 2002 .outputIndexes = outputIndexes, 2003 .operandValues = operandValues, 2004 .pools = pools, 2005 .relaxComputationFloat32toFloat16 = true, 2006 }; 2007 } 2008 2009 inline bool is_ignored_dynamic_output_shape_relaxed_5(int i) { 2010 static std::set<int> ignore = {}; 2011 return ignore.find(i) != ignore.end(); 2012 } 2013 2014 // Create the model 2015 Model createTestModel_dynamic_output_shape_float16_5() { 2016 const std::vector<Operand> operands = { 2017 { 2018 .type = OperandType::TENSOR_INT32, 2019 .dimensions = {3, 2, 3, 1}, 2020 .numberOfConsumers = 1, 2021 .scale = 0.0f, 2022 .zeroPoint = 0, 2023 .lifetime = OperandLifeTime::MODEL_INPUT, 2024 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2025 }, 2026 { 2027 .type = OperandType::TENSOR_INT32, 2028 .dimensions = {4}, 2029 .numberOfConsumers = 1, 2030 .scale = 0.0f, 2031 .zeroPoint = 0, 2032 .lifetime = OperandLifeTime::MODEL_INPUT, 2033 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2034 }, 2035 { 2036 .type = OperandType::TENSOR_INT32, 2037 .dimensions = {4}, 2038 .numberOfConsumers = 1, 2039 .scale = 0.0f, 2040 .zeroPoint = 0, 2041 .lifetime = OperandLifeTime::MODEL_INPUT, 2042 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2043 }, 2044 { 2045 .type = OperandType::TENSOR_INT32, 2046 .dimensions = {0, 0, 0, 0}, 2047 .numberOfConsumers = 0, 2048 .scale = 0.0f, 2049 .zeroPoint = 0, 2050 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2051 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2052 } 2053 }; 2054 2055 const std::vector<Operation> operations = { 2056 { 2057 .type = OperationType::SLICE, 2058 .inputs = {0, 1, 2}, 2059 .outputs = {3}, 2060 } 2061 }; 2062 2063 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2064 const std::vector<uint32_t> outputIndexes = {3}; 2065 std::vector<uint8_t> operandValues = {}; 2066 const std::vector<hidl_memory> pools = {}; 2067 2068 return { 2069 .operands = operands, 2070 .operations = operations, 2071 .inputIndexes = inputIndexes, 2072 .outputIndexes = outputIndexes, 2073 .operandValues = operandValues, 2074 .pools = pools, 2075 }; 2076 } 2077 2078 inline bool is_ignored_dynamic_output_shape_float16_5(int i) { 2079 static std::set<int> ignore = {}; 2080 return ignore.find(i) != ignore.end(); 2081 } 2082 2083 // Create the model 2084 Model createTestModel_6() { 2085 const std::vector<Operand> operands = { 2086 { 2087 .type = OperandType::TENSOR_INT32, 2088 .dimensions = {3, 2, 3, 1}, 2089 .numberOfConsumers = 1, 2090 .scale = 0.0f, 2091 .zeroPoint = 0, 2092 .lifetime = OperandLifeTime::MODEL_INPUT, 2093 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2094 }, 2095 { 2096 .type = OperandType::TENSOR_INT32, 2097 .dimensions = {4}, 2098 .numberOfConsumers = 1, 2099 .scale = 0.0f, 2100 .zeroPoint = 0, 2101 .lifetime = OperandLifeTime::MODEL_INPUT, 2102 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2103 }, 2104 { 2105 .type = OperandType::TENSOR_INT32, 2106 .dimensions = {4}, 2107 .numberOfConsumers = 1, 2108 .scale = 0.0f, 2109 .zeroPoint = 0, 2110 .lifetime = OperandLifeTime::MODEL_INPUT, 2111 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2112 }, 2113 { 2114 .type = OperandType::TENSOR_INT32, 2115 .dimensions = {2, 1, 3, 1}, 2116 .numberOfConsumers = 0, 2117 .scale = 0.0f, 2118 .zeroPoint = 0, 2119 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2120 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2121 } 2122 }; 2123 2124 const std::vector<Operation> operations = { 2125 { 2126 .type = OperationType::SLICE, 2127 .inputs = {0, 1, 2}, 2128 .outputs = {3}, 2129 } 2130 }; 2131 2132 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2133 const std::vector<uint32_t> outputIndexes = {3}; 2134 std::vector<uint8_t> operandValues = {}; 2135 const std::vector<hidl_memory> pools = {}; 2136 2137 return { 2138 .operands = operands, 2139 .operations = operations, 2140 .inputIndexes = inputIndexes, 2141 .outputIndexes = outputIndexes, 2142 .operandValues = operandValues, 2143 .pools = pools, 2144 }; 2145 } 2146 2147 inline bool is_ignored_6(int i) { 2148 static std::set<int> ignore = {}; 2149 return ignore.find(i) != ignore.end(); 2150 } 2151 2152 // Create the model 2153 Model createTestModel_relaxed_6() { 2154 const std::vector<Operand> operands = { 2155 { 2156 .type = OperandType::TENSOR_INT32, 2157 .dimensions = {3, 2, 3, 1}, 2158 .numberOfConsumers = 1, 2159 .scale = 0.0f, 2160 .zeroPoint = 0, 2161 .lifetime = OperandLifeTime::MODEL_INPUT, 2162 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2163 }, 2164 { 2165 .type = OperandType::TENSOR_INT32, 2166 .dimensions = {4}, 2167 .numberOfConsumers = 1, 2168 .scale = 0.0f, 2169 .zeroPoint = 0, 2170 .lifetime = OperandLifeTime::MODEL_INPUT, 2171 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2172 }, 2173 { 2174 .type = OperandType::TENSOR_INT32, 2175 .dimensions = {4}, 2176 .numberOfConsumers = 1, 2177 .scale = 0.0f, 2178 .zeroPoint = 0, 2179 .lifetime = OperandLifeTime::MODEL_INPUT, 2180 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2181 }, 2182 { 2183 .type = OperandType::TENSOR_INT32, 2184 .dimensions = {2, 1, 3, 1}, 2185 .numberOfConsumers = 0, 2186 .scale = 0.0f, 2187 .zeroPoint = 0, 2188 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2189 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2190 } 2191 }; 2192 2193 const std::vector<Operation> operations = { 2194 { 2195 .type = OperationType::SLICE, 2196 .inputs = {0, 1, 2}, 2197 .outputs = {3}, 2198 } 2199 }; 2200 2201 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2202 const std::vector<uint32_t> outputIndexes = {3}; 2203 std::vector<uint8_t> operandValues = {}; 2204 const std::vector<hidl_memory> pools = {}; 2205 2206 return { 2207 .operands = operands, 2208 .operations = operations, 2209 .inputIndexes = inputIndexes, 2210 .outputIndexes = outputIndexes, 2211 .operandValues = operandValues, 2212 .pools = pools, 2213 .relaxComputationFloat32toFloat16 = true, 2214 }; 2215 } 2216 2217 inline bool is_ignored_relaxed_6(int i) { 2218 static std::set<int> ignore = {}; 2219 return ignore.find(i) != ignore.end(); 2220 } 2221 2222 // Create the model 2223 Model createTestModel_float16_6() { 2224 const std::vector<Operand> operands = { 2225 { 2226 .type = OperandType::TENSOR_INT32, 2227 .dimensions = {3, 2, 3, 1}, 2228 .numberOfConsumers = 1, 2229 .scale = 0.0f, 2230 .zeroPoint = 0, 2231 .lifetime = OperandLifeTime::MODEL_INPUT, 2232 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2233 }, 2234 { 2235 .type = OperandType::TENSOR_INT32, 2236 .dimensions = {4}, 2237 .numberOfConsumers = 1, 2238 .scale = 0.0f, 2239 .zeroPoint = 0, 2240 .lifetime = OperandLifeTime::MODEL_INPUT, 2241 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2242 }, 2243 { 2244 .type = OperandType::TENSOR_INT32, 2245 .dimensions = {4}, 2246 .numberOfConsumers = 1, 2247 .scale = 0.0f, 2248 .zeroPoint = 0, 2249 .lifetime = OperandLifeTime::MODEL_INPUT, 2250 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2251 }, 2252 { 2253 .type = OperandType::TENSOR_INT32, 2254 .dimensions = {2, 1, 3, 1}, 2255 .numberOfConsumers = 0, 2256 .scale = 0.0f, 2257 .zeroPoint = 0, 2258 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2259 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2260 } 2261 }; 2262 2263 const std::vector<Operation> operations = { 2264 { 2265 .type = OperationType::SLICE, 2266 .inputs = {0, 1, 2}, 2267 .outputs = {3}, 2268 } 2269 }; 2270 2271 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2272 const std::vector<uint32_t> outputIndexes = {3}; 2273 std::vector<uint8_t> operandValues = {}; 2274 const std::vector<hidl_memory> pools = {}; 2275 2276 return { 2277 .operands = operands, 2278 .operations = operations, 2279 .inputIndexes = inputIndexes, 2280 .outputIndexes = outputIndexes, 2281 .operandValues = operandValues, 2282 .pools = pools, 2283 }; 2284 } 2285 2286 inline bool is_ignored_float16_6(int i) { 2287 static std::set<int> ignore = {}; 2288 return ignore.find(i) != ignore.end(); 2289 } 2290 2291 // Create the model 2292 Model createTestModel_dynamic_output_shape_6() { 2293 const std::vector<Operand> operands = { 2294 { 2295 .type = OperandType::TENSOR_INT32, 2296 .dimensions = {3, 2, 3, 1}, 2297 .numberOfConsumers = 1, 2298 .scale = 0.0f, 2299 .zeroPoint = 0, 2300 .lifetime = OperandLifeTime::MODEL_INPUT, 2301 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2302 }, 2303 { 2304 .type = OperandType::TENSOR_INT32, 2305 .dimensions = {4}, 2306 .numberOfConsumers = 1, 2307 .scale = 0.0f, 2308 .zeroPoint = 0, 2309 .lifetime = OperandLifeTime::MODEL_INPUT, 2310 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2311 }, 2312 { 2313 .type = OperandType::TENSOR_INT32, 2314 .dimensions = {4}, 2315 .numberOfConsumers = 1, 2316 .scale = 0.0f, 2317 .zeroPoint = 0, 2318 .lifetime = OperandLifeTime::MODEL_INPUT, 2319 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2320 }, 2321 { 2322 .type = OperandType::TENSOR_INT32, 2323 .dimensions = {0, 0, 0, 0}, 2324 .numberOfConsumers = 0, 2325 .scale = 0.0f, 2326 .zeroPoint = 0, 2327 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2328 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2329 } 2330 }; 2331 2332 const std::vector<Operation> operations = { 2333 { 2334 .type = OperationType::SLICE, 2335 .inputs = {0, 1, 2}, 2336 .outputs = {3}, 2337 } 2338 }; 2339 2340 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2341 const std::vector<uint32_t> outputIndexes = {3}; 2342 std::vector<uint8_t> operandValues = {}; 2343 const std::vector<hidl_memory> pools = {}; 2344 2345 return { 2346 .operands = operands, 2347 .operations = operations, 2348 .inputIndexes = inputIndexes, 2349 .outputIndexes = outputIndexes, 2350 .operandValues = operandValues, 2351 .pools = pools, 2352 }; 2353 } 2354 2355 inline bool is_ignored_dynamic_output_shape_6(int i) { 2356 static std::set<int> ignore = {}; 2357 return ignore.find(i) != ignore.end(); 2358 } 2359 2360 // Create the model 2361 Model createTestModel_dynamic_output_shape_relaxed_6() { 2362 const std::vector<Operand> operands = { 2363 { 2364 .type = OperandType::TENSOR_INT32, 2365 .dimensions = {3, 2, 3, 1}, 2366 .numberOfConsumers = 1, 2367 .scale = 0.0f, 2368 .zeroPoint = 0, 2369 .lifetime = OperandLifeTime::MODEL_INPUT, 2370 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2371 }, 2372 { 2373 .type = OperandType::TENSOR_INT32, 2374 .dimensions = {4}, 2375 .numberOfConsumers = 1, 2376 .scale = 0.0f, 2377 .zeroPoint = 0, 2378 .lifetime = OperandLifeTime::MODEL_INPUT, 2379 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2380 }, 2381 { 2382 .type = OperandType::TENSOR_INT32, 2383 .dimensions = {4}, 2384 .numberOfConsumers = 1, 2385 .scale = 0.0f, 2386 .zeroPoint = 0, 2387 .lifetime = OperandLifeTime::MODEL_INPUT, 2388 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2389 }, 2390 { 2391 .type = OperandType::TENSOR_INT32, 2392 .dimensions = {0, 0, 0, 0}, 2393 .numberOfConsumers = 0, 2394 .scale = 0.0f, 2395 .zeroPoint = 0, 2396 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2397 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2398 } 2399 }; 2400 2401 const std::vector<Operation> operations = { 2402 { 2403 .type = OperationType::SLICE, 2404 .inputs = {0, 1, 2}, 2405 .outputs = {3}, 2406 } 2407 }; 2408 2409 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2410 const std::vector<uint32_t> outputIndexes = {3}; 2411 std::vector<uint8_t> operandValues = {}; 2412 const std::vector<hidl_memory> pools = {}; 2413 2414 return { 2415 .operands = operands, 2416 .operations = operations, 2417 .inputIndexes = inputIndexes, 2418 .outputIndexes = outputIndexes, 2419 .operandValues = operandValues, 2420 .pools = pools, 2421 .relaxComputationFloat32toFloat16 = true, 2422 }; 2423 } 2424 2425 inline bool is_ignored_dynamic_output_shape_relaxed_6(int i) { 2426 static std::set<int> ignore = {}; 2427 return ignore.find(i) != ignore.end(); 2428 } 2429 2430 // Create the model 2431 Model createTestModel_dynamic_output_shape_float16_6() { 2432 const std::vector<Operand> operands = { 2433 { 2434 .type = OperandType::TENSOR_INT32, 2435 .dimensions = {3, 2, 3, 1}, 2436 .numberOfConsumers = 1, 2437 .scale = 0.0f, 2438 .zeroPoint = 0, 2439 .lifetime = OperandLifeTime::MODEL_INPUT, 2440 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2441 }, 2442 { 2443 .type = OperandType::TENSOR_INT32, 2444 .dimensions = {4}, 2445 .numberOfConsumers = 1, 2446 .scale = 0.0f, 2447 .zeroPoint = 0, 2448 .lifetime = OperandLifeTime::MODEL_INPUT, 2449 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2450 }, 2451 { 2452 .type = OperandType::TENSOR_INT32, 2453 .dimensions = {4}, 2454 .numberOfConsumers = 1, 2455 .scale = 0.0f, 2456 .zeroPoint = 0, 2457 .lifetime = OperandLifeTime::MODEL_INPUT, 2458 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2459 }, 2460 { 2461 .type = OperandType::TENSOR_INT32, 2462 .dimensions = {0, 0, 0, 0}, 2463 .numberOfConsumers = 0, 2464 .scale = 0.0f, 2465 .zeroPoint = 0, 2466 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2467 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2468 } 2469 }; 2470 2471 const std::vector<Operation> operations = { 2472 { 2473 .type = OperationType::SLICE, 2474 .inputs = {0, 1, 2}, 2475 .outputs = {3}, 2476 } 2477 }; 2478 2479 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2480 const std::vector<uint32_t> outputIndexes = {3}; 2481 std::vector<uint8_t> operandValues = {}; 2482 const std::vector<hidl_memory> pools = {}; 2483 2484 return { 2485 .operands = operands, 2486 .operations = operations, 2487 .inputIndexes = inputIndexes, 2488 .outputIndexes = outputIndexes, 2489 .operandValues = operandValues, 2490 .pools = pools, 2491 }; 2492 } 2493 2494 inline bool is_ignored_dynamic_output_shape_float16_6(int i) { 2495 static std::set<int> ignore = {}; 2496 return ignore.find(i) != ignore.end(); 2497 } 2498 2499 // Create the model 2500 Model createTestModel_7() { 2501 const std::vector<Operand> operands = { 2502 { 2503 .type = OperandType::TENSOR_QUANT8_ASYMM, 2504 .dimensions = {3, 2, 3, 1}, 2505 .numberOfConsumers = 1, 2506 .scale = 2.0f, 2507 .zeroPoint = 128, 2508 .lifetime = OperandLifeTime::MODEL_INPUT, 2509 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2510 }, 2511 { 2512 .type = OperandType::TENSOR_INT32, 2513 .dimensions = {4}, 2514 .numberOfConsumers = 1, 2515 .scale = 0.0f, 2516 .zeroPoint = 0, 2517 .lifetime = OperandLifeTime::MODEL_INPUT, 2518 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2519 }, 2520 { 2521 .type = OperandType::TENSOR_INT32, 2522 .dimensions = {4}, 2523 .numberOfConsumers = 1, 2524 .scale = 0.0f, 2525 .zeroPoint = 0, 2526 .lifetime = OperandLifeTime::MODEL_INPUT, 2527 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2528 }, 2529 { 2530 .type = OperandType::TENSOR_QUANT8_ASYMM, 2531 .dimensions = {2, 1, 3, 1}, 2532 .numberOfConsumers = 0, 2533 .scale = 2.0f, 2534 .zeroPoint = 128, 2535 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2536 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2537 } 2538 }; 2539 2540 const std::vector<Operation> operations = { 2541 { 2542 .type = OperationType::SLICE, 2543 .inputs = {0, 1, 2}, 2544 .outputs = {3}, 2545 } 2546 }; 2547 2548 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2549 const std::vector<uint32_t> outputIndexes = {3}; 2550 std::vector<uint8_t> operandValues = {}; 2551 const std::vector<hidl_memory> pools = {}; 2552 2553 return { 2554 .operands = operands, 2555 .operations = operations, 2556 .inputIndexes = inputIndexes, 2557 .outputIndexes = outputIndexes, 2558 .operandValues = operandValues, 2559 .pools = pools, 2560 }; 2561 } 2562 2563 inline bool is_ignored_7(int i) { 2564 static std::set<int> ignore = {}; 2565 return ignore.find(i) != ignore.end(); 2566 } 2567 2568 // Create the model 2569 Model createTestModel_relaxed_7() { 2570 const std::vector<Operand> operands = { 2571 { 2572 .type = OperandType::TENSOR_QUANT8_ASYMM, 2573 .dimensions = {3, 2, 3, 1}, 2574 .numberOfConsumers = 1, 2575 .scale = 2.0f, 2576 .zeroPoint = 128, 2577 .lifetime = OperandLifeTime::MODEL_INPUT, 2578 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2579 }, 2580 { 2581 .type = OperandType::TENSOR_INT32, 2582 .dimensions = {4}, 2583 .numberOfConsumers = 1, 2584 .scale = 0.0f, 2585 .zeroPoint = 0, 2586 .lifetime = OperandLifeTime::MODEL_INPUT, 2587 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2588 }, 2589 { 2590 .type = OperandType::TENSOR_INT32, 2591 .dimensions = {4}, 2592 .numberOfConsumers = 1, 2593 .scale = 0.0f, 2594 .zeroPoint = 0, 2595 .lifetime = OperandLifeTime::MODEL_INPUT, 2596 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2597 }, 2598 { 2599 .type = OperandType::TENSOR_QUANT8_ASYMM, 2600 .dimensions = {2, 1, 3, 1}, 2601 .numberOfConsumers = 0, 2602 .scale = 2.0f, 2603 .zeroPoint = 128, 2604 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2605 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2606 } 2607 }; 2608 2609 const std::vector<Operation> operations = { 2610 { 2611 .type = OperationType::SLICE, 2612 .inputs = {0, 1, 2}, 2613 .outputs = {3}, 2614 } 2615 }; 2616 2617 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2618 const std::vector<uint32_t> outputIndexes = {3}; 2619 std::vector<uint8_t> operandValues = {}; 2620 const std::vector<hidl_memory> pools = {}; 2621 2622 return { 2623 .operands = operands, 2624 .operations = operations, 2625 .inputIndexes = inputIndexes, 2626 .outputIndexes = outputIndexes, 2627 .operandValues = operandValues, 2628 .pools = pools, 2629 .relaxComputationFloat32toFloat16 = true, 2630 }; 2631 } 2632 2633 inline bool is_ignored_relaxed_7(int i) { 2634 static std::set<int> ignore = {}; 2635 return ignore.find(i) != ignore.end(); 2636 } 2637 2638 // Create the model 2639 Model createTestModel_float16_7() { 2640 const std::vector<Operand> operands = { 2641 { 2642 .type = OperandType::TENSOR_QUANT8_ASYMM, 2643 .dimensions = {3, 2, 3, 1}, 2644 .numberOfConsumers = 1, 2645 .scale = 2.0f, 2646 .zeroPoint = 128, 2647 .lifetime = OperandLifeTime::MODEL_INPUT, 2648 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2649 }, 2650 { 2651 .type = OperandType::TENSOR_INT32, 2652 .dimensions = {4}, 2653 .numberOfConsumers = 1, 2654 .scale = 0.0f, 2655 .zeroPoint = 0, 2656 .lifetime = OperandLifeTime::MODEL_INPUT, 2657 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2658 }, 2659 { 2660 .type = OperandType::TENSOR_INT32, 2661 .dimensions = {4}, 2662 .numberOfConsumers = 1, 2663 .scale = 0.0f, 2664 .zeroPoint = 0, 2665 .lifetime = OperandLifeTime::MODEL_INPUT, 2666 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2667 }, 2668 { 2669 .type = OperandType::TENSOR_QUANT8_ASYMM, 2670 .dimensions = {2, 1, 3, 1}, 2671 .numberOfConsumers = 0, 2672 .scale = 2.0f, 2673 .zeroPoint = 128, 2674 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2675 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2676 } 2677 }; 2678 2679 const std::vector<Operation> operations = { 2680 { 2681 .type = OperationType::SLICE, 2682 .inputs = {0, 1, 2}, 2683 .outputs = {3}, 2684 } 2685 }; 2686 2687 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2688 const std::vector<uint32_t> outputIndexes = {3}; 2689 std::vector<uint8_t> operandValues = {}; 2690 const std::vector<hidl_memory> pools = {}; 2691 2692 return { 2693 .operands = operands, 2694 .operations = operations, 2695 .inputIndexes = inputIndexes, 2696 .outputIndexes = outputIndexes, 2697 .operandValues = operandValues, 2698 .pools = pools, 2699 }; 2700 } 2701 2702 inline bool is_ignored_float16_7(int i) { 2703 static std::set<int> ignore = {}; 2704 return ignore.find(i) != ignore.end(); 2705 } 2706 2707 // Create the model 2708 Model createTestModel_dynamic_output_shape_7() { 2709 const std::vector<Operand> operands = { 2710 { 2711 .type = OperandType::TENSOR_QUANT8_ASYMM, 2712 .dimensions = {3, 2, 3, 1}, 2713 .numberOfConsumers = 1, 2714 .scale = 2.0f, 2715 .zeroPoint = 128, 2716 .lifetime = OperandLifeTime::MODEL_INPUT, 2717 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2718 }, 2719 { 2720 .type = OperandType::TENSOR_INT32, 2721 .dimensions = {4}, 2722 .numberOfConsumers = 1, 2723 .scale = 0.0f, 2724 .zeroPoint = 0, 2725 .lifetime = OperandLifeTime::MODEL_INPUT, 2726 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2727 }, 2728 { 2729 .type = OperandType::TENSOR_INT32, 2730 .dimensions = {4}, 2731 .numberOfConsumers = 1, 2732 .scale = 0.0f, 2733 .zeroPoint = 0, 2734 .lifetime = OperandLifeTime::MODEL_INPUT, 2735 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2736 }, 2737 { 2738 .type = OperandType::TENSOR_QUANT8_ASYMM, 2739 .dimensions = {0, 0, 0, 0}, 2740 .numberOfConsumers = 0, 2741 .scale = 2.0f, 2742 .zeroPoint = 128, 2743 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2744 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2745 } 2746 }; 2747 2748 const std::vector<Operation> operations = { 2749 { 2750 .type = OperationType::SLICE, 2751 .inputs = {0, 1, 2}, 2752 .outputs = {3}, 2753 } 2754 }; 2755 2756 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2757 const std::vector<uint32_t> outputIndexes = {3}; 2758 std::vector<uint8_t> operandValues = {}; 2759 const std::vector<hidl_memory> pools = {}; 2760 2761 return { 2762 .operands = operands, 2763 .operations = operations, 2764 .inputIndexes = inputIndexes, 2765 .outputIndexes = outputIndexes, 2766 .operandValues = operandValues, 2767 .pools = pools, 2768 }; 2769 } 2770 2771 inline bool is_ignored_dynamic_output_shape_7(int i) { 2772 static std::set<int> ignore = {}; 2773 return ignore.find(i) != ignore.end(); 2774 } 2775 2776 // Create the model 2777 Model createTestModel_dynamic_output_shape_relaxed_7() { 2778 const std::vector<Operand> operands = { 2779 { 2780 .type = OperandType::TENSOR_QUANT8_ASYMM, 2781 .dimensions = {3, 2, 3, 1}, 2782 .numberOfConsumers = 1, 2783 .scale = 2.0f, 2784 .zeroPoint = 128, 2785 .lifetime = OperandLifeTime::MODEL_INPUT, 2786 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2787 }, 2788 { 2789 .type = OperandType::TENSOR_INT32, 2790 .dimensions = {4}, 2791 .numberOfConsumers = 1, 2792 .scale = 0.0f, 2793 .zeroPoint = 0, 2794 .lifetime = OperandLifeTime::MODEL_INPUT, 2795 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2796 }, 2797 { 2798 .type = OperandType::TENSOR_INT32, 2799 .dimensions = {4}, 2800 .numberOfConsumers = 1, 2801 .scale = 0.0f, 2802 .zeroPoint = 0, 2803 .lifetime = OperandLifeTime::MODEL_INPUT, 2804 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2805 }, 2806 { 2807 .type = OperandType::TENSOR_QUANT8_ASYMM, 2808 .dimensions = {0, 0, 0, 0}, 2809 .numberOfConsumers = 0, 2810 .scale = 2.0f, 2811 .zeroPoint = 128, 2812 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2813 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2814 } 2815 }; 2816 2817 const std::vector<Operation> operations = { 2818 { 2819 .type = OperationType::SLICE, 2820 .inputs = {0, 1, 2}, 2821 .outputs = {3}, 2822 } 2823 }; 2824 2825 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2826 const std::vector<uint32_t> outputIndexes = {3}; 2827 std::vector<uint8_t> operandValues = {}; 2828 const std::vector<hidl_memory> pools = {}; 2829 2830 return { 2831 .operands = operands, 2832 .operations = operations, 2833 .inputIndexes = inputIndexes, 2834 .outputIndexes = outputIndexes, 2835 .operandValues = operandValues, 2836 .pools = pools, 2837 .relaxComputationFloat32toFloat16 = true, 2838 }; 2839 } 2840 2841 inline bool is_ignored_dynamic_output_shape_relaxed_7(int i) { 2842 static std::set<int> ignore = {}; 2843 return ignore.find(i) != ignore.end(); 2844 } 2845 2846 // Create the model 2847 Model createTestModel_dynamic_output_shape_float16_7() { 2848 const std::vector<Operand> operands = { 2849 { 2850 .type = OperandType::TENSOR_QUANT8_ASYMM, 2851 .dimensions = {3, 2, 3, 1}, 2852 .numberOfConsumers = 1, 2853 .scale = 2.0f, 2854 .zeroPoint = 128, 2855 .lifetime = OperandLifeTime::MODEL_INPUT, 2856 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2857 }, 2858 { 2859 .type = OperandType::TENSOR_INT32, 2860 .dimensions = {4}, 2861 .numberOfConsumers = 1, 2862 .scale = 0.0f, 2863 .zeroPoint = 0, 2864 .lifetime = OperandLifeTime::MODEL_INPUT, 2865 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2866 }, 2867 { 2868 .type = OperandType::TENSOR_INT32, 2869 .dimensions = {4}, 2870 .numberOfConsumers = 1, 2871 .scale = 0.0f, 2872 .zeroPoint = 0, 2873 .lifetime = OperandLifeTime::MODEL_INPUT, 2874 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2875 }, 2876 { 2877 .type = OperandType::TENSOR_QUANT8_ASYMM, 2878 .dimensions = {0, 0, 0, 0}, 2879 .numberOfConsumers = 0, 2880 .scale = 2.0f, 2881 .zeroPoint = 128, 2882 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2883 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2884 } 2885 }; 2886 2887 const std::vector<Operation> operations = { 2888 { 2889 .type = OperationType::SLICE, 2890 .inputs = {0, 1, 2}, 2891 .outputs = {3}, 2892 } 2893 }; 2894 2895 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2896 const std::vector<uint32_t> outputIndexes = {3}; 2897 std::vector<uint8_t> operandValues = {}; 2898 const std::vector<hidl_memory> pools = {}; 2899 2900 return { 2901 .operands = operands, 2902 .operations = operations, 2903 .inputIndexes = inputIndexes, 2904 .outputIndexes = outputIndexes, 2905 .operandValues = operandValues, 2906 .pools = pools, 2907 }; 2908 } 2909 2910 inline bool is_ignored_dynamic_output_shape_float16_7(int i) { 2911 static std::set<int> ignore = {}; 2912 return ignore.find(i) != ignore.end(); 2913 } 2914 2915 // Create the model 2916 Model createTestModel_8() { 2917 const std::vector<Operand> operands = { 2918 { 2919 .type = OperandType::TENSOR_INT32, 2920 .dimensions = {3, 2, 3, 1}, 2921 .numberOfConsumers = 1, 2922 .scale = 0.0f, 2923 .zeroPoint = 0, 2924 .lifetime = OperandLifeTime::MODEL_INPUT, 2925 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2926 }, 2927 { 2928 .type = OperandType::TENSOR_INT32, 2929 .dimensions = {4}, 2930 .numberOfConsumers = 1, 2931 .scale = 0.0f, 2932 .zeroPoint = 0, 2933 .lifetime = OperandLifeTime::MODEL_INPUT, 2934 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2935 }, 2936 { 2937 .type = OperandType::TENSOR_INT32, 2938 .dimensions = {4}, 2939 .numberOfConsumers = 1, 2940 .scale = 0.0f, 2941 .zeroPoint = 0, 2942 .lifetime = OperandLifeTime::MODEL_INPUT, 2943 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2944 }, 2945 { 2946 .type = OperandType::TENSOR_INT32, 2947 .dimensions = {2, 1, 3, 1}, 2948 .numberOfConsumers = 0, 2949 .scale = 0.0f, 2950 .zeroPoint = 0, 2951 .lifetime = OperandLifeTime::MODEL_OUTPUT, 2952 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2953 } 2954 }; 2955 2956 const std::vector<Operation> operations = { 2957 { 2958 .type = OperationType::SLICE, 2959 .inputs = {0, 1, 2}, 2960 .outputs = {3}, 2961 } 2962 }; 2963 2964 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 2965 const std::vector<uint32_t> outputIndexes = {3}; 2966 std::vector<uint8_t> operandValues = {}; 2967 const std::vector<hidl_memory> pools = {}; 2968 2969 return { 2970 .operands = operands, 2971 .operations = operations, 2972 .inputIndexes = inputIndexes, 2973 .outputIndexes = outputIndexes, 2974 .operandValues = operandValues, 2975 .pools = pools, 2976 }; 2977 } 2978 2979 inline bool is_ignored_8(int i) { 2980 static std::set<int> ignore = {}; 2981 return ignore.find(i) != ignore.end(); 2982 } 2983 2984 // Create the model 2985 Model createTestModel_relaxed_8() { 2986 const std::vector<Operand> operands = { 2987 { 2988 .type = OperandType::TENSOR_INT32, 2989 .dimensions = {3, 2, 3, 1}, 2990 .numberOfConsumers = 1, 2991 .scale = 0.0f, 2992 .zeroPoint = 0, 2993 .lifetime = OperandLifeTime::MODEL_INPUT, 2994 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 2995 }, 2996 { 2997 .type = OperandType::TENSOR_INT32, 2998 .dimensions = {4}, 2999 .numberOfConsumers = 1, 3000 .scale = 0.0f, 3001 .zeroPoint = 0, 3002 .lifetime = OperandLifeTime::MODEL_INPUT, 3003 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3004 }, 3005 { 3006 .type = OperandType::TENSOR_INT32, 3007 .dimensions = {4}, 3008 .numberOfConsumers = 1, 3009 .scale = 0.0f, 3010 .zeroPoint = 0, 3011 .lifetime = OperandLifeTime::MODEL_INPUT, 3012 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3013 }, 3014 { 3015 .type = OperandType::TENSOR_INT32, 3016 .dimensions = {2, 1, 3, 1}, 3017 .numberOfConsumers = 0, 3018 .scale = 0.0f, 3019 .zeroPoint = 0, 3020 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3021 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3022 } 3023 }; 3024 3025 const std::vector<Operation> operations = { 3026 { 3027 .type = OperationType::SLICE, 3028 .inputs = {0, 1, 2}, 3029 .outputs = {3}, 3030 } 3031 }; 3032 3033 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 3034 const std::vector<uint32_t> outputIndexes = {3}; 3035 std::vector<uint8_t> operandValues = {}; 3036 const std::vector<hidl_memory> pools = {}; 3037 3038 return { 3039 .operands = operands, 3040 .operations = operations, 3041 .inputIndexes = inputIndexes, 3042 .outputIndexes = outputIndexes, 3043 .operandValues = operandValues, 3044 .pools = pools, 3045 .relaxComputationFloat32toFloat16 = true, 3046 }; 3047 } 3048 3049 inline bool is_ignored_relaxed_8(int i) { 3050 static std::set<int> ignore = {}; 3051 return ignore.find(i) != ignore.end(); 3052 } 3053 3054 // Create the model 3055 Model createTestModel_float16_8() { 3056 const std::vector<Operand> operands = { 3057 { 3058 .type = OperandType::TENSOR_INT32, 3059 .dimensions = {3, 2, 3, 1}, 3060 .numberOfConsumers = 1, 3061 .scale = 0.0f, 3062 .zeroPoint = 0, 3063 .lifetime = OperandLifeTime::MODEL_INPUT, 3064 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3065 }, 3066 { 3067 .type = OperandType::TENSOR_INT32, 3068 .dimensions = {4}, 3069 .numberOfConsumers = 1, 3070 .scale = 0.0f, 3071 .zeroPoint = 0, 3072 .lifetime = OperandLifeTime::MODEL_INPUT, 3073 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3074 }, 3075 { 3076 .type = OperandType::TENSOR_INT32, 3077 .dimensions = {4}, 3078 .numberOfConsumers = 1, 3079 .scale = 0.0f, 3080 .zeroPoint = 0, 3081 .lifetime = OperandLifeTime::MODEL_INPUT, 3082 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3083 }, 3084 { 3085 .type = OperandType::TENSOR_INT32, 3086 .dimensions = {2, 1, 3, 1}, 3087 .numberOfConsumers = 0, 3088 .scale = 0.0f, 3089 .zeroPoint = 0, 3090 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3091 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3092 } 3093 }; 3094 3095 const std::vector<Operation> operations = { 3096 { 3097 .type = OperationType::SLICE, 3098 .inputs = {0, 1, 2}, 3099 .outputs = {3}, 3100 } 3101 }; 3102 3103 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 3104 const std::vector<uint32_t> outputIndexes = {3}; 3105 std::vector<uint8_t> operandValues = {}; 3106 const std::vector<hidl_memory> pools = {}; 3107 3108 return { 3109 .operands = operands, 3110 .operations = operations, 3111 .inputIndexes = inputIndexes, 3112 .outputIndexes = outputIndexes, 3113 .operandValues = operandValues, 3114 .pools = pools, 3115 }; 3116 } 3117 3118 inline bool is_ignored_float16_8(int i) { 3119 static std::set<int> ignore = {}; 3120 return ignore.find(i) != ignore.end(); 3121 } 3122 3123 // Create the model 3124 Model createTestModel_dynamic_output_shape_8() { 3125 const std::vector<Operand> operands = { 3126 { 3127 .type = OperandType::TENSOR_INT32, 3128 .dimensions = {3, 2, 3, 1}, 3129 .numberOfConsumers = 1, 3130 .scale = 0.0f, 3131 .zeroPoint = 0, 3132 .lifetime = OperandLifeTime::MODEL_INPUT, 3133 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3134 }, 3135 { 3136 .type = OperandType::TENSOR_INT32, 3137 .dimensions = {4}, 3138 .numberOfConsumers = 1, 3139 .scale = 0.0f, 3140 .zeroPoint = 0, 3141 .lifetime = OperandLifeTime::MODEL_INPUT, 3142 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3143 }, 3144 { 3145 .type = OperandType::TENSOR_INT32, 3146 .dimensions = {4}, 3147 .numberOfConsumers = 1, 3148 .scale = 0.0f, 3149 .zeroPoint = 0, 3150 .lifetime = OperandLifeTime::MODEL_INPUT, 3151 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3152 }, 3153 { 3154 .type = OperandType::TENSOR_INT32, 3155 .dimensions = {0, 0, 0, 0}, 3156 .numberOfConsumers = 0, 3157 .scale = 0.0f, 3158 .zeroPoint = 0, 3159 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3160 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3161 } 3162 }; 3163 3164 const std::vector<Operation> operations = { 3165 { 3166 .type = OperationType::SLICE, 3167 .inputs = {0, 1, 2}, 3168 .outputs = {3}, 3169 } 3170 }; 3171 3172 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 3173 const std::vector<uint32_t> outputIndexes = {3}; 3174 std::vector<uint8_t> operandValues = {}; 3175 const std::vector<hidl_memory> pools = {}; 3176 3177 return { 3178 .operands = operands, 3179 .operations = operations, 3180 .inputIndexes = inputIndexes, 3181 .outputIndexes = outputIndexes, 3182 .operandValues = operandValues, 3183 .pools = pools, 3184 }; 3185 } 3186 3187 inline bool is_ignored_dynamic_output_shape_8(int i) { 3188 static std::set<int> ignore = {}; 3189 return ignore.find(i) != ignore.end(); 3190 } 3191 3192 // Create the model 3193 Model createTestModel_dynamic_output_shape_relaxed_8() { 3194 const std::vector<Operand> operands = { 3195 { 3196 .type = OperandType::TENSOR_INT32, 3197 .dimensions = {3, 2, 3, 1}, 3198 .numberOfConsumers = 1, 3199 .scale = 0.0f, 3200 .zeroPoint = 0, 3201 .lifetime = OperandLifeTime::MODEL_INPUT, 3202 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3203 }, 3204 { 3205 .type = OperandType::TENSOR_INT32, 3206 .dimensions = {4}, 3207 .numberOfConsumers = 1, 3208 .scale = 0.0f, 3209 .zeroPoint = 0, 3210 .lifetime = OperandLifeTime::MODEL_INPUT, 3211 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3212 }, 3213 { 3214 .type = OperandType::TENSOR_INT32, 3215 .dimensions = {4}, 3216 .numberOfConsumers = 1, 3217 .scale = 0.0f, 3218 .zeroPoint = 0, 3219 .lifetime = OperandLifeTime::MODEL_INPUT, 3220 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3221 }, 3222 { 3223 .type = OperandType::TENSOR_INT32, 3224 .dimensions = {0, 0, 0, 0}, 3225 .numberOfConsumers = 0, 3226 .scale = 0.0f, 3227 .zeroPoint = 0, 3228 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3229 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3230 } 3231 }; 3232 3233 const std::vector<Operation> operations = { 3234 { 3235 .type = OperationType::SLICE, 3236 .inputs = {0, 1, 2}, 3237 .outputs = {3}, 3238 } 3239 }; 3240 3241 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 3242 const std::vector<uint32_t> outputIndexes = {3}; 3243 std::vector<uint8_t> operandValues = {}; 3244 const std::vector<hidl_memory> pools = {}; 3245 3246 return { 3247 .operands = operands, 3248 .operations = operations, 3249 .inputIndexes = inputIndexes, 3250 .outputIndexes = outputIndexes, 3251 .operandValues = operandValues, 3252 .pools = pools, 3253 .relaxComputationFloat32toFloat16 = true, 3254 }; 3255 } 3256 3257 inline bool is_ignored_dynamic_output_shape_relaxed_8(int i) { 3258 static std::set<int> ignore = {}; 3259 return ignore.find(i) != ignore.end(); 3260 } 3261 3262 // Create the model 3263 Model createTestModel_dynamic_output_shape_float16_8() { 3264 const std::vector<Operand> operands = { 3265 { 3266 .type = OperandType::TENSOR_INT32, 3267 .dimensions = {3, 2, 3, 1}, 3268 .numberOfConsumers = 1, 3269 .scale = 0.0f, 3270 .zeroPoint = 0, 3271 .lifetime = OperandLifeTime::MODEL_INPUT, 3272 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3273 }, 3274 { 3275 .type = OperandType::TENSOR_INT32, 3276 .dimensions = {4}, 3277 .numberOfConsumers = 1, 3278 .scale = 0.0f, 3279 .zeroPoint = 0, 3280 .lifetime = OperandLifeTime::MODEL_INPUT, 3281 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3282 }, 3283 { 3284 .type = OperandType::TENSOR_INT32, 3285 .dimensions = {4}, 3286 .numberOfConsumers = 1, 3287 .scale = 0.0f, 3288 .zeroPoint = 0, 3289 .lifetime = OperandLifeTime::MODEL_INPUT, 3290 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3291 }, 3292 { 3293 .type = OperandType::TENSOR_INT32, 3294 .dimensions = {0, 0, 0, 0}, 3295 .numberOfConsumers = 0, 3296 .scale = 0.0f, 3297 .zeroPoint = 0, 3298 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3299 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3300 } 3301 }; 3302 3303 const std::vector<Operation> operations = { 3304 { 3305 .type = OperationType::SLICE, 3306 .inputs = {0, 1, 2}, 3307 .outputs = {3}, 3308 } 3309 }; 3310 3311 const std::vector<uint32_t> inputIndexes = {0, 1, 2}; 3312 const std::vector<uint32_t> outputIndexes = {3}; 3313 std::vector<uint8_t> operandValues = {}; 3314 const std::vector<hidl_memory> pools = {}; 3315 3316 return { 3317 .operands = operands, 3318 .operations = operations, 3319 .inputIndexes = inputIndexes, 3320 .outputIndexes = outputIndexes, 3321 .operandValues = operandValues, 3322 .pools = pools, 3323 }; 3324 } 3325 3326 inline bool is_ignored_dynamic_output_shape_float16_8(int i) { 3327 static std::set<int> ignore = {}; 3328 return ignore.find(i) != ignore.end(); 3329 } 3330 3331 // Create the model 3332 Model createTestModel_zero_sized() { 3333 const std::vector<Operand> operands = { 3334 { 3335 .type = OperandType::TENSOR_FLOAT32, 3336 .dimensions = {1, 2}, 3337 .numberOfConsumers = 1, 3338 .scale = 0.0f, 3339 .zeroPoint = 0, 3340 .lifetime = OperandLifeTime::CONSTANT_COPY, 3341 .location = {.poolIndex = 0, .offset = 0, .length = 8}, 3342 }, 3343 { 3344 .type = OperandType::TENSOR_FLOAT32, 3345 .dimensions = {1, 8}, 3346 .numberOfConsumers = 1, 3347 .scale = 0.0f, 3348 .zeroPoint = 0, 3349 .lifetime = OperandLifeTime::CONSTANT_COPY, 3350 .location = {.poolIndex = 0, .offset = 8, .length = 32}, 3351 }, 3352 { 3353 .type = OperandType::TENSOR_INT32, 3354 .dimensions = {1}, 3355 .numberOfConsumers = 1, 3356 .scale = 0.0f, 3357 .zeroPoint = 0, 3358 .lifetime = OperandLifeTime::CONSTANT_COPY, 3359 .location = {.poolIndex = 0, .offset = 40, .length = 4}, 3360 }, 3361 { 3362 .type = OperandType::FLOAT32, 3363 .dimensions = {}, 3364 .numberOfConsumers = 1, 3365 .scale = 0.0f, 3366 .zeroPoint = 0, 3367 .lifetime = OperandLifeTime::CONSTANT_COPY, 3368 .location = {.poolIndex = 0, .offset = 44, .length = 4}, 3369 }, 3370 { 3371 .type = OperandType::INT32, 3372 .dimensions = {}, 3373 .numberOfConsumers = 1, 3374 .scale = 0.0f, 3375 .zeroPoint = 0, 3376 .lifetime = OperandLifeTime::CONSTANT_COPY, 3377 .location = {.poolIndex = 0, .offset = 48, .length = 4}, 3378 }, 3379 { 3380 .type = OperandType::INT32, 3381 .dimensions = {}, 3382 .numberOfConsumers = 1, 3383 .scale = 0.0f, 3384 .zeroPoint = 0, 3385 .lifetime = OperandLifeTime::CONSTANT_COPY, 3386 .location = {.poolIndex = 0, .offset = 52, .length = 4}, 3387 }, 3388 { 3389 .type = OperandType::FLOAT32, 3390 .dimensions = {}, 3391 .numberOfConsumers = 1, 3392 .scale = 0.0f, 3393 .zeroPoint = 0, 3394 .lifetime = OperandLifeTime::CONSTANT_COPY, 3395 .location = {.poolIndex = 0, .offset = 56, .length = 4}, 3396 }, 3397 { 3398 .type = OperandType::FLOAT32, 3399 .dimensions = {}, 3400 .numberOfConsumers = 1, 3401 .scale = 0.0f, 3402 .zeroPoint = 0, 3403 .lifetime = OperandLifeTime::CONSTANT_COPY, 3404 .location = {.poolIndex = 0, .offset = 60, .length = 4}, 3405 }, 3406 { 3407 .type = OperandType::FLOAT32, 3408 .dimensions = {}, 3409 .numberOfConsumers = 1, 3410 .scale = 0.0f, 3411 .zeroPoint = 0, 3412 .lifetime = OperandLifeTime::CONSTANT_COPY, 3413 .location = {.poolIndex = 0, .offset = 64, .length = 4}, 3414 }, 3415 { 3416 .type = OperandType::TENSOR_FLOAT32, 3417 .dimensions = {0}, 3418 .numberOfConsumers = 0, 3419 .scale = 0.0f, 3420 .zeroPoint = 0, 3421 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3422 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3423 }, 3424 { 3425 .type = OperandType::TENSOR_FLOAT32, 3426 .dimensions = {0, 4}, 3427 .numberOfConsumers = 1, 3428 .scale = 0.0f, 3429 .zeroPoint = 0, 3430 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 3431 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3432 }, 3433 { 3434 .type = OperandType::TENSOR_INT32, 3435 .dimensions = {0}, 3436 .numberOfConsumers = 0, 3437 .scale = 0.0f, 3438 .zeroPoint = 0, 3439 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3440 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3441 }, 3442 { 3443 .type = OperandType::TENSOR_INT32, 3444 .dimensions = {0}, 3445 .numberOfConsumers = 1, 3446 .scale = 0.0f, 3447 .zeroPoint = 0, 3448 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 3449 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3450 }, 3451 { 3452 .type = OperandType::TENSOR_FLOAT32, 3453 .dimensions = {1, 1, 1, 1}, 3454 .numberOfConsumers = 1, 3455 .scale = 0.0f, 3456 .zeroPoint = 0, 3457 .lifetime = OperandLifeTime::MODEL_INPUT, 3458 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3459 }, 3460 { 3461 .type = OperandType::INT32, 3462 .dimensions = {}, 3463 .numberOfConsumers = 1, 3464 .scale = 0.0f, 3465 .zeroPoint = 0, 3466 .lifetime = OperandLifeTime::CONSTANT_COPY, 3467 .location = {.poolIndex = 0, .offset = 68, .length = 4}, 3468 }, 3469 { 3470 .type = OperandType::INT32, 3471 .dimensions = {}, 3472 .numberOfConsumers = 1, 3473 .scale = 0.0f, 3474 .zeroPoint = 0, 3475 .lifetime = OperandLifeTime::CONSTANT_COPY, 3476 .location = {.poolIndex = 0, .offset = 72, .length = 4}, 3477 }, 3478 { 3479 .type = OperandType::FLOAT32, 3480 .dimensions = {}, 3481 .numberOfConsumers = 1, 3482 .scale = 0.0f, 3483 .zeroPoint = 0, 3484 .lifetime = OperandLifeTime::CONSTANT_COPY, 3485 .location = {.poolIndex = 0, .offset = 76, .length = 4}, 3486 }, 3487 { 3488 .type = OperandType::FLOAT32, 3489 .dimensions = {}, 3490 .numberOfConsumers = 1, 3491 .scale = 0.0f, 3492 .zeroPoint = 0, 3493 .lifetime = OperandLifeTime::CONSTANT_COPY, 3494 .location = {.poolIndex = 0, .offset = 80, .length = 4}, 3495 }, 3496 { 3497 .type = OperandType::INT32, 3498 .dimensions = {}, 3499 .numberOfConsumers = 1, 3500 .scale = 0.0f, 3501 .zeroPoint = 0, 3502 .lifetime = OperandLifeTime::CONSTANT_COPY, 3503 .location = {.poolIndex = 0, .offset = 84, .length = 4}, 3504 }, 3505 { 3506 .type = OperandType::INT32, 3507 .dimensions = {}, 3508 .numberOfConsumers = 1, 3509 .scale = 0.0f, 3510 .zeroPoint = 0, 3511 .lifetime = OperandLifeTime::CONSTANT_COPY, 3512 .location = {.poolIndex = 0, .offset = 88, .length = 4}, 3513 }, 3514 { 3515 .type = OperandType::BOOL, 3516 .dimensions = {}, 3517 .numberOfConsumers = 1, 3518 .scale = 0.0f, 3519 .zeroPoint = 0, 3520 .lifetime = OperandLifeTime::CONSTANT_COPY, 3521 .location = {.poolIndex = 0, .offset = 92, .length = 1}, 3522 }, 3523 { 3524 .type = OperandType::TENSOR_FLOAT32, 3525 .dimensions = {0, 2, 2, 1}, 3526 .numberOfConsumers = 1, 3527 .scale = 0.0f, 3528 .zeroPoint = 0, 3529 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 3530 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3531 }, 3532 { 3533 .type = OperandType::TENSOR_INT32, 3534 .dimensions = {4}, 3535 .numberOfConsumers = 1, 3536 .scale = 0.0f, 3537 .zeroPoint = 0, 3538 .lifetime = OperandLifeTime::CONSTANT_COPY, 3539 .location = {.poolIndex = 0, .offset = 93, .length = 16}, 3540 }, 3541 { 3542 .type = OperandType::TENSOR_INT32, 3543 .dimensions = {4}, 3544 .numberOfConsumers = 1, 3545 .scale = 0.0f, 3546 .zeroPoint = 0, 3547 .lifetime = OperandLifeTime::CONSTANT_COPY, 3548 .location = {.poolIndex = 0, .offset = 109, .length = 16}, 3549 }, 3550 { 3551 .type = OperandType::TENSOR_FLOAT32, 3552 .dimensions = {0, 1, 1, 1}, 3553 .numberOfConsumers = 0, 3554 .scale = 0.0f, 3555 .zeroPoint = 0, 3556 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3557 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3558 } 3559 }; 3560 3561 const std::vector<Operation> operations = { 3562 { 3563 .type = OperationType::BOX_WITH_NMS_LIMIT, 3564 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, 3565 .outputs = {9, 10, 11, 12}, 3566 }, 3567 { 3568 .type = OperationType::ROI_ALIGN, 3569 .inputs = {13, 10, 12, 14, 15, 16, 17, 18, 19, 20}, 3570 .outputs = {21}, 3571 }, 3572 { 3573 .type = OperationType::SLICE, 3574 .inputs = {21, 22, 23}, 3575 .outputs = {24}, 3576 } 3577 }; 3578 3579 const std::vector<uint32_t> inputIndexes = {13}; 3580 const std::vector<uint32_t> outputIndexes = {9, 11, 24}; 3581 std::vector<uint8_t> operandValues = { 3582 102, 102, 102, 63, 205, 204, 204, 61, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 32, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 32, 65, 0, 0, 0, 0, 154, 153, 153, 62, 255, 255, 255, 255, 0, 0, 0, 0, 205, 204, 204, 62, 0, 0, 128, 63, 154, 153, 153, 62, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 64, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0 3583 }; 3584 const std::vector<hidl_memory> pools = {}; 3585 3586 return { 3587 .operands = operands, 3588 .operations = operations, 3589 .inputIndexes = inputIndexes, 3590 .outputIndexes = outputIndexes, 3591 .operandValues = operandValues, 3592 .pools = pools, 3593 }; 3594 } 3595 3596 inline bool is_ignored_zero_sized(int i) { 3597 static std::set<int> ignore = {}; 3598 return ignore.find(i) != ignore.end(); 3599 } 3600 3601 // Create the model 3602 Model createTestModel_zero_sized_relaxed() { 3603 const std::vector<Operand> operands = { 3604 { 3605 .type = OperandType::TENSOR_FLOAT32, 3606 .dimensions = {1, 2}, 3607 .numberOfConsumers = 1, 3608 .scale = 0.0f, 3609 .zeroPoint = 0, 3610 .lifetime = OperandLifeTime::CONSTANT_COPY, 3611 .location = {.poolIndex = 0, .offset = 0, .length = 8}, 3612 }, 3613 { 3614 .type = OperandType::TENSOR_FLOAT32, 3615 .dimensions = {1, 8}, 3616 .numberOfConsumers = 1, 3617 .scale = 0.0f, 3618 .zeroPoint = 0, 3619 .lifetime = OperandLifeTime::CONSTANT_COPY, 3620 .location = {.poolIndex = 0, .offset = 8, .length = 32}, 3621 }, 3622 { 3623 .type = OperandType::TENSOR_INT32, 3624 .dimensions = {1}, 3625 .numberOfConsumers = 1, 3626 .scale = 0.0f, 3627 .zeroPoint = 0, 3628 .lifetime = OperandLifeTime::CONSTANT_COPY, 3629 .location = {.poolIndex = 0, .offset = 40, .length = 4}, 3630 }, 3631 { 3632 .type = OperandType::FLOAT32, 3633 .dimensions = {}, 3634 .numberOfConsumers = 1, 3635 .scale = 0.0f, 3636 .zeroPoint = 0, 3637 .lifetime = OperandLifeTime::CONSTANT_COPY, 3638 .location = {.poolIndex = 0, .offset = 44, .length = 4}, 3639 }, 3640 { 3641 .type = OperandType::INT32, 3642 .dimensions = {}, 3643 .numberOfConsumers = 1, 3644 .scale = 0.0f, 3645 .zeroPoint = 0, 3646 .lifetime = OperandLifeTime::CONSTANT_COPY, 3647 .location = {.poolIndex = 0, .offset = 48, .length = 4}, 3648 }, 3649 { 3650 .type = OperandType::INT32, 3651 .dimensions = {}, 3652 .numberOfConsumers = 1, 3653 .scale = 0.0f, 3654 .zeroPoint = 0, 3655 .lifetime = OperandLifeTime::CONSTANT_COPY, 3656 .location = {.poolIndex = 0, .offset = 52, .length = 4}, 3657 }, 3658 { 3659 .type = OperandType::FLOAT32, 3660 .dimensions = {}, 3661 .numberOfConsumers = 1, 3662 .scale = 0.0f, 3663 .zeroPoint = 0, 3664 .lifetime = OperandLifeTime::CONSTANT_COPY, 3665 .location = {.poolIndex = 0, .offset = 56, .length = 4}, 3666 }, 3667 { 3668 .type = OperandType::FLOAT32, 3669 .dimensions = {}, 3670 .numberOfConsumers = 1, 3671 .scale = 0.0f, 3672 .zeroPoint = 0, 3673 .lifetime = OperandLifeTime::CONSTANT_COPY, 3674 .location = {.poolIndex = 0, .offset = 60, .length = 4}, 3675 }, 3676 { 3677 .type = OperandType::FLOAT32, 3678 .dimensions = {}, 3679 .numberOfConsumers = 1, 3680 .scale = 0.0f, 3681 .zeroPoint = 0, 3682 .lifetime = OperandLifeTime::CONSTANT_COPY, 3683 .location = {.poolIndex = 0, .offset = 64, .length = 4}, 3684 }, 3685 { 3686 .type = OperandType::TENSOR_FLOAT32, 3687 .dimensions = {0}, 3688 .numberOfConsumers = 0, 3689 .scale = 0.0f, 3690 .zeroPoint = 0, 3691 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3692 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3693 }, 3694 { 3695 .type = OperandType::TENSOR_FLOAT32, 3696 .dimensions = {0, 4}, 3697 .numberOfConsumers = 1, 3698 .scale = 0.0f, 3699 .zeroPoint = 0, 3700 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 3701 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3702 }, 3703 { 3704 .type = OperandType::TENSOR_INT32, 3705 .dimensions = {0}, 3706 .numberOfConsumers = 0, 3707 .scale = 0.0f, 3708 .zeroPoint = 0, 3709 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3710 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3711 }, 3712 { 3713 .type = OperandType::TENSOR_INT32, 3714 .dimensions = {0}, 3715 .numberOfConsumers = 1, 3716 .scale = 0.0f, 3717 .zeroPoint = 0, 3718 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 3719 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3720 }, 3721 { 3722 .type = OperandType::TENSOR_FLOAT32, 3723 .dimensions = {1, 1, 1, 1}, 3724 .numberOfConsumers = 1, 3725 .scale = 0.0f, 3726 .zeroPoint = 0, 3727 .lifetime = OperandLifeTime::MODEL_INPUT, 3728 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3729 }, 3730 { 3731 .type = OperandType::INT32, 3732 .dimensions = {}, 3733 .numberOfConsumers = 1, 3734 .scale = 0.0f, 3735 .zeroPoint = 0, 3736 .lifetime = OperandLifeTime::CONSTANT_COPY, 3737 .location = {.poolIndex = 0, .offset = 68, .length = 4}, 3738 }, 3739 { 3740 .type = OperandType::INT32, 3741 .dimensions = {}, 3742 .numberOfConsumers = 1, 3743 .scale = 0.0f, 3744 .zeroPoint = 0, 3745 .lifetime = OperandLifeTime::CONSTANT_COPY, 3746 .location = {.poolIndex = 0, .offset = 72, .length = 4}, 3747 }, 3748 { 3749 .type = OperandType::FLOAT32, 3750 .dimensions = {}, 3751 .numberOfConsumers = 1, 3752 .scale = 0.0f, 3753 .zeroPoint = 0, 3754 .lifetime = OperandLifeTime::CONSTANT_COPY, 3755 .location = {.poolIndex = 0, .offset = 76, .length = 4}, 3756 }, 3757 { 3758 .type = OperandType::FLOAT32, 3759 .dimensions = {}, 3760 .numberOfConsumers = 1, 3761 .scale = 0.0f, 3762 .zeroPoint = 0, 3763 .lifetime = OperandLifeTime::CONSTANT_COPY, 3764 .location = {.poolIndex = 0, .offset = 80, .length = 4}, 3765 }, 3766 { 3767 .type = OperandType::INT32, 3768 .dimensions = {}, 3769 .numberOfConsumers = 1, 3770 .scale = 0.0f, 3771 .zeroPoint = 0, 3772 .lifetime = OperandLifeTime::CONSTANT_COPY, 3773 .location = {.poolIndex = 0, .offset = 84, .length = 4}, 3774 }, 3775 { 3776 .type = OperandType::INT32, 3777 .dimensions = {}, 3778 .numberOfConsumers = 1, 3779 .scale = 0.0f, 3780 .zeroPoint = 0, 3781 .lifetime = OperandLifeTime::CONSTANT_COPY, 3782 .location = {.poolIndex = 0, .offset = 88, .length = 4}, 3783 }, 3784 { 3785 .type = OperandType::BOOL, 3786 .dimensions = {}, 3787 .numberOfConsumers = 1, 3788 .scale = 0.0f, 3789 .zeroPoint = 0, 3790 .lifetime = OperandLifeTime::CONSTANT_COPY, 3791 .location = {.poolIndex = 0, .offset = 92, .length = 1}, 3792 }, 3793 { 3794 .type = OperandType::TENSOR_FLOAT32, 3795 .dimensions = {0, 2, 2, 1}, 3796 .numberOfConsumers = 1, 3797 .scale = 0.0f, 3798 .zeroPoint = 0, 3799 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 3800 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3801 }, 3802 { 3803 .type = OperandType::TENSOR_INT32, 3804 .dimensions = {4}, 3805 .numberOfConsumers = 1, 3806 .scale = 0.0f, 3807 .zeroPoint = 0, 3808 .lifetime = OperandLifeTime::CONSTANT_COPY, 3809 .location = {.poolIndex = 0, .offset = 93, .length = 16}, 3810 }, 3811 { 3812 .type = OperandType::TENSOR_INT32, 3813 .dimensions = {4}, 3814 .numberOfConsumers = 1, 3815 .scale = 0.0f, 3816 .zeroPoint = 0, 3817 .lifetime = OperandLifeTime::CONSTANT_COPY, 3818 .location = {.poolIndex = 0, .offset = 109, .length = 16}, 3819 }, 3820 { 3821 .type = OperandType::TENSOR_FLOAT32, 3822 .dimensions = {0, 1, 1, 1}, 3823 .numberOfConsumers = 0, 3824 .scale = 0.0f, 3825 .zeroPoint = 0, 3826 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3827 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3828 } 3829 }; 3830 3831 const std::vector<Operation> operations = { 3832 { 3833 .type = OperationType::BOX_WITH_NMS_LIMIT, 3834 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, 3835 .outputs = {9, 10, 11, 12}, 3836 }, 3837 { 3838 .type = OperationType::ROI_ALIGN, 3839 .inputs = {13, 10, 12, 14, 15, 16, 17, 18, 19, 20}, 3840 .outputs = {21}, 3841 }, 3842 { 3843 .type = OperationType::SLICE, 3844 .inputs = {21, 22, 23}, 3845 .outputs = {24}, 3846 } 3847 }; 3848 3849 const std::vector<uint32_t> inputIndexes = {13}; 3850 const std::vector<uint32_t> outputIndexes = {9, 11, 24}; 3851 std::vector<uint8_t> operandValues = { 3852 102, 102, 102, 63, 205, 204, 204, 61, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 32, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 32, 65, 0, 0, 0, 0, 154, 153, 153, 62, 255, 255, 255, 255, 0, 0, 0, 0, 205, 204, 204, 62, 0, 0, 128, 63, 154, 153, 153, 62, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 64, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0 3853 }; 3854 const std::vector<hidl_memory> pools = {}; 3855 3856 return { 3857 .operands = operands, 3858 .operations = operations, 3859 .inputIndexes = inputIndexes, 3860 .outputIndexes = outputIndexes, 3861 .operandValues = operandValues, 3862 .pools = pools, 3863 .relaxComputationFloat32toFloat16 = true, 3864 }; 3865 } 3866 3867 inline bool is_ignored_zero_sized_relaxed(int i) { 3868 static std::set<int> ignore = {}; 3869 return ignore.find(i) != ignore.end(); 3870 } 3871 3872 // Create the model 3873 Model createTestModel_zero_sized_quant8() { 3874 const std::vector<Operand> operands = { 3875 { 3876 .type = OperandType::TENSOR_QUANT8_ASYMM, 3877 .dimensions = {1, 2}, 3878 .numberOfConsumers = 1, 3879 .scale = 0.1f, 3880 .zeroPoint = 128, 3881 .lifetime = OperandLifeTime::CONSTANT_COPY, 3882 .location = {.poolIndex = 0, .offset = 0, .length = 2}, 3883 }, 3884 { 3885 .type = OperandType::TENSOR_QUANT16_ASYMM, 3886 .dimensions = {1, 8}, 3887 .numberOfConsumers = 1, 3888 .scale = 0.125f, 3889 .zeroPoint = 0, 3890 .lifetime = OperandLifeTime::CONSTANT_COPY, 3891 .location = {.poolIndex = 0, .offset = 2, .length = 16}, 3892 }, 3893 { 3894 .type = OperandType::TENSOR_INT32, 3895 .dimensions = {1}, 3896 .numberOfConsumers = 1, 3897 .scale = 0.0f, 3898 .zeroPoint = 0, 3899 .lifetime = OperandLifeTime::CONSTANT_COPY, 3900 .location = {.poolIndex = 0, .offset = 18, .length = 4}, 3901 }, 3902 { 3903 .type = OperandType::FLOAT32, 3904 .dimensions = {}, 3905 .numberOfConsumers = 1, 3906 .scale = 0.0f, 3907 .zeroPoint = 0, 3908 .lifetime = OperandLifeTime::CONSTANT_COPY, 3909 .location = {.poolIndex = 0, .offset = 22, .length = 4}, 3910 }, 3911 { 3912 .type = OperandType::INT32, 3913 .dimensions = {}, 3914 .numberOfConsumers = 1, 3915 .scale = 0.0f, 3916 .zeroPoint = 0, 3917 .lifetime = OperandLifeTime::CONSTANT_COPY, 3918 .location = {.poolIndex = 0, .offset = 26, .length = 4}, 3919 }, 3920 { 3921 .type = OperandType::INT32, 3922 .dimensions = {}, 3923 .numberOfConsumers = 1, 3924 .scale = 0.0f, 3925 .zeroPoint = 0, 3926 .lifetime = OperandLifeTime::CONSTANT_COPY, 3927 .location = {.poolIndex = 0, .offset = 30, .length = 4}, 3928 }, 3929 { 3930 .type = OperandType::FLOAT32, 3931 .dimensions = {}, 3932 .numberOfConsumers = 1, 3933 .scale = 0.0f, 3934 .zeroPoint = 0, 3935 .lifetime = OperandLifeTime::CONSTANT_COPY, 3936 .location = {.poolIndex = 0, .offset = 34, .length = 4}, 3937 }, 3938 { 3939 .type = OperandType::FLOAT32, 3940 .dimensions = {}, 3941 .numberOfConsumers = 1, 3942 .scale = 0.0f, 3943 .zeroPoint = 0, 3944 .lifetime = OperandLifeTime::CONSTANT_COPY, 3945 .location = {.poolIndex = 0, .offset = 38, .length = 4}, 3946 }, 3947 { 3948 .type = OperandType::FLOAT32, 3949 .dimensions = {}, 3950 .numberOfConsumers = 1, 3951 .scale = 0.0f, 3952 .zeroPoint = 0, 3953 .lifetime = OperandLifeTime::CONSTANT_COPY, 3954 .location = {.poolIndex = 0, .offset = 42, .length = 4}, 3955 }, 3956 { 3957 .type = OperandType::TENSOR_QUANT8_ASYMM, 3958 .dimensions = {0}, 3959 .numberOfConsumers = 0, 3960 .scale = 0.1f, 3961 .zeroPoint = 128, 3962 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3963 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3964 }, 3965 { 3966 .type = OperandType::TENSOR_QUANT16_ASYMM, 3967 .dimensions = {0, 4}, 3968 .numberOfConsumers = 1, 3969 .scale = 0.125f, 3970 .zeroPoint = 0, 3971 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 3972 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3973 }, 3974 { 3975 .type = OperandType::TENSOR_INT32, 3976 .dimensions = {0}, 3977 .numberOfConsumers = 0, 3978 .scale = 0.0f, 3979 .zeroPoint = 0, 3980 .lifetime = OperandLifeTime::MODEL_OUTPUT, 3981 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3982 }, 3983 { 3984 .type = OperandType::TENSOR_INT32, 3985 .dimensions = {0}, 3986 .numberOfConsumers = 1, 3987 .scale = 0.0f, 3988 .zeroPoint = 0, 3989 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 3990 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 3991 }, 3992 { 3993 .type = OperandType::TENSOR_QUANT8_ASYMM, 3994 .dimensions = {1, 1, 1, 1}, 3995 .numberOfConsumers = 1, 3996 .scale = 0.1f, 3997 .zeroPoint = 128, 3998 .lifetime = OperandLifeTime::MODEL_INPUT, 3999 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4000 }, 4001 { 4002 .type = OperandType::INT32, 4003 .dimensions = {}, 4004 .numberOfConsumers = 1, 4005 .scale = 0.0f, 4006 .zeroPoint = 0, 4007 .lifetime = OperandLifeTime::CONSTANT_COPY, 4008 .location = {.poolIndex = 0, .offset = 46, .length = 4}, 4009 }, 4010 { 4011 .type = OperandType::INT32, 4012 .dimensions = {}, 4013 .numberOfConsumers = 1, 4014 .scale = 0.0f, 4015 .zeroPoint = 0, 4016 .lifetime = OperandLifeTime::CONSTANT_COPY, 4017 .location = {.poolIndex = 0, .offset = 50, .length = 4}, 4018 }, 4019 { 4020 .type = OperandType::FLOAT32, 4021 .dimensions = {}, 4022 .numberOfConsumers = 1, 4023 .scale = 0.0f, 4024 .zeroPoint = 0, 4025 .lifetime = OperandLifeTime::CONSTANT_COPY, 4026 .location = {.poolIndex = 0, .offset = 54, .length = 4}, 4027 }, 4028 { 4029 .type = OperandType::FLOAT32, 4030 .dimensions = {}, 4031 .numberOfConsumers = 1, 4032 .scale = 0.0f, 4033 .zeroPoint = 0, 4034 .lifetime = OperandLifeTime::CONSTANT_COPY, 4035 .location = {.poolIndex = 0, .offset = 58, .length = 4}, 4036 }, 4037 { 4038 .type = OperandType::INT32, 4039 .dimensions = {}, 4040 .numberOfConsumers = 1, 4041 .scale = 0.0f, 4042 .zeroPoint = 0, 4043 .lifetime = OperandLifeTime::CONSTANT_COPY, 4044 .location = {.poolIndex = 0, .offset = 62, .length = 4}, 4045 }, 4046 { 4047 .type = OperandType::INT32, 4048 .dimensions = {}, 4049 .numberOfConsumers = 1, 4050 .scale = 0.0f, 4051 .zeroPoint = 0, 4052 .lifetime = OperandLifeTime::CONSTANT_COPY, 4053 .location = {.poolIndex = 0, .offset = 66, .length = 4}, 4054 }, 4055 { 4056 .type = OperandType::BOOL, 4057 .dimensions = {}, 4058 .numberOfConsumers = 1, 4059 .scale = 0.0f, 4060 .zeroPoint = 0, 4061 .lifetime = OperandLifeTime::CONSTANT_COPY, 4062 .location = {.poolIndex = 0, .offset = 70, .length = 1}, 4063 }, 4064 { 4065 .type = OperandType::TENSOR_QUANT8_ASYMM, 4066 .dimensions = {0, 2, 2, 1}, 4067 .numberOfConsumers = 1, 4068 .scale = 0.1f, 4069 .zeroPoint = 128, 4070 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4071 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4072 }, 4073 { 4074 .type = OperandType::TENSOR_INT32, 4075 .dimensions = {4}, 4076 .numberOfConsumers = 1, 4077 .scale = 0.0f, 4078 .zeroPoint = 0, 4079 .lifetime = OperandLifeTime::CONSTANT_COPY, 4080 .location = {.poolIndex = 0, .offset = 71, .length = 16}, 4081 }, 4082 { 4083 .type = OperandType::TENSOR_INT32, 4084 .dimensions = {4}, 4085 .numberOfConsumers = 1, 4086 .scale = 0.0f, 4087 .zeroPoint = 0, 4088 .lifetime = OperandLifeTime::CONSTANT_COPY, 4089 .location = {.poolIndex = 0, .offset = 87, .length = 16}, 4090 }, 4091 { 4092 .type = OperandType::TENSOR_QUANT8_ASYMM, 4093 .dimensions = {0, 1, 1, 1}, 4094 .numberOfConsumers = 0, 4095 .scale = 0.1f, 4096 .zeroPoint = 128, 4097 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4098 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4099 } 4100 }; 4101 4102 const std::vector<Operation> operations = { 4103 { 4104 .type = OperationType::BOX_WITH_NMS_LIMIT, 4105 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, 4106 .outputs = {9, 10, 11, 12}, 4107 }, 4108 { 4109 .type = OperationType::ROI_ALIGN, 4110 .inputs = {13, 10, 12, 14, 15, 16, 17, 18, 19, 20}, 4111 .outputs = {21}, 4112 }, 4113 { 4114 .type = OperationType::SLICE, 4115 .inputs = {21, 22, 23}, 4116 .outputs = {24}, 4117 } 4118 }; 4119 4120 const std::vector<uint32_t> inputIndexes = {13}; 4121 const std::vector<uint32_t> outputIndexes = {9, 11, 24}; 4122 std::vector<uint8_t> operandValues = { 4123 137, 129, 8, 0, 8, 0, 80, 0, 80, 0, 0, 0, 0, 0, 80, 0, 80, 0, 0, 0, 0, 0, 154, 153, 153, 62, 255, 255, 255, 255, 0, 0, 0, 0, 205, 204, 204, 62, 0, 0, 128, 63, 154, 153, 153, 62, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 64, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0 4124 }; 4125 const std::vector<hidl_memory> pools = {}; 4126 4127 return { 4128 .operands = operands, 4129 .operations = operations, 4130 .inputIndexes = inputIndexes, 4131 .outputIndexes = outputIndexes, 4132 .operandValues = operandValues, 4133 .pools = pools, 4134 }; 4135 } 4136 4137 inline bool is_ignored_zero_sized_quant8(int i) { 4138 static std::set<int> ignore = {}; 4139 return ignore.find(i) != ignore.end(); 4140 } 4141 4142 // Create the model 4143 Model createTestModel_zero_sized_float16() { 4144 const std::vector<Operand> operands = { 4145 { 4146 .type = OperandType::TENSOR_FLOAT16, 4147 .dimensions = {1, 2}, 4148 .numberOfConsumers = 1, 4149 .scale = 0.0f, 4150 .zeroPoint = 0, 4151 .lifetime = OperandLifeTime::CONSTANT_COPY, 4152 .location = {.poolIndex = 0, .offset = 0, .length = 4}, 4153 }, 4154 { 4155 .type = OperandType::TENSOR_FLOAT16, 4156 .dimensions = {1, 8}, 4157 .numberOfConsumers = 1, 4158 .scale = 0.0f, 4159 .zeroPoint = 0, 4160 .lifetime = OperandLifeTime::CONSTANT_COPY, 4161 .location = {.poolIndex = 0, .offset = 4, .length = 16}, 4162 }, 4163 { 4164 .type = OperandType::TENSOR_INT32, 4165 .dimensions = {1}, 4166 .numberOfConsumers = 1, 4167 .scale = 0.0f, 4168 .zeroPoint = 0, 4169 .lifetime = OperandLifeTime::CONSTANT_COPY, 4170 .location = {.poolIndex = 0, .offset = 20, .length = 4}, 4171 }, 4172 { 4173 .type = OperandType::FLOAT16, 4174 .dimensions = {}, 4175 .numberOfConsumers = 1, 4176 .scale = 0.0f, 4177 .zeroPoint = 0, 4178 .lifetime = OperandLifeTime::CONSTANT_COPY, 4179 .location = {.poolIndex = 0, .offset = 24, .length = 2}, 4180 }, 4181 { 4182 .type = OperandType::INT32, 4183 .dimensions = {}, 4184 .numberOfConsumers = 1, 4185 .scale = 0.0f, 4186 .zeroPoint = 0, 4187 .lifetime = OperandLifeTime::CONSTANT_COPY, 4188 .location = {.poolIndex = 0, .offset = 26, .length = 4}, 4189 }, 4190 { 4191 .type = OperandType::INT32, 4192 .dimensions = {}, 4193 .numberOfConsumers = 1, 4194 .scale = 0.0f, 4195 .zeroPoint = 0, 4196 .lifetime = OperandLifeTime::CONSTANT_COPY, 4197 .location = {.poolIndex = 0, .offset = 30, .length = 4}, 4198 }, 4199 { 4200 .type = OperandType::FLOAT16, 4201 .dimensions = {}, 4202 .numberOfConsumers = 1, 4203 .scale = 0.0f, 4204 .zeroPoint = 0, 4205 .lifetime = OperandLifeTime::CONSTANT_COPY, 4206 .location = {.poolIndex = 0, .offset = 34, .length = 2}, 4207 }, 4208 { 4209 .type = OperandType::FLOAT16, 4210 .dimensions = {}, 4211 .numberOfConsumers = 1, 4212 .scale = 0.0f, 4213 .zeroPoint = 0, 4214 .lifetime = OperandLifeTime::CONSTANT_COPY, 4215 .location = {.poolIndex = 0, .offset = 36, .length = 2}, 4216 }, 4217 { 4218 .type = OperandType::FLOAT16, 4219 .dimensions = {}, 4220 .numberOfConsumers = 1, 4221 .scale = 0.0f, 4222 .zeroPoint = 0, 4223 .lifetime = OperandLifeTime::CONSTANT_COPY, 4224 .location = {.poolIndex = 0, .offset = 38, .length = 2}, 4225 }, 4226 { 4227 .type = OperandType::TENSOR_FLOAT16, 4228 .dimensions = {0}, 4229 .numberOfConsumers = 0, 4230 .scale = 0.0f, 4231 .zeroPoint = 0, 4232 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4233 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4234 }, 4235 { 4236 .type = OperandType::TENSOR_FLOAT16, 4237 .dimensions = {0, 4}, 4238 .numberOfConsumers = 1, 4239 .scale = 0.0f, 4240 .zeroPoint = 0, 4241 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4242 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4243 }, 4244 { 4245 .type = OperandType::TENSOR_INT32, 4246 .dimensions = {0}, 4247 .numberOfConsumers = 0, 4248 .scale = 0.0f, 4249 .zeroPoint = 0, 4250 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4251 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4252 }, 4253 { 4254 .type = OperandType::TENSOR_INT32, 4255 .dimensions = {0}, 4256 .numberOfConsumers = 1, 4257 .scale = 0.0f, 4258 .zeroPoint = 0, 4259 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4260 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4261 }, 4262 { 4263 .type = OperandType::TENSOR_FLOAT16, 4264 .dimensions = {1, 1, 1, 1}, 4265 .numberOfConsumers = 1, 4266 .scale = 0.0f, 4267 .zeroPoint = 0, 4268 .lifetime = OperandLifeTime::MODEL_INPUT, 4269 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4270 }, 4271 { 4272 .type = OperandType::INT32, 4273 .dimensions = {}, 4274 .numberOfConsumers = 1, 4275 .scale = 0.0f, 4276 .zeroPoint = 0, 4277 .lifetime = OperandLifeTime::CONSTANT_COPY, 4278 .location = {.poolIndex = 0, .offset = 40, .length = 4}, 4279 }, 4280 { 4281 .type = OperandType::INT32, 4282 .dimensions = {}, 4283 .numberOfConsumers = 1, 4284 .scale = 0.0f, 4285 .zeroPoint = 0, 4286 .lifetime = OperandLifeTime::CONSTANT_COPY, 4287 .location = {.poolIndex = 0, .offset = 44, .length = 4}, 4288 }, 4289 { 4290 .type = OperandType::FLOAT16, 4291 .dimensions = {}, 4292 .numberOfConsumers = 1, 4293 .scale = 0.0f, 4294 .zeroPoint = 0, 4295 .lifetime = OperandLifeTime::CONSTANT_COPY, 4296 .location = {.poolIndex = 0, .offset = 48, .length = 2}, 4297 }, 4298 { 4299 .type = OperandType::FLOAT16, 4300 .dimensions = {}, 4301 .numberOfConsumers = 1, 4302 .scale = 0.0f, 4303 .zeroPoint = 0, 4304 .lifetime = OperandLifeTime::CONSTANT_COPY, 4305 .location = {.poolIndex = 0, .offset = 50, .length = 2}, 4306 }, 4307 { 4308 .type = OperandType::INT32, 4309 .dimensions = {}, 4310 .numberOfConsumers = 1, 4311 .scale = 0.0f, 4312 .zeroPoint = 0, 4313 .lifetime = OperandLifeTime::CONSTANT_COPY, 4314 .location = {.poolIndex = 0, .offset = 52, .length = 4}, 4315 }, 4316 { 4317 .type = OperandType::INT32, 4318 .dimensions = {}, 4319 .numberOfConsumers = 1, 4320 .scale = 0.0f, 4321 .zeroPoint = 0, 4322 .lifetime = OperandLifeTime::CONSTANT_COPY, 4323 .location = {.poolIndex = 0, .offset = 56, .length = 4}, 4324 }, 4325 { 4326 .type = OperandType::BOOL, 4327 .dimensions = {}, 4328 .numberOfConsumers = 1, 4329 .scale = 0.0f, 4330 .zeroPoint = 0, 4331 .lifetime = OperandLifeTime::CONSTANT_COPY, 4332 .location = {.poolIndex = 0, .offset = 60, .length = 1}, 4333 }, 4334 { 4335 .type = OperandType::TENSOR_FLOAT16, 4336 .dimensions = {0, 2, 2, 1}, 4337 .numberOfConsumers = 1, 4338 .scale = 0.0f, 4339 .zeroPoint = 0, 4340 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4341 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4342 }, 4343 { 4344 .type = OperandType::TENSOR_INT32, 4345 .dimensions = {4}, 4346 .numberOfConsumers = 1, 4347 .scale = 0.0f, 4348 .zeroPoint = 0, 4349 .lifetime = OperandLifeTime::CONSTANT_COPY, 4350 .location = {.poolIndex = 0, .offset = 61, .length = 16}, 4351 }, 4352 { 4353 .type = OperandType::TENSOR_INT32, 4354 .dimensions = {4}, 4355 .numberOfConsumers = 1, 4356 .scale = 0.0f, 4357 .zeroPoint = 0, 4358 .lifetime = OperandLifeTime::CONSTANT_COPY, 4359 .location = {.poolIndex = 0, .offset = 77, .length = 16}, 4360 }, 4361 { 4362 .type = OperandType::TENSOR_FLOAT16, 4363 .dimensions = {0, 1, 1, 1}, 4364 .numberOfConsumers = 0, 4365 .scale = 0.0f, 4366 .zeroPoint = 0, 4367 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4368 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4369 } 4370 }; 4371 4372 const std::vector<Operation> operations = { 4373 { 4374 .type = OperationType::BOX_WITH_NMS_LIMIT, 4375 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, 4376 .outputs = {9, 10, 11, 12}, 4377 }, 4378 { 4379 .type = OperationType::ROI_ALIGN, 4380 .inputs = {13, 10, 12, 14, 15, 16, 17, 18, 19, 20}, 4381 .outputs = {21}, 4382 }, 4383 { 4384 .type = OperationType::SLICE, 4385 .inputs = {21, 22, 23}, 4386 .outputs = {24}, 4387 } 4388 }; 4389 4390 const std::vector<uint32_t> inputIndexes = {13}; 4391 const std::vector<uint32_t> outputIndexes = {9, 11, 24}; 4392 std::vector<uint8_t> operandValues = { 4393 51, 59, 102, 46, 0, 60, 0, 60, 0, 73, 0, 73, 0, 0, 0, 0, 0, 73, 0, 73, 0, 0, 0, 0, 205, 52, 255, 255, 255, 255, 0, 0, 0, 0, 102, 54, 0, 60, 205, 52, 2, 0, 0, 0, 2, 0, 0, 0, 0, 64, 0, 64, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0 4394 }; 4395 const std::vector<hidl_memory> pools = {}; 4396 4397 return { 4398 .operands = operands, 4399 .operations = operations, 4400 .inputIndexes = inputIndexes, 4401 .outputIndexes = outputIndexes, 4402 .operandValues = operandValues, 4403 .pools = pools, 4404 }; 4405 } 4406 4407 inline bool is_ignored_zero_sized_float16(int i) { 4408 static std::set<int> ignore = {}; 4409 return ignore.find(i) != ignore.end(); 4410 } 4411 4412 // Create the model 4413 Model createTestModel_zero_sized_dynamic_output_shape() { 4414 const std::vector<Operand> operands = { 4415 { 4416 .type = OperandType::TENSOR_FLOAT32, 4417 .dimensions = {1, 2}, 4418 .numberOfConsumers = 1, 4419 .scale = 0.0f, 4420 .zeroPoint = 0, 4421 .lifetime = OperandLifeTime::CONSTANT_COPY, 4422 .location = {.poolIndex = 0, .offset = 0, .length = 8}, 4423 }, 4424 { 4425 .type = OperandType::TENSOR_FLOAT32, 4426 .dimensions = {1, 8}, 4427 .numberOfConsumers = 1, 4428 .scale = 0.0f, 4429 .zeroPoint = 0, 4430 .lifetime = OperandLifeTime::CONSTANT_COPY, 4431 .location = {.poolIndex = 0, .offset = 8, .length = 32}, 4432 }, 4433 { 4434 .type = OperandType::TENSOR_INT32, 4435 .dimensions = {1}, 4436 .numberOfConsumers = 1, 4437 .scale = 0.0f, 4438 .zeroPoint = 0, 4439 .lifetime = OperandLifeTime::CONSTANT_COPY, 4440 .location = {.poolIndex = 0, .offset = 40, .length = 4}, 4441 }, 4442 { 4443 .type = OperandType::FLOAT32, 4444 .dimensions = {}, 4445 .numberOfConsumers = 1, 4446 .scale = 0.0f, 4447 .zeroPoint = 0, 4448 .lifetime = OperandLifeTime::CONSTANT_COPY, 4449 .location = {.poolIndex = 0, .offset = 44, .length = 4}, 4450 }, 4451 { 4452 .type = OperandType::INT32, 4453 .dimensions = {}, 4454 .numberOfConsumers = 1, 4455 .scale = 0.0f, 4456 .zeroPoint = 0, 4457 .lifetime = OperandLifeTime::CONSTANT_COPY, 4458 .location = {.poolIndex = 0, .offset = 48, .length = 4}, 4459 }, 4460 { 4461 .type = OperandType::INT32, 4462 .dimensions = {}, 4463 .numberOfConsumers = 1, 4464 .scale = 0.0f, 4465 .zeroPoint = 0, 4466 .lifetime = OperandLifeTime::CONSTANT_COPY, 4467 .location = {.poolIndex = 0, .offset = 52, .length = 4}, 4468 }, 4469 { 4470 .type = OperandType::FLOAT32, 4471 .dimensions = {}, 4472 .numberOfConsumers = 1, 4473 .scale = 0.0f, 4474 .zeroPoint = 0, 4475 .lifetime = OperandLifeTime::CONSTANT_COPY, 4476 .location = {.poolIndex = 0, .offset = 56, .length = 4}, 4477 }, 4478 { 4479 .type = OperandType::FLOAT32, 4480 .dimensions = {}, 4481 .numberOfConsumers = 1, 4482 .scale = 0.0f, 4483 .zeroPoint = 0, 4484 .lifetime = OperandLifeTime::CONSTANT_COPY, 4485 .location = {.poolIndex = 0, .offset = 60, .length = 4}, 4486 }, 4487 { 4488 .type = OperandType::FLOAT32, 4489 .dimensions = {}, 4490 .numberOfConsumers = 1, 4491 .scale = 0.0f, 4492 .zeroPoint = 0, 4493 .lifetime = OperandLifeTime::CONSTANT_COPY, 4494 .location = {.poolIndex = 0, .offset = 64, .length = 4}, 4495 }, 4496 { 4497 .type = OperandType::TENSOR_FLOAT32, 4498 .dimensions = {0}, 4499 .numberOfConsumers = 0, 4500 .scale = 0.0f, 4501 .zeroPoint = 0, 4502 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4503 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4504 }, 4505 { 4506 .type = OperandType::TENSOR_FLOAT32, 4507 .dimensions = {0, 4}, 4508 .numberOfConsumers = 1, 4509 .scale = 0.0f, 4510 .zeroPoint = 0, 4511 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4512 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4513 }, 4514 { 4515 .type = OperandType::TENSOR_INT32, 4516 .dimensions = {0}, 4517 .numberOfConsumers = 0, 4518 .scale = 0.0f, 4519 .zeroPoint = 0, 4520 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4521 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4522 }, 4523 { 4524 .type = OperandType::TENSOR_INT32, 4525 .dimensions = {0}, 4526 .numberOfConsumers = 1, 4527 .scale = 0.0f, 4528 .zeroPoint = 0, 4529 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4530 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4531 }, 4532 { 4533 .type = OperandType::TENSOR_FLOAT32, 4534 .dimensions = {1, 1, 1, 1}, 4535 .numberOfConsumers = 1, 4536 .scale = 0.0f, 4537 .zeroPoint = 0, 4538 .lifetime = OperandLifeTime::MODEL_INPUT, 4539 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4540 }, 4541 { 4542 .type = OperandType::INT32, 4543 .dimensions = {}, 4544 .numberOfConsumers = 1, 4545 .scale = 0.0f, 4546 .zeroPoint = 0, 4547 .lifetime = OperandLifeTime::CONSTANT_COPY, 4548 .location = {.poolIndex = 0, .offset = 68, .length = 4}, 4549 }, 4550 { 4551 .type = OperandType::INT32, 4552 .dimensions = {}, 4553 .numberOfConsumers = 1, 4554 .scale = 0.0f, 4555 .zeroPoint = 0, 4556 .lifetime = OperandLifeTime::CONSTANT_COPY, 4557 .location = {.poolIndex = 0, .offset = 72, .length = 4}, 4558 }, 4559 { 4560 .type = OperandType::FLOAT32, 4561 .dimensions = {}, 4562 .numberOfConsumers = 1, 4563 .scale = 0.0f, 4564 .zeroPoint = 0, 4565 .lifetime = OperandLifeTime::CONSTANT_COPY, 4566 .location = {.poolIndex = 0, .offset = 76, .length = 4}, 4567 }, 4568 { 4569 .type = OperandType::FLOAT32, 4570 .dimensions = {}, 4571 .numberOfConsumers = 1, 4572 .scale = 0.0f, 4573 .zeroPoint = 0, 4574 .lifetime = OperandLifeTime::CONSTANT_COPY, 4575 .location = {.poolIndex = 0, .offset = 80, .length = 4}, 4576 }, 4577 { 4578 .type = OperandType::INT32, 4579 .dimensions = {}, 4580 .numberOfConsumers = 1, 4581 .scale = 0.0f, 4582 .zeroPoint = 0, 4583 .lifetime = OperandLifeTime::CONSTANT_COPY, 4584 .location = {.poolIndex = 0, .offset = 84, .length = 4}, 4585 }, 4586 { 4587 .type = OperandType::INT32, 4588 .dimensions = {}, 4589 .numberOfConsumers = 1, 4590 .scale = 0.0f, 4591 .zeroPoint = 0, 4592 .lifetime = OperandLifeTime::CONSTANT_COPY, 4593 .location = {.poolIndex = 0, .offset = 88, .length = 4}, 4594 }, 4595 { 4596 .type = OperandType::BOOL, 4597 .dimensions = {}, 4598 .numberOfConsumers = 1, 4599 .scale = 0.0f, 4600 .zeroPoint = 0, 4601 .lifetime = OperandLifeTime::CONSTANT_COPY, 4602 .location = {.poolIndex = 0, .offset = 92, .length = 1}, 4603 }, 4604 { 4605 .type = OperandType::TENSOR_FLOAT32, 4606 .dimensions = {0, 2, 2, 1}, 4607 .numberOfConsumers = 1, 4608 .scale = 0.0f, 4609 .zeroPoint = 0, 4610 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4611 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4612 }, 4613 { 4614 .type = OperandType::TENSOR_INT32, 4615 .dimensions = {4}, 4616 .numberOfConsumers = 1, 4617 .scale = 0.0f, 4618 .zeroPoint = 0, 4619 .lifetime = OperandLifeTime::CONSTANT_COPY, 4620 .location = {.poolIndex = 0, .offset = 93, .length = 16}, 4621 }, 4622 { 4623 .type = OperandType::TENSOR_INT32, 4624 .dimensions = {4}, 4625 .numberOfConsumers = 1, 4626 .scale = 0.0f, 4627 .zeroPoint = 0, 4628 .lifetime = OperandLifeTime::CONSTANT_COPY, 4629 .location = {.poolIndex = 0, .offset = 109, .length = 16}, 4630 }, 4631 { 4632 .type = OperandType::TENSOR_FLOAT32, 4633 .dimensions = {0, 0, 0, 0}, 4634 .numberOfConsumers = 0, 4635 .scale = 0.0f, 4636 .zeroPoint = 0, 4637 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4638 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4639 } 4640 }; 4641 4642 const std::vector<Operation> operations = { 4643 { 4644 .type = OperationType::BOX_WITH_NMS_LIMIT, 4645 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, 4646 .outputs = {9, 10, 11, 12}, 4647 }, 4648 { 4649 .type = OperationType::ROI_ALIGN, 4650 .inputs = {13, 10, 12, 14, 15, 16, 17, 18, 19, 20}, 4651 .outputs = {21}, 4652 }, 4653 { 4654 .type = OperationType::SLICE, 4655 .inputs = {21, 22, 23}, 4656 .outputs = {24}, 4657 } 4658 }; 4659 4660 const std::vector<uint32_t> inputIndexes = {13}; 4661 const std::vector<uint32_t> outputIndexes = {9, 11, 24}; 4662 std::vector<uint8_t> operandValues = { 4663 102, 102, 102, 63, 205, 204, 204, 61, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 32, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 32, 65, 0, 0, 0, 0, 154, 153, 153, 62, 255, 255, 255, 255, 0, 0, 0, 0, 205, 204, 204, 62, 0, 0, 128, 63, 154, 153, 153, 62, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 64, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0 4664 }; 4665 const std::vector<hidl_memory> pools = {}; 4666 4667 return { 4668 .operands = operands, 4669 .operations = operations, 4670 .inputIndexes = inputIndexes, 4671 .outputIndexes = outputIndexes, 4672 .operandValues = operandValues, 4673 .pools = pools, 4674 }; 4675 } 4676 4677 inline bool is_ignored_zero_sized_dynamic_output_shape(int i) { 4678 static std::set<int> ignore = {}; 4679 return ignore.find(i) != ignore.end(); 4680 } 4681 4682 // Create the model 4683 Model createTestModel_zero_sized_dynamic_output_shape_relaxed() { 4684 const std::vector<Operand> operands = { 4685 { 4686 .type = OperandType::TENSOR_FLOAT32, 4687 .dimensions = {1, 2}, 4688 .numberOfConsumers = 1, 4689 .scale = 0.0f, 4690 .zeroPoint = 0, 4691 .lifetime = OperandLifeTime::CONSTANT_COPY, 4692 .location = {.poolIndex = 0, .offset = 0, .length = 8}, 4693 }, 4694 { 4695 .type = OperandType::TENSOR_FLOAT32, 4696 .dimensions = {1, 8}, 4697 .numberOfConsumers = 1, 4698 .scale = 0.0f, 4699 .zeroPoint = 0, 4700 .lifetime = OperandLifeTime::CONSTANT_COPY, 4701 .location = {.poolIndex = 0, .offset = 8, .length = 32}, 4702 }, 4703 { 4704 .type = OperandType::TENSOR_INT32, 4705 .dimensions = {1}, 4706 .numberOfConsumers = 1, 4707 .scale = 0.0f, 4708 .zeroPoint = 0, 4709 .lifetime = OperandLifeTime::CONSTANT_COPY, 4710 .location = {.poolIndex = 0, .offset = 40, .length = 4}, 4711 }, 4712 { 4713 .type = OperandType::FLOAT32, 4714 .dimensions = {}, 4715 .numberOfConsumers = 1, 4716 .scale = 0.0f, 4717 .zeroPoint = 0, 4718 .lifetime = OperandLifeTime::CONSTANT_COPY, 4719 .location = {.poolIndex = 0, .offset = 44, .length = 4}, 4720 }, 4721 { 4722 .type = OperandType::INT32, 4723 .dimensions = {}, 4724 .numberOfConsumers = 1, 4725 .scale = 0.0f, 4726 .zeroPoint = 0, 4727 .lifetime = OperandLifeTime::CONSTANT_COPY, 4728 .location = {.poolIndex = 0, .offset = 48, .length = 4}, 4729 }, 4730 { 4731 .type = OperandType::INT32, 4732 .dimensions = {}, 4733 .numberOfConsumers = 1, 4734 .scale = 0.0f, 4735 .zeroPoint = 0, 4736 .lifetime = OperandLifeTime::CONSTANT_COPY, 4737 .location = {.poolIndex = 0, .offset = 52, .length = 4}, 4738 }, 4739 { 4740 .type = OperandType::FLOAT32, 4741 .dimensions = {}, 4742 .numberOfConsumers = 1, 4743 .scale = 0.0f, 4744 .zeroPoint = 0, 4745 .lifetime = OperandLifeTime::CONSTANT_COPY, 4746 .location = {.poolIndex = 0, .offset = 56, .length = 4}, 4747 }, 4748 { 4749 .type = OperandType::FLOAT32, 4750 .dimensions = {}, 4751 .numberOfConsumers = 1, 4752 .scale = 0.0f, 4753 .zeroPoint = 0, 4754 .lifetime = OperandLifeTime::CONSTANT_COPY, 4755 .location = {.poolIndex = 0, .offset = 60, .length = 4}, 4756 }, 4757 { 4758 .type = OperandType::FLOAT32, 4759 .dimensions = {}, 4760 .numberOfConsumers = 1, 4761 .scale = 0.0f, 4762 .zeroPoint = 0, 4763 .lifetime = OperandLifeTime::CONSTANT_COPY, 4764 .location = {.poolIndex = 0, .offset = 64, .length = 4}, 4765 }, 4766 { 4767 .type = OperandType::TENSOR_FLOAT32, 4768 .dimensions = {0}, 4769 .numberOfConsumers = 0, 4770 .scale = 0.0f, 4771 .zeroPoint = 0, 4772 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4773 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4774 }, 4775 { 4776 .type = OperandType::TENSOR_FLOAT32, 4777 .dimensions = {0, 4}, 4778 .numberOfConsumers = 1, 4779 .scale = 0.0f, 4780 .zeroPoint = 0, 4781 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4782 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4783 }, 4784 { 4785 .type = OperandType::TENSOR_INT32, 4786 .dimensions = {0}, 4787 .numberOfConsumers = 0, 4788 .scale = 0.0f, 4789 .zeroPoint = 0, 4790 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4791 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4792 }, 4793 { 4794 .type = OperandType::TENSOR_INT32, 4795 .dimensions = {0}, 4796 .numberOfConsumers = 1, 4797 .scale = 0.0f, 4798 .zeroPoint = 0, 4799 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4800 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4801 }, 4802 { 4803 .type = OperandType::TENSOR_FLOAT32, 4804 .dimensions = {1, 1, 1, 1}, 4805 .numberOfConsumers = 1, 4806 .scale = 0.0f, 4807 .zeroPoint = 0, 4808 .lifetime = OperandLifeTime::MODEL_INPUT, 4809 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4810 }, 4811 { 4812 .type = OperandType::INT32, 4813 .dimensions = {}, 4814 .numberOfConsumers = 1, 4815 .scale = 0.0f, 4816 .zeroPoint = 0, 4817 .lifetime = OperandLifeTime::CONSTANT_COPY, 4818 .location = {.poolIndex = 0, .offset = 68, .length = 4}, 4819 }, 4820 { 4821 .type = OperandType::INT32, 4822 .dimensions = {}, 4823 .numberOfConsumers = 1, 4824 .scale = 0.0f, 4825 .zeroPoint = 0, 4826 .lifetime = OperandLifeTime::CONSTANT_COPY, 4827 .location = {.poolIndex = 0, .offset = 72, .length = 4}, 4828 }, 4829 { 4830 .type = OperandType::FLOAT32, 4831 .dimensions = {}, 4832 .numberOfConsumers = 1, 4833 .scale = 0.0f, 4834 .zeroPoint = 0, 4835 .lifetime = OperandLifeTime::CONSTANT_COPY, 4836 .location = {.poolIndex = 0, .offset = 76, .length = 4}, 4837 }, 4838 { 4839 .type = OperandType::FLOAT32, 4840 .dimensions = {}, 4841 .numberOfConsumers = 1, 4842 .scale = 0.0f, 4843 .zeroPoint = 0, 4844 .lifetime = OperandLifeTime::CONSTANT_COPY, 4845 .location = {.poolIndex = 0, .offset = 80, .length = 4}, 4846 }, 4847 { 4848 .type = OperandType::INT32, 4849 .dimensions = {}, 4850 .numberOfConsumers = 1, 4851 .scale = 0.0f, 4852 .zeroPoint = 0, 4853 .lifetime = OperandLifeTime::CONSTANT_COPY, 4854 .location = {.poolIndex = 0, .offset = 84, .length = 4}, 4855 }, 4856 { 4857 .type = OperandType::INT32, 4858 .dimensions = {}, 4859 .numberOfConsumers = 1, 4860 .scale = 0.0f, 4861 .zeroPoint = 0, 4862 .lifetime = OperandLifeTime::CONSTANT_COPY, 4863 .location = {.poolIndex = 0, .offset = 88, .length = 4}, 4864 }, 4865 { 4866 .type = OperandType::BOOL, 4867 .dimensions = {}, 4868 .numberOfConsumers = 1, 4869 .scale = 0.0f, 4870 .zeroPoint = 0, 4871 .lifetime = OperandLifeTime::CONSTANT_COPY, 4872 .location = {.poolIndex = 0, .offset = 92, .length = 1}, 4873 }, 4874 { 4875 .type = OperandType::TENSOR_FLOAT32, 4876 .dimensions = {0, 2, 2, 1}, 4877 .numberOfConsumers = 1, 4878 .scale = 0.0f, 4879 .zeroPoint = 0, 4880 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 4881 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4882 }, 4883 { 4884 .type = OperandType::TENSOR_INT32, 4885 .dimensions = {4}, 4886 .numberOfConsumers = 1, 4887 .scale = 0.0f, 4888 .zeroPoint = 0, 4889 .lifetime = OperandLifeTime::CONSTANT_COPY, 4890 .location = {.poolIndex = 0, .offset = 93, .length = 16}, 4891 }, 4892 { 4893 .type = OperandType::TENSOR_INT32, 4894 .dimensions = {4}, 4895 .numberOfConsumers = 1, 4896 .scale = 0.0f, 4897 .zeroPoint = 0, 4898 .lifetime = OperandLifeTime::CONSTANT_COPY, 4899 .location = {.poolIndex = 0, .offset = 109, .length = 16}, 4900 }, 4901 { 4902 .type = OperandType::TENSOR_FLOAT32, 4903 .dimensions = {0, 0, 0, 0}, 4904 .numberOfConsumers = 0, 4905 .scale = 0.0f, 4906 .zeroPoint = 0, 4907 .lifetime = OperandLifeTime::MODEL_OUTPUT, 4908 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 4909 } 4910 }; 4911 4912 const std::vector<Operation> operations = { 4913 { 4914 .type = OperationType::BOX_WITH_NMS_LIMIT, 4915 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, 4916 .outputs = {9, 10, 11, 12}, 4917 }, 4918 { 4919 .type = OperationType::ROI_ALIGN, 4920 .inputs = {13, 10, 12, 14, 15, 16, 17, 18, 19, 20}, 4921 .outputs = {21}, 4922 }, 4923 { 4924 .type = OperationType::SLICE, 4925 .inputs = {21, 22, 23}, 4926 .outputs = {24}, 4927 } 4928 }; 4929 4930 const std::vector<uint32_t> inputIndexes = {13}; 4931 const std::vector<uint32_t> outputIndexes = {9, 11, 24}; 4932 std::vector<uint8_t> operandValues = { 4933 102, 102, 102, 63, 205, 204, 204, 61, 0, 0, 128, 63, 0, 0, 128, 63, 0, 0, 32, 65, 0, 0, 32, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 65, 0, 0, 32, 65, 0, 0, 0, 0, 154, 153, 153, 62, 255, 255, 255, 255, 0, 0, 0, 0, 205, 204, 204, 62, 0, 0, 128, 63, 154, 153, 153, 62, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 64, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0 4934 }; 4935 const std::vector<hidl_memory> pools = {}; 4936 4937 return { 4938 .operands = operands, 4939 .operations = operations, 4940 .inputIndexes = inputIndexes, 4941 .outputIndexes = outputIndexes, 4942 .operandValues = operandValues, 4943 .pools = pools, 4944 .relaxComputationFloat32toFloat16 = true, 4945 }; 4946 } 4947 4948 inline bool is_ignored_zero_sized_dynamic_output_shape_relaxed(int i) { 4949 static std::set<int> ignore = {}; 4950 return ignore.find(i) != ignore.end(); 4951 } 4952 4953 // Create the model 4954 Model createTestModel_zero_sized_dynamic_output_shape_quant8() { 4955 const std::vector<Operand> operands = { 4956 { 4957 .type = OperandType::TENSOR_QUANT8_ASYMM, 4958 .dimensions = {1, 2}, 4959 .numberOfConsumers = 1, 4960 .scale = 0.1f, 4961 .zeroPoint = 128, 4962 .lifetime = OperandLifeTime::CONSTANT_COPY, 4963 .location = {.poolIndex = 0, .offset = 0, .length = 2}, 4964 }, 4965 { 4966 .type = OperandType::TENSOR_QUANT16_ASYMM, 4967 .dimensions = {1, 8}, 4968 .numberOfConsumers = 1, 4969 .scale = 0.125f, 4970 .zeroPoint = 0, 4971 .lifetime = OperandLifeTime::CONSTANT_COPY, 4972 .location = {.poolIndex = 0, .offset = 2, .length = 16}, 4973 }, 4974 { 4975 .type = OperandType::TENSOR_INT32, 4976 .dimensions = {1}, 4977 .numberOfConsumers = 1, 4978 .scale = 0.0f, 4979 .zeroPoint = 0, 4980 .lifetime = OperandLifeTime::CONSTANT_COPY, 4981 .location = {.poolIndex = 0, .offset = 18, .length = 4}, 4982 }, 4983 { 4984 .type = OperandType::FLOAT32, 4985 .dimensions = {}, 4986 .numberOfConsumers = 1, 4987 .scale = 0.0f, 4988 .zeroPoint = 0, 4989 .lifetime = OperandLifeTime::CONSTANT_COPY, 4990 .location = {.poolIndex = 0, .offset = 22, .length = 4}, 4991 }, 4992 { 4993 .type = OperandType::INT32, 4994 .dimensions = {}, 4995 .numberOfConsumers = 1, 4996 .scale = 0.0f, 4997 .zeroPoint = 0, 4998 .lifetime = OperandLifeTime::CONSTANT_COPY, 4999 .location = {.poolIndex = 0, .offset = 26, .length = 4}, 5000 }, 5001 { 5002 .type = OperandType::INT32, 5003 .dimensions = {}, 5004 .numberOfConsumers = 1, 5005 .scale = 0.0f, 5006 .zeroPoint = 0, 5007 .lifetime = OperandLifeTime::CONSTANT_COPY, 5008 .location = {.poolIndex = 0, .offset = 30, .length = 4}, 5009 }, 5010 { 5011 .type = OperandType::FLOAT32, 5012 .dimensions = {}, 5013 .numberOfConsumers = 1, 5014 .scale = 0.0f, 5015 .zeroPoint = 0, 5016 .lifetime = OperandLifeTime::CONSTANT_COPY, 5017 .location = {.poolIndex = 0, .offset = 34, .length = 4}, 5018 }, 5019 { 5020 .type = OperandType::FLOAT32, 5021 .dimensions = {}, 5022 .numberOfConsumers = 1, 5023 .scale = 0.0f, 5024 .zeroPoint = 0, 5025 .lifetime = OperandLifeTime::CONSTANT_COPY, 5026 .location = {.poolIndex = 0, .offset = 38, .length = 4}, 5027 }, 5028 { 5029 .type = OperandType::FLOAT32, 5030 .dimensions = {}, 5031 .numberOfConsumers = 1, 5032 .scale = 0.0f, 5033 .zeroPoint = 0, 5034 .lifetime = OperandLifeTime::CONSTANT_COPY, 5035 .location = {.poolIndex = 0, .offset = 42, .length = 4}, 5036 }, 5037 { 5038 .type = OperandType::TENSOR_QUANT8_ASYMM, 5039 .dimensions = {0}, 5040 .numberOfConsumers = 0, 5041 .scale = 0.1f, 5042 .zeroPoint = 128, 5043 .lifetime = OperandLifeTime::MODEL_OUTPUT, 5044 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5045 }, 5046 { 5047 .type = OperandType::TENSOR_QUANT16_ASYMM, 5048 .dimensions = {0, 4}, 5049 .numberOfConsumers = 1, 5050 .scale = 0.125f, 5051 .zeroPoint = 0, 5052 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 5053 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5054 }, 5055 { 5056 .type = OperandType::TENSOR_INT32, 5057 .dimensions = {0}, 5058 .numberOfConsumers = 0, 5059 .scale = 0.0f, 5060 .zeroPoint = 0, 5061 .lifetime = OperandLifeTime::MODEL_OUTPUT, 5062 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5063 }, 5064 { 5065 .type = OperandType::TENSOR_INT32, 5066 .dimensions = {0}, 5067 .numberOfConsumers = 1, 5068 .scale = 0.0f, 5069 .zeroPoint = 0, 5070 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 5071 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5072 }, 5073 { 5074 .type = OperandType::TENSOR_QUANT8_ASYMM, 5075 .dimensions = {1, 1, 1, 1}, 5076 .numberOfConsumers = 1, 5077 .scale = 0.1f, 5078 .zeroPoint = 128, 5079 .lifetime = OperandLifeTime::MODEL_INPUT, 5080 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5081 }, 5082 { 5083 .type = OperandType::INT32, 5084 .dimensions = {}, 5085 .numberOfConsumers = 1, 5086 .scale = 0.0f, 5087 .zeroPoint = 0, 5088 .lifetime = OperandLifeTime::CONSTANT_COPY, 5089 .location = {.poolIndex = 0, .offset = 46, .length = 4}, 5090 }, 5091 { 5092 .type = OperandType::INT32, 5093 .dimensions = {}, 5094 .numberOfConsumers = 1, 5095 .scale = 0.0f, 5096 .zeroPoint = 0, 5097 .lifetime = OperandLifeTime::CONSTANT_COPY, 5098 .location = {.poolIndex = 0, .offset = 50, .length = 4}, 5099 }, 5100 { 5101 .type = OperandType::FLOAT32, 5102 .dimensions = {}, 5103 .numberOfConsumers = 1, 5104 .scale = 0.0f, 5105 .zeroPoint = 0, 5106 .lifetime = OperandLifeTime::CONSTANT_COPY, 5107 .location = {.poolIndex = 0, .offset = 54, .length = 4}, 5108 }, 5109 { 5110 .type = OperandType::FLOAT32, 5111 .dimensions = {}, 5112 .numberOfConsumers = 1, 5113 .scale = 0.0f, 5114 .zeroPoint = 0, 5115 .lifetime = OperandLifeTime::CONSTANT_COPY, 5116 .location = {.poolIndex = 0, .offset = 58, .length = 4}, 5117 }, 5118 { 5119 .type = OperandType::INT32, 5120 .dimensions = {}, 5121 .numberOfConsumers = 1, 5122 .scale = 0.0f, 5123 .zeroPoint = 0, 5124 .lifetime = OperandLifeTime::CONSTANT_COPY, 5125 .location = {.poolIndex = 0, .offset = 62, .length = 4}, 5126 }, 5127 { 5128 .type = OperandType::INT32, 5129 .dimensions = {}, 5130 .numberOfConsumers = 1, 5131 .scale = 0.0f, 5132 .zeroPoint = 0, 5133 .lifetime = OperandLifeTime::CONSTANT_COPY, 5134 .location = {.poolIndex = 0, .offset = 66, .length = 4}, 5135 }, 5136 { 5137 .type = OperandType::BOOL, 5138 .dimensions = {}, 5139 .numberOfConsumers = 1, 5140 .scale = 0.0f, 5141 .zeroPoint = 0, 5142 .lifetime = OperandLifeTime::CONSTANT_COPY, 5143 .location = {.poolIndex = 0, .offset = 70, .length = 1}, 5144 }, 5145 { 5146 .type = OperandType::TENSOR_QUANT8_ASYMM, 5147 .dimensions = {0, 2, 2, 1}, 5148 .numberOfConsumers = 1, 5149 .scale = 0.1f, 5150 .zeroPoint = 128, 5151 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 5152 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5153 }, 5154 { 5155 .type = OperandType::TENSOR_INT32, 5156 .dimensions = {4}, 5157 .numberOfConsumers = 1, 5158 .scale = 0.0f, 5159 .zeroPoint = 0, 5160 .lifetime = OperandLifeTime::CONSTANT_COPY, 5161 .location = {.poolIndex = 0, .offset = 71, .length = 16}, 5162 }, 5163 { 5164 .type = OperandType::TENSOR_INT32, 5165 .dimensions = {4}, 5166 .numberOfConsumers = 1, 5167 .scale = 0.0f, 5168 .zeroPoint = 0, 5169 .lifetime = OperandLifeTime::CONSTANT_COPY, 5170 .location = {.poolIndex = 0, .offset = 87, .length = 16}, 5171 }, 5172 { 5173 .type = OperandType::TENSOR_QUANT8_ASYMM, 5174 .dimensions = {0, 0, 0, 0}, 5175 .numberOfConsumers = 0, 5176 .scale = 0.1f, 5177 .zeroPoint = 128, 5178 .lifetime = OperandLifeTime::MODEL_OUTPUT, 5179 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5180 } 5181 }; 5182 5183 const std::vector<Operation> operations = { 5184 { 5185 .type = OperationType::BOX_WITH_NMS_LIMIT, 5186 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, 5187 .outputs = {9, 10, 11, 12}, 5188 }, 5189 { 5190 .type = OperationType::ROI_ALIGN, 5191 .inputs = {13, 10, 12, 14, 15, 16, 17, 18, 19, 20}, 5192 .outputs = {21}, 5193 }, 5194 { 5195 .type = OperationType::SLICE, 5196 .inputs = {21, 22, 23}, 5197 .outputs = {24}, 5198 } 5199 }; 5200 5201 const std::vector<uint32_t> inputIndexes = {13}; 5202 const std::vector<uint32_t> outputIndexes = {9, 11, 24}; 5203 std::vector<uint8_t> operandValues = { 5204 137, 129, 8, 0, 8, 0, 80, 0, 80, 0, 0, 0, 0, 0, 80, 0, 80, 0, 0, 0, 0, 0, 154, 153, 153, 62, 255, 255, 255, 255, 0, 0, 0, 0, 205, 204, 204, 62, 0, 0, 128, 63, 154, 153, 153, 62, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 64, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0 5205 }; 5206 const std::vector<hidl_memory> pools = {}; 5207 5208 return { 5209 .operands = operands, 5210 .operations = operations, 5211 .inputIndexes = inputIndexes, 5212 .outputIndexes = outputIndexes, 5213 .operandValues = operandValues, 5214 .pools = pools, 5215 }; 5216 } 5217 5218 inline bool is_ignored_zero_sized_dynamic_output_shape_quant8(int i) { 5219 static std::set<int> ignore = {}; 5220 return ignore.find(i) != ignore.end(); 5221 } 5222 5223 // Create the model 5224 Model createTestModel_zero_sized_dynamic_output_shape_float16() { 5225 const std::vector<Operand> operands = { 5226 { 5227 .type = OperandType::TENSOR_FLOAT16, 5228 .dimensions = {1, 2}, 5229 .numberOfConsumers = 1, 5230 .scale = 0.0f, 5231 .zeroPoint = 0, 5232 .lifetime = OperandLifeTime::CONSTANT_COPY, 5233 .location = {.poolIndex = 0, .offset = 0, .length = 4}, 5234 }, 5235 { 5236 .type = OperandType::TENSOR_FLOAT16, 5237 .dimensions = {1, 8}, 5238 .numberOfConsumers = 1, 5239 .scale = 0.0f, 5240 .zeroPoint = 0, 5241 .lifetime = OperandLifeTime::CONSTANT_COPY, 5242 .location = {.poolIndex = 0, .offset = 4, .length = 16}, 5243 }, 5244 { 5245 .type = OperandType::TENSOR_INT32, 5246 .dimensions = {1}, 5247 .numberOfConsumers = 1, 5248 .scale = 0.0f, 5249 .zeroPoint = 0, 5250 .lifetime = OperandLifeTime::CONSTANT_COPY, 5251 .location = {.poolIndex = 0, .offset = 20, .length = 4}, 5252 }, 5253 { 5254 .type = OperandType::FLOAT16, 5255 .dimensions = {}, 5256 .numberOfConsumers = 1, 5257 .scale = 0.0f, 5258 .zeroPoint = 0, 5259 .lifetime = OperandLifeTime::CONSTANT_COPY, 5260 .location = {.poolIndex = 0, .offset = 24, .length = 2}, 5261 }, 5262 { 5263 .type = OperandType::INT32, 5264 .dimensions = {}, 5265 .numberOfConsumers = 1, 5266 .scale = 0.0f, 5267 .zeroPoint = 0, 5268 .lifetime = OperandLifeTime::CONSTANT_COPY, 5269 .location = {.poolIndex = 0, .offset = 26, .length = 4}, 5270 }, 5271 { 5272 .type = OperandType::INT32, 5273 .dimensions = {}, 5274 .numberOfConsumers = 1, 5275 .scale = 0.0f, 5276 .zeroPoint = 0, 5277 .lifetime = OperandLifeTime::CONSTANT_COPY, 5278 .location = {.poolIndex = 0, .offset = 30, .length = 4}, 5279 }, 5280 { 5281 .type = OperandType::FLOAT16, 5282 .dimensions = {}, 5283 .numberOfConsumers = 1, 5284 .scale = 0.0f, 5285 .zeroPoint = 0, 5286 .lifetime = OperandLifeTime::CONSTANT_COPY, 5287 .location = {.poolIndex = 0, .offset = 34, .length = 2}, 5288 }, 5289 { 5290 .type = OperandType::FLOAT16, 5291 .dimensions = {}, 5292 .numberOfConsumers = 1, 5293 .scale = 0.0f, 5294 .zeroPoint = 0, 5295 .lifetime = OperandLifeTime::CONSTANT_COPY, 5296 .location = {.poolIndex = 0, .offset = 36, .length = 2}, 5297 }, 5298 { 5299 .type = OperandType::FLOAT16, 5300 .dimensions = {}, 5301 .numberOfConsumers = 1, 5302 .scale = 0.0f, 5303 .zeroPoint = 0, 5304 .lifetime = OperandLifeTime::CONSTANT_COPY, 5305 .location = {.poolIndex = 0, .offset = 38, .length = 2}, 5306 }, 5307 { 5308 .type = OperandType::TENSOR_FLOAT16, 5309 .dimensions = {0}, 5310 .numberOfConsumers = 0, 5311 .scale = 0.0f, 5312 .zeroPoint = 0, 5313 .lifetime = OperandLifeTime::MODEL_OUTPUT, 5314 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5315 }, 5316 { 5317 .type = OperandType::TENSOR_FLOAT16, 5318 .dimensions = {0, 4}, 5319 .numberOfConsumers = 1, 5320 .scale = 0.0f, 5321 .zeroPoint = 0, 5322 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 5323 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5324 }, 5325 { 5326 .type = OperandType::TENSOR_INT32, 5327 .dimensions = {0}, 5328 .numberOfConsumers = 0, 5329 .scale = 0.0f, 5330 .zeroPoint = 0, 5331 .lifetime = OperandLifeTime::MODEL_OUTPUT, 5332 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5333 }, 5334 { 5335 .type = OperandType::TENSOR_INT32, 5336 .dimensions = {0}, 5337 .numberOfConsumers = 1, 5338 .scale = 0.0f, 5339 .zeroPoint = 0, 5340 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 5341 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5342 }, 5343 { 5344 .type = OperandType::TENSOR_FLOAT16, 5345 .dimensions = {1, 1, 1, 1}, 5346 .numberOfConsumers = 1, 5347 .scale = 0.0f, 5348 .zeroPoint = 0, 5349 .lifetime = OperandLifeTime::MODEL_INPUT, 5350 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5351 }, 5352 { 5353 .type = OperandType::INT32, 5354 .dimensions = {}, 5355 .numberOfConsumers = 1, 5356 .scale = 0.0f, 5357 .zeroPoint = 0, 5358 .lifetime = OperandLifeTime::CONSTANT_COPY, 5359 .location = {.poolIndex = 0, .offset = 40, .length = 4}, 5360 }, 5361 { 5362 .type = OperandType::INT32, 5363 .dimensions = {}, 5364 .numberOfConsumers = 1, 5365 .scale = 0.0f, 5366 .zeroPoint = 0, 5367 .lifetime = OperandLifeTime::CONSTANT_COPY, 5368 .location = {.poolIndex = 0, .offset = 44, .length = 4}, 5369 }, 5370 { 5371 .type = OperandType::FLOAT16, 5372 .dimensions = {}, 5373 .numberOfConsumers = 1, 5374 .scale = 0.0f, 5375 .zeroPoint = 0, 5376 .lifetime = OperandLifeTime::CONSTANT_COPY, 5377 .location = {.poolIndex = 0, .offset = 48, .length = 2}, 5378 }, 5379 { 5380 .type = OperandType::FLOAT16, 5381 .dimensions = {}, 5382 .numberOfConsumers = 1, 5383 .scale = 0.0f, 5384 .zeroPoint = 0, 5385 .lifetime = OperandLifeTime::CONSTANT_COPY, 5386 .location = {.poolIndex = 0, .offset = 50, .length = 2}, 5387 }, 5388 { 5389 .type = OperandType::INT32, 5390 .dimensions = {}, 5391 .numberOfConsumers = 1, 5392 .scale = 0.0f, 5393 .zeroPoint = 0, 5394 .lifetime = OperandLifeTime::CONSTANT_COPY, 5395 .location = {.poolIndex = 0, .offset = 52, .length = 4}, 5396 }, 5397 { 5398 .type = OperandType::INT32, 5399 .dimensions = {}, 5400 .numberOfConsumers = 1, 5401 .scale = 0.0f, 5402 .zeroPoint = 0, 5403 .lifetime = OperandLifeTime::CONSTANT_COPY, 5404 .location = {.poolIndex = 0, .offset = 56, .length = 4}, 5405 }, 5406 { 5407 .type = OperandType::BOOL, 5408 .dimensions = {}, 5409 .numberOfConsumers = 1, 5410 .scale = 0.0f, 5411 .zeroPoint = 0, 5412 .lifetime = OperandLifeTime::CONSTANT_COPY, 5413 .location = {.poolIndex = 0, .offset = 60, .length = 1}, 5414 }, 5415 { 5416 .type = OperandType::TENSOR_FLOAT16, 5417 .dimensions = {0, 2, 2, 1}, 5418 .numberOfConsumers = 1, 5419 .scale = 0.0f, 5420 .zeroPoint = 0, 5421 .lifetime = OperandLifeTime::TEMPORARY_VARIABLE, 5422 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5423 }, 5424 { 5425 .type = OperandType::TENSOR_INT32, 5426 .dimensions = {4}, 5427 .numberOfConsumers = 1, 5428 .scale = 0.0f, 5429 .zeroPoint = 0, 5430 .lifetime = OperandLifeTime::CONSTANT_COPY, 5431 .location = {.poolIndex = 0, .offset = 61, .length = 16}, 5432 }, 5433 { 5434 .type = OperandType::TENSOR_INT32, 5435 .dimensions = {4}, 5436 .numberOfConsumers = 1, 5437 .scale = 0.0f, 5438 .zeroPoint = 0, 5439 .lifetime = OperandLifeTime::CONSTANT_COPY, 5440 .location = {.poolIndex = 0, .offset = 77, .length = 16}, 5441 }, 5442 { 5443 .type = OperandType::TENSOR_FLOAT16, 5444 .dimensions = {0, 0, 0, 0}, 5445 .numberOfConsumers = 0, 5446 .scale = 0.0f, 5447 .zeroPoint = 0, 5448 .lifetime = OperandLifeTime::MODEL_OUTPUT, 5449 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 5450 } 5451 }; 5452 5453 const std::vector<Operation> operations = { 5454 { 5455 .type = OperationType::BOX_WITH_NMS_LIMIT, 5456 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8}, 5457 .outputs = {9, 10, 11, 12}, 5458 }, 5459 { 5460 .type = OperationType::ROI_ALIGN, 5461 .inputs = {13, 10, 12, 14, 15, 16, 17, 18, 19, 20}, 5462 .outputs = {21}, 5463 }, 5464 { 5465 .type = OperationType::SLICE, 5466 .inputs = {21, 22, 23}, 5467 .outputs = {24}, 5468 } 5469 }; 5470 5471 const std::vector<uint32_t> inputIndexes = {13}; 5472 const std::vector<uint32_t> outputIndexes = {9, 11, 24}; 5473 std::vector<uint8_t> operandValues = { 5474 51, 59, 102, 46, 0, 60, 0, 60, 0, 73, 0, 73, 0, 0, 0, 0, 0, 73, 0, 73, 0, 0, 0, 0, 205, 52, 255, 255, 255, 255, 0, 0, 0, 0, 102, 54, 0, 60, 205, 52, 2, 0, 0, 0, 2, 0, 0, 0, 0, 64, 0, 64, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0 5475 }; 5476 const std::vector<hidl_memory> pools = {}; 5477 5478 return { 5479 .operands = operands, 5480 .operations = operations, 5481 .inputIndexes = inputIndexes, 5482 .outputIndexes = outputIndexes, 5483 .operandValues = operandValues, 5484 .pools = pools, 5485 }; 5486 } 5487 5488 inline bool is_ignored_zero_sized_dynamic_output_shape_float16(int i) { 5489 static std::set<int> ignore = {}; 5490 return ignore.find(i) != ignore.end(); 5491 } 5492 5493