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
onnx/helper.py CHANGED
@@ -42,6 +42,7 @@ from onnx import (
42
42
  ValueInfoProto,
43
43
  defs,
44
44
  mapping,
45
+ subbyte,
45
46
  )
46
47
 
47
48
  VersionRowType = Union[Tuple[str, int, int, int], Tuple[str, int, int, int, int]]
@@ -74,13 +75,14 @@ VERSION_TABLE: VersionTableType = [
74
75
  ("1.14.0", 9, 19, 3, 1),
75
76
  ("1.14.1", 9, 19, 3, 1),
76
77
  ("1.15.0", 9, 20, 4, 1),
78
+ ("1.16.0", 10, 21, 5, 1),
77
79
  ]
78
80
 
79
81
  VersionMapType = Dict[Tuple[str, int], int]
80
82
 
81
83
 
82
84
  def create_op_set_id_version_map(table: VersionTableType) -> VersionMapType:
83
- """create a map from (opset-domain, opset-version) to ir-version from above table"""
85
+ """Create a map from (opset-domain, opset-version) to ir-version from above table."""
84
86
  result: VersionMapType = {}
85
87
 
86
88
  def process(release_version: str, ir_version: int, *args: Any) -> None:
@@ -100,13 +102,15 @@ OP_SET_ID_VERSION_MAP = create_op_set_id_version_map(VERSION_TABLE)
100
102
 
101
103
 
102
104
  def find_min_ir_version_for(
103
- opsetidlist: List[OperatorSetIdProto], ignore_unknown: bool = False
105
+ opsetidlist: Sequence[OperatorSetIdProto], ignore_unknown: bool = False
104
106
  ) -> int:
105
107
  """Given list of opset ids, determine minimum IR version required.
106
108
 
107
- Arguments:
108
- opsetidlist (List[OperatorSetIdProto]): The list of OperatorSetIdProto
109
- ignore_unknown (bool): If True, ignore unknown domain and return default min version for that domain.
109
+ Args:
110
+ opsetidlist: A sequence of OperatorSetIdProto.
111
+ ignore_unknown: If True, ignore unknown domain and return default minimum
112
+ version for that domain.
113
+
110
114
  Returns:
111
115
  The minimum IR version required (integer)
112
116
  """
@@ -132,11 +136,12 @@ def make_node(
132
136
  name: Optional[str] = None,
133
137
  doc_string: Optional[str] = None,
134
138
  domain: Optional[str] = None,
139
+ overload: Optional[str] = None,
135
140
  **kwargs: Any,
136
141
  ) -> NodeProto:
137
142
  """Construct a NodeProto.
138
143
 
139
- Arguments:
144
+ Args:
140
145
  op_type (string): The name of the operator to construct
141
146
  inputs (list of string): list of input names
142
147
  outputs (list of string): list of output names
@@ -144,12 +149,14 @@ def make_node(
144
149
  doc_string (string, default None): optional documentation string for NodeProto
145
150
  domain (string, default None): optional domain for NodeProto.
146
151
  If it's None, we will just use default domain (which is empty)
152
+ overload (string, default None): optional field, used to
153
+ resolve calls to model-local functions
147
154
  **kwargs (dict): the attributes of the node. The acceptable values
148
155
  are documented in :func:`make_attribute`.
156
+
149
157
  Returns:
150
158
  NodeProto
151
159
  """
152
-
153
160
  node = NodeProto()
154
161
  node.op_type = op_type
155
162
  node.input.extend(inputs)
