Home | History | Annotate | Download | only in vts_models
      1 // clang-format off
      2 // Generated file (from: reduce_prod.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 = {3, 2},
      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::CONSTANT_COPY,
     22             .location = {.poolIndex = 0, .offset = 0, .length = 4},
     23         },
     24         {
     25             .type = OperandType::BOOL,
     26             .dimensions = {},
     27             .numberOfConsumers = 1,
     28             .scale = 0.0f,
     29             .zeroPoint = 0,
     30             .lifetime = OperandLifeTime::CONSTANT_COPY,
     31             .location = {.poolIndex = 0, .offset = 4, .length = 1},
     32         },
     33         {
     34             .type = OperandType::TENSOR_FLOAT32,
     35             .dimensions = {3},
     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::REDUCE_PROD,
     47             .inputs = {0, 1, 2},
     48             .outputs = {3},
     49         }
     50     };
     51 
     52     const std::vector<uint32_t> inputIndexes = {0};
     53     const std::vector<uint32_t> outputIndexes = {3};
     54     std::vector<uint8_t> operandValues = {
     55       255, 255, 255, 255, 0
     56     };
     57     const std::vector<hidl_memory> pools = {};
     58 
     59     return {
     60         .operands = operands,
     61         .operations = operations,
     62         .inputIndexes = inputIndexes,
     63         .outputIndexes = outputIndexes,
     64         .operandValues = operandValues,
     65         .pools = pools,
     66     };
     67 }
     68 
     69 inline bool is_ignored(int i) {
     70   static std::set<int> ignore = {};
     71   return ignore.find(i) != ignore.end();
     72 }
     73 
     74 // Create the model
     75 Model createTestModel_relaxed() {
     76     const std::vector<Operand> operands = {
     77         {
     78             .type = OperandType::TENSOR_FLOAT32,
     79             .dimensions = {3, 2},
     80             .numberOfConsumers = 1,
     81             .scale = 0.0f,
     82             .zeroPoint = 0,
     83             .lifetime = OperandLifeTime::MODEL_INPUT,
     84             .location = {.poolIndex = 0, .offset = 0, .length = 0},
     85         },
     86         {
     87             .type = OperandType::TENSOR_INT32,
     88             .dimensions = {1},
     89             .numberOfConsumers = 1,
     90             .scale = 0.0f,
     91             .zeroPoint = 0,
     92             .lifetime = OperandLifeTime::CONSTANT_COPY,
     93             .location = {.poolIndex = 0, .offset = 0, .length = 4},
     94         },
     95         {
     96             .type = OperandType::BOOL,
     97             .dimensions = {},
     98             .numberOfConsumers = 1,
     99             .scale = 0.0f,
    100             .zeroPoint = 0,
    101             .lifetime = OperandLifeTime::CONSTANT_COPY,
    102             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    103         },
    104         {
    105             .type = OperandType::TENSOR_FLOAT32,
    106             .dimensions = {3},
    107             .numberOfConsumers = 0,
    108             .scale = 0.0f,
    109             .zeroPoint = 0,
    110             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    111             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    112         }
    113     };
    114 
    115     const std::vector<Operation> operations = {
    116         {
    117             .type = OperationType::REDUCE_PROD,
    118             .inputs = {0, 1, 2},
    119             .outputs = {3},
    120         }
    121     };
    122 
    123     const std::vector<uint32_t> inputIndexes = {0};
    124     const std::vector<uint32_t> outputIndexes = {3};
    125     std::vector<uint8_t> operandValues = {
    126       255, 255, 255, 255, 0
    127     };
    128     const std::vector<hidl_memory> pools = {};
    129 
    130     return {
    131         .operands = operands,
    132         .operations = operations,
    133         .inputIndexes = inputIndexes,
    134         .outputIndexes = outputIndexes,
    135         .operandValues = operandValues,
    136         .pools = pools,
    137         .relaxComputationFloat32toFloat16 = true,
    138     };
    139 }
    140 
    141 inline bool is_ignored_relaxed(int i) {
    142   static std::set<int> ignore = {};
    143   return ignore.find(i) != ignore.end();
    144 }
    145 
    146 // Create the model
    147 Model createTestModel_float16() {
    148     const std::vector<Operand> operands = {
    149         {
    150             .type = OperandType::TENSOR_FLOAT16,
    151             .dimensions = {3, 2},
    152             .numberOfConsumers = 1,
    153             .scale = 0.0f,
    154             .zeroPoint = 0,
    155             .lifetime = OperandLifeTime::MODEL_INPUT,
    156             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    157         },
    158         {
    159             .type = OperandType::TENSOR_INT32,
    160             .dimensions = {1},
    161             .numberOfConsumers = 1,
    162             .scale = 0.0f,
    163             .zeroPoint = 0,
    164             .lifetime = OperandLifeTime::CONSTANT_COPY,
    165             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    166         },
    167         {
    168             .type = OperandType::BOOL,
    169             .dimensions = {},
    170             .numberOfConsumers = 1,
    171             .scale = 0.0f,
    172             .zeroPoint = 0,
    173             .lifetime = OperandLifeTime::CONSTANT_COPY,
    174             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    175         },
    176         {
    177             .type = OperandType::TENSOR_FLOAT16,
    178             .dimensions = {3},
    179             .numberOfConsumers = 0,
    180             .scale = 0.0f,
    181             .zeroPoint = 0,
    182             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    183             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    184         }
    185     };
    186 
    187     const std::vector<Operation> operations = {
    188         {
    189             .type = OperationType::REDUCE_PROD,
    190             .inputs = {0, 1, 2},
    191             .outputs = {3},
    192         }
    193     };
    194 
    195     const std::vector<uint32_t> inputIndexes = {0};
    196     const std::vector<uint32_t> outputIndexes = {3};
    197     std::vector<uint8_t> operandValues = {
    198       255, 255, 255, 255, 0
    199     };
    200     const std::vector<hidl_memory> pools = {};
    201 
    202     return {
    203         .operands = operands,
    204         .operations = operations,
    205         .inputIndexes = inputIndexes,
    206         .outputIndexes = outputIndexes,
    207         .operandValues = operandValues,
    208         .pools = pools,
    209     };
    210 }
    211 
    212 inline bool is_ignored_float16(int i) {
    213   static std::set<int> ignore = {};
    214   return ignore.find(i) != ignore.end();
    215 }
    216 
    217 // Create the model
    218 Model createTestModel_dynamic_output_shape() {
    219     const std::vector<Operand> operands = {
    220         {
    221             .type = OperandType::TENSOR_FLOAT32,
    222             .dimensions = {3, 2},
    223             .numberOfConsumers = 1,
    224             .scale = 0.0f,
    225             .zeroPoint = 0,
    226             .lifetime = OperandLifeTime::MODEL_INPUT,
    227             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    228         },
    229         {
    230             .type = OperandType::TENSOR_INT32,
    231             .dimensions = {1},
    232             .numberOfConsumers = 1,
    233             .scale = 0.0f,
    234             .zeroPoint = 0,
    235             .lifetime = OperandLifeTime::CONSTANT_COPY,
    236             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    237         },
    238         {
    239             .type = OperandType::BOOL,
    240             .dimensions = {},
    241             .numberOfConsumers = 1,
    242             .scale = 0.0f,
    243             .zeroPoint = 0,
    244             .lifetime = OperandLifeTime::CONSTANT_COPY,
    245             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    246         },
    247         {
    248             .type = OperandType::TENSOR_FLOAT32,
    249             .dimensions = {0},
    250             .numberOfConsumers = 0,
    251             .scale = 0.0f,
    252             .zeroPoint = 0,
    253             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    254             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    255         }
    256     };
    257 
    258     const std::vector<Operation> operations = {
    259         {
    260             .type = OperationType::REDUCE_PROD,
    261             .inputs = {0, 1, 2},
    262             .outputs = {3},
    263         }
    264     };
    265 
    266     const std::vector<uint32_t> inputIndexes = {0};
    267     const std::vector<uint32_t> outputIndexes = {3};
    268     std::vector<uint8_t> operandValues = {
    269       255, 255, 255, 255, 0
    270     };
    271     const std::vector<hidl_memory> pools = {};
    272 
    273     return {
    274         .operands = operands,
    275         .operations = operations,
    276         .inputIndexes = inputIndexes,
    277         .outputIndexes = outputIndexes,
    278         .operandValues = operandValues,
    279         .pools = pools,
    280     };
    281 }
    282 
    283 inline bool is_ignored_dynamic_output_shape(int i) {
    284   static std::set<int> ignore = {};
    285   return ignore.find(i) != ignore.end();
    286 }
    287 
    288 // Create the model
    289 Model createTestModel_dynamic_output_shape_relaxed() {
    290     const std::vector<Operand> operands = {
    291         {
    292             .type = OperandType::TENSOR_FLOAT32,
    293             .dimensions = {3, 2},
    294             .numberOfConsumers = 1,
    295             .scale = 0.0f,
    296             .zeroPoint = 0,
    297             .lifetime = OperandLifeTime::MODEL_INPUT,
    298             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    299         },
    300         {
    301             .type = OperandType::TENSOR_INT32,
    302             .dimensions = {1},
    303             .numberOfConsumers = 1,
    304             .scale = 0.0f,
    305             .zeroPoint = 0,
    306             .lifetime = OperandLifeTime::CONSTANT_COPY,
    307             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    308         },
    309         {
    310             .type = OperandType::BOOL,
    311             .dimensions = {},
    312             .numberOfConsumers = 1,
    313             .scale = 0.0f,
    314             .zeroPoint = 0,
    315             .lifetime = OperandLifeTime::CONSTANT_COPY,
    316             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    317         },
    318         {
    319             .type = OperandType::TENSOR_FLOAT32,
    320             .dimensions = {0},
    321             .numberOfConsumers = 0,
    322             .scale = 0.0f,
    323             .zeroPoint = 0,
    324             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    325             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    326         }
    327     };
    328 
    329     const std::vector<Operation> operations = {
    330         {
    331             .type = OperationType::REDUCE_PROD,
    332             .inputs = {0, 1, 2},
    333             .outputs = {3},
    334         }
    335     };
    336 
    337     const std::vector<uint32_t> inputIndexes = {0};
    338     const std::vector<uint32_t> outputIndexes = {3};
    339     std::vector<uint8_t> operandValues = {
    340       255, 255, 255, 255, 0
    341     };
    342     const std::vector<hidl_memory> pools = {};
    343 
    344     return {
    345         .operands = operands,
    346         .operations = operations,
    347         .inputIndexes = inputIndexes,
    348         .outputIndexes = outputIndexes,
    349         .operandValues = operandValues,
    350         .pools = pools,
    351         .relaxComputationFloat32toFloat16 = true,
    352     };
    353 }
    354 
    355 inline bool is_ignored_dynamic_output_shape_relaxed(int i) {
    356   static std::set<int> ignore = {};
    357   return ignore.find(i) != ignore.end();
    358 }
    359 
    360 // Create the model
    361 Model createTestModel_dynamic_output_shape_float16() {
    362     const std::vector<Operand> operands = {
    363         {
    364             .type = OperandType::TENSOR_FLOAT16,
    365             .dimensions = {3, 2},
    366             .numberOfConsumers = 1,
    367             .scale = 0.0f,
    368             .zeroPoint = 0,
    369             .lifetime = OperandLifeTime::MODEL_INPUT,
    370             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    371         },
    372         {
    373             .type = OperandType::TENSOR_INT32,
    374             .dimensions = {1},
    375             .numberOfConsumers = 1,
    376             .scale = 0.0f,
    377             .zeroPoint = 0,
    378             .lifetime = OperandLifeTime::CONSTANT_COPY,
    379             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    380         },
    381         {
    382             .type = OperandType::BOOL,
    383             .dimensions = {},
    384             .numberOfConsumers = 1,
    385             .scale = 0.0f,
    386             .zeroPoint = 0,
    387             .lifetime = OperandLifeTime::CONSTANT_COPY,
    388             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    389         },
    390         {
    391             .type = OperandType::TENSOR_FLOAT16,
    392             .dimensions = {0},
    393             .numberOfConsumers = 0,
    394             .scale = 0.0f,
    395             .zeroPoint = 0,
    396             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    397             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    398         }
    399     };
    400 
    401     const std::vector<Operation> operations = {
    402         {
    403             .type = OperationType::REDUCE_PROD,
    404             .inputs = {0, 1, 2},
    405             .outputs = {3},
    406         }
    407     };
    408 
    409     const std::vector<uint32_t> inputIndexes = {0};
    410     const std::vector<uint32_t> outputIndexes = {3};
    411     std::vector<uint8_t> operandValues = {
    412       255, 255, 255, 255, 0
    413     };
    414     const std::vector<hidl_memory> pools = {};
    415 
    416     return {
    417         .operands = operands,
    418         .operations = operations,
    419         .inputIndexes = inputIndexes,
    420         .outputIndexes = outputIndexes,
    421         .operandValues = operandValues,
    422         .pools = pools,
    423     };
    424 }
    425 
    426 inline bool is_ignored_dynamic_output_shape_float16(int i) {
    427   static std::set<int> ignore = {};
    428   return ignore.find(i) != ignore.end();
    429 }
    430 
    431 // Create the model
    432 Model createTestModel_2() {
    433     const std::vector<Operand> operands = {
    434         {
    435             .type = OperandType::TENSOR_FLOAT32,
    436             .dimensions = {1},
    437             .numberOfConsumers = 1,
    438             .scale = 0.0f,
    439             .zeroPoint = 0,
    440             .lifetime = OperandLifeTime::MODEL_INPUT,
    441             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    442         },
    443         {
    444             .type = OperandType::TENSOR_INT32,
    445             .dimensions = {1},
    446             .numberOfConsumers = 1,
    447             .scale = 0.0f,
    448             .zeroPoint = 0,
    449             .lifetime = OperandLifeTime::CONSTANT_COPY,
    450             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    451         },
    452         {
    453             .type = OperandType::BOOL,
    454             .dimensions = {},
    455             .numberOfConsumers = 1,
    456             .scale = 0.0f,
    457             .zeroPoint = 0,
    458             .lifetime = OperandLifeTime::CONSTANT_COPY,
    459             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    460         },
    461         {
    462             .type = OperandType::TENSOR_FLOAT32,
    463             .dimensions = {1},
    464             .numberOfConsumers = 0,
    465             .scale = 0.0f,
    466             .zeroPoint = 0,
    467             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    468             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    469         }
    470     };
    471 
    472     const std::vector<Operation> operations = {
    473         {
    474             .type = OperationType::REDUCE_PROD,
    475             .inputs = {0, 1, 2},
    476             .outputs = {3},
    477         }
    478     };
    479 
    480     const std::vector<uint32_t> inputIndexes = {0};
    481     const std::vector<uint32_t> outputIndexes = {3};
    482     std::vector<uint8_t> operandValues = {
    483       0, 0, 0, 0, 1
    484     };
    485     const std::vector<hidl_memory> pools = {};
    486 
    487     return {
    488         .operands = operands,
    489         .operations = operations,
    490         .inputIndexes = inputIndexes,
    491         .outputIndexes = outputIndexes,
    492         .operandValues = operandValues,
    493         .pools = pools,
    494     };
    495 }
    496 
    497 inline bool is_ignored_2(int i) {
    498   static std::set<int> ignore = {};
    499   return ignore.find(i) != ignore.end();
    500 }
    501 
    502 // Create the model
    503 Model createTestModel_relaxed_2() {
    504     const std::vector<Operand> operands = {
    505         {
    506             .type = OperandType::TENSOR_FLOAT32,
    507             .dimensions = {1},
    508             .numberOfConsumers = 1,
    509             .scale = 0.0f,
    510             .zeroPoint = 0,
    511             .lifetime = OperandLifeTime::MODEL_INPUT,
    512             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    513         },
    514         {
    515             .type = OperandType::TENSOR_INT32,
    516             .dimensions = {1},
    517             .numberOfConsumers = 1,
    518             .scale = 0.0f,
    519             .zeroPoint = 0,
    520             .lifetime = OperandLifeTime::CONSTANT_COPY,
    521             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    522         },
    523         {
    524             .type = OperandType::BOOL,
    525             .dimensions = {},
    526             .numberOfConsumers = 1,
    527             .scale = 0.0f,
    528             .zeroPoint = 0,
    529             .lifetime = OperandLifeTime::CONSTANT_COPY,
    530             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    531         },
    532         {
    533             .type = OperandType::TENSOR_FLOAT32,
    534             .dimensions = {1},
    535             .numberOfConsumers = 0,
    536             .scale = 0.0f,
    537             .zeroPoint = 0,
    538             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    539             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    540         }
    541     };
    542 
    543     const std::vector<Operation> operations = {
    544         {
    545             .type = OperationType::REDUCE_PROD,
    546             .inputs = {0, 1, 2},
    547             .outputs = {3},
    548         }
    549     };
    550 
    551     const std::vector<uint32_t> inputIndexes = {0};
    552     const std::vector<uint32_t> outputIndexes = {3};
    553     std::vector<uint8_t> operandValues = {
    554       0, 0, 0, 0, 1
    555     };
    556     const std::vector<hidl_memory> pools = {};
    557 
    558     return {
    559         .operands = operands,
    560         .operations = operations,
    561         .inputIndexes = inputIndexes,
    562         .outputIndexes = outputIndexes,
    563         .operandValues = operandValues,
    564         .pools = pools,
    565         .relaxComputationFloat32toFloat16 = true,
    566     };
    567 }
    568 
    569 inline bool is_ignored_relaxed_2(int i) {
    570   static std::set<int> ignore = {};
    571   return ignore.find(i) != ignore.end();
    572 }
    573 
    574 // Create the model
    575 Model createTestModel_float16_2() {
    576     const std::vector<Operand> operands = {
    577         {
    578             .type = OperandType::TENSOR_FLOAT16,
    579             .dimensions = {1},
    580             .numberOfConsumers = 1,
    581             .scale = 0.0f,
    582             .zeroPoint = 0,
    583             .lifetime = OperandLifeTime::MODEL_INPUT,
    584             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    585         },
    586         {
    587             .type = OperandType::TENSOR_INT32,
    588             .dimensions = {1},
    589             .numberOfConsumers = 1,
    590             .scale = 0.0f,
    591             .zeroPoint = 0,
    592             .lifetime = OperandLifeTime::CONSTANT_COPY,
    593             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    594         },
    595         {
    596             .type = OperandType::BOOL,
    597             .dimensions = {},
    598             .numberOfConsumers = 1,
    599             .scale = 0.0f,
    600             .zeroPoint = 0,
    601             .lifetime = OperandLifeTime::CONSTANT_COPY,
    602             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    603         },
    604         {
    605             .type = OperandType::TENSOR_FLOAT16,
    606             .dimensions = {1},
    607             .numberOfConsumers = 0,
    608             .scale = 0.0f,
    609             .zeroPoint = 0,
    610             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    611             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    612         }
    613     };
    614 
    615     const std::vector<Operation> operations = {
    616         {
    617             .type = OperationType::REDUCE_PROD,
    618             .inputs = {0, 1, 2},
    619             .outputs = {3},
    620         }
    621     };
    622 
    623     const std::vector<uint32_t> inputIndexes = {0};
    624     const std::vector<uint32_t> outputIndexes = {3};
    625     std::vector<uint8_t> operandValues = {
    626       0, 0, 0, 0, 1
    627     };
    628     const std::vector<hidl_memory> pools = {};
    629 
    630     return {
    631         .operands = operands,
    632         .operations = operations,
    633         .inputIndexes = inputIndexes,
    634         .outputIndexes = outputIndexes,
    635         .operandValues = operandValues,
    636         .pools = pools,
    637     };
    638 }
    639 
    640 inline bool is_ignored_float16_2(int i) {
    641   static std::set<int> ignore = {};
    642   return ignore.find(i) != ignore.end();
    643 }
    644 
    645 // Create the model
    646 Model createTestModel_dynamic_output_shape_2() {
    647     const std::vector<Operand> operands = {
    648         {
    649             .type = OperandType::TENSOR_FLOAT32,
    650             .dimensions = {1},
    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_INT32,
    659             .dimensions = {1},
    660             .numberOfConsumers = 1,
    661             .scale = 0.0f,
    662             .zeroPoint = 0,
    663             .lifetime = OperandLifeTime::CONSTANT_COPY,
    664             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    665         },
    666         {
    667             .type = OperandType::BOOL,
    668             .dimensions = {},
    669             .numberOfConsumers = 1,
    670             .scale = 0.0f,
    671             .zeroPoint = 0,
    672             .lifetime = OperandLifeTime::CONSTANT_COPY,
    673             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    674         },
    675         {
    676             .type = OperandType::TENSOR_FLOAT32,
    677             .dimensions = {0},
    678             .numberOfConsumers = 0,
    679             .scale = 0.0f,
    680             .zeroPoint = 0,
    681             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    682             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    683         }
    684     };
    685 
    686     const std::vector<Operation> operations = {
    687         {
    688             .type = OperationType::REDUCE_PROD,
    689             .inputs = {0, 1, 2},
    690             .outputs = {3},
    691         }
    692     };
    693 
    694     const std::vector<uint32_t> inputIndexes = {0};
    695     const std::vector<uint32_t> outputIndexes = {3};
    696     std::vector<uint8_t> operandValues = {
    697       0, 0, 0, 0, 1
    698     };
    699     const std::vector<hidl_memory> pools = {};
    700 
    701     return {
    702         .operands = operands,
    703         .operations = operations,
    704         .inputIndexes = inputIndexes,
    705         .outputIndexes = outputIndexes,
    706         .operandValues = operandValues,
    707         .pools = pools,
    708     };
    709 }
    710 
    711 inline bool is_ignored_dynamic_output_shape_2(int i) {
    712   static std::set<int> ignore = {};
    713   return ignore.find(i) != ignore.end();
    714 }
    715 
    716 // Create the model
    717 Model createTestModel_dynamic_output_shape_relaxed_2() {
    718     const std::vector<Operand> operands = {
    719         {
    720             .type = OperandType::TENSOR_FLOAT32,
    721             .dimensions = {1},
    722             .numberOfConsumers = 1,
    723             .scale = 0.0f,
    724             .zeroPoint = 0,
    725             .lifetime = OperandLifeTime::MODEL_INPUT,
    726             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    727         },
    728         {
    729             .type = OperandType::TENSOR_INT32,
    730             .dimensions = {1},
    731             .numberOfConsumers = 1,
    732             .scale = 0.0f,
    733             .zeroPoint = 0,
    734             .lifetime = OperandLifeTime::CONSTANT_COPY,
    735             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    736         },
    737         {
    738             .type = OperandType::BOOL,
    739             .dimensions = {},
    740             .numberOfConsumers = 1,
    741             .scale = 0.0f,
    742             .zeroPoint = 0,
    743             .lifetime = OperandLifeTime::CONSTANT_COPY,
    744             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    745         },
    746         {
    747             .type = OperandType::TENSOR_FLOAT32,
    748             .dimensions = {0},
    749             .numberOfConsumers = 0,
    750             .scale = 0.0f,
    751             .zeroPoint = 0,
    752             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    753             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    754         }
    755     };
    756 
    757     const std::vector<Operation> operations = {
    758         {
    759             .type = OperationType::REDUCE_PROD,
    760             .inputs = {0, 1, 2},
    761             .outputs = {3},
    762         }
    763     };
    764 
    765     const std::vector<uint32_t> inputIndexes = {0};
    766     const std::vector<uint32_t> outputIndexes = {3};
    767     std::vector<uint8_t> operandValues = {
    768       0, 0, 0, 0, 1
    769     };
    770     const std::vector<hidl_memory> pools = {};
    771 
    772     return {
    773         .operands = operands,
    774         .operations = operations,
    775         .inputIndexes = inputIndexes,
    776         .outputIndexes = outputIndexes,
    777         .operandValues = operandValues,
    778         .pools = pools,
    779         .relaxComputationFloat32toFloat16 = true,
    780     };
    781 }
    782 
    783 inline bool is_ignored_dynamic_output_shape_relaxed_2(int i) {
    784   static std::set<int> ignore = {};
    785   return ignore.find(i) != ignore.end();
    786 }
    787 
    788 // Create the model
    789 Model createTestModel_dynamic_output_shape_float16_2() {
    790     const std::vector<Operand> operands = {
    791         {
    792             .type = OperandType::TENSOR_FLOAT16,
    793             .dimensions = {1},
    794             .numberOfConsumers = 1,
    795             .scale = 0.0f,
    796             .zeroPoint = 0,
    797             .lifetime = OperandLifeTime::MODEL_INPUT,
    798             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    799         },
    800         {
    801             .type = OperandType::TENSOR_INT32,
    802             .dimensions = {1},
    803             .numberOfConsumers = 1,
    804             .scale = 0.0f,
    805             .zeroPoint = 0,
    806             .lifetime = OperandLifeTime::CONSTANT_COPY,
    807             .location = {.poolIndex = 0, .offset = 0, .length = 4},
    808         },
    809         {
    810             .type = OperandType::BOOL,
    811             .dimensions = {},
    812             .numberOfConsumers = 1,
    813             .scale = 0.0f,
    814             .zeroPoint = 0,
    815             .lifetime = OperandLifeTime::CONSTANT_COPY,
    816             .location = {.poolIndex = 0, .offset = 4, .length = 1},
    817         },
    818         {
    819             .type = OperandType::TENSOR_FLOAT16,
    820             .dimensions = {0},
    821             .numberOfConsumers = 0,
    822             .scale = 0.0f,
    823             .zeroPoint = 0,
    824             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    825             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    826         }
    827     };
    828 
    829     const std::vector<Operation> operations = {
    830         {
    831             .type = OperationType::REDUCE_PROD,
    832             .inputs = {0, 1, 2},
    833             .outputs = {3},
    834         }
    835     };
    836 
    837     const std::vector<uint32_t> inputIndexes = {0};
    838     const std::vector<uint32_t> outputIndexes = {3};
    839     std::vector<uint8_t> operandValues = {
    840       0, 0, 0, 0, 1
    841     };
    842     const std::vector<hidl_memory> pools = {};
    843 
    844     return {
    845         .operands = operands,
    846         .operations = operations,
    847         .inputIndexes = inputIndexes,
    848         .outputIndexes = outputIndexes,
    849         .operandValues = operandValues,
    850         .pools = pools,
    851     };
    852 }
    853 
    854 inline bool is_ignored_dynamic_output_shape_float16_2(int i) {
    855   static std::set<int> ignore = {};
    856   return ignore.find(i) != ignore.end();
    857 }
    858 
    859 // Create the model
    860 Model createTestModel_3() {
    861     const std::vector<Operand> operands = {
    862         {
    863             .type = OperandType::TENSOR_FLOAT32,
    864             .dimensions = {4, 3, 2},
    865             .numberOfConsumers = 1,
    866             .scale = 0.0f,
    867             .zeroPoint = 0,
    868             .lifetime = OperandLifeTime::MODEL_INPUT,
    869             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    870         },
    871         {
    872             .type = OperandType::TENSOR_INT32,
    873             .dimensions = {4},
    874             .numberOfConsumers = 1,
    875             .scale = 0.0f,
    876             .zeroPoint = 0,
    877             .lifetime = OperandLifeTime::CONSTANT_COPY,
    878             .location = {.poolIndex = 0, .offset = 0, .length = 16},
    879         },
    880         {
    881             .type = OperandType::BOOL,
    882             .dimensions = {},
    883             .numberOfConsumers = 1,
    884             .scale = 0.0f,
    885             .zeroPoint = 0,
    886             .lifetime = OperandLifeTime::CONSTANT_COPY,
    887             .location = {.poolIndex = 0, .offset = 16, .length = 1},
    888         },
    889         {
    890             .type = OperandType::TENSOR_FLOAT32,
    891             .dimensions = {2},
    892             .numberOfConsumers = 0,
    893             .scale = 0.0f,
    894             .zeroPoint = 0,
    895             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    896             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    897         }
    898     };
    899 
    900     const std::vector<Operation> operations = {
    901         {
    902             .type = OperationType::REDUCE_PROD,
    903             .inputs = {0, 1, 2},
    904             .outputs = {3},
    905         }
    906     };
    907 
    908     const std::vector<uint32_t> inputIndexes = {0};
    909     const std::vector<uint32_t> outputIndexes = {3};
    910     std::vector<uint8_t> operandValues = {
    911       1, 0, 0, 0, 0, 0, 0, 0, 253, 255, 255, 255, 253, 255, 255, 255, 0
    912     };
    913     const std::vector<hidl_memory> pools = {};
    914 
    915     return {
    916         .operands = operands,
    917         .operations = operations,
    918         .inputIndexes = inputIndexes,
    919         .outputIndexes = outputIndexes,
    920         .operandValues = operandValues,
    921         .pools = pools,
    922     };
    923 }
    924 
    925 inline bool is_ignored_3(int i) {
    926   static std::set<int> ignore = {};
    927   return ignore.find(i) != ignore.end();
    928 }
    929 
    930 // Create the model
    931 Model createTestModel_relaxed_3() {
    932     const std::vector<Operand> operands = {
    933         {
    934             .type = OperandType::TENSOR_FLOAT32,
    935             .dimensions = {4, 3, 2},
    936             .numberOfConsumers = 1,
    937             .scale = 0.0f,
    938             .zeroPoint = 0,
    939             .lifetime = OperandLifeTime::MODEL_INPUT,
    940             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    941         },
    942         {
    943             .type = OperandType::TENSOR_INT32,
    944             .dimensions = {4},
    945             .numberOfConsumers = 1,
    946             .scale = 0.0f,
    947             .zeroPoint = 0,
    948             .lifetime = OperandLifeTime::CONSTANT_COPY,
    949             .location = {.poolIndex = 0, .offset = 0, .length = 16},
    950         },
    951         {
    952             .type = OperandType::BOOL,
    953             .dimensions = {},
    954             .numberOfConsumers = 1,
    955             .scale = 0.0f,
    956             .zeroPoint = 0,
    957             .lifetime = OperandLifeTime::CONSTANT_COPY,
    958             .location = {.poolIndex = 0, .offset = 16, .length = 1},
    959         },
    960         {
    961             .type = OperandType::TENSOR_FLOAT32,
    962             .dimensions = {2},
    963             .numberOfConsumers = 0,
    964             .scale = 0.0f,
    965             .zeroPoint = 0,
    966             .lifetime = OperandLifeTime::MODEL_OUTPUT,
    967             .location = {.poolIndex = 0, .offset = 0, .length = 0},
    968         }
    969     };
    970 
    971     const std::vector<Operation> operations = {
    972         {
    973             .type = OperationType::REDUCE_PROD,
    974             .inputs = {0, 1, 2},
    975             .outputs = {3},
    976         }
    977     };
    978 
    979     const std::vector<uint32_t> inputIndexes = {0};
    980     const std::vector<uint32_t> outputIndexes = {3};
    981     std::vector<uint8_t> operandValues = {
    982       1, 0, 0, 0, 0, 0, 0, 0, 253, 255, 255, 255, 253, 255, 255, 255, 0
    983     };
    984     const std::vector<hidl_memory> pools = {};
    985 
    986     return {
    987         .operands = operands,
    988         .operations = operations,
    989         .inputIndexes = inputIndexes,
    990         .outputIndexes = outputIndexes,
    991         .operandValues = operandValues,
    992         .pools = pools,
    993         .relaxComputationFloat32toFloat16 = true,
    994     };
    995 }
    996 
    997 inline bool is_ignored_relaxed_3(int i) {
    998   static std::set<int> ignore = {};
    999   return ignore.find(i) != ignore.end();
   1000 }
   1001 
   1002 // Create the model
   1003 Model createTestModel_float16_3() {
   1004     const std::vector<Operand> operands = {
   1005         {
   1006             .type = OperandType::TENSOR_FLOAT16,
   1007             .dimensions = {4, 3, 2},
   1008             .numberOfConsumers = 1,
   1009             .scale = 0.0f,
   1010             .zeroPoint = 0,
   1011             .lifetime = OperandLifeTime::MODEL_INPUT,
   1012             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1013         },
   1014         {
   1015             .type = OperandType::TENSOR_INT32,
   1016             .dimensions = {4},
   1017             .numberOfConsumers = 1,
   1018             .scale = 0.0f,
   1019             .zeroPoint = 0,
   1020             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1021             .location = {.poolIndex = 0, .offset = 0, .length = 16},
   1022         },
   1023         {
   1024             .type = OperandType::BOOL,
   1025             .dimensions = {},
   1026             .numberOfConsumers = 1,
   1027             .scale = 0.0f,
   1028             .zeroPoint = 0,
   1029             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1030             .location = {.poolIndex = 0, .offset = 16, .length = 1},
   1031         },
   1032         {
   1033             .type = OperandType::TENSOR_FLOAT16,
   1034             .dimensions = {2},
   1035             .numberOfConsumers = 0,
   1036             .scale = 0.0f,
   1037             .zeroPoint = 0,
   1038             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1039             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1040         }
   1041     };
   1042 
   1043     const std::vector<Operation> operations = {
   1044         {
   1045             .type = OperationType::REDUCE_PROD,
   1046             .inputs = {0, 1, 2},
   1047             .outputs = {3},
   1048         }
   1049     };
   1050 
   1051     const std::vector<uint32_t> inputIndexes = {0};
   1052     const std::vector<uint32_t> outputIndexes = {3};
   1053     std::vector<uint8_t> operandValues = {
   1054       1, 0, 0, 0, 0, 0, 0, 0, 253, 255, 255, 255, 253, 255, 255, 255, 0
   1055     };
   1056     const std::vector<hidl_memory> pools = {};
   1057 
   1058     return {
   1059         .operands = operands,
   1060         .operations = operations,
   1061         .inputIndexes = inputIndexes,
   1062         .outputIndexes = outputIndexes,
   1063         .operandValues = operandValues,
   1064         .pools = pools,
   1065     };
   1066 }
   1067 
   1068 inline bool is_ignored_float16_3(int i) {
   1069   static std::set<int> ignore = {};
   1070   return ignore.find(i) != ignore.end();
   1071 }
   1072 
   1073 // Create the model
   1074 Model createTestModel_dynamic_output_shape_3() {
   1075     const std::vector<Operand> operands = {
   1076         {
   1077             .type = OperandType::TENSOR_FLOAT32,
   1078             .dimensions = {4, 3, 2},
   1079             .numberOfConsumers = 1,
   1080             .scale = 0.0f,
   1081             .zeroPoint = 0,
   1082             .lifetime = OperandLifeTime::MODEL_INPUT,
   1083             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1084         },
   1085         {
   1086             .type = OperandType::TENSOR_INT32,
   1087             .dimensions = {4},
   1088             .numberOfConsumers = 1,
   1089             .scale = 0.0f,
   1090             .zeroPoint = 0,
   1091             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1092             .location = {.poolIndex = 0, .offset = 0, .length = 16},
   1093         },
   1094         {
   1095             .type = OperandType::BOOL,
   1096             .dimensions = {},
   1097             .numberOfConsumers = 1,
   1098             .scale = 0.0f,
   1099             .zeroPoint = 0,
   1100             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1101             .location = {.poolIndex = 0, .offset = 16, .length = 1},
   1102         },
   1103         {
   1104             .type = OperandType::TENSOR_FLOAT32,
   1105             .dimensions = {0},
   1106             .numberOfConsumers = 0,
   1107             .scale = 0.0f,
   1108             .zeroPoint = 0,
   1109             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1110             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1111         }
   1112     };
   1113 
   1114     const std::vector<Operation> operations = {
   1115         {
   1116             .type = OperationType::REDUCE_PROD,
   1117             .inputs = {0, 1, 2},
   1118             .outputs = {3},
   1119         }
   1120     };
   1121 
   1122     const std::vector<uint32_t> inputIndexes = {0};
   1123     const std::vector<uint32_t> outputIndexes = {3};
   1124     std::vector<uint8_t> operandValues = {
   1125       1, 0, 0, 0, 0, 0, 0, 0, 253, 255, 255, 255, 253, 255, 255, 255, 0
   1126     };
   1127     const std::vector<hidl_memory> pools = {};
   1128 
   1129     return {
   1130         .operands = operands,
   1131         .operations = operations,
   1132         .inputIndexes = inputIndexes,
   1133         .outputIndexes = outputIndexes,
   1134         .operandValues = operandValues,
   1135         .pools = pools,
   1136     };
   1137 }
   1138 
   1139 inline bool is_ignored_dynamic_output_shape_3(int i) {
   1140   static std::set<int> ignore = {};
   1141   return ignore.find(i) != ignore.end();
   1142 }
   1143 
   1144 // Create the model
   1145 Model createTestModel_dynamic_output_shape_relaxed_3() {
   1146     const std::vector<Operand> operands = {
   1147         {
   1148             .type = OperandType::TENSOR_FLOAT32,
   1149             .dimensions = {4, 3, 2},
   1150             .numberOfConsumers = 1,
   1151             .scale = 0.0f,
   1152             .zeroPoint = 0,
   1153             .lifetime = OperandLifeTime::MODEL_INPUT,
   1154             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1155         },
   1156         {
   1157             .type = OperandType::TENSOR_INT32,
   1158             .dimensions = {4},
   1159             .numberOfConsumers = 1,
   1160             .scale = 0.0f,
   1161             .zeroPoint = 0,
   1162             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1163             .location = {.poolIndex = 0, .offset = 0, .length = 16},
   1164         },
   1165         {
   1166             .type = OperandType::BOOL,
   1167             .dimensions = {},
   1168             .numberOfConsumers = 1,
   1169             .scale = 0.0f,
   1170             .zeroPoint = 0,
   1171             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1172             .location = {.poolIndex = 0, .offset = 16, .length = 1},
   1173         },
   1174         {
   1175             .type = OperandType::TENSOR_FLOAT32,
   1176             .dimensions = {0},
   1177             .numberOfConsumers = 0,
   1178             .scale = 0.0f,
   1179             .zeroPoint = 0,
   1180             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1181             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1182         }
   1183     };
   1184 
   1185     const std::vector<Operation> operations = {
   1186         {
   1187             .type = OperationType::REDUCE_PROD,
   1188             .inputs = {0, 1, 2},
   1189             .outputs = {3},
   1190         }
   1191     };
   1192 
   1193     const std::vector<uint32_t> inputIndexes = {0};
   1194     const std::vector<uint32_t> outputIndexes = {3};
   1195     std::vector<uint8_t> operandValues = {
   1196       1, 0, 0, 0, 0, 0, 0, 0, 253, 255, 255, 255, 253, 255, 255, 255, 0
   1197     };
   1198     const std::vector<hidl_memory> pools = {};
   1199 
   1200     return {
   1201         .operands = operands,
   1202         .operations = operations,
   1203         .inputIndexes = inputIndexes,
   1204         .outputIndexes = outputIndexes,
   1205         .operandValues = operandValues,
   1206         .pools = pools,
   1207         .relaxComputationFloat32toFloat16 = true,
   1208     };
   1209 }
   1210 
   1211 inline bool is_ignored_dynamic_output_shape_relaxed_3(int i) {
   1212   static std::set<int> ignore = {};
   1213   return ignore.find(i) != ignore.end();
   1214 }
   1215 
   1216 // Create the model
   1217 Model createTestModel_dynamic_output_shape_float16_3() {
   1218     const std::vector<Operand> operands = {
   1219         {
   1220             .type = OperandType::TENSOR_FLOAT16,
   1221             .dimensions = {4, 3, 2},
   1222             .numberOfConsumers = 1,
   1223             .scale = 0.0f,
   1224             .zeroPoint = 0,
   1225             .lifetime = OperandLifeTime::MODEL_INPUT,
   1226             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1227         },
   1228         {
   1229             .type = OperandType::TENSOR_INT32,
   1230             .dimensions = {4},
   1231             .numberOfConsumers = 1,
   1232             .scale = 0.0f,
   1233             .zeroPoint = 0,
   1234             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1235             .location = {.poolIndex = 0, .offset = 0, .length = 16},
   1236         },
   1237         {
   1238             .type = OperandType::BOOL,
   1239             .dimensions = {},
   1240             .numberOfConsumers = 1,
   1241             .scale = 0.0f,
   1242             .zeroPoint = 0,
   1243             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1244             .location = {.poolIndex = 0, .offset = 16, .length = 1},
   1245         },
   1246         {
   1247             .type = OperandType::TENSOR_FLOAT16,
   1248             .dimensions = {0},
   1249             .numberOfConsumers = 0,
   1250             .scale = 0.0f,
   1251             .zeroPoint = 0,
   1252             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1253             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1254         }
   1255     };
   1256 
   1257     const std::vector<Operation> operations = {
   1258         {
   1259             .type = OperationType::REDUCE_PROD,
   1260             .inputs = {0, 1, 2},
   1261             .outputs = {3},
   1262         }
   1263     };
   1264 
   1265     const std::vector<uint32_t> inputIndexes = {0};
   1266     const std::vector<uint32_t> outputIndexes = {3};
   1267     std::vector<uint8_t> operandValues = {
   1268       1, 0, 0, 0, 0, 0, 0, 0, 253, 255, 255, 255, 253, 255, 255, 255, 0
   1269     };
   1270     const std::vector<hidl_memory> pools = {};
   1271 
   1272     return {
   1273         .operands = operands,
   1274         .operations = operations,
   1275         .inputIndexes = inputIndexes,
   1276         .outputIndexes = outputIndexes,
   1277         .operandValues = operandValues,
   1278         .pools = pools,
   1279     };
   1280 }
   1281 
   1282 inline bool is_ignored_dynamic_output_shape_float16_3(int i) {
   1283   static std::set<int> ignore = {};
   1284   return ignore.find(i) != ignore.end();
   1285 }
   1286 
   1287 // Create the model
   1288 Model createTestModel_4() {
   1289     const std::vector<Operand> operands = {
   1290         {
   1291             .type = OperandType::TENSOR_FLOAT32,
   1292             .dimensions = {4, 3, 2},
   1293             .numberOfConsumers = 1,
   1294             .scale = 0.0f,
   1295             .zeroPoint = 0,
   1296             .lifetime = OperandLifeTime::MODEL_INPUT,
   1297             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1298         },
   1299         {
   1300             .type = OperandType::TENSOR_INT32,
   1301             .dimensions = {2},
   1302             .numberOfConsumers = 1,
   1303             .scale = 0.0f,
   1304             .zeroPoint = 0,
   1305             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1306             .location = {.poolIndex = 0, .offset = 0, .length = 8},
   1307         },
   1308         {
   1309             .type = OperandType::BOOL,
   1310             .dimensions = {},
   1311             .numberOfConsumers = 1,
   1312             .scale = 0.0f,
   1313             .zeroPoint = 0,
   1314             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1315             .location = {.poolIndex = 0, .offset = 8, .length = 1},
   1316         },
   1317         {
   1318             .type = OperandType::TENSOR_FLOAT32,
   1319             .dimensions = {1, 3, 1},
   1320             .numberOfConsumers = 0,
   1321             .scale = 0.0f,
   1322             .zeroPoint = 0,
   1323             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1324             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1325         }
   1326     };
   1327 
   1328     const std::vector<Operation> operations = {
   1329         {
   1330             .type = OperationType::REDUCE_PROD,
   1331             .inputs = {0, 1, 2},
   1332             .outputs = {3},
   1333         }
   1334     };
   1335 
   1336     const std::vector<uint32_t> inputIndexes = {0};
   1337     const std::vector<uint32_t> outputIndexes = {3};
   1338     std::vector<uint8_t> operandValues = {
   1339       0, 0, 0, 0, 2, 0, 0, 0, 1
   1340     };
   1341     const std::vector<hidl_memory> pools = {};
   1342 
   1343     return {
   1344         .operands = operands,
   1345         .operations = operations,
   1346         .inputIndexes = inputIndexes,
   1347         .outputIndexes = outputIndexes,
   1348         .operandValues = operandValues,
   1349         .pools = pools,
   1350     };
   1351 }
   1352 
   1353 inline bool is_ignored_4(int i) {
   1354   static std::set<int> ignore = {};
   1355   return ignore.find(i) != ignore.end();
   1356 }
   1357 
   1358 // Create the model
   1359 Model createTestModel_relaxed_4() {
   1360     const std::vector<Operand> operands = {
   1361         {
   1362             .type = OperandType::TENSOR_FLOAT32,
   1363             .dimensions = {4, 3, 2},
   1364             .numberOfConsumers = 1,
   1365             .scale = 0.0f,
   1366             .zeroPoint = 0,
   1367             .lifetime = OperandLifeTime::MODEL_INPUT,
   1368             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1369         },
   1370         {
   1371             .type = OperandType::TENSOR_INT32,
   1372             .dimensions = {2},
   1373             .numberOfConsumers = 1,
   1374             .scale = 0.0f,
   1375             .zeroPoint = 0,
   1376             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1377             .location = {.poolIndex = 0, .offset = 0, .length = 8},
   1378         },
   1379         {
   1380             .type = OperandType::BOOL,
   1381             .dimensions = {},
   1382             .numberOfConsumers = 1,
   1383             .scale = 0.0f,
   1384             .zeroPoint = 0,
   1385             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1386             .location = {.poolIndex = 0, .offset = 8, .length = 1},
   1387         },
   1388         {
   1389             .type = OperandType::TENSOR_FLOAT32,
   1390             .dimensions = {1, 3, 1},
   1391             .numberOfConsumers = 0,
   1392             .scale = 0.0f,
   1393             .zeroPoint = 0,
   1394             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1395             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1396         }
   1397     };
   1398 
   1399     const std::vector<Operation> operations = {
   1400         {
   1401             .type = OperationType::REDUCE_PROD,
   1402             .inputs = {0, 1, 2},
   1403             .outputs = {3},
   1404         }
   1405     };
   1406 
   1407     const std::vector<uint32_t> inputIndexes = {0};
   1408     const std::vector<uint32_t> outputIndexes = {3};
   1409     std::vector<uint8_t> operandValues = {
   1410       0, 0, 0, 0, 2, 0, 0, 0, 1
   1411     };
   1412     const std::vector<hidl_memory> pools = {};
   1413 
   1414     return {
   1415         .operands = operands,
   1416         .operations = operations,
   1417         .inputIndexes = inputIndexes,
   1418         .outputIndexes = outputIndexes,
   1419         .operandValues = operandValues,
   1420         .pools = pools,
   1421         .relaxComputationFloat32toFloat16 = true,
   1422     };
   1423 }
   1424 
   1425 inline bool is_ignored_relaxed_4(int i) {
   1426   static std::set<int> ignore = {};
   1427   return ignore.find(i) != ignore.end();
   1428 }
   1429 
   1430 // Create the model
   1431 Model createTestModel_float16_4() {
   1432     const std::vector<Operand> operands = {
   1433         {
   1434             .type = OperandType::TENSOR_FLOAT16,
   1435             .dimensions = {4, 3, 2},
   1436             .numberOfConsumers = 1,
   1437             .scale = 0.0f,
   1438             .zeroPoint = 0,
   1439             .lifetime = OperandLifeTime::MODEL_INPUT,
   1440             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1441         },
   1442         {
   1443             .type = OperandType::TENSOR_INT32,
   1444             .dimensions = {2},
   1445             .numberOfConsumers = 1,
   1446             .scale = 0.0f,
   1447             .zeroPoint = 0,
   1448             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1449             .location = {.poolIndex = 0, .offset = 0, .length = 8},
   1450         },
   1451         {
   1452             .type = OperandType::BOOL,
   1453             .dimensions = {},
   1454             .numberOfConsumers = 1,
   1455             .scale = 0.0f,
   1456             .zeroPoint = 0,
   1457             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1458             .location = {.poolIndex = 0, .offset = 8, .length = 1},
   1459         },
   1460         {
   1461             .type = OperandType::TENSOR_FLOAT16,
   1462             .dimensions = {1, 3, 1},
   1463             .numberOfConsumers = 0,
   1464             .scale = 0.0f,
   1465             .zeroPoint = 0,
   1466             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1467             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1468         }
   1469     };
   1470 
   1471     const std::vector<Operation> operations = {
   1472         {
   1473             .type = OperationType::REDUCE_PROD,
   1474             .inputs = {0, 1, 2},
   1475             .outputs = {3},
   1476         }
   1477     };
   1478 
   1479     const std::vector<uint32_t> inputIndexes = {0};
   1480     const std::vector<uint32_t> outputIndexes = {3};
   1481     std::vector<uint8_t> operandValues = {
   1482       0, 0, 0, 0, 2, 0, 0, 0, 1
   1483     };
   1484     const std::vector<hidl_memory> pools = {};
   1485 
   1486     return {
   1487         .operands = operands,
   1488         .operations = operations,
   1489         .inputIndexes = inputIndexes,
   1490         .outputIndexes = outputIndexes,
   1491         .operandValues = operandValues,
   1492         .pools = pools,
   1493     };
   1494 }
   1495 
   1496 inline bool is_ignored_float16_4(int i) {
   1497   static std::set<int> ignore = {};
   1498   return ignore.find(i) != ignore.end();
   1499 }
   1500 
   1501 // Create the model
   1502 Model createTestModel_dynamic_output_shape_4() {
   1503     const std::vector<Operand> operands = {
   1504         {
   1505             .type = OperandType::TENSOR_FLOAT32,
   1506             .dimensions = {4, 3, 2},
   1507             .numberOfConsumers = 1,
   1508             .scale = 0.0f,
   1509             .zeroPoint = 0,
   1510             .lifetime = OperandLifeTime::MODEL_INPUT,
   1511             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1512         },
   1513         {
   1514             .type = OperandType::TENSOR_INT32,
   1515             .dimensions = {2},
   1516             .numberOfConsumers = 1,
   1517             .scale = 0.0f,
   1518             .zeroPoint = 0,
   1519             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1520             .location = {.poolIndex = 0, .offset = 0, .length = 8},
   1521         },
   1522         {
   1523             .type = OperandType::BOOL,
   1524             .dimensions = {},
   1525             .numberOfConsumers = 1,
   1526             .scale = 0.0f,
   1527             .zeroPoint = 0,
   1528             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1529             .location = {.poolIndex = 0, .offset = 8, .length = 1},
   1530         },
   1531         {
   1532             .type = OperandType::TENSOR_FLOAT32,
   1533             .dimensions = {0, 0, 0},
   1534             .numberOfConsumers = 0,
   1535             .scale = 0.0f,
   1536             .zeroPoint = 0,
   1537             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1538             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1539         }
   1540     };
   1541 
   1542     const std::vector<Operation> operations = {
   1543         {
   1544             .type = OperationType::REDUCE_PROD,
   1545             .inputs = {0, 1, 2},
   1546             .outputs = {3},
   1547         }
   1548     };
   1549 
   1550     const std::vector<uint32_t> inputIndexes = {0};
   1551     const std::vector<uint32_t> outputIndexes = {3};
   1552     std::vector<uint8_t> operandValues = {
   1553       0, 0, 0, 0, 2, 0, 0, 0, 1
   1554     };
   1555     const std::vector<hidl_memory> pools = {};
   1556 
   1557     return {
   1558         .operands = operands,
   1559         .operations = operations,
   1560         .inputIndexes = inputIndexes,
   1561         .outputIndexes = outputIndexes,
   1562         .operandValues = operandValues,
   1563         .pools = pools,
   1564     };
   1565 }
   1566 
   1567 inline bool is_ignored_dynamic_output_shape_4(int i) {
   1568   static std::set<int> ignore = {};
   1569   return ignore.find(i) != ignore.end();
   1570 }
   1571 
   1572 // Create the model
   1573 Model createTestModel_dynamic_output_shape_relaxed_4() {
   1574     const std::vector<Operand> operands = {
   1575         {
   1576             .type = OperandType::TENSOR_FLOAT32,
   1577             .dimensions = {4, 3, 2},
   1578             .numberOfConsumers = 1,
   1579             .scale = 0.0f,
   1580             .zeroPoint = 0,
   1581             .lifetime = OperandLifeTime::MODEL_INPUT,
   1582             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1583         },
   1584         {
   1585             .type = OperandType::TENSOR_INT32,
   1586             .dimensions = {2},
   1587             .numberOfConsumers = 1,
   1588             .scale = 0.0f,
   1589             .zeroPoint = 0,
   1590             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1591             .location = {.poolIndex = 0, .offset = 0, .length = 8},
   1592         },
   1593         {
   1594             .type = OperandType::BOOL,
   1595             .dimensions = {},
   1596             .numberOfConsumers = 1,
   1597             .scale = 0.0f,
   1598             .zeroPoint = 0,
   1599             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1600             .location = {.poolIndex = 0, .offset = 8, .length = 1},
   1601         },
   1602         {
   1603             .type = OperandType::TENSOR_FLOAT32,
   1604             .dimensions = {0, 0, 0},
   1605             .numberOfConsumers = 0,
   1606             .scale = 0.0f,
   1607             .zeroPoint = 0,
   1608             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1609             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1610         }
   1611     };
   1612 
   1613     const std::vector<Operation> operations = {
   1614         {
   1615             .type = OperationType::REDUCE_PROD,
   1616             .inputs = {0, 1, 2},
   1617             .outputs = {3},
   1618         }
   1619     };
   1620 
   1621     const std::vector<uint32_t> inputIndexes = {0};
   1622     const std::vector<uint32_t> outputIndexes = {3};
   1623     std::vector<uint8_t> operandValues = {
   1624       0, 0, 0, 0, 2, 0, 0, 0, 1
   1625     };
   1626     const std::vector<hidl_memory> pools = {};
   1627 
   1628     return {
   1629         .operands = operands,
   1630         .operations = operations,
   1631         .inputIndexes = inputIndexes,
   1632         .outputIndexes = outputIndexes,
   1633         .operandValues = operandValues,
   1634         .pools = pools,
   1635         .relaxComputationFloat32toFloat16 = true,
   1636     };
   1637 }
   1638 
   1639 inline bool is_ignored_dynamic_output_shape_relaxed_4(int i) {
   1640   static std::set<int> ignore = {};
   1641   return ignore.find(i) != ignore.end();
   1642 }
   1643 
   1644 // Create the model
   1645 Model createTestModel_dynamic_output_shape_float16_4() {
   1646     const std::vector<Operand> operands = {
   1647         {
   1648             .type = OperandType::TENSOR_FLOAT16,
   1649             .dimensions = {4, 3, 2},
   1650             .numberOfConsumers = 1,
   1651             .scale = 0.0f,
   1652             .zeroPoint = 0,
   1653             .lifetime = OperandLifeTime::MODEL_INPUT,
   1654             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1655         },
   1656         {
   1657             .type = OperandType::TENSOR_INT32,
   1658             .dimensions = {2},
   1659             .numberOfConsumers = 1,
   1660             .scale = 0.0f,
   1661             .zeroPoint = 0,
   1662             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1663             .location = {.poolIndex = 0, .offset = 0, .length = 8},
   1664         },
   1665         {
   1666             .type = OperandType::BOOL,
   1667             .dimensions = {},
   1668             .numberOfConsumers = 1,
   1669             .scale = 0.0f,
   1670             .zeroPoint = 0,
   1671             .lifetime = OperandLifeTime::CONSTANT_COPY,
   1672             .location = {.poolIndex = 0, .offset = 8, .length = 1},
   1673         },
   1674         {
   1675             .type = OperandType::TENSOR_FLOAT16,
   1676             .dimensions = {0, 0, 0},
   1677             .numberOfConsumers = 0,
   1678             .scale = 0.0f,
   1679             .zeroPoint = 0,
   1680             .lifetime = OperandLifeTime::MODEL_OUTPUT,
   1681             .location = {.poolIndex = 0, .offset = 0, .length = 0},
   1682         }
   1683     };
   1684 
   1685     const std::vector<Operation> operations = {
   1686         {
   1687             .type = OperationType::REDUCE_PROD,
   1688             .inputs = {0, 1, 2},
   1689             .outputs = {3},
   1690         }
   1691     };
   1692 
   1693     const std::vector<uint32_t> inputIndexes = {0};
   1694     const std::vector<uint32_t> outputIndexes = {3};
   1695     std::vector<uint8_t> operandValues = {
   1696       0, 0, 0, 0, 2, 0, 0, 0, 1
   1697     };
   1698     const std::vector<hidl_memory> pools = {};
   1699 
   1700     return {
   1701         .operands = operands,
   1702         .operations = operations,
   1703         .inputIndexes = inputIndexes,
   1704         .outputIndexes = outputIndexes,
   1705         .operandValues = operandValues,
   1706         .pools = pools,
   1707     };
   1708 }
   1709 
   1710 inline bool is_ignored_dynamic_output_shape_float16_4(int i) {
   1711   static std::set<int> ignore = {};
   1712   return ignore.find(i) != ignore.end();
   1713 }
   1714 
   1715