1 // clang-format off 2 // Generated file (from: lstm3_relaxed.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 = {2, 5}, 9 .numberOfConsumers = 1, 10 .scale = 0.0f, 11 .zeroPoint = 0, 12 .lifetime = OperandLifeTime::MODEL_INPUT, 13 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 14 }, 15 { 16 .type = OperandType::TENSOR_FLOAT32, 17 .dimensions = {20, 5}, 18 .numberOfConsumers = 1, 19 .scale = 0.0f, 20 .zeroPoint = 0, 21 .lifetime = OperandLifeTime::MODEL_INPUT, 22 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 23 }, 24 { 25 .type = OperandType::TENSOR_FLOAT32, 26 .dimensions = {20, 5}, 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 = {20, 5}, 36 .numberOfConsumers = 1, 37 .scale = 0.0f, 38 .zeroPoint = 0, 39 .lifetime = OperandLifeTime::MODEL_INPUT, 40 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 41 }, 42 { 43 .type = OperandType::TENSOR_FLOAT32, 44 .dimensions = {20, 5}, 45 .numberOfConsumers = 1, 46 .scale = 0.0f, 47 .zeroPoint = 0, 48 .lifetime = OperandLifeTime::MODEL_INPUT, 49 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 50 }, 51 { 52 .type = OperandType::TENSOR_FLOAT32, 53 .dimensions = {20, 16}, 54 .numberOfConsumers = 1, 55 .scale = 0.0f, 56 .zeroPoint = 0, 57 .lifetime = OperandLifeTime::MODEL_INPUT, 58 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 59 }, 60 { 61 .type = OperandType::TENSOR_FLOAT32, 62 .dimensions = {20, 16}, 63 .numberOfConsumers = 1, 64 .scale = 0.0f, 65 .zeroPoint = 0, 66 .lifetime = OperandLifeTime::MODEL_INPUT, 67 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 68 }, 69 { 70 .type = OperandType::TENSOR_FLOAT32, 71 .dimensions = {20, 16}, 72 .numberOfConsumers = 1, 73 .scale = 0.0f, 74 .zeroPoint = 0, 75 .lifetime = OperandLifeTime::MODEL_INPUT, 76 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 77 }, 78 { 79 .type = OperandType::TENSOR_FLOAT32, 80 .dimensions = {20, 16}, 81 .numberOfConsumers = 1, 82 .scale = 0.0f, 83 .zeroPoint = 0, 84 .lifetime = OperandLifeTime::MODEL_INPUT, 85 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 86 }, 87 { 88 .type = OperandType::TENSOR_FLOAT32, 89 .dimensions = {20}, 90 .numberOfConsumers = 1, 91 .scale = 0.0f, 92 .zeroPoint = 0, 93 .lifetime = OperandLifeTime::MODEL_INPUT, 94 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 95 }, 96 { 97 .type = OperandType::TENSOR_FLOAT32, 98 .dimensions = {20}, 99 .numberOfConsumers = 1, 100 .scale = 0.0f, 101 .zeroPoint = 0, 102 .lifetime = OperandLifeTime::MODEL_INPUT, 103 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 104 }, 105 { 106 .type = OperandType::TENSOR_FLOAT32, 107 .dimensions = {20}, 108 .numberOfConsumers = 1, 109 .scale = 0.0f, 110 .zeroPoint = 0, 111 .lifetime = OperandLifeTime::MODEL_INPUT, 112 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 113 }, 114 { 115 .type = OperandType::TENSOR_FLOAT32, 116 .dimensions = {20}, 117 .numberOfConsumers = 1, 118 .scale = 0.0f, 119 .zeroPoint = 0, 120 .lifetime = OperandLifeTime::MODEL_INPUT, 121 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 122 }, 123 { 124 .type = OperandType::TENSOR_FLOAT32, 125 .dimensions = {20}, 126 .numberOfConsumers = 1, 127 .scale = 0.0f, 128 .zeroPoint = 0, 129 .lifetime = OperandLifeTime::MODEL_INPUT, 130 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 131 }, 132 { 133 .type = OperandType::TENSOR_FLOAT32, 134 .dimensions = {20}, 135 .numberOfConsumers = 1, 136 .scale = 0.0f, 137 .zeroPoint = 0, 138 .lifetime = OperandLifeTime::MODEL_INPUT, 139 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 140 }, 141 { 142 .type = OperandType::TENSOR_FLOAT32, 143 .dimensions = {20}, 144 .numberOfConsumers = 1, 145 .scale = 0.0f, 146 .zeroPoint = 0, 147 .lifetime = OperandLifeTime::MODEL_INPUT, 148 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 149 }, 150 { 151 .type = OperandType::TENSOR_FLOAT32, 152 .dimensions = {16, 20}, 153 .numberOfConsumers = 1, 154 .scale = 0.0f, 155 .zeroPoint = 0, 156 .lifetime = OperandLifeTime::MODEL_INPUT, 157 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 158 }, 159 { 160 .type = OperandType::TENSOR_FLOAT32, 161 .dimensions = {0}, 162 .numberOfConsumers = 1, 163 .scale = 0.0f, 164 .zeroPoint = 0, 165 .lifetime = OperandLifeTime::MODEL_INPUT, 166 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 167 }, 168 { 169 .type = OperandType::TENSOR_FLOAT32, 170 .dimensions = {2, 16}, 171 .numberOfConsumers = 1, 172 .scale = 0.0f, 173 .zeroPoint = 0, 174 .lifetime = OperandLifeTime::MODEL_INPUT, 175 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 176 }, 177 { 178 .type = OperandType::TENSOR_FLOAT32, 179 .dimensions = {2, 20}, 180 .numberOfConsumers = 1, 181 .scale = 0.0f, 182 .zeroPoint = 0, 183 .lifetime = OperandLifeTime::MODEL_INPUT, 184 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 185 }, 186 { 187 .type = OperandType::INT32, 188 .dimensions = {}, 189 .numberOfConsumers = 1, 190 .scale = 0.0f, 191 .zeroPoint = 0, 192 .lifetime = OperandLifeTime::CONSTANT_COPY, 193 .location = {.poolIndex = 0, .offset = 0, .length = 4}, 194 }, 195 { 196 .type = OperandType::FLOAT32, 197 .dimensions = {}, 198 .numberOfConsumers = 1, 199 .scale = 0.0f, 200 .zeroPoint = 0, 201 .lifetime = OperandLifeTime::CONSTANT_COPY, 202 .location = {.poolIndex = 0, .offset = 4, .length = 4}, 203 }, 204 { 205 .type = OperandType::FLOAT32, 206 .dimensions = {}, 207 .numberOfConsumers = 1, 208 .scale = 0.0f, 209 .zeroPoint = 0, 210 .lifetime = OperandLifeTime::CONSTANT_COPY, 211 .location = {.poolIndex = 0, .offset = 8, .length = 4}, 212 }, 213 { 214 .type = OperandType::TENSOR_FLOAT32, 215 .dimensions = {2, 80}, 216 .numberOfConsumers = 0, 217 .scale = 0.0f, 218 .zeroPoint = 0, 219 .lifetime = OperandLifeTime::MODEL_OUTPUT, 220 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 221 }, 222 { 223 .type = OperandType::TENSOR_FLOAT32, 224 .dimensions = {2, 16}, 225 .numberOfConsumers = 0, 226 .scale = 0.0f, 227 .zeroPoint = 0, 228 .lifetime = OperandLifeTime::MODEL_OUTPUT, 229 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 230 }, 231 { 232 .type = OperandType::TENSOR_FLOAT32, 233 .dimensions = {2, 20}, 234 .numberOfConsumers = 0, 235 .scale = 0.0f, 236 .zeroPoint = 0, 237 .lifetime = OperandLifeTime::MODEL_OUTPUT, 238 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 239 }, 240 { 241 .type = OperandType::TENSOR_FLOAT32, 242 .dimensions = {2, 16}, 243 .numberOfConsumers = 0, 244 .scale = 0.0f, 245 .zeroPoint = 0, 246 .lifetime = OperandLifeTime::MODEL_OUTPUT, 247 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 248 } 249 }; 250 251 const std::vector<Operation> operations = { 252 { 253 .type = OperationType::LSTM, 254 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22}, 255 .outputs = {23, 24, 25, 26}, 256 } 257 }; 258 259 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; 260 const std::vector<uint32_t> outputIndexes = {23, 24, 25, 26}; 261 std::vector<uint8_t> operandValues = { 262 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 263 }; 264 const std::vector<hidl_memory> pools = {}; 265 266 return { 267 .operands = operands, 268 .operations = operations, 269 .inputIndexes = inputIndexes, 270 .outputIndexes = outputIndexes, 271 .operandValues = operandValues, 272 .pools = pools, 273 .relaxComputationFloat32toFloat16 = true, 274 }; 275 } 276 277 inline bool is_ignored(int i) { 278 static std::set<int> ignore = {0}; 279 return ignore.find(i) != ignore.end(); 280 } 281 282 // Create the model 283 Model createTestModel_dynamic_output_shape() { 284 const std::vector<Operand> operands = { 285 { 286 .type = OperandType::TENSOR_FLOAT32, 287 .dimensions = {2, 5}, 288 .numberOfConsumers = 1, 289 .scale = 0.0f, 290 .zeroPoint = 0, 291 .lifetime = OperandLifeTime::MODEL_INPUT, 292 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 293 }, 294 { 295 .type = OperandType::TENSOR_FLOAT32, 296 .dimensions = {20, 5}, 297 .numberOfConsumers = 1, 298 .scale = 0.0f, 299 .zeroPoint = 0, 300 .lifetime = OperandLifeTime::MODEL_INPUT, 301 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 302 }, 303 { 304 .type = OperandType::TENSOR_FLOAT32, 305 .dimensions = {20, 5}, 306 .numberOfConsumers = 1, 307 .scale = 0.0f, 308 .zeroPoint = 0, 309 .lifetime = OperandLifeTime::MODEL_INPUT, 310 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 311 }, 312 { 313 .type = OperandType::TENSOR_FLOAT32, 314 .dimensions = {20, 5}, 315 .numberOfConsumers = 1, 316 .scale = 0.0f, 317 .zeroPoint = 0, 318 .lifetime = OperandLifeTime::MODEL_INPUT, 319 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 320 }, 321 { 322 .type = OperandType::TENSOR_FLOAT32, 323 .dimensions = {20, 5}, 324 .numberOfConsumers = 1, 325 .scale = 0.0f, 326 .zeroPoint = 0, 327 .lifetime = OperandLifeTime::MODEL_INPUT, 328 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 329 }, 330 { 331 .type = OperandType::TENSOR_FLOAT32, 332 .dimensions = {20, 16}, 333 .numberOfConsumers = 1, 334 .scale = 0.0f, 335 .zeroPoint = 0, 336 .lifetime = OperandLifeTime::MODEL_INPUT, 337 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 338 }, 339 { 340 .type = OperandType::TENSOR_FLOAT32, 341 .dimensions = {20, 16}, 342 .numberOfConsumers = 1, 343 .scale = 0.0f, 344 .zeroPoint = 0, 345 .lifetime = OperandLifeTime::MODEL_INPUT, 346 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 347 }, 348 { 349 .type = OperandType::TENSOR_FLOAT32, 350 .dimensions = {20, 16}, 351 .numberOfConsumers = 1, 352 .scale = 0.0f, 353 .zeroPoint = 0, 354 .lifetime = OperandLifeTime::MODEL_INPUT, 355 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 356 }, 357 { 358 .type = OperandType::TENSOR_FLOAT32, 359 .dimensions = {20, 16}, 360 .numberOfConsumers = 1, 361 .scale = 0.0f, 362 .zeroPoint = 0, 363 .lifetime = OperandLifeTime::MODEL_INPUT, 364 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 365 }, 366 { 367 .type = OperandType::TENSOR_FLOAT32, 368 .dimensions = {20}, 369 .numberOfConsumers = 1, 370 .scale = 0.0f, 371 .zeroPoint = 0, 372 .lifetime = OperandLifeTime::MODEL_INPUT, 373 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 374 }, 375 { 376 .type = OperandType::TENSOR_FLOAT32, 377 .dimensions = {20}, 378 .numberOfConsumers = 1, 379 .scale = 0.0f, 380 .zeroPoint = 0, 381 .lifetime = OperandLifeTime::MODEL_INPUT, 382 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 383 }, 384 { 385 .type = OperandType::TENSOR_FLOAT32, 386 .dimensions = {20}, 387 .numberOfConsumers = 1, 388 .scale = 0.0f, 389 .zeroPoint = 0, 390 .lifetime = OperandLifeTime::MODEL_INPUT, 391 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 392 }, 393 { 394 .type = OperandType::TENSOR_FLOAT32, 395 .dimensions = {20}, 396 .numberOfConsumers = 1, 397 .scale = 0.0f, 398 .zeroPoint = 0, 399 .lifetime = OperandLifeTime::MODEL_INPUT, 400 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 401 }, 402 { 403 .type = OperandType::TENSOR_FLOAT32, 404 .dimensions = {20}, 405 .numberOfConsumers = 1, 406 .scale = 0.0f, 407 .zeroPoint = 0, 408 .lifetime = OperandLifeTime::MODEL_INPUT, 409 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 410 }, 411 { 412 .type = OperandType::TENSOR_FLOAT32, 413 .dimensions = {20}, 414 .numberOfConsumers = 1, 415 .scale = 0.0f, 416 .zeroPoint = 0, 417 .lifetime = OperandLifeTime::MODEL_INPUT, 418 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 419 }, 420 { 421 .type = OperandType::TENSOR_FLOAT32, 422 .dimensions = {20}, 423 .numberOfConsumers = 1, 424 .scale = 0.0f, 425 .zeroPoint = 0, 426 .lifetime = OperandLifeTime::MODEL_INPUT, 427 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 428 }, 429 { 430 .type = OperandType::TENSOR_FLOAT32, 431 .dimensions = {16, 20}, 432 .numberOfConsumers = 1, 433 .scale = 0.0f, 434 .zeroPoint = 0, 435 .lifetime = OperandLifeTime::MODEL_INPUT, 436 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 437 }, 438 { 439 .type = OperandType::TENSOR_FLOAT32, 440 .dimensions = {0}, 441 .numberOfConsumers = 1, 442 .scale = 0.0f, 443 .zeroPoint = 0, 444 .lifetime = OperandLifeTime::MODEL_INPUT, 445 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 446 }, 447 { 448 .type = OperandType::TENSOR_FLOAT32, 449 .dimensions = {2, 16}, 450 .numberOfConsumers = 1, 451 .scale = 0.0f, 452 .zeroPoint = 0, 453 .lifetime = OperandLifeTime::MODEL_INPUT, 454 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 455 }, 456 { 457 .type = OperandType::TENSOR_FLOAT32, 458 .dimensions = {2, 20}, 459 .numberOfConsumers = 1, 460 .scale = 0.0f, 461 .zeroPoint = 0, 462 .lifetime = OperandLifeTime::MODEL_INPUT, 463 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 464 }, 465 { 466 .type = OperandType::INT32, 467 .dimensions = {}, 468 .numberOfConsumers = 1, 469 .scale = 0.0f, 470 .zeroPoint = 0, 471 .lifetime = OperandLifeTime::CONSTANT_COPY, 472 .location = {.poolIndex = 0, .offset = 0, .length = 4}, 473 }, 474 { 475 .type = OperandType::FLOAT32, 476 .dimensions = {}, 477 .numberOfConsumers = 1, 478 .scale = 0.0f, 479 .zeroPoint = 0, 480 .lifetime = OperandLifeTime::CONSTANT_COPY, 481 .location = {.poolIndex = 0, .offset = 4, .length = 4}, 482 }, 483 { 484 .type = OperandType::FLOAT32, 485 .dimensions = {}, 486 .numberOfConsumers = 1, 487 .scale = 0.0f, 488 .zeroPoint = 0, 489 .lifetime = OperandLifeTime::CONSTANT_COPY, 490 .location = {.poolIndex = 0, .offset = 8, .length = 4}, 491 }, 492 { 493 .type = OperandType::TENSOR_FLOAT32, 494 .dimensions = {0, 0}, 495 .numberOfConsumers = 0, 496 .scale = 0.0f, 497 .zeroPoint = 0, 498 .lifetime = OperandLifeTime::MODEL_OUTPUT, 499 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 500 }, 501 { 502 .type = OperandType::TENSOR_FLOAT32, 503 .dimensions = {0, 0}, 504 .numberOfConsumers = 0, 505 .scale = 0.0f, 506 .zeroPoint = 0, 507 .lifetime = OperandLifeTime::MODEL_OUTPUT, 508 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 509 }, 510 { 511 .type = OperandType::TENSOR_FLOAT32, 512 .dimensions = {0, 0}, 513 .numberOfConsumers = 0, 514 .scale = 0.0f, 515 .zeroPoint = 0, 516 .lifetime = OperandLifeTime::MODEL_OUTPUT, 517 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 518 }, 519 { 520 .type = OperandType::TENSOR_FLOAT32, 521 .dimensions = {0, 0}, 522 .numberOfConsumers = 0, 523 .scale = 0.0f, 524 .zeroPoint = 0, 525 .lifetime = OperandLifeTime::MODEL_OUTPUT, 526 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 527 } 528 }; 529 530 const std::vector<Operation> operations = { 531 { 532 .type = OperationType::LSTM, 533 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22}, 534 .outputs = {23, 24, 25, 26}, 535 } 536 }; 537 538 const std::vector<uint32_t> inputIndexes = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; 539 const std::vector<uint32_t> outputIndexes = {23, 24, 25, 26}; 540 std::vector<uint8_t> operandValues = { 541 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 542 }; 543 const std::vector<hidl_memory> pools = {}; 544 545 return { 546 .operands = operands, 547 .operations = operations, 548 .inputIndexes = inputIndexes, 549 .outputIndexes = outputIndexes, 550 .operandValues = operandValues, 551 .pools = pools, 552 .relaxComputationFloat32toFloat16 = true, 553 }; 554 } 555 556 inline bool is_ignored_dynamic_output_shape(int i) { 557 static std::set<int> ignore = {0}; 558 return ignore.find(i) != ignore.end(); 559 } 560 561