@@ -160,6 +167,8 @@ def make_node(
160
167
  node.doc_string = doc_string
161
168
  if domain is not None:
162
169
  node.domain = domain
170
+ if overload is not None:
171
+ node.overload = overload
163
172
  if kwargs:
164
173
  node.attribute.extend(
165
174
  make_attribute(key, value)
@@ -175,7 +184,7 @@ def make_operatorsetid(
175
184
  ) -> OperatorSetIdProto:
176
185
  """Construct an OperatorSetIdProto.
177
186
 
178
- Arguments:
187
+ Args:
179
188
  domain (string): The domain of the operator set id
180
189
  version (integer): Version of operator set id
181
190
  Returns:
@@ -199,7 +208,7 @@ def make_graph(
199
208
  ) -> GraphProto:
200
209
  """Construct a GraphProto
201
210
 
202
- Arguments:
211
+ Args:
203
212
  nodes: list of NodeProto
204
213
  name (string): graph name
205
214
  inputs: list of ValueInfoProto
@@ -233,7 +242,7 @@ def make_graph(
233
242
  def make_opsetid(domain: str, version: int) -> OperatorSetIdProto:
234
243
  """Construct an OperatorSetIdProto.
235
244
 
236
- Arguments:
245
+ Args:
237
246
  domain (string): The domain of the operator set id
238
247
  version (integer): Version of operator set id
239
248
  Returns:
@@ -255,11 +264,15 @@ def make_function(
255
264
  attributes: Optional[Sequence[str]] = None,
256
265
  attribute_protos: Optional[Sequence[AttributeProto]] = None,
257
266
  doc_string: Optional[str] = None,
267
+ overload: Optional[str] = None,
268
+ value_info: Optional[Sequence[ValueInfoProto]] = None,
258
269
  ) -> FunctionProto:
259
270
  if attributes is None:
260
271
  attributes = []
261
272
  if attribute_protos is None:
262
273
  attribute_protos = []
274
+ if value_info is None:
275
+ value_info = []
263
276
  f = FunctionProto()
264
277
  f.domain = domain
265
278
  f.name = fname
@@ -271,13 +284,16 @@ def make_function(
271
284
  f.attribute_proto.extend(attribute_protos)
272
285
  if doc_string:
273
286
  f.doc_string = doc_string
287
+ if overload is not None:
288
+ f.overload = overload
289
+ f.value_info.extend(value_info)
274
290
  return f
275
291
 
276
292
 
277
293
  def make_model(graph: GraphProto, **kwargs: Any) -> ModelProto:
278
294
  """Construct a ModelProto
279
295
 
280
- Arguments:
296
+ Args:
281
297
  graph (GraphProto): *make_graph* returns
282
298
  **kwargs: any attribute to add to the returned instance
283
299
  Returns:
@@ -315,18 +331,26 @@ def make_model_gen_version(graph: GraphProto, **kwargs: Any) -> ModelProto:
315
331
  ir_version_field = "ir_version"
316
332
  if ir_version_field not in kwargs:
317
333
  opset_imports_field = "opset_imports"
318
- imports = kwargs[opset_imports_field] if opset_imports_field in kwargs else []
334
+ imports = kwargs.get(opset_imports_field, [])
319
335
  kwargs[ir_version_field] = find_min_ir_version_for(imports)
320
336
  return make_model(graph, **kwargs)
321
337
 
322
338
 
323
- def set_model_props(model: ModelProto, dict_value: Dict[str, str]) -> None:
324
- del model.metadata_props[:]
339
+ def set_metadata_props(
340
+ proto: Union[
341
+ ModelProto, GraphProto, FunctionProto, NodeProto, TensorProto, ValueInfoProto
342
+ ],
343
+ dict_value: Dict[str, str],
344
+ ) -> None:
345
+ del proto.metadata_props[:]
325
346
  for k, v in dict_value.items():
326
- entry = model.metadata_props.add()
347
+ entry = proto.metadata_props.add()
327
348
  entry.key = k
328
349
  entry.value = v
329
- # model.metadata_properties.append(entry)
350
+
351
+
352
+ def set_model_props(model: ModelProto, dict_value: Dict[str, str]) -> None:
353
+ set_metadata_props(model, dict_value)
330
354
 
331
355
 
332
356
  def split_complex_to_pairs(ca: Sequence[np.complex64]) -> Sequence[int]:
@@ -362,19 +386,22 @@ def float32_to_float8e4m3( # noqa: PLR0911
362
386
  uz: bool = False,
363
387
  saturate: bool = True,
364
388
  ) -> int:
365
- """
366
- Convert a float32 value to a float8, e4m3 (as int).
367
-
368
- :param fval: float to convert
369
- :param scale: scale, divide *fval* by *scale* before casting it
370
- :param fn: no infinite values
371
- :param uz: no negative zero
372
- :param saturate: if True, any value out of range included inf becomes the maximum value,
373
- otherwise, it becomes NaN. The description of operator Cast fully describes the
374
- differences.
375
- :return: converted float
389
+ """Convert a float32 value to a float8, e4m3 (as int).
376
390
 
377
391
  See :ref:`onnx-detail-float8` for technical details.
392
+
393
+ Args:
394
+ fval: float to convert
395
+ scale: scale, divide *fval* by *scale* before casting it
396
+ fn: no infinite values
397
+ uz: no negative zero
398
+ saturate: if True, any value out of range included inf becomes
399
+ the maximum value, otherwise, it becomes NaN. The
400
+ description of operator Cast fully describes the
401
+ differences.
402
+
403
+ Returns:
404
+ converted float
378
405
  """
379
406
  if not fn:
380
407
  raise NotImplementedError(
@@ -393,47 +420,45 @@ def float32_to_float8e4m3( # noqa: PLR0911
393
420
  e = (b & 0x7F800000) >> 23 # exponent
394
421
  m = b & 0x007FFFFF # mantissa
395
422
 
396
- if e != 0:
397
- if e < 116: # noqa: PLR2004
398
- pass
399
- elif e < 120: # noqa: PLR2004
400
- # denormalized number
401
- ex = e - 119
402
- if ex >= -2: # noqa: PLR2004
403
- ret |= 1 << (2 + ex)
404
- ret |= m >> (21 - ex)
405
- elif m > 0:
406
- ret |= 1
407
- mask = 1 << (20 - ex)
408
- if m & mask and (
409
- ret & 1
410
- or m & (mask - 1) > 0
411
- or (m & mask and m & (mask << 1) and m & (mask - 1) == 0)
412
- ):
423
+ if e < 116: # noqa: PLR2004
424
+ ret = 0
425
+ elif e < 120: # noqa: PLR2004
426
+ # denormalized number
427
+ ex = e - 119
428
+ if ex >= -2: # noqa: PLR2004
429
+ ret |= 1 << (2 + ex)
430
+ ret |= m >> (21 - ex)
431
+ elif m > 0:
432
+ ret |= 1
433
+ else:
434
+ ret = 0
435
+ mask = 1 << (20 - ex)
436
+ if m & mask and (
437
+ ret & 1
438
+ or m & (mask - 1) > 0
439
+ or (m & mask and m & (mask << 1) and m & (mask - 1) == 0)
440
+ ):
441
+ # rounding
442
+ ret += 1
443
+ elif e < 135: # noqa: PLR2004
444
+ # normalized number
445
+ ex = e - 119 # 127 - 8
446
+ if ex == 0:
447
+ ret |= 0x4
448
+ ret |= m >> 21
449
+ else:
450
+ ret |= ex << 3
451
+ ret |= m >> 20
452
+ if m & 0x80000 and ((m & 0x100000) or (m & 0x7FFFF)):
453
+ if (ret & 0x7F) < 0x7F: # noqa: PLR2004
413
454
  # rounding
414
455
  ret += 1
415
- elif e < 135: # noqa: PLR2004
416
- # normalized number
417
- ex = e - 119 # 127 - 8
418
- if ex == 0:
419
- ret |= 0x4
420
- ret |= m >> 21
421
- else:
422
- ret |= ex << 3
423
- ret |= m >> 20
424
- if m & 0x80000 and ((m & 0x100000) or (m & 0x7FFFF)):
425
- if (ret & 0x7F) < 0x7F: # noqa: PLR2004
426
- # rounding
427
- ret += 1
428
- elif not saturate:
429
- return 0x80
430
- elif saturate:
431
- ret |= 0x7F # 01111110
432
- else:
433
- ret = 0x80
434
- elif m == 0:
435
- # -0
436
- ret = 0
456
+ elif not saturate:
457
+ return 0x80
458
+ elif saturate:
459
+ ret |= 0x7F # 01111110
460
+ else:
461
+ ret = 0x80
437
462
  return int(ret)
438
463
  else:
439
464
  if (b & 0x7FC00000) == 0x7FC00000: # noqa: PLR2004
@@ -495,17 +520,20 @@ def float32_to_float8e5m2( # noqa: PLR0911
495
520
  uz: bool = False,
496
521
  saturate: bool = True,
497
522
  ) -> int:
498
- """
499
- Convert a float32 value to a float8, e5m2 (as int).
500
-
501
- :param fval: float to convert
502
- :param scale: scale, divide *fval* by *scale* before casting it
503
- :param fn: no infinite values
504
- :param uz: no negative zero
505
- :param saturate: if True, any value out of range included inf becomes the maximum value,
506
- otherwise, it becomes NaN. The description of operator Cast fully describes the
507
- differences.
508
- :return: converted float
523
+ """Convert a float32 value to a float8, e5m2 (as int).
524
+
525
+ Args:
526
+ fval: float to convert
527
+ scale: scale, divide *fval* by *scale* before casting it
528
+ fn: no infinite values
529
+ uz: no negative zero
530
+ saturate: if True, any value out of range included inf becomes
531
+ the maximum value, otherwise, it becomes NaN. The
532
+ description of operator Cast fully describes the
533
+ differences.
534
+
535
+ Returns:
536
+ converted float
509
537
  """
510
538
  x = fval / scale
511
539
  b = int.from_bytes(struct.pack("<f", np.float32(x)), "little")
@@ -522,45 +550,43 @@ def float32_to_float8e5m2( # noqa: PLR0911
522
550
  e = (b & 0x7F800000) >> 23 # exponent
523
551
  m = b & 0x007FFFFF # mantissa
524
552
 
525
- if e != 0:
526
- if e < 109: # noqa: PLR2004
527
- pass
528
- elif e < 112: # noqa: PLR2004
529
- # denormalized number
530
- ex = e - 111
531
- if ex >= -1:
532
- ret |= 1 << (1 + ex)
533
- ret |= m >> (22 - ex)
534
- elif m > 0:
535
- ret |= 1
536
- mask = 1 << (21 - ex)
537
- if m & mask and (
538
- ret & 1
539
- or m & (mask - 1) > 0
540
- or (m & mask and m & (mask << 1) and m & (mask - 1) == 0)
541
- ):
553
+ if e < 109: # noqa: PLR2004
554
+ ret = 0
555
+ elif e < 112: # noqa: PLR2004
556
+ # denormalized number
557
+ ex = e - 111
558
+ if ex >= -1:
559
+ ret |= 1 << (1 + ex)
560
+ ret |= m >> (22 - ex)
561
+ elif m > 0:
562
+ ret |= 1
563
+ else:
564
+ ret = 0
565
+ mask = 1 << (21 - ex)
566
+ if m & mask and (
567
+ ret & 1
568
+ or m & (mask - 1) > 0
569
+ or (m & mask and m & (mask << 1) and m & (mask - 1) == 0)
570
+ ):
571
+ # rounding
572
+ ret += 1
573
+ elif e < 143: # noqa: PLR2004
574
+ # normalized number
575
+ ex = e - 111
576
+ ret |= ex << 2
577
+ ret |= m >> 21
578
+ if m & 0x100000 and ((m & 0xFFFFF) or (m & 0x200000)):
579
+ if (ret & 0x7F) < 0x7F: # noqa: PLR2004
542
580
  # rounding
543
581
  ret += 1
544
- elif e < 143: # noqa: PLR2004
545
- # normalized number
546
- ex = e - 111
547
- ret |= ex << 2
548
- ret |= m >> 21
549
- if m & 0x100000 and ((m & 0xFFFFF) or (m & 0x200000)):
550
- if (ret & 0x7F) < 0x7F: # noqa: PLR2004
551
- # rounding
552
- ret += 1
553
- elif not saturate:
554
- ret = 0x80
555
- elif e == 255 and m == 0: # inf # noqa: PLR2004
556
- ret = 0x80
557
- elif saturate:
558
- ret |= 0x7F # last possible number
559
- else:
560
- ret = 0x80
561
- elif m == 0:
562
- # -0
563
- ret = 0
582
+ elif not saturate:
583
+ ret = 0x80
584
+ elif e == 255 and m == 0: # inf # noqa: PLR2004
585
+ ret = 0x80
586
+ elif saturate:
587
+ ret |= 0x7F # last possible number
588
+ else:
589
+ ret = 0x80
564
590
  return int(ret)
565
591
  elif not fn and not uz:
566
592
  if (b & 0x7FC00000) == 0x7FC00000: # noqa: PLR2004
@@ -613,17 +639,44 @@ def float32_to_float8e5m2( # noqa: PLR0911
613
639
  raise NotImplementedError("fn and uz must be both False or True.")
614
640
 
615
641
 
642
+ def pack_float32_to_4bit(
643
+ array: Union[np.ndarray, Sequence], signed: bool
644
+ ) -> np.ndarray:
645
+ """Convert an array of float32 value to a 4bit data-type and pack every two concecutive elements in a byte.
646
+ See :ref:`onnx-detail-int4` for technical details.
647
+
648
+ Args:
649
+ array: array of float to convert and pack
650
+ signed: Whether the 4 bit variant is signed or unsigned
651
+
652
+ Returns:
653
+ Packed array with size `ceil(farray.size/2)` (single dimension).
654
+ """
655
+ if not isinstance(array, np.ndarray):
656
+ array = np.asarray(array, dtype=np.float32)
657
+
658
+ array_flat = array.ravel()
659
+ is_odd_volume = np.prod(array.shape) % 2 == 1
660
+ if is_odd_volume:
661
+ array_flat = np.append(array_flat, np.array([0]))
662
+
663
+ single_func = lambda x, y: subbyte.float32x2_to_4bitx2(x, y, signed) # noqa: E731
664
+ func = np.frompyfunc(single_func, 2, 1)
665
+
666
+ arr = func(array_flat[0::2], array_flat[1::2])
667
+ return arr.astype(np.uint8) # type: ignore[no-any-return]
668
+
669
+
616
670
  def make_tensor(
617
671
  name: str, data_type: int, dims: Sequence[int], vals: Any, raw: bool = False
618
672
  ) -> TensorProto:
619
- """
620
- Make a TensorProto with specified arguments. If raw is False, this
673
+ """Make a TensorProto with specified arguments. If raw is False, this
621
674
  function will choose the corresponding proto field to store the
622
675
  values based on data_type. If raw is True, use "raw_data" proto
623
676
  field to store the values, and values should be of type bytes in
624
677
  this case.
625
678
 
626
- Arguments:
679
+ Args:
627
680
  name (string): tensor name
628
681
  data_type (int): a value such as onnx.TensorProto.FLOAT
629
682
  dims (List[int]): shape
@@ -646,8 +699,7 @@ def make_tensor(
646
699
  # Check number of vals specified equals tensor size
647
700
  expected_size = 1
648
701
  if raw:
649
- # NumPy doesn't have BFLOAT16. TENSOR_TYPE_TO_NP_TYPE maps it to float32,
650
- # which has the wrong itemsize.
702
+ # NumPy doesn't have BFLOAT16. TENSOR_TYPE_MAP maps it to float32, which has the wrong itemsize.
651
703
  if data_type == TensorProto.BFLOAT16:
652
704
  expected_size = 2
653
705
  elif data_type in (
@@ -657,6 +709,9 @@ def make_tensor(
657
709
  TensorProto.FLOAT8E5M2FNUZ,
658
710
  ):
659
711
  expected_size = 1
712
+ # NumPy doesn't have INT4. It is packed in couples to UINT8 buffers.
713
+ elif data_type in (TensorProto.UINT4, TensorProto.INT4):
714
+ expected_size = 0.5 # type: ignore[assignment]
660
715
  else:
661
716
  expected_size = np_dtype.itemsize
662
717
 
@@ -666,9 +721,14 @@ def make_tensor(
666
721
  expected_size *= d
667
722
 
668
723
  if len(vals) != expected_size:
669
- raise ValueError(
670
- f"Number of values does not match tensor's size. Expected {expected_size}, but it is {len(vals)}. "
671
- )
724
+ # padding of half a byte is acceptable for 4bit types
725
+ if not (
726
+ data_type in (TensorProto.UINT4, TensorProto.INT4)
727
+ and len(vals) == expected_size + 0.5
728
+ ):
729
+ raise ValueError(
730
+ f"Number of values does not match tensor's size. Expected {expected_size}, but it is {len(vals)}. "
731
+ )
672
732
 
673
733
  if raw:
674
734
  tensor.raw_data = vals
@@ -705,6 +765,17 @@ def make_tensor(
705
765
  np.array(vals).astype(np_dtype).flatten().tolist(),
706
766
  )
707
767
  )
768
+ elif data_type in (
769
+ TensorProto.UINT4,
770
+ TensorProto.INT4,
771
+ ):
772
+ signed = data_type == TensorProto.INT4
773
+ vals = (
774
+ pack_float32_to_4bit(vals, signed=signed)
775
+ .astype(np_dtype)
776
+ .flatten()
777
+ .tolist()
778
+ )
708
779
  elif data_type == TensorProto.BOOL:
709
780
  vals = np.array(vals).astype(int)
710
781
  elif data_type == TensorProto.STRING:
@@ -720,7 +791,7 @@ def make_sparse_tensor(
720
791
  ) -> SparseTensorProto:
721
792
  """Construct a SparseTensorProto
722
793
 
723
- Arguments:
794
+ Args:
724
795
  values (TensorProto): the values
725
796
  indices (TensorProto): the indices
726
797
  dims: the shape
@@ -740,9 +811,7 @@ def make_sequence(
740
811
  elem_type: SequenceProto.DataType,
741
812
  values: Sequence[Any],
742
813
  ) -> SequenceProto:
743
- """
744
- Make a Sequence with specified value arguments.
745
- """
814
+ """Make a Sequence with specified value arguments."""
746
815
  sequence = SequenceProto()
747
816
  sequence.name = name
748
817
  sequence.elem_type = elem_type
@@ -769,8 +838,7 @@ def make_sequence(
769
838
  def make_map(
770
839
  name: str, key_type: int, keys: List[Any], values: SequenceProto
771
840
  ) -> MapProto:
772
- """
773
- Make a Map with specified key-value pair arguments.
841
+ """Make a Map with specified key-value pair arguments.
774
842
 
775
843
  Criteria for conversion:
776
844
  - Keys and Values must have the same number of elements
@@ -803,9 +871,7 @@ def make_optional(
803
871
  elem_type: OptionalProto.DataType,
804
872
  value: Optional[Any],
805
873
  ) -> OptionalProto:
806
- """
807
- Make an Optional with specified value arguments.
808
- """
874
+ """Make an Optional with specified value arguments."""
809
875
  optional = OptionalProto()
810
876
  optional.name = name
811
877
  optional.elem_type = elem_type
@@ -997,7 +1063,6 @@ def make_tensor_type_proto(
997
1063
  shape_denotation: Optional[List[str]] = None,
998
1064
  ) -> TypeProto:
999
1065
  """Makes a Tensor TypeProto based on the data type and shape."""
1000
-
1001
1066
  type_proto = TypeProto()
1002
1067
  tensor_type_proto = type_proto.tensor_type
1003
1068
  tensor_type_proto.elem_type = elem_type
@@ -1061,7 +1126,6 @@ def make_sparse_tensor_type_proto(
1061
1126
  shape_denotation: Optional[List[str]] = None,
1062
1127
  ) -> TypeProto:
1063
1128
  """Makes a SparseTensor TypeProto based on the data type and shape."""
1064
-
1065
1129
  type_proto = TypeProto()
1066
1130
  sparse_tensor_type_proto = type_proto.sparse_tensor_type
1067
1131
  sparse_tensor_type_proto.elem_type = elem_type
@@ -1290,7 +1354,7 @@ def printable_type(t: TypeProto) -> str:
1290
1354
  s += str(", " + "x".join(map(printable_dim, t.tensor_type.shape.dim)))
1291
1355
  else:
1292
1356
  s += ", scalar"
1293
- return s
1357
+ return s # type: ignore[no-any-return]
1294
1358
  if t.WhichOneof("value") is None:
1295
1359
  return ""
1296
1360
  return f"Unknown type {t.WhichOneof('value')}"
@@ -1351,10 +1415,9 @@ def printable_node(
1351
1415
 
1352
1416
 
1353
1417
  def printable_graph(graph: GraphProto, prefix: str = "") -> str:
1354
- """
1355
- Display a GraphProto as a string.
1418
+ """Display a GraphProto as a string.
1356
1419
 
1357
- Arguments:
1420
+ Args:
1358
1421
  graph (GraphProto): the graph to display
1359
1422
  prefix (string): prefix of every line
1360
1423
 
@@ -1431,9 +1494,7 @@ def printable_graph(graph: GraphProto, prefix: str = "") -> str:
1431
1494
 
1432
1495
 
1433
1496
  def strip_doc_string(proto: google.protobuf.message.Message) -> None:
1434
- """
1435
- Empties `doc_string` field on any nested protobuf messages
1436
- """
1497
+ """Empties `doc_string` field on any nested protobuf messages"""
1437
1498
  if not isinstance(proto, google.protobuf.message.Message):
1438
1499
  raise TypeError(
1439
1500
  f"proto must be an instance of {google.protobuf.message.Message}."
@@ -1475,41 +1536,49 @@ def make_training_info(
1475
1536
 
1476
1537
  # Following functions are used for mapping
1477
1538
  def tensor_dtype_to_np_dtype(tensor_dtype: int) -> np.dtype:
1478
- """
1479
- Convert a TensorProto's data_type to corresponding numpy dtype. It can be used while making tensor.
1539
+ """Convert a TensorProto's data_type to corresponding numpy dtype. It can be used while making tensor.
1540
+
1541
+ Args:
1542
+ tensor_dtype: TensorProto's data_type
1480
1543
 
1481
- :param tensor_dtype: TensorProto's data_type
1482
- :return: numpy's data_type
1544
+ Returns:
1545
+ numpy's data_type
1483
1546
  """
1484
1547
  return mapping.TENSOR_TYPE_MAP[tensor_dtype].np_dtype
1485
1548
 
1486
1549
 
1487
1550
  def tensor_dtype_to_storage_tensor_dtype(tensor_dtype: int) -> int:
1488
- """
1489
- Convert a TensorProto's data_type to corresponding data_type for storage.
1551
+ """Convert a TensorProto's data_type to corresponding data_type for storage.
1490
1552
 
1491
- :param tensor_dtype: TensorProto's data_type
1492
- :return: data_type for storage
1553
+ Args:
1554
+ tensor_dtype: TensorProto's data_type
1555
+
1556
+ Returns:
1557
+ data_type for storage
1493
1558
  """
1494
1559
  return mapping.TENSOR_TYPE_MAP[tensor_dtype].storage_dtype
1495
1560
 
1496
1561
 
1497
1562
  def tensor_dtype_to_string(tensor_dtype: int) -> str:
1498
- """
1499
- Get the name of given TensorProto's data_type.
1563
+ """Get the name of given TensorProto's data_type.
1564
+
1565
+ Args:
1566
+ tensor_dtype: TensorProto's data_type
1500
1567
 
1501
- :param tensor_dtype: TensorProto's data_type
1502
- :return: the name of data_type
1568
+ Returns:
1569
+ the name of data_type
1503
1570
  """
1504
1571
  return mapping.TENSOR_TYPE_MAP[tensor_dtype].name
1505
1572
 
1506
1573
 
1507
1574
  def tensor_dtype_to_field(tensor_dtype: int) -> str:
1508
- """
1509
- Convert a TensorProto's data_type to corresponding field name for storage. It can be used while making tensors.
1575
+ """Convert a TensorProto's data_type to corresponding field name for storage. It can be used while making tensors.
1510
1576
 
1511
- :param tensor_dtype: TensorProto's data_type
1512
- :return: field name
1577
+ Args:
1578
+ tensor_dtype: TensorProto's data_type
1579
+
1580
+ Returns:
1581
+ field name
1513
1582
  """
1514
1583
  return mapping._STORAGE_TENSOR_TYPE_TO_FIELD[
1515
1584
  mapping.TENSOR_TYPE_MAP[tensor_dtype].storage_dtype
@@ -1517,11 +1586,13 @@ def tensor_dtype_to_field(tensor_dtype: int) -> str:
1517
1586
 
1518
1587
 
1519
1588
  def np_dtype_to_tensor_dtype(np_dtype: np.dtype) -> int:
1520
- """
1521
- Convert a numpy's dtype to corresponding tensor type. It can be used while converting numpy arrays to tensors.
1589
+ """Convert a numpy's dtype to corresponding tensor type. It can be used while converting numpy arrays to tensors.
1590
+
1591
+ Args:
1592
+ np_dtype: numpy's data_type
1522
1593
 
1523
- :param np_dtype: numpy's data_type
1524
- :return: TensorsProto's data_type
1594
+ Returns:
1595
+ TensorsProto's data_type
1525
1596
  """
1526
1597
  return cast(
1527
1598
  int,
@@ -1530,10 +1601,10 @@ def np_dtype_to_tensor_dtype(np_dtype: np.dtype) -> int:
1530
1601
 
1531
1602
 
1532
1603
  def get_all_tensor_dtypes() -> KeysView[int]:
1533
- """
1534
- Get all tensor types from TensorProto.
1604
+ """Get all tensor types from TensorProto.
1535
1605
 
1536
- :return: all tensor types from TensorProto
1606
+ Returns:
1607
+ all tensor types from TensorProto
1537
1608
  """
1538
1609
  return mapping.TENSOR_TYPE_MAP.keys()
1539
1610
 
@@ -1542,12 +1613,14 @@ _ATTRIBUTE_TYPE_TO_STR = {k: v for v, k in AttributeProto.AttributeType.items()}
1542
1613
 
1543
1614
 
1544
1615
  def _attr_type_to_str(attr_type: int) -> str:
1545
- """
1546
- Convert AttributeProto type to string.
1616
+ """Convert AttributeProto type to string.
1547
1617
 
1548
- :param attr_type: AttributeProto type.
1549
- :return: String representing the supplied attr_type.
1618
+ Args:
1619
+ attr_type: AttributeProto type.
1620
+
1621
+ Returns:
1622
+ String representing the supplied attr_type.
1550
1623
  """
1551
1624
  if attr_type in AttributeProto.AttributeType.values():
1552
- return _ATTRIBUTE_TYPE_TO_STR[attr_type]
1553
- return AttributeProto.AttributeType.keys()[0]
1625
+ return _ATTRIBUTE_TYPE_TO_STR[attr_type] # type: ignore[no-any-return]
1626
+ return AttributeProto.AttributeType.keys()[0] # type: ignore[no-any-return]