onnx 1.15.0__cp311-cp311-win_amd64.whl → 1.16.1__cp311-cp311-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of onnx might be problematic. Click here for more details.

Files changed (584) hide show
  1. onnx/__init__.py +10 -10
  2. onnx/backend/base.py +13 -14
  3. onnx/backend/sample/ops/abs.py +1 -1
  4. onnx/backend/test/case/model/__init__.py +0 -1
  5. onnx/backend/test/case/node/ai_onnx_ml/tree_ensemble.py +122 -0
  6. onnx/backend/test/case/node/averagepool.py +15 -30
  7. onnx/backend/test/case/node/cast.py +88 -11
  8. onnx/backend/test/case/node/dequantizelinear.py +155 -0
  9. onnx/backend/test/case/node/groupnormalization.py +13 -9
  10. onnx/backend/test/case/node/gru.py +2 -2
  11. onnx/backend/test/case/node/isinf.py +4 -4
  12. onnx/backend/test/case/node/isnan.py +2 -2
  13. onnx/backend/test/case/node/lppool.py +8 -16
  14. onnx/backend/test/case/node/lstm.py +1 -1
  15. onnx/backend/test/case/node/maxpool.py +40 -34
  16. onnx/backend/test/case/node/pow.py +1 -1
  17. onnx/backend/test/case/node/qlinearmatmul.py +143 -109
  18. onnx/backend/test/case/node/quantizelinear.py +298 -7
  19. onnx/backend/test/case/node/reducemax.py +26 -0
  20. onnx/backend/test/case/node/rnn.py +1 -1
  21. onnx/backend/test/case/node/scan.py +6 -2
  22. onnx/backend/test/case/node/scatterelements.py +1 -1
  23. onnx/backend/test/case/node/topk.py +1 -1
  24. onnx/backend/test/case/utils.py +1 -3
  25. onnx/backend/test/data/node/test_ai_onnx_ml_tree_ensemble_set_membership/model.onnx +0 -0
  26. onnx/backend/test/data/node/test_ai_onnx_ml_tree_ensemble_set_membership/test_data_set_0/input_0.pb +0 -0
  27. onnx/backend/test/data/node/test_ai_onnx_ml_tree_ensemble_set_membership/test_data_set_0/output_0.pb +0 -0
  28. onnx/backend/test/data/node/test_ai_onnx_ml_tree_ensemble_single_tree/model.onnx +0 -0
  29. onnx/backend/test/data/node/test_ai_onnx_ml_tree_ensemble_single_tree/test_data_set_0/input_0.pb +1 -0
  30. onnx/backend/test/data/node/test_ai_onnx_ml_tree_ensemble_single_tree/test_data_set_0/output_0.pb +0 -0
  31. onnx/backend/test/data/node/test_cast_BFLOAT16_to_FLOAT/model.onnx +0 -0
  32. onnx/backend/test/data/node/test_cast_DOUBLE_to_FLOAT/model.onnx +0 -0
  33. onnx/backend/test/data/node/test_cast_DOUBLE_to_FLOAT16/model.onnx +0 -0
  34. onnx/backend/test/data/node/test_cast_FLOAT16_to_DOUBLE/model.onnx +0 -0
  35. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT/model.onnx +0 -0
  36. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E4M3FN/model.onnx +0 -0
  37. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E4M3FN/test_data_set_0/input_0.pb +2 -2
  38. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E4M3FN/test_data_set_0/output_0.pb +0 -0
  39. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E4M3FNUZ/model.onnx +0 -0
  40. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E4M3FNUZ/test_data_set_0/input_0.pb +2 -2
  41. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E4M3FNUZ/test_data_set_0/output_0.pb +0 -0
  42. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E5M2/model.onnx +0 -0
  43. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E5M2/test_data_set_0/input_0.pb +2 -2
  44. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E5M2/test_data_set_0/output_0.pb +0 -0
  45. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E5M2FNUZ/model.onnx +0 -0
  46. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E5M2FNUZ/test_data_set_0/input_0.pb +2 -2
  47. onnx/backend/test/data/node/test_cast_FLOAT16_to_FLOAT8E5M2FNUZ/test_data_set_0/output_0.pb +0 -0
  48. onnx/backend/test/data/node/test_cast_FLOAT16_to_INT4/model.onnx +0 -0
  49. onnx/backend/test/data/node/test_cast_FLOAT16_to_INT4/test_data_set_0/input_0.pb +0 -0
  50. onnx/backend/test/data/node/test_cast_FLOAT16_to_INT4/test_data_set_0/output_0.pb +1 -0
  51. onnx/backend/test/data/node/test_cast_FLOAT16_to_UINT4/model.onnx +0 -0
  52. onnx/backend/test/data/node/test_cast_FLOAT16_to_UINT4/test_data_set_0/input_0.pb +0 -0
  53. onnx/backend/test/data/node/test_cast_FLOAT16_to_UINT4/test_data_set_0/output_0.pb +0 -0
  54. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FNUZ_to_FLOAT/model.onnx +0 -0
  55. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FNUZ_to_FLOAT/test_data_set_0/input_0.pb +0 -0
  56. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FNUZ_to_FLOAT/test_data_set_0/output_0.pb +0 -0
  57. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FNUZ_to_FLOAT16/model.onnx +0 -0
  58. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FNUZ_to_FLOAT16/test_data_set_0/input_0.pb +0 -0
  59. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FNUZ_to_FLOAT16/test_data_set_0/output_0.pb +0 -0
  60. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FN_to_FLOAT/model.onnx +0 -0
  61. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FN_to_FLOAT/test_data_set_0/input_0.pb +0 -0
  62. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FN_to_FLOAT/test_data_set_0/output_0.pb +0 -0
  63. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FN_to_FLOAT16/model.onnx +0 -0
  64. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FN_to_FLOAT16/test_data_set_0/input_0.pb +0 -0
  65. onnx/backend/test/data/node/test_cast_FLOAT8E4M3FN_to_FLOAT16/test_data_set_0/output_0.pb +0 -0
  66. onnx/backend/test/data/node/test_cast_FLOAT8E5M2FNUZ_to_FLOAT/model.onnx +0 -0
  67. onnx/backend/test/data/node/test_cast_FLOAT8E5M2FNUZ_to_FLOAT/test_data_set_0/input_0.pb +0 -0
  68. onnx/backend/test/data/node/test_cast_FLOAT8E5M2FNUZ_to_FLOAT/test_data_set_0/output_0.pb +0 -0
  69. onnx/backend/test/data/node/test_cast_FLOAT8E5M2FNUZ_to_FLOAT16/model.onnx +0 -0
  70. onnx/backend/test/data/node/test_cast_FLOAT8E5M2FNUZ_to_FLOAT16/test_data_set_0/input_0.pb +0 -0
  71. onnx/backend/test/data/node/test_cast_FLOAT8E5M2FNUZ_to_FLOAT16/test_data_set_0/output_0.pb +0 -0
  72. onnx/backend/test/data/node/test_cast_FLOAT8E5M2_to_FLOAT/model.onnx +0 -0
  73. onnx/backend/test/data/node/test_cast_FLOAT8E5M2_to_FLOAT/test_data_set_0/input_0.pb +0 -0
  74. onnx/backend/test/data/node/test_cast_FLOAT8E5M2_to_FLOAT/test_data_set_0/output_0.pb +0 -0
  75. onnx/backend/test/data/node/test_cast_FLOAT8E5M2_to_FLOAT16/model.onnx +0 -0
  76. onnx/backend/test/data/node/test_cast_FLOAT8E5M2_to_FLOAT16/test_data_set_0/input_0.pb +0 -0
  77. onnx/backend/test/data/node/test_cast_FLOAT8E5M2_to_FLOAT16/test_data_set_0/output_0.pb +0 -0
  78. onnx/backend/test/data/node/test_cast_FLOAT_to_BFLOAT16/model.onnx +0 -0
  79. onnx/backend/test/data/node/test_cast_FLOAT_to_DOUBLE/model.onnx +0 -0
  80. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT16/model.onnx +0 -0
  81. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E4M3FN/model.onnx +0 -0
  82. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E4M3FN/test_data_set_0/input_0.pb +0 -0
  83. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E4M3FN/test_data_set_0/output_0.pb +0 -0
  84. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E4M3FNUZ/model.onnx +0 -0
  85. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E4M3FNUZ/test_data_set_0/input_0.pb +0 -0
  86. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E4M3FNUZ/test_data_set_0/output_0.pb +0 -0
  87. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E5M2/model.onnx +0 -0
  88. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E5M2/test_data_set_0/input_0.pb +0 -0
  89. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E5M2/test_data_set_0/output_0.pb +0 -0
  90. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E5M2FNUZ/model.onnx +0 -0
  91. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E5M2FNUZ/test_data_set_0/input_0.pb +0 -0
  92. onnx/backend/test/data/node/test_cast_FLOAT_to_FLOAT8E5M2FNUZ/test_data_set_0/output_0.pb +0 -0
  93. onnx/backend/test/data/node/test_cast_FLOAT_to_INT4/model.onnx +0 -0
  94. onnx/backend/test/data/node/test_cast_FLOAT_to_INT4/test_data_set_0/input_0.pb +0 -0
  95. onnx/backend/test/data/node/test_cast_FLOAT_to_INT4/test_data_set_0/output_0.pb +1 -0
  96. onnx/backend/test/data/node/test_cast_FLOAT_to_STRING/model.onnx +0 -0
  97. onnx/backend/test/data/node/test_cast_FLOAT_to_UINT4/model.onnx +0 -0
  98. onnx/backend/test/data/node/test_cast_FLOAT_to_UINT4/test_data_set_0/input_0.pb +0 -0
  99. onnx/backend/test/data/node/test_cast_FLOAT_to_UINT4/test_data_set_0/output_0.pb +0 -0
  100. onnx/backend/test/data/node/test_cast_INT4_to_FLOAT/model.onnx +0 -0
  101. onnx/backend/test/data/node/test_cast_INT4_to_FLOAT/test_data_set_0/input_0.pb +1 -0
  102. onnx/backend/test/data/node/test_cast_INT4_to_FLOAT/test_data_set_0/output_0.pb +0 -0
  103. onnx/backend/test/data/node/test_cast_INT4_to_FLOAT16/model.onnx +0 -0
  104. onnx/backend/test/data/node/test_cast_INT4_to_FLOAT16/test_data_set_0/input_0.pb +1 -0
  105. onnx/backend/test/data/node/test_cast_INT4_to_FLOAT16/test_data_set_0/output_0.pb +0 -0
  106. onnx/backend/test/data/node/test_cast_INT4_to_INT8/model.onnx +0 -0
  107. onnx/backend/test/data/node/test_cast_INT4_to_INT8/test_data_set_0/input_0.pb +1 -0
  108. onnx/backend/test/data/node/test_cast_INT4_to_INT8/test_data_set_0/output_0.pb +0 -0
  109. onnx/backend/test/data/node/test_cast_STRING_to_FLOAT/model.onnx +0 -0
  110. onnx/backend/test/data/node/test_cast_UINT4_to_FLOAT/model.onnx +0 -0
  111. onnx/backend/test/data/node/test_cast_UINT4_to_FLOAT/test_data_set_0/input_0.pb +0 -0
  112. onnx/backend/test/data/node/test_cast_UINT4_to_FLOAT/test_data_set_0/output_0.pb +0 -0
  113. onnx/backend/test/data/node/test_cast_UINT4_to_FLOAT16/model.onnx +0 -0
  114. onnx/backend/test/data/node/test_cast_UINT4_to_FLOAT16/test_data_set_0/input_0.pb +0 -0
  115. onnx/backend/test/data/node/test_cast_UINT4_to_FLOAT16/test_data_set_0/output_0.pb +0 -0
  116. onnx/backend/test/data/node/test_cast_UINT4_to_UINT8/model.onnx +0 -0
  117. onnx/backend/test/data/node/test_cast_UINT4_to_UINT8/test_data_set_0/input_0.pb +0 -0
  118. onnx/backend/test/data/node/test_cast_UINT4_to_UINT8/test_data_set_0/output_0.pb +0 -0
  119. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E4M3FN/model.onnx +0 -0
  120. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E4M3FN/test_data_set_0/input_0.pb +2 -2
  121. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E4M3FN/test_data_set_0/output_0.pb +0 -0
  122. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E4M3FNUZ/model.onnx +0 -0
  123. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E4M3FNUZ/test_data_set_0/input_0.pb +2 -2
  124. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E4M3FNUZ/test_data_set_0/output_0.pb +0 -0
  125. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E5M2/model.onnx +0 -0
  126. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E5M2/test_data_set_0/input_0.pb +2 -2
  127. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E5M2/test_data_set_0/output_0.pb +0 -0
  128. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E5M2FNUZ/model.onnx +0 -0
  129. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E5M2FNUZ/test_data_set_0/input_0.pb +2 -2
  130. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT16_to_FLOAT8E5M2FNUZ/test_data_set_0/output_0.pb +0 -0
  131. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E4M3FN/model.onnx +0 -0
  132. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E4M3FN/test_data_set_0/input_0.pb +0 -0
  133. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E4M3FN/test_data_set_0/output_0.pb +0 -0
  134. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E4M3FNUZ/model.onnx +0 -0
  135. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E4M3FNUZ/test_data_set_0/input_0.pb +0 -0
  136. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E4M3FNUZ/test_data_set_0/output_0.pb +0 -0
  137. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E5M2/model.onnx +0 -0
  138. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E5M2/test_data_set_0/input_0.pb +0 -0
  139. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E5M2/test_data_set_0/output_0.pb +0 -0
  140. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E5M2FNUZ/model.onnx +0 -0
  141. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E5M2FNUZ/test_data_set_0/input_0.pb +0 -0
  142. onnx/backend/test/data/node/test_cast_no_saturate_FLOAT_to_FLOAT8E5M2FNUZ/test_data_set_0/output_0.pb +0 -0
  143. onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT/model.onnx +0 -0
  144. onnx/backend/test/data/node/test_castlike_BFLOAT16_to_FLOAT_expanded/model.onnx +0 -0
  145. onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT/model.onnx +0 -0
  146. onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16/model.onnx +0 -0
  147. onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT16_expanded/model.onnx +0 -0
  148. onnx/backend/test/data/node/test_castlike_DOUBLE_to_FLOAT_expanded/model.onnx +0 -0
  149. onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE/model.onnx +0 -0
  150. onnx/backend/test/data/node/test_castlike_FLOAT16_to_DOUBLE_expanded/model.onnx +0 -0
  151. onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT/model.onnx +0 -0
  152. onnx/backend/test/data/node/test_castlike_FLOAT16_to_FLOAT_expanded/model.onnx +0 -0
  153. onnx/backend/test/data/node/test_castlike_FLOAT8E4M3FNUZ_to_FLOAT/model.onnx +0 -0
  154. onnx/backend/test/data/node/test_castlike_FLOAT8E4M3FNUZ_to_FLOAT_expanded/model.onnx +0 -0
  155. onnx/backend/test/data/node/test_castlike_FLOAT8E4M3FN_to_FLOAT/model.onnx +0 -0
  156. onnx/backend/test/data/node/test_castlike_FLOAT8E4M3FN_to_FLOAT_expanded/model.onnx +0 -0
  157. onnx/backend/test/data/node/test_castlike_FLOAT8E5M2FNUZ_to_FLOAT/model.onnx +0 -0
  158. onnx/backend/test/data/node/test_castlike_FLOAT8E5M2FNUZ_to_FLOAT_expanded/model.onnx +0 -0
  159. onnx/backend/test/data/node/test_castlike_FLOAT8E5M2_to_FLOAT/model.onnx +0 -0
  160. onnx/backend/test/data/node/test_castlike_FLOAT8E5M2_to_FLOAT_expanded/model.onnx +0 -0
  161. onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16/model.onnx +0 -0
  162. onnx/backend/test/data/node/test_castlike_FLOAT_to_BFLOAT16_expanded/model.onnx +0 -0
  163. onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE/model.onnx +0 -0
  164. onnx/backend/test/data/node/test_castlike_FLOAT_to_DOUBLE_expanded/model.onnx +0 -0
  165. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16/model.onnx +0 -0
  166. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT16_expanded/model.onnx +0 -0
  167. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT8E4M3FN/model.onnx +0 -0
  168. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT8E4M3FNUZ/model.onnx +0 -0
  169. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT8E4M3FNUZ_expanded/model.onnx +0 -0
  170. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT8E4M3FN_expanded/model.onnx +0 -0
  171. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT8E5M2/model.onnx +0 -0
  172. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT8E5M2FNUZ/model.onnx +0 -0
  173. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT8E5M2FNUZ_expanded/model.onnx +0 -0
  174. onnx/backend/test/data/node/test_castlike_FLOAT_to_FLOAT8E5M2_expanded/model.onnx +0 -0
  175. onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING/model.onnx +0 -0
  176. onnx/backend/test/data/node/test_castlike_FLOAT_to_STRING_expanded/model.onnx +0 -0
  177. onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT/model.onnx +0 -0
  178. onnx/backend/test/data/node/test_castlike_STRING_to_FLOAT_expanded/model.onnx +0 -0
  179. onnx/backend/test/data/node/test_constant/model.onnx +0 -0
  180. onnx/backend/test/data/node/test_constant_pad/model.onnx +0 -0
  181. onnx/backend/test/data/node/test_constant_pad_axes/model.onnx +0 -0
  182. onnx/backend/test/data/node/test_constant_pad_negative_axes/model.onnx +0 -0
  183. onnx/backend/test/data/node/test_constantofshape_float_ones/model.onnx +0 -0
  184. onnx/backend/test/data/node/test_constantofshape_int_shape_zero/model.onnx +0 -0
  185. onnx/backend/test/data/node/test_constantofshape_int_zeros/model.onnx +0 -0
  186. onnx/backend/test/data/node/test_dequantizelinear/model.onnx +0 -0
  187. onnx/backend/test/data/node/test_dequantizelinear_axis/model.onnx +0 -0
  188. onnx/backend/test/data/node/test_dequantizelinear_blocked/model.onnx +0 -0
  189. onnx/backend/test/data/node/test_dequantizelinear_blocked/test_data_set_0/input_0.pb +1 -0
  190. onnx/backend/test/data/node/test_dequantizelinear_blocked/test_data_set_0/input_1.pb +0 -0
  191. onnx/backend/test/data/node/test_dequantizelinear_blocked/test_data_set_0/input_2.pb +0 -0
  192. onnx/backend/test/data/node/test_dequantizelinear_blocked/test_data_set_0/output_0.pb +0 -0
  193. onnx/backend/test/data/node/test_dequantizelinear_e4m3fn/model.onnx +0 -0
  194. onnx/backend/test/data/node/test_dequantizelinear_e4m3fn_float16/model.onnx +0 -0
  195. onnx/backend/test/data/node/test_dequantizelinear_e4m3fn_zero_point/model.onnx +0 -0
  196. onnx/backend/test/data/node/test_dequantizelinear_e5m2/model.onnx +0 -0
  197. onnx/backend/test/data/node/test_dequantizelinear_int16/model.onnx +0 -0
  198. onnx/backend/test/data/node/test_dequantizelinear_int16/test_data_set_0/input_0.pb +1 -0
  199. onnx/backend/test/data/node/test_dequantizelinear_int16/test_data_set_0/input_1.pb +0 -0
  200. onnx/backend/test/data/node/test_dequantizelinear_int16/test_data_set_0/input_2.pb +0 -0
  201. onnx/backend/test/data/node/test_dequantizelinear_int16/test_data_set_0/output_0.pb +0 -0
  202. onnx/backend/test/data/node/test_dequantizelinear_int4/model.onnx +0 -0
  203. onnx/backend/test/data/node/test_dequantizelinear_int4/test_data_set_0/input_0.pb +1 -0
  204. onnx/backend/test/data/node/test_dequantizelinear_int4/test_data_set_0/input_1.pb +0 -0
  205. onnx/backend/test/data/node/test_dequantizelinear_int4/test_data_set_0/input_2.pb +1 -0
  206. onnx/backend/test/data/node/test_dequantizelinear_int4/test_data_set_0/output_0.pb +0 -0
  207. onnx/backend/test/data/node/test_dequantizelinear_uint16/model.onnx +0 -0
  208. onnx/backend/test/data/node/test_dequantizelinear_uint16/test_data_set_0/input_0.pb +0 -0
  209. onnx/backend/test/data/node/test_dequantizelinear_uint16/test_data_set_0/input_1.pb +0 -0
  210. onnx/backend/test/data/node/test_dequantizelinear_uint16/test_data_set_0/input_2.pb +1 -0
  211. onnx/backend/test/data/node/test_dequantizelinear_uint16/test_data_set_0/output_0.pb +0 -0
  212. onnx/backend/test/data/node/test_dequantizelinear_uint4/model.onnx +0 -0
  213. onnx/backend/test/data/node/test_dequantizelinear_uint4/test_data_set_0/input_0.pb +1 -0
  214. onnx/backend/test/data/node/test_dequantizelinear_uint4/test_data_set_0/input_1.pb +0 -0
  215. onnx/backend/test/data/node/test_dequantizelinear_uint4/test_data_set_0/input_2.pb +1 -0
  216. onnx/backend/test/data/node/test_dequantizelinear_uint4/test_data_set_0/output_0.pb +0 -0
  217. onnx/backend/test/data/node/test_edge_pad/model.onnx +0 -0
  218. onnx/backend/test/data/node/test_flatten_axis0/model.onnx +0 -0
  219. onnx/backend/test/data/node/test_flatten_axis1/model.onnx +0 -0
  220. onnx/backend/test/data/node/test_flatten_axis2/model.onnx +0 -0
  221. onnx/backend/test/data/node/test_flatten_axis3/model.onnx +0 -0
  222. onnx/backend/test/data/node/test_flatten_default_axis/model.onnx +0 -0
  223. onnx/backend/test/data/node/test_flatten_negative_axis1/model.onnx +0 -0
  224. onnx/backend/test/data/node/test_flatten_negative_axis2/model.onnx +0 -0
  225. onnx/backend/test/data/node/test_flatten_negative_axis3/model.onnx +0 -0
  226. onnx/backend/test/data/node/test_flatten_negative_axis4/model.onnx +0 -0
  227. onnx/backend/test/data/node/test_group_normalization_epsilon/model.onnx +0 -0
  228. onnx/backend/test/data/node/test_group_normalization_epsilon/test_data_set_0/input_0.pb +1 -1
  229. onnx/backend/test/data/node/test_group_normalization_epsilon/test_data_set_0/input_1.pb +1 -1
  230. onnx/backend/test/data/node/test_group_normalization_epsilon/test_data_set_0/input_2.pb +1 -1
  231. onnx/backend/test/data/node/test_group_normalization_epsilon/test_data_set_0/output_0.pb +0 -0
  232. onnx/backend/test/data/node/test_group_normalization_epsilon_expanded/model.onnx +0 -0
  233. onnx/backend/test/data/node/test_group_normalization_epsilon_expanded/test_data_set_0/input_0.pb +1 -1
  234. onnx/backend/test/data/node/test_group_normalization_epsilon_expanded/test_data_set_0/input_1.pb +1 -1
  235. onnx/backend/test/data/node/test_group_normalization_epsilon_expanded/test_data_set_0/input_2.pb +1 -1
  236. onnx/backend/test/data/node/test_group_normalization_epsilon_expanded/test_data_set_0/output_0.pb +0 -0
  237. onnx/backend/test/data/node/test_group_normalization_example/model.onnx +0 -0
  238. onnx/backend/test/data/node/test_group_normalization_example/test_data_set_0/input_1.pb +1 -1
  239. onnx/backend/test/data/node/test_group_normalization_example/test_data_set_0/input_2.pb +1 -1
  240. onnx/backend/test/data/node/test_group_normalization_example/test_data_set_0/output_0.pb +0 -0
  241. onnx/backend/test/data/node/test_group_normalization_example_expanded/model.onnx +0 -0
  242. onnx/backend/test/data/node/test_group_normalization_example_expanded/test_data_set_0/input_1.pb +1 -1
  243. onnx/backend/test/data/node/test_group_normalization_example_expanded/test_data_set_0/input_2.pb +1 -1
  244. onnx/backend/test/data/node/test_group_normalization_example_expanded/test_data_set_0/output_0.pb +0 -0
  245. onnx/backend/test/data/node/test_identity/model.onnx +0 -0
  246. onnx/backend/test/data/node/test_identity_sequence/model.onnx +0 -0
  247. onnx/backend/test/data/node/test_lrn_default/test_data_set_0/output_0.pb +0 -0
  248. onnx/backend/test/data/node/test_maxpool_2d_ceil_output_size_reduce_by_one/model.onnx +0 -0
  249. onnx/backend/test/data/node/test_maxpool_2d_ceil_output_size_reduce_by_one/test_data_set_0/input_0.pb +0 -0
  250. onnx/backend/test/data/node/test_maxpool_2d_ceil_output_size_reduce_by_one/test_data_set_0/output_0.pb +0 -0
  251. onnx/backend/test/data/node/test_mvn/test_data_set_0/output_0.pb +1 -1
  252. onnx/backend/test/data/node/test_mvn_expanded/test_data_set_0/output_0.pb +1 -1
  253. onnx/backend/test/data/node/test_mvn_expanded_ver18/test_data_set_0/output_0.pb +1 -1
  254. onnx/backend/test/data/node/test_pow/test_data_set_0/output_0.pb +0 -0
  255. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/model.onnx +0 -0
  256. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/test_data_set_0/input_0.pb +1 -0
  257. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/test_data_set_0/input_1.pb +2 -0
  258. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/test_data_set_0/input_2.pb +1 -0
  259. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/test_data_set_0/input_3.pb +0 -0
  260. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/test_data_set_0/input_4.pb +2 -0
  261. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/test_data_set_0/input_5.pb +1 -0
  262. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/test_data_set_0/input_6.pb +2 -0
  263. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/test_data_set_0/input_7.pb +1 -0
  264. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float16/test_data_set_0/output_0.pb +1 -0
  265. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float32/model.onnx +0 -0
  266. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float32/test_data_set_0/input_0.pb +1 -0
  267. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float32/test_data_set_0/input_2.pb +1 -0
  268. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float32/test_data_set_0/input_3.pb +0 -0
  269. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float32/test_data_set_0/input_5.pb +1 -0
  270. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float32/test_data_set_0/input_7.pb +1 -0
  271. onnx/backend/test/data/node/test_qlinearmatmul_2D_int8_float32/test_data_set_0/output_0.pb +1 -0
  272. onnx/backend/test/data/node/test_qlinearmatmul_2D_uint8_float16/model.onnx +0 -0
  273. onnx/backend/test/data/node/test_qlinearmatmul_2D_uint8_float16/test_data_set_0/input_1.pb +2 -0
  274. onnx/backend/test/data/node/test_qlinearmatmul_2D_uint8_float16/test_data_set_0/input_4.pb +2 -0
  275. onnx/backend/test/data/node/test_qlinearmatmul_2D_uint8_float16/test_data_set_0/input_6.pb +2 -0
  276. onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_uint8_float32}/model.onnx +0 -0
  277. onnx/backend/test/data/node/test_qlinearmatmul_2D_uint8_float32/test_data_set_0/input_0.pb +0 -0
  278. onnx/backend/test/data/node/test_qlinearmatmul_2D_uint8_float32/test_data_set_0/input_3.pb +0 -0
  279. onnx/backend/test/data/node/test_qlinearmatmul_2D_uint8_float32/test_data_set_0/output_0.pb +1 -0
  280. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/model.onnx +0 -0
  281. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/test_data_set_0/input_0.pb +1 -0
  282. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/test_data_set_0/input_1.pb +2 -0
  283. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/test_data_set_0/input_2.pb +1 -0
  284. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/test_data_set_0/input_3.pb +0 -0
  285. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/test_data_set_0/input_4.pb +2 -0
  286. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/test_data_set_0/input_5.pb +1 -0
  287. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/test_data_set_0/input_6.pb +2 -0
  288. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/test_data_set_0/input_7.pb +1 -0
  289. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float16/test_data_set_0/output_0.pb +1 -0
  290. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/model.onnx +0 -0
  291. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/test_data_set_0/input_0.pb +1 -0
  292. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/test_data_set_0/input_1.pb +1 -0
  293. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/test_data_set_0/input_2.pb +1 -0
  294. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/test_data_set_0/input_3.pb +0 -0
  295. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/test_data_set_0/input_4.pb +1 -0
  296. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/test_data_set_0/input_5.pb +1 -0
  297. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/test_data_set_0/input_6.pb +1 -0
  298. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/test_data_set_0/input_7.pb +1 -0
  299. onnx/backend/test/data/node/test_qlinearmatmul_3D_int8_float32/test_data_set_0/output_0.pb +1 -0
  300. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float16/model.onnx +0 -0
  301. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float16/test_data_set_0/input_1.pb +2 -0
  302. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float16/test_data_set_0/input_2.pb +1 -0
  303. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float16/test_data_set_0/input_4.pb +2 -0
  304. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float16/test_data_set_0/input_5.pb +1 -0
  305. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float16/test_data_set_0/input_6.pb +2 -0
  306. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float16/test_data_set_0/input_7.pb +1 -0
  307. onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_3D_uint8_float32}/model.onnx +0 -0
  308. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float32/test_data_set_0/input_0.pb +0 -0
  309. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float32/test_data_set_0/input_1.pb +1 -0
  310. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float32/test_data_set_0/input_2.pb +1 -0
  311. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float32/test_data_set_0/input_3.pb +0 -0
  312. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float32/test_data_set_0/input_4.pb +1 -0
  313. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float32/test_data_set_0/input_5.pb +1 -0
  314. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float32/test_data_set_0/input_6.pb +1 -0
  315. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float32/test_data_set_0/input_7.pb +1 -0
  316. onnx/backend/test/data/node/test_qlinearmatmul_3D_uint8_float32/test_data_set_0/output_0.pb +1 -0
  317. onnx/backend/test/data/node/test_quantizelinear/model.onnx +0 -0
  318. onnx/backend/test/data/node/test_quantizelinear_axis/model.onnx +0 -0
  319. onnx/backend/test/data/node/test_quantizelinear_blocked_asymmetric/model.onnx +0 -0
  320. onnx/backend/test/data/node/test_quantizelinear_blocked_asymmetric/test_data_set_0/input_0.pb +0 -0
  321. onnx/backend/test/data/node/test_quantizelinear_blocked_asymmetric/test_data_set_0/input_1.pb +0 -0
  322. onnx/backend/test/data/node/test_quantizelinear_blocked_asymmetric/test_data_set_0/input_2.pb +0 -0
  323. onnx/backend/test/data/node/test_quantizelinear_blocked_asymmetric/test_data_set_0/output_0.pb +1 -0
  324. onnx/backend/test/data/node/test_quantizelinear_blocked_symmetric/model.onnx +0 -0
  325. onnx/backend/test/data/node/test_quantizelinear_blocked_symmetric/test_data_set_0/input_0.pb +0 -0
  326. onnx/backend/test/data/node/test_quantizelinear_blocked_symmetric/test_data_set_0/input_1.pb +0 -0
  327. onnx/backend/test/data/node/test_quantizelinear_blocked_symmetric/test_data_set_0/output_0.pb +0 -0
  328. onnx/backend/test/data/node/test_quantizelinear_e4m3fn/model.onnx +0 -0
  329. onnx/backend/test/data/node/test_quantizelinear_e4m3fn/test_data_set_0/input_2.pb +0 -0
  330. onnx/backend/test/data/node/test_quantizelinear_e4m3fn/test_data_set_0/output_0.pb +0 -0
  331. onnx/backend/test/data/node/test_quantizelinear_e5m2/model.onnx +0 -0
  332. onnx/backend/test/data/node/test_quantizelinear_e5m2/test_data_set_0/input_2.pb +0 -0
  333. onnx/backend/test/data/node/test_quantizelinear_e5m2/test_data_set_0/output_0.pb +0 -0
  334. onnx/backend/test/data/node/test_quantizelinear_int16/model.onnx +0 -0
  335. onnx/backend/test/data/node/test_quantizelinear_int16/test_data_set_0/input_0.pb +0 -0
  336. onnx/backend/test/data/node/test_quantizelinear_int16/test_data_set_0/input_1.pb +0 -0
  337. onnx/backend/test/data/node/test_quantizelinear_int16/test_data_set_0/input_2.pb +0 -0
  338. onnx/backend/test/data/node/test_quantizelinear_int16/test_data_set_0/output_0.pb +0 -0
  339. onnx/backend/test/data/node/test_quantizelinear_int4/model.onnx +0 -0
  340. onnx/backend/test/data/node/test_quantizelinear_int4/test_data_set_0/input_0.pb +0 -0
  341. onnx/backend/test/data/node/test_quantizelinear_int4/test_data_set_0/input_1.pb +0 -0
  342. onnx/backend/test/data/node/test_quantizelinear_int4/test_data_set_0/input_2.pb +1 -0
  343. onnx/backend/test/data/node/test_quantizelinear_int4/test_data_set_0/output_0.pb +1 -0
  344. onnx/backend/test/data/node/test_quantizelinear_uint16/model.onnx +0 -0
  345. onnx/backend/test/data/node/test_quantizelinear_uint16/test_data_set_0/input_0.pb +0 -0
  346. onnx/backend/test/data/node/test_quantizelinear_uint16/test_data_set_0/input_1.pb +0 -0
  347. onnx/backend/test/data/node/test_quantizelinear_uint16/test_data_set_0/input_2.pb +1 -0
  348. onnx/backend/test/data/node/test_quantizelinear_uint16/test_data_set_0/output_0.pb +0 -0
  349. onnx/backend/test/data/node/test_quantizelinear_uint4/model.onnx +0 -0
  350. onnx/backend/test/data/node/test_quantizelinear_uint4/test_data_set_0/input_0.pb +0 -0
  351. onnx/backend/test/data/node/test_quantizelinear_uint4/test_data_set_0/input_1.pb +0 -0
  352. onnx/backend/test/data/node/test_quantizelinear_uint4/test_data_set_0/input_2.pb +1 -0
  353. onnx/backend/test/data/node/test_quantizelinear_uint4/test_data_set_0/output_0.pb +0 -0
  354. onnx/backend/test/data/node/test_reflect_pad/model.onnx +0 -0
  355. onnx/backend/test/data/node/test_reshape_allowzero_reordered/model.onnx +0 -0
  356. onnx/backend/test/data/node/test_reshape_extended_dims/model.onnx +0 -0
  357. onnx/backend/test/data/node/test_reshape_negative_dim/model.onnx +0 -0
  358. onnx/backend/test/data/node/test_reshape_negative_extended_dims/model.onnx +0 -0
  359. onnx/backend/test/data/node/test_reshape_one_dim/model.onnx +0 -0
  360. onnx/backend/test/data/node/test_reshape_reduced_dims/model.onnx +0 -0
  361. onnx/backend/test/data/node/test_reshape_reordered_all_dims/model.onnx +0 -0
  362. onnx/backend/test/data/node/test_reshape_reordered_last_dims/model.onnx +0 -0
  363. onnx/backend/test/data/node/test_reshape_zero_and_negative_dim/model.onnx +0 -0
  364. onnx/backend/test/data/node/test_reshape_zero_dim/model.onnx +0 -0
  365. onnx/backend/test/data/node/test_shape/model.onnx +0 -0
  366. onnx/backend/test/data/node/test_shape_clip_end/model.onnx +0 -0
  367. onnx/backend/test/data/node/test_shape_clip_start/model.onnx +0 -0
  368. onnx/backend/test/data/node/test_shape_end_1/model.onnx +0 -0
  369. onnx/backend/test/data/node/test_shape_end_negative_1/model.onnx +0 -0
  370. onnx/backend/test/data/node/test_shape_example/model.onnx +0 -0
  371. onnx/backend/test/data/node/test_shape_start_1/model.onnx +0 -0
  372. onnx/backend/test/data/node/test_shape_start_1_end_2/model.onnx +0 -0
  373. onnx/backend/test/data/node/test_shape_start_1_end_negative_1/model.onnx +0 -0
  374. onnx/backend/test/data/node/test_shape_start_negative_1/model.onnx +0 -0
  375. onnx/backend/test/data/node/test_size/model.onnx +0 -0
  376. onnx/backend/test/data/node/test_size_example/model.onnx +0 -0
  377. onnx/backend/test/data/node/test_squeeze/model.onnx +0 -0
  378. onnx/backend/test/data/node/test_squeeze_negative_axes/model.onnx +0 -0
  379. onnx/backend/test/data/node/test_transpose_all_permutations_0/model.onnx +0 -0
  380. onnx/backend/test/data/node/test_transpose_all_permutations_1/model.onnx +0 -0
  381. onnx/backend/test/data/node/test_transpose_all_permutations_2/model.onnx +0 -0
  382. onnx/backend/test/data/node/test_transpose_all_permutations_3/model.onnx +0 -0
  383. onnx/backend/test/data/node/test_transpose_all_permutations_4/model.onnx +0 -0
  384. onnx/backend/test/data/node/test_transpose_all_permutations_5/model.onnx +0 -0
  385. onnx/backend/test/data/node/test_transpose_default/model.onnx +0 -0
  386. onnx/backend/test/data/node/test_unsqueeze_axis_0/model.onnx +0 -0
  387. onnx/backend/test/data/node/test_unsqueeze_axis_1/model.onnx +0 -0
  388. onnx/backend/test/data/node/test_unsqueeze_axis_2/model.onnx +0 -0
  389. onnx/backend/test/data/node/test_unsqueeze_negative_axes/model.onnx +0 -0
  390. onnx/backend/test/data/node/test_unsqueeze_three_axes/model.onnx +0 -0
  391. onnx/backend/test/data/node/test_unsqueeze_two_axes/model.onnx +0 -0
  392. onnx/backend/test/data/node/test_unsqueeze_unsorted_axes/model.onnx +0 -0
  393. onnx/backend/test/data/node/test_wrap_pad/model.onnx +0 -0
  394. onnx/backend/test/loader/__init__.py +0 -1
  395. onnx/backend/test/runner/__init__.py +43 -15
  396. onnx/checker.cc +104 -99
  397. onnx/checker.h +23 -3
  398. onnx/checker.py +56 -20
  399. onnx/common/assertions.cc +10 -5
  400. onnx/common/common.h +19 -0
  401. onnx/common/file_utils.h +3 -1
  402. onnx/common/interned_strings.h +7 -1
  403. onnx/common/ir.h +30 -7
  404. onnx/common/ir_pb_converter.cc +6 -0
  405. onnx/common/path.h +18 -2
  406. onnx/common/proto_util.h +43 -0
  407. onnx/common/version.h +1 -1
  408. onnx/cpp2py_export.cc +88 -56
  409. onnx/defs/__init__.py +29 -8
  410. onnx/defs/controlflow/defs.cc +16 -16
  411. onnx/defs/controlflow/old.cc +177 -0
  412. onnx/defs/data_propagators.h +2 -0
  413. onnx/defs/data_type_utils.cc +2 -0
  414. onnx/defs/generator/defs.cc +6 -4
  415. onnx/defs/generator/old.cc +115 -0
  416. onnx/defs/math/defs.cc +37 -142
  417. onnx/defs/math/old.cc +96 -12
  418. onnx/defs/math/utils.cc +127 -0
  419. onnx/defs/math/utils.h +8 -0
  420. onnx/defs/nn/defs.cc +72 -59
  421. onnx/defs/nn/old.cc +181 -2
  422. onnx/defs/object_detection/defs.cc +2 -2
  423. onnx/defs/object_detection/old.cc +2 -2
  424. onnx/defs/operator_sets.h +51 -0
  425. onnx/defs/operator_sets_ml.h +14 -0
  426. onnx/defs/parser.cc +112 -54
  427. onnx/defs/parser.h +14 -2
  428. onnx/defs/printer.cc +14 -7
  429. onnx/defs/quantization/defs.cc +111 -44
  430. onnx/defs/quantization/old.cc +130 -1
  431. onnx/defs/schema.cc +62 -18
  432. onnx/defs/schema.h +194 -48
  433. onnx/defs/shape_inference.cc +28 -19
  434. onnx/defs/shape_inference.h +2 -0
  435. onnx/defs/tensor/defs.cc +54 -96
  436. onnx/defs/tensor/old.cc +939 -34
  437. onnx/defs/tensor/utils.cc +6 -3
  438. onnx/defs/tensor/utils.h +5 -1
  439. onnx/defs/tensor_proto_util.cc +2 -0
  440. onnx/defs/tensor_util.cc +2 -0
  441. onnx/defs/traditionalml/defs.cc +273 -117
  442. onnx/defs/traditionalml/old.cc +329 -14
  443. onnx/defs/traditionalml/utils.h +27 -0
  444. onnx/external_data_helper.py +12 -26
  445. onnx/helper.py +242 -169
  446. onnx/hub.py +104 -70
  447. onnx/inliner/inliner.cc +89 -31
  448. onnx/inliner/inliner.h +5 -0
  449. onnx/inliner.py +2 -0
  450. onnx/mapping.py +9 -0
  451. onnx/model_container.py +346 -0
  452. onnx/numpy_helper.py +100 -38
  453. onnx/onnx-ml.proto +50 -13
  454. onnx/onnx.in.proto +50 -13
  455. onnx/onnx.proto +50 -13
  456. onnx/onnx_cpp2py_export/__init__.pyi +5 -0
  457. onnx/onnx_cpp2py_export/checker.pyi +21 -0
  458. onnx/onnx_cpp2py_export/defs.pyi +202 -0
  459. onnx/onnx_cpp2py_export/inliner.pyi +19 -0
  460. onnx/onnx_cpp2py_export/parser.pyi +32 -0
  461. onnx/onnx_cpp2py_export/printer.pyi +3 -0
  462. onnx/onnx_cpp2py_export/shape_inference.pyi +16 -0
  463. onnx/onnx_cpp2py_export/version_converter.pyi +4 -0
  464. onnx/onnx_cpp2py_export.cp311-win_amd64.pyd +0 -0
  465. onnx/onnx_data_pb2.pyi +146 -0
  466. onnx/onnx_ml_pb2.py +52 -52
  467. onnx/onnx_ml_pb2.pyi +663 -0
  468. onnx/onnx_operators_ml_pb2.pyi +67 -0
  469. onnx/reference/__init__.py +2 -0
  470. onnx/reference/custom_element_types.py +2 -0
  471. onnx/reference/op_run.py +166 -121
  472. onnx/reference/ops/_op.py +27 -50
  473. onnx/reference/ops/_op_list.py +36 -24
  474. onnx/reference/ops/aionnx_preview_training/_op_list.py +15 -8
  475. onnx/reference/ops/aionnxml/_common_classifier.py +3 -5
  476. onnx/reference/ops/aionnxml/_op_list.py +16 -8
  477. onnx/reference/ops/aionnxml/op_array_feature_extractor.py +4 -6
  478. onnx/reference/ops/aionnxml/op_linear_classifier.py +1 -2
  479. onnx/reference/ops/aionnxml/op_normalizer.py +3 -3
  480. onnx/reference/ops/aionnxml/op_svm_helper.py +1 -3
  481. onnx/reference/ops/aionnxml/op_svm_regressor.py +1 -3
  482. onnx/reference/ops/aionnxml/op_tree_ensemble.py +257 -0
  483. onnx/reference/ops/aionnxml/op_tree_ensemble_helper.py +2 -6
  484. onnx/reference/ops/aionnxml/op_tree_ensemble_regressor.py +4 -4
  485. onnx/reference/ops/experimental/_op_list.py +15 -8
  486. onnx/reference/ops/op_blackman_window.py +5 -6
  487. onnx/reference/ops/op_cast.py +22 -0
  488. onnx/reference/ops/op_cast_like.py +6 -0
  489. onnx/reference/ops/op_clip.py +5 -8
  490. onnx/reference/ops/op_col2im.py +1 -3
  491. onnx/reference/ops/op_constant.py +7 -1
  492. onnx/reference/ops/op_dequantize_linear.py +43 -40
  493. onnx/reference/ops/op_det.py +1 -1
  494. onnx/reference/ops/op_dynamic_quantize_linear.py +2 -2
  495. onnx/reference/ops/op_grid_sample.py +2 -4
  496. onnx/reference/ops/op_hamming_window.py +3 -6
  497. onnx/reference/ops/op_hann_window.py +3 -6
  498. onnx/reference/ops/op_if.py +4 -3
  499. onnx/reference/ops/op_loop.py +7 -9
  500. onnx/reference/ops/op_matmul.py +1 -2
  501. onnx/reference/ops/op_max_pool.py +5 -0
  502. onnx/reference/ops/op_optional.py +1 -1
  503. onnx/reference/ops/op_pool_common.py +3 -6
  504. onnx/reference/ops/op_qlinear_matmul.py +2 -2
  505. onnx/reference/ops/op_quantize_linear.py +166 -71
  506. onnx/reference/ops/op_resize.py +25 -21
  507. onnx/reference/ops/op_rnn.py +20 -12
  508. onnx/reference/ops/op_scan.py +23 -15
  509. onnx/reference/ops/op_scatter_elements.py +7 -6
  510. onnx/reference/ops/op_stft.py +3 -5
  511. onnx/reference/ops/op_string_normalizer.py +7 -7
  512. onnx/reference/ops/op_tfidf_vectorizer.py +7 -8
  513. onnx/reference/ops/op_topk.py +9 -11
  514. onnx/reference/ops/op_unique.py +1 -1
  515. onnx/reference/reference_evaluator.py +119 -63
  516. onnx/shape_inference/implementation.cc +160 -127
  517. onnx/shape_inference.py +11 -10
  518. onnx/subbyte.py +72 -0
  519. onnx/test/__init__.pyi +6 -0
  520. onnx/test/checker_test.py +21 -1
  521. onnx/test/compose_test.py +26 -74
  522. onnx/test/cpp/inliner_test.cc +76 -1
  523. onnx/test/cpp/ir_test.cc +60 -0
  524. onnx/test/cpp/parser_test.cc +106 -0
  525. onnx/test/function_test.py +1 -3
  526. onnx/test/helper_test.py +64 -4
  527. onnx/test/model_container_refeval_test.py +139 -0
  528. onnx/test/model_container_test.py +136 -0
  529. onnx/test/model_inference_test.py +44 -0
  530. onnx/test/reference_evaluator_ml_test.py +448 -47
  531. onnx/test/reference_evaluator_model_test.py +130 -0
  532. onnx/test/reference_evaluator_test.py +901 -14
  533. onnx/test/schema_test.py +166 -1
  534. onnx/test/shape_inference_test.py +285 -6
  535. onnx/test/symbolic_shape_test.py +3 -8
  536. onnx/test/test_backend_onnxruntime.py +238 -224
  537. onnx/test/test_backend_reference.py +11 -0
  538. onnx/test/test_external_data.py +51 -2
  539. onnx/test/version_converter/automatic_conversion_test_base.py +2 -1
  540. onnx/test/version_converter/automatic_upgrade_test.py +12 -10
  541. onnx/test/version_converter_test.py +166 -0
  542. onnx/tools/replace_constants.py +23 -26
  543. onnx/tools/update_model_dims.py +1 -2
  544. onnx/version.py +2 -2
  545. onnx/version_converter/adapters/group_normalization_20_21.h +128 -0
  546. onnx/version_converter/adapters/q_dq_21_20.h +77 -0
  547. onnx/version_converter/convert.h +67 -2
  548. onnx/version_converter.py +6 -142
  549. {onnx-1.15.0.dist-info → onnx-1.16.1.dist-info}/METADATA +18 -15
  550. {onnx-1.15.0.dist-info → onnx-1.16.1.dist-info}/RECORD +572 -406
  551. {onnx-1.15.0.dist-info → onnx-1.16.1.dist-info}/WHEEL +1 -1
  552. onnx/examples/Protobufs.ipynb +0 -639
  553. onnx/examples/check_model.ipynb +0 -128
  554. onnx/examples/load_model.ipynb +0 -116
  555. onnx/examples/make_model.ipynb +0 -176
  556. onnx/examples/np_array_tensorproto.ipynb +0 -136
  557. onnx/examples/resources/single_relu.onnx +0 -12
  558. onnx/examples/resources/single_relu_new.onnx +0 -12
  559. onnx/examples/resources/tensor.pb +0 -0
  560. onnx/examples/resources/two_transposes.onnx +0 -0
  561. onnx/examples/save_model.ipynb +0 -56
  562. onnx/examples/shape_inference.ipynb +0 -111
  563. onnx/test/reference_evaluator_backend_test.py +0 -876
  564. /onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_int8_float32}/test_data_set_0/input_1.pb +0 -0
  565. /onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_int8_float32}/test_data_set_0/input_4.pb +0 -0
  566. /onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_int8_float32}/test_data_set_0/input_6.pb +0 -0
  567. /onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_uint8_float16}/test_data_set_0/input_0.pb +0 -0
  568. /onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_uint8_float16}/test_data_set_0/input_2.pb +0 -0
  569. /onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_uint8_float16}/test_data_set_0/input_3.pb +0 -0
  570. /onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_uint8_float16}/test_data_set_0/input_5.pb +0 -0
  571. /onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_uint8_float16}/test_data_set_0/input_7.pb +0 -0
  572. /onnx/backend/test/data/node/{test_qlinearmatmul_2D → test_qlinearmatmul_2D_uint8_float16}/test_data_set_0/output_0.pb +0 -0
  573. /onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_2D_uint8_float32}/test_data_set_0/input_1.pb +0 -0
  574. /onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_2D_uint8_float32}/test_data_set_0/input_2.pb +0 -0
  575. /onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_2D_uint8_float32}/test_data_set_0/input_4.pb +0 -0
  576. /onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_2D_uint8_float32}/test_data_set_0/input_5.pb +0 -0
  577. /onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_2D_uint8_float32}/test_data_set_0/input_6.pb +0 -0
  578. /onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_2D_uint8_float32}/test_data_set_0/input_7.pb +0 -0
  579. /onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_3D_uint8_float16}/test_data_set_0/input_0.pb +0 -0
  580. /onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_3D_uint8_float16}/test_data_set_0/input_3.pb +0 -0
  581. /onnx/backend/test/data/node/{test_qlinearmatmul_3D → test_qlinearmatmul_3D_uint8_float16}/test_data_set_0/output_0.pb +0 -0
  582. {onnx-1.15.0.dist-info → onnx-1.16.1.dist-info}/LICENSE +0 -0
  583. {onnx-1.15.0.dist-info → onnx-1.16.1.dist-info}/entry_points.txt +0 -0
  584. {onnx-1.15.0.dist-info → onnx-1.16.1.dist-info}/top_level.txt +0 -0
@@ -1,876 +0,0 @@
1
- # Copyright (c) ONNX Project Contributors
2
-
3
- # SPDX-License-Identifier: Apache-2.0
4
- # type: ignore
5
-
6
- """
7
- These test evaluates the python runtime (class ReferenceEvaluator) against
8
- all the backend tests (in onnx/backend/test/case/node) and checks
9
- the runtime produces the expected outputs.
10
-
11
- You may run one specific test with following command line:
12
-
13
- ::
14
-
15
- python onnx/test/reference_evaluator_backend_test.py TestOnnxBackEndWithReferenceEvaluator.test_group_normalization_example
16
-
17
- You may bypass a test newly added by adding to the global variable `SKIP_TESTS`.
18
- You may refine the absolute or relative tolerance for a test by
19
- adding an item in method `setUpClass` and attributes
20
- `atol` or `rtol`.
21
- """
22
-
23
- import os
24
- import pprint
25
- import sys
26
- import unittest
27
- from os import getenv
28
-
29
- import numpy as np
30
- import version_utils
31
- from numpy import object_ as dtype_object
32
- from numpy.testing import assert_allclose # type: ignore
33
-
34
- from onnx import ONNX_ML, OptionalProto, SequenceProto, TensorProto, load
35
- from onnx.backend.test import __file__ as backend_folder
36
- from onnx.helper import __file__ as onnx_file
37
- from onnx.numpy_helper import bfloat16_to_float32, to_list, to_optional
38
- from onnx.reference import ReferenceEvaluator
39
- from onnx.reference.op_run import to_array_extended
40
- from onnx.reference.ops.op_cast import cast_to
41
-
42
- # TODO (https://github.com/microsoft/onnxruntime/issues/14932): Get max supported version from onnxruntime directly
43
- # For now, bump the version in CIs whenever there is a new onnxruntime release
44
- ORT_MAX_IR_SUPPORTED_VERSION = int(getenv("ORT_MAX_IR_SUPPORTED_VERSION", "8"))
45
- ORT_MAX_ONNX_OPSET_SUPPORTED_VERSION = int(
46
- getenv("ORT_MAX_ONNX_OPSET_SUPPORTED_VERSION", "18")
47
- )
48
-
49
- # Number of tests expected to pass without raising an exception.
50
- MIN_PASSING_TESTS = 1235
51
-
52
- # Update this list if one new operator does not have any implementation.
53
- SKIP_TESTS = {
54
- # mismatches
55
- # shapes (10, 9, 3), (10, 8, 3) shape mismatch unexpected as the operator is inlined
56
- "test_center_crop_pad_crop_axes_hwc_expanded",
57
- # deprecated
58
- "test_scan_sum", # deprecated, opset 8 -> not implemented
59
- "test_scatter_with_axis", # deprecated, scatter is removed
60
- "test_scatter_without_axis", # deprecated, scatter is removed
61
- # not implemented
62
- "test__simple_gradient_of_add", # gradient not implemented
63
- "test__simple_gradient_of_add_and_mul", # gradient not implemented
64
- }
65
-
66
- if version_utils.numpy_older_than("1.21.5"):
67
- SKIP_TESTS |= {
68
- "test_cast_FLOAT_to_BFLOAT16",
69
- "test_castlike_FLOAT_to_BFLOAT16",
70
- "test_castlike_FLOAT_to_BFLOAT16_expanded",
71
- }
72
- if sys.platform == "win32":
73
- SKIP_TESTS |= {
74
- "test_regex_full_match_basic",
75
- "test_regex_full_match_email_domain",
76
- "test_regex_full_match_empty",
77
- "test_image_decoder_decode_jpeg_rgb",
78
- "test_image_decoder_decode_jpeg_grayscale",
79
- "test_image_decoder_decode_jpeg_bgr",
80
- "test_image_decoder_decode_jpeg2k_rgb",
81
- "test_image_decoder_decode_bmp_rgb",
82
- "test_image_decoder_decode_png_rgb",
83
- "test_image_decoder_decode_tiff_rgb",
84
- "test_image_decoder_decode_webp_rgb",
85
- "test_image_decoder_decode_pnm_rgb",
86
- }
87
-
88
- if version_utils.numpy_older_than("1.21.5"):
89
- # op_dft requires numpy >= 1.21.5
90
- # op_stft depends on op_dft
91
- SKIP_TESTS |= {
92
- "test_stft",
93
- "test_stft_with_window",
94
- "test_stft_cpu",
95
- "test_dft",
96
- "test_dft_axis",
97
- "test_dft_inverse",
98
- "test_dft_opset19",
99
- "test_dft_axis_opset19",
100
- "test_dft_inverse_opset19",
101
- }
102
-
103
-
104
- def assert_allclose_string(expected, value):
105
- """
106
- Compares two arrays knowing they contain strings.
107
- Raises an exception if the test fails.
108
-
109
- :param expected: expected array
110
- :param value: value
111
- """
112
-
113
- def is_float(x):
114
- try:
115
- float(x)
116
- return True
117
- except ValueError:
118
- return False
119
-
120
- if all(map(is_float, expected.ravel())):
121
- expected_float = expected.astype(np.float32)
122
- value_float = value.astype(np.float32)
123
- assert_allclose(expected_float, value_float)
124
- else: # noqa: PLR5501
125
- if expected.tolist() != value.tolist():
126
- raise AssertionError(f"Mismatches {expected} != {value}.")
127
-
128
-
129
- class OnnxBackendTest:
130
- """
131
- Definition of a backend test. It starts with a folder,
132
- in this folder, one onnx file must be there, then a subfolder
133
- for each test to run with this model.
134
-
135
- :param folder: test folder
136
- :param onnx_path: onnx file
137
- :param onnx_model: loaded onnx file
138
- :param tests: list of test
139
- """
140
-
141
- @staticmethod
142
- def _sort(filenames):
143
- temp = []
144
- for f in filenames:
145
- name = os.path.splitext(f)[0]
146
- i = name.split("_")[-1]
147
- temp.append((int(i), f))
148
- temp.sort()
149
- return [_[1] for _ in temp]
150
-
151
- @staticmethod
152
- def _read_proto_from_file(full):
153
- if not os.path.exists(full):
154
- raise FileNotFoundError(f"File not found: {full!r}.")
155
- with open(full, "rb") as f:
156
- serialized = f.read()
157
- return OnnxBackendTest._read_proto_from_serialized(serialized, full)
158
-
159
- @staticmethod
160
- def _read_proto_from_serialized(serialized, full):
161
- if not os.path.exists(full):
162
- raise FileNotFoundError(f"File not found: {full!r}.")
163
- with open(full, "rb") as f:
164
- serialized = f.read()
165
- proto_types = [
166
- (TensorProto, to_array_extended),
167
- (SequenceProto, to_list),
168
- (OptionalProto, to_optional),
169
- ]
170
- exc = None
171
- for pt, cvt in proto_types:
172
- obj = pt()
173
- try:
174
- obj.ParseFromString(serialized)
175
- try:
176
- return cvt(obj)
177
- except ValueError as e:
178
- exc = e
179
- continue
180
- except Exception as e:
181
- exc = e
182
- raise RuntimeError(
183
- f"Unable to read {full!r}, error is {exc}, "
184
- f"content is {serialized[:100]!r}."
185
- ) from exc
186
-
187
- @staticmethod
188
- def _load(folder, names):
189
- res = []
190
- for name in names:
191
- full = os.path.join(folder, name)
192
- obj = OnnxBackendTest._read_proto_from_file(full)
193
- res.append(obj)
194
- return res
195
-
196
- def __repr__(self):
197
- "usual"
198
- return f"{self.__class__.__name__}({self.folder!r})"
199
-
200
- def __init__(self, folder):
201
- if not os.path.exists(folder):
202
- raise FileNotFoundError(f"Unable to find folder {folder!r}.")
203
- content = os.listdir(folder)
204
- onx = [c for c in content if os.path.splitext(c)[-1] in {".onnx"}]
205
- if len(onx) != 1:
206
- raise ValueError(
207
- f"There is more than one onnx file in {folder!r} ({onx!r})."
208
- )
209
- self.folder = folder
210
- self.onnx_path = os.path.join(folder, onx[0])
211
- self.onnx_model = load(self.onnx_path)
212
-
213
- self.tests = []
214
- for sub in content:
215
- full = os.path.join(folder, sub)
216
- if os.path.isdir(full):
217
- pb = [c for c in os.listdir(full) if os.path.splitext(c)[-1] in {".pb"}]
218
- inputs = OnnxBackendTest._sort(c for c in pb if c.startswith("input_"))
219
- outputs = OnnxBackendTest._sort(
220
- c for c in pb if c.startswith("output_")
221
- )
222
- self.tests.append(
223
- {
224
- "inputs": OnnxBackendTest._load(full, inputs),
225
- "outputs": OnnxBackendTest._load(full, outputs),
226
- }
227
- )
228
-
229
- @property
230
- def name(self):
231
- "Returns the test name."
232
- return os.path.split(self.folder)[-1]
233
-
234
- @property
235
- def fname(self):
236
- folder = self.folder.replace("\\", "/").split("/")[-2]
237
- if folder.endswith("node"):
238
- fname = self.name
239
- else:
240
- fname = f"test__{folder.replace('-', '_')}_{self.name[5:]}"
241
- if "/" in fname or fname == "test__test_AvgPool1d_AvgPool1d":
242
- raise AssertionError(
243
- f"name={self.name!r}, folder={folder!r}, self.folder={self.folder}."
244
- )
245
- return fname
246
-
247
- def __len__(self):
248
- "Returns the number of tests."
249
- return len(self.tests)
250
-
251
- def _compare_results(
252
- self, index, i_output, desired, output, rtol=0, atol=0, comment="", inputs=None
253
- ):
254
- """
255
- Compares the expected output and the output produced
256
- by the runtime. Raises an exception if not equal.
257
-
258
- :param index: test index
259
- :param i_output: output index
260
- :param desired: expected output
261
- :param output: output
262
- :param rtol: relative tolerance
263
- :param atol: absolute tolerance
264
- :param comment: addition text to give more insights to the user
265
- :param inputs: inputs to the model
266
- """
267
- if comment == "":
268
- raise RuntimeError("Argument comment should be filled.")
269
- if atol is None:
270
- atol = 0
271
- if rtol is None:
272
- rtol = 0
273
- if isinstance(desired, np.ndarray):
274
- if isinstance(output, np.ndarray):
275
- if rtol == 0:
276
- if desired.dtype == np.float32:
277
- rtl = 1e-5
278
- elif desired.dtype == np.float64:
279
- rtl = 1e-12
280
- else:
281
- rtl = rtol
282
- else:
283
- rtl = rtol
284
- if desired.dtype == dtype_object:
285
- try:
286
- assert_allclose_string(desired, output)
287
- except AssertionError as ex:
288
- raise AssertionError(
289
- f"Output {i_output} of test {index} in folder {self.folder!r} failed, comment={comment}."
290
- ) from ex
291
- else:
292
- equal_nan = desired.dtype in (np.float16, np.float32, np.float64)
293
- if equal_nan:
294
- try:
295
- assert_allclose(
296
- desired,
297
- output,
298
- atol=atol,
299
- rtol=rtl,
300
- equal_nan=equal_nan,
301
- )
302
- except AssertionError as ex:
303
- try:
304
- diff = output - desired
305
- except ValueError:
306
- diff = None
307
- raise AssertionError(
308
- f"Output {i_output} of test {index} in folder {self.folder!r} failed "
309
- f"(rtol={rtl}, atol={atol}), comment={comment}\n---\n{desired}\n----"
310
- f"\n{output}\n-----\n{diff}\n------INPUTS----\n{pprint.pformat(inputs)}."
311
- ) from ex
312
- else:
313
- # float 8 types
314
- if desired.dtype != output.dtype:
315
- raise AssertionError(
316
- f"Output {i_output} of test {index} in folder {self.folder!r} "
317
- f"has unexpected type {output.dtype} (expecting {desired.dtype}.)"
318
- )
319
- if desired.tolist() != output.tolist():
320
- raise AssertionError(
321
- f"Output {i_output} of test {index} in folder {self.folder!r} "
322
- f"has unexpected values {output} (expecting {desired}.)"
323
- )
324
-
325
- if desired.shape != output.shape:
326
- raise AssertionError(
327
- f"Output {i_output} of test {index} in folder {self.folder!r} failed "
328
- f"(expected shape={desired.shape} but shape={output.shape}), "
329
- f"comment={comment}\n---\n{desired}\n----"
330
- f"\n{output}\n------INPUTS----\n{pprint.pformat(inputs)}."
331
- )
332
- elif hasattr(output, "is_compatible"):
333
- # A shape
334
- if desired.dtype != output.dtype:
335
- raise AssertionError(
336
- f"Output {i_output} of test {index} in folder {self.folder!r} failed "
337
- f"(desired.dtype={desired.dtype!r}, output={output!r}), comment={comment}."
338
- )
339
- if not output.is_compatible(desired.shape):
340
- raise AssertionError(
341
- f"Output {i_output} of test {index} in folder {self.folder!r} failed "
342
- f"(desired.shape={desired.shape}, output={output!r}), comment={comment}."
343
- )
344
- elif isinstance(desired, list):
345
- if not isinstance(output, list):
346
- raise AssertionError(
347
- f"Expected result is 'list' but output type is {type(output)} for output {i_output}"
348
- f", comment={comment}\n--EXPECTED--\n{desired}\n--GOT--\n{output}."
349
- )
350
- if len(desired) != len(output):
351
- raise AssertionError(
352
- f"Expected has {len(desired)} but output has {len(output)} for output {i_output}"
353
- f", comment={comment}\n--EXPECTED--\n{desired}\n--GOT--\n{output}."
354
- )
355
- for a, b in zip(desired, output):
356
- self._compare_results(
357
- index, i_output, a, b, rtol=rtol, atol=atol, comment=comment
358
- )
359
- else:
360
- raise NotImplementedError(
361
- f"Comparison not implemented for type {type(desired)} and output {i_output}, comment={comment}."
362
- )
363
-
364
- def is_random(self):
365
- "Tells if a test is random or not."
366
- if "bernoulli" in self.folder:
367
- return True
368
- return False
369
-
370
- def run(
371
- self,
372
- load_fct,
373
- run_fct,
374
- index=None,
375
- rtol=1e-07,
376
- atol=0,
377
- comment="",
378
- print_io=False,
379
- ):
380
- """
381
- Executes a tests or all tests if index is None.
382
- The function crashes if the tests fails.
383
-
384
- :param load_fct: loading function, takes a loaded onnx graph,
385
- and returns an object
386
- :param run_fct: running function, takes the result of previous
387
- function, the inputs, and returns the outputs
388
- :param index: index of the test to run or all.
389
- :param rtol: relative tolerance
390
- :param atol: absolute tolerance
391
- :param comment: additional information for the user
392
- :param print_io: prints out the input and output
393
- """
394
- if index is None:
395
- res = []
396
- for i in range(len(self)):
397
- res.append(
398
- self.run(
399
- load_fct,
400
- run_fct,
401
- index=i,
402
- atol=atol,
403
- rtol=rtol,
404
- comment=comment,
405
- print_io=print_io,
406
- )
407
- )
408
- return res
409
-
410
- if print_io:
411
- print("------ INPUTS")
412
- for k, v in enumerate(self.tests[index]["inputs"]):
413
- print(f"input {k!r}, shape={v.shape}, dtype={v.dtype}")
414
- print("------ EXPECTED OUTPUTS")
415
- for k, v in enumerate(self.tests[index]["outputs"]):
416
- print(f"output {k!r}, shape={v.shape}, dtype={v.dtype}")
417
-
418
- obj = load_fct(self.onnx_model)
419
-
420
- got = run_fct(obj, *self.tests[index]["inputs"])
421
- expected = self.tests[index]["outputs"]
422
- if len(got) != len(expected):
423
- raise AssertionError(
424
- f"Unexpected number of output (test {index}, folder {self.folder!r}), "
425
- f"got {len(got)}, expected {len(expected)}."
426
- )
427
- res = {
428
- "inputs": self.tests[index]["inputs"],
429
- "expected": self.tests[index]["outputs"],
430
- "results": got,
431
- }
432
- for i, (e, o) in enumerate(zip(expected, got)):
433
- if self.is_random():
434
- if e.dtype != o.dtype:
435
- raise AssertionError(
436
- f"Output {i} of test {index} in folder {self.folder!r} failed "
437
- f"(type mismatch {e.dtype} != {o.dtype!r})."
438
- )
439
- if e.shape != o.shape:
440
- raise AssertionError(
441
- f"Output {i} of test {index} in folder {self.folder!r} failed "
442
- f"(shape mismatch {e.shape} != {o.shape})."
443
- )
444
- else:
445
- self._compare_results(
446
- index,
447
- i,
448
- e,
449
- o,
450
- atol=atol,
451
- rtol=rtol,
452
- comment=comment + "\n" + str(self.onnx_model),
453
- inputs=self.tests[index]["inputs"],
454
- )
455
- return res
456
-
457
-
458
- def enumerate_onnx_tests(series, fct_filter=None):
459
- """
460
- Collects test from a sub folder of `onnx/backend/test`.
461
- Works as an enumerator to start processing them
462
- without waiting or storing too much of them.
463
-
464
- :param series: which subfolder to load, possible values:
465
- (`'node'`, ...)
466
- :param fct_filter: function `lambda testname: boolean`
467
- to load or skip the test, None for all
468
- :return: list of @see cl OnnxBackendTest
469
- """
470
- root = os.path.dirname(backend_folder)
471
- sub = os.path.join(root, "data", series)
472
- if not os.path.exists(sub):
473
- content = "\n".join(os.listdir(root))
474
- raise FileNotFoundError(
475
- f"Unable to find series of tests in {root!r}, subfolders:\n{content}"
476
- )
477
- tests = os.listdir(sub)
478
- for t in tests:
479
- if fct_filter is not None and not fct_filter(t):
480
- continue
481
- folder = os.path.join(sub, t)
482
- if not ONNX_ML and "ai_onnx_ml" in folder:
483
- continue
484
- content = os.listdir(folder)
485
- onx = [c for c in content if os.path.splitext(c)[-1] in {".onnx"}]
486
- if len(onx) == 1:
487
- yield OnnxBackendTest(folder)
488
-
489
-
490
- class TestOnnxBackEndWithReferenceEvaluator(unittest.TestCase):
491
- folder = os.path.join(
492
- os.path.abspath(os.path.dirname(__file__)), "onnx_backend_test_code"
493
- )
494
-
495
- @classmethod
496
- def add_test_methods(cls):
497
- for folder in ["node", "pytorch-converted", "pytorch-operator", "simple"]:
498
- for te in enumerate_onnx_tests(folder):
499
-
500
- def _test_(
501
- self, te=te, check_other_runtime=None, verbose=0, print_io=False
502
- ):
503
- if te.fname in getattr(cls, "skip_test", set()):
504
- cls.skipped.append((te, None))
505
- return
506
- rtol = getattr(cls, "rtol", {})
507
- atol = getattr(cls, "atol", {})
508
- if len(rtol) == 0 or len(atol) == 0:
509
- raise AssertionError("rtol or atol is empty.")
510
- self.common_test_onnx_test_run(
511
- te,
512
- getattr(cls, "successes", []),
513
- getattr(cls, "missed", []),
514
- getattr(cls, "skipped", []),
515
- getattr(cls, "load_failed", []),
516
- getattr(cls, "exec_failed", []),
517
- getattr(cls, "mismatch", []),
518
- verbose=verbose,
519
- rtol=rtol,
520
- atol=atol,
521
- check_other_runtime=check_other_runtime,
522
- print_io=print_io,
523
- )
524
-
525
- setattr(TestOnnxBackEndWithReferenceEvaluator, te.fname, _test_)
526
-
527
- def test_onnx_backend_test_abs(self):
528
- name = "test_abs"
529
- code = []
530
- for te in enumerate_onnx_tests("node", lambda folder: folder == name):
531
- code.append(te)
532
- self.assertEqual(len(code), 1)
533
-
534
- def test_onnx_backend_test_expand_shape_model1(self):
535
- name = "test_expand_shape_model1"
536
- code = []
537
- for te in enumerate_onnx_tests("simple", lambda folder: folder == name):
538
- code.append(te)
539
- self.assertEqual(len(code), 1)
540
-
541
- @staticmethod
542
- def load_fct(obj, verbose=0):
543
- return ReferenceEvaluator(obj, verbose=verbose)
544
-
545
- @staticmethod
546
- def run_fct(obj, *inputs, verbose=0):
547
- if hasattr(obj, "input_names"):
548
- input_names = obj.input_names
549
- elif hasattr(obj, "get_inputs"):
550
- input_names = [_.name for _ in obj.get_inputs()]
551
- else:
552
- raise AttributeError(
553
- f"Unable to extract the number to guess the number of inputs for type {type(obj)}."
554
- )
555
- if len(input_names) < len(inputs):
556
- raise AssertionError(
557
- f"Got {len(inputs)} inputs but expecting {len(obj.input_names)}."
558
- )
559
- rewrite = False
560
- for i in range(len(inputs)):
561
- if (
562
- isinstance(inputs[i], np.ndarray)
563
- and inputs[i].dtype == np.uint16
564
- and obj.input_types[i].tensor_type.elem_type != TensorProto.UINT16
565
- ):
566
- rewrite = True
567
- if rewrite:
568
- # bfloat16 does not exist for numpy.
569
- inputs = list(inputs)
570
- for i in range(len(inputs)):
571
- if (
572
- isinstance(inputs[i], np.ndarray)
573
- and inputs[i].dtype == np.uint16
574
- and obj.input_types[i].tensor_type.elem_type != TensorProto.UINT16
575
- ):
576
- xr = inputs[i].ravel()
577
- xf = np.empty(xr.shape[0], dtype=np.float32)
578
- for ie in range(xr.shape[0]):
579
- el = bfloat16_to_float32(xr[ie])
580
- xf[ie] = el
581
- inputs[i] = cast_to(
582
- xf.astype(np.float32).reshape(inputs[i].shape),
583
- TensorProto.BFLOAT16,
584
- True,
585
- )
586
- feeds = {input_names[i]: inputs[i] for i in range(len(inputs))}
587
- got = obj.run(None, feeds)
588
- return got
589
-
590
- def common_test_onnx_test_run(
591
- self,
592
- te,
593
- successes,
594
- missed,
595
- skipped,
596
- load_failed,
597
- exec_failed,
598
- mismatch,
599
- verbose=0,
600
- rtol=None,
601
- atol=None,
602
- check_other_runtime=None,
603
- print_io=False,
604
- ):
605
- if verbose > 6:
606
- print("TEST:", te.name)
607
- if verbose > 7:
608
- print(" check runtime")
609
- self.assertIn(te.name, repr(te))
610
- self.assertGreater(len(te), 0)
611
- try:
612
- if verbose > 7:
613
- print(" run")
614
- if verbose > 5:
615
- te.run(
616
- lambda *args, verbose=verbose: TestOnnxBackEndWithReferenceEvaluator.load_fct(
617
- *args, verbose
618
- ),
619
- TestOnnxBackEndWithReferenceEvaluator.run_fct,
620
- atol=atol.get(te.name, None),
621
- rtol=rtol.get(te.name, None),
622
- comment=f"[runtime=ReferenceEvaluator, verbose={verbose}]",
623
- print_io=print_io,
624
- )
625
- else:
626
- te.run(
627
- TestOnnxBackEndWithReferenceEvaluator.load_fct,
628
- TestOnnxBackEndWithReferenceEvaluator.run_fct,
629
- atol=atol.get(te.fname, atol.get(te.name, None)),
630
- rtol=rtol.get(te.fname, rtol.get(te.name, None)),
631
- comment="[runtime=ReferenceEvaluator]",
632
- print_io=print_io,
633
- )
634
- if verbose > 7:
635
- print(" end run")
636
- if verbose > 8:
637
- print(te.onnx_model)
638
- except NotImplementedError as e:
639
- if verbose > 7:
640
- print(" ", e, type(e))
641
- missed.append((te, e))
642
- with open(f"missed_{te.name}.onnx", "wb") as f:
643
- f.write(te.onnx_model.SerializeToString())
644
- raise e
645
- except (AssertionError, ValueError) as e:
646
- if verbose > 7:
647
- print(" ", e, type(e))
648
- mismatch.append((te, e))
649
- with open(f"mismatch_{te.name}.onnx", "wb") as f:
650
- f.write(te.onnx_model.SerializeToString())
651
- if check_other_runtime is None:
652
- raise e
653
- if "onnxruntime" in check_other_runtime:
654
- print("CHECK RUNTIME onnxruntime")
655
- from onnxruntime import InferenceSession
656
-
657
- onnx_domain_opset = ORT_MAX_ONNX_OPSET_SUPPORTED_VERSION
658
- for opset in te.onnx_model.opset_import:
659
- if opset.domain in ("", "ai.onnx"):
660
- onnx_domain_opset = opset.version
661
- break
662
-
663
- # The new IR or opset version is not supported by onnxruntime yet
664
- if (
665
- te.onnx_model.ir_version > ORT_MAX_IR_SUPPORTED_VERSION
666
- or onnx_domain_opset > ORT_MAX_ONNX_OPSET_SUPPORTED_VERSION
667
- ):
668
- print(
669
- "Skip test because of IR or opset version is not supported by onnxruntime yet"
670
- )
671
- return
672
-
673
- te.run(
674
- lambda obj: InferenceSession(
675
- obj.SerializeToString(), providers=["CPUExecutionProvider"]
676
- ),
677
- lambda *a, **b: TestOnnxBackEndWithReferenceEvaluator.run_fct(
678
- *a, verbose=1, **b
679
- ),
680
- atol=1e-5,
681
- rtol=1e-3,
682
- comment="[runtime=onnxruntime]",
683
- )
684
- print("done")
685
- raise e
686
- except Exception as e:
687
- if verbose > 7:
688
- print(" ", e, type(e))
689
- with open(f"issue_{te.name}.onnx", "wb") as f:
690
- f.write(te.onnx_model.SerializeToString())
691
- raise AssertionError(
692
- f"Unable to run test {te.name!r} due to {e}\n{te.onnx_model}"
693
- ) from e
694
- successes.append((te, atol.get(te.fname, None), rtol.get(te.fname, None)))
695
- if verbose > 7:
696
- print(" end example.")
697
-
698
- @staticmethod
699
- def _postprocess(
700
- successes, missed, skipped, load_failed, exec_failed, mismatch, verbose
701
- ):
702
- success = len(successes)
703
- failed = [
704
- len(missed),
705
- len(skipped),
706
- len(load_failed),
707
- len(exec_failed),
708
- len(mismatch),
709
- ]
710
- coverage = success / (success + sum(failed))
711
-
712
- if verbose:
713
- path = os.path.dirname(onnx_file)
714
- print("-----------")
715
- print(
716
- f"success={success}, skipped={len(skipped)}, missed={len(missed)}, load_failed={len(load_failed)}, "
717
- f"exec_failed={len(exec_failed)}, mismatch={len(mismatch)}"
718
- )
719
- print(
720
- f"coverage {coverage * 100:.1f}% out of {success + sum(failed)} tests"
721
- )
722
-
723
- if verbose > 3:
724
-
725
- def _print(s, path):
726
- return (
727
- str(s)
728
- .replace("\\\\", "\\")
729
- .replace(path, "onnx")
730
- .replace("\\", "/")
731
- )
732
-
733
- print("-----------")
734
- for t in sorted(load_failed, key=lambda m: m[0].fname):
735
- print("loading failed", t[0].fname, "---", _print(t[0], path))
736
- for t in sorted(exec_failed, key=lambda m: m[0].fname):
737
- print("execution failed", t[0].fname, "---", _print(t[0], path))
738
- for t in sorted(mismatch, key=lambda m: m[0].fname):
739
- print("mismatch", t[0].fname, "---", _print(t[0], path))
740
- for t in sorted(missed, key=lambda m: m[0].fname):
741
- print("missed ", t[0].fname, "---", _print(t[0], path))
742
- for t in sorted(skipped, key=lambda m: m[0].fname):
743
- print("skipped", t[0].fname, "---", _print(t[0], path))
744
-
745
- if success > 30:
746
- print("-----------")
747
- print(
748
- f"success={success}, skipped={len(skipped)}, missed={len(missed)}, load_failed={len(load_failed)}, "
749
- f"exec_failed={len(exec_failed)}, mismatch={len(mismatch)}"
750
- )
751
- print(
752
- f"coverage {coverage * 100:.1f}% out of {success + sum(failed)} tests"
753
- )
754
- print("-----------")
755
-
756
- if len(mismatch) > 0:
757
- te, e = mismatch[0]
758
- raise AssertionError(
759
- f"Mismatch in test {te.name!r}\n{te.onnx_model}."
760
- ) from e
761
-
762
- if sum(failed) > len(SKIP_TESTS):
763
- raise AssertionError(
764
- f"Unexpected failures. {sum(failed)}/{success + sum(failed)} tests have failed."
765
- f"The coverage is {coverage * 100:.1f}%. "
766
- f"New operators were added with no corresponding runtime."
767
- )
768
-
769
- @classmethod
770
- def setUpClass(cls, all_tests=False):
771
- # test not supported yet
772
- # not supported yet
773
- # see https://onnx.ai/backend-scoreboard/onnxruntime_details_stable.html
774
- # to compare with onnxruntime
775
-
776
- cls.rtol = {
777
- "test_adam_multiple": 1e-2,
778
- "test_blackmanwindow_expanded": 0,
779
- "test_blackmanwindow_symmetric_expanded": 0,
780
- "test_simple_rnn_batchwise": 0,
781
- "test__pytorch_converted_Conv1d_pad1": 1e-4,
782
- "test__pytorch_converted_Conv2d": 1e-5,
783
- "test__pytorch_converted_Conv2d_no_bias": 1e-3,
784
- "test__pytorch_converted_Conv2d_strided": 1e-4,
785
- "test_layer_normalization_4d_axis1_expanded_ver18": 1e-4,
786
- "test_layer_normalization_4d_axis_negative_1_expanded_ver18": 1e-4,
787
- "test_layer_normalization_4d_axis_negative_3_expanded_ver18": 1e-4,
788
- "test_ConvTranspose2d": 1e-4,
789
- "test__pytorch_converted_ConvTranspose2d": 1e-4,
790
- }
791
-
792
- cls.atol = {
793
- "test_blackmanwindow": 1e-7,
794
- "test_blackmanwindow_expanded": 1e-4,
795
- "test_blackmanwindow_symmetric": 1e-7,
796
- "test_blackmanwindow_symmetric_expanded": 1e-4,
797
- "test_Conv1d": 1e-6,
798
- "test_Conv2d_depthwise_padded": 1e-7,
799
- "test_Conv3d_dilated": 1e-6,
800
- "test_gridsample_bicubic": 1e-4,
801
- "test_gru_seq_length": 1e-7,
802
- "test_hammingwindow_expanded": 1e-4,
803
- "test_hammingwindow_symmetric_expanded": 1e-4,
804
- "test_hannwindow_expanded": 1e-4,
805
- "test_hannwindow_symmetric": 1e-7,
806
- "test_hannwindow_symmetric_expanded": 1e-4,
807
- "test_layer_normalization_4d_axis_negative_1_expanded": 1e-6,
808
- "test_layer_normalization_4d_axis1_expanded": 1e-6,
809
- "test_layer_normalization_4d_axis_negative_3_expanded": 1e-6,
810
- "test_mish": 1e-6,
811
- "test_mish_expanded": 1e-6,
812
- "test_roialign_aligned_false": 1e-4,
813
- "test_roialign_aligned_true": 1e-4,
814
- # extended list
815
- "test__pytorch_converted_ConvTranspose2d_no_bias": 1e-4,
816
- "test__pytorch_converted_Linear_no_bias": 1e-5,
817
- "test_Linear_no_bias": 1e-5,
818
- "test__pytorch_converted_Conv1d_pad1": 1e-6,
819
- "test__pytorch_converted_Conv2d": 1e-5,
820
- "test__pytorch_converted_Conv2d_depthwise": 1e-4,
821
- "test__pytorch_converted_Conv2d_depthwise_strided": 1e-4,
822
- "test__pytorch_converted_Conv2d_depthwise_with_multiplier": 1e-4,
823
- "test__pytorch_converted_Conv2d_depthwise_padded": 1e-4,
824
- "test__pytorch_converted_Conv2d_groups": 1e-4,
825
- "test__pytorch_converted_Conv2d_groups_thnn": 1e-4,
826
- "test__pytorch_converted_Conv2d_no_bias": 1e-5,
827
- "test__pytorch_converted_Conv2d_strided": 1e-4,
828
- "test__pytorch_operator_operator_symbolic_override": 1e-5,
829
- "test_operator_symbolic_override": 1e-4,
830
- "test__pytorch_converted_Conv3d_dilated_strided": 1e-4,
831
- "test__pytorch_converted_Conv3d_groups": 1e-4,
832
- "test_affine_grid_2d": 1e-4,
833
- "test_affine_grid_2d_expanded": 1e-4,
834
- "test_affine_grid_2d_align_corners": 1e-4,
835
- "test_affine_grid_2d_align_corners_expanded": 1e-4,
836
- "test_affine_grid_3d": 1e-4,
837
- "test_affine_grid_3d_expanded": 1e-4,
838
- "test_affine_grid_3d_align_corners": 1e-4,
839
- "test_affine_grid_3d_align_corners_expanded": 1e-4,
840
- }
841
-
842
- cls.skip_test = SKIP_TESTS
843
- if all_tests:
844
- cls.skip_test = set()
845
- cls.successes = []
846
- cls.missed = []
847
- cls.skipped = []
848
- cls.load_failed = []
849
- cls.exec_failed = []
850
- cls.mismatch = []
851
-
852
- @classmethod
853
- def tearDownClass(cls):
854
- if len(cls.successes) == 0:
855
- failed = cls.mismatch + cls.missed + cls.load_failed + cls.exec_failed
856
- if len(failed) > 0:
857
- raise RuntimeError(
858
- f"No test was successful, {len(failed)} failed."
859
- ) from failed[0][1]
860
- raise RuntimeError("No test was successful.")
861
- cls._postprocess(
862
- cls.successes,
863
- cls.missed,
864
- cls.skipped,
865
- cls.load_failed,
866
- cls.exec_failed,
867
- cls.mismatch,
868
- 10,
869
- )
870
-
871
-
872
- TestOnnxBackEndWithReferenceEvaluator.add_test_methods()
873
-
874
-
875
- if __name__ == "__main__":
876
- unittest.main(verbosity=2)