tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

gemm.https.any.js (90553B)


      1 // META: title=test WebNN API gemm operation
      2 // META: global=window
      3 // META: variant=?cpu
      4 // META: variant=?gpu
      5 // META: variant=?npu
      6 // META: script=../resources/utils.js
      7 // META: timeout=long
      8 
      9 'use strict';
     10 
     11 // https://www.w3.org/TR/webnn/#api-mlgraphbuilder-gemm
     12 // Calculate the general matrix multiplication of the Basic Linear Algebra
     13 // Subprograms. The calculation follows the expression alpha * A * B + beta * C
     14 //
     15 // dictionary MLGemmOptions {
     16 //   MLOperand c;
     17 //   double alpha = 1.0;
     18 //   double beta = 1.0;
     19 //   boolean aTranspose = false;
     20 //   boolean bTranspose = false;
     21 // };
     22 //
     23 // MLOperand gemm(
     24 //     MLOperand a, MLOperand b, optional MLGemmOptions options = {});
     25 
     26 const gemmTests = [
     27  {
     28    'name': 'gemm two float32 2D tensors (b is non-constant) default options',
     29    'graph': {
     30      'inputs': {
     31        'inputA': {
     32          'data': [
     33            82.98884582519531, 90.51641082763672, 59.638519287109375,
     34            36.271873474121094, 18.9648494720459, 43.89479446411133,
     35            98.89488220214844, 91.46013641357422, 50.51683807373047,
     36            40.45679473876953, 50.76741409301758, 9.336554527282715
     37          ],
     38          'descriptor': {shape: [3, 4], dataType: 'float32'}
     39        },
     40        'inputB': {
     41          'data': [
     42            25.14739227294922,  66.6923828125,     63.29909896850586,
     43            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
     44            16.4991455078125,   3.036668062210083, 93.14022064208984,
     45            70.08265686035156,  75.74880981445312, 96.60688018798828,
     46            99.10041809082031,  23.2437744140625,  86.11856842041016,
     47            42.90679168701172,  34.08055114746094, 87.37654876708984,
     48            92.34209442138672,  60.32209014892578
     49          ],
     50          'descriptor': {shape: [4, 5], dataType: 'float32'}
     51        }
     52      },
     53      'operators': [{
     54        'name': 'gemm',
     55        'arguments': [{'a': 'inputA'}, {'b': 'inputB'}],
     56        'outputs': 'gemmOutput'
     57      }],
     58      'expectedOutputs': {
     59        'gemmOutput': {
     60          'data': [
     61            8161.14697265625, 14025.82421875, 14607.5009765625,
     62            14048.5322265625, 18757.09765625, 11892.5107421875,
     63            14659.9755859375, 19125.74609375, 15034.27734375, 18273.080078125,
     64            5516.6904296875, 9259.267578125, 9167.3916015625, 6347.330078125,
     65            10868.6025390625
     66          ],
     67          'descriptor': {shape: [3, 5], dataType: 'float32'}
     68        }
     69      }
     70    }
     71  },
     72  {
     73    'name': 'gemm two float32 2D tensors default options',
     74    'graph': {
     75      'inputs': {
     76        'inputA': {
     77          'data': [
     78            82.98884582519531, 90.51641082763672, 59.638519287109375,
     79            36.271873474121094, 18.9648494720459, 43.89479446411133,
     80            98.89488220214844, 91.46013641357422, 50.51683807373047,
     81            40.45679473876953, 50.76741409301758, 9.336554527282715
     82          ],
     83          'descriptor': {shape: [3, 4], dataType: 'float32'}
     84        },
     85        'inputB': {
     86          'data': [
     87            25.14739227294922,  66.6923828125,     63.29909896850586,
     88            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
     89            16.4991455078125,   3.036668062210083, 93.14022064208984,
     90            70.08265686035156,  75.74880981445312, 96.60688018798828,
     91            99.10041809082031,  23.2437744140625,  86.11856842041016,
     92            42.90679168701172,  34.08055114746094, 87.37654876708984,
     93            92.34209442138672,  60.32209014892578
     94          ],
     95          'descriptor': {shape: [4, 5], dataType: 'float32'},
     96          'constant': true
     97        }
     98      },
     99      'operators': [{
    100        'name': 'gemm',
    101        'arguments': [{'a': 'inputA'}, {'b': 'inputB'}],
    102        'outputs': 'gemmOutput'
    103      }],
    104      'expectedOutputs': {
    105        'gemmOutput': {
    106          'data': [
    107            8161.14697265625, 14025.82421875, 14607.5009765625,
    108            14048.5322265625, 18757.09765625, 11892.5107421875,
    109            14659.9755859375, 19125.74609375, 15034.27734375, 18273.080078125,
    110            5516.6904296875, 9259.267578125, 9167.3916015625, 6347.330078125,
    111            10868.6025390625
    112          ],
    113          'descriptor': {shape: [3, 5], dataType: 'float32'}
    114        }
    115      }
    116    }
    117  },
    118  {
    119    'name': 'gemm two float32 2D constant tensors options.c',
    120    'graph': {
    121      'inputs': {
    122        'inputA': {
    123          'data': [
    124            82.98884582519531, 90.51641082763672, 59.638519287109375,
    125            36.271873474121094, 18.9648494720459, 43.89479446411133,
    126            98.89488220214844, 91.46013641357422, 50.51683807373047,
    127            40.45679473876953, 50.76741409301758, 9.336554527282715
    128          ],
    129          'descriptor': {shape: [3, 4], dataType: 'float32'},
    130          'constant': true
    131        },
    132        'inputB': {
    133          'data': [
    134            25.14739227294922,  66.6923828125,     63.29909896850586,
    135            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    136            16.4991455078125,   3.036668062210083, 93.14022064208984,
    137            70.08265686035156,  75.74880981445312, 96.60688018798828,
    138            99.10041809082031,  23.2437744140625,  86.11856842041016,
    139            42.90679168701172,  34.08055114746094, 87.37654876708984,
    140            92.34209442138672,  60.32209014892578
    141          ],
    142          'descriptor': {shape: [4, 5], dataType: 'float32'},
    143          'constant': true
    144        },
    145        'inputC': {
    146          'data': [
    147            82.77201843261719, 91.38520812988281, 12.651897430419922,
    148            20.12200355529785, 68.51224517822266, 35.202415466308594,
    149            13.33466625213623, 50.78546905517578, 88.61195373535156,
    150            30.577470779418945, 69.47061920166016, 7.166217803955078,
    151            28.337108612060547, 90.69412231445312, 71.23025512695312
    152          ],
    153          'descriptor': {shape: [3, 5], dataType: 'float32'},
    154          'constant': true
    155        }
    156      },
    157      'operators': [{
    158        'name': 'gemm',
    159        'arguments':
    160            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
    161        'outputs': 'gemmOutput'
    162      }],
    163      'expectedOutputs': {
    164        'gemmOutput': {
    165          'data': [
    166            8243.9189453125, 14117.208984375, 14620.15234375, 14068.654296875,
    167            18825.609375, 11927.712890625, 14673.310546875, 19176.533203125,
    168            15122.8896484375, 18303.658203125, 5586.16064453125, 9266.43359375,
    169            9195.7294921875, 6438.0244140625, 10939.8330078125
    170          ],
    171          'descriptor': {shape: [3, 5], dataType: 'float32'}
    172        }
    173      }
    174    }
    175  },
    176  {
    177    'name': 'gemm two float32 2D tensors options.c',
    178    'graph': {
    179      'inputs': {
    180        'inputA': {
    181          'data': [
    182            82.98884582519531, 90.51641082763672, 59.638519287109375,
    183            36.271873474121094, 18.9648494720459, 43.89479446411133,
    184            98.89488220214844, 91.46013641357422, 50.51683807373047,
    185            40.45679473876953, 50.76741409301758, 9.336554527282715
    186          ],
    187          'descriptor': {shape: [3, 4], dataType: 'float32'}
    188        },
    189        'inputB': {
    190          'data': [
    191            25.14739227294922,  66.6923828125,     63.29909896850586,
    192            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    193            16.4991455078125,   3.036668062210083, 93.14022064208984,
    194            70.08265686035156,  75.74880981445312, 96.60688018798828,
    195            99.10041809082031,  23.2437744140625,  86.11856842041016,
    196            42.90679168701172,  34.08055114746094, 87.37654876708984,
    197            92.34209442138672,  60.32209014892578
    198          ],
    199          'descriptor': {shape: [4, 5], dataType: 'float32'},
    200          'constant': true
    201        },
    202        'inputC': {
    203          'data': [
    204            82.77201843261719, 91.38520812988281, 12.651897430419922,
    205            20.12200355529785, 68.51224517822266, 35.202415466308594,
    206            13.33466625213623, 50.78546905517578, 88.61195373535156,
    207            30.577470779418945, 69.47061920166016, 7.166217803955078,
    208            28.337108612060547, 90.69412231445312, 71.23025512695312
    209          ],
    210          'descriptor': {shape: [3, 5], dataType: 'float32'},
    211          'constant': true
    212        }
    213      },
    214      'operators': [{
    215        'name': 'gemm',
    216        'arguments':
    217            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
    218        'outputs': 'gemmOutput'
    219      }],
    220      'expectedOutputs': {
    221        'gemmOutput': {
    222          'data': [
    223            8243.9189453125, 14117.208984375, 14620.15234375, 14068.654296875,
    224            18825.609375, 11927.712890625, 14673.310546875, 19176.533203125,
    225            15122.8896484375, 18303.658203125, 5586.16064453125, 9266.43359375,
    226            9195.7294921875, 6438.0244140625, 10939.8330078125
    227          ],
    228          'descriptor': {shape: [3, 5], dataType: 'float32'}
    229        }
    230      }
    231    }
    232  },
    233  {
    234    'name': 'gemm two float32 2D tensors broadcast options.c [1, 5] => [3, 5]',
    235    'graph': {
    236      'inputs': {
    237        'inputA': {
    238          'data': [
    239            82.98884582519531, 90.51641082763672, 59.638519287109375,
    240            36.271873474121094, 18.9648494720459, 43.89479446411133,
    241            98.89488220214844, 91.46013641357422, 50.51683807373047,
    242            40.45679473876953, 50.76741409301758, 9.336554527282715
    243          ],
    244          'descriptor': {shape: [3, 4], dataType: 'float32'}
    245        },
    246        'inputB': {
    247          'data': [
    248            25.14739227294922,  66.6923828125,     63.29909896850586,
    249            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    250            16.4991455078125,   3.036668062210083, 93.14022064208984,
    251            70.08265686035156,  75.74880981445312, 96.60688018798828,
    252            99.10041809082031,  23.2437744140625,  86.11856842041016,
    253            42.90679168701172,  34.08055114746094, 87.37654876708984,
    254            92.34209442138672,  60.32209014892578
    255          ],
    256          'descriptor': {shape: [4, 5], dataType: 'float32'},
    257          'constant': true
    258        },
    259        'inputC': {
    260          'data': [
    261            85.90813446044922, 39.3753547668457, 50.942604064941406,
    262            31.87430763244629, 31.210525512695312
    263          ],
    264          'descriptor': {shape: [1, 5], dataType: 'float32'},
    265          'constant': true
    266        }
    267      },
    268      'operators': [{
    269        'name': 'gemm',
    270        'arguments':
    271            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
    272        'outputs': 'gemmOutput'
    273      }],
    274      'expectedOutputs': {
    275        'gemmOutput': {
    276          'data': [
    277            8247.0546875, 14065.19921875, 14658.443359375, 14080.40625,
    278            18788.30859375, 11978.4189453125, 14699.3505859375, 19176.689453125,
    279            15066.1513671875, 18304.291015625, 5602.5986328125, 9298.642578125,
    280            9218.3349609375, 6379.20458984375, 10899.8125
    281          ],
    282          'descriptor': {shape: [3, 5], dataType: 'float32'}
    283        }
    284      }
    285    }
    286  },
    287  {
    288    'name': 'gemm two float32 2D tensors broadcast options.c [3, 1] => [3, 5]',
    289    'graph': {
    290      'inputs': {
    291        'inputA': {
    292          'data': [
    293            82.98884582519531, 90.51641082763672, 59.638519287109375,
    294            36.271873474121094, 18.9648494720459, 43.89479446411133,
    295            98.89488220214844, 91.46013641357422, 50.51683807373047,
    296            40.45679473876953, 50.76741409301758, 9.336554527282715
    297          ],
    298          'descriptor': {shape: [3, 4], dataType: 'float32'}
    299        },
    300        'inputB': {
    301          'data': [
    302            25.14739227294922,  66.6923828125,     63.29909896850586,
    303            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    304            16.4991455078125,   3.036668062210083, 93.14022064208984,
    305            70.08265686035156,  75.74880981445312, 96.60688018798828,
    306            99.10041809082031,  23.2437744140625,  86.11856842041016,
    307            42.90679168701172,  34.08055114746094, 87.37654876708984,
    308            92.34209442138672,  60.32209014892578
    309          ],
    310          'descriptor': {shape: [4, 5], dataType: 'float32'},
    311          'constant': true
    312        },
    313        'inputC': {
    314          'data': [6.20251989364624, 81.40641784667969, 73.00516510009766],
    315          'descriptor': {shape: [3, 1], dataType: 'float32'},
    316          'constant': true
    317        }
    318      },
    319      'operators': [{
    320        'name': 'gemm',
    321        'arguments':
    322            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
    323        'outputs': 'gemmOutput'
    324      }],
    325      'expectedOutputs': {
    326        'gemmOutput': {
    327          'data': [
    328            8167.349609375, 14032.0263671875, 14613.703125, 14054.734375,
    329            18763.30078125, 11973.9169921875, 14741.3818359375, 19207.154296875,
    330            15115.68359375, 18354.486328125, 5589.6953125, 9332.2724609375,
    331            9240.3974609375, 6420.33544921875, 10941.607421875
    332          ],
    333          'descriptor': {shape: [3, 5], dataType: 'float32'}
    334        }
    335      }
    336    }
    337  },
    338  {
    339    'name': 'gemm two float32 2D tensors broadcast options.c [1, 1] => [3, 5]',
    340    'graph': {
    341      'inputs': {
    342        'inputA': {
    343          'data': [
    344            82.98884582519531, 90.51641082763672, 59.638519287109375,
    345            36.271873474121094, 18.9648494720459, 43.89479446411133,
    346            98.89488220214844, 91.46013641357422, 50.51683807373047,
    347            40.45679473876953, 50.76741409301758, 9.336554527282715
    348          ],
    349          'descriptor': {shape: [3, 4], dataType: 'float32'}
    350        },
    351        'inputB': {
    352          'data': [
    353            25.14739227294922,  66.6923828125,     63.29909896850586,
    354            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    355            16.4991455078125,   3.036668062210083, 93.14022064208984,
    356            70.08265686035156,  75.74880981445312, 96.60688018798828,
    357            99.10041809082031,  23.2437744140625,  86.11856842041016,
    358            42.90679168701172,  34.08055114746094, 87.37654876708984,
    359            92.34209442138672,  60.32209014892578
    360          ],
    361          'descriptor': {shape: [4, 5], dataType: 'float32'},
    362          'constant': true
    363        },
    364        'inputC': {
    365          'data': [18.78192901611328],
    366          'descriptor': {shape: [1, 1], dataType: 'float32'},
    367          'constant': true
    368        }
    369      },
    370      'operators': [{
    371        'name': 'gemm',
    372        'arguments':
    373            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
    374        'outputs': 'gemmOutput'
    375      }],
    376      'expectedOutputs': {
    377        'gemmOutput': {
    378          'data': [
    379            8179.9287109375, 14044.6064453125, 14626.2822265625,
    380            14067.314453125, 18775.87890625, 11911.29296875, 14678.7578125,
    381            19144.529296875, 15053.0595703125, 18291.86328125, 5535.47216796875,
    382            9278.048828125, 9186.173828125, 6366.1123046875, 10887.384765625
    383          ],
    384          'descriptor': {shape: [3, 5], dataType: 'float32'}
    385        }
    386      }
    387    }
    388  },
    389  {
    390    'name': 'gemm two float32 2D tensors broadcast options.c [5] => [3, 5]',
    391    'graph': {
    392      'inputs': {
    393        'inputA': {
    394          'data': [
    395            82.98884582519531, 90.51641082763672, 59.638519287109375,
    396            36.271873474121094, 18.9648494720459, 43.89479446411133,
    397            98.89488220214844, 91.46013641357422, 50.51683807373047,
    398            40.45679473876953, 50.76741409301758, 9.336554527282715
    399          ],
    400          'descriptor': {shape: [3, 4], dataType: 'float32'}
    401        },
    402        'inputB': {
    403          'data': [
    404            25.14739227294922,  66.6923828125,     63.29909896850586,
    405            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    406            16.4991455078125,   3.036668062210083, 93.14022064208984,
    407            70.08265686035156,  75.74880981445312, 96.60688018798828,
    408            99.10041809082031,  23.2437744140625,  86.11856842041016,
    409            42.90679168701172,  34.08055114746094, 87.37654876708984,
    410            92.34209442138672,  60.32209014892578
    411          ],
    412          'descriptor': {shape: [4, 5], dataType: 'float32'},
    413          'constant': true
    414        },
    415        'inputC': {
    416          'data': [
    417            85.90813446044922, 39.3753547668457, 50.942604064941406,
    418            31.87430763244629, 31.210525512695312
    419          ],
    420          'descriptor': {shape: [5], dataType: 'float32'},
    421          'constant': true
    422        }
    423      },
    424      'operators': [{
    425        'name': 'gemm',
    426        'arguments':
    427            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
    428        'outputs': 'gemmOutput'
    429      }],
    430      'expectedOutputs': {
    431        'gemmOutput': {
    432          'data': [
    433            8247.0546875, 14065.19921875, 14658.443359375, 14080.40625,
    434            18788.30859375, 11978.4189453125, 14699.3505859375, 19176.689453125,
    435            15066.1513671875, 18304.291015625, 5602.5986328125, 9298.642578125,
    436            9218.3349609375, 6379.20458984375, 10899.8125
    437          ],
    438          'descriptor': {shape: [3, 5], dataType: 'float32'}
    439        }
    440      }
    441    }
    442  },
    443  {
    444    'name': 'gemm two float32 2D tensors broadcast options.c [1] => [3, 5]',
    445    'graph': {
    446      'inputs': {
    447        'inputA': {
    448          'data': [
    449            82.98884582519531, 90.51641082763672, 59.638519287109375,
    450            36.271873474121094, 18.9648494720459, 43.89479446411133,
    451            98.89488220214844, 91.46013641357422, 50.51683807373047,
    452            40.45679473876953, 50.76741409301758, 9.336554527282715
    453          ],
    454          'descriptor': {shape: [3, 4], dataType: 'float32'}
    455        },
    456        'inputB': {
    457          'data': [
    458            25.14739227294922,  66.6923828125,     63.29909896850586,
    459            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    460            16.4991455078125,   3.036668062210083, 93.14022064208984,
    461            70.08265686035156,  75.74880981445312, 96.60688018798828,
    462            99.10041809082031,  23.2437744140625,  86.11856842041016,
    463            42.90679168701172,  34.08055114746094, 87.37654876708984,
    464            92.34209442138672,  60.32209014892578
    465          ],
    466          'descriptor': {shape: [4, 5], dataType: 'float32'},
    467          'constant': true
    468        },
    469        'inputC': {
    470          'data': [18.78192901611328],
    471          'descriptor': {shape: [1], dataType: 'float32'},
    472          'constant': true
    473        }
    474      },
    475      'operators': [{
    476        'name': 'gemm',
    477        'arguments':
    478            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
    479        'outputs': 'gemmOutput'
    480      }],
    481      'expectedOutputs': {
    482        'gemmOutput': {
    483          'data': [
    484            8179.9287109375, 14044.6064453125, 14626.2822265625,
    485            14067.314453125, 18775.87890625, 11911.29296875, 14678.7578125,
    486            19144.529296875, 15053.0595703125, 18291.86328125, 5535.47216796875,
    487            9278.048828125, 9186.173828125, 6366.1123046875, 10887.384765625
    488          ],
    489          'descriptor': {shape: [3, 5], dataType: 'float32'}
    490        }
    491      }
    492    }
    493  },
    494  {
    495    'name': 'gemm two float32 2D tensors scalar options.c',
    496    'graph': {
    497      'inputs': {
    498        'inputA': {
    499          'data': [
    500            82.98884582519531, 90.51641082763672, 59.638519287109375,
    501            36.271873474121094, 18.9648494720459, 43.89479446411133,
    502            98.89488220214844, 91.46013641357422, 50.51683807373047,
    503            40.45679473876953, 50.76741409301758, 9.336554527282715
    504          ],
    505          'descriptor': {shape: [3, 4], dataType: 'float32'}
    506        },
    507        'inputB': {
    508          'data': [
    509            25.14739227294922,  66.6923828125,     63.29909896850586,
    510            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    511            16.4991455078125,   3.036668062210083, 93.14022064208984,
    512            70.08265686035156,  75.74880981445312, 96.60688018798828,
    513            99.10041809082031,  23.2437744140625,  86.11856842041016,
    514            42.90679168701172,  34.08055114746094, 87.37654876708984,
    515            92.34209442138672,  60.32209014892578
    516          ],
    517          'descriptor': {shape: [4, 5], dataType: 'float32'},
    518          'constant': true
    519        },
    520        'inputC': {
    521          'data': [18.78192901611328],
    522          'descriptor': {shape: [], dataType: 'float32'},
    523          'constant': true
    524        }
    525      },
    526      'operators': [{
    527        'name': 'gemm',
    528        'arguments':
    529            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
    530        'outputs': 'gemmOutput'
    531      }],
    532      'expectedOutputs': {
    533        'gemmOutput': {
    534          'data': [
    535            8179.9287109375, 14044.6064453125, 14626.2822265625,
    536            14067.314453125, 18775.87890625, 11911.29296875, 14678.7578125,
    537            19144.529296875, 15053.0595703125, 18291.86328125, 5535.47216796875,
    538            9278.048828125, 9186.173828125, 6366.1123046875, 10887.384765625
    539          ],
    540          'descriptor': {shape: [3, 5], dataType: 'float32'}
    541        }
    542      }
    543    }
    544  },
    545  {
    546    'name': 'gemm two float32 2D tensors options.alpha',
    547    'graph': {
    548      'inputs': {
    549        'inputA': {
    550          'data': [
    551            82.98884582519531, 90.51641082763672, 59.638519287109375,
    552            36.271873474121094, 18.9648494720459, 43.89479446411133,
    553            98.89488220214844, 91.46013641357422, 50.51683807373047,
    554            40.45679473876953, 50.76741409301758, 9.336554527282715
    555          ],
    556          'descriptor': {shape: [3, 4], dataType: 'float32'}
    557        },
    558        'inputB': {
    559          'data': [
    560            25.14739227294922,  66.6923828125,     63.29909896850586,
    561            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    562            16.4991455078125,   3.036668062210083, 93.14022064208984,
    563            70.08265686035156,  75.74880981445312, 96.60688018798828,
    564            99.10041809082031,  23.2437744140625,  86.11856842041016,
    565            42.90679168701172,  34.08055114746094, 87.37654876708984,
    566            92.34209442138672,  60.32209014892578
    567          ],
    568          'descriptor': {shape: [4, 5], dataType: 'float32'},
    569          'constant': true
    570        }
    571      },
    572      'operators': [{
    573        'name': 'gemm',
    574        'arguments': [
    575          {'a': 'inputA'}, {'b': 'inputB'},
    576          {'options': {'alpha': 74.43204170482103}}
    577        ],
    578        'outputs': 'gemmOutput'
    579      }],
    580      'expectedOutputs': {
    581        'gemmOutput': {
    582          'data': [
    583            607450.875, 1043970.75, 1087266.125, 1045661, 1396129.125,
    584            885183.875, 1091172, 1423568.5, 1119032, 1360102.75, 410618.53125,
    585            689186.1875, 682347.75, 472444.78125, 808972.3125
    586          ],
    587          'descriptor': {shape: [3, 5], dataType: 'float32'}
    588        }
    589      }
    590    }
    591  },
    592  {
    593    'name': 'gemm two float32 2D tensors options.beta',
    594    'graph': {
    595      'inputs': {
    596        'inputA': {
    597          'data': [
    598            82.98884582519531, 90.51641082763672, 59.638519287109375,
    599            36.271873474121094, 18.9648494720459, 43.89479446411133,
    600            98.89488220214844, 91.46013641357422, 50.51683807373047,
    601            40.45679473876953, 50.76741409301758, 9.336554527282715
    602          ],
    603          'descriptor': {shape: [3, 4], dataType: 'float32'}
    604        },
    605        'inputB': {
    606          'data': [
    607            25.14739227294922,  66.6923828125,     63.29909896850586,
    608            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    609            16.4991455078125,   3.036668062210083, 93.14022064208984,
    610            70.08265686035156,  75.74880981445312, 96.60688018798828,
    611            99.10041809082031,  23.2437744140625,  86.11856842041016,
    612            42.90679168701172,  34.08055114746094, 87.37654876708984,
    613            92.34209442138672,  60.32209014892578
    614          ],
    615          'descriptor': {shape: [4, 5], dataType: 'float32'},
    616          'constant': true
    617        }
    618      },
    619      'operators': [{
    620        'name': 'gemm',
    621        'arguments': [
    622          {'a': 'inputA'}, {'b': 'inputB'},
    623          {'options': {'beta': 62.01828598608989}}
    624        ],
    625        'outputs': 'gemmOutput'
    626      }],
    627      'expectedOutputs': {
    628        'gemmOutput': {
    629          'data': [
    630            8161.14697265625, 14025.82421875, 14607.5009765625,
    631            14048.5322265625, 18757.09765625, 11892.5107421875,
    632            14659.9755859375, 19125.74609375, 15034.27734375, 18273.080078125,
    633            5516.6904296875, 9259.267578125, 9167.3916015625, 6347.330078125,
    634            10868.6025390625
    635          ],
    636          'descriptor': {shape: [3, 5], dataType: 'float32'}
    637        }
    638      }
    639    }
    640  },
    641  {
    642    'name': 'gemm two float32 2D tensors options.c and options.beta',
    643    'graph': {
    644      'inputs': {
    645        'inputA': {
    646          'data': [
    647            82.98884582519531, 90.51641082763672, 59.638519287109375,
    648            36.271873474121094, 18.9648494720459, 43.89479446411133,
    649            98.89488220214844, 91.46013641357422, 50.51683807373047,
    650            40.45679473876953, 50.76741409301758, 9.336554527282715
    651          ],
    652          'descriptor': {shape: [3, 4], dataType: 'float32'}
    653        },
    654        'inputB': {
    655          'data': [
    656            25.14739227294922,  66.6923828125,     63.29909896850586,
    657            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    658            16.4991455078125,   3.036668062210083, 93.14022064208984,
    659            70.08265686035156,  75.74880981445312, 96.60688018798828,
    660            99.10041809082031,  23.2437744140625,  86.11856842041016,
    661            42.90679168701172,  34.08055114746094, 87.37654876708984,
    662            92.34209442138672,  60.32209014892578
    663          ],
    664          'descriptor': {shape: [4, 5], dataType: 'float32'},
    665          'constant': true
    666        },
    667        'inputC': {
    668          'data': [
    669            82.77201843261719, 91.38520812988281, 12.651897430419922,
    670            20.12200355529785, 68.51224517822266, 35.202415466308594,
    671            13.33466625213623, 50.78546905517578, 88.61195373535156,
    672            30.577470779418945, 69.47061920166016, 7.166217803955078,
    673            28.337108612060547, 90.69412231445312, 71.23025512695312
    674          ],
    675          'descriptor': {shape: [3, 5], dataType: 'float32'},
    676          'constant': true
    677        }
    678      },
    679      'operators': [{
    680        'name': 'gemm',
    681        'arguments': [
    682          {'a': 'inputA'}, {'b': 'inputB'},
    683          {'options': {'c': 'inputC', 'beta': 62.01828598608989}}
    684        ],
    685        'outputs': 'gemmOutput'
    686      }],
    687      'expectedOutputs': {
    688        'gemmOutput': {
    689          'data': [
    690            13294.525390625, 19693.37890625, 15392.1494140625, 15296.4638671875,
    691            23006.109375, 14075.7041015625, 15486.96875, 22275.375,
    692            20529.83984375, 20169.443359375, 9825.138671875, 9703.7041015625,
    693            10924.810546875, 11972.0244140625, 15286.1806640625
    694          ],
    695          'descriptor': {shape: [3, 5], dataType: 'float32'}
    696        }
    697      }
    698    }
    699  },
    700  {
    701    'name': 'gemm two float32 2D tensors options.aTranspose being true',
    702    'graph': {
    703      'inputs': {
    704        'inputA': {
    705          'data': [
    706            82.98884582519531, 18.9648494720459, 50.51683807373047,
    707            90.51641082763672, 43.89479446411133, 40.45679473876953,
    708            59.638519287109375, 98.89488220214844, 50.76741409301758,
    709            36.271873474121094, 91.46013641357422, 9.336554527282715
    710          ],
    711          'descriptor': {shape: [4, 3], dataType: 'float32'}
    712        },
    713        'inputB': {
    714          'data': [
    715            25.14739227294922,  66.6923828125,     63.29909896850586,
    716            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    717            16.4991455078125,   3.036668062210083, 93.14022064208984,
    718            70.08265686035156,  75.74880981445312, 96.60688018798828,
    719            99.10041809082031,  23.2437744140625,  86.11856842041016,
    720            42.90679168701172,  34.08055114746094, 87.37654876708984,
    721            92.34209442138672,  60.32209014892578
    722          ],
    723          'descriptor': {shape: [4, 5], dataType: 'float32'},
    724          'constant': true
    725        }
    726      },
    727      'operators': [{
    728        'name': 'gemm',
    729        'arguments': [
    730          {'a': 'inputA'}, {'b': 'inputB'}, {'options': {'aTranspose': true}}
    731        ],
    732        'outputs': 'gemmOutput'
    733      }],
    734      'expectedOutputs': {
    735        'gemmOutput': {
    736          'data': [
    737            8161.14697265625, 14025.82421875, 14607.5009765625,
    738            14048.5322265625, 18757.09765625, 11892.5107421875,
    739            14659.9755859375, 19125.74609375, 15034.27734375, 18273.080078125,
    740            5516.6904296875, 9259.267578125, 9167.3916015625, 6347.330078125,
    741            10868.6025390625
    742          ],
    743          'descriptor': {shape: [3, 5], dataType: 'float32'}
    744        }
    745      }
    746    }
    747  },
    748  {
    749    'name':
    750        'gemm two float32 2D tensors options.aTranspose being explicit false',
    751    'graph': {
    752      'inputs': {
    753        'inputA': {
    754          'data': [
    755            82.98884582519531, 90.51641082763672, 59.638519287109375,
    756            36.271873474121094, 18.9648494720459, 43.89479446411133,
    757            98.89488220214844, 91.46013641357422, 50.51683807373047,
    758            40.45679473876953, 50.76741409301758, 9.336554527282715
    759          ],
    760          'descriptor': {shape: [3, 4], dataType: 'float32'}
    761        },
    762        'inputB': {
    763          'data': [
    764            25.14739227294922,  66.6923828125,     63.29909896850586,
    765            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    766            16.4991455078125,   3.036668062210083, 93.14022064208984,
    767            70.08265686035156,  75.74880981445312, 96.60688018798828,
    768            99.10041809082031,  23.2437744140625,  86.11856842041016,
    769            42.90679168701172,  34.08055114746094, 87.37654876708984,
    770            92.34209442138672,  60.32209014892578
    771          ],
    772          'descriptor': {shape: [4, 5], dataType: 'float32'},
    773          'constant': true
    774        }
    775      },
    776      'operators': [{
    777        'name': 'gemm',
    778        'arguments': [
    779          {'a': 'inputA'}, {'b': 'inputB'}, {'options': {'aTranspose': false}}
    780        ],
    781        'outputs': 'gemmOutput'
    782      }],
    783      'expectedOutputs': {
    784        'gemmOutput': {
    785          'data': [
    786            8161.14697265625, 14025.82421875, 14607.5009765625,
    787            14048.5322265625, 18757.09765625, 11892.5107421875,
    788            14659.9755859375, 19125.74609375, 15034.27734375, 18273.080078125,
    789            5516.6904296875, 9259.267578125, 9167.3916015625, 6347.330078125,
    790            10868.6025390625
    791          ],
    792          'descriptor': {shape: [3, 5], dataType: 'float32'}
    793        }
    794      }
    795    }
    796  },
    797  {
    798    'name': 'gemm two float32 2D tensors options.bTranspose being true',
    799    'graph': {
    800      'inputs': {
    801        'inputA': {
    802          'data': [
    803            82.98884582519531, 90.51641082763672, 59.638519287109375,
    804            36.271873474121094, 18.9648494720459, 43.89479446411133,
    805            98.89488220214844, 91.46013641357422, 50.51683807373047,
    806            40.45679473876953, 50.76741409301758, 9.336554527282715
    807          ],
    808          'descriptor': {shape: [3, 4], dataType: 'float32'}
    809        },
    810        'inputB': {
    811          'data': [
    812            25.14739227294922,  0.0037256532814353704, 75.74880981445312,
    813            42.90679168701172,  66.6923828125,         16.4991455078125,
    814            96.60688018798828,  34.08055114746094,     63.29909896850586,
    815            3.036668062210083,  99.10041809082031,     87.37654876708984,
    816            10.629964828491211, 93.14022064208984,     23.2437744140625,
    817            92.34209442138672,  61.32737731933594,     70.08265686035156,
    818            86.11856842041016,  60.32209014892578
    819          ],
    820          'descriptor': {shape: [5, 4], dataType: 'float32'},
    821          'constant': true
    822        }
    823      },
    824      'operators': [{
    825        'name': 'gemm',
    826        'arguments': [
    827          {'a': 'inputA'}, {'b': 'inputB'}, {'options': {'bTranspose': true}}
    828        ],
    829        'outputs': 'gemmOutput'
    830      }],
    831      'expectedOutputs': {
    832        'gemmOutput': {
    833          'data': [
    834            8161.14697265625, 14025.82421875, 14607.5009765625,
    835            14048.5322265625, 18757.09765625, 11892.5107421875,
    836            14659.9755859375, 19125.74609375, 15034.27734375, 18273.080078125,
    837            5516.6904296875, 9259.267578125, 9167.3916015625, 6347.330078125,
    838            10868.6025390625
    839          ],
    840          'descriptor': {shape: [3, 5], dataType: 'float32'}
    841        }
    842      }
    843    }
    844  },
    845  {
    846    'name':
    847        'gemm two float32 2D tensors options.bTranspose being explicit false',
    848    'graph': {
    849      'inputs': {
    850        'inputA': {
    851          'data': [
    852            82.98884582519531, 90.51641082763672, 59.638519287109375,
    853            36.271873474121094, 18.9648494720459, 43.89479446411133,
    854            98.89488220214844, 91.46013641357422, 50.51683807373047,
    855            40.45679473876953, 50.76741409301758, 9.336554527282715
    856          ],
    857          'descriptor': {shape: [3, 4], dataType: 'float32'}
    858        },
    859        'inputB': {
    860          'data': [
    861            25.14739227294922,  66.6923828125,     63.29909896850586,
    862            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    863            16.4991455078125,   3.036668062210083, 93.14022064208984,
    864            70.08265686035156,  75.74880981445312, 96.60688018798828,
    865            99.10041809082031,  23.2437744140625,  86.11856842041016,
    866            42.90679168701172,  34.08055114746094, 87.37654876708984,
    867            92.34209442138672,  60.32209014892578
    868          ],
    869          'descriptor': {shape: [4, 5], dataType: 'float32'},
    870          'constant': true
    871        }
    872      },
    873      'operators': [{
    874        'name': 'gemm',
    875        'arguments': [
    876          {'a': 'inputA'}, {'b': 'inputB'}, {'options': {'bTranspose': false}}
    877        ],
    878        'outputs': 'gemmOutput'
    879      }],
    880      'expectedOutputs': {
    881        'gemmOutput': {
    882          'data': [
    883            8161.14697265625, 14025.82421875, 14607.5009765625,
    884            14048.5322265625, 18757.09765625, 11892.5107421875,
    885            14659.9755859375, 19125.74609375, 15034.27734375, 18273.080078125,
    886            5516.6904296875, 9259.267578125, 9167.3916015625, 6347.330078125,
    887            10868.6025390625
    888          ],
    889          'descriptor': {shape: [3, 5], dataType: 'float32'}
    890        }
    891      }
    892    }
    893  },
    894  {
    895    'name': 'gemm two float32 2D tensors all options',
    896    'graph': {
    897      'inputs': {
    898        'inputA': {
    899          'data': [
    900            82.98884582519531, 18.9648494720459, 50.51683807373047,
    901            90.51641082763672, 43.89479446411133, 40.45679473876953,
    902            59.638519287109375, 98.89488220214844, 50.76741409301758,
    903            36.271873474121094, 91.46013641357422, 9.336554527282715
    904          ],
    905          'descriptor': {shape: [4, 3], dataType: 'float32'}
    906        },
    907        'inputB': {
    908          'data': [
    909            25.14739227294922,  0.0037256532814353704, 75.74880981445312,
    910            42.90679168701172,  66.6923828125,         16.4991455078125,
    911            96.60688018798828,  34.08055114746094,     63.29909896850586,
    912            3.036668062210083,  99.10041809082031,     87.37654876708984,
    913            10.629964828491211, 93.14022064208984,     23.2437744140625,
    914            92.34209442138672,  61.32737731933594,     70.08265686035156,
    915            86.11856842041016,  60.32209014892578
    916          ],
    917          'descriptor': {shape: [5, 4], dataType: 'float32'},
    918          'constant': true
    919        },
    920        'inputC': {
    921          'data': [
    922            82.77201843261719, 91.38520812988281, 12.651897430419922,
    923            20.12200355529785, 68.51224517822266, 35.202415466308594,
    924            13.33466625213623, 50.78546905517578, 88.61195373535156,
    925            30.577470779418945, 69.47061920166016, 7.166217803955078,
    926            28.337108612060547, 90.69412231445312, 71.23025512695312
    927          ],
    928          'descriptor': {shape: [3, 5], dataType: 'float32'},
    929          'constant': true
    930        }
    931      },
    932      'operators': [{
    933        'name': 'gemm',
    934        'arguments': [
    935          {'a': 'inputA'}, {'b': 'inputB'}, {
    936            'options': {
    937              'c': 'inputC',
    938              'alpha': 74.43204170482103,
    939              'beta': 62.01828598608989,
    940              'aTranspose': true,
    941              'bTranspose': true
    942            }
    943          }
    944        ],
    945        'outputs': 'gemmOutput'
    946      }],
    947      'expectedOutputs': {
    948        'gemmOutput': {
    949          'data': [
    950            612584.25, 1049638.375, 1088050.75, 1046908.875, 1400378.125,
    951            887367.0625, 1091999, 1426718.125, 1124527.625, 1361999.125, 414927,
    952            689630.625, 684105.1875, 478069.46875, 813389.875
    953          ],
    954          'descriptor': {shape: [3, 5], dataType: 'float32'}
    955        }
    956      }
    957    }
    958  },
    959  {
    960    'name': 'gemm both negative options.alpha and 1st float32 input tensor',
    961    'graph': {
    962      'inputs': {
    963        'inputA': {
    964          'data': [
    965            -87.94973754882812, -14.765121459960938, -80.86310577392578,
    966            -59.27638244628906, -28.74825096130371, -9.038779258728027,
    967            -76.046630859375, -83.94807434082031, -95.02689361572266,
    968            -47.89733123779297, -69.0116195678711, -86.66899108886719
    969          ],
    970          'descriptor': {shape: [3, 4], dataType: 'float32'}
    971        },
    972        'inputB': {
    973          'data': [
    974            25.14739227294922,  66.6923828125,     63.29909896850586,
    975            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
    976            16.4991455078125,   3.036668062210083, 93.14022064208984,
    977            70.08265686035156,  75.74880981445312, 96.60688018798828,
    978            99.10041809082031,  23.2437744140625,  86.11856842041016,
    979            42.90679168701172,  34.08055114746094, 87.37654876708984,
    980            92.34209442138672,  60.32209014892578
    981          ],
    982          'descriptor': {shape: [4, 5], dataType: 'float32'},
    983          'constant': true
    984        },
    985        'inputC': {
    986          'data': [
    987            82.77201843261719, 91.38520812988281, 12.651897430419922,
    988            20.12200355529785, 68.51224517822266, 35.202415466308594,
    989            13.33466625213623, 50.78546905517578, 88.61195373535156,
    990            30.577470779418945, 69.47061920166016, 7.166217803955078,
    991            28.337108612060547, 90.69412231445312, 71.23025512695312
    992          ],
    993          'descriptor': {shape: [3, 5], dataType: 'float32'},
    994          'constant': true
    995        }
    996      },
    997      'operators': [{
    998        'name': 'gemm',
    999        'arguments': [
   1000          {'a': 'inputA'}, {'b': 'inputB'},
   1001          {'options': {'c': 'inputC', 'alpha': -22.611149749186296}}
   1002        ],
   1003        'outputs': 'gemmOutput'
   1004      }],
   1005      'expectedOutputs': {
   1006        'gemmOutput': {
   1007          'data': [
   1008            246101.234375, 360542.34375, 425213.25, 218520.65625, 383734.40625,
   1009            228076.8125, 277543.625, 378076, 241282.15625, 316800.71875,
   1010            256391.5625, 378711.34375, 465195.8125, 341034.875, 460338.3125
   1011          ],
   1012          'descriptor': {shape: [3, 5], dataType: 'float32'}
   1013        }
   1014      }
   1015    }
   1016  },
   1017  {
   1018    'name': 'gemm both negative options.alpha and 2nd float32 input tensor',
   1019    'graph': {
   1020      'inputs': {
   1021        'inputA': {
   1022          'data': [
   1023            82.98884582519531, 90.51641082763672, 59.638519287109375,
   1024            36.271873474121094, 18.9648494720459, 43.89479446411133,
   1025            98.89488220214844, 91.46013641357422, 50.51683807373047,
   1026            40.45679473876953, 50.76741409301758, 9.336554527282715
   1027          ],
   1028          'descriptor': {shape: [3, 4], dataType: 'float32'}
   1029        },
   1030        'inputB': {
   1031          'data': [
   1032            -64.35197448730469, -87.64981079101562,  -96.04495239257812,
   1033            -31.07155990600586, -6.548067092895508,  -64.64146423339844,
   1034            -14.02061653137207, -88.93306732177734,  -24.179410934448242,
   1035            -97.31866455078125, -93.4608154296875,   -39.490394592285156,
   1036            -94.37982177734375, -75.83335876464844,  -11.403324127197266,
   1037            -26.2825927734375,  -56.237979888916016, -46.47404861450195,
   1038            -89.20684051513672, -53.495323181152344
   1039          ],
   1040          'descriptor': {shape: [4, 5], dataType: 'float32'},
   1041          'constant': true
   1042        },
   1043        'inputC': {
   1044          'data': [
   1045            82.77201843261719, 91.38520812988281, 12.651897430419922,
   1046            20.12200355529785, 68.51224517822266, 35.202415466308594,
   1047            13.33466625213623, 50.78546905517578, 88.61195373535156,
   1048            30.577470779418945, 69.47061920166016, 7.166217803955078,
   1049            28.337108612060547, 90.69412231445312, 71.23025512695312
   1050          ],
   1051          'descriptor': {shape: [3, 5], dataType: 'float32'},
   1052          'constant': true
   1053        }
   1054      },
   1055      'operators': [{
   1056        'name': 'gemm',
   1057        'arguments': [
   1058          {'a': 'inputA'}, {'b': 'inputB'},
   1059          {'options': {'c': 'inputC', 'alpha': -22.611149749186296}}
   1060        ],
   1061        'outputs': 'gemmOutput'
   1062      }],
   1063      'expectedOutputs': {
   1064        'gemmOutput': {
   1065          'data': [
   1066            400725.03125, 292635.75, 527642.375, 283236.40625, 270787.40625,
   1067            355130.96875, 256121.421875, 436658.0625, 391465.40625,
   1068            235557.03125, 245540.5625, 170154.125, 309239.4375, 163583.015625,
   1069            120958.7578125
   1070          ],
   1071          'descriptor': {shape: [3, 5], dataType: 'float32'}
   1072        }
   1073      }
   1074    }
   1075  },
   1076  {
   1077    'name':
   1078        'gemm both negative options.beta and 3rd float32 input tensor (options.c)',
   1079    'graph': {
   1080      'inputs': {
   1081        'inputA': {
   1082          'data': [
   1083            82.98884582519531, 90.51641082763672, 59.638519287109375,
   1084            36.271873474121094, 18.9648494720459, 43.89479446411133,
   1085            98.89488220214844, 91.46013641357422, 50.51683807373047,
   1086            40.45679473876953, 50.76741409301758, 9.336554527282715
   1087          ],
   1088          'descriptor': {shape: [3, 4], dataType: 'float32'}
   1089        },
   1090        'inputB': {
   1091          'data': [
   1092            25.14739227294922,  66.6923828125,     63.29909896850586,
   1093            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
   1094            16.4991455078125,   3.036668062210083, 93.14022064208984,
   1095            70.08265686035156,  75.74880981445312, 96.60688018798828,
   1096            99.10041809082031,  23.2437744140625,  86.11856842041016,
   1097            42.90679168701172,  34.08055114746094, 87.37654876708984,
   1098            92.34209442138672,  60.32209014892578
   1099          ],
   1100          'descriptor': {shape: [4, 5], dataType: 'float32'},
   1101          'constant': true
   1102        },
   1103        'inputC': {
   1104          'data': [
   1105            -42.662681579589844, -93.6637954711914, -40.708492279052734,
   1106            -45.060977935791016, -87.90338897705078, -71.1618881225586,
   1107            -85.56422424316406, -10.049134254455566, -46.105403900146484,
   1108            -66.76168060302734, -25.392492294311523, -65.62987518310547,
   1109            -40.50155258178711, -81.5303955078125, -41.39629364013672
   1110          ],
   1111          'descriptor': {shape: [3, 5], dataType: 'float32'},
   1112          'constant': true
   1113        }
   1114      },
   1115      'operators': [{
   1116        'name': 'gemm',
   1117        'arguments': [
   1118          {'a': 'inputA'}, {'b': 'inputB'},
   1119          {'options': {'c': 'inputC', 'beta': -11.68521964935509}}
   1120        ],
   1121        'outputs': 'gemmOutput'
   1122      }],
   1123      'expectedOutputs': {
   1124        'gemmOutput': {
   1125          'data': [
   1126            8659.669921875, 15120.3056640625, 15083.1884765625,
   1127            14575.0791015625, 19784.267578125, 12724.052734375, 15659.8125,
   1128            19243.173828125, 15573.029296875, 19053.205078125, 5813.4072265625,
   1129            10026.1669921875, 9640.6611328125, 7300.03076171875,
   1130            11352.3271484375
   1131          ],
   1132          'descriptor': {shape: [3, 5], dataType: 'float32'}
   1133        }
   1134      }
   1135    }
   1136  },
   1137  {
   1138    'name': 'gemm both negative options.alpha and options.beta',
   1139    'graph': {
   1140      'inputs': {
   1141        'inputA': {
   1142          'data': [
   1143            82.98884582519531, 90.51641082763672, 59.638519287109375,
   1144            36.271873474121094, 18.9648494720459, 43.89479446411133,
   1145            98.89488220214844, 91.46013641357422, 50.51683807373047,
   1146            40.45679473876953, 50.76741409301758, 9.336554527282715
   1147          ],
   1148          'descriptor': {shape: [3, 4], dataType: 'float32'}
   1149        },
   1150        'inputB': {
   1151          'data': [
   1152            25.14739227294922,  66.6923828125,     63.29909896850586,
   1153            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
   1154            16.4991455078125,   3.036668062210083, 93.14022064208984,
   1155            70.08265686035156,  75.74880981445312, 96.60688018798828,
   1156            99.10041809082031,  23.2437744140625,  86.11856842041016,
   1157            42.90679168701172,  34.08055114746094, 87.37654876708984,
   1158            92.34209442138672,  60.32209014892578
   1159          ],
   1160          'descriptor': {shape: [4, 5], dataType: 'float32'},
   1161          'constant': true
   1162        },
   1163        'inputC': {
   1164          'data': [
   1165            82.77201843261719, 91.38520812988281, 12.651897430419922,
   1166            20.12200355529785, 68.51224517822266, 35.202415466308594,
   1167            13.33466625213623, 50.78546905517578, 88.61195373535156,
   1168            30.577470779418945, 69.47061920166016, 7.166217803955078,
   1169            28.337108612060547, 90.69412231445312, 71.23025512695312
   1170          ],
   1171          'descriptor': {shape: [3, 5], dataType: 'float32'},
   1172          'constant': true
   1173        }
   1174      },
   1175      'operators': [{
   1176        'name': 'gemm',
   1177        'arguments': [
   1178          {'a': 'inputA'}, {'b': 'inputB'}, {
   1179            'options': {
   1180              'c': 'inputC',
   1181              'alpha': -22.611149749186296,
   1182              'beta': -11.68521964935509
   1183            }
   1184          }
   1185        ],
   1186        'outputs': 'gemmOutput'
   1187      }],
   1188      'expectedOutputs': {
   1189        'gemmOutput': {
   1190          'data': [
   1191            -185500.109375, -318207.84375, -330440.21875, -317888.59375,
   1192            -424920.125, -269314.6875, -331634.71875, -433048.5625,
   1193            -340977.71875, -413532.65625, -125550.484375, -209446.40625,
   1194            -207616.390625, -144580.21875, -246583.921875
   1195          ],
   1196          'descriptor': {shape: [3, 5], dataType: 'float32'}
   1197        }
   1198      }
   1199    }
   1200  },
   1201  {
   1202    'name':
   1203        'gemm both negative options.alpha and 3rd float32 input tensor (options.c)',
   1204    'graph': {
   1205      'inputs': {
   1206        'inputA': {
   1207          'data': [
   1208            82.98884582519531, 90.51641082763672, 59.638519287109375,
   1209            36.271873474121094, 18.9648494720459, 43.89479446411133,
   1210            98.89488220214844, 91.46013641357422, 50.51683807373047,
   1211            40.45679473876953, 50.76741409301758, 9.336554527282715
   1212          ],
   1213          'descriptor': {shape: [3, 4], dataType: 'float32'}
   1214        },
   1215        'inputB': {
   1216          'data': [
   1217            25.14739227294922,  66.6923828125,     63.29909896850586,
   1218            10.629964828491211, 61.32737731933594, 0.0037256532814353704,
   1219            16.4991455078125,   3.036668062210083, 93.14022064208984,
   1220            70.08265686035156,  75.74880981445312, 96.60688018798828,
   1221            99.10041809082031,  23.2437744140625,  86.11856842041016,
   1222            42.90679168701172,  34.08055114746094, 87.37654876708984,
   1223            92.34209442138672,  60.32209014892578
   1224          ],
   1225          'descriptor': {shape: [4, 5], dataType: 'float32'},
   1226          'constant': true
   1227        },
   1228        'inputC': {
   1229          'data': [
   1230            -42.662681579589844, -93.6637954711914, -40.708492279052734,
   1231            -45.060977935791016, -87.90338897705078, -71.1618881225586,
   1232            -85.56422424316406, -10.049134254455566, -46.105403900146484,
   1233            -66.76168060302734, -25.392492294311523, -65.62987518310547,
   1234            -40.50155258178711, -81.5303955078125, -41.39629364013672
   1235          ],
   1236          'descriptor': {shape: [3, 5], dataType: 'float32'},
   1237          'constant': true
   1238        }
   1239      },
   1240      'operators': [{
   1241        'name': 'gemm',
   1242        'arguments': [
   1243          {'a': 'inputA'}, {'b': 'inputB'},
   1244          {'options': {'c': 'inputC', 'alpha': -22.611149749186296}}
   1245        ],
   1246        'outputs': 'gemmOutput'
   1247      }],
   1248      'expectedOutputs': {
   1249        'gemmOutput': {
   1250          'data': [
   1251            -184575.5625, -317233.65625, -330333.09375, -317698.5, -424207.4375,
   1252            -268974.5, -331564.4375, -432465.15625, -339988.375, -413242.09375,
   1253            -124764.09375, -209428.296875, -207325.765625, -143601.96875,
   1254            -245792.984375
   1255          ],
   1256          'descriptor': {shape: [3, 5], dataType: 'float32'}
   1257        }
   1258      }
   1259    }
   1260  },
   1261 
   1262  // float16 tests
   1263  {
   1264    'name': 'gemm two float16 2D tensors (b is non-constant) default options',
   1265    'graph': {
   1266      'inputs': {
   1267        'inputA': {
   1268          'data': [
   1269            0.654296875, 0.37451171875, 0.708984375, 0.7578125,
   1270            0.07781982421875, 0.1444091796875, 0.214111328125, 0.73291015625,
   1271            0.9384765625, 0.218505859375, 0.69140625, 0.85400390625
   1272          ],
   1273          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1274        },
   1275        'inputB': {
   1276          'data': [
   1277            0.98974609375, 0.1365966796875, 0.442626953125, 0.501953125,
   1278            0.3447265625,  0.208251953125,  0.64697265625,  0.88037109375,
   1279            0.83203125,    0.826171875,     0.52978515625,  0.51904296875,
   1280            0.57080078125, 0.74072265625,   0.8125,         0.6103515625,
   1281            0.72509765625, 0.487548828125,  0.126220703125, 0.5703125
   1282          ],
   1283          'descriptor': {shape: [4, 5], dataType: 'float16'}
   1284        }
   1285      },
   1286      'operators': [{
   1287        'name': 'gemm',
   1288        'arguments': [{'a': 'inputA'}, {'b': 'inputB'}],
   1289        'outputs': 'gemmOutput'
   1290      }],
   1291      'expectedOutputs': {
   1292        'gemmOutput': {
   1293          'data': [
   1294            1.5634765625, 1.2490234375, 1.3935546875, 1.2607421875, 1.54296875,
   1295            0.66796875, 0.74658203125, 0.64111328125, 0.410400390625,
   1296            0.73828125, 1.8623046875, 1.248046875, 1.4189453125, 1.2724609375,
   1297            1.552734375
   1298          ],
   1299          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1300        }
   1301      }
   1302    }
   1303  },
   1304  {
   1305    'name': 'gemm two float16 2D tensors default options',
   1306    'graph': {
   1307      'inputs': {
   1308        'inputA': {
   1309          'data': [
   1310            0.074951171875, 0.03216552734375, 0.501953125, 0.650390625,
   1311            0.447021484375, 0.6201171875, 0.027099609375, 0.72021484375,
   1312            0.60009765625, 0.246826171875, 0.9169921875, 0.767578125
   1313          ],
   1314          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1315        },
   1316        'inputB': {
   1317          'data': [
   1318            0.4384765625,   0.80517578125, 0.09515380859375, 0.2376708984375,
   1319            0.84912109375,  0.79296875,    0.33154296875,    0.66455078125,
   1320            0.46826171875,  0.55712890625, 0.587890625,      0.611328125,
   1321            0.464111328125, 0.74267578125, 0.43505859375,    0.68310546875,
   1322            0.309814453125, 0.5908203125,  0.088134765625,   0.07745361328125
   1323          ],
   1324          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1325          'constant': true
   1326        }
   1327      },
   1328      'operators': [{
   1329        'name': 'gemm',
   1330        'arguments': [{'a': 'inputA'}, {'b': 'inputB'}],
   1331        'outputs': 'gemmOutput'
   1332      }],
   1333      'expectedOutputs': {
   1334        'gemmOutput': {
   1335          'data': [
   1336            0.7978515625, 0.57958984375, 0.6455078125, 0.462890625,
   1337            0.350341796875, 1.1953125, 0.80517578125, 0.892578125,
   1338            0.480224609375, 0.79248046875, 1.5224609375, 1.36328125,
   1339            1.1005859375, 1.0068359375, 1.10546875
   1340          ],
   1341          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1342        }
   1343      }
   1344    }
   1345  },
   1346  {
   1347    'name': 'gemm two float16 2D constant tensors options.c',
   1348    'graph': {
   1349      'inputs': {
   1350        'inputA': {
   1351          'data': [
   1352            0.74365234375, 0.465576171875, 0.99755859375, 0.5576171875,
   1353            0.3115234375, 0.47509765625, 0.468994140625, 0.340576171875,
   1354            0.1337890625, 0.395263671875, 0.80224609375, 0.60986328125
   1355          ],
   1356          'descriptor': {shape: [3, 4], dataType: 'float16'},
   1357          'constant': true
   1358        },
   1359        'inputB': {
   1360          'data': [
   1361            0.46435546875,  0.31298828125,  0.2039794921875, 0.39697265625,
   1362            0.76171875,     0.366455078125, 0.35595703125,   0.1937255859375,
   1363            0.450927734375, 0.7958984375,   0.167724609375,  0.2998046875,
   1364            0.54833984375,  0.72265625,     0.56640625,      0.93896484375,
   1365            0.92333984375,  0.67138671875,  0.822265625,     0.55029296875
   1366          ],
   1367          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1368          'constant': true
   1369        },
   1370        'inputC': {
   1371          'data': [
   1372            0.00004869699478149414, 0.143798828125, 0.87158203125, 0.8759765625,
   1373            0.87353515625, 0.9501953125, 0.87353515625, 0.1787109375,
   1374            0.3935546875, 0.23583984375, 0.048431396484375, 0.157958984375,
   1375            0.0894775390625, 0.19287109375, 0.4462890625
   1376          ],
   1377          'descriptor': {shape: [3, 5], dataType: 'float16'},
   1378          'constant': true
   1379        }
   1380      },
   1381      'operators': [{
   1382        'name': 'gemm',
   1383        'arguments':
   1384            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
   1385        'outputs': 'gemmOutput'
   1386      }],
   1387      'expectedOutputs': {
   1388        'gemmOutput': {
   1389          'data': [
   1390            1.20703125, 1.3564453125, 2.03515625, 2.560546875, 2.681640625,
   1391            1.6669921875, 1.595703125, 0.8203125, 1.3505859375, 1.3046875,
   1392            0.96240234375, 1.14453125, 1.04296875, 1.505859375, 1.65234375
   1393          ],
   1394          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1395        }
   1396      }
   1397    }
   1398  },
   1399  {
   1400    'name': 'gemm two float16 2D tensors options.c',
   1401    'graph': {
   1402      'inputs': {
   1403        'inputA': {
   1404          'data': [
   1405            0.17431640625, 0.09527587890625, 0.83935546875, 0.2127685546875,
   1406            0.1314697265625, 0.48095703125, 0.248779296875, 0.043670654296875,
   1407            0.1619873046875, 0.9384765625, 0.12188720703125, 0.8056640625
   1408          ],
   1409          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1410        },
   1411        'inputB': {
   1412          'data': [
   1413            0.1759033203125, 0.8759765625,       0.3544921875,    0.216796875,
   1414            0.8408203125,    0.0220184326171875, 0.7646484375,    0.8779296875,
   1415            0.2392578125,    0.38525390625,      0.0938720703125, 0.57958984375,
   1416            0.4638671875,    0.6982421875,       0.7900390625,    0.77099609375,
   1417            0.744140625,     0.25537109375,      0.97900390625,   0.890625
   1418          ],
   1419          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1420          'constant': true
   1421        },
   1422        'inputC': {
   1423          'data': [
   1424            0.947265625, 0.61767578125, 0.7177734375, 0.175537109375,
   1425            0.468994140625, 0.378662109375, 0.646484375, 0.48583984375,
   1426            0.9921875, 0.046356201171875, 0.200439453125, 0.69677734375,
   1427            0.054534912109375, 0.732421875, 0.97216796875
   1428          ],
   1429          'descriptor': {shape: [3, 5], dataType: 'float16'},
   1430          'constant': true
   1431        }
   1432      },
   1433      'operators': [{
   1434        'name': 'gemm',
   1435        'arguments':
   1436            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
   1437        'outputs': 'gemmOutput'
   1438      }],
   1439      'expectedOutputs': {
   1440        'gemmOutput': {
   1441          'data': [
   1442            1.22265625, 1.48828125, 1.306640625, 1.0302734375, 1.5048828125,
   1443            0.469482421875, 1.3056640625, 1.0810546875, 1.3525390625,
   1444            0.57763671875, 0.88232421875, 2.2265625, 1.1982421875, 1.8662109375,
   1445            2.283203125
   1446          ],
   1447          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1448        }
   1449      }
   1450    }
   1451  },
   1452  {
   1453    'name': 'gemm two float16 2D tensors broadcast options.c [1, 5] => [3, 5]',
   1454    'graph': {
   1455      'inputs': {
   1456        'inputA': {
   1457          'data': [
   1458            0.98681640625, 0.7919921875, 0.31298828125, 0.0943603515625,
   1459            0.6806640625, 0.7177734375, 0.4150390625, 0.1239013671875,
   1460            0.744140625, 0.311279296875, 0.54345703125, 0.2401123046875
   1461          ],
   1462          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1463        },
   1464        'inputB': {
   1465          'data': [
   1466            0.249267578125, 0.63623046875,   0.226806640625,
   1467            0.802734375,    0.88525390625,   0.27880859375,
   1468            0.9345703125,   0.2093505859375, 0.77294921875,
   1469            0.86669921875,  0.284912109375,  0.274658203125,
   1470            0.125244140625, 0.43408203125,   0.005023956298828125,
   1471            0.276123046875, 0.583984375,     0.1583251953125,
   1472            0.53662109375,  0.52490234375
   1473          ],
   1474          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1475          'constant': true
   1476        },
   1477        'inputC': {
   1478          'data': [
   1479            0.093994140625, 0.94384765625, 0.751953125, 0.01458740234375,
   1480            0.822265625
   1481          ],
   1482          'descriptor': {shape: [1, 5], dataType: 'float16'},
   1483          'constant': true
   1484        }
   1485      },
   1486      'operators': [{
   1487        'name': 'gemm',
   1488        'arguments':
   1489            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
   1490        'outputs': 'gemmOutput'
   1491      }],
   1492      'expectedOutputs': {
   1493        'gemmOutput': {
   1494          'data': [
   1495            0.67578125, 2.453125, 1.1953125, 1.60546875, 2.43359375,
   1496            0.6162109375, 2.234375, 1.1279296875, 1.3623046875, 2.11328125,
   1497            0.58740234375, 1.998046875, 1.091796875, 1.2177734375, 1.8798828125
   1498          ],
   1499          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1500        }
   1501      }
   1502    }
   1503  },
   1504  {
   1505    'name': 'gemm two float16 2D tensors broadcast options.c [3, 1] => [3, 5]',
   1506    'graph': {
   1507      'inputs': {
   1508        'inputA': {
   1509          'data': [
   1510            0.99755859375, 0.139892578125, 0.255126953125, 0.347900390625,
   1511            0.81298828125, 0.271484375, 0.47607421875, 0.137939453125,
   1512            0.8134765625, 0.42138671875, 0.14306640625, 0.595703125
   1513          ],
   1514          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1515        },
   1516        'inputB': {
   1517          'data': [
   1518            0.82568359375,  0.8203125,     0.93017578125,     0.669921875,
   1519            0.73486328125,  0.974609375,   0.4951171875,      0.95361328125,
   1520            0.393798828125, 0.55419921875, 0.6474609375,      0.1678466796875,
   1521            0.68798828125,  0.89990234375, 0.08148193359375,  0.67626953125,
   1522            0.3095703125,   0.826171875,   0.025726318359375, 0.9970703125
   1523          ],
   1524          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1525          'constant': true
   1526        },
   1527        'inputC': {
   1528          'data': [0.424072265625, 0.19873046875, 0.69189453125],
   1529          'descriptor': {shape: [3, 1], dataType: 'float16'},
   1530          'constant': true
   1531        }
   1532      },
   1533      'operators': [{
   1534        'name': 'gemm',
   1535        'arguments':
   1536            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
   1537        'outputs': 'gemmOutput'
   1538      }],
   1539      'expectedOutputs': {
   1540        'gemmOutput': {
   1541          'data': [
   1542            1.7841796875, 1.4619140625, 1.9482421875, 1.3857421875,
   1543            1.6025390625, 1.5361328125, 1.123046875, 1.6552734375, 1.2822265625,
   1544            1.123046875, 2.26953125, 1.7763671875, 2.44140625, 1.546875,
   1545            2.12890625
   1546          ],
   1547          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1548        }
   1549      }
   1550    }
   1551  },
   1552  {
   1553    'name': 'gemm two float16 2D tensors broadcast options.c [1, 1] => [3, 5]',
   1554    'graph': {
   1555      'inputs': {
   1556        'inputA': {
   1557          'data': [
   1558            0.68896484375, 0.26171875, 0.78662109375, 0.2275390625,
   1559            0.77294921875, 0.97021484375, 0.1256103515625, 0.98486328125,
   1560            0.59326171875, 0.328125, 0.6611328125, 0.339599609375
   1561          ],
   1562          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1563        },
   1564        'inputB': {
   1565          'data': [
   1566            0.298583984375, 0.99267578125,    0.85546875,    0.94384765625,
   1567            0.994140625,    0.05615234375,    0.16845703125, 0.6943359375,
   1568            0.83203125,     0.06951904296875, 0.9658203125,  0.11956787109375,
   1569            0.7548828125,   0.29638671875,    0.58203125,    0.02618408203125,
   1570            0.55859375,     0.034912109375,   0.97802734375, 0.70263671875
   1571          ],
   1572          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1573          'constant': true
   1574        },
   1575        'inputC': {
   1576          'data': [0.425048828125],
   1577          'descriptor': {shape: [1, 1], dataType: 'float16'},
   1578          'constant': true
   1579        }
   1580      },
   1581      'operators': [{
   1582        'name': 'gemm',
   1583        'arguments':
   1584            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
   1585        'outputs': 'gemmOutput'
   1586      }],
   1587      'expectedOutputs': {
   1588        'gemmOutput': {
   1589          'data': [
   1590            1.4111328125, 1.3740234375, 1.7978515625, 1.7490234375, 1.74609375,
   1591            0.857421875, 1.9208984375, 1.888671875, 2.962890625, 2.025390625,
   1592            1.267578125, 1.337890625, 1.6708984375, 1.7861328125, 1.6611328125
   1593          ],
   1594          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1595        }
   1596      }
   1597    }
   1598  },
   1599  {
   1600    'name': 'gemm two float16 2D tensors broadcast options.c [5] => [3, 5]',
   1601    'graph': {
   1602      'inputs': {
   1603        'inputA': {
   1604          'data': [
   1605            0.0216827392578125, 0.85888671875, 0.48095703125, 0.487548828125,
   1606            0.91064453125, 0.86328125, 0.8046875, 0.224853515625, 0.50341796875,
   1607            0.5478515625, 0.67724609375, 0.66015625
   1608          ],
   1609          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1610        },
   1611        'inputB': {
   1612          'data': [
   1613            0.83642578125,     0.473876953125, 0.363037109375, 0.5498046875,
   1614            0.4609375,         0.281982421875, 0.421142578125, 0.2330322265625,
   1615            0.80419921875,     0.1865234375,   0.383056640625, 0.2454833984375,
   1616            0.038421630859375, 0.35302734375,  0.431640625,    0.82177734375,
   1617            0.8759765625,      0.34716796875,  0.47119140625,  0.58154296875
   1618          ],
   1619          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1620          'constant': true
   1621        },
   1622        'inputC': {
   1623          'data': [
   1624            0.7314453125, 0.0292816162109375, 0.8896484375, 0.424072265625,
   1625            0.09136962890625
   1626          ],
   1627          'descriptor': {shape: [5], dataType: 'float16'},
   1628          'constant': true
   1629        }
   1630      },
   1631      'operators': [{
   1632        'name': 'gemm',
   1633        'arguments':
   1634            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
   1635        'outputs': 'gemmOutput'
   1636      }],
   1637      'expectedOutputs': {
   1638        'gemmOutput': {
   1639          'data': [
   1640            1.5771484375, 0.9462890625, 1.28515625, 1.5263671875, 0.7529296875,
   1641            2.23046875, 1.21875, 1.5302734375, 2.009765625, 1.150390625,
   1642            2.109375, 1.2431640625, 1.455078125, 1.69140625, 1.1015625
   1643          ],
   1644          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1645        }
   1646      }
   1647    }
   1648  },
   1649  {
   1650    'name': 'gemm two float16 2D tensors broadcast options.c [1] => [3, 5]',
   1651    'graph': {
   1652      'inputs': {
   1653        'inputA': {
   1654          'data': [
   1655            0.5712890625, 0.83447265625, 0.35693359375, 0.326904296875,
   1656            0.1727294921875, 0.1966552734375, 0.9404296875, 0.724609375,
   1657            0.630859375, 0.53759765625, 0.72021484375, 0.88525390625
   1658          ],
   1659          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1660        },
   1661        'inputB': {
   1662          'data': [
   1663            0.91552734375, 0.85009765625, 0.2169189453125, 0.430908203125,
   1664            0.30810546875, 0.88916015625, 0.9931640625,    0.705078125,
   1665            0.55126953125, 0.91259765625, 0.92431640625,   0.148681640625,
   1666            0.4306640625,  0.69921875,    0.24658203125,   0.19287109375,
   1667            0.5263671875,  0.98095703125, 0.80322265625,   0.407958984375
   1668          ],
   1669          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1670          'constant': true
   1671        },
   1672        'inputC': {
   1673          'data': [0.755859375],
   1674          'descriptor': {shape: [1], dataType: 'float16'},
   1675          'constant': true
   1676        }
   1677      },
   1678      'operators': [{
   1679        'name': 'gemm',
   1680        'arguments':
   1681            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
   1682        'outputs': 'gemmOutput'
   1683      }],
   1684      'expectedOutputs': {
   1685        'gemmOutput': {
   1686          'data': [
   1687            2.4140625, 2.294921875, 1.9423828125, 1.974609375, 1.9150390625,
   1688            2.09765625, 1.619140625, 2.046875, 2.177734375, 1.515625, 2.6484375,
   1689            2.3984375, 2.451171875, 2.5390625, 1.9794921875
   1690          ],
   1691          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1692        }
   1693      }
   1694    }
   1695  },
   1696  {
   1697    'name': 'gemm two float16 2D tensors scalar options.c',
   1698    'graph': {
   1699      'inputs': {
   1700        'inputA': {
   1701          'data': [
   1702            0.966796875, 0.87353515625, 0.9384765625, 0.9091796875,
   1703            0.81396484375, 0.73876953125, 0.1455078125, 0.08917236328125,
   1704            0.7900390625, 0.271484375, 0.21240234375, 0.393310546875
   1705          ],
   1706          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1707        },
   1708        'inputB': {
   1709          'data': [
   1710            0.52587890625,   0.219482421875,   0.666015625,  0.5078125,
   1711            0.2279052734375, 0.12420654296875, 0.890625,     0.6884765625,
   1712            0.779296875,     0.7548828125,     0.92578125,   0.669921875,
   1713            0.60498046875,   0.1966552734375,  0.986328125,  0.533203125,
   1714            0.62744140625,   0.732421875,      0.5947265625, 0.33837890625
   1715          ],
   1716          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1717          'constant': true
   1718        },
   1719        'inputC': {
   1720          'data': [0.95361328125],
   1721          'descriptor': {shape: [], dataType: 'float16'},
   1722          'constant': true
   1723        }
   1724      },
   1725      'operators': [{
   1726        'name': 'gemm',
   1727        'arguments':
   1728            [{'a': 'inputA'}, {'b': 'inputB'}, {'options': {'c': 'inputC'}}],
   1729        'outputs': 'gemmOutput'
   1730      }],
   1731      'expectedOutputs': {
   1732        'gemmOutput': {
   1733          'data': [
   1734            2.923828125, 3.142578125, 3.431640625, 2.849609375, 3.06640625,
   1735            1.6552734375, 1.943359375, 2.158203125, 2.0234375, 1.8701171875,
   1736            1.8095703125, 1.7578125, 2.083984375, 1.841796875, 1.681640625
   1737          ],
   1738          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1739        }
   1740      }
   1741    }
   1742  },
   1743  {
   1744    'name': 'gemm two float16 2D tensors options.alpha',
   1745    'graph': {
   1746      'inputs': {
   1747        'inputA': {
   1748          'data': [
   1749            0.455810546875, 0.89501953125, 0.1544189453125, 0.25244140625,
   1750            0.359130859375, 0.61376953125, 0.2164306640625, 0.347412109375,
   1751            0.90966796875, 0.91455078125, 0.59765625, 0.409912109375
   1752          ],
   1753          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1754        },
   1755        'inputB': {
   1756          'data': [
   1757            0.084228515625, 0.6025390625,   0.370361328125, 0.474365234375,
   1758            0.93115234375,  0.72998046875,  0.76806640625,  0.759765625,
   1759            0.673828125,    0.480224609375, 0.12255859375,  0.71044921875,
   1760            0.90478515625,  0.1796875,      0.55322265625,  0.0193939208984375,
   1761            0.290771484375, 0.2197265625,   0.80859375,     0.102783203125
   1762          ],
   1763          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1764          'constant': true
   1765        }
   1766      },
   1767      'operators': [{
   1768        'name': 'gemm',
   1769        'arguments': [
   1770          {'a': 'inputA'}, {'b': 'inputB'},
   1771          {'options': {'alpha': 74.43204170482103}}
   1772        ],
   1773        'outputs': 'gemmOutput'
   1774      }],
   1775      'expectedOutputs': {
   1776        'gemmOutput': {
   1777          'data': [
   1778            53.25, 85.25, 77.6875, 78.25, 71.875, 38.0625, 70.1875, 64.875,
   1779            67.25, 58.40625, 61.4375, 133.5, 123.75, 110.625, 123.5
   1780          ],
   1781          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1782        }
   1783      }
   1784    }
   1785  },
   1786  {
   1787    'name': 'gemm two float16 2D tensors options.beta',
   1788    'graph': {
   1789      'inputs': {
   1790        'inputA': {
   1791          'data': [
   1792            0.371337890625, 0.97216796875, 0.51953125, 0.73974609375,
   1793            0.5126953125, 0.0809326171875, 0.44482421875, 0.421875,
   1794            0.2294921875, 0.609375, 0.441162109375, 0.748046875
   1795          ],
   1796          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1797        },
   1798        'inputB': {
   1799          'data': [
   1800            0.3330078125,   0.7275390625,   0.229736328125, 0.122314453125,
   1801            0.176025390625, 0.84033203125,  0.392578125,    0.85205078125,
   1802            0.053955078125, 0.257080078125, 0.1416015625,   0.272705078125,
   1803            0.7294921875,   0.55615234375,  0.71630859375,  0.560546875,
   1804            0.6728515625,   0.5107421875,   0.36376953125,  0.92578125
   1805          ],
   1806          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1807          'constant': true
   1808        }
   1809      },
   1810      'operators': [{
   1811        'name': 'gemm',
   1812        'arguments': [
   1813          {'a': 'inputA'}, {'b': 'inputB'},
   1814          {'options': {'beta': 62.01828598608989}}
   1815        ],
   1816        'outputs': 'gemmOutput'
   1817      }],
   1818      'expectedOutputs': {
   1819        'gemmOutput': {
   1820          'data': [
   1821            1.4287109375, 1.291015625, 1.6708984375, 0.65576171875,
   1822            1.3720703125, 0.5380859375, 0.81005859375, 0.7265625,
   1823            0.468017578125, 0.8203125, 1.0703125, 1.0302734375, 1.275390625,
   1824            0.57861328125, 1.2060546875
   1825          ],
   1826          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1827        }
   1828      }
   1829    }
   1830  },
   1831  {
   1832    'name': 'gemm two float16 2D tensors options.c and options.beta',
   1833    'graph': {
   1834      'inputs': {
   1835        'inputA': {
   1836          'data': [
   1837            0.55615234375, 0.2451171875, 0.1129150390625, 0.6279296875,
   1838            0.3349609375, 0.0188751220703125, 0.09759521484375, 0.73828125,
   1839            0.67236328125, 0.4375, 0.271484375, 0.865234375
   1840          ],
   1841          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1842        },
   1843        'inputB': {
   1844          'data': [
   1845            0.45361328125,   0.7060546875,    0.45751953125,    0.306640625,
   1846            0.41552734375,   0.271484375,     0.28076171875,    0.376708984375,
   1847            0.2457275390625, 0.283935546875,  0.72412109375,    0.52392578125,
   1848            0.7265625,       0.50390625,      0.08197021484375, 0.33154296875,
   1849            0.2176513671875, 0.1204833984375, 0.1644287109375,  0.2138671875
   1850          ],
   1851          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1852          'constant': true
   1853        },
   1854        'inputC': {
   1855          'data': [
   1856            0.736328125, 0.85791015625, 0.9248046875, 0.92236328125,
   1857            0.9267578125, 0.377685546875, 0.319091796875, 0.2371826171875,
   1858            0.79736328125, 0.074462890625, 0.6376953125, 0.413818359375,
   1859            0.72265625, 0.90966796875, 0.767578125
   1860          ],
   1861          'descriptor': {shape: [3, 5], dataType: 'float16'},
   1862          'constant': true
   1863        }
   1864      },
   1865      'operators': [{
   1866        'name': 'gemm',
   1867        'arguments': [
   1868          {'a': 'inputA'}, {'b': 'inputB'},
   1869          {'options': {'c': 'inputC', 'beta': 62.01828598608989}}
   1870        ],
   1871        'outputs': 'gemmOutput'
   1872      }],
   1873      'expectedOutputs': {
   1874        'gemmOutput': {
   1875          'data': [
   1876            46.28125, 53.875, 57.84375, 57.59375, 57.90625, 23.890625, 20.25,
   1877            15.03125, 49.71875, 4.9296875, 40.46875, 26.59375, 45.59375, 57,
   1878            48.21875
   1879          ],
   1880          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1881        }
   1882      }
   1883    }
   1884  },
   1885  {
   1886    'name': 'gemm two float16 2D tensors options.aTranspose being true',
   1887    'graph': {
   1888      'inputs': {
   1889        'inputA': {
   1890          'data': [
   1891            0.335693359375, 0.2005615234375, 0.2440185546875, 0.306396484375,
   1892            0.85693359375, 0.327880859375, 0.1824951171875, 0.47900390625,
   1893            0.6357421875, 0.15185546875, 0.8330078125, 0.55615234375
   1894          ],
   1895          'descriptor': {shape: [4, 3], dataType: 'float16'}
   1896        },
   1897        'inputB': {
   1898          'data': [
   1899            0.271240234375,  0.0931396484375, 0.84375,
   1900            0.796875,        0.195556640625,  0.79150390625,
   1901            0.59375,         0.8486328125,    0.01042938232421875,
   1902            0.0809326171875, 0.90869140625,   0.36083984375,
   1903            0.66748046875,   0.1376953125,    0.1590576171875,
   1904            0.513671875,     0.810546875,     0.6669921875,
   1905            0.39208984375,   0.97900390625
   1906          ],
   1907          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1908          'constant': true
   1909        }
   1910      },
   1911      'operators': [{
   1912        'name': 'gemm',
   1913        'arguments': [
   1914          {'a': 'inputA'}, {'b': 'inputB'}, {'options': {'aTranspose': true}}
   1915        ],
   1916        'outputs': 'gemmOutput'
   1917      }],
   1918      'expectedOutputs': {
   1919        'gemmOutput': {
   1920          'data': [
   1921            0.57763671875, 0.402099609375, 0.7666015625, 0.35546875,
   1922            0.26806640625, 1.595703125, 1.3759765625, 1.771484375, 0.5615234375,
   1923            1, 1.189453125, 0.8974609375, 1.279296875, 0.50341796875,
   1924            0.7197265625
   1925          ],
   1926          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1927        }
   1928      }
   1929    }
   1930  },
   1931  {
   1932    'name':
   1933        'gemm two float16 2D tensors options.aTranspose being explicit false',
   1934    'graph': {
   1935      'inputs': {
   1936        'inputA': {
   1937          'data': [
   1938            0.61572265625, 0.9892578125, 0.81591796875, 0.8583984375,
   1939            0.47119140625, 0.56494140625, 0.91943359375, 0.174560546875,
   1940            0.295654296875, 0.77783203125, 0.324951171875, 0.708984375
   1941          ],
   1942          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1943        },
   1944        'inputB': {
   1945          'data': [
   1946            0.650390625,    0.10198974609375,  0.49365234375,
   1947            0.322265625,    0.87060546875,     0.74072265625,
   1948            0.7001953125,   0.7138671875,      0.826171875,
   1949            0.42529296875,  0.57080078125,     0.54150390625,
   1950            0.320556640625, 0.59130859375,     0.1961669921875,
   1951            0.34228515625,  0.034515380859375, 0.669921875,
   1952            0.356201171875, 0.358154296875
   1953          ],
   1954          'descriptor': {shape: [4, 5], dataType: 'float16'},
   1955          'constant': true
   1956        }
   1957      },
   1958      'operators': [{
   1959        'name': 'gemm',
   1960        'arguments': [
   1961          {'a': 'inputA'}, {'b': 'inputB'}, {'options': {'aTranspose': false}}
   1962        ],
   1963        'outputs': 'gemmOutput'
   1964      }],
   1965      'expectedOutputs': {
   1966        'gemmOutput': {
   1967          'data': [
   1968            1.892578125, 1.2265625, 1.8466796875, 1.8037109375, 1.423828125,
   1969            1.3095703125, 0.94775390625, 1.0478515625, 1.224609375,
   1970            0.8935546875, 1.1962890625, 0.775390625, 1.2802734375, 1.1826171875,
   1971            0.90576171875
   1972          ],
   1973          'descriptor': {shape: [3, 5], dataType: 'float16'}
   1974        }
   1975      }
   1976    }
   1977  },
   1978  {
   1979    'name': 'gemm two float16 2D tensors options.bTranspose being true',
   1980    'graph': {
   1981      'inputs': {
   1982        'inputA': {
   1983          'data': [
   1984            0.58251953125, 0.024688720703125, 0.144775390625, 0.41162109375,
   1985            0.837890625, 0.5419921875, 0.75341796875, 0.435546875,
   1986            0.207275390625, 0.0222930908203125, 0.8896484375, 0.2578125
   1987          ],
   1988          'descriptor': {shape: [3, 4], dataType: 'float16'}
   1989        },
   1990        'inputB': {
   1991          'data': [
   1992            0.2349853515625, 0.39794921875, 0.64990234375,
   1993            0.62744140625,   0.4853515625,  0.397216796875,
   1994            0.6787109375,    0.65283203125, 0.2154541015625,
   1995            0.7177734375,    0.70166015625, 0.98193359375,
   1996            0.6708984375,    0.26318359375, 0.5478515625,
   1997            0.69873046875,   0.63623046875, 0.006359100341796875,
   1998            0.1671142578125, 0.60791015625
   1999          ],
   2000          'descriptor': {shape: [5, 4], dataType: 'float16'},
   2001          'constant': true
   2002        }
   2003      },
   2004      'operators': [{
   2005        'name': 'gemm',
   2006        'arguments': [
   2007          {'a': 'inputA'}, {'b': 'inputB'}, {'options': {'bTranspose': true}}
   2008        ],
   2009        'outputs': 'gemmOutput'
   2010      }],
   2011      'expectedOutputs': {
   2012        'gemmOutput': {
   2013          'data': [
   2014            0.4990234375, 0.65966796875, 0.64892578125, 0.76416015625,
   2015            0.64501953125, 1.17578125, 1.41796875, 1.525390625, 1.421875,
   2016            0.92724609375, 0.79736328125, 0.88134765625, 0.93798828125, 0.8125,
   2017            0.4375
   2018          ],
   2019          'descriptor': {shape: [3, 5], dataType: 'float16'}
   2020        }
   2021      }
   2022    }
   2023  },
   2024  {
   2025    'name':
   2026        'gemm two float16 2D tensors options.bTranspose being explicit false',
   2027    'graph': {
   2028      'inputs': {
   2029        'inputA': {
   2030          'data': [
   2031            0.84814453125, 0.66748046875, 0.424072265625, 0.7294921875,
   2032            0.93798828125, 0.787109375, 0.485595703125, 0.341064453125,
   2033            0.364501953125, 0.398681640625, 0.1600341796875, 0.98828125
   2034          ],
   2035          'descriptor': {shape: [3, 4], dataType: 'float16'}
   2036        },
   2037        'inputB': {
   2038          'data': [
   2039            0.1717529296875,   0.51953125,        0.40576171875,
   2040            0.73388671875,     0.1510009765625,   0.572265625,
   2041            0.890625,          0.69970703125,     0.58642578125,
   2042            0.09619140625,     0.9990234375,      0.6572265625,
   2043            0.035247802734375, 0.251708984375,    0.462158203125,
   2044            0.177001953125,    0.027984619140625, 0.1444091796875,
   2045            0.77099609375,     0.11273193359375
   2046          ],
   2047          'descriptor': {shape: [4, 5], dataType: 'float16'},
   2048          'constant': true
   2049        }
   2050      },
   2051      'operators': [{
   2052        'name': 'gemm',
   2053        'arguments': [
   2054          {'a': 'inputA'}, {'b': 'inputB'}, {'options': {'bTranspose': false}}
   2055        ],
   2056        'outputs': 'gemmOutput'
   2057      }],
   2058      'expectedOutputs': {
   2059        'gemmOutput': {
   2060          'data': [
   2061            1.080078125, 1.333984375, 0.931640625, 1.6826171875, 0.470458984375,
   2062            1.1572265625, 1.5166015625, 0.99755859375, 1.53515625,
   2063            0.480224609375, 0.62548828125, 0.67724609375, 0.5751953125,
   2064            1.3037109375, 0.27880859375
   2065          ],
   2066          'descriptor': {shape: [3, 5], dataType: 'float16'}
   2067        }
   2068      }
   2069    }
   2070  },
   2071  {
   2072    'name': 'gemm two float16 2D tensors all options',
   2073    'graph': {
   2074      'inputs': {
   2075        'inputA': {
   2076          'data': [
   2077            0.5048828125, 0.583984375, 0.11492919921875, 0.66845703125,
   2078            0.5654296875, 0.470458984375, 0.76904296875, 0.03497314453125,
   2079            0.76904296875, 0.413330078125, 0.300537109375, 0.73779296875
   2080          ],
   2081          'descriptor': {shape: [4, 3], dataType: 'float16'}
   2082        },
   2083        'inputB': {
   2084          'data': [
   2085            0.84814453125,    0.861328125,    0.9736328125,  0.7001953125,
   2086            0.06622314453125, 0.79541015625,  0.5458984375,  0.712890625,
   2087            0.58642578125,    0.219970703125, 0.92236328125, 0.09332275390625,
   2088            0.1328125,        0.25439453125,  0.857421875,   0.794921875,
   2089            0.60009765625,    0.422119140625, 0.5068359375,  0.1951904296875
   2090          ],
   2091          'descriptor': {shape: [5, 4], dataType: 'float16'},
   2092          'constant': true
   2093        },
   2094        'inputC': {
   2095          'data': [
   2096            0.79150390625, 0.434326171875, 0.432861328125, 0.85205078125,
   2097            0.314453125, 0.07110595703125, 0.8798828125, 0.037017822265625,
   2098            0.68798828125, 0.84765625, 0.859375, 0.285400390625, 0.63720703125,
   2099            0.6015625, 0.96826171875
   2100          ],
   2101          'descriptor': {shape: [3, 5], dataType: 'float16'},
   2102          'constant': true
   2103        }
   2104      },
   2105      'operators': [{
   2106        'name': 'gemm',
   2107        'arguments': [
   2108          {'a': 'inputA'}, {'b': 'inputB'}, {
   2109            'options': {
   2110              'c': 'inputC',
   2111              'alpha': 74.43204170482103,
   2112              'beta': 62.01828598608989,
   2113              'aTranspose': true,
   2114              'bTranspose': true
   2115            }
   2116          }
   2117        ],
   2118        'outputs': 'gemmOutput'
   2119      }],
   2120      'expectedOutputs': {
   2121        'gemmOutput': {
   2122          'data': [
   2123            201.125, 122.1875, 115.5, 144, 98.0625, 95.75, 108.3125, 41.53125,
   2124            79.1875, 102.125, 184.875, 116.5, 110.1875, 140.125, 119.6875
   2125          ],
   2126          'descriptor': {shape: [3, 5], dataType: 'float16'}
   2127        }
   2128      }
   2129    }
   2130  },
   2131  {
   2132    'name': 'gemm both negative options.alpha and 1st float16 input tensor',
   2133    'graph': {
   2134      'inputs': {
   2135        'inputA': {
   2136          'data': [
   2137            0.373779296875, 0.314208984375, 0.775390625, 0.712890625,
   2138            0.1170654296875, 0.1820068359375, 0.81640625, 0.4609375,
   2139            0.59912109375, 0.0888671875, 0.52734375, 0.65869140625
   2140          ],
   2141          'descriptor': {shape: [3, 4], dataType: 'float16'}
   2142        },
   2143        'inputB': {
   2144          'data': [
   2145            0.673828125,  0.45703125,     0.9619140625,  0.7275390625,
   2146            0.9013671875, 0.837890625,    0.88330078125, 0.744140625,
   2147            0.076171875,  0.283447265625, 0.59228515625, 0.47119140625,
   2148            0.9794921875, 0.595703125,    0.578125,      0.71142578125,
   2149            0.8974609375, 0.83447265625,  0.36962890625, 0.689453125
   2150          ],
   2151          'descriptor': {shape: [4, 5], dataType: 'float16'},
   2152          'constant': true
   2153        },
   2154        'inputC': {
   2155          'data': [
   2156            0.367431640625, 0.8427734375, 0.0340576171875, 0.7353515625,
   2157            0.048309326171875, 0.9326171875, 0.623046875, 0.93017578125,
   2158            0.049896240234375, 0.9501953125, 0.53369140625, 0.12109375,
   2159            0.154296875, 0.9443359375, 0.293212890625
   2160          ],
   2161          'descriptor': {shape: [3, 5], dataType: 'float16'},
   2162          'constant': true
   2163        }
   2164      },
   2165      'operators': [{
   2166        'name': 'gemm',
   2167        'arguments': [
   2168          {'a': 'inputA'}, {'b': 'inputB'},
   2169          {'options': {'c': 'inputC', 'alpha': -22.611149749186296}}
   2170        ],
   2171        'outputs': 'gemmOutput'
   2172      }],
   2173      'expectedOutputs': {
   2174        'gemmOutput': {
   2175          'data': [
   2176            -33.125, -32.03125, -44, -22.359375, -30.828125, -22.640625,
   2177            -22.28125, -31.453125, -17.03125, -20.453125, -27.9375, -26.828125,
   2178            -38.46875, -21.671875, -29.65625
   2179          ],
   2180          'descriptor': {shape: [3, 5], dataType: 'float16'}
   2181        }
   2182      }
   2183    }
   2184  },
   2185  {
   2186    'name': 'gemm both negative options.alpha and 2nd float16 input tensor',
   2187    'graph': {
   2188      'inputs': {
   2189        'inputA': {
   2190          'data': [
   2191            0.7666015625, 0.97216796875, 0.0718994140625, 0.2430419921875,
   2192            0.0016126632690429688, 0.544921875, 0.32177734375, 0.5556640625,
   2193            0.4990234375, 0.384765625, 0.51171875, 0.18212890625
   2194          ],
   2195          'descriptor': {shape: [3, 4], dataType: 'float16'}
   2196        },
   2197        'inputB': {
   2198          'data': [
   2199            0.265625,        0.7099609375,      0.7265625,
   2200            0.57080078125,   0.8330078125,      0.1624755859375,
   2201            0.28759765625,   0.6552734375,      0.97509765625,
   2202            0.42822265625,   0.016632080078125, 0.13818359375,
   2203            0.1358642578125, 0.525390625,       0.384765625,
   2204            0.17626953125,   0.10430908203125,  0.7548828125,
   2205            0.8330078125,    0.2169189453125
   2206          ],
   2207          'descriptor': {shape: [4, 5], dataType: 'float16'},
   2208          'constant': true
   2209        },
   2210        'inputC': {
   2211          'data': [
   2212            0.285888671875, 0.1680908203125, 0.93798828125, 0.357177734375,
   2213            0.07672119140625, 0.38671875, 0.5224609375, 0.83837890625,
   2214            0.051422119140625, 0.173095703125, 0.00557708740234375,
   2215            0.323486328125, 0.2587890625, 0.30322265625, 0.5576171875
   2216          ],
   2217          'descriptor': {shape: [3, 5], dataType: 'float16'},
   2218          'constant': true
   2219        }
   2220      },
   2221      'operators': [{
   2222        'name': 'gemm',
   2223        'arguments': [
   2224          {'a': 'inputA'}, {'b': 'inputB'},
   2225          {'options': {'c': 'inputC', 'alpha': -22.611149749186296}}
   2226        ],
   2227        'outputs': 'gemmOutput'
   2228      }],
   2229      'expectedOutputs': {
   2230        'gemmOutput': {
   2231          'data': [
   2232            -8.8828125, -19.265625, -30.421875, -36.40625, -25.59375,
   2233            -3.9609375, -5.36328125, -17.734375, -26.265625, -10.65625,
   2234            -5.32421875, -12.21875, -18.328125, -24.125, -17.90625
   2235          ],
   2236          'descriptor': {shape: [3, 5], dataType: 'float16'}
   2237        }
   2238      }
   2239    }
   2240  },
   2241  {
   2242    'name':
   2243        'gemm both negative options.beta and 3rd float16 input tensor (options.c)',
   2244    'graph': {
   2245      'inputs': {
   2246        'inputA': {
   2247          'data': [
   2248            0.85400390625, 0.70458984375, 0.76416015625, 0.982421875,
   2249            0.470458984375, 0.310546875, 0.68408203125, 0.83935546875,
   2250            0.52294921875, 0.5234375, 0.79736328125, 0.10626220703125
   2251          ],
   2252          'descriptor': {shape: [3, 4], dataType: 'float16'}
   2253        },
   2254        'inputB': {
   2255          'data': [
   2256            0.955078125,    0.25537109375,  0.68505859375,   0.29296875,
   2257            0.36962890625,  0.479248046875, 0.599609375,     0.16455078125,
   2258            0.59375,        0.759765625,    0.325927734375,  0.9853515625,
   2259            0.348388671875, 0.428466796875, 0.1644287109375, 0.371337890625,
   2260            0.343505859375, 0.434814453125, 0.0859375,       0.148193359375
   2261          ],
   2262          'descriptor': {shape: [4, 5], dataType: 'float16'},
   2263          'constant': true
   2264        },
   2265        'inputC': {
   2266          'data': [
   2267            0.09210205078125, 0.869140625, 0.186279296875, 0.9111328125,
   2268            0.80224609375, 0.70703125, 0.51904296875, 0.78466796875,
   2269            0.43310546875, 0.884765625, 0.452880859375, 0.052764892578125,
   2270            0.83740234375, 0.8994140625, 0.68896484375
   2271          ],
   2272          'descriptor': {shape: [3, 5], dataType: 'float16'},
   2273          'constant': true
   2274        }
   2275      },
   2276      'operators': [{
   2277        'name': 'gemm',
   2278        'arguments': [
   2279          {'a': 'inputA'}, {'b': 'inputB'},
   2280          {'options': {'c': 'inputC', 'beta': -11.68521964935509}}
   2281        ],
   2282        'outputs': 'gemmOutput'
   2283      }],
   2284      'expectedOutputs': {
   2285        'gemmOutput': {
   2286          'data': [
   2287            0.69091796875, -8.421875, -0.7822265625, -9.5625, -8.25,
   2288            -7.12890625, -4.796875, -8.1953125, -4.375, -9.6953125, -4.2421875,
   2289            0.65283203125, -9.015625, -9.6953125, -7.3125
   2290          ],
   2291          'descriptor': {shape: [3, 5], dataType: 'float16'}
   2292        }
   2293      }
   2294    }
   2295  },
   2296  {
   2297    'name':
   2298        'gemm float16 input tensors with both negative options.alpha and options.beta',
   2299    'graph': {
   2300      'inputs': {
   2301        'inputA': {
   2302          'data': [
   2303            0.623046875, 0.5673828125, 0.568359375, 0.218017578125,
   2304            0.29833984375, 0.425048828125, 0.59228515625, 0.09576416015625,
   2305            0.14306640625, 0.66259765625, 0.34521484375, 0.505859375
   2306          ],
   2307          'descriptor': {shape: [3, 4], dataType: 'float16'}
   2308        },
   2309        'inputB': {
   2310          'data': [
   2311            0.65673828125, 0.182373046875, 0.61328125,     0.17578125,
   2312            0.8076171875,  0.46923828125,  0.5927734375,   0.09747314453125,
   2313            0.7041015625,  0.209228515625, 0.955078125,    0.716796875,
   2314            0.955078125,   0.61669921875,  0.45556640625,  0.76611328125,
   2315            0.69970703125, 0.58154296875,  0.492919921875, 0.6513671875
   2316          ],
   2317          'descriptor': {shape: [4, 5], dataType: 'float16'},
   2318          'constant': true
   2319        },
   2320        'inputC': {
   2321          'data': [
   2322            0.40087890625, 0.72509765625, 0.35595703125, 0.0589599609375,
   2323            0.1856689453125, 0.923828125, 0.0650634765625, 0.169677734375,
   2324            0.93603515625, 0.0208892822265625, 0.281005859375, 0.8193359375,
   2325            0.256591796875, 0.043365478515625, 0.222900390625
   2326          ],
   2327          'descriptor': {shape: [3, 5], dataType: 'float16'},
   2328          'constant': true
   2329        }
   2330      },
   2331      'operators': [{
   2332        'name': 'gemm',
   2333        'arguments': [
   2334          {'a': 'inputA'}, {'b': 'inputB'}, {
   2335            'options': {
   2336              'c': 'inputC',
   2337              'alpha': -22.611149749186296,
   2338              'beta': -11.68521964935509
   2339            }
   2340          }
   2341        ],
   2342        'outputs': 'gemmOutput'
   2343      }],
   2344      'expectedOutputs': {
   2345        'gemmOutput': {
   2346          'data': [
   2347            -36, -31.3125, -29.1875, -22.546875, -25.296875, -34.1875,
   2348            -18.796875, -21.109375, -28.21875, -15.2109375, -28.65625,
   2349            -32.65625, -20.546875, -22.078125, -19.359375
   2350          ],
   2351          'descriptor': {shape: [3, 5], dataType: 'float16'}
   2352        }
   2353      }
   2354    }
   2355  },
   2356  {
   2357    'name':
   2358        'gemm both negative options.alpha and 3rd float16 input tensor (options.c)',
   2359    'graph': {
   2360      'inputs': {
   2361        'inputA': {
   2362          'data': [
   2363            0.95068359375, 0.211669921875, 0.203857421875, 0.198486328125,
   2364            0.9140625, 0.68994140625, 0.9951171875, 0.3525390625,
   2365            0.029266357421875, 0.128662109375, 0.1787109375, 0.91357421875
   2366          ],
   2367          'descriptor': {shape: [3, 4], dataType: 'float16'}
   2368        },
   2369        'inputB': {
   2370          'data': [
   2371            0.3720703125,   0.353271484375, 0.1610107421875,  0.301513671875,
   2372            0.75830078125,  0.18359375,     0.06787109375,    0.029083251953125,
   2373            0.9453125,      0.609375,       0.10418701171875, 0.80517578125,
   2374            0.65625,        0.77197265625,  0.5888671875,     0.916015625,
   2375            0.104736328125, 0.7138671875,   0.75341796875,    0.88623046875
   2376          ],
   2377          'descriptor': {shape: [4, 5], dataType: 'float16'},
   2378          'constant': true
   2379        },
   2380        'inputC': {
   2381          'data': [
   2382            0.484375, 0.97412109375, 0.072509765625, 0.439697265625,
   2383            0.46533203125, 0.97119140625, 0.84375, 0.0928955078125, 0.591796875,
   2384            0.0114898681640625, 0.47265625, 0.7490234375, 0.1689453125,
   2385            0.2379150390625, 0.69970703125
   2386          ],
   2387          'descriptor': {shape: [3, 5], dataType: 'float16'},
   2388          'constant': true
   2389        }
   2390      },
   2391      'operators': [{
   2392        'name': 'gemm',
   2393        'arguments': [
   2394          {'a': 'inputA'}, {'b': 'inputB'},
   2395          {'options': {'c': 'inputC', 'alpha': -22.611149749186296}}
   2396        ],
   2397        'outputs': 'gemmOutput'
   2398      }],
   2399      'expectedOutputs': {
   2400        'gemmOutput': {
   2401          'data': [
   2402            -12.984375, -11.125, -9.7578125, -17.5, -25.4375, -19.234375,
   2403            -26.46875, -24.140625, -43.75, -45.46875, -19.65625, -5.09765625,
   2404            -17.421875, -21.390625, -22.265625
   2405          ],
   2406          'descriptor': {shape: [3, 5], dataType: 'float16'}
   2407        }
   2408      }
   2409    }
   2410  }
   2411 ];
   2412 
   2413 webnn_conformance_test(gemmTests, buildAndExecuteGraph, getPrecisionTolerance);