onnx 1.15.0__cp39-cp39-win32.whl → 1.16.1__cp39-cp39-win32.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.cp39-win32.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
@@ -137,8 +137,7 @@ class Runner:
137
137
 
138
138
  @property
139
139
  def test_cases(self) -> dict[str, type[unittest.TestCase]]:
140
- """
141
- List of test cases to be applied on the parent scope
140
+ """List of test cases to be applied on the parent scope
142
141
  Example usage:
143
142
  globals().update(BackendTest(backend).test_cases)
144
143
  """
@@ -153,8 +152,7 @@ class Runner:
153
152
 
154
153
  @property
155
154
  def test_suite(self) -> unittest.TestSuite:
156
- """
157
- TestSuite that can be run by TestRunner
155
+ """TestSuite that can be run by TestRunner
158
156
  Example usage:
159
157
  unittest.TextTestRunner().run(BackendTest(backend).test_suite)
160
158
  """
@@ -168,8 +166,7 @@ class Runner:
168
166
  # For backward compatibility (we used to expose `.tests`)
169
167
  @property
170
168
  def tests(self) -> type[unittest.TestCase]:
171
- """
172
- One single unittest.TestCase that hosts all the test functions
169
+ """One single unittest.TestCase that hosts all the test functions
173
170
  Example usage:
174
171
  onnx_backend_tests = BackendTest(backend).tests
