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/test/compose_test.py CHANGED
@@ -24,25 +24,19 @@ from onnx import (
24
24
 
25
25
 
26
26
  def _load_model(m_def: str) -> ModelProto:
27
- """
28
- Parses a model from a string representation, including checking the model for correctness
29
- """
27
+ """Parses a model from a string representation, including checking the model for correctness"""
30
28
  m = parser.parse_model(m_def)
31
29
  checker.check_model(m)
32
30
  return m
33
31
 
34
32
 
35
33
  def _prefixed(prefix: str, s: str) -> str:
36
- """
37
- Prefixes a string (if not empty)
38
- """
34
+ """Prefixes a string (if not empty)"""
39
35
  return prefix + s if len(s) > 0 else s
40
36
 
41
37
 
42
38
  def _get_shape(value_info: ValueInfoProto) -> List[int]:
43
- """
44
- Returns a list of integers representing the shape of the provided ValueInfoProto
45
- """
39
+ """Returns a list of integers representing the shape of the provided ValueInfoProto"""
46
40
  return [
47
41
  value_info.type.tensor_type.shape.dim[d].dim_value
48
42
  for d in range(len(value_info.type.tensor_type.shape.dim))
@@ -135,8 +129,7 @@ class TestComposeFunctions(unittest.TestCase):
135
129
  check_expectations(m1.graph, m2.graph, m3.graph)
136
130
 
137
131
  def test_case_connect_all_no_name_collision(self) -> None:
138
- """
139
- Tests a simple scenario where two models without overlapping names are merged by
132
+ """Tests a simple scenario where two models without overlapping names are merged by
140
133
  connecting all the outputs in the first models to all the inputs in the second model
141
134
  """
142
135
 
@@ -152,8 +145,7 @@ class TestComposeFunctions(unittest.TestCase):
152
145
  self._test_merge_models(M1_DEF, M2_DEF, io_map, check_expectations)
153
146
 
154
147
  def test_case_connect_same_output_twice(self) -> None:
155
- """
156
- Tests a scenario where we merge two models by connecting a single output in the first model
148
+ """Tests a scenario where we merge two models by connecting a single output in the first model
157
149
  to all the inputs in the second
158
150
  """
159
151
 
@@ -170,8 +162,7 @@ class TestComposeFunctions(unittest.TestCase):
170
162
  self._test_merge_models(M1_DEF, M2_DEF, io_map, check_expectations)
171
163
 
172
164
  def test_case_connect_same_output_drop_outputs(self) -> None:
173
- """
174
- Tests a scenario where we merge two models by connecting a single output in the first model
165
+ """Tests a scenario where we merge two models by connecting a single output in the first model
175
166
  to all the inputs in the second, while dropping the rest of the outputs in the first model
176
167
  """
177
168
 
@@ -190,11 +181,9 @@ class TestComposeFunctions(unittest.TestCase):
190
181
  )
191
182
 
192
183
  def test_case_connect_same_input_output_name(self) -> None:
193
- """
194
- Tests a scenario where we merge two models, where the inputs/outputs connected
184
+ """Tests a scenario where we merge two models, where the inputs/outputs connected
195
185
  are named exactly the same
196
186
  """
197
-
198
187
  m1_def = """
199
188
  <
200
189
  ir_version: 7,
@@ -226,10 +215,7 @@ class TestComposeFunctions(unittest.TestCase):
226
215
  self._test_merge_models(m1_def, m2_def, io_map, check_expectations)
227
216
 
228
217
  def test_case_drop_inputs_outputs(self) -> None:
229
- """
230
- Tests a scenario where we merge two models, not including some of the inputs/outputs
231
- """
232
-
218
+ """Tests a scenario where we merge two models, not including some of the inputs/outputs"""
233
219
  m1_def = """
234
220
  <
235
221
  ir_version: 7,
@@ -268,11 +254,9 @@ class TestComposeFunctions(unittest.TestCase):
268
254
  )
269
255
 
270
256
  def test_case_name_collision_prefix(self) -> None:
271
- """
272
- Tests a scenario where we merge two models that have name collisions, but they
257
+ """Tests a scenario where we merge two models that have name collisions, but they
273
258
  are avoided by prefixing the models model.
274
259
  """
275
-
276
260
  m1_def = """
277
261
  <
278
262
  ir_version: 7,
@@ -297,8 +281,7 @@ class TestComposeFunctions(unittest.TestCase):
297
281
  )
