1 // clang-format off 2 // Generated file (from: lstm3_state.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 }; 274 } 275 276 inline bool is_ignored(int i) { 277 static std::set<int> ignore = {0}; 278 return ignore.find(i) != ignore.end(); 279 } 280 281 // Create the model 282 Model createTestModel_dynamic_output_shape() { 283 const std::vector<Operand> operands = { 284 { 285 .type = OperandType::TENSOR_FLOAT32, 286 .dimensions = {2, 5}, 287 .numberOfConsumers = 1, 288 .scale = 0.0f, 289 .zeroPoint = 0, 290 .lifetime = OperandLifeTime::MODEL_INPUT, 291 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 292 }, 293 { 294 .type = OperandType::TENSOR_FLOAT32, 295 .dimensions = {20, 5}, 296 .numberOfConsumers = 1, 297 .scale = 0.0f, 298 .zeroPoint = 0, 299 .lifetime = OperandLifeTime::MODEL_INPUT, 300 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 301 }, 302 { 303 .type = OperandType::TENSOR_FLOAT32, 304 .dimensions = {20, 5}, 305 .numberOfConsumers = 1, 306 .scale = 0.0f, 307 .zeroPoint = 0, 308 .lifetime = OperandLifeTime::MODEL_INPUT, 309 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 310 }, 311 { 312 .type = OperandType::TENSOR_FLOAT32, 313 .dimensions = {20, 5}, 314 .numberOfConsumers = 1, 315 .scale = 0.0f, 316 .zeroPoint = 0, 317 .lifetime = OperandLifeTime::MODEL_INPUT, 318 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 319 }, 320 { 321 .type = OperandType::TENSOR_FLOAT32, 322 .dimensions = {20, 5}, 323 .numberOfConsumers = 1, 324 .scale = 0.0f, 325 .zeroPoint = 0, 326 .lifetime = OperandLifeTime::MODEL_INPUT, 327 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 328 }, 329 { 330 .type = OperandType::TENSOR_FLOAT32, 331 .dimensions = {20, 16}, 332 .numberOfConsumers = 1, 333 .scale = 0.0f, 334 .zeroPoint = 0, 335 .lifetime = OperandLifeTime::MODEL_INPUT, 336 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 337 }, 338 { 339 .type = OperandType::TENSOR_FLOAT32, 340 .dimensions = {20, 16}, 341 .numberOfConsumers = 1, 342 .scale = 0.0f, 343 .zeroPoint = 0, 344 .lifetime = OperandLifeTime::MODEL_INPUT, 345 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 346 }, 347 { 348 .type = OperandType::TENSOR_FLOAT32, 349 .dimensions = {20, 16}, 350 .numberOfConsumers = 1, 351 .scale = 0.0f, 352 .zeroPoint = 0, 353 .lifetime = OperandLifeTime::MODEL_INPUT, 354 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 355 }, 356 { 357 .type = OperandType::TENSOR_FLOAT32, 358 .dimensions = {20, 16}, 359 .numberOfConsumers = 1, 360 .scale = 0.0f, 361 .zeroPoint = 0, 362 .lifetime = OperandLifeTime::MODEL_INPUT, 363 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 364 }, 365 { 366 .type = OperandType::TENSOR_FLOAT32, 367 .dimensions = {20}, 368 .numberOfConsumers = 1, 369 .scale = 0.0f, 370 .zeroPoint = 0, 371 .lifetime = OperandLifeTime::MODEL_INPUT, 372 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 373 }, 374 { 375 .type = OperandType::TENSOR_FLOAT32, 376 .dimensions = {20}, 377 .numberOfConsumers = 1, 378 .scale = 0.0f, 379 .zeroPoint = 0, 380 .lifetime = OperandLifeTime::MODEL_INPUT, 381 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 382 }, 383 { 384 .type = OperandType::TENSOR_FLOAT32, 385 .dimensions = {20}, 386 .numberOfConsumers = 1, 387 .scale = 0.0f, 388 .zeroPoint = 0, 389 .lifetime = OperandLifeTime::MODEL_INPUT, 390 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 391 }, 392 { 393 .type = OperandType::TENSOR_FLOAT32, 394 .dimensions = {20}, 395 .numberOfConsumers = 1, 396 .scale = 0.0f, 397 .zeroPoint = 0, 398 .lifetime = OperandLifeTime::MODEL_INPUT, 399 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 400 }, 401 { 402 .type = OperandType::TENSOR_FLOAT32, 403 .dimensions = {20}, 404 .numberOfConsumers = 1, 405 .scale = 0.0f, 406 .zeroPoint = 0, 407 .lifetime = OperandLifeTime::MODEL_INPUT, 408 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 409 }, 410 { 411 .type = OperandType::TENSOR_FLOAT32, 412 .dimensions = {20}, 413 .numberOfConsumers = 1, 414 .scale = 0.0f, 415 .zeroPoint = 0, 416 .lifetime = OperandLifeTime::MODEL_INPUT, 417 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 418 }, 419 { 420 .type = OperandType::TENSOR_FLOAT32, 421 .dimensions = {20}, 422 .numberOfConsumers = 1, 423 .scale = 0.0f, 424 .zeroPoint = 0, 425 .lifetime = OperandLifeTime::MODEL_INPUT, 426 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 427 }, 428 { 429 .type = OperandType::TENSOR_FLOAT32, 430 .dimensions = {16, 20}, 431 .numberOfConsumers = 1, 432 .scale = 0.0f, 433 .zeroPoint = 0, 434 .lifetime = OperandLifeTime::MODEL_INPUT, 435 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 436 }, 437 { 438 .type = OperandType::TENSOR_FLOAT32, 439 .dimensions = {0}, 440 .numberOfConsumers = 1, 441 .scale = 0.0f, 442 .zeroPoint = 0, 443 .lifetime = OperandLifeTime::MODEL_INPUT, 444 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 445 }, 446 { 447 .type = OperandType::TENSOR_FLOAT32, 448 .dimensions = {2, 16}, 449 .numberOfConsumers = 1, 450 .scale = 0.0f, 451 .zeroPoint = 0, 452 .lifetime = OperandLifeTime::MODEL_INPUT, 453 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 454 }, 455 { 456 .type = OperandType::TENSOR_FLOAT32, 457 .dimensions = {2, 20}, 458 .numberOfConsumers = 1, 459 .scale = 0.0f, 460 .zeroPoint = 0, 461 .lifetime = OperandLifeTime::MODEL_INPUT, 462 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 463 }, 464 { 465 .type = OperandType::INT32, 466 .dimensions = {}, 467 .numberOfConsumers = 1, 468 .scale = 0.0f, 469 .zeroPoint = 0, 470 .lifetime = OperandLifeTime::CONSTANT_COPY, 471 .location = {.poolIndex = 0, .offset = 0, .length = 4}, 472 }, 473 { 474 .type = OperandType::FLOAT32, 475 .dimensions = {}, 476 .numberOfConsumers = 1, 477 .scale = 0.0f, 478 .zeroPoint = 0, 479 .lifetime = OperandLifeTime::CONSTANT_COPY, 480 .location = {.poolIndex = 0, .offset = 4, .length = 4}, 481 }, 482 { 483 .type = OperandType::FLOAT32, 484 .dimensions = {}, 485 .numberOfConsumers = 1, 486 .scale = 0.0f, 487 .zeroPoint = 0, 488 .lifetime = OperandLifeTime::CONSTANT_COPY, 489 .location = {.poolIndex = 0, .offset = 8, .length = 4}, 490 }, 491 { 492 .type = OperandType::TENSOR_FLOAT32, 493 .dimensions = {0, 0}, 494 .numberOfConsumers = 0, 495 .scale = 0.0f, 496 .zeroPoint = 0, 497 .lifetime = OperandLifeTime::MODEL_OUTPUT, 498 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 499 }, 500 { 501 .type = OperandType::TENSOR_FLOAT32, 502 .dimensions = {0, 0}, 503 .numberOfConsumers = 0, 504 .scale = 0.0f, 505 .zeroPoint = 0, 506 .lifetime = OperandLifeTime::MODEL_OUTPUT, 507 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 508 }, 509 { 510 .type = OperandType::TENSOR_FLOAT32, 511 .dimensions = {0, 0}, 512 .numberOfConsumers = 0, 513 .scale = 0.0f, 514 .zeroPoint = 0, 515 .lifetime = OperandLifeTime::MODEL_OUTPUT, 516 .location = {.poolIndex = 0, .offset = 0, .length = 0}, 517 }, 518 { 519 .type = OperandType::TENSOR_FLOAT32, 520 .dimensions = {0, 0}, 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::LSTM, 532 .inputs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22}, 533 .outputs = {23, 24, 25, 26}, 534 } 535 }; 536 537 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}; 538 const std::vector<uint32_t> outputIndexes = {23, 24, 25, 26}; 539 std::vector<uint8_t> operandValues = { 540 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 541 }; 542 const std::vector<hidl_memory> pools = {}; 543 544 return { 545 .operands = operands, 546 .operations = operations, 547 .inputIndexes = inputIndexes, 548 .outputIndexes = outputIndexes, 549 .operandValues = operandValues, 550 .pools = pools, 551 }; 552 } 553 554 inline bool is_ignored_dynamic_output_shape(int i) { 555 static std::set<int> ignore = {0}; 556 return ignore.find(i) != ignore.end(); 557 } 558 559