onnxscript 0.7.1.dev20260509__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.
- {onnxscript-0.7.1.dev20260509/onnxscript.egg-info → onnxscript-0.7.1.dev20260522}/PKG-INFO +2 -2
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/__init__.py +7 -2
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/_inference.py +11 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/builder.py +92 -226
- onnxscript-0.7.1.dev20260522/onnxscript/_internal/tape_builder.py +545 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/optimizer/_constant_folding.py +2 -2
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_context.py +5 -5
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_batchnorm.py +4 -6
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_pad_into_conv.py +9 -8
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_min_max_to_clip.py +2 -1
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_remove_optional_bias.py +2 -2
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/version_converter/_version_converter.py +2 -2
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522/onnxscript.egg-info}/PKG-INFO +2 -2
- onnxscript-0.7.1.dev20260509/onnxscript/_internal/tape_builder.py +0 -207
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/LICENSE +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/MANIFEST.in +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/README.md +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/VERSION +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_11.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_5.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_6.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_7.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_8.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_framework_apis/torch_2_9.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/_inliner.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/analysis.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/ast_utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/autocast.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/converter.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/deprecation.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/evaluator.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/irbuilder.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/main.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/param_manipulation.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/sourceinfo.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/type_annotation.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/values.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/version_utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/backend/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/backend/onnx_backend.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/backend/onnx_export.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/evaluator.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/tools/torch_lib/deduce_type_constraints.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/tools/torch_lib/generate_aten_signatures.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/tools/torch_lib/generate_prims_signatures.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/_constants.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/_flags.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/graph_building/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/common.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/core.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/fft.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/linalg.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/nested.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/nn.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/prims.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/quantized_decomposed.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/sparse.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/special.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/ops/vision.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/registration.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/function_libs/torch_lib/tensor_typing.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/_schemas.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/convenience.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/passes/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/ir/passes/common/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/_module.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/_module_list.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/_parameter.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/nn/_sequential.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset1.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset10.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset11.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset12.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset13.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset14.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset15.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset16.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset17.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset18.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset19.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset2.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset20.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset21.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset22.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset23.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset24.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset3.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset4.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset5.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset6.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset7.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset8.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset9.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml1.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml2.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml3.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml4.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml5.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/onnx_types.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/optimizer/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/optimizer/_optimizer.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/py.typed +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_basics.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_fusion_utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_ir_utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_matcher.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_pattern_ir.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/_rewrite_rule.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_bart_encoder.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_phi2lm.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_phi4lm.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_rotary_embedding_models.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_smollm_1.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_smollm_2.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_test_models.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_whisper_decoder.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/models/_whisper_encoder.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/onnx_fusions/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/onnx_fusions/_onnx_fusions.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/onnxruntime/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/onnxruntime/bfloat16_utils/bfloat16_converter.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/_core.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/_test_utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/attention.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/bias_gelu.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/cos_sin_cache.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/erfgelu.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/fused_matmul_rule_sets.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/gelu.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/gqa.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/gqa_packed_qkv.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/group_normalization_merge_silu.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/instance_to_group_normalization.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/mha.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/mha_bias.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/mha_scale.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/rms_normalization.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/rotary_embedding.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/sdpa.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/sdpa_via_mha.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/shape_optimization.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/skip_normalization.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/ort_fusions/softmax.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/pattern.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_basic_rules.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_broadcast_to_matmul.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_cast_constant_of_shape.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_collapse_slices.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_conv_affine.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_hardswish.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_fuse_relus_clips.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_gemm_to_matmul_add.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_matmul_add_to_gemm.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_no_op.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_redundant_scatter_nd.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/common/_remove_expand_before_binary_op.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/_gqa.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/_layer_norm.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/_rms_normalization.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/rules/fusion/_rotary_embedding.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/rewriter/testing.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/tensor.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/testing/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/memory_peak.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/llama.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/mistral.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/phi.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/tools/transformers_models/phi3.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/evaluation_utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/metadata_merger.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/replace.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/timing_utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/utils/utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/values.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/version_converter/__init__.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/version_converter/_c_api_utils.py +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript.egg-info/SOURCES.txt +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript.egg-info/dependency_links.txt +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript.egg-info/requires.txt +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript.egg-info/top_level.txt +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/pyproject.toml +0 -0
- {onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/setup.cfg +0 -0
- {onnxscript-0.7.1.dev20260509 → 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.
|
|
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/
|
|
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,7 +14,7 @@ __all__ = [
|
|
|
14
14
|
"TracedOnnxFunction",
|
|
15
15
|
"GraphBuilder",
|
|
16
16
|
"OpBuilder",
|
|
17
|
-
"
|
|
17
|
+
"BuilderBase",
|
|
18
18
|
"TapeBuilder",
|
|
19
19
|
"build_function",
|
|
20
20
|
"build_graph",
|
|
@@ -69,6 +69,7 @@ __all__ = [
|
|
|
69
69
|
"opset_ai_onnx_ml4",
|
|
70
70
|
"opset_ai_onnx_ml5",
|
|
71
71
|
"DEBUG",
|
|
72
|
+
"BuilderFeature",
|
|
72
73
|
]
|
|
73
74
|
|
|
74
75
|
import importlib.metadata
|
|
@@ -135,7 +136,11 @@ from .onnx_types import (
|
|
|
135
136
|
|
|
136
137
|
from . import ir, nn, optimizer, rewriter, version_converter
|
|
137
138
|
from ._internal.builder import GraphBuilder, OpBuilder, build_function, build_graph
|
|
138
|
-
from ._internal.tape_builder import
|
|
139
|
+
from ._internal.tape_builder import (
|
|
140
|
+
BuilderBase,
|
|
141
|
+
BuilderFeature,
|
|
142
|
+
TapeBuilder,
|
|
143
|
+
)
|
|
139
144
|
from ._internal.utils import external_tensor
|
|
140
145
|
from ._internal.values import OnnxFunction, TracedOnnxFunction
|
|
141
146
|
|
{onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/_inference.py
RENAMED
|
@@ -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
|
{onnxscript-0.7.1.dev20260509 → onnxscript-0.7.1.dev20260522}/onnxscript/_internal/builder.py
RENAMED
|
@@ -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
|
|
7
|
-
programmatic construction of graphs with proper scoping,
|
|
8
|
-
creation. The OpBuilder class provides dynamic op
|
|
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
|
|
19
|
-
|
|
20
|
-
from onnxscript._internal import
|
|
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
|
|
598
|
-
|
|
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
|
-
|
|
681
|
-
|
|
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
|
-
|
|
694
|
-
|
|
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:
|