175
172
  """
@@ -188,15 +185,35 @@ class Runner:
188
185
  outputs: Sequence[Any],
189
186
  rtol: float,
190
187
  atol: float,
188
+ model_dir: str | None = None,
191
189
  ) -> None:
192
- np.testing.assert_equal(len(outputs), len(ref_outputs))
190
+ try:
191
+ np.testing.assert_equal(len(outputs), len(ref_outputs))
192
+ except TypeError as e:
193
+ raise TypeError(
194
+ f"Unable to compare expected type {type(ref_outputs)} "
195
+ f"and runtime type {type(outputs)} (known test={model_dir or '?'!r})"
196
+ ) from e
193
197
  for i in range(len(outputs)):
194
198
  if isinstance(outputs[i], (list, tuple)):
199
+ if not isinstance(ref_outputs[i], (list, tuple)):
200
+ raise AssertionError(
201
+ f"Unexpected type {type(outputs[i])} for outputs[{i}]. Expected "
202
+ f"type is {type(ref_outputs[i])} (known test={model_dir or '?'!r})."
203
+ )
195
204
  for j in range(len(outputs[i])):
196
205
  cls.assert_similar_outputs(
197
- ref_outputs[i][j], outputs[i][j], rtol, atol
206
+ ref_outputs[i][j],
207
+ outputs[i][j],
208
+ rtol,
209
+ atol,
210
+ model_dir=model_dir,
198
211
  )
199
212
  else:
213
+ if not np.issubdtype(ref_outputs[i].dtype, np.number):
214
+ if ref_outputs[i].tolist() != outputs[i].tolist():
215
+ raise AssertionError(f"{ref_outputs[i]} != {outputs[i]}")
216
+ continue
200
217
  np.testing.assert_equal(outputs[i].dtype, ref_outputs[i].dtype)
201
218
  if ref_outputs[i].dtype == object: # type: ignore[attr-defined]
202
219
  np.testing.assert_array_equal(outputs[i], ref_outputs[i])
@@ -298,9 +315,7 @@ class Runner:
298
315
  def generate_dummy_data(
299
316
  x: ValueInfoProto, seed: int = 0, name: str = "", random: bool = False
300
317
  ) -> np.ndarray:
301
- """
302
- Generates a random tensor based on the input definition.
303
- """
318
+ """Generates a random tensor based on the input definition."""
304
319
  if not x.type.tensor_type:
305
320
  raise NotImplementedError(
306
321
  f"Input expected to have tensor type. "
@@ -437,9 +452,16 @@ class Runner:
437
452
  test_data = np.load(test_data_npz, encoding="bytes")
438
453
  inputs = list(test_data["inputs"])
439
454
  outputs = list(prepared_model.run(inputs))
440
- ref_outputs = test_data["outputs"]
455
+ ref_outputs = tuple(
456
+ np.array(x) if not isinstance(x, (list, dict)) else x
457
+ for f in test_data["outputs"]
458
+ )
441
459
  self.assert_similar_outputs(
442
- ref_outputs, outputs, rtol=model_test.rtol, atol=model_test.atol
460
+ ref_outputs,
461
+ outputs,
462
+ rtol=model_test.rtol,
463
+ atol=model_test.atol,
464
+ model_dir=model_dir,
443
465
  )
444
466
 
445
467
  for test_data_dir in glob.glob(os.path.join(model_dir, "test_data_set*")):
@@ -459,7 +481,11 @@ class Runner:
459
481
  )
460
482
  outputs = list(prepared_model.run(inputs))
461
483
  self.assert_similar_outputs(
462
- ref_outputs, outputs, rtol=model_test.rtol, atol=model_test.atol
484
+ ref_outputs,
485
+ outputs,
486
+ rtol=model_test.rtol,
487
+ atol=model_test.atol,
488
+ model_dir=model_dir,
463
489
  )
464
490
 
465
491
  if model_test.name in self._test_kwargs:
@@ -488,7 +514,9 @@ class Runner:
488
514
  elif model_type_proto.HasField("tensor_type"):
489
515
  tensor = onnx.TensorProto()
490
516
  tensor.ParseFromString(protobuf_content)
491
- target_list.append(numpy_helper.to_array(tensor))
517
+ t = numpy_helper.to_array(tensor)
518
+ assert isinstance(t, np.ndarray)
519
+ target_list.append(t)
492
520
  elif model_type_proto.HasField("optional_type"):
493
521
  optional = onnx.OptionalProto()
494
522
  optional.ParseFromString(protobuf_content)
onnx/checker.cc CHANGED
@@ -13,7 +13,6 @@
13
13
  #include <vector>
14
14
 
15
15
  #include "onnx/common/file_utils.h"
16
- #include "onnx/common/path.h"
17
16
  #include "onnx/defs/schema.h"
18
17
  #include "onnx/defs/tensor_proto_util.h"
19
18
  #include "onnx/proto_utils.h"
@@ -39,13 +38,6 @@ namespace checker {
39
38
  } \
40
39
  } while (0)
41
40
 
42
- #define enforce_has_repeated_field(proto, field) \
43
- do { \
44
- if (!proto.field##_size()) { \
45
- fail_check("Repeated Field '", #field, "' of '", #proto, "' is required but missing."); \
46
- } \
47
- } while (0)
48
-
49
41
  #define enforce_non_empty_field(proto, field) \
50
42
  do { \
51
43
  if (proto.field().empty()) { \
@@ -135,85 +127,7 @@ void check_tensor(const TensorProto& tensor, const CheckerContext& ctx) {
135
127
  for (const StringStringEntryProto& entry : tensor.external_data()) {
136
128
  if (entry.has_key() && entry.has_value() && entry.key() == "location") {
137
129
  has_location = true;
138
- #ifdef _WIN32
139
- auto file_path = std::filesystem::path(utf8str_to_wstring(entry.value()));
140
- if (file_path.is_absolute()) {
141
- fail_check(
142
- "Location of external TensorProto ( tensor name: ",
143
- tensor.name(),
144
- ") should be a relative path, but it is an absolute path: ",
145
- entry.value());
146
- }
147
- auto relative_path = file_path.lexically_normal().make_preferred().wstring();
148
- // Check that normalized relative path contains ".." on Windows.
149
- if (relative_path.find(L"..", 0) != std::string::npos) {
150
- fail_check(
151
- "Data of TensorProto ( tensor name: ",
152
- tensor.name(),
153
- ") should be file inside the ",
154
- ctx.get_model_dir(),
155
- ", but the '",
156
- entry.value(),
157
- "' points outside the directory");
158
- }
159
- std::wstring data_path = path_join(utf8str_to_wstring(ctx.get_model_dir()), relative_path);
160
- struct _stat64 buff;
161
- if (_wstat64(data_path.c_str(), &buff) != 0) {
162
- fail_check(
163
- "Data of TensorProto ( tensor name: ",
164
- tensor.name(),
165
- ") should be stored in ",
166
- entry.value(),
167
- ", but it doesn't exist or is not accessible.");
168
- }
169
- #else // POSIX
170
- if (entry.value().empty()) {
171
- fail_check("Location of external TensorProto ( tensor name: ", tensor.name(), ") should not be empty.");
172
- } else if (entry.value()[0] == '/') {
173
- fail_check(
174
- "Location of external TensorProto ( tensor name: ",
175
- tensor.name(),
176
- ") should be a relative path, but it is an absolute path: ",
177
- entry.value());
178
- }
179
- std::string relative_path = clean_relative_path(entry.value());
180
- // Check that normalized relative path contains ".." on POSIX
181
- if (relative_path.find("..", 0) != std::string::npos) {
182
- fail_check(
183
- "Data of TensorProto ( tensor name: ",
184
- tensor.name(),
185
- ") should be file inside the ",
186
- ctx.get_model_dir(),
187
- ", but the '",
188
- entry.value(),
189
- "' points outside the directory");
190
- }
191
- std::string data_path = path_join(ctx.get_model_dir(), relative_path);
192
- // use stat64 to check whether the file exists
193
- #if defined(__APPLE__) || defined(__wasm__) || !defined(__GLIBC__)
194
- struct stat buffer; // APPLE, wasm and non-glic stdlibs do not have stat64
195
- if (stat((data_path).c_str(), &buffer) != 0) {
196
- #else
197
- struct stat64 buffer; // All POSIX under glibc except APPLE and wasm have stat64
198
- if (stat64((data_path).c_str(), &buffer) != 0) {
199
- #endif
200
- fail_check(
201
- "Data of TensorProto ( tensor name: ",
202
- tensor.name(),
203
- ") should be stored in ",
204
- data_path,
205
- ", but it doesn't exist or is not accessible.");
206
- }
207
- // Do not allow symlinks or directories.
208
- if (!S_ISREG(buffer.st_mode)) {
209
- fail_check(
210
- "Data of TensorProto ( tensor name: ",
211
- tensor.name(),
212
- ") should be stored in ",
213
- data_path,
214
- ", but it is not regular file.");
215
- }
216
- #endif
130
+ resolve_external_data_location(ctx.get_model_dir(), entry.value(), tensor.name());
217
131
  }
218
132
  }
219
133
  if (!has_location) {
@@ -272,6 +186,8 @@ void check_tensor(const TensorProto& tensor, const CheckerContext& ctx) {
272
186
  case TensorProto::FLOAT8E4M3FNUZ:
273
187
  case TensorProto::FLOAT8E5M2:
274
188
  case TensorProto::FLOAT8E5M2FNUZ:
189
+ case TensorProto::UINT4:
190
+ case TensorProto::INT4:
275
191
  check_field(int32_data);
276
192
  break;
277
193
 
@@ -656,17 +572,11 @@ void check_node(const NodeProto& node, const CheckerContext& ctx, const LexicalS
656
572
  const auto* schema = ctx.get_schema_registry()->GetSchema(node.op_type(), domain_version, node.domain());
657
573
  if (!schema) {
658
574
  if (node.domain() == ONNX_DOMAIN || node.domain() == AI_ONNX_ML_DOMAIN || node.domain() == "ai.onnx" ||
659
- node.domain() == AI_ONNX_TRAINING_DOMAIN) {
660
- // fail the checker if op in built-in domains has no schema
575
+ node.domain() == AI_ONNX_TRAINING_DOMAIN || ctx.check_custom_domain()) {
576
+ // fail the checker if op is in built-in domains or if it has no schema when `check_custom_domain` is true
661
577
  fail_check(
662
578
  "No Op registered for " + node.op_type() + " with domain_version of " +
663
579
  ONNX_NAMESPACE::to_string(domain_version));
664
- } else {
665
- // TODO: expose the registration of the op schemas appropriately in
666
- // python, so we can load and register operators in other domains
667
- //
668
- // before we complete the above todo, let's skip the schema check for
669
- // now
670
580
  }
671
581
  } else if (schema->Deprecated()) {
672
582
  fail_check(
@@ -1021,7 +931,11 @@ void check_model(const ModelProto& model, CheckerContext& ctx) {
1021
931
  }
1022
932
  }
1023
933
 
1024
- void check_model(const std::string& model_path, bool full_check, bool skip_opset_compatibility_check) {
934
+ void check_model(
935
+ const std::string& model_path,
936
+ bool full_check,
937
+ bool skip_opset_compatibility_check,
938
+ bool check_custom_domain) {
1025
939
  ModelProto model;
1026
940
  LoadProtoFromPath(model_path, model);
1027
941
 
@@ -1033,6 +947,7 @@ void check_model(const std::string& model_path, bool full_check, bool skip_opset
1033
947
  }
1034
948
  ctx.set_model_dir(model_dir);
1035
949
  ctx.set_skip_opset_compatibility_check(skip_opset_compatibility_check);
950
+ ctx.set_check_custom_domain(check_custom_domain);
1036
951
  check_model(model, ctx);
1037
952
 
1038
953
  if (full_check) {
@@ -1041,9 +956,14 @@ void check_model(const std::string& model_path, bool full_check, bool skip_opset
1041
956
  }
1042
957
  }
1043
958
 
1044
- void check_model(const ModelProto& model, bool full_check, bool skip_opset_compatibility_check) {
959
+ void check_model(
960
+ const ModelProto& model,
961
+ bool full_check,
962
+ bool skip_opset_compatibility_check,
963
+ bool check_custom_domain) {
1045
964
  CheckerContext ctx;
1046
965
  ctx.set_skip_opset_compatibility_check(skip_opset_compatibility_check);
966
+ ctx.set_check_custom_domain(check_custom_domain);
1047
967
  check_model(model, ctx);
1048
968
  if (full_check) {
1049
969
  ShapeInferenceOptions options{true, 1, false};
@@ -1054,6 +974,93 @@ void check_model(const ModelProto& model, bool full_check, bool skip_opset_compa
1054
974
  }
1055
975
  }
1056
976
 
977
+ std::string resolve_external_data_location(
978
+ const std::string& base_dir,
979
+ const std::string& location,
980
+ const std::string& tensor_name) {
981
+ #ifdef _WIN32
982
+ auto file_path = std::filesystem::path(utf8str_to_wstring(location));
983
+ if (file_path.is_absolute()) {
984
+ fail_check(
985
+ "Location of external TensorProto ( tensor name: ",
986
+ tensor_name,
987
+ ") should be a relative path, but it is an absolute path: ",
988
+ location);
989
+ }
990
+ auto relative_path = file_path.lexically_normal().make_preferred().wstring();
991
+ // Check that normalized relative path contains ".." on Windows.
992
+ if (relative_path.find(L"..", 0) != std::string::npos) {
993
+ fail_check(
994
+ "Data of TensorProto ( tensor name: ",
995
+ tensor_name,
996
+ ") should be file inside the ",
997
+ base_dir,
998
+ ", but the '",
999
+ location,
1000
+ "' points outside the directory");
1001
+ }
1002
+ std::wstring data_path = path_join(utf8str_to_wstring(base_dir), relative_path);
1003
+ struct _stat64 buff;
1004
+ if (data_path.empty() || (data_path[0] != '#' && _wstat64(data_path.c_str(), &buff) != 0)) {
1005
+ fail_check(
1006
+ "Data of TensorProto ( tensor name: ",
1007
+ tensor_name,
1008
+ ") should be stored in ",
1009
+ location,
1010
+ ", but it doesn't exist or is not accessible.");
1011
+ }
1012
+ return wstring_to_utf8str(data_path);
1013
+ #else // POSIX
1014
+ if (location.empty()) {
1015
+ fail_check("Location of external TensorProto ( tensor name: ", tensor_name, ") should not be empty.");
1016
+ } else if (location[0] == '/') {
1017
+ fail_check(
1018
+ "Location of external TensorProto ( tensor name: ",
1019
+ tensor_name,
1020
+ ") should be a relative path, but it is an absolute path: ",
1021
+ location);
1022
+ }
1023
+ std::string relative_path = clean_relative_path(location);
1024
+ // Check that normalized relative path contains ".." on POSIX
1025
+ if (relative_path.find("..", 0) != std::string::npos) {
1026
+ fail_check(
1027
+ "Data of TensorProto ( tensor name: ",
1028
+ tensor_name,
1029
+ ") should be file inside the ",
1030
+ base_dir,
1031
+ ", but the '",
1032
+ location,
1033
+ "' points outside the directory");
1034
+ }
1035
+ std::string data_path = path_join(base_dir, relative_path);
1036
+ // use stat64 to check whether the file exists
1037
+ #if defined(__APPLE__) || defined(__wasm__) || !defined(__GLIBC__)
1038
+ struct stat buffer; // APPLE, wasm and non-glic stdlibs do not have stat64
1039
+ if (data_path.empty() || (data_path[0] != '#' && stat((data_path).c_str(), &buffer) != 0)) {
1040
+ #else
1041
+ struct stat64 buffer; // All POSIX under glibc except APPLE and wasm have stat64
1042
+ if (data_path.empty() || (data_path[0] != '#' && stat64((data_path).c_str(), &buffer) != 0)) {
1043
+ #endif
1044
+ fail_check(
1045
+ "Data of TensorProto ( tensor name: ",
1046
+ tensor_name,
1047
+ ") should be stored in ",
1048
+ data_path,
1049
+ ", but it doesn't exist or is not accessible.");
1050
+ }
1051
+ // Do not allow symlinks or directories.
1052
+ if (data_path.empty() || (data_path[0] != '#' && !S_ISREG(buffer.st_mode))) {
1053
+ fail_check(
1054
+ "Data of TensorProto ( tensor name: ",
1055
+ tensor_name,
1056
+ ") should be stored in ",
1057
+ data_path,
1058
+ ", but it is not regular file.");
1059
+ }
1060
+ return data_path;
1061
+ #endif
1062
+ }
1063
+
1057
1064
  std::set<std::string> experimental_ops = {
1058
1065
  "ATen",
1059
1066
  "Affine",
@@ -1071,9 +1078,7 @@ bool check_is_experimental_op(const NodeProto& node) {
1071
1078
  return (node.domain() == ONNX_DOMAIN || node.domain() == "ai.onnx") && experimental_ops.count(node.op_type());
1072
1079
  }
1073
1080
 
1074
- #undef fail_check
1075
1081
  #undef enforce_has_field
1076
- #undef enforce_has_repeated_field
1077
1082
  #undef enforce_non_empty_field
1078
1083
 
1079
1084
  } // namespace checker
onnx/checker.h CHANGED
@@ -84,6 +84,14 @@ class CheckerContext final {
84
84
  skip_opset_compatibility_check_ = value;
85
85
  }
86
86
 
87
+ bool check_custom_domain() const {
88
+ return check_custom_domain_;
89
+ }
90
+
91
+ void set_check_custom_domain(bool value) {
92
+ check_custom_domain_ = value;
93
+ }
94
+
87
95
  explicit CheckerContext() : ir_version_(-1) {}
88
96
 
89
97
  private:
@@ -93,6 +101,7 @@ class CheckerContext final {
93
101
  const ISchemaRegistry* schema_registry_ = OpSchemaRegistry::Instance();
94
102
  std::string model_dir_;
95
103
  bool skip_opset_compatibility_check_ = false;
104
+ bool check_custom_domain_ = false;
96
105
  };
97
106
 
98
107
  class LexicalScopeContext final {
@@ -158,9 +167,20 @@ void check_model_local_functions(
158
167
  const CheckerContext& ctx,
159
168
  const LexicalScopeContext& parent_lex);
160
169
 
161
- void check_model(const ModelProto& model, bool full_check = false, bool skip_opset_compatibility_check = false);
162
- void check_model(const std::string& model_path, bool full_check = false, bool skip_opset_compatibility_check = false);
163
-
170
+ void check_model(
171
+ const ModelProto& model,
172
+ bool full_check = false,
173
+ bool skip_opset_compatibility_check = false,
174
+ bool check_custom_domain = false);
175
+ void check_model(
176
+ const std::string& model_path,
177
+ bool full_check = false,
178
+ bool skip_opset_compatibility_check = false,
179
+ bool check_custom_domain = false);
180
+ std::string resolve_external_data_location(
181
+ const std::string& base_dir,
182
+ const std::string& location,
183
+ const std::string& tensor_name);
164
184
  bool check_is_experimental_op(const NodeProto& node);
165
185
 
166
186
  } // namespace checker
onnx/checker.py CHANGED
@@ -15,6 +15,7 @@ __all__ = [
15
15
  "check_tensor",
16
16
  "check_value_info",
17
17
  "DEFAULT_CONTEXT",
18
+ "LEXICAL_SCOPE_CONTEXT",
18
19
  "ValidationError",
19
20
  "C",
20
21
  "MAXIMUM_PROTOBUF",
@@ -39,7 +40,6 @@ from onnx import (
39
40
  SparseTensorProto,
40
41
  TensorProto,
41
42
  ValueInfoProto,
42
- helper,
43
43
  )
44
44
 
45
45
  # Limitation of single protobuf file is 2GB
@@ -56,6 +56,8 @@ DEFAULT_CONTEXT.ir_version = IR_VERSION
56
56
  # TODO: Maybe ONNX-ML should also be defaulted?
57
57
  DEFAULT_CONTEXT.opset_imports = {"": onnx.defs.onnx_opset_version()}
58
58
 
59
+ LEXICAL_SCOPE_CONTEXT = C.LexicalScopeContext()
60
+
59
61
 
60
62
  FuncType = TypeVar("FuncType", bound=Callable[..., Any])
61
63
 
@@ -80,36 +82,48 @@ def check_tensor(tensor: TensorProto, ctx: C.CheckerContext = DEFAULT_CONTEXT) -
80
82
 
81
83
 
82
84
  def check_attribute(
83
- attr: AttributeProto, ctx: C.CheckerContext = DEFAULT_CONTEXT
85
+ attr: AttributeProto,
86
+ ctx: C.CheckerContext = DEFAULT_CONTEXT,
87
+ lexical_scope_ctx: C.LexicalScopeContext = LEXICAL_SCOPE_CONTEXT,
84
88
  ) -> None:
85
89
  _ensure_proto_type(attr, AttributeProto)
86
- return C.check_attribute(attr.SerializeToString(), ctx)
90
+ return C.check_attribute(attr.SerializeToString(), ctx, lexical_scope_ctx)
87
91
 
88
92
 
89
- def check_node(node: NodeProto, ctx: C.CheckerContext = DEFAULT_CONTEXT) -> None:
93
+ def check_node(
94
+ node: NodeProto,
95
+ ctx: C.CheckerContext = DEFAULT_CONTEXT,
96
+ lexical_scope_ctx: C.LexicalScopeContext = LEXICAL_SCOPE_CONTEXT,
97
+ ) -> None:
90
98
  _ensure_proto_type(node, NodeProto)
91
- return C.check_node(node.SerializeToString(), ctx)
99
+ return C.check_node(node.SerializeToString(), ctx, lexical_scope_ctx)
92
100
 
93
101
 
94
102
  def check_function(
95
- function: FunctionProto, ctx: C.CheckerContext | None = None
103
+ function: FunctionProto,
104
+ ctx: C.CheckerContext | None = None,
105
+ lexical_scope_ctx: C.LexicalScopeContext = LEXICAL_SCOPE_CONTEXT,
96
106
  ) -> None:
97
107
  _ensure_proto_type(function, FunctionProto)
98
108
  if ctx is None:
99
109
  ctx = C.CheckerContext()
100
- ctx.ir_version = helper.find_min_ir_version_for(
101
- list(function.opset_import), True
110
+ ctx.ir_version = onnx.helper.find_min_ir_version_for(
111
+ function.opset_import, ignore_unknown=True
102
112
  )
103
- function_opset_dic = {}
104
- for domain_version in function.opset_import:
105
- function_opset_dic[domain_version.domain] = domain_version.version
106
- ctx.opset_imports = function_opset_dic
107
- C.check_function(function.SerializeToString(), ctx)
113
+ ctx.opset_imports = {
114
+ domain_version.domain: domain_version.version
115
+ for domain_version in function.opset_import
116
+ }
117
+ C.check_function(function.SerializeToString(), ctx, lexical_scope_ctx)
108
118
 
109
119
 
110
- def check_graph(graph: GraphProto, ctx: C.CheckerContext = DEFAULT_CONTEXT) -> None:
120
+ def check_graph(
121
+ graph: GraphProto,
122
+ ctx: C.CheckerContext = DEFAULT_CONTEXT,
123
+ lexical_scope_ctx: C.LexicalScopeContext = LEXICAL_SCOPE_CONTEXT,
124
+ ) -> None:
111
125
  _ensure_proto_type(graph, GraphProto)
112
- return C.check_graph(graph.SerializeToString(), ctx)
126
+ return C.check_graph(graph.SerializeToString(), ctx, lexical_scope_ctx)
113
127
 
114
128
 
115
129
  def check_sparse_tensor(
@@ -123,18 +137,35 @@ def check_model(
123
137
  model: ModelProto | str | bytes | os.PathLike,
124
138
  full_check: bool = False,
125
139
  skip_opset_compatibility_check: bool = False,
140
+ check_custom_domain: bool = False,
126
141
  ) -> None:
127
- """Check the consistency of a model. An exception is raised if the test fails.
142
+ """Check the consistency of a model.
143
+
144
+ An exception will be raised if the model's ir_version is not set
145
+ properly or is higher than checker's ir_version, or if the model
146
+ has duplicate keys in metadata_props.
147
+
148
+ If IR version >= 3, the model must specify opset_import.
149
+ If IR version < 3, the model cannot have any opset_import specified.
128
150
 
129
151
  Args:
130
- model: Model to check.
131
- full_check: If True, the function also checks for shapes that can be inferred.
152
+ model: Model to check. If model is a path, the function checks model
153
+ path first. If the model bytes size is larger than 2GB, function
154
+ should be called using model path.
155
+ full_check: If True, the function also runs shape inference check.
132
156
  skip_opset_compatibility_check: If True, the function skips the check for
133
157
  opset compatibility.
158
+ check_custom_domain: If True, the function will check all domains. Otherwise
159
+ only check built-in domains.
134
160
  """
135
161
  # If model is a path instead of ModelProto
136
162
  if isinstance(model, (str, os.PathLike)):
137
- C.check_model_path(os.fspath(model), full_check, skip_opset_compatibility_check)
163
+ C.check_model_path(
164
+ os.fspath(model),
165
+ full_check,
166
+ skip_opset_compatibility_check,
167
+ check_custom_domain,
168
+ )
138
169
  else:
139
170
  protobuf_string = (
140
171
  model if isinstance(model, bytes) else model.SerializeToString()
@@ -145,7 +176,12 @@ def check_model(
145
176
  raise ValueError(
146
177
  "This protobuf of onnx model is too large (>2GB). Call check_model with model path instead."
147
178
  )
148
- C.check_model(protobuf_string, full_check, skip_opset_compatibility_check)
179
+ C.check_model(
180
+ protobuf_string,
181
+ full_check,
182
+ skip_opset_compatibility_check,
183
+ check_custom_domain,
184
+ )
149
185
 
150
186
 
151
187
  ValidationError = C.ValidationError
onnx/common/assertions.cc CHANGED
@@ -9,6 +9,7 @@
9
9
 
10
10
  #include "onnx/common/assertions.h"
11
11
 
12
+ #include <array>
12
13
  #include <cstdarg>
13
14
  #include <cstdio>
14
15
 
@@ -17,16 +18,20 @@
17
18
  namespace ONNX_NAMESPACE {
18
19
 
19
20
  std::string barf(const char* fmt, ...) {
20
- char msg[2048];
21
+ constexpr size_t buffer_size = 2048;
22
+ std::array<char, buffer_size> msg{};
21
23
  va_list args;
22
24
 
23
25
  va_start(args, fmt);
24
- // Although vsnprintf might have vulnerability issue while using format string with overflowed length,
25
- // it should be safe here to use fixed length for buffer "msg". No further checking is needed.
26
- vsnprintf(msg, 2048, fmt, args);
26
+
27
+ // use fixed length for buffer "msg" to avoid buffer overflow
28
+ vsnprintf(static_cast<char*>(msg.data()), msg.size() - 1, fmt, args);
29
+
30
+ // ensure null-terminated string to avoid out of bounds read
31
+ msg.back() = '\0';
27
32
  va_end(args);
28
33
 
29
- return std::string(msg);
34
+ return std::string(msg.data());
30
35
  }
31
36
 
32
37
  void throw_assert_error(std::string& msg) {
onnx/common/common.h CHANGED
@@ -34,3 +34,22 @@
34
34
  #define ONNX_CATCH(x) catch (x)
35
35
  #define ONNX_HANDLE_EXCEPTION(func) func()
36
36
  #endif
37
+
38
+ // Macros to disable the copy and/or assignment methods
39
+ // These are usually placed in the private: declarations for a class.
40
+
41
+ #define ONNX_DISALLOW_COPY(TypeName) TypeName(const TypeName&) = delete
42
+
43
+ #define ONNX_DISALLOW_ASSIGNMENT(TypeName) TypeName& operator=(const TypeName&) = delete
44
+
45
+ #define ONNX_DISALLOW_COPY_AND_ASSIGNMENT(TypeName) \
46
+ ONNX_DISALLOW_COPY(TypeName); \
47
+ ONNX_DISALLOW_ASSIGNMENT(TypeName)
48
+
49
+ #define ONNX_DISALLOW_MOVE(TypeName) \
50
+ TypeName(TypeName&&) = delete; \
51
+ TypeName& operator=(TypeName&&) = delete
52
+
53
+ #define ONNX_DISALLOW_COPY_ASSIGNMENT_AND_MOVE(TypeName) \
54
+ ONNX_DISALLOW_COPY_AND_ASSIGNMENT(TypeName); \
55
+ ONNX_DISALLOW_MOVE(TypeName)
onnx/common/file_utils.h CHANGED
@@ -6,6 +6,7 @@
6
6
 
7
7
  #pragma once
8
8
 
9
+ #include <filesystem>
9
10
  #include <fstream>
10
11
  #include <string>
11
12
 
@@ -16,7 +17,8 @@ namespace ONNX_NAMESPACE {
16
17
 
17
18
  template <typename T>
18
19
  void LoadProtoFromPath(const std::string proto_path, T& proto) {
19
- std::fstream proto_stream(proto_path, std::ios::in | std::ios::binary);
20
+ std::filesystem::path proto_u8_path = std::filesystem::u8path(proto_path);
21
+ std::fstream proto_stream(proto_u8_path, std::ios::in | std::ios::binary);
20
22
  if (!proto_stream.good()) {
21
23
  fail_check("Unable to open proto file: ", proto_path, ". Please check if it is a valid proto. ");
22
24
  }
@@ -185,7 +185,13 @@ namespace ONNX_NAMESPACE {
185
185
  _(ScatterElements) \
186
186
  _(Resize) \
187
187
  _(ceil_mode) \
188
- _(num_outputs)
188
+ _(num_outputs) \
189
+ _(start) \
190
+ _(end) \
191
+ _(num_groups) \
192
+ _(stash_type) \
193
+ _(block_size) \
194
+ _(output_dtype)
189
195
 
190
196
  enum BuiltinSymbol {
191
197
  #define DEFINE_SYMBOL(s) k##s,