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
@@ -69,6 +69,7 @@ std::string GetElemTypeString(const TypeProto_SparseTensor& type) {
69
69
  inline bool IsOnnxDomainOp(const NodeProto& node, const std::string& op_type) {
70
70
  return (IsOnnxDomain(node.domain()) && (node.op_type() == op_type));
71
71
  }
72
+
72
73
  } // namespace
73
74
 
74
75
  template <class T>
@@ -249,13 +250,100 @@ void MaterializeSymbolicShape(TypeProto* inferred_type, SymbolTable& symbol_tabl
249
250
  }
250
251
  }
251
252
 
252
- std::string GetModelLocalFunctionsMapIdentifier(const std::string& domain, const std::string& func_name) {
253
- return domain + ":" + func_name;
253
+ std::string GetFunctionIdentifier(const FunctionProto& function) {
254
+ // Note: Models with IR version < 10 do not have the overload attribute.
255
+ // However, that will be mapped to an empty identifier.
256
+ std::string overload = function.overload();
257
+ if (overload.empty()) {
258
+ return function.domain() + ":" + function.name();
259
+ }
260
+ return function.domain() + ":" + function.name() + ":" + overload;
261
+ }
262
+
263
+ std::string GetFunctionIdentifier(const NodeProto& node) {
264
+ // Note: Models with IR version < 10 do not have the overload attribute.
265
+ // However, that will be mapped to an empty identifier.
266
+ std::string overload = node.overload();
267
+ if (overload.empty()) {
268
+ return node.domain() + ":" + node.op_type();
269
+ }
270
+ return node.domain() + ":" + node.op_type() + ":" + overload;
271
+ }
272
+
273
+ // InferredTypes: abstracts the differences between FunctionProto and GraphProto
274
+ // for inference. For GraphProto, inferred types are stored in the GraphProto
275
+ // but FunctionProto does not have a place to store inferred types. So, we
276
+ // use a temporary vector (for the duration of inference) to store these.
277
+ class InferredTypes {
278
+ public:
279
+ explicit InferredTypes(GraphProto* graph = nullptr) : graph_ptr(graph) {}
280
+
281
+ TypeProto* Add(const std::string& var_name, const TypeProto& type) {
282
+ if (graph_ptr != nullptr) {
283
+ auto* p = graph_ptr->add_value_info();
284
+ p->set_name(var_name);
285
+ *p->mutable_type() = type;
286
+ return p->mutable_type();
287
+ } else {
288
+ auto* p = new TypeProto(type);
289
+ types.push_back(p);
290
+ return p;
291
+ }
292
+ }
293
+
294
+ ~InferredTypes() {
295
+ for (auto* p : types) {
296
+ delete p;
297
+ }
298
+ }
299
+
300
+ private:
301
+ std::vector<TypeProto*> types;
302
+ GraphProto* graph_ptr;
303
+ ONNX_DISALLOW_COPY_ASSIGNMENT_AND_MOVE(InferredTypes);
304
+ };
305
+
306
+ // Initialize a DataValueMap for a called function from the DataValueMap of the caller
307
+ void BindValuesOnCall(
308
+ const DataValueMap& caller_map,
309
+ const NodeProto& caller,
310
+ DataValueMap& callee_map,
311
+ const FunctionProto& callee) {
312
+ auto num_inputs = (std::min)(caller.input_size(), callee.input_size());
313
+ for (int i = 0; i < num_inputs; ++i) {
314
+ const std::string& actual = caller.input(i);
315
+ const std::string& formal = callee.input(i);
316
+ if (!actual.empty()) {
317
+ auto it = caller_map.find(actual);
318
+ if (it != caller_map.end()) {
319
+ callee_map[formal] = it->second;
320
+ }
321
+ }
322
+ }
323
+ }
324
+
325
+ // Update a DataValueMap for a calling function from the DataValueMap of the callee
326
+ void BindValuesOnReturn(
327
+ const DataValueMap& callee_map,
328
+ const FunctionProto& callee,
329
+ DataValueMap& caller_map,
330
+ const NodeProto& caller) {
331
+ auto num_outputs = (std::min)(caller.output_size(), callee.output_size());
332
+ for (int i = 0; i < num_outputs; ++i) {
333
+ const std::string& actual = caller.output(i);
334
+ const std::string& formal = callee.output(i);
335
+ if (!actual.empty()) {
336
+ auto it = callee_map.find(formal);
337
+ if (it != callee_map.end()) {
338
+ caller_map[actual] = it->second;
339
+ }
340
+ }
341
+ }
254
342
  }
255
343
 
256
344
  class ShapeInferenceImplBase {
257
345
  public:
258
- void updateType(const std::string& name, TypeProto* inferred_type) {
346
+ void UpdateType(const std::string& name, TypeProto* inferred_type) {
259
347
  if (inferred_type->value_case() == TypeProto::ValueCase::VALUE_NOT_SET) {
260
348
  return;
261
349
  }
@@ -268,14 +356,10 @@ class ShapeInferenceImplBase {
268
356
  // then check for compatibility with the inferred
269
357
  // information. Otherwise, initialize it in an empty state.
270
358
  auto iter = value_types_by_name.find(name);
271
- TypeProto* existing_type = nullptr;
272
359
  if (iter != value_types_by_name.end()) {
273
- existing_type = iter->second;
360
+ mergeShapesAndTypes(*inferred_type, iter->second);
274
361
  } else {
275
- // Create a new value_info if defined type does not exist
276
- auto vi = g.add_value_info(); // TODO: clean this up
277
- vi->set_name(name);
278
- existing_type = vi->mutable_type();
362
+ value_types_by_name[name] = inferred_types.Add(name, *inferred_type);
279
363
  // For undefined output type, update both value_info and output for now
280
364
  // Update existing output with undefined type: assign inferred type to it
281
365
  iter = undefined_value_types_by_name.find(name);
@@ -283,16 +367,9 @@ class ShapeInferenceImplBase {
283
367
  *iter->second = *inferred_type;
284
368
  }
285
369
  }
286
-
287
- // TODO: cleanup this by merging with previous if-else
288
- // Now we can merge pre-existing and inferred info
289
- mergeShapesAndTypes(*inferred_type, existing_type);
290
-
291
- // Make merged info available to further inference.
292
- value_types_by_name[name] = existing_type;
293
370
  }
294
371
 
295
- void updateType(ValueInfoProto& valueInfo) {
372
+ void UpdateType(ValueInfoProto& valueInfo) {
296
373
  if (valueInfo.has_type()) {
297
374
  value_types_by_name[valueInfo.name()] = valueInfo.mutable_type();
298
375
  } else {
@@ -301,15 +378,13 @@ class ShapeInferenceImplBase {
301
378
  }
302
379
 
303
380
  template <typename T>
304
- void addTemporaryConstant(const std::string& name, const T& vector) {
381
+ void AddTemporaryConstant(const std::string& name, const T& vector) {
305
382
  input_data_by_name_holder[name] = ToTensor(vector);
306
383
  input_data_by_name[name] = &input_data_by_name_holder[name];
307
384
  }
308
385
 
309
- void preprocess(const NodeProto& n) {
310
- if (checker::check_is_experimental_op(n)) {
311
- has_experimental_op = true;
312
- } else if (IsOnnxDomainOp(n, "Constant") && n.output().size() == 1) {
386
+ void ProcessConstant(const NodeProto& n) {
387
+ if (IsOnnxDomainOp(n, "Constant") && n.output().size() == 1) {
313
388
  const std::string& output_name = n.output(0);
314
389
  for (const auto& attr : n.attribute()) {
315
390
  if (attr.name() == "value") {
@@ -329,22 +404,22 @@ class ShapeInferenceImplBase {
329
404
  switch (attr.type()) {
330
405
  case AttributeProto::INTS: {
331
406
  std::vector<int64_t> ints{attr.ints().begin(), attr.ints().end()};
332
- addTemporaryConstant(output_name, ints);
407
+ AddTemporaryConstant(output_name, ints);
333
408
  break;
334
409
  }
335
410
  case AttributeProto::INT: {
336
411
  std::vector<int64_t> ints({attr.i()});
337
- addTemporaryConstant(output_name, ints);
412
+ AddTemporaryConstant(output_name, ints);
338
413
  break;
339
414
  }
340
415
  case AttributeProto::FLOATS: {
341
416
  std::vector<float> floats{attr.floats().begin(), attr.floats().end()};
342
- addTemporaryConstant(output_name, floats);
417
+ AddTemporaryConstant(output_name, floats);
343
418
  break;
344
419
  }
345
420
  case AttributeProto::FLOAT: {
346
421
  std::vector<float> floats({attr.f()});
347
- addTemporaryConstant(output_name, floats);
422
+ AddTemporaryConstant(output_name, floats);
348
423
  break;
349
424
  }
350
425
  default:
@@ -355,57 +430,19 @@ class ShapeInferenceImplBase {
355
430
  }
356
431
  }
357
432
 
358
- // Initialize a DataValueMap for a called function from the DataValueMap of the caller
359
- void bindValuesOnCall(
360
- const DataValueMap& caller_map,
361
- const NodeProto& caller,
362
- DataValueMap& callee_map,
363
- const FunctionProto& callee) {
364
- auto num_inputs = (std::min)(caller.input_size(), callee.input_size());
365
- for (int i = 0; i < num_inputs; ++i) {
366
- const std::string& actual = caller.input(i);
367
- const std::string& formal = callee.input(i);
368
- if (!actual.empty()) {
369
- auto it = caller_map.find(actual);
370
- if (it != caller_map.end()) {
371
- callee_map[formal] = it->second;
372
- }
373
- }
374
- }
375
- }
376
-
377
- // Update a DataValueMap for a calling function from the DataValueMap of the callee
378
- void bindValuesOnReturn(
379
- const DataValueMap& callee_map,
380
- const FunctionProto& callee,
381
- DataValueMap& caller_map,
382
- const NodeProto& caller) {
383
- auto num_outputs = (std::min)(caller.output_size(), callee.output_size());
384
- for (int i = 0; i < num_outputs; ++i) {
385
- const std::string& actual = caller.output(i);
386
- const std::string& formal = callee.output(i);
387
- if (!actual.empty()) {
388
- auto it = callee_map.find(formal);
389
- if (it != callee_map.end()) {
390
- caller_map[actual] = it->second;
391
- }
392
- }
393
- }
394
- }
395
-
396
- void processCall(const NodeProto& caller, const FunctionProto& callee, InferenceContext& ctx) {
433
+ void ProcessCall(const NodeProto& caller, const FunctionProto& callee, InferenceContext& ctx) {
397
434
  DataValueMap callee_value_map;
398
435
  if (generated_shape_data_by_name != nullptr) {
399
- bindValuesOnCall(*generated_shape_data_by_name, caller, callee_value_map, callee);
436
+ BindValuesOnCall(*generated_shape_data_by_name, caller, callee_value_map, callee);
400
437
  }
401
438
  InferShapeForFunctionNode(
402
439
  callee, schema_registry, ctx, options, model_local_functions_map, symbol_table, &callee_value_map);
403
440
  if (generated_shape_data_by_name != nullptr) {
404
- bindValuesOnReturn(callee_value_map, callee, *generated_shape_data_by_name, caller);
441
+ BindValuesOnReturn(callee_value_map, callee, *generated_shape_data_by_name, caller);
405
442
  }
406
443
  }
407
444
 
408
- void process(NodeProto& n) {
445
+ void Process(NodeProto& n) {
409
446
  // Resolve domain for node
410
447
  auto dit = opset_imports.find(n.domain());
411
448
  if (dit == opset_imports.end()) {
@@ -439,15 +476,16 @@ class ShapeInferenceImplBase {
439
476
  if (schema->has_type_and_shape_inference_function()) {
440
477
  schema->GetTypeAndShapeInferenceFunction()(ctx);
441
478
  } else if (schema->HasFunction()) {
442
- processCall(n, *(schema->GetFunction()), ctx);
443
- } else {
444
- // Continue with inference for remaining nodes
445
- return;
479
+ ProcessCall(n, *(schema->GetFunction()), ctx);
480
+ } // else: rely on schema->CheckInputOutputType() down below.
481
+ // check type-constraints specified via type variables
482
+ if (options.check_type) {
483
+ schema->CheckInputOutputType(ctx);
446
484
  }
447
485
  } else if (model_local_functions_map.size() > 0) {
448
- auto iter = model_local_functions_map.find(GetModelLocalFunctionsMapIdentifier(n.domain(), n.op_type()));
486
+ auto iter = model_local_functions_map.find(GetFunctionIdentifier(n));
449
487
  if (iter != model_local_functions_map.end()) {
450
- processCall(n, *(iter->second), ctx);
488
+ ProcessCall(n, *(iter->second), ctx);
451
489
  } else {
452
490
  has_unsupported_op = true;
453
491
  return;
@@ -456,34 +494,15 @@ class ShapeInferenceImplBase {
456
494
  has_unsupported_op = true;
457
495
  return;
458
496
  }
459
- }
460
- ONNX_CATCH(const ONNX_NAMESPACE::InferenceError& ex) {
461
- ONNX_HANDLE_EXCEPTION([&]() {
462
- // onnx does not support unsupported/experimental operators
463
- // so it won't consider it as an error
464
- if (!has_unsupported_op && !has_experimental_op) {
465
- inference_errors.push_back(GetErrorWithNodeInfo(n, ex));
466
- }
467
- });
468
- // Continue with inference for remaining nodes
469
- return;
470
- }
471
-
472
- ONNX_TRY {
473
- // check the type-equality for input and output
474
- if (options.check_type && schema) {
475
- schema->CheckInputOutputType(ctx);
476
- }
477
-
478
497
  for (int i = 0; i < n.output_size(); ++i) {
479
498
  // skip type and shape propagation for missing optional outputs.
480
499
  if (!n.output(i).empty())
481
- updateType(n.output(i), ctx.getOutputType(i));
500
+ UpdateType(n.output(i), ctx.getOutputType(i));
482
501
  }
483
-
484
- preprocess(n);
485
-
486
- // If data propagation is enabled, propagate shape data if it exists.
502
+ // Constant values are tracked to improve inference/checking for subsequent nodes.
503
+ ProcessConstant(n);
504
+ // If data-propagation is enabled, partial-evaluation (aka data-propagation) is performed
505
+ // to improve inference/checking for subsequent nodes.
487
506
  if (options.enable_data_propagation && schema && schema->has_data_propagation_function()) {
488
507
  if (generated_shape_data_by_name == nullptr) {
489
508
  fail_shape_inference(
@@ -494,14 +513,32 @@ class ShapeInferenceImplBase {
494
513
  schema->GetDataPropagationFunction()(data_propagation_ctx);
495
514
  }
496
515
  }
516
+ ONNX_CATCH(const ONNX_NAMESPACE::InferenceError& ex) {
517
+ ONNX_HANDLE_EXCEPTION([&]() {
518
+ // Note: The following special handling is to accommodate custom-ops. Ideally, custom-ops
519
+ // should be registered with a schema in the schema registry, allowing inference to handle
520
+ // them. As things stand, this special handling is somewhat fragile and is not fully
521
+ // general either. Eg., a custom-op suppresses error-messages for subsequent nodes, but
522
+ // this does not work across graphs. If special handling is required, a user-option may
523
+ // be a better way to do it. The fragility comes from the fact that the types of the
524
+ // returned-values of the custom-op are unknown, and subsequent node-level inference
525
+ // may fail because of this.
526
+ if (!has_unsupported_op) {
527
+ inference_errors.push_back(GetErrorWithNodeInfo(n, ex));
528
+ }
529
+ });
530
+ }
497
531
  ONNX_CATCH(const std::runtime_error& err) {
532
+ // TODO: Fix this. Unclear if this should be remapped to a shape inference error.
533
+ // Need to rationalize the different types of exceptions that can be thrown.
534
+ // See: https://github.com/onnx/onnx/pull/5519
498
535
  ONNX_HANDLE_EXCEPTION([&]() { fail_shape_inference(GetErrorWithNodeInfo(n, err)); });
499
536
  }
500
537
  }
501
538
 
502
539
  // TypeProto_Tensor or TypeProto_SparseTensor
503
540
  template <typename T>
504
- void processInitializer(
541
+ void ProcessInitializer(
505
542
  const std::string& name,
506
543
  const T& tensorValue,
507
544
  TypeProto& initializer_type,
@@ -523,18 +560,18 @@ class ShapeInferenceImplBase {
523
560
  }
524
561
  }
525
562
 
526
- void process(GraphProto& graph) {
563
+ void Process(GraphProto& graph) {
527
564
  if (symbol_table) {
528
565
  TraverseGraphsToAddExistingSymbols(graph, *symbol_table);
529
566
  }
530
567
  for (auto& vi : *graph.mutable_value_info()) {
531
- updateType(vi);
568
+ UpdateType(vi);
532
569
  }
533
570
  for (auto& vi : *graph.mutable_input()) {
534
- updateType(vi);
571
+ UpdateType(vi);
535
572
  }
536
573
  for (auto& vi : *graph.mutable_output()) {
537
- updateType(vi);
574
+ UpdateType(vi);
538
575
  }
539
576
  for (const auto& tp : graph.initializer()) {
540
577
  TypeProto initializer_type;
@@ -545,7 +582,7 @@ class ShapeInferenceImplBase {
545
582
  for (int i = 0; i < tp.dims_size(); ++i) {
546
583
  shape->add_dim()->set_dim_value(tp.dims(i));
547
584
  }
548
- processInitializer(tp.name(), tp, initializer_type, input_data_by_name);
585
+ ProcessInitializer(tp.name(), tp, initializer_type, input_data_by_name);
549
586
  }
550
587
  for (const auto& tp : graph.sparse_initializer()) {
551
588
  TypeProto initializer_type;
@@ -556,20 +593,20 @@ class ShapeInferenceImplBase {
556
593
  for (int i = 0; i < tp.dims_size(); ++i) {
557
594
  shape->add_dim()->set_dim_value(tp.dims(i));
558
595
  }
559
- processInitializer(tp.values().name(), tp, initializer_type, input_sparse_data_by_name);
596
+ ProcessInitializer(tp.values().name(), tp, initializer_type, input_sparse_data_by_name);
560
597
  }
561
598
  for (auto& n : *graph.mutable_node()) {
562
- process(n);
599
+ Process(n);
563
600
  }
564
601
  }
565
602
 
566
- void process(const NodeProto& n, internal::AttributeBinder& attribute_binder) {
603
+ void Process(const NodeProto& n, internal::AttributeBinder& attribute_binder) {
567
604
  NodeProto copy_n(n);
568
605
  attribute_binder.VisitNode(&copy_n);
569
- process(copy_n);
606
+ Process(copy_n);
570
607
  }
571
608
 
572
- void process(const FunctionProto& func_proto, InferenceContext& ctx) {
609
+ void Process(const FunctionProto& func_proto, InferenceContext& ctx) {
573
610
  // Ensure Constant node tensor-attributes are copied
574
611
  bool old_reuse_constant_tensors = reuse_constant_tensors;
575
612
  reuse_constant_tensors = false;
@@ -618,7 +655,7 @@ class ShapeInferenceImplBase {
618
655
 
619
656
  internal::AttributeBinder attribute_binder(attr_map);
620
657
  for (auto& n : func_proto.node()) {
621
- process(n, attribute_binder);
658
+ Process(n, attribute_binder);
622
659
  }
623
660
 
624
661
  for (int i = 0; i < func_proto.output_size(); ++i) {
@@ -638,7 +675,7 @@ class ShapeInferenceImplBase {
638
675
 
639
676
  public:
640
677
  ShapeInferenceImplBase(
641
- GraphProto* g_in,
678
+ GraphProto* graph, // nullptr for FunctionProto inference
642
679
  const std::unordered_map<std::string, TypeProto*>& outer_scope_value_types_by_name_in,
643
680
  const std::unordered_map<std::string, int>& opset_imports_in,
644
681
  const ShapeInferenceOptions& options_in,
@@ -648,7 +685,7 @@ class ShapeInferenceImplBase {
648
685
  DataValueMap* generated_shape_data_by_name_in = nullptr,
649
686
  const int ir_version_in = IR_VERSION // default the latest one
650
687
  )
651
- : g(*g_in),
688
+ : inferred_types(graph),
652
689
  value_types_by_name(outer_scope_value_types_by_name_in),
653
690
  opset_imports(opset_imports_in),
654
691
  options(options_in),
@@ -671,7 +708,7 @@ class ShapeInferenceImplBase {
671
708
  }
672
709
  }
673
710
 
674
- void finalizeShapeInference() {
711
+ void FinalizeShapeInference() {
675
712
  auto& errors = getErrors();
676
713
  // Throw shape inference error if any. Error mode right now only supports 0 and 1.
677
714
  // When set to 0, any node level shape inference errors are not thrown. This is to support backward compatiblity
@@ -691,7 +728,7 @@ class ShapeInferenceImplBase {
691
728
  }
692
729
 
693
730
  private:
694
- GraphProto& g;
731
+ InferredTypes inferred_types;
695
732
  std::unordered_map<std::string, TypeProto*> value_types_by_name;
696
733
  const std::unordered_map<std::string, int>& opset_imports;
697
734
 
@@ -708,7 +745,6 @@ class ShapeInferenceImplBase {
708
745
  std::unordered_map<std::string, TensorProto> input_data_by_name_holder;
709
746
  std::unordered_map<std::string, const SparseTensorProto*> input_sparse_data_by_name;
710
747
 
711
- bool has_experimental_op = false;
712
748
  bool has_unsupported_op = false;
713
749
 
714
750
  std::vector<std::string> inference_errors;
@@ -745,8 +781,8 @@ static void InferShapesImpl(
745
781
  schema_registry,
746
782
  generated_shape_data_by_name,
747
783
  ir_version);
748
- base.process(*g);
749
- base.finalizeShapeInference();
784
+ base.Process(*g);
785
+ base.FinalizeShapeInference();
750
786
  }
751
787
 
752
788
  // Either ModelProto or FunctionProto
@@ -785,8 +821,7 @@ void InferShapes(
785
821
  SymbolTableImpl symbol_table;
786
822
  ModelLocalFunctionsMap model_local_functions_by_id;
787
823
  for (const auto& function_proto : m.functions()) {
788
- model_local_functions_by_id.insert(
789
- {GetModelLocalFunctionsMapIdentifier(function_proto.domain(), function_proto.name()), &function_proto});
824
+ model_local_functions_by_id.insert({GetFunctionIdentifier(function_proto), &function_proto});
790
825
  }
791
826
  InferShapesImpl(
792
827
  m.mutable_graph(),
@@ -832,9 +867,8 @@ void InferShapeForFunctionNode(
832
867
  const std::unordered_map<std::string, const FunctionProto*>& model_local_functions_map,
833
868
  SymbolTable* symbol_table,
834
869
  DataValueMap* generated_shape_data_by_name) {
835
- GraphProto g;
836
870
  ShapeInferenceImplBase base(
837
- &g,
871
+ nullptr, // no graph
838
872
  {}, // outer_scope_value_types_by_name
839
873
  func_opset_imports,
840
874
  options,
@@ -842,8 +876,8 @@ void InferShapeForFunctionNode(
842
876
  model_local_functions_map,
843
877
  schema_registry,
844
878
  generated_shape_data_by_name);
845
- base.process(func_proto, ctx);
846
- base.finalizeShapeInference();
879
+ base.Process(func_proto, ctx);
880
+ base.FinalizeShapeInference();
847
881
  }
848
882
 
849
883
  void InferShapeForFunctionNode(
@@ -953,9 +987,8 @@ std::vector<TypeProto> InferFunctionOutputTypes(
953
987
  ShapeInferenceOptions options{true, 1, false};
954
988
  FunctionInferenceContext ctx(function_proto, input_types, attributes, options);
955
989
  auto opset_imports = GetOpsetImportsFromProto(function_proto);
956
- GraphProto g;
957
990
  ShapeInferenceImplBase base(
958
- &g,
991
+ nullptr, // no graph
959
992
  {}, // outer_scope_value_types_by_name
960
993
  opset_imports,
961
994
  options,
@@ -963,8 +996,8 @@ std::vector<TypeProto> InferFunctionOutputTypes(
963
996
  /*model_local_functions_map*/ {},
964
997
  /*schema_registry*/ OpSchemaRegistry::Instance(),
965
998
  /*generated_shape_data_by_name*/ nullptr);
966
- base.process(function_proto, ctx);
967
- base.finalizeShapeInference();
999
+ base.Process(function_proto, ctx);
1000
+ base.FinalizeShapeInference();
968
1001
  return ctx.popOutputTypes();
969
1002
  }
970
1003
 
onnx/shape_inference.py CHANGED
@@ -32,11 +32,11 @@ def infer_shapes(
32
32
  bug in shape inference), and the result is unspecified.
33
33
 
34
34
  Arguments:
35
- model (Union[ModelProto, bytes], bool, bool, bool) -> ModelProto
36
- check_type (bool): Checks the type-equality for input and output
37
- strict_mode (bool): Stricter shape inference, it will throw errors if any;
38
- Otherwise, simply stop if any error
39
- data_prop (bool): Enables data propagation for limited operators to perform shape computation
35
+ model: ModelProto.
36
+ check_type: Checks the type-equality for input and output.
37
+ strict_mode: Stricter shape inference, it will throw errors if any;
38
+ Otherwise, simply stop if any error.
39
+ data_prop: Enables data propagation for limited operators to perform shape computation.
40
40
 
41
41
  Returns:
42
42
  (ModelProto) model with inferred shape information
@@ -65,9 +65,11 @@ def infer_shapes_path(
65
65
  strict_mode: bool = False,
66
66
  data_prop: bool = False,
67
67
  ) -> None:
68
- """
69
- Take model path for shape_inference same as infer_shape; it support >2GB models
70
- Directly output the inferred model to the output_path; Default is the original model path
68
+ """Take model path for shape_inference.
69
+
70
+ This function is the same as :func:`infer_shape` but supports >2GB models.
71
+ The function outputs the inferred model to the `output_path`. The original model path
72
+ is used if not specified.
71
73
  """
72
74
  if isinstance(model_path, ModelProto):
73
75
  raise TypeError(
@@ -149,8 +151,7 @@ def infer_function_output_types(
149
151
  input_types: Sequence[TypeProto],
150
152
  attributes: Sequence[AttributeProto],
151
153
  ) -> list[TypeProto]:
152
- """
153
- Apply type-and-shape-inference to given function body, with given input types
154
+ """Apply type-and-shape-inference to given function body, with given input types
154
155
  and given input attribute values.
155
156
  """
156
157
  result = C.infer_function_output_types(
onnx/subbyte.py ADDED
@@ -0,0 +1,72 @@
1
+ # Copyright (c) ONNX Project Contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from typing import Tuple, Union
6
+
7
+ import numpy as np
8
+
9
+ INT4_MIN = -8
10
+ INT4_MAX = 7
11
+ UINT4_MIN = 0
12
+ UINT4_MAX = 15
13
+
14
+
15
+ def float32_to_4bit_unpacked(
16
+ x: Union[np.ndarray, np.dtype, float], signed: bool
17
+ ) -> np.ndarray:
18
+ """Cast to 4bit via rounding and clipping (without packing).
19
+
20
+ Args:
21
+ x: element to be converted
22
+ signed: boolean, whether to convert to signed int4.
23
+
24
+ Returns:
25
+ An ndarray with a single int4 element (sign-extended to int8/uint8)
26
+ """
27
+ dtype = np.int8 if signed else np.uint8
28
+ clip_low = INT4_MIN if signed else UINT4_MIN
29
+ clip_high = INT4_MAX if signed else UINT4_MAX
30
+ if not isinstance(x, np.ndarray):
31
+ x = np.asarray(x)
32
+
33
+ return np.rint(np.clip(x, clip_low, clip_high)).astype(dtype) # type: ignore[no-any-return]
34
+
35
+
36
+ def float32x2_to_4bitx2(
37
+ val_low: np.dtype, val_high: np.dtype, signed: bool
38
+ ) -> np.ndarray:
39
+ """Cast two elements to 4bit (via rounding and clipping) and pack
40
+ to a single byte
41
+ Args:
42
+ val_low: element to be packed in the 4 LSB
43
+ val_high: element to be packed in the 4 MSB
44
+ signed: boolean, whether to convert to signed int4.
45
+
46
+ Returns:
47
+ An ndarray with a single int8/uint8 element, containing both int4 elements
48
+ """
49
+ i8_high = float32_to_4bit_unpacked(val_high, signed)
50
+ i8_low = float32_to_4bit_unpacked(val_low, signed)
51
+ return i8_high << 4 | i8_low & 0x0F # type: ignore[operator]
52
+
53
+
54
+ def unpack_single_4bitx2(
55
+ x: Union[np.ndarray, np.dtype, float], signed: bool
56
+ ) -> Tuple[np.ndarray, np.ndarray]:
57
+ unpack_signed = lambda x: np.where((x >> 3) == 0, x, x | 0xF0) # noqa: E731
58
+ """Unpack a single byte 4bitx2 to two 4 bit elements
59
+ Args:
60
+ x: Input data
61
+ signed: boolean, whether to interpret as signed int4.
62
+ Returns:
63
+ A tuple of ndarrays containing int4 elements (sign-extended to int8/uint8)
64
+ """
65
+ if not isinstance(x, np.ndarray):
66
+ x = np.asarray(x)
67
+ x_low = x & 0x0F
68
+ x_high = x >> 4
69
+ x_low = unpack_signed(x_low) if signed else x_low
70
+ x_high = unpack_signed(x_high) if signed else x_high
71
+ dtype = np.int8 if signed else np.uint8
72
+ return (x_low.astype(dtype), x_high.astype(dtype))
onnx/test/__init__.pyi ADDED
@@ -0,0 +1,6 @@
1
+ # Copyright (c) ONNX Project Contributors
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ # This file needs to be here to enable mypy type checking for this folder.
6
+ # It doesn't make this a python module for installation purposes as a __init__.pyi would.
onnx/test/checker_test.py CHANGED
@@ -1,6 +1,8 @@
1
1
  # Copyright (c) ONNX Project Contributors
2
2
 
3
3
  # SPDX-License-Identifier: Apache-2.0
4
+ import os
5
+ import tempfile
4
6
  import unittest
5
7
  from typing import Sequence
6
8
 
@@ -98,8 +100,10 @@ class TestChecker(unittest.TestCase):
98
100
  ctx.ir_version = 3
99
101
  ctx.opset_imports = {"": onnx.defs.onnx_opset_version()}
100
102
 
103
+ lex_ctx = checker.C.LexicalScopeContext()
104
+
101
105
  def check_ir_version_3(g: GraphProto) -> None:
102
- checker.check_graph(g, ctx)
106
+ checker.check_graph(g, ctx, lex_ctx)
103
107
 
104
108
  node = helper.make_node("Relu", ["X"], ["Y"], name="test")
105
109
  graph = helper.make_graph(
@@ -1056,6 +1060,22 @@ class TestChecker(unittest.TestCase):
1056
1060
  # Should not throw an error
1057
1061
  checker.check_model(model, full_check=True)
1058
1062
 
1063
+ def test_check_model_supports_unicode_path(self):
1064
+ input_tensor = helper.make_tensor_value_info(
1065
+ "input", onnx.TensorProto.FLOAT, [1]
1066
+ )
1067
+ output_tensor = helper.make_tensor_value_info(
1068
+ "output", onnx.TensorProto.FLOAT, [1]
1069
+ )
1070
+ node = helper.make_node("Identity", ["input"], ["output"])
1071
+ graph = helper.make_graph([node], "test", [input_tensor], [output_tensor])
1072
+ model = helper.make_model(graph, producer_name="test")
1073
+
1074
+ with tempfile.TemporaryDirectory() as temp_dir:
1075
+ unicode_model_path = os.path.join(temp_dir, "模型モデル모델✨.onnx")
1076
+ onnx.save(model, unicode_model_path)
1077
+ checker.check_model(unicode_model_path, full_check=True)
1078
+
1059
1079
 
1060
1080
  if __name__ == "__main__":
1061
1081
  unittest.main()