298
282
 
299
283
  def test_case_connect_partially_no_name_collision(self) -> None:
300
- """
301
- Tests a scenario where two models without overlapping names are merged by
284
+ """Tests a scenario where two models without overlapping names are merged by
302
285
  connecting some outputs from the first model to some inputs in the second.
303
286
  The remaining inputs/outputs should be present in the combined model
304
287
  """
@@ -337,9 +320,7 @@ class TestComposeFunctions(unittest.TestCase):
337
320
  self.assertRaises(ValueError, compose.merge_models, m1, m2, io_map=io_map)
338
321
 
339
322
  def test_error_wrong_input_output_name(self) -> None:
340
- """
341
- Tests that providing a non existing output/input name in the io_map argument produces an error.
342
- """
323
+ """Tests that providing a non existing output/input name in the io_map argument produces an error."""
343
324
  m1, m2 = _load_model(M1_DEF), _load_model(M2_DEF)
344
325
 
345
326
  self.assertRaises(
@@ -526,33 +507,23 @@ class TestComposeFunctions(unittest.TestCase):
526
507
  self.assertEqual(_prefixed(prefix, n0.name), n1.name)
527
508
 
528
509
  def test_add_prefix_nodes(self) -> None:
529
- """
530
- Tests renaming nodes only
531
- """
510
+ """Tests renaming nodes only"""
532
511
  self._test_add_prefix(rename_nodes=True)
533
512
 
534
513
  def test_add_prefix_edges(self) -> None:
535
- """
536
- Tests prefixing nodes edges. This will also rename inputs/outputs, since the names are shared
537
- """
514
+ """Tests prefixing nodes edges. This will also rename inputs/outputs, since the names are shared"""
538
515
  self._test_add_prefix(rename_edges=True)
539
516
 
540
517
  def test_add_prefix_inputs(self) -> None:
541
- """
542
- Tests prefixing graph inputs only. Relevant node edges should be renamed as well
543
- """
518
+ """Tests prefixing graph inputs only. Relevant node edges should be renamed as well"""
544
519
  self._test_add_prefix(rename_inputs=True)
545
520
 
546
521
  def test_add_prefix_outputs(self) -> None:
547
- """
548
- Tests prefixing graph outputs only. Relevant node edges should be renamed as well
549
- """
522
+ """Tests prefixing graph outputs only. Relevant node edges should be renamed as well"""
550
523
  self._test_add_prefix(rename_outputs=True)
551
524
 
552
525
  def test_add_prefix_attribute_subgraph(self) -> None:
553
- """
554
- Tests prefixing attribute's subgraph. Relevant subgraph should be renamed as well
555
- """
526
+ """Tests prefixing attribute's subgraph. Relevant subgraph should be renamed as well"""
556
527
  C = helper.make_tensor_value_info("C", TensorProto.BOOL, [1])
557
528
  X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [None, 1])
558
529
  Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [None, 1])
@@ -597,20 +568,15 @@ class TestComposeFunctions(unittest.TestCase):
597
568
  self.assertEqual(_prefixed(prefix, output_n0), output_n1)
598
569
 
599
570
  def test_add_prefix_all(self) -> None:
600
- """
601
- Tests prefixing all names in the graph
602
- """
571
+ """Tests prefixing all names in the graph"""
603
572
  self._test_add_prefix(True, True, True, True, True, True)
604
573
 
605
574
  def test_add_prefix_inplace(self) -> None:
606
- """
607
- Tests prefixing inplace
608
- """
575
+ """Tests prefixing inplace"""
609
576
  self._test_add_prefix(inplace=True)
610
577
 
611
578
  def test_expand_out_dim(self) -> None:
612
- """
613
- Tests expanding output dimensions. The resulting graph should have the same output names,
579
+ """Tests expanding output dimensions. The resulting graph should have the same output names,
614
580
  but with one more dimension at the specified index.
615
581
  """
616
582
  m1 = _load_model(M1_DEF)
@@ -768,46 +734,34 @@ class TestComposeFunctions(unittest.TestCase):
768
734
  self.assertEqual(0, len(overlap))
769
735
 
770
736
  def test_overlapping_input_names(self) -> None:
771
- """
772
- Tests error checking when the name of the inputs overlaps
773
- """
737
+ """Tests error checking when the name of the inputs overlaps"""
774
738
  self._test_overlapping_names(inputs0=["i0", "i1"], inputs1=["i1", "i2"])
775
739
 
776
740
  def test_overlapping_output_names(self) -> None:
777
- """
778
- Tests error checking when the name of the output overlaps
779
- """
741
+ """Tests error checking when the name of the output overlaps"""
780
742
  self._test_overlapping_names(outputs0=["o0", "o1"], outputs1=["o1", "o2"])
781
743
 
782
744
  def test_overlapping_value_info_names(self) -> None:
783
- """
784
- Tests error checking when the name of value_info entries overlaps
785
- """
745
+ """Tests error checking when the name of value_info entries overlaps"""
786
746
  self._test_overlapping_names(
787
747
  value_info0=["vi0", "vi1"], value_info1=["vi1", "vi2"]
788
748
  )
789
749
 
790
750
  def test_overlapping_initializer_names(self) -> None:
791
- """
792
- Tests error checking when the name of initializer entries overlaps
793
- """
751
+ """Tests error checking when the name of initializer entries overlaps"""
794
752
  self._test_overlapping_names(
795
753
  initializer0=["init0", "init1"], initializer1=["init1", "init2"]
796
754
  )
797
755
 
798
756
  def test_overlapping_sparse_initializer_names(self) -> None:
799
- """
800
- Tests error checking when the name of sparse_initializer entries overlaps
801
- """
757
+ """Tests error checking when the name of sparse_initializer entries overlaps"""
802
758
  self._test_overlapping_names(
803
759
  sparse_initializer0=["sparse_init0", "sparse_init1"],
804
760
  sparse_initializer1=["sparse_init1", "sparse_init2"],
805
761
  )
806
762
 
807
763
  def test_overlapping_function_names(self) -> None:
808
- """
809
- Tests error checking when the name of local function entries overlaps
810
- """
764
+ """Tests error checking when the name of local function entries overlaps"""
811
765
  ops = [helper.make_opsetid("", 10), helper.make_opsetid("local", 10)]
812
766
 
813
767
  def _make_function(
@@ -944,9 +898,7 @@ class TestComposeFunctions(unittest.TestCase):
944
898
  )
945
899
 
946
900
  def test_merge_drop_unnecessary_initializers_and_value_info(self) -> None:
947
- """
948
- Tests automatic removal of initializers when merging graphs
949
- """
901
+ """Tests automatic removal of initializers when merging graphs"""
950
902
  ops = [helper.make_opsetid("", 10)]
951
903
 
952
904
  g = GraphProto()
@@ -34,7 +34,7 @@ static void InlineFunctions(ModelProto& model, const char* input, const inliner:
34
34
  inliner::InlineLocalFunctions(model, true);
35
35
  // std::cout << "After inlining:\n" << ProtoToString(model) << "\n";
36
36
 
37
- // The following will ensure basic sanity checks hold after inlining, including
37
+ // The following will ensure basic safety checks hold after inlining, including
38
38
  // absence of duplicate names (multiple assignments to same name).
39
39
  checker::check_model(model, true, true);
40
40
  }
@@ -80,6 +80,46 @@ square (x) => (y) {
80
80
  ASSERT_EQ(num_functions, 0);
81
81
  }
82
82
 
83
+ // Test that inlining processes subgraphs.
84
+ TEST(FunctionInliner, SubgraphTest) {
85
+ const char* code = R"ONNX(
86
+ <
87
+ ir_version: 8,
88
+ opset_import: [ "" : 10, "local" : 1 ]
89
+ >
90
+ agraph (bool cond, float[N] X) => (float[N] Y)
91
+ {
92
+ Y = If (cond) <
93
+ then_branch = then_graph () => (y) {
94
+ y = local.square (X)
95
+ },
96
+ else_branch = else_graph () => (y) {
97
+ y = local.square (X)
98
+ }
99
+ >
100
+ }
101
+
102
+ <
103
+ opset_import: [ "" : 10 ],
104
+ domain: "local",
105
+ doc_string: "Function square."
106
+ >
107
+ square (x) => (y) {
108
+ y = Mul (x, x)
109
+ }
110
+ )ONNX";
111
+
112
+ ModelProto model;
113
+ InlineFunctions(model, code);
114
+ auto& if_node = model.graph().node(0);
115
+ auto& graph1 = if_node.attribute(0).g();
116
+ ASSERT_EQ(graph1.node(0).op_type(), "Mul");
117
+ auto& graph2 = if_node.attribute(1).g();
118
+ ASSERT_EQ(graph2.node(0).op_type(), "Mul");
119
+ auto num_functions = model.functions_size();
120
+ ASSERT_EQ(num_functions, 0);
121
+ }
122
+
83
123
  TEST(FunctionInliner, Nested) {
84
124
  const char* code = R"ONNX(
85
125
  <ir_version: 8, opset_import: [ "" : 17, "local" : 1 ]>
@@ -132,6 +172,41 @@ foo (x) => (y) {
132
172
  InlineFunctions(model, code);
133
173
  }
134
174
 
175
+ TEST(FunctionInliner, ValueInfoPropagation) {
176
+ const char* code = R"ONNX(
177
+ <ir_version: 10, opset_import: [ "" : 17, "local" : 1 ]>
178
+ agraph (float[N] X) => (float[N] Y)
179
+ {
180
+ result = local.foo (X)
181
+ Y = Abs (result)
182
+ }
183
+
184
+ <opset_import: [ "" : 17, "local" : 1 ], domain: "local">
185
+ foo (x) => (y)
186
+ <float[N] temp> {
187
+ temp = Add(x, x)
188
+ y = Neg (temp)
189
+ }
190
+ )ONNX";
191
+
192
+ ModelProto model;
193
+ InlineFunctions(model, code);
194
+ // Check that valueinfo is propagated fron function to main graph.
195
+ auto& graph = model.graph();
196
+ auto& temp_new_name = graph.node(0).output(0);
197
+ auto& valueinfos = graph.value_info();
198
+ for (auto& valueinfo : valueinfos) {
199
+ if (valueinfo.name() == temp_new_name) {
200
+ ASSERT_TRUE(valueinfo.has_type());
201
+ ASSERT_TRUE(valueinfo.type().has_tensor_type());
202
+ ASSERT_TRUE(valueinfo.type().tensor_type().has_shape());
203
+ ASSERT_TRUE(valueinfo.type().tensor_type().shape().dim_size() == 1);
204
+ return;
205
+ }
206
+ }
207
+ ASSERT_TRUE(false) << "ValueInfo not found";
208
+ }
209
+
135
210
  TEST(FunctionInliner, TwoCallsToSameFunction) {
136
211
  const char* code = R"ONNX(
137
212
  <ir_version: 8, opset_import: [ "" : 17, "local" : 1 ]>
@@ -0,0 +1,60 @@
1
+ // Copyright (c) ONNX Project Contributors
2
+
3
+ /*
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ #include <iostream>
8
+
9
+ #include "gtest/gtest.h"
10
+ #include "onnx/common/ir.h"
11
+ #include "onnx/common/ir_pb_converter.h"
12
+ #include "onnx/defs/printer.h"
13
+
14
+ namespace ONNX_NAMESPACE {
15
+ namespace Test {
16
+
17
+ static bool IsValidIdentifier(const std::string& name) {
18
+ if (name.empty()) {
19
+ return false;
20
+ }
21
+ if (!isalpha(name[0]) && name[0] != '_') {
22
+ return false;
23
+ }
24
+ for (size_t i = 1; i < name.size(); ++i) {
25
+ if (!isalnum(name[i]) && name[i] != '_') {
26
+ return false;
27
+ }
28
+ }
29
+ return true;
30
+ }
31
+
32
+ TEST(IR, ValidIdentifierTest) {
33
+ Graph* g = new Graph();
34
+ g->setName("test");
35
+ Value* x = g->addInput();
36
+ x->setUniqueName("x");
37
+ x->setElemType(ONNX_NAMESPACE::TensorProto_DataType_FLOAT);
38
+ x->setSizes({Dimension("M"), Dimension("N")});
39
+ Node* node1 = g->create(kNeg, 1);
40
+ node1->addInput(x);
41
+ g->appendNode(node1);
42
+ Value* temp1 = node1->outputs()[0];
43
+ Node* node2 = g->create(kNeg, 1);
44
+ node2->addInput(temp1);
45
+ g->appendNode(node2);
46
+ Value* y = node2->outputs()[0];
47
+ g->registerOutput(y);
48
+
49
+ ModelProto model;
50
+ ExportModelProto(&model, std::shared_ptr<Graph>(g));
51
+
52
+ for (auto& node : model.graph().node()) {
53
+ for (auto& name : node.output()) {
54
+ EXPECT_TRUE(IsValidIdentifier(name));
55
+ }
56
+ }
57
+ }
58
+
59
+ } // namespace Test
60
+ } // namespace ONNX_NAMESPACE
@@ -363,6 +363,86 @@ f (y, z) => (w)
363
363
  EXPECT_EQ(fp.opset_import_size(), 1);
364
364
  }
365
365
 
366
+ TEST(ParserTest, FunctionValueInfoTest) {
367
+ const char* code = R"ONNX(
368
+ <
369
+ opset_import: [ "" : 10 ],
370
+ domain: "ai.onnx.ml",
371
+ doc_string: "A function test case."
372
+ >
373
+ f (float[N] y, float[N] z) => (float[N] w)
374
+ {
375
+ x = Add(y, z)
376
+ w = Mul(x, y)
377
+ }
378
+ )ONNX";
379
+
380
+ FunctionProto fp;
381
+ Parse(fp, code);
382
+
383
+ EXPECT_EQ(fp.input_size(), 2);
384
+ EXPECT_EQ(fp.output_size(), 1);
385
+ ASSERT_EQ(fp.value_info_size(), 3);
386
+ EXPECT_EQ(fp.value_info(0).name(), "y");
387
+ EXPECT_EQ(fp.value_info(1).name(), "z");
388
+ EXPECT_EQ(fp.value_info(2).name(), "w");
389
+ }
390
+
391
+ TEST(ParserTest, FunctionValueInfoTest2) {
392
+ const char* code = R"ONNX(
393
+ <
394
+ opset_import: [ "" : 10 ],
395
+ domain: "ai.onnx.ml",
396
+ doc_string: "A function test case."
397
+ >
398
+ f (float[N] y, float[N] z) => (float[N] w)
399
+ <float[N] x>
400
+ {
401
+ x = Add(y, z)
402
+ w = Mul(x, y)
403
+ }
404
+ )ONNX";
405
+
406
+ FunctionProto fp;
407
+ Parse(fp, code);
408
+
409
+ EXPECT_EQ(fp.input_size(), 2);
410
+ EXPECT_EQ(fp.value_info_size(), 4);
411
+ ASSERT_EQ(fp.output_size(), 1);
412
+ EXPECT_EQ(fp.value_info(0).name(), "y");
413
+ EXPECT_EQ(fp.value_info(1).name(), "z");
414
+ EXPECT_EQ(fp.value_info(2).name(), "w");
415
+ EXPECT_EQ(fp.value_info(3).name(), "x");
416
+ }
417
+
418
+ TEST(ParserTest, FunctionValueInfoTest3) {
419
+ const char* code = R"ONNX(
420
+ <
421
+ opset_import: [ "" : 10 ],
422
+ domain: "ai.onnx.ml",
423
+ doc_string: "A function test case."
424
+ >
425
+ f (float[N] y, z) => (float[N] w)
426
+ <float[N] x, float[N] t>
427
+ {
428
+ x = Add(y, z)
429
+ t = Add(x, x)
430
+ w = Mul(t, y)
431
+ }
432
+ )ONNX";
433
+
434
+ FunctionProto fp;
435
+ Parse(fp, code);
436
+
437
+ EXPECT_EQ(fp.input_size(), 2);
438
+ ASSERT_EQ(fp.value_info_size(), 4);
439
+ EXPECT_EQ(fp.output_size(), 1);
440
+ EXPECT_EQ(fp.value_info(0).name(), "y");
441
+ EXPECT_EQ(fp.value_info(1).name(), "w");
442
+ EXPECT_EQ(fp.value_info(2).name(), "x");
443
+ EXPECT_EQ(fp.value_info(3).name(), "t");
444
+ }
445
+
366
446
  TEST(ParserTest, InitializerTest) {
367
447
  const char* code = R"ONNX(
368
448
  agraph (float y = {1.0}, float[N] z) => (float[N] w)
@@ -557,5 +637,31 @@ TEST(ParserTest, TypesModelTest2) {
557
637
  CheckModel(code);
558
638
  }
559
639
 
640
+ TEST(ParserTest, ExternalDataTest) {
641
+ const char* code = R"ONNX(
642
+ agraph (float y = {1.0}, float[N] z) => (w) <
643
+ float[3, 2] m1 = ["location": "weight_1.bin", "offset": "17"],
644
+ float[2, 1] m2 = {1.0, 2.0}
645
+ >
646
+ {
647
+ x = Add(y, z)
648
+ m = Mul(m1, m1)
649
+ }
650
+ )ONNX";
651
+
652
+ GraphProto graph;
653
+ Parse(graph, code);
654
+
655
+ EXPECT_EQ(graph.input_size(), 2);
656
+ EXPECT_EQ(graph.output_size(), 1);
657
+ EXPECT_EQ(graph.initializer_size(), 3); // m1, m2
658
+ EXPECT_EQ(graph.value_info_size(), 0); // x
659
+ EXPECT_EQ(graph.initializer().Get(1).data_location(), TensorProto_DataLocation::TensorProto_DataLocation_EXTERNAL);
660
+ EXPECT_EQ(graph.initializer().Get(1).external_data().Get(0).key(), "location");
661
+ EXPECT_EQ(graph.initializer().Get(1).external_data().Get(0).value(), "weight_1.bin");
662
+ EXPECT_EQ(graph.initializer().Get(1).external_data().Get(1).key(), "offset");
663
+ EXPECT_EQ(graph.initializer().Get(1).external_data().Get(1).value(), "17");
664
+ }
665
+
560
666
  } // namespace Test
561
667
  } // namespace ONNX_NAMESPACE
@@ -25,8 +25,7 @@ class TestFunction(unittest.TestCase):
25
25
  )
26
26
 
27
27
  def test_extract_model_with_local_function(self) -> None:
28
- r"""
29
- # 1. build a model with graph below. extract models with output combinations
28
+ r"""# 1. build a model with graph below. extract models with output combinations
30
29
  # 2. validate extracted models' local functions
31
30
  #
32
31
  # model graph:
@@ -53,7 +52,6 @@ class TestFunction(unittest.TestCase):
53
52
  # c
54
53
  #
55
54
  """
56
-
57
55
  # function common
58
56
  func_domain = "local"
59
57
  func_opset_imports = [onnx.helper.make_opsetid("", 14)]
onnx/test/helper_test.py CHANGED
@@ -3,6 +3,7 @@
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
5
 
6
+ import itertools
6
7
  import random
7
8
  import struct
8
9
  import unittest
@@ -11,6 +12,7 @@ from typing import Any, List, Tuple
11
12
  import numpy as np
12
13
  import parameterized
13
14
  import pytest
15
+ import version_utils
14
16
 
15
17
  from onnx import (
16
18
  AttributeProto,
@@ -25,6 +27,7 @@ from onnx import (
25
27
  helper,
26
28
  numpy_helper,
27
29
  )
30
+ from onnx.reference.op_run import to_array_extended
28
31
 
29
32
 
30
33
  class TestHelperAttributeFunctions(unittest.TestCase):
@@ -403,11 +406,13 @@ class TestHelperNodeFunctions(unittest.TestCase):
403
406
  test([("", 18)], 8)
404
407
  test([("", 19)], 9)
405
408
  test([("", 20)], 9)
409
+ test([("", 21)], 10)
406
410
  # standard opset can be referred to using empty-string or "ai.onnx"
407
411
  test([("ai.onnx", 9)], 4)
408
412
  test([("ai.onnx.ml", 2)], 6)
409
413
  test([("ai.onnx.ml", 3)], 8)
410
414
  test([("ai.onnx.ml", 4)], 9)
415
+ test([("ai.onnx.ml", 5)], 10)
411
416
  test([("ai.onnx.training", 1)], 7)
412
417
  # helper should pick *max* IR version required from all opsets specified.
413
418
  test([("", 10), ("ai.onnx.ml", 2)], 6)
@@ -486,10 +491,13 @@ class TestHelperTensorFunctions(unittest.TestCase):
486
491
 
487
492
  def test_make_float8e4m3fnuz_tensor(self) -> None:
488
493
  y = helper.make_tensor(
489
- "zero_point", TensorProto.FLOAT8E4M3FNUZ, [5], [0, 0.5, 1, 50000, 10.1]
494
+ "zero_point",
495
+ TensorProto.FLOAT8E4M3FNUZ,
496
+ [7],
497
+ [0, 0.5, 1, 50000, 10.1, -0.00001, 0.00001],
490
498
  )
491
499
  ynp = numpy_helper.to_array(y)
492
- expected = np.array([0, 0.5, 1, 240, 10], dtype=np.float32)
500
+ expected = np.array([0, 0.5, 1, 240, 10, 0, 0], dtype=np.float32)
493
501
  np.testing.assert_equal(expected, ynp)
494
502
 
495
503
  def test_make_float8e5m2_tensor(self) -> None:
@@ -502,10 +510,13 @@ class TestHelperTensorFunctions(unittest.TestCase):
502
510
 
503
511
  def test_make_float8e5m2fnuz_tensor(self) -> None:
504
512
  y = helper.make_tensor(
505
- "zero_point", TensorProto.FLOAT8E5M2FNUZ, [5], [0, 0.5, 1, 50000, 96]
513
+ "zero_point",
514
+ TensorProto.FLOAT8E5M2FNUZ,
515
+ [7],
516
+ [0, 0.5, 1, 50000, 96, -0.0000001, 0.0000001],
506
517
  )
507
518
  ynp = numpy_helper.to_array(y)
508
- expected = np.array([0, 0.5, 1, 49152, 96], dtype=np.float32)
519
+ expected = np.array([0, 0.5, 1, 49152, 96, 0, 0], dtype=np.float32)
509
520
  np.testing.assert_equal(expected, ynp)
510
521
 
511
522
  def test_make_bfloat16_tensor_raw(self) -> None:
@@ -626,6 +637,51 @@ class TestHelperTensorFunctions(unittest.TestCase):
626
637
  ynp = numpy_helper.to_array(y)
627
638
  np.testing.assert_equal(expected, ynp)
628
639
 
640
+ @parameterized.parameterized.expand(
641
+ itertools.product(
642
+ (TensorProto.UINT4, TensorProto.INT4),
643
+ ((5, 4, 6), (4, 6, 5), (3, 3), (1,), (2**10,)),
644
+ )
645
+ )
646
+ @unittest.skipIf(
647
+ version_utils.numpy_older_than("1.22.0"),
648
+ "The test requires numpy 1.22.0 or later",
649
+ )
650
+ def test_make_4bit_tensor(self, dtype, dims) -> None:
651
+ type_range = {
652
+ TensorProto.UINT4: (0, 15),
653
+ TensorProto.INT4: (-8, 7),
654
+ }
655
+ data = np.random.randint(
656
+ type_range[dtype][0], high=type_range[dtype][1] + 1, size=dims
657
+ )
658
+ y = helper.make_tensor("y", dtype, data.shape, data)
659
+ ynp = to_array_extended(y)
660
+ np.testing.assert_equal(data, ynp)
661
+
662
+ @parameterized.parameterized.expand(
663
+ itertools.product(
664
+ (TensorProto.UINT4, TensorProto.INT4), ((5, 4, 6), (4, 6, 5), (3, 3), (1,))
665
+ )
666
+ )
667
+ def test_make_4bit_raw_tensor(self, dtype, dims) -> None:
668
+ type_range = {
669
+ TensorProto.UINT4: (0, 15),
670
+ TensorProto.INT4: (-8, 7),
671
+ }
672
+ data = np.random.randint(
673
+ type_range[dtype][0], high=type_range[dtype][1] + 1, size=dims
674
+ )
675
+ packed_data = helper.pack_float32_to_4bit(
676
+ data, signed=(dtype == TensorProto.INT4)
677
+ )
678
+
679
+ y = helper.make_tensor(
680
+ "packed_int4", dtype, dims, packed_data.tobytes(), raw=True
681
+ )
682
+ ynp = numpy_helper.to_array(y)
683
+ np.testing.assert_equal(data, ynp)
684
+
629
685
  def test_make_sparse_tensor(self) -> None:
630
686
  values = [1.1, 2.2, 3.3, 4.4, 5.5]
631
687
  values_tensor = helper.make_tensor(
@@ -820,6 +876,8 @@ class TestPrintableGraph(unittest.TestCase):
820
876
  TensorProto.FLOAT8E4M3FNUZ,
821
877
  TensorProto.FLOAT8E5M2,
822
878
  TensorProto.FLOAT8E5M2FNUZ,
879
+ TensorProto.UINT4,
880
+ TensorProto.INT4,
823
881
  TensorProto.STRING,
824
882
  TensorProto.COMPLEX64,
825
883
  TensorProto.COMPLEX128,
@@ -850,6 +908,8 @@ def test_make_tensor_vals(tensor_dtype: int) -> None:
850
908
  TensorProto.FLOAT8E4M3FNUZ,
851
909
  TensorProto.FLOAT8E5M2,
852
910
  TensorProto.FLOAT8E5M2FNUZ,
911
+ TensorProto.UINT4,
912
+ TensorProto.INT4,
853
913
  }
854
914
  ],
855
915
  ids=lambda tensor_dtype: helper.tensor_dtype_to_string(tensor_dtype),