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
@@ -9,12 +9,9 @@ from onnx.reference.ops._op_common_window import _CommonWindow
9
9
 
10
10
 
11
11
  class HannWindow(_CommonWindow):
12
- """
13
- Returns
14
- :math:`\\omega_n = \\sin^2\\left( \\frac{\\pi n}{N-1} \\right)`
15
- where *N* is the window length.
16
- See `hann_window
17
- <https://pytorch.org/docs/stable/generated/torch.hann_window.html>`_
12
+ r"""Returns :math:`\\omega_n = \\sin^2\\left( \\frac{\\pi n}{N-1} \\right)` where *N* is the window length.
13
+
14
+ See `hann_window <https://pytorch.org/docs/stable/generated/torch.hann_window.html>`_
18
15
  """
19
16
 
20
17
  def _run(self, size, output_datatype=None, periodic=None): # type: ignore
@@ -16,10 +16,11 @@ class If(OpRun):
16
16
  raise KeyError("run_params must contains key 'opsets'.")
17
17
  if "verbose" not in run_params:
18
18
  raise KeyError("run_params must contains key 'verbose'.")
19
+ if "existing_functions" not in self.run_params:
20
+ raise KeyError("run_params must contains key 'existing_functions'.")
19
21
 
20
22
  def need_context(self) -> bool:
21
- """
22
- Tells the runtime if this node needs the context
23
+ """Tells the runtime if this node needs the context
23
24
  (all the results produced so far) as it may silently access
24
25
  one of them (operator Loop).
25
26
  The default answer is `False`.
@@ -65,4 +66,4 @@ class If(OpRun):
65
66
  f"Output {i!r} (branch={branch!r}, name={names[i]!r}) is None, "
66
67
  f"available inputs={sorted(context)}, initializers={inits}."
67
68
  )
68
- return final
69
+ return self._check_and_fix_outputs(final)
@@ -20,8 +20,7 @@ class Loop(OpRun):
20
20
  self.K = len(self.body.output_names) - self.N - 1 # type: ignore
21
21
 
22
22
  def need_context(self) -> bool:
23
- """
24
- The operator Loop needs to know all results produced
23
+ """The operator Loop needs to know all results produced
25
24
  so far as the loop may silently access one of them.
26
25
  Some information are not always referred in the list of inputs
27
26
  (kind of static variables).
@@ -34,8 +33,8 @@ class Loop(OpRun):
34
33
  args = args[1:]
35
34
  else:
36
35
  v_initial = None
37
- if not hasattr(M, "dtype"):
38
- raise TypeError(f"M must be an array or a numpy number not {type(M)}.")
36
+ if M is not None and not hasattr(M, "dtype"):
37
+ raise TypeError(f"M must be empty or an array but its type is {type(M)}.")
39
38
  body = self.body # type: ignore
40
39
  loop_inputs = body.input_names
41
40
  inputs = {name: None for name in loop_inputs}
@@ -53,10 +52,10 @@ class Loop(OpRun):
53
52
 
54
53
  k_carried_away = [[] for i in range(self.K)] # type: ignore
55
54
  it = 0
56
- while cond and it < M:
55
+ while cond and (M is None or it < M):
57
56
  self._log(" -- loop> {%r}", context)
58
57
  if len(body.input_names) > 0 and body.input_names[0] is not None:
59
- inputs[body.input_names[0]] = np.array(it, dtype=M.dtype) # type: ignore
58
+ inputs[body.input_names[0]] = np.array(it, dtype=None if M is None else M.dtype) # type: ignore
60
59
  if len(body.input_names) > 1 and body.input_names[1] is not None:
61
60
  inputs[body.input_names[1]] = cond
62
61
  outputs = self._run_body(inputs, attributes=attributes) # type: ignore
@@ -78,9 +77,8 @@ class Loop(OpRun):
78
77
  outputs = [inputs[i] for i in body.input_names[2:]]
79
78
  else:
80
79
  outputs = outputs[1 : 1 + self.N]
81
- outputs.extend(k_carried_away)
80
+ outputs.extend([np.vstack(x) for x in k_carried_away])
82
81
  while len(outputs) < len(self.onnx_node.output):
83
82
  outputs.append(np.empty(shape=()))
84
83
  res = tuple(outputs)
85
-
86
- return res
84
+ return self._check_and_fix_outputs(res)
@@ -9,8 +9,7 @@ from onnx.reference.ops._op import OpRunBinaryNum
9
9
 
10
10
 
11
11
  def numpy_matmul(a, b): # type: ignore
12
- """
13
- Implements a matmul product. See :func:`np.matmul`.
12
+ """Implements a matmul product. See :func:`np.matmul`.
14
13
  Handles sparse matrices.
15
14
  """
