onnxscript 0.7.1.dev20260506__tar.gz → 0.7.1.dev20260522__tar.gz

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.
Files changed (199) hide show
  1. {onnxscript-0.7.1.dev20260506/onnxscript.egg-info → onnxscript-0.7.1.dev20260522}/PKG-INFO +2 -2
  2. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/__init__.py +10 -3
  3. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/_inference.py +11 -0
  4. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/builder.py +92 -226
  5. onnxscript-0.7.1.dev20260522/onnxscript/_internal/tape_builder.py +545 -0
  6. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/optimizer/_constant_folding.py +2 -2
  7. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_context.py +5 -5
  8. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_batchnorm.py +4 -6
  9. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_pad_into_conv.py +9 -8
  10. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_min_max_to_clip.py +2 -1
  11. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_remove_optional_bias.py +2 -2
  12. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/version_converter/_version_converter.py +2 -2
  13. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522/onnxscript.egg-info}/PKG-INFO +2 -2
  14. onnxscript-0.7.1.dev20260506/onnxscript/_internal/tape_builder.py +0 -207
  15. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/LICENSE +0 -0
  16. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/MANIFEST.in +0 -0
  17. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/README.md +0 -0
  18. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/VERSION +0 -0
  19. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/__init__.py +0 -0
  20. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_11.py +0 -0
  21. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_5.py +0 -0
  22. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_6.py +0 -0
  23. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_7.py +0 -0
  24. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_8.py +0 -0
  25. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_9.py +0 -0
  26. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/__init__.py +0 -0
  27. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/_inliner.py +0 -0
  28. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/analysis.py +0 -0
  29. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/ast_utils.py +0 -0
  30. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/autocast.py +0 -0
  31. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/converter.py +0 -0
  32. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/deprecation.py +0 -0
  33. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/evaluator.py +0 -0
  34. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/irbuilder.py +0 -0
  35. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/main.py +0 -0
  36. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/param_manipulation.py +0 -0
  37. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/sourceinfo.py +0 -0
  38. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/type_annotation.py +0 -0
  39. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/utils.py +0 -0
  40. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/values.py +0 -0
  41. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/version_utils.py +0 -0
  42. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/backend/__init__.py +0 -0
  43. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/backend/onnx_backend.py +0 -0
  44. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/backend/onnx_export.py +0 -0
  45. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/evaluator.py +0 -0
  46. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/tools/torch_lib/deduce_type_constraints.py +0 -0
  47. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/tools/torch_lib/generate_aten_signatures.py +0 -0
  48. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/tools/torch_lib/generate_prims_signatures.py +0 -0
  49. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/__init__.py +0 -0
  50. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/_constants.py +0 -0
  51. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/_flags.py +0 -0
  52. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/graph_building/__init__.py +0 -0
  53. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/__init__.py +0 -0
  54. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/common.py +0 -0
  55. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/core.py +0 -0
  56. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/fft.py +0 -0
  57. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/linalg.py +0 -0
  58. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/nested.py +0 -0
  59. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/nn.py +0 -0
  60. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/prims.py +0 -0
  61. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/quantized_decomposed.py +0 -0
  62. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/sparse.py +0 -0
  63. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/special.py +0 -0
  64. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/vision.py +0 -0
  65. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/registration.py +0 -0
  66. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/tensor_typing.py +0 -0
  67. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/__init__.py +0 -0
  68. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/_schemas.py +0 -0
  69. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/convenience.py +0 -0
  70. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/passes/__init__.py +0 -0
  71. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/passes/common/__init__.py +0 -0
  72. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/__init__.py +0 -0
  73. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/_module.py +0 -0
  74. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/_module_list.py +0 -0
  75. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/_parameter.py +0 -0
  76. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/_sequential.py +0 -0
  77. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/__init__.py +0 -0
  78. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset1.py +0 -0
  79. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset10.py +0 -0
  80. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset11.py +0 -0
  81. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset12.py +0 -0
  82. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset13.py +0 -0
  83. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset14.py +0 -0
  84. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset15.py +0 -0
  85. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset16.py +0 -0
  86. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset17.py +0 -0
  87. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset18.py +0 -0
  88. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset19.py +0 -0
  89. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset2.py +0 -0
  90. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset20.py +0 -0
  91. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset21.py +0 -0
  92. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset22.py +0 -0
  93. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset23.py +0 -0
  94. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset24.py +0 -0
  95. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset3.py +0 -0
  96. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset4.py +0 -0
  97. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset5.py +0 -0
  98. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset6.py +0 -0
  99. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset7.py +0 -0
  100. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset8.py +0 -0
  101. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset9.py +0 -0
  102. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml1.py +0 -0
  103. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml2.py +0 -0
  104. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml3.py +0 -0
  105. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml4.py +0 -0
  106. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml5.py +0 -0
  107. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_types.py +0 -0
  108. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/optimizer/__init__.py +0 -0
  109. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/optimizer/_optimizer.py +0 -0
  110. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/py.typed +0 -0
  111. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/__init__.py +0 -0
  112. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_basics.py +0 -0
  113. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_fusion_utils.py +0 -0
  114. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_ir_utils.py +0 -0
  115. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_matcher.py +0 -0
  116. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_pattern_ir.py +0 -0
  117. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_rewrite_rule.py +0 -0
  118. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_bart_encoder.py +0 -0
  119. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_phi2lm.py +0 -0
  120. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_phi4lm.py +0 -0
  121. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_rotary_embedding_models.py +0 -0
  122. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_smollm_1.py +0 -0
  123. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_smollm_2.py +0 -0
  124. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_test_models.py +0 -0
  125. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_whisper_decoder.py +0 -0
  126. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_whisper_encoder.py +0 -0
  127. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/onnx_fusions/__init__.py +0 -0
  128. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/onnx_fusions/_onnx_fusions.py +0 -0
  129. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/onnxruntime/__init__.py +0 -0
  130. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/onnxruntime/bfloat16_utils/bfloat16_converter.py +0 -0
  131. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/__init__.py +0 -0
  132. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/_core.py +0 -0
  133. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/_test_utils.py +0 -0
  134. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/attention.py +0 -0
  135. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/bias_gelu.py +0 -0
  136. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/cos_sin_cache.py +0 -0
  137. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/erfgelu.py +0 -0
  138. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/fused_matmul_rule_sets.py +0 -0
  139. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/gelu.py +0 -0
  140. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/gqa.py +0 -0
  141. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/gqa_packed_qkv.py +0 -0
  142. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/group_normalization_merge_silu.py +0 -0
  143. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/instance_to_group_normalization.py +0 -0
  144. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/mha.py +0 -0
  145. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/mha_bias.py +0 -0
  146. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/mha_scale.py +0 -0
  147. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/rms_normalization.py +0 -0
  148. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/rotary_embedding.py +0 -0
  149. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/sdpa.py +0 -0
  150. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/sdpa_via_mha.py +0 -0
  151. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/shape_optimization.py +0 -0
  152. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/skip_normalization.py +0 -0
  153. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/softmax.py +0 -0
  154. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/pattern.py +0 -0
  155. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/__init__.py +0 -0
  156. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/__init__.py +0 -0
  157. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_basic_rules.py +0 -0
  158. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_broadcast_to_matmul.py +0 -0
  159. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_cast_constant_of_shape.py +0 -0
  160. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_collapse_slices.py +0 -0
  161. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_conv_affine.py +0 -0
  162. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_hardswish.py +0 -0
  163. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_relus_clips.py +0 -0
  164. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_gemm_to_matmul_add.py +0 -0
  165. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_matmul_add_to_gemm.py +0 -0
  166. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_no_op.py +0 -0
  167. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_redundant_scatter_nd.py +0 -0
  168. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_remove_expand_before_binary_op.py +0 -0
  169. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/__init__.py +0 -0
  170. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/_gqa.py +0 -0
  171. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/_layer_norm.py +0 -0
  172. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/_rms_normalization.py +0 -0
  173. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/_rotary_embedding.py +0 -0
  174. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/testing.py +0 -0
  175. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/tensor.py +0 -0
  176. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/testing/__init__.py +0 -0
  177. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/__init__.py +0 -0
  178. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/memory_peak.py +0 -0
  179. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/__init__.py +0 -0
  180. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/llama.py +0 -0
  181. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/mistral.py +0 -0
  182. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/phi.py +0 -0
  183. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/phi3.py +0 -0
  184. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/__init__.py +0 -0
  185. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/evaluation_utils.py +0 -0
  186. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/metadata_merger.py +0 -0
  187. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/replace.py +0 -0
  188. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/timing_utils.py +0 -0
  189. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/utils.py +0 -0
  190. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/values.py +0 -0
  191. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/version_converter/__init__.py +0 -0
  192. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript/version_converter/_c_api_utils.py +0 -0
  193. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript.egg-info/SOURCES.txt +0 -0
  194. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript.egg-info/dependency_links.txt +0 -0
  195. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript.egg-info/requires.txt +0 -0
  196. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/onnxscript.egg-info/top_level.txt +0 -0
  197. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/pyproject.toml +0 -0
  198. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/setup.cfg +0 -0
  199. {onnxscript-0.7.1.dev20260506 → onnxscript-0.7.1.dev20260522}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: onnxscript
