Home | History | Annotate | Download | only in models
      1 // clang-format off
      2 // Generated file (from: topk_v2.mod.py). Do not edit
      3 void CreateModel(Model *model) {
      4   OperandType type0(Type::TENSOR_FLOAT32, {2, 2});
      5   OperandType type1(Type::INT32, {});
      6   OperandType type2(Type::TENSOR_INT32, {2, 2});
      7   // Phase 1, operands
      8   auto input = model->addOperand(&type0);
      9   auto k = model->addOperand(&type1);
     10   auto out_values = model->addOperand(&type0);
     11   auto out_indices = model->addOperand(&type2);
     12   // Phase 2, operations
     13   static int32_t k_init[] = {2};
     14   model->setOperandValue(k, k_init, sizeof(int32_t) * 1);
     15   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input, k}, {out_values, out_indices});
     16   // Phase 3, inputs and outputs
     17   model->identifyInputsAndOutputs(
     18     {input},
     19     {out_values, out_indices});
     20   assert(model->isValid());
     21 }
     22 
     23 inline bool is_ignored(int i) {
     24   static std::set<int> ignore = {};
     25   return ignore.find(i) != ignore.end();
     26 }
     27 
     28 void CreateModel_relaxed(Model *model) {
     29   OperandType type0(Type::TENSOR_FLOAT32, {2, 2});
     30   OperandType type1(Type::INT32, {});
     31   OperandType type2(Type::TENSOR_INT32, {2, 2});
     32   // Phase 1, operands
     33   auto input = model->addOperand(&type0);
     34   auto k = model->addOperand(&type1);
     35   auto out_values = model->addOperand(&type0);
     36   auto out_indices = model->addOperand(&type2);
     37   // Phase 2, operations
     38   static int32_t k_init[] = {2};
     39   model->setOperandValue(k, k_init, sizeof(int32_t) * 1);
     40   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input, k}, {out_values, out_indices});
     41   // Phase 3, inputs and outputs
     42   model->identifyInputsAndOutputs(
     43     {input},
     44     {out_values, out_indices});
     45   // Phase 4: set relaxed execution
     46   model->relaxComputationFloat32toFloat16(true);
     47   assert(model->isValid());
     48 }
     49 
     50 inline bool is_ignored_relaxed(int i) {
     51   static std::set<int> ignore = {};
     52   return ignore.find(i) != ignore.end();
     53 }
     54 
     55 void CreateModel_float16(Model *model) {
     56   OperandType type1(Type::INT32, {});
     57   OperandType type11(Type::TENSOR_FLOAT16, {2, 2});
     58   OperandType type2(Type::TENSOR_INT32, {2, 2});
     59   // Phase 1, operands
     60   auto input = model->addOperand(&type11);
     61   auto k = model->addOperand(&type1);
     62   auto out_values = model->addOperand(&type11);
     63   auto out_indices = model->addOperand(&type2);
     64   // Phase 2, operations
     65   static int32_t k_init[] = {2};
     66   model->setOperandValue(k, k_init, sizeof(int32_t) * 1);
     67   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input, k}, {out_values, out_indices});
     68   // Phase 3, inputs and outputs
     69   model->identifyInputsAndOutputs(
     70     {input},
     71     {out_values, out_indices});
     72   assert(model->isValid());
     73 }
     74 
     75 inline bool is_ignored_float16(int i) {
     76   static std::set<int> ignore = {};
     77   return ignore.find(i) != ignore.end();
     78 }
     79 
     80 void CreateModel_dynamic_output_shape(Model *model) {
     81   OperandType type0(Type::TENSOR_FLOAT32, {2, 2});
     82   OperandType type1(Type::INT32, {});
     83   OperandType type12(Type::TENSOR_FLOAT32, {0, 0});
     84   OperandType type13(Type::TENSOR_INT32, {0, 0});
     85   // Phase 1, operands
     86   auto input = model->addOperand(&type0);
     87   auto k = model->addOperand(&type1);
     88   auto out_values = model->addOperand(&type12);
     89   auto out_indices = model->addOperand(&type13);
     90   // Phase 2, operations
     91   static int32_t k_init[] = {2};
     92   model->setOperandValue(k, k_init, sizeof(int32_t) * 1);
     93   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input, k}, {out_values, out_indices});
     94   // Phase 3, inputs and outputs
     95   model->identifyInputsAndOutputs(
     96     {input},
     97     {out_values, out_indices});
     98   assert(model->isValid());
     99 }
    100 
    101 inline bool is_ignored_dynamic_output_shape(int i) {
    102   static std::set<int> ignore = {};
    103   return ignore.find(i) != ignore.end();
    104 }
    105 
    106 void CreateModel_dynamic_output_shape_relaxed(Model *model) {
    107   OperandType type0(Type::TENSOR_FLOAT32, {2, 2});
    108   OperandType type1(Type::INT32, {});
    109   OperandType type12(Type::TENSOR_FLOAT32, {0, 0});
    110   OperandType type13(Type::TENSOR_INT32, {0, 0});
    111   // Phase 1, operands
    112   auto input = model->addOperand(&type0);
    113   auto k = model->addOperand(&type1);
    114   auto out_values = model->addOperand(&type12);
    115   auto out_indices = model->addOperand(&type13);
    116   // Phase 2, operations
    117   static int32_t k_init[] = {2};
    118   model->setOperandValue(k, k_init, sizeof(int32_t) * 1);
    119   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input, k}, {out_values, out_indices});
    120   // Phase 3, inputs and outputs
    121   model->identifyInputsAndOutputs(
    122     {input},
    123     {out_values, out_indices});
    124   // Phase 4: set relaxed execution
    125   model->relaxComputationFloat32toFloat16(true);
    126   assert(model->isValid());
    127 }
    128 
    129 inline bool is_ignored_dynamic_output_shape_relaxed(int i) {
    130   static std::set<int> ignore = {};
    131   return ignore.find(i) != ignore.end();
    132 }
    133 
    134 void CreateModel_dynamic_output_shape_float16(Model *model) {
    135   OperandType type1(Type::INT32, {});
    136   OperandType type11(Type::TENSOR_FLOAT16, {2, 2});
    137   OperandType type13(Type::TENSOR_INT32, {0, 0});
    138   OperandType type14(Type::TENSOR_FLOAT16, {0, 0});
    139   // Phase 1, operands
    140   auto input = model->addOperand(&type11);
    141   auto k = model->addOperand(&type1);
    142   auto out_values = model->addOperand(&type14);
    143   auto out_indices = model->addOperand(&type13);
    144   // Phase 2, operations
    145   static int32_t k_init[] = {2};
    146   model->setOperandValue(k, k_init, sizeof(int32_t) * 1);
    147   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input, k}, {out_values, out_indices});
    148   // Phase 3, inputs and outputs
    149   model->identifyInputsAndOutputs(
    150     {input},
    151     {out_values, out_indices});
    152   assert(model->isValid());
    153 }
    154 
    155 inline bool is_ignored_dynamic_output_shape_float16(int i) {
    156   static std::set<int> ignore = {};
    157   return ignore.find(i) != ignore.end();
    158 }
    159 
    160 void CreateModel_2(Model *model) {
    161   OperandType type0(Type::TENSOR_FLOAT32, {2, 2});
    162   OperandType type1(Type::INT32, {});
    163   OperandType type2(Type::TENSOR_INT32, {2, 2});
    164   OperandType type3(Type::TENSOR_FLOAT32, {2, 3});
    165   // Phase 1, operands
    166   auto input1 = model->addOperand(&type3);
    167   auto k1 = model->addOperand(&type1);
    168   auto out_values1 = model->addOperand(&type0);
    169   auto out_indices1 = model->addOperand(&type2);
    170   // Phase 2, operations
    171   static int32_t k1_init[] = {2};
    172   model->setOperandValue(k1, k1_init, sizeof(int32_t) * 1);
    173   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input1, k1}, {out_values1, out_indices1});
    174   // Phase 3, inputs and outputs
    175   model->identifyInputsAndOutputs(
    176     {input1},
    177     {out_values1, out_indices1});
    178   assert(model->isValid());
    179 }
    180 
    181 inline bool is_ignored_2(int i) {
    182   static std::set<int> ignore = {};
    183   return ignore.find(i) != ignore.end();
    184 }
    185 
    186 void CreateModel_relaxed_2(Model *model) {
    187   OperandType type0(Type::TENSOR_FLOAT32, {2, 2});
    188   OperandType type1(Type::INT32, {});
    189   OperandType type2(Type::TENSOR_INT32, {2, 2});
    190   OperandType type3(Type::TENSOR_FLOAT32, {2, 3});
    191   // Phase 1, operands
    192   auto input1 = model->addOperand(&type3);
    193   auto k1 = model->addOperand(&type1);
    194   auto out_values1 = model->addOperand(&type0);
    195   auto out_indices1 = model->addOperand(&type2);
    196   // Phase 2, operations
    197   static int32_t k1_init[] = {2};
    198   model->setOperandValue(k1, k1_init, sizeof(int32_t) * 1);
    199   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input1, k1}, {out_values1, out_indices1});
    200   // Phase 3, inputs and outputs
    201   model->identifyInputsAndOutputs(
    202     {input1},
    203     {out_values1, out_indices1});
    204   // Phase 4: set relaxed execution
    205   model->relaxComputationFloat32toFloat16(true);
    206   assert(model->isValid());
    207 }
    208 
    209 inline bool is_ignored_relaxed_2(int i) {
    210   static std::set<int> ignore = {};
    211   return ignore.find(i) != ignore.end();
    212 }
    213 
    214 void CreateModel_float16_2(Model *model) {
    215   OperandType type1(Type::INT32, {});
    216   OperandType type11(Type::TENSOR_FLOAT16, {2, 2});
    217   OperandType type15(Type::TENSOR_FLOAT16, {2, 3});
    218   OperandType type2(Type::TENSOR_INT32, {2, 2});
    219   // Phase 1, operands
    220   auto input1 = model->addOperand(&type15);
    221   auto k1 = model->addOperand(&type1);
    222   auto out_values1 = model->addOperand(&type11);
    223   auto out_indices1 = model->addOperand(&type2);
    224   // Phase 2, operations
    225   static int32_t k1_init[] = {2};
    226   model->setOperandValue(k1, k1_init, sizeof(int32_t) * 1);
    227   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input1, k1}, {out_values1, out_indices1});
    228   // Phase 3, inputs and outputs
    229   model->identifyInputsAndOutputs(
    230     {input1},
    231     {out_values1, out_indices1});
    232   assert(model->isValid());
    233 }
    234 
    235 inline bool is_ignored_float16_2(int i) {
    236   static std::set<int> ignore = {};
    237   return ignore.find(i) != ignore.end();
    238 }
    239 
    240 void CreateModel_dynamic_output_shape_2(Model *model) {
    241   OperandType type1(Type::INT32, {});
    242   OperandType type12(Type::TENSOR_FLOAT32, {0, 0});
    243   OperandType type13(Type::TENSOR_INT32, {0, 0});
    244   OperandType type3(Type::TENSOR_FLOAT32, {2, 3});
    245   // Phase 1, operands
    246   auto input1 = model->addOperand(&type3);
    247   auto k1 = model->addOperand(&type1);
    248   auto out_values1 = model->addOperand(&type12);
    249   auto out_indices1 = model->addOperand(&type13);
    250   // Phase 2, operations
    251   static int32_t k1_init[] = {2};
    252   model->setOperandValue(k1, k1_init, sizeof(int32_t) * 1);
    253   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input1, k1}, {out_values1, out_indices1});
    254   // Phase 3, inputs and outputs
    255   model->identifyInputsAndOutputs(
    256     {input1},
    257     {out_values1, out_indices1});
    258   assert(model->isValid());
    259 }
    260 
    261 inline bool is_ignored_dynamic_output_shape_2(int i) {
    262   static std::set<int> ignore = {};
    263   return ignore.find(i) != ignore.end();
    264 }
    265 
    266 void CreateModel_dynamic_output_shape_relaxed_2(Model *model) {
    267   OperandType type1(Type::INT32, {});
    268   OperandType type12(Type::TENSOR_FLOAT32, {0, 0});
    269   OperandType type13(Type::TENSOR_INT32, {0, 0});
    270   OperandType type3(Type::TENSOR_FLOAT32, {2, 3});
    271   // Phase 1, operands
    272   auto input1 = model->addOperand(&type3);
    273   auto k1 = model->addOperand(&type1);
    274   auto out_values1 = model->addOperand(&type12);
    275   auto out_indices1 = model->addOperand(&type13);
    276   // Phase 2, operations
    277   static int32_t k1_init[] = {2};
    278   model->setOperandValue(k1, k1_init, sizeof(int32_t) * 1);
    279   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input1, k1}, {out_values1, out_indices1});
    280   // Phase 3, inputs and outputs
    281   model->identifyInputsAndOutputs(
    282     {input1},
    283     {out_values1, out_indices1});
    284   // Phase 4: set relaxed execution
    285   model->relaxComputationFloat32toFloat16(true);
    286   assert(model->isValid());
    287 }
    288 
    289 inline bool is_ignored_dynamic_output_shape_relaxed_2(int i) {
    290   static std::set<int> ignore = {};
    291   return ignore.find(i) != ignore.end();
    292 }
    293 
    294 void CreateModel_dynamic_output_shape_float16_2(Model *model) {
    295   OperandType type1(Type::INT32, {});
    296   OperandType type13(Type::TENSOR_INT32, {0, 0});
    297   OperandType type14(Type::TENSOR_FLOAT16, {0, 0});
    298   OperandType type15(Type::TENSOR_FLOAT16, {2, 3});
    299   // Phase 1, operands
    300   auto input1 = model->addOperand(&type15);
    301   auto k1 = model->addOperand(&type1);
    302   auto out_values1 = model->addOperand(&type14);
    303   auto out_indices1 = model->addOperand(&type13);
    304   // Phase 2, operations
    305   static int32_t k1_init[] = {2};
    306   model->setOperandValue(k1, k1_init, sizeof(int32_t) * 1);
    307   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input1, k1}, {out_values1, out_indices1});
    308   // Phase 3, inputs and outputs
    309   model->identifyInputsAndOutputs(
    310     {input1},
    311     {out_values1, out_indices1});
    312   assert(model->isValid());
    313 }
    314 
    315 inline bool is_ignored_dynamic_output_shape_float16_2(int i) {
    316   static std::set<int> ignore = {};
    317   return ignore.find(i) != ignore.end();
    318 }
    319 
    320 void CreateModel_3(Model *model) {
    321   OperandType type0(Type::TENSOR_FLOAT32, {2, 2});
    322   OperandType type1(Type::INT32, {});
    323   OperandType type2(Type::TENSOR_INT32, {2, 2});
    324   OperandType type4(Type::TENSOR_FLOAT32, {2, 4});
    325   // Phase 1, operands
    326   auto input2 = model->addOperand(&type4);
    327   auto k2 = model->addOperand(&type1);
    328   auto out_values2 = model->addOperand(&type0);
    329   auto out_indices2 = model->addOperand(&type2);
    330   // Phase 2, operations
    331   static int32_t k2_init[] = {2};
    332   model->setOperandValue(k2, k2_init, sizeof(int32_t) * 1);
    333   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input2, k2}, {out_values2, out_indices2});
    334   // Phase 3, inputs and outputs
    335   model->identifyInputsAndOutputs(
    336     {input2},
    337     {out_values2, out_indices2});
    338   assert(model->isValid());
    339 }
    340 
    341 inline bool is_ignored_3(int i) {
    342   static std::set<int> ignore = {};
    343   return ignore.find(i) != ignore.end();
    344 }
    345 
    346 void CreateModel_relaxed_3(Model *model) {
    347   OperandType type0(Type::TENSOR_FLOAT32, {2, 2});
    348   OperandType type1(Type::INT32, {});
    349   OperandType type2(Type::TENSOR_INT32, {2, 2});
    350   OperandType type4(Type::TENSOR_FLOAT32, {2, 4});
    351   // Phase 1, operands
    352   auto input2 = model->addOperand(&type4);
    353   auto k2 = model->addOperand(&type1);
    354   auto out_values2 = model->addOperand(&type0);
    355   auto out_indices2 = model->addOperand(&type2);
    356   // Phase 2, operations
    357   static int32_t k2_init[] = {2};
    358   model->setOperandValue(k2, k2_init, sizeof(int32_t) * 1);
    359   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input2, k2}, {out_values2, out_indices2});
    360   // Phase 3, inputs and outputs
    361   model->identifyInputsAndOutputs(
    362     {input2},
    363     {out_values2, out_indices2});
    364   // Phase 4: set relaxed execution
    365   model->relaxComputationFloat32toFloat16(true);
    366   assert(model->isValid());
    367 }
    368 
    369 inline bool is_ignored_relaxed_3(int i) {
    370   static std::set<int> ignore = {};
    371   return ignore.find(i) != ignore.end();
    372 }
    373 
    374 void CreateModel_float16_3(Model *model) {
    375   OperandType type1(Type::INT32, {});
    376   OperandType type11(Type::TENSOR_FLOAT16, {2, 2});
    377   OperandType type16(Type::TENSOR_FLOAT16, {2, 4});
    378   OperandType type2(Type::TENSOR_INT32, {2, 2});
    379   // Phase 1, operands
    380   auto input2 = model->addOperand(&type16);
    381   auto k2 = model->addOperand(&type1);
    382   auto out_values2 = model->addOperand(&type11);
    383   auto out_indices2 = model->addOperand(&type2);
    384   // Phase 2, operations
    385   static int32_t k2_init[] = {2};
    386   model->setOperandValue(k2, k2_init, sizeof(int32_t) * 1);
    387   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input2, k2}, {out_values2, out_indices2});
    388   // Phase 3, inputs and outputs
    389   model->identifyInputsAndOutputs(
    390     {input2},
    391     {out_values2, out_indices2});
    392   assert(model->isValid());
    393 }
    394 
    395 inline bool is_ignored_float16_3(int i) {
    396   static std::set<int> ignore = {};
    397   return ignore.find(i) != ignore.end();
    398 }
    399 
    400 void CreateModel_dynamic_output_shape_3(Model *model) {
    401   OperandType type1(Type::INT32, {});
    402   OperandType type12(Type::TENSOR_FLOAT32, {0, 0});
    403   OperandType type13(Type::TENSOR_INT32, {0, 0});
    404   OperandType type4(Type::TENSOR_FLOAT32, {2, 4});
    405   // Phase 1, operands
    406   auto input2 = model->addOperand(&type4);
    407   auto k2 = model->addOperand(&type1);
    408   auto out_values2 = model->addOperand(&type12);
    409   auto out_indices2 = model->addOperand(&type13);
    410   // Phase 2, operations
    411   static int32_t k2_init[] = {2};
    412   model->setOperandValue(k2, k2_init, sizeof(int32_t) * 1);
    413   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input2, k2}, {out_values2, out_indices2});
    414   // Phase 3, inputs and outputs
    415   model->identifyInputsAndOutputs(
    416     {input2},
    417     {out_values2, out_indices2});
    418   assert(model->isValid());
    419 }
    420 
    421 inline bool is_ignored_dynamic_output_shape_3(int i) {
    422   static std::set<int> ignore = {};
    423   return ignore.find(i) != ignore.end();
    424 }
    425 
    426 void CreateModel_dynamic_output_shape_relaxed_3(Model *model) {
    427   OperandType type1(Type::INT32, {});
    428   OperandType type12(Type::TENSOR_FLOAT32, {0, 0});
    429   OperandType type13(Type::TENSOR_INT32, {0, 0});
    430   OperandType type4(Type::TENSOR_FLOAT32, {2, 4});
    431   // Phase 1, operands
    432   auto input2 = model->addOperand(&type4);
    433   auto k2 = model->addOperand(&type1);
    434   auto out_values2 = model->addOperand(&type12);
    435   auto out_indices2 = model->addOperand(&type13);
    436   // Phase 2, operations
    437   static int32_t k2_init[] = {2};
    438   model->setOperandValue(k2, k2_init, sizeof(int32_t) * 1);
    439   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input2, k2}, {out_values2, out_indices2});
    440   // Phase 3, inputs and outputs
    441   model->identifyInputsAndOutputs(
    442     {input2},
    443     {out_values2, out_indices2});
    444   // Phase 4: set relaxed execution
    445   model->relaxComputationFloat32toFloat16(true);
    446   assert(model->isValid());
    447 }
    448 
    449 inline bool is_ignored_dynamic_output_shape_relaxed_3(int i) {
    450   static std::set<int> ignore = {};
    451   return ignore.find(i) != ignore.end();
    452 }
    453 
    454 void CreateModel_dynamic_output_shape_float16_3(Model *model) {
    455   OperandType type1(Type::INT32, {});
    456   OperandType type13(Type::TENSOR_INT32, {0, 0});
    457   OperandType type14(Type::TENSOR_FLOAT16, {0, 0});
    458   OperandType type16(Type::TENSOR_FLOAT16, {2, 4});
    459   // Phase 1, operands
    460   auto input2 = model->addOperand(&type16);
    461   auto k2 = model->addOperand(&type1);
    462   auto out_values2 = model->addOperand(&type14);
    463   auto out_indices2 = model->addOperand(&type13);
    464   // Phase 2, operations
    465   static int32_t k2_init[] = {2};
    466   model->setOperandValue(k2, k2_init, sizeof(int32_t) * 1);
    467   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input2, k2}, {out_values2, out_indices2});
    468   // Phase 3, inputs and outputs
    469   model->identifyInputsAndOutputs(
    470     {input2},
    471     {out_values2, out_indices2});
    472   assert(model->isValid());
    473 }
    474 
    475 inline bool is_ignored_dynamic_output_shape_float16_3(int i) {
    476   static std::set<int> ignore = {};
    477   return ignore.find(i) != ignore.end();
    478 }
    479 
    480 void CreateModel_4(Model *model) {
    481   OperandType type1(Type::INT32, {});
    482   OperandType type5(Type::TENSOR_FLOAT32, {8});
    483   OperandType type6(Type::TENSOR_FLOAT32, {2});
    484   OperandType type7(Type::TENSOR_INT32, {2});
    485   // Phase 1, operands
    486   auto input3 = model->addOperand(&type5);
    487   auto k3 = model->addOperand(&type1);
    488   auto out_values3 = model->addOperand(&type6);
    489   auto out_indices3 = model->addOperand(&type7);
    490   // Phase 2, operations
    491   static int32_t k3_init[] = {2};
    492   model->setOperandValue(k3, k3_init, sizeof(int32_t) * 1);
    493   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input3, k3}, {out_values3, out_indices3});
    494   // Phase 3, inputs and outputs
    495   model->identifyInputsAndOutputs(
    496     {input3},
    497     {out_values3, out_indices3});
    498   assert(model->isValid());
    499 }
    500 
    501 inline bool is_ignored_4(int i) {
    502   static std::set<int> ignore = {};
    503   return ignore.find(i) != ignore.end();
    504 }
    505 
    506 void CreateModel_relaxed_4(Model *model) {
    507   OperandType type1(Type::INT32, {});
    508   OperandType type5(Type::TENSOR_FLOAT32, {8});
    509   OperandType type6(Type::TENSOR_FLOAT32, {2});
    510   OperandType type7(Type::TENSOR_INT32, {2});
    511   // Phase 1, operands
    512   auto input3 = model->addOperand(&type5);
    513   auto k3 = model->addOperand(&type1);
    514   auto out_values3 = model->addOperand(&type6);
    515   auto out_indices3 = model->addOperand(&type7);
    516   // Phase 2, operations
    517   static int32_t k3_init[] = {2};
    518   model->setOperandValue(k3, k3_init, sizeof(int32_t) * 1);
    519   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input3, k3}, {out_values3, out_indices3});
    520   // Phase 3, inputs and outputs
    521   model->identifyInputsAndOutputs(
    522     {input3},
    523     {out_values3, out_indices3});
    524   // Phase 4: set relaxed execution
    525   model->relaxComputationFloat32toFloat16(true);
    526   assert(model->isValid());
    527 }
    528 
    529 inline bool is_ignored_relaxed_4(int i) {
    530   static std::set<int> ignore = {};
    531   return ignore.find(i) != ignore.end();
    532 }
    533 
    534 void CreateModel_float16_4(Model *model) {
    535   OperandType type1(Type::INT32, {});
    536   OperandType type17(Type::TENSOR_FLOAT16, {8});
    537   OperandType type18(Type::TENSOR_FLOAT16, {2});
    538   OperandType type7(Type::TENSOR_INT32, {2});
    539   // Phase 1, operands
    540   auto input3 = model->addOperand(&type17);
    541   auto k3 = model->addOperand(&type1);
    542   auto out_values3 = model->addOperand(&type18);
    543   auto out_indices3 = model->addOperand(&type7);
    544   // Phase 2, operations
    545   static int32_t k3_init[] = {2};
    546   model->setOperandValue(k3, k3_init, sizeof(int32_t) * 1);
    547   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input3, k3}, {out_values3, out_indices3});
    548   // Phase 3, inputs and outputs
    549   model->identifyInputsAndOutputs(
    550     {input3},
    551     {out_values3, out_indices3});
    552   assert(model->isValid());
    553 }
    554 
    555 inline bool is_ignored_float16_4(int i) {
    556   static std::set<int> ignore = {};
    557   return ignore.find(i) != ignore.end();
    558 }
    559 
    560 void CreateModel_dynamic_output_shape_4(Model *model) {
    561   OperandType type1(Type::INT32, {});
    562   OperandType type19(Type::TENSOR_FLOAT32, {0});
    563   OperandType type20(Type::TENSOR_INT32, {0});
    564   OperandType type5(Type::TENSOR_FLOAT32, {8});
    565   // Phase 1, operands
    566   auto input3 = model->addOperand(&type5);
    567   auto k3 = model->addOperand(&type1);
    568   auto out_values3 = model->addOperand(&type19);
    569   auto out_indices3 = model->addOperand(&type20);
    570   // Phase 2, operations
    571   static int32_t k3_init[] = {2};
    572   model->setOperandValue(k3, k3_init, sizeof(int32_t) * 1);
    573   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input3, k3}, {out_values3, out_indices3});
    574   // Phase 3, inputs and outputs
    575   model->identifyInputsAndOutputs(
    576     {input3},
    577     {out_values3, out_indices3});
    578   assert(model->isValid());
    579 }
    580 
    581 inline bool is_ignored_dynamic_output_shape_4(int i) {
    582   static std::set<int> ignore = {};
    583   return ignore.find(i) != ignore.end();
    584 }
    585 
    586 void CreateModel_dynamic_output_shape_relaxed_4(Model *model) {
    587   OperandType type1(Type::INT32, {});
    588   OperandType type19(Type::TENSOR_FLOAT32, {0});
    589   OperandType type20(Type::TENSOR_INT32, {0});
    590   OperandType type5(Type::TENSOR_FLOAT32, {8});
    591   // Phase 1, operands
    592   auto input3 = model->addOperand(&type5);
    593   auto k3 = model->addOperand(&type1);
    594   auto out_values3 = model->addOperand(&type19);
    595   auto out_indices3 = model->addOperand(&type20);
    596   // Phase 2, operations
    597   static int32_t k3_init[] = {2};
    598   model->setOperandValue(k3, k3_init, sizeof(int32_t) * 1);
    599   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input3, k3}, {out_values3, out_indices3});
    600   // Phase 3, inputs and outputs
    601   model->identifyInputsAndOutputs(
    602     {input3},
    603     {out_values3, out_indices3});
    604   // Phase 4: set relaxed execution
    605   model->relaxComputationFloat32toFloat16(true);
    606   assert(model->isValid());
    607 }
    608 
    609 inline bool is_ignored_dynamic_output_shape_relaxed_4(int i) {
    610   static std::set<int> ignore = {};
    611   return ignore.find(i) != ignore.end();
    612 }
    613 
    614 void CreateModel_dynamic_output_shape_float16_4(Model *model) {
    615   OperandType type1(Type::INT32, {});
    616   OperandType type17(Type::TENSOR_FLOAT16, {8});
    617   OperandType type20(Type::TENSOR_INT32, {0});
    618   OperandType type21(Type::TENSOR_FLOAT16, {0});
    619   // Phase 1, operands
    620   auto input3 = model->addOperand(&type17);
    621   auto k3 = model->addOperand(&type1);
    622   auto out_values3 = model->addOperand(&type21);
    623   auto out_indices3 = model->addOperand(&type20);
    624   // Phase 2, operations
    625   static int32_t k3_init[] = {2};
    626   model->setOperandValue(k3, k3_init, sizeof(int32_t) * 1);
    627   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input3, k3}, {out_values3, out_indices3});
    628   // Phase 3, inputs and outputs
    629   model->identifyInputsAndOutputs(
    630     {input3},
    631     {out_values3, out_indices3});
    632   assert(model->isValid());
    633 }
    634 
    635 inline bool is_ignored_dynamic_output_shape_float16_4(int i) {
    636   static std::set<int> ignore = {};
    637   return ignore.find(i) != ignore.end();
    638 }
    639 
    640 void CreateModel_5(Model *model) {
    641   OperandType type1(Type::INT32, {});
    642   OperandType type2(Type::TENSOR_INT32, {2, 2});
    643   OperandType type8(Type::TENSOR_QUANT8_ASYMM, {2, 3}, 2.0f, 128);
    644   OperandType type9(Type::TENSOR_QUANT8_ASYMM, {2, 2}, 2.0f, 128);
    645   // Phase 1, operands
    646   auto input4 = model->addOperand(&type8);
    647   auto k4 = model->addOperand(&type1);
    648   auto out_values4 = model->addOperand(&type9);
    649   auto out_indices4 = model->addOperand(&type2);
    650   // Phase 2, operations
    651   static int32_t k4_init[] = {2};
    652   model->setOperandValue(k4, k4_init, sizeof(int32_t) * 1);
    653   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input4, k4}, {out_values4, out_indices4});
    654   // Phase 3, inputs and outputs
    655   model->identifyInputsAndOutputs(
    656     {input4},
    657     {out_values4, out_indices4});
    658   assert(model->isValid());
    659 }
    660 
    661 inline bool is_ignored_5(int i) {
    662   static std::set<int> ignore = {};
    663   return ignore.find(i) != ignore.end();
    664 }
    665 
    666 void CreateModel_relaxed_5(Model *model) {
    667   OperandType type1(Type::INT32, {});
    668   OperandType type2(Type::TENSOR_INT32, {2, 2});
    669   OperandType type8(Type::TENSOR_QUANT8_ASYMM, {2, 3}, 2.0f, 128);
    670   OperandType type9(Type::TENSOR_QUANT8_ASYMM, {2, 2}, 2.0f, 128);
    671   // Phase 1, operands
    672   auto input4 = model->addOperand(&type8);
    673   auto k4 = model->addOperand(&type1);
    674   auto out_values4 = model->addOperand(&type9);
    675   auto out_indices4 = model->addOperand(&type2);
    676   // Phase 2, operations
    677   static int32_t k4_init[] = {2};
    678   model->setOperandValue(k4, k4_init, sizeof(int32_t) * 1);
    679   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input4, k4}, {out_values4, out_indices4});
    680   // Phase 3, inputs and outputs
    681   model->identifyInputsAndOutputs(
    682     {input4},
    683     {out_values4, out_indices4});
    684   // Phase 4: set relaxed execution
    685   model->relaxComputationFloat32toFloat16(true);
    686   assert(model->isValid());
    687 }
    688 
    689 inline bool is_ignored_relaxed_5(int i) {
    690   static std::set<int> ignore = {};
    691   return ignore.find(i) != ignore.end();
    692 }
    693 
    694 void CreateModel_float16_5(Model *model) {
    695   OperandType type1(Type::INT32, {});
    696   OperandType type2(Type::TENSOR_INT32, {2, 2});
    697   OperandType type8(Type::TENSOR_QUANT8_ASYMM, {2, 3}, 2.0f, 128);
    698   OperandType type9(Type::TENSOR_QUANT8_ASYMM, {2, 2}, 2.0f, 128);
    699   // Phase 1, operands
    700   auto input4 = model->addOperand(&type8);
    701   auto k4 = model->addOperand(&type1);
    702   auto out_values4 = model->addOperand(&type9);
    703   auto out_indices4 = model->addOperand(&type2);
    704   // Phase 2, operations
    705   static int32_t k4_init[] = {2};
    706   model->setOperandValue(k4, k4_init, sizeof(int32_t) * 1);
    707   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input4, k4}, {out_values4, out_indices4});
    708   // Phase 3, inputs and outputs
    709   model->identifyInputsAndOutputs(
    710     {input4},
    711     {out_values4, out_indices4});
    712   assert(model->isValid());
    713 }
    714 
    715 inline bool is_ignored_float16_5(int i) {
    716   static std::set<int> ignore = {};
    717   return ignore.find(i) != ignore.end();
    718 }
    719 
    720 void CreateModel_dynamic_output_shape_5(Model *model) {
    721   OperandType type1(Type::INT32, {});
    722   OperandType type13(Type::TENSOR_INT32, {0, 0});
    723   OperandType type22(Type::TENSOR_QUANT8_ASYMM, {0, 0}, 2.0f, 128);
    724   OperandType type8(Type::TENSOR_QUANT8_ASYMM, {2, 3}, 2.0f, 128);
    725   // Phase 1, operands
    726   auto input4 = model->addOperand(&type8);
    727   auto k4 = model->addOperand(&type1);
    728   auto out_values4 = model->addOperand(&type22);
    729   auto out_indices4 = model->addOperand(&type13);
    730   // Phase 2, operations
    731   static int32_t k4_init[] = {2};
    732   model->setOperandValue(k4, k4_init, sizeof(int32_t) * 1);
    733   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input4, k4}, {out_values4, out_indices4});
    734   // Phase 3, inputs and outputs
    735   model->identifyInputsAndOutputs(
    736     {input4},
    737     {out_values4, out_indices4});
    738   assert(model->isValid());
    739 }
    740 
    741 inline bool is_ignored_dynamic_output_shape_5(int i) {
    742   static std::set<int> ignore = {};
    743   return ignore.find(i) != ignore.end();
    744 }
    745 
    746 void CreateModel_dynamic_output_shape_relaxed_5(Model *model) {
    747   OperandType type1(Type::INT32, {});
    748   OperandType type13(Type::TENSOR_INT32, {0, 0});
    749   OperandType type22(Type::TENSOR_QUANT8_ASYMM, {0, 0}, 2.0f, 128);
    750   OperandType type8(Type::TENSOR_QUANT8_ASYMM, {2, 3}, 2.0f, 128);
    751   // Phase 1, operands
    752   auto input4 = model->addOperand(&type8);
    753   auto k4 = model->addOperand(&type1);
    754   auto out_values4 = model->addOperand(&type22);
    755   auto out_indices4 = model->addOperand(&type13);
    756   // Phase 2, operations
    757   static int32_t k4_init[] = {2};
    758   model->setOperandValue(k4, k4_init, sizeof(int32_t) * 1);
    759   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input4, k4}, {out_values4, out_indices4});
    760   // Phase 3, inputs and outputs
    761   model->identifyInputsAndOutputs(
    762     {input4},
    763     {out_values4, out_indices4});
    764   // Phase 4: set relaxed execution
    765   model->relaxComputationFloat32toFloat16(true);
    766   assert(model->isValid());
    767 }
    768 
    769 inline bool is_ignored_dynamic_output_shape_relaxed_5(int i) {
    770   static std::set<int> ignore = {};
    771   return ignore.find(i) != ignore.end();
    772 }
    773 
    774 void CreateModel_dynamic_output_shape_float16_5(Model *model) {
    775   OperandType type1(Type::INT32, {});
    776   OperandType type13(Type::TENSOR_INT32, {0, 0});
    777   OperandType type22(Type::TENSOR_QUANT8_ASYMM, {0, 0}, 2.0f, 128);
    778   OperandType type8(Type::TENSOR_QUANT8_ASYMM, {2, 3}, 2.0f, 128);
    779   // Phase 1, operands
    780   auto input4 = model->addOperand(&type8);
    781   auto k4 = model->addOperand(&type1);
    782   auto out_values4 = model->addOperand(&type22);
    783   auto out_indices4 = model->addOperand(&type13);
    784   // Phase 2, operations
    785   static int32_t k4_init[] = {2};
    786   model->setOperandValue(k4, k4_init, sizeof(int32_t) * 1);
    787   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input4, k4}, {out_values4, out_indices4});
    788   // Phase 3, inputs and outputs
    789   model->identifyInputsAndOutputs(
    790     {input4},
    791     {out_values4, out_indices4});
    792   assert(model->isValid());
    793 }
    794 
    795 inline bool is_ignored_dynamic_output_shape_float16_5(int i) {
    796   static std::set<int> ignore = {};
    797   return ignore.find(i) != ignore.end();
    798 }
    799 
    800 void CreateModel_6(Model *model) {
    801   OperandType type1(Type::INT32, {});
    802   OperandType type10(Type::TENSOR_INT32, {2, 3});
    803   OperandType type2(Type::TENSOR_INT32, {2, 2});
    804   // Phase 1, operands
    805   auto input5 = model->addOperand(&type10);
    806   auto k5 = model->addOperand(&type1);
    807   auto out_values5 = model->addOperand(&type2);
    808   auto out_indices5 = model->addOperand(&type2);
    809   // Phase 2, operations
    810   static int32_t k5_init[] = {2};
    811   model->setOperandValue(k5, k5_init, sizeof(int32_t) * 1);
    812   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input5, k5}, {out_values5, out_indices5});
    813   // Phase 3, inputs and outputs
    814   model->identifyInputsAndOutputs(
    815     {input5},
    816     {out_values5, out_indices5});
    817   assert(model->isValid());
    818 }
    819 
    820 inline bool is_ignored_6(int i) {
    821   static std::set<int> ignore = {};
    822   return ignore.find(i) != ignore.end();
    823 }
    824 
    825 void CreateModel_relaxed_6(Model *model) {
    826   OperandType type1(Type::INT32, {});
    827   OperandType type10(Type::TENSOR_INT32, {2, 3});
    828   OperandType type2(Type::TENSOR_INT32, {2, 2});
    829   // Phase 1, operands
    830   auto input5 = model->addOperand(&type10);
    831   auto k5 = model->addOperand(&type1);
    832   auto out_values5 = model->addOperand(&type2);
    833   auto out_indices5 = model->addOperand(&type2);
    834   // Phase 2, operations
    835   static int32_t k5_init[] = {2};
    836   model->setOperandValue(k5, k5_init, sizeof(int32_t) * 1);
    837   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input5, k5}, {out_values5, out_indices5});
    838   // Phase 3, inputs and outputs
    839   model->identifyInputsAndOutputs(
    840     {input5},
    841     {out_values5, out_indices5});
    842   // Phase 4: set relaxed execution
    843   model->relaxComputationFloat32toFloat16(true);
    844   assert(model->isValid());
    845 }
    846 
    847 inline bool is_ignored_relaxed_6(int i) {
    848   static std::set<int> ignore = {};
    849   return ignore.find(i) != ignore.end();
    850 }
    851 
    852 void CreateModel_float16_6(Model *model) {
    853   OperandType type1(Type::INT32, {});
    854   OperandType type10(Type::TENSOR_INT32, {2, 3});
    855   OperandType type2(Type::TENSOR_INT32, {2, 2});
    856   // Phase 1, operands
    857   auto input5 = model->addOperand(&type10);
    858   auto k5 = model->addOperand(&type1);
    859   auto out_values5 = model->addOperand(&type2);
    860   auto out_indices5 = model->addOperand(&type2);
    861   // Phase 2, operations
    862   static int32_t k5_init[] = {2};
    863   model->setOperandValue(k5, k5_init, sizeof(int32_t) * 1);
    864   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input5, k5}, {out_values5, out_indices5});
    865   // Phase 3, inputs and outputs
    866   model->identifyInputsAndOutputs(
    867     {input5},
    868     {out_values5, out_indices5});
    869   assert(model->isValid());
    870 }
    871 
    872 inline bool is_ignored_float16_6(int i) {
    873   static std::set<int> ignore = {};
    874   return ignore.find(i) != ignore.end();
    875 }
    876 
    877 void CreateModel_dynamic_output_shape_6(Model *model) {
    878   OperandType type1(Type::INT32, {});
    879   OperandType type10(Type::TENSOR_INT32, {2, 3});
    880   OperandType type13(Type::TENSOR_INT32, {0, 0});
    881   // Phase 1, operands
    882   auto input5 = model->addOperand(&type10);
    883   auto k5 = model->addOperand(&type1);
    884   auto out_values5 = model->addOperand(&type13);
    885   auto out_indices5 = model->addOperand(&type13);
    886   // Phase 2, operations
    887   static int32_t k5_init[] = {2};
    888   model->setOperandValue(k5, k5_init, sizeof(int32_t) * 1);
    889   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input5, k5}, {out_values5, out_indices5});
    890   // Phase 3, inputs and outputs
    891   model->identifyInputsAndOutputs(
    892     {input5},
    893     {out_values5, out_indices5});
    894   assert(model->isValid());
    895 }
    896 
    897 inline bool is_ignored_dynamic_output_shape_6(int i) {
    898   static std::set<int> ignore = {};
    899   return ignore.find(i) != ignore.end();
    900 }
    901 
    902 void CreateModel_dynamic_output_shape_relaxed_6(Model *model) {
    903   OperandType type1(Type::INT32, {});
    904   OperandType type10(Type::TENSOR_INT32, {2, 3});
    905   OperandType type13(Type::TENSOR_INT32, {0, 0});
    906   // Phase 1, operands
    907   auto input5 = model->addOperand(&type10);
    908   auto k5 = model->addOperand(&type1);
    909   auto out_values5 = model->addOperand(&type13);
    910   auto out_indices5 = model->addOperand(&type13);
    911   // Phase 2, operations
    912   static int32_t k5_init[] = {2};
    913   model->setOperandValue(k5, k5_init, sizeof(int32_t) * 1);
    914   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input5, k5}, {out_values5, out_indices5});
    915   // Phase 3, inputs and outputs
    916   model->identifyInputsAndOutputs(
    917     {input5},
    918     {out_values5, out_indices5});
    919   // Phase 4: set relaxed execution
    920   model->relaxComputationFloat32toFloat16(true);
    921   assert(model->isValid());
    922 }
    923 
    924 inline bool is_ignored_dynamic_output_shape_relaxed_6(int i) {
    925   static std::set<int> ignore = {};
    926   return ignore.find(i) != ignore.end();
    927 }
    928 
    929 void CreateModel_dynamic_output_shape_float16_6(Model *model) {
    930   OperandType type1(Type::INT32, {});
    931   OperandType type10(Type::TENSOR_INT32, {2, 3});
    932   OperandType type13(Type::TENSOR_INT32, {0, 0});
    933   // Phase 1, operands
    934   auto input5 = model->addOperand(&type10);
    935   auto k5 = model->addOperand(&type1);
    936   auto out_values5 = model->addOperand(&type13);
    937   auto out_indices5 = model->addOperand(&type13);
    938   // Phase 2, operations
    939   static int32_t k5_init[] = {2};
    940   model->setOperandValue(k5, k5_init, sizeof(int32_t) * 1);
    941   model->addOperation(ANEURALNETWORKS_TOPK_V2, {input5, k5}, {out_values5, out_indices5});
    942   // Phase 3, inputs and outputs
    943   model->identifyInputsAndOutputs(
    944     {input5},
    945     {out_values5, out_indices5});
    946   assert(model->isValid());
    947 }
    948 
    949 inline bool is_ignored_dynamic_output_shape_float16_6(int i) {
    950   static std::set<int> ignore = {};
    951   return ignore.find(i) != ignore.end();
    952 }
    953 
    954