16
15
  try:
@@ -87,6 +87,11 @@ class MaxPool(CommonPool):
87
87
  + 1
88
88
  )
89
89
  )
90
+ need_to_reduce_out_size_in_ceil_mode = (
91
+ output_spatial_shape[i] - 1
92
+ ) * strides[i] >= input_spatial_shape[i] + new_pads[i][0]
93
+ if need_to_reduce_out_size_in_ceil_mode:
94
+ output_spatial_shape[i] -= 1
90
95
  else:
91
96
  for i in range(len(input_spatial_shape)):
92
97
  output_spatial_shape[i] = int(
@@ -8,7 +8,7 @@ from onnx.reference.op_run import OpRun
8
8
 
9
9
 
10
10
  class Optional(OpRun):
11
- def _run(self, x=None, type=None): # type: ignore
11
+ def _run(self, x=None, type=None): # type: ignore # noqa: A002
12
12
  if x is not None and type is not None:
13
13
  dt = tensor_dtype_to_np_dtype(type)
14
14
  if dt != x.dtype:
@@ -57,8 +57,7 @@ def get_output_shape_explicit_padding(
57
57
  dilations: Union[Sequence[int], None] = None,
58
58
  ceil_mode: bool = False,
59
59
  ) -> Tuple[Sequence[int], Sequence[int]]:
60
- """
61
- compute output shape according to:
60
+ """Compute output shape according to:
62
61
  https://pytorch.org/docs/stable/generated/torch.nn.MaxPool1d.html?highlight=max+pool#torch.nn.MaxPool1d
63
62
  Pads are used to calculate output shape. Use output shape in turn to calculate the actual pads
64
63
  that are used to pad the input tensor so that computation in pool() will not cause out of bound error.
@@ -121,8 +120,7 @@ def get_output_shape_auto_pad(
121
120
  kernel_spatial_shape: Sequence[int],
122
121
  strides_spatial: Sequence[int],
123
122
  ) -> Sequence[int]:
124
- """
125
- https://www.tensorflow.org/api_docs/python/tf/keras/layers/AveragePooling2D
123
+ """https://www.tensorflow.org/api_docs/python/tf/keras/layers/AveragePooling2D
126
124
  output_shape = math.floor((input_shape - 1) / strides) + 1 (SAME)
127
125
  output_shape = math.floor((input_shape - pool_size) / strides) + 1 (VALID)
128
126
  IMPORTANT: this function assumes ceil_mode is False. In tenforflow, ceil_mode is always False.
@@ -172,8 +170,7 @@ def pool(
172
170
  count_include_pad: int = 0,
173
171
  p: int = 1,
174
172
  ) -> np.ndarray:
175
- """
176
- this function is used to calculate the pooling result of a padded tensor
173
+ """This function is used to calculate the pooling result of a padded tensor
177
174
  padded: the padded tensor
178
175
  x_shape: the shape of the original tensor in [N, C, *spatial_shape]
179
176
  kernel: the pooling kernel
@@ -22,5 +22,5 @@ class QLinearMatMul(OpRun):
22
22
  D = C * (a_scale * b_scale / y_scale)
23
23
  if y_zero_point is not None:
24
24
  D += y_zero_point
25
- return (np.round(D).astype(y_zero_point.dtype),)
26
- return (np.round(D).astype(a.dtype),)
25
+ return (np.rint(D).astype(y_zero_point.dtype),)
26
+ return (np.rint(D).astype(a.dtype),)
@@ -3,11 +3,13 @@
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
5
 
6
- from typing import Optional, Tuple
6
+ from __future__ import annotations
7
+
8
+ from typing import ClassVar
7
9
 
8
10
  import numpy as np
9
11
 
10
- from onnx import TensorProto
12
+ from onnx import TensorProto, subbyte
11
13
  from onnx.helper import (
12
14
  float32_to_float8e4m3,
13
15
  float32_to_float8e5m2,
@@ -19,111 +21,204 @@ from onnx.reference.custom_element_types import (
19
21
  float8e4m3fnuz,
20
22
  float8e5m2,
21
23
  float8e5m2fnuz,
24
+ int4,
25
+ uint4,
22
26
  )
23
27
  from onnx.reference.op_run import OpRun
24
28
 
25
29
 
30
+ def reshape_input(
31
+ value: np.ndarray,
32
+ shape: tuple[int, ...],
33
+ axis: int | None = None,
34
+ block_size: int | None = None,
35
+ ) -> np.ndarray:
36
+ """Reshape/Replicate scale/zero-point to be broadcastable to shape.
37
+
38
+ Args:
39
+ value: the array to be reshaped/replicated
40
+ shape: the rarget shape
41
+ axis: quantization axis, applicable for per-axis and blocked quantization
42
+ block_size: size of quantization block, applicable only for blocked quantization
43
+
44
+ Returns:
45
+ value array after reshape/replicate according to quantization mode.
46
+ """
47
+ if len(value.shape) == 0:
48
+ return value
49
+ if len(value.shape) > 0 and value.size == 1:
50
+ return value[0]
51
+ if not block_size:
52
+ assert len(value.shape) == 1
53
+ dims = [1] * len(shape)
54
+ try:
55
+ dims[axis] = value.size
56
+ return value.reshape(tuple(dims))
57
+ except IndexError as e:
58
+ raise IndexError(
59
+ f"axis is out of boundary, axis={axis}, "
60
+ f"value.shape={value.shape}, shape={shape}."
61
+ ) from e
62
+
63
+ if block_size <= 0:
64
+ raise ValueError("block_size must be a positive integer.")
65
+
66
+ # repeat scale to get elementwise scale
67
+ value = np.repeat(value, repeats=block_size, axis=axis)
68
+ if (
69
+ shape[axis] != value.shape[axis]
70
+ ): # block_size does not divide x, handle the remainder block
71
+ value = value.take(indices=range(0, shape[axis]), axis=axis)
72
+ if value.shape != shape:
73
+ raise ValueError(
74
+ "Invalid shapes for Blocked Quantization. Input 2 shape should identical to Input 1 shape, except for one dimension, in which blocking is performed"
75
+ )
76
+ assert np.broadcast_shapes(shape, value.shape) == shape
77
+ return value
78
+
79
+
26
80
  class _CommonQuantizeLinear(OpRun):
27
81
  float32_to_float8e4m3 = np.vectorize(float32_to_float8e4m3)
28
82
  float32_to_float8e5m2 = np.vectorize(float32_to_float8e5m2)
83
+ quant_integer_ranges: ClassVar[dict[TensorProto.DataType, tuple[int]]] = {
84
+ TensorProto.UINT8: (0, 255),
85
+ TensorProto.INT8: (-128, 127),
86
+ TensorProto.UINT16: (0, 65535),
87
+ TensorProto.INT16: (-32768, 32767),
88
+ }
89
+ quant_types = (
90
+ TensorProto.UINT8,
91
+ TensorProto.INT8,
92
+ TensorProto.UINT16,
93
+ TensorProto.INT16,
94
+ TensorProto.UINT4,
95
+ TensorProto.INT4,
96
+ TensorProto.FLOAT8E4M3FN,
97
+ TensorProto.FLOAT8E4M3FNUZ,
98
+ TensorProto.FLOAT8E5M2,
99
+ TensorProto.FLOAT8E5M2FNUZ,
100
+ )
29
101
 
30
102
  def get_zero_point_type(self, zero_point: np.ndarray) -> int:
103
+ zero_point_type = None
31
104
  if (
32
105
  zero_point.dtype == float8e4m3fn
33
106
  and zero_point.dtype.descr[0][0] == "e4m3fn"
34
107
  ):
35
- return TensorProto.FLOAT8E4M3FN
36
- if (
108
+ zero_point_type = TensorProto.FLOAT8E4M3FN
109
+ elif (
37
110
  zero_point.dtype == float8e4m3fnuz
38
111
  and zero_point.dtype.descr[0][0] == "e4m3fnuz"
39
112
  ):
40
- return TensorProto.FLOAT8E4M3FNUZ
41
- if zero_point.dtype == float8e5m2 and zero_point.dtype.descr[0][0] == "e5m2":
42
- return TensorProto.FLOAT8E5M2
43
- if (
113
+ zero_point_type = TensorProto.FLOAT8E4M3FNUZ
114
+ elif zero_point.dtype == float8e5m2 and zero_point.dtype.descr[0][0] == "e5m2":
115
+ zero_point_type = TensorProto.FLOAT8E5M2
116
+ elif (
44
117
  zero_point.dtype == float8e5m2fnuz
45
118
  and zero_point.dtype.descr[0][0] == "e5m2fnuz"
46
119
  ):
47
- return TensorProto.FLOAT8E5M2FNUZ
48
- return np_dtype_to_tensor_dtype(zero_point.dtype)
120
+ zero_point_type = TensorProto.FLOAT8E5M2FNUZ
121
+ elif zero_point.dtype == uint4 and zero_point.dtype.descr[0][0] == "uint4":
122
+ zero_point_type = TensorProto.UINT4
123
+ elif zero_point.dtype == int4 and zero_point.dtype.descr[0][0] == "int4":
124
+ zero_point_type = TensorProto.INT4
125
+ else:
126
+ zero_point_type = np_dtype_to_tensor_dtype(zero_point.dtype)
127
+ return zero_point_type
49
128
 
50
- def common_run( # noqa: PLR0911
129
+ def _run(
51
130
  self,
52
131
  x: np.ndarray,
53
132
  y_scale: np.ndarray,
54
- zero_point: Optional[np.ndarray] = None,
133
+ zero_point: np.ndarray | None = None,
55
134
  axis: int = 1,
56
135
  saturate: bool = True,
57
- ) -> Tuple[np.ndarray]:
58
- if len(y_scale.shape) > 1:
59
- raise RuntimeError("Input 2 must be a vector or a number.")
60
- if len(y_scale.shape) > 0 and y_scale.size == 1:
61
- y_scale = y_scale[0]
62
- if len(y_scale.shape) > 0:
63
- new_shape = [1 for s in x.shape]
64
- new_shape[axis] = len(y_scale)
65
- x = x / y_scale.reshape(new_shape)
66
- else:
67
- x = x / y_scale
68
- new_shape = x.shape # unused
136
+ block_size: int | None = None,
137
+ output_dtype: np.dtype | None = None,
138
+ ) -> tuple[np.ndarray]:
139
+ y_scale = reshape_input(y_scale, x.shape, axis, block_size)
140
+
141
+ # Determine output data type
142
+ tensor_type = output_dtype
69
143
  if zero_point is not None:
70
- tensor_type = self.get_zero_point_type(zero_point)
71
-
72
- if tensor_type == TensorProto.UINT8:
73
- xi = np.rint(x).astype(np.int32)
74
- if len(y_scale.shape) > 0:
75
- xi += zero_point.reshape(new_shape)
76
- else:
77
- xi += zero_point
78
- dtype = tensor_dtype_to_np_dtype(tensor_type)
79
- return (np.clip(xi, 0, 255).astype(dtype),)
80
-
81
- if tensor_type == TensorProto.INT8:
82
- xi = np.rint(x).astype(np.int32)
83
- if len(y_scale.shape) > 0:
84
- xi += zero_point.reshape(new_shape)
85
- else:
86
- xi += zero_point
87
- dtype = tensor_dtype_to_np_dtype(tensor_type)
88
- return (np.clip(xi, -128, 127).astype(dtype),)
89
-
90
- if tensor_type == TensorProto.FLOAT8E4M3FN:
91
- f8 = _CommonQuantizeLinear.float32_to_float8e4m3(x, saturate=saturate)
92
- return (f8.astype(float8e4m3fn),) # type: ignore[attr-defined]
93
-
94
- if tensor_type == TensorProto.FLOAT8E4M3FNUZ:
95
- f8 = _CommonQuantizeLinear.float32_to_float8e4m3(
96
- x, uz=True, saturate=saturate
144
+ zero_point_type = self.get_zero_point_type(zero_point)
145
+ if output_dtype and output_dtype != zero_point_type:
146
+ raise ValueError(
147
+ f"Mismatched output data-types: output_dtype={output_dtype}, zero_point type={zero_point_type}"
97
148
  )
98
- return (f8.astype(float8e4m3fnuz),) # type: ignore[attr-defined]
149
+ tensor_type = zero_point_type
150
+ tensor_type = tensor_type or TensorProto.UINT8
151
+
152
+ if tensor_type not in _CommonQuantizeLinear.quant_types:
153
+ raise ValueError(
154
+ f"Unexpected type: output_dtype={tensor_type} is not a supported quantized type."
155
+ )
99
156
 
100
- if tensor_type == TensorProto.FLOAT8E5M2:
101
- f8 = _CommonQuantizeLinear.float32_to_float8e5m2(x, saturate=saturate)
102
- return (f8.astype(float8e5m2),) # type: ignore[attr-defined]
157
+ # Compute
158
+ zero_point = (
159
+ reshape_input(zero_point, x.shape, axis, block_size)
160
+ if zero_point is not None
161
+ else 0
162
+ )
163
+ x = x / y_scale
164
+
165
+ if tensor_type in _CommonQuantizeLinear.quant_integer_ranges:
166
+ xi = np.rint(x).astype(np.int32)
167
+ xi += zero_point
168
+ dtype = tensor_dtype_to_np_dtype(tensor_type)
169
+ quant_range = _CommonQuantizeLinear.quant_integer_ranges[tensor_type]
170
+ return (np.clip(xi, quant_range[0], quant_range[1]).astype(dtype),)
171
+
172
+ if tensor_type == TensorProto.FLOAT8E4M3FN:
173
+ f8 = _CommonQuantizeLinear.float32_to_float8e4m3(x, saturate=saturate)
174
+ return (f8.astype(float8e4m3fn),) # type: ignore[attr-defined]
175
+
176
+ if tensor_type == TensorProto.FLOAT8E4M3FNUZ:
177
+ f8 = _CommonQuantizeLinear.float32_to_float8e4m3(
178
+ x, uz=True, saturate=saturate
179
+ )
180
+ return (f8.astype(float8e4m3fnuz),) # type: ignore[attr-defined]
103
181
 
104
- if tensor_type == TensorProto.FLOAT8E5M2FNUZ:
105
- f8 = _CommonQuantizeLinear.float32_to_float8e5m2(
106
- x, fn=True, uz=True, saturate=saturate
107
- )
108
- return (f8.astype(float8e5m2fnuz),) # type: ignore[attr-defined]
182
+ if tensor_type == TensorProto.FLOAT8E5M2:
183
+ f8 = _CommonQuantizeLinear.float32_to_float8e5m2(x, saturate=saturate)
184
+ return (f8.astype(float8e5m2),) # type: ignore[attr-defined]
185
+
186
+ if tensor_type == TensorProto.FLOAT8E5M2FNUZ:
187
+ f8 = _CommonQuantizeLinear.float32_to_float8e5m2(
188
+ x, fn=True, uz=True, saturate=saturate
189
+ )
190
+ return (f8.astype(float8e5m2fnuz),) # type: ignore[attr-defined]
109
191
 
110
- raise RuntimeError(
111
- f"Unexpected tensor_type for input 2: tensor_type={tensor_type}, "
112
- f"zero_point.dtype={zero_point.dtype}."
192
+ if tensor_type in (TensorProto.UINT4, TensorProto.INT4):
193
+ xi = np.rint(x).astype(np.int32)
194
+ xi += zero_point
195
+ single_func = lambda x: subbyte.float32_to_4bit_unpacked( # noqa: E731
196
+ x, signed=(tensor_type == TensorProto.INT4)
113
197
  )
198
+ func = np.vectorize(single_func)
199
+ i4 = func(xi)
200
+ return (i4,) # type: ignore[attr-defined]
114
201
 
115
- dtype = np.uint8 # type: ignore[assignment]
116
- xi = np.rint(x).astype(np.int32)
117
- return (np.clip(xi, 0, 255).astype(dtype),)
202
+ raise ValueError(
203
+ f"Unexpected type: output_dtype={tensor_type} is not a supported quantized type."
204
+ )
118
205
 
119
206
 
120
207
  class QuantizeLinear_10(_CommonQuantizeLinear):
121
- def _run(self, *args, axis=None): # type: ignore
122
- # args: x, y_scale, zero_point
123
- return self.common_run(*args, axis=axis) # type: ignore
208
+ def _run(self, x, y_scale, zero_point=None, axis=None): # type: ignore
209
+ if len(y_scale.shape) > 1:
210
+ raise ValueError("Input 2 must be a vector or a number.")
211
+ return super()._run(x, y_scale, zero_point, axis=axis) # type: ignore
124
212
 
125
213
 
126
214
  class QuantizeLinear_19(_CommonQuantizeLinear):
127
- def _run(self, *args, axis=None, saturate=None): # type: ignore
215
+ def _run(self, x, y_scale, zero_point=None, axis=None, saturate=None): # type: ignore
216
+ if len(y_scale.shape) > 1:
217
+ raise ValueError("Input 2 must be a vector or a number.")
218
+ return super()._run(x, y_scale, zero_point, axis=axis, saturate=saturate) # type: ignore
219
+
220
+
221
+ class QuantizeLinear_21(_CommonQuantizeLinear):
222
+ def _run(self, *args, axis=None, saturate=None, block_size=None, output_dtype=None): # type: ignore
128
223
  # args: x, y_scale, zero_point
129
- return self.common_run(*args, axis=axis, saturate=saturate) # type: ignore
224
+ return super()._run(*args, axis=axis, saturate=saturate, block_size=block_size, output_dtype=output_dtype) # type: ignore
@@ -11,8 +11,7 @@ from onnx.reference.op_run import OpRun
11
11
 
12
12
 
13
13
  def _cartesian(arrays: list[np.ndarray], out: np.ndarray | None = None) -> np.ndarray:
14
- """
15
- From https://stackoverflow.com/a/1235363
14
+ """From https://stackoverflow.com/a/1235363
16
15
  Generate a cartesian product of input arrays.
17
16
  Parameters
18
17
  ----------
@@ -20,12 +19,14 @@ def _cartesian(arrays: list[np.ndarray], out: np.ndarray | None = None) -> np.nd
20
19
  1-D arrays to form the cartesian product of.
21
20
  out : ndarray
22
21
  Array to place the cartesian product in.
23
- Returns
22
+
23
+ Returns:
24
24
  -------
25
25
  out : ndarray
26
26
  2-D array of shape (M, len(arrays)) containing cartesian products
27
27
  formed of input arrays.
28
- Examples
28
+
29
+ Examples:
29
30
  --------
30
31
  >>> cartesian(([1, 2, 3], [4, 5], [6, 7]))
31
32
  array([[1, 4, 6],
@@ -41,7 +42,6 @@ def _cartesian(arrays: list[np.ndarray], out: np.ndarray | None = None) -> np.nd
41
42
  [3, 5, 6],
42
43
  [3, 5, 7]])
43
44
  """
44
-
45
45
  arrays = [np.asarray(x) for x in arrays]
46
46
  dtype = arrays[0].dtype
47
47
 
@@ -127,8 +127,7 @@ def _linear_coeffs_antialias(ratio: float, scale: float) -> np.ndarray:
127
127
 
128
128
 
129
129
  def _get_neighbor_idxes(x: float, n: int, limit: int) -> np.ndarray:
130
- """
131
- Return the n nearest indexes to x among `[0, limit)`,
130
+ """Return the n nearest indexes to x among `[0, limit)`,
132
131
  prefer the indexes smaller than x.
133
132
  As a result, the ratio must be in `(0, 1]`.
134
133
 
@@ -142,10 +141,13 @@ def _get_neighbor_idxes(x: float, n: int, limit: int) -> np.ndarray:
142
141
  get_neighbor_idxes(4.4, 1, 10) == [4]
143
142
  get_neighbor_idxes(4.6, 1, 10) == [5]
144
143
 
145
- :param x:
146
- :param n: the number of the wanted indexes
147
- :param limit: the maximum value of index
148
- :return: An np.array containing n nearest indexes in ascending order
144
+ Args:
145
+ x: float.
146
+ n: the number of the wanted indexes.
147
+ limit: the maximum value of index.
148
+
149
+ Returns:
150
+ An np.array containing n nearest indexes in ascending order
149
151
  """
150
152
  idxes = sorted(range(limit), key=lambda idx: (abs(x - idx), idx))[:n]
151
153
  idxes = sorted(idxes)
@@ -153,16 +155,18 @@ def _get_neighbor_idxes(x: float, n: int, limit: int) -> np.ndarray:
153
155
 
154
156
 
155
157
  def _get_neighbor(x: float, n: int, data: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
156
- """
157
- Pad `data` in 'edge' mode, and get n nearest elements in the padded array
158
- and their indexes in the original array.
159
-
160
- :param x: center index (in the unpadded coordinate system) of the found nearest elements.
161
- :param n: the number of neighbors.
162
- :param data: the array
163
- :return: A tuple containing the indexes of neighbor elements
164
- (the index can be smaller than 0 or higher than len(data))
165
- and the value of these elements
158
+ """Pad `data` in 'edge' mode, and get n nearest elements in the padded array and their indexes in the original array.
159
+
160
+ Args:
161
+ x: Center index (in the unpadded coordinate system) of the found
162
+ nearest elements.
163
+ n: The number of neighbors.
164
+ data: The array.
165
+
166
+ Returns:
167
+ A tuple containing the indexes of neighbor elements (the index
168
+ can be smaller than 0 or higher than len(data)) and the value of
169
+ these elements.
166
170
  """
167
171
  pad_width = np.ceil(n / 2).astype(int)
168
172
  padded = np.pad(data, pad_width, mode="edge")
@@ -36,22 +36,30 @@ class CommonRNN(OpRun):
36
36
 
37
37
  self.f1 = self.choose_act(
38
38
  self.activations[0], # type: ignore
39
- self.activation_alpha[0] # type: ignore
40
- if self.activation_alpha is not None and len(self.activation_alpha) > 0 # type: ignore
41
- else None,
42
- self.activation_beta[0] # type: ignore
43
- if self.activation_beta is not None and len(self.activation_beta) > 0 # type: ignore
44
- else None,
39
+ (
40
+ self.activation_alpha[0] # type: ignore
41
+ if self.activation_alpha is not None and len(self.activation_alpha) > 0 # type: ignore
42
+ else None
43
+ ),
44
+ (
45
+ self.activation_beta[0] # type: ignore
46
+ if self.activation_beta is not None and len(self.activation_beta) > 0 # type: ignore
47
+ else None
48
+ ),
45
49
  )
46
50
  if len(self.activations) > 1: # type: ignore
47
51
  self.f2 = self.choose_act(
48
52
  self.activations[1], # type: ignore
49
- self.activation_alpha[1] # type: ignore
50
- if self.activation_alpha is not None and len(self.activation_alpha) > 1 # type: ignore
51
- else None,
52
- self.activation_beta[1] # type: ignore
53
- if self.activation_beta is not None and len(self.activation_beta) > 1 # type: ignore
54
- else None,
53
+ (
54
+ self.activation_alpha[1] # type: ignore
55
+ if self.activation_alpha is not None and len(self.activation_alpha) > 1 # type: ignore
56
+ else None
57
+ ),
58
+ (
59
+ self.activation_beta[1] # type: ignore
60
+ if self.activation_beta is not None and len(self.activation_beta) > 1 # type: ignore
61
+ else None
62
+ ),
55
63
  )
56
64
  self.n_outputs = len(onnx_node.output)
57
65
 
@@ -16,10 +16,12 @@ class Scan(OpRun):
16
16
  f"Parameter 'body' must have a method 'run', type {type(self.body)}." # type: ignore
17
17
  )
18
18
  self.input_directions_ = [
19
- 0
20
- if self.scan_input_directions is None # type: ignore
21
- or i >= len(self.scan_input_directions) # type: ignore
22
- else self.scan_input_directions[i] # type: ignore
19
+ (
20
+ 0
21
+ if self.scan_input_directions is None # type: ignore
22
+ or i >= len(self.scan_input_directions) # type: ignore
23
+ else self.scan_input_directions[i]
24
+ ) # type: ignore
23
25
  for i in range(self.num_scan_inputs) # type: ignore
24
26
  ]
25
27
  max_dir_in = max(self.input_directions_)
@@ -28,9 +30,11 @@ class Scan(OpRun):
28
30
  "Scan is not implemented for other output input_direction than 0."
29
31
  )
30
32
  self.input_axes_ = [
31
- 0
32
- if self.scan_input_axes is None or i >= len(self.scan_input_axes) # type: ignore
33
- else self.scan_input_axes[i] # type: ignore
33
+ (
34
+ 0
35
+ if self.scan_input_axes is None or i >= len(self.scan_input_axes) # type: ignore
36
+ else self.scan_input_axes[i]
37
+ ) # type: ignore
34
38
  for i in range(self.num_scan_inputs) # type: ignore
35
39
  ]
36
40
  max_axe_in = max(self.input_axes_)
@@ -44,10 +48,12 @@ class Scan(OpRun):
44
48
  num_scan_outputs = len(args) - num_loop_state_vars
45
49
 
46
50
  output_directions = [
47
- 0
48
- if self.scan_output_directions is None # type: ignore
49
- or i >= len(self.scan_output_directions) # type: ignore
50
- else self.scan_output_directions[i] # type: ignore
51
+ (
52
+ 0
53
+ if self.scan_output_directions is None # type: ignore
54
+ or i >= len(self.scan_output_directions) # type: ignore
55
+ else self.scan_output_directions[i]
56
+ ) # type: ignore
51
57
  for i in range(num_scan_outputs)
52
58
  ]
53
59
  max_dir_out = max(output_directions)
@@ -56,9 +62,11 @@ class Scan(OpRun):
56
62
  "Scan is not implemented for other output output_direction than 0."
57
63
  )
58
64
  output_axes = [
59
- 0
60
- if self.scan_output_axes is None or i >= len(self.scan_output_axes) # type: ignore
61
- else self.scan_output_axes[i] # type: ignore
65
+ (
66
+ 0
67
+ if self.scan_output_axes is None or i >= len(self.scan_output_axes) # type: ignore
68
+ else self.scan_output_axes[i]
69
+ ) # type: ignore
62
70
  for i in range(num_scan_outputs)
63
71
  ]
64
72
  max_axe_out = max(output_axes)
@@ -140,4 +148,4 @@ class Scan(OpRun):
140
148
  for res in results:
141
149
  conc = np.vstack(res)
142
150
  states.append(conc)
143
- return tuple(states)
151
+ return self._check_and_fix_outputs(tuple(states))