3
- Version: 0.7.1.dev20260506
3
+ Version: 0.7.1.dev20260522
4
4
  Summary: Naturally author ONNX functions and models using a subset of Python
5
5
  Author-email: Microsoft Corporation <onnx@microsoft.com>
6
6
  License: MIT License
@@ -27,7 +27,7 @@ License: MIT License
27
27
 
28
28
  Project-URL: Homepage, https://microsoft.github.io/onnxscript/
29
29
  Project-URL: Repository, https://github.com/microsoft/onnxscript
30
- Project-URL: Commit, https://github.com/microsoft/onnxscript/tree/fed67b9ed996569ab3c0c1b2fe8ec6188bd2c9ce
30
+ Project-URL: Commit, https://github.com/microsoft/onnxscript/tree/8fdb1e040c797068f2e829aef5444e1bf3aa992e
31
31
  Classifier: Development Status :: 4 - Beta
32
32
  Classifier: Environment :: Console
33
33
  Classifier: Intended Audience :: Developers
@@ -14,8 +14,10 @@ __all__ = [
14
14
  "TracedOnnxFunction",
15
15
  "GraphBuilder",
16
16
  "OpBuilder",
17
- "OpBuilderBase",
17
+ "BuilderBase",
18
18
  "TapeBuilder",
19
+ "build_function",
20
+ "build_graph",
19
21
  "proto2python",
20
22
  "external_tensor",
21
23
  "BFLOAT16",
@@ -67,6 +69,7 @@ __all__ = [
67
69
  "opset_ai_onnx_ml4",
68
70
  "opset_ai_onnx_ml5",
69
71
  "DEBUG",
72
+ "BuilderFeature",
70
73
  ]
71
74
 
72
75
  import importlib.metadata
@@ -132,8 +135,12 @@ from .onnx_types import (
132
135
  # isort: on
133
136
 
134
137
  from . import ir, nn, optimizer, rewriter, version_converter
135
- from ._internal.builder import GraphBuilder, OpBuilder
136
- from ._internal.tape_builder import OpBuilderBase, TapeBuilder
138
+ from ._internal.builder import GraphBuilder, OpBuilder, build_function, build_graph
139
+ from ._internal.tape_builder import (
140
+ BuilderBase,
141
+ BuilderFeature,
142
+ TapeBuilder,
143
+ )
137
144
  from ._internal.utils import external_tensor
138
145
  from ._internal.values import OnnxFunction, TracedOnnxFunction
139
146
 
@@ -93,7 +93,18 @@ def _do_onnx_inference(node: ir.Node) -> None:
93
93
  output.type = ir.serde.deserialize_type_proto_for_type(inferred_type)
94
94
 
95
95
 
96
+ def _has_complete_type_and_shape(output: ir.Value) -> bool:
97
+ """Check if an output already has fully determined type and static shape."""
98
+ if output.type is None or output.shape is None:
99
+ return False
100
+ return output.shape.is_static()
101
+
102
+
96
103
  def infer_outputs(node: ir.Node) -> None:
104
+ # Skip inference if all outputs already have type and fully static shape
105
+ # (e.g., from constant propagation setting const_value).
106
+ if all(_has_complete_type_and_shape(output) for output in node.outputs):
107
+ return
97
108
  try:
98
109
  _do_onnx_inference(node)
99
110
  except Exception as e: # pylint: disable=broad-exception-caught
@@ -3,21 +3,26 @@
3
3
  """Graph builder for constructing ONNX IR graphs imperatively.
4
4
 
5
5
  This module provides imperative builders for constructing ONNX IR graphs with automatic
6
- constant promotion, type casting, and shape inference. The GraphBuilder class enables
7
- programmatic construction of graphs with proper scoping, constant management, and node
8
- creation. The OpBuilder class provides dynamic op dispatching via attribute access.
6
+ constant promotion, type casting, and shape inference. The GraphBuilder class inherits
7
+ from BuilderBase and enables programmatic construction of graphs with proper scoping,
8
+ constant management, and node creation. The OpBuilder class provides dynamic op
9
+ dispatching via attribute access.
9
10
  """
10
11
 
11
12
  from __future__ import annotations
12
13
 
13
14
  from typing import Any, Callable, Mapping, Sequence, Union
14
15
 
15
- import onnx
16
16
  import onnx_ir as ir
17
17
 
18
- import onnxscript._internal._inference as inference
19
- import onnxscript.optimizer
20
- from onnxscript._internal import _inliner, param_manipulation
18
+ import onnxscript
19
+ from onnxscript._internal import _inliner
20
+ from onnxscript._internal.tape_builder import (
21
+ BuilderBase,
22
+ BuilderFeature,
23
+ _constant_name,
24
+ _dtype_suffix,
25
+ )
21
26
 
22
27
  # A permissible value for an op input, which can be converted to an ir.Value.
23
28
  VALUE_LIKE = Union[
@@ -48,33 +53,6 @@ def _type_suffix(element_type: type) -> str:
48
53
  return dtype.short_name() if dtype is not None else ""
49
54
 
50
55
 
51
- def _dtype_suffix(dtype: ir.DataType) -> str:
52
- """Return a short type suffix for naming constants based on ir.DataType."""
53
- return dtype.short_name()
54
-
55
-
56
- def _constant_name(
57
- value: int | float | bool | str | Sequence, type_suffix: str, num: int = 0
58
- ) -> str:
59
- """Generate a descriptive name for a constant value.
60
-
61
- Args:
62
- value: The constant value
63
- type_suffix: Type suffix (e.g., 'F', 'I64')
64
- num: A number used for generating unique names for str/sequences
65
-
66
- Returns:
67
- A name string for the constant
68
- """
69
- if isinstance(value, str):
70
- # For strings, use a generic name with cache size as unique identifier
71
- return f"const_str_{num}"
72
- if isinstance(value, (int, float, bool)):
73
- return f"const_{value}_{type_suffix}" if type_suffix else f"const_{value}"
74
- # Sequence: use generic name with cache size as unique identifier
75
- return f"const_1d_{num}"
76
-
77
-
78
56
  def lift_initializers_to_constants(graph: ir.Graph) -> None:
79
57
  """Replace every initializer in *graph* with a ``Constant`` node.
80
58
 
@@ -418,10 +396,11 @@ def build_function(
418
396
  )
419
397
 
420
398
 
421
- class GraphBuilder:
399
+ class GraphBuilder(BuilderBase):
422
400
  """Imperative builder for constructing ONNX IR graphs with automatic constant promotion, type casting, and shape inference."""
423
401
 
424
402
  def __init__(self, graph: ir.Graph, *, parent: GraphBuilder | None = None) -> None:
403
+ super().__init__(features=BuilderFeature.FULL)
425
404
  self._graph = graph
426
405
  self._parent = parent
427
406
  self._root: GraphBuilder = parent._root if parent is not None else self
@@ -474,6 +453,75 @@ class GraphBuilder:
474
453
  def functions(self) -> dict[ir.OperatorIdentifier, ir.Function]:
475
454
  return self._root._functions
476
455
 
456
+ # ------------------------------------------------------------------
457
+ # BuilderBase abstract method implementations
458
+ # ------------------------------------------------------------------
459
+
460
+ def _add_node(self, node: ir.Node) -> None:
461
+ """Append a node to the graph."""
462
+ self.graph.append(node)
463
+
464
+ def _add_initializer(self, value: ir.Value) -> None:
465
+ """Register an initializer in the root graph."""
466
+ self._root._graph.register_initializer(value)
467
+
468
+ def _record_opset(self, domain: str, version: int | None) -> None:
469
+ # Graph already tracks opset imports; nothing to do.
470
+ pass
471
+
472
+ # ------------------------------------------------------------------
473
+ # BuilderBase hook overrides
474
+ # ------------------------------------------------------------------
475
+
476
+ def _get_default_opset_version(self, domain: str = "") -> int | None:
477
+ """Return the graph's ambient opset version for the given domain."""
478
+ return self._graph.opset_imports.get(domain)
479
+
480
+ def _promote_constant(self, value: Any, dtype: ir.DataType | None) -> ir.Value:
481
+ """Cache-based constant promotion.
482
+
483
+ Delegates to the root builder so that all constant initializers
484
+ live in the root graph (outer-scope initializers are visible to
485
+ subgraphs per the ONNX spec).
486
+ """
487
+ return self._get_or_create_constant(value, dtype)
488
+
489
+ def _generate_node_name(self, op_type: str) -> str:
490
+ count = self.graph.num_nodes()
491
+ return self._qualify_node_name(f"{op_type}_node_{count}")
492
+
493
+ def _adapt_outputs(
494
+ self, outputs: int | Sequence[str | ir.Value], op_type: str
495
+ ) -> Sequence[ir.Value]:
496
+ """Pre-create named output ir.Value objects for the graph."""
497
+ if isinstance(outputs, int):
498
+ count = self.graph.num_nodes()
499
+ if outputs < 0:
500
+ raise ValueError(f"Number of outputs must be non-negative, got {outputs}")
501
+ if outputs == 1:
502
+ name = f"{op_type}_{count}" if op_type else f"{count}"
503
+ return [ir.Value(name=self._qualify_value_name(name))]
504
+ else:
505
+ names = [
506
+ (f"{op_type}_{count}_{i}" if op_type else f"{count}_{i}")
507
+ for i in range(outputs)
508
+ ]
509
+ return [ir.Value(name=self._qualify_value_name(n)) for n in names]
510
+ # Delegate to base class for Sequence[str | ir.Value]
511
+ result = super()._adapt_outputs(outputs, op_type)
512
+ assert result is not None
513
+ return result
514
+
515
+ def _annotate_node(self, node: ir.Node) -> None:
516
+ """Attach scope metadata to the node."""
517
+ node.metadata_props["namespace"] = self._build_namespace()
518
+ node.metadata_props["pkg.onnxscript.class_hierarchy"] = repr(self._scope_classes())
519
+ node.metadata_props["pkg.onnxscript.name_scopes"] = repr(self._scope_names())
520
+
521
+ # ------------------------------------------------------------------
522
+ # GraphBuilder-specific public API
523
+ # ------------------------------------------------------------------
524
+
477
525
  def initializer(
478
526
  self, tensor: ir.TensorProtocol, name: str | None = None, *, qualify: bool = True
479
527
  ) -> ir.Value:
@@ -594,158 +642,15 @@ class GraphBuilder:
594
642
  # TODO(rama): Consider caching for other tensor values.
595
643
  return self.initializer(ir.tensor(value, dtype=dtype))
596
644
 
597
- def _input_to_ir_value(
598
- self, value: VALUE_LIKE, like_type: ir.Value | None = None
599
- ) -> ir.Value | None:
600
- """Convert a permissible input (for a call to an op) into an ir.Value.
601
-
602
- Permissible values include ir.Value as well as python constants that can be converted
603
- into ONNX constant tensors. For constant values, the like_type is used to determine the
604
- target onnx type.
605
- """
606
- if isinstance(value, ir.Value):
607
- return value
608
- if value is None:
609
- return value
610
- dtype = (
611
- like_type.type.dtype
612
- if like_type is not None and like_type.type is not None
613
- else None
614
- )
615
- needs_dynamic_cast = like_type is not None and dtype is None
616
- ir_value = self._get_or_create_constant(value, dtype)
617
- # If like_type is provided but its type is unknown, insert a dynamic CastLike
618
- # so the constant is cast to match like_type's type at runtime.
619
- # The CastLike node is created in THIS builder's graph (not root),
620
- # so that it lives in the correct scope (subgraph or function body).
621
- if needs_dynamic_cast:
622
- ir_value = self.op.CastLike(ir_value, like_type)
623
- return ir_value
624
-
625
- def _adapt_outputs(
626
- self, outputs: int | Sequence[str | ir.Value], op_type: str = ""
627
- ) -> Sequence[ir.Value]:
628
- if isinstance(outputs, int):
629
- count = self.graph.num_nodes()
630
- if outputs < 0:
631
- raise ValueError(f"Number of outputs must be non-negative, got {outputs}")
632
- if outputs == 1:
633
- name = f"{op_type}_{count}" if op_type else f"{count}"
634
- return [ir.Value(name=self._qualify_value_name(name))]
635
- else:
636
- names = [
637
- (f"{op_type}_{count}_{i}" if op_type else f"{count}_{i}")
638
- for i in range(outputs)
639
- ]
640
- return [ir.Value(name=self._qualify_value_name(n)) for n in names]
641
- adapted_outputs = []
642
- for output in outputs:
643
- if isinstance(output, ir.Value):
644
- if output.name:
645
- output.name = self._qualify_value_name(output.name)
646
- adapted_outputs.append(output)
647
- elif isinstance(output, str):
648
- adapted_outputs.append(ir.Value(name=self._qualify_value_name(output)))
649
- else:
650
- raise TypeError("Output type not supported.")
651
- return adapted_outputs
652
-
653
- def _get_schema(
654
- self, op_type: str, domain: str, version: int | None
655
- ) -> onnx.defs.OpSchema | None:
656
- if version is not None:
657
- try:
658
- return onnx.defs.get_schema(op_type, version, domain)
659
- except onnx.defs.SchemaError:
660
- pass
661
- return None
662
-
663
- def _partition_inputs_attributes(
664
- self,
665
- schema: onnx.defs.OpSchema | None,
666
- inputs: Sequence[ir.Value | ir.TensorProtocol | None],
667
- kwargs: dict[str, Any],
668
- ) -> tuple[Sequence[ir.Value | ir.TensorProtocol], dict[str, Any]]:
669
- if schema is None:
670
- return inputs, kwargs
671
- op_signature = ir.schemas.OpSignature.from_op_schema(schema)
672
- return param_manipulation.separate_input_attributes_from_arguments(
673
- op_signature,
674
- list(inputs),
675
- kwargs,
676
- fill_defaults=False,
677
- allow_extra_args=False,
678
- )
645
+ def add_node(self, node: ir.Node) -> None:
646
+ """Append a node to the graph, run constant propagation and shape inference.
679
647
 
680
- def _cast_inputs(
681
- self,
682
- schema: onnx.defs.OpSchema | None,
683
- inputs: Sequence[VALUE_LIKE],
684
- ) -> Sequence[ir.Value | None]:
685
- """Uses schema specification to support a limited form of auto-casting.
686
-
687
- * Scalars are promoted to tensors.
688
- * Further. they are cast to the required type when used in ops with other
689
- tensor inputs that are required to be of same type.
690
- Thus, in "A+1" or "Add(A, 1)", the value 1 will be converted to the same
691
- type as A.
648
+ This is a backward-compatible public method used by call_inline and
649
+ other code that creates nodes manually.
692
650
  """
693
- if schema is None:
694
- return [self._input_to_ir_value(i) for i in inputs]
695
-
696
- expected_inputs = schema.inputs
697
- # We make two passes. In the first pass, we identify known type-bindings for
698
- # type-variables: eg., {'T1' : np.float32, 'T2' : np.int32}.
699
- # In the second pass, we use these bindings to cast scalar-values to
700
- # tensors of appropriate types. The two passes are needed to handle cases
701
- # like "Add(1, X)" where 1 must be cast to the same type as X.
702
- type_bindings: dict[str, ir.Value] = {}
703
- args_typevars: list[tuple[ir.Value | None, str | None]] = []
704
- for i, x in enumerate(inputs):
705
- if i < len(expected_inputs):
706
- expected = expected_inputs[i]
707
- elif expected_inputs and (
708
- expected_inputs[-1].option == onnx.defs.OpSchema.FormalParameterOption.Variadic
709
- ):
710
- expected = expected_inputs[-1]
711
- if not expected.is_homogeneous:
712
- args_typevars.append((x, None))
713
- continue
714
- else:
715
- raise ValueError(
716
- f"Number of actual parameters {len(inputs)} "
717
- f"exceeds number of formal parameters {len(expected_inputs)}."
718
- )
719
- typevar = expected.type_str
720
- if ("(" not in typevar) and (typevar not in type_bindings):
721
- # typevar is an identifier, like "T"
722
- if isinstance(x, ir.Value):
723
- type_bindings[typevar] = x
724
- args_typevars.append((x, typevar))
725
-
726
- def adapt(x, typevar: str | None) -> ir.Value | None:
727
- if x is None:
728
- return None
729
- if typevar is None:
730
- return self._input_to_ir_value(x)
731
- type_like = type_bindings.get(typevar)
732
- return self._input_to_ir_value(x, type_like)
733
-
734
- return [adapt(x, typevar) for x, typevar in args_typevars]
735
-
736
- def _cast_attributes(
737
- self,
738
- schema: onnx.defs.OpSchema | None,
739
- attributes: dict[str, Any],
740
- ) -> dict[str, Any]:
741
- del schema # Not implemented yet
742
- return attributes if attributes is not None else {}
743
-
744
- def add_node(self, node: ir.Node) -> None:
745
- """Append a node to the graph, run constant propagation and shape inference."""
746
- self.graph.append(node)
747
- onnxscript.optimizer.basic_constant_propagation([node])
748
- inference.infer_outputs(node)
651
+ self._add_node(node)
652
+ self._constant_propagation(node)
653
+ self._infer_shapes(node)
749
654
 
750
655
  def subgraph(
751
656
  self,
@@ -796,46 +701,6 @@ class GraphBuilder:
796
701
  parent=self,
797
702
  )
798
703
 
799
- def call_op(
800
- self,
801
- op_type: str,
802
- inputs: Sequence[ir.Value | ir.TensorProtocol | None],
803
- kwargs: dict[str, Any],
804
- /,
805
- domain: str = "",
806
- version: int | None = None,
807
- outputs: int | Sequence[str | ir.Value] = 1,
808
- ):
809
- """Create an ONNX node and add it to the graph, returning its output value(s)."""
810
- count = self.graph.num_nodes()
811
- node_name = self._qualify_node_name(f"{op_type}_node_{count}")
812
-
813
- output_values = self._adapt_outputs(outputs, op_type)
814
-
815
- schema = self._get_schema(op_type, domain, version)
816
- inputs, attributes = self._partition_inputs_attributes(schema, inputs, kwargs)
817
- inputs = self._cast_inputs(schema, inputs)
818
- attributes = self._cast_attributes(schema, attributes)
819
-
820
- node = ir.node(
821
- op_type,
822
- inputs,
823
- attributes=attributes or None,
824
- domain=domain,
825
- outputs=output_values,
826
- version=version,
827
- name=node_name,
828
- )
829
-
830
- # Attach scope metadata to the node
831
- node.metadata_props["namespace"] = self._build_namespace()
832
- node.metadata_props["pkg.onnxscript.class_hierarchy"] = repr(self._scope_classes())
833
- node.metadata_props["pkg.onnxscript.name_scopes"] = repr(self._scope_names())
834
-
835
- self.add_node(node)
836
-
837
- return node.outputs if len(node.outputs) > 1 else node.outputs[0]
838
-
839
704
  def call(
840
705
  self,
841
706
  function: ir.Function | onnxscript.OnnxFunction,
@@ -1038,8 +903,9 @@ class OpBuilder:
1038
903
  domain = kwargs.pop("_domain", self._domain)
1039
904
  version = kwargs.pop("_version", self._version)
1040
905
  outputs = kwargs.pop("_outputs", 1)
906
+ name = kwargs.pop("_name", None)
1041
907
  return self._builder.call_op(
1042
- op_type, inputs, kwargs, domain=domain, version=version, outputs=outputs
908
+ op_type, inputs, kwargs, domain=domain, version=version, outputs=outputs, name=name
1043
909
  )
1044
910
 
1045
911
  def __getattr__(self, op_type: str) -> Callable: