onnxscript 0.1.0.dev20231122__tar.gz → 0.1.0.dev20231124__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 (201) hide show
  1. {onnxscript-0.1.0.dev20231122/onnxscript.egg-info → onnxscript-0.1.0.dev20231124}/PKG-INFO +2 -2
  2. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/graph_building.py +153 -17
  3. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/core.py +10 -7
  4. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/special.py +4 -4
  5. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/function_libs/torch_lib/ops_test_common.py +4 -0
  6. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/function_libs/torch_lib/ops_test_data.py +101 -21
  7. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124/onnxscript.egg-info}/PKG-INFO +2 -2
  8. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/pyproject.toml +0 -1
  9. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/setup.py +13 -1
  10. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/LICENSE +0 -0
  11. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/MANIFEST.in +0 -0
  12. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/README.md +0 -0
  13. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/VERSION +0 -0
  14. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/__init__.py +0 -0
  15. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/__init__.py +0 -0
  16. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/analysis.py +0 -0
  17. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/analysis_test.py +0 -0
  18. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/ast_utils.py +0 -0
  19. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/autocast.py +0 -0
  20. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/deprecation.py +0 -0
  21. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/param_manipulation.py +0 -0
  22. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/param_manipulation_test.py +0 -0
  23. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/runtime_typing.py +0 -0
  24. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/utils.py +0 -0
  25. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/_internal/version_utils.py +0 -0
  26. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/backend/__init__.py +0 -0
  27. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/backend/onnx_backend.py +0 -0
  28. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/backend/onnx_backend_test.py +0 -0
  29. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/backend/onnx_export.py +0 -0
  30. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/backend/onnx_export_test.py +0 -0
  31. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/converter.py +0 -0
  32. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/converter_test.py +0 -0
  33. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/__init__.py +0 -0
  34. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/_infra.py +0 -0
  35. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/context.py +0 -0
  36. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/decorator.py +0 -0
  37. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/formatter.py +0 -0
  38. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/__init__.py +0 -0
  39. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_address.py +0 -0
  40. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_artifact.py +0 -0
  41. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_artifact_change.py +0 -0
  42. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_artifact_content.py +0 -0
  43. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_artifact_location.py +0 -0
  44. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_attachment.py +0 -0
  45. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_code_flow.py +0 -0
  46. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_configuration_override.py +0 -0
  47. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_conversion.py +0 -0
  48. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_edge.py +0 -0
  49. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_edge_traversal.py +0 -0
  50. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_exception.py +0 -0
  51. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_external_properties.py +0 -0
  52. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_external_property_file_reference.py +0 -0
  53. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_external_property_file_references.py +0 -0
  54. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_fix.py +0 -0
  55. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_graph.py +0 -0
  56. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_graph_traversal.py +0 -0
  57. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_invocation.py +0 -0
  58. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_location.py +0 -0
  59. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_location_relationship.py +0 -0
  60. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_logical_location.py +0 -0
  61. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_message.py +0 -0
  62. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_multiformat_message_string.py +0 -0
  63. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_node.py +0 -0
  64. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_notification.py +0 -0
  65. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_physical_location.py +0 -0
  66. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_property_bag.py +0 -0
  67. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_rectangle.py +0 -0
  68. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_region.py +0 -0
  69. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_replacement.py +0 -0
  70. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_reporting_configuration.py +0 -0
  71. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_reporting_descriptor.py +0 -0
  72. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_reporting_descriptor_reference.py +0 -0
  73. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_reporting_descriptor_relationship.py +0 -0
  74. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_result.py +0 -0
  75. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_result_provenance.py +0 -0
  76. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_run.py +0 -0
  77. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_run_automation_details.py +0 -0
  78. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_sarif_log.py +0 -0
  79. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_special_locations.py +0 -0
  80. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_stack.py +0 -0
  81. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_stack_frame.py +0 -0
  82. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_suppression.py +0 -0
  83. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_thread_flow.py +0 -0
  84. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_thread_flow_location.py +0 -0
  85. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_tool.py +0 -0
  86. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_tool_component.py +0 -0
  87. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_tool_component_reference.py +0 -0
  88. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_translation_metadata.py +0 -0
  89. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_version_control_details.py +0 -0
  90. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_web_request.py +0 -0
  91. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/_web_response.py +0 -0
  92. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/sarif/version.py +0 -0
  93. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/diagnostics/infra/utils.py +0 -0
  94. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/evaluator.py +0 -0
  95. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/evaluator_test.py +0 -0
  96. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/tools/torch_lib/deduce_type_constraints.py +0 -0
  97. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/tools/torch_lib/deduce_type_constraints_test.py +0 -0
  98. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/tools/torch_lib/generate_aten_signatures.py +0 -0
  99. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/tools/torch_lib/generate_prims_signatures.py +0 -0
  100. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/__init__.py +0 -0
  101. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/_constants.py +0 -0
  102. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/_flags.py +0 -0
  103. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/graph_building_test.py +0 -0
  104. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/__init__.py +0 -0
  105. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/common.py +0 -0
  106. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/fft.py +0 -0
  107. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/linalg.py +0 -0
  108. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/nested.py +0 -0
  109. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/nn.py +0 -0
  110. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/prims.py +0 -0
  111. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/ops/sparse.py +0 -0
  112. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/registration.py +0 -0
  113. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/function_libs/torch_lib/tensor_typing.py +0 -0
  114. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/irbuilder.py +0 -0
  115. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/main.py +0 -0
  116. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/__init__.py +0 -0
  117. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset1.py +0 -0
  118. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset10.py +0 -0
  119. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset11.py +0 -0
  120. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset12.py +0 -0
  121. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset13.py +0 -0
  122. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset14.py +0 -0
  123. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset15.py +0 -0
  124. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset16.py +0 -0
  125. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset17.py +0 -0
  126. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset18.py +0 -0
  127. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset19.py +0 -0
  128. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset2.py +0 -0
  129. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset3.py +0 -0
  130. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset4.py +0 -0
  131. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset5.py +0 -0
  132. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset6.py +0 -0
  133. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset7.py +0 -0
  134. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset8.py +0 -0
  135. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset9.py +0 -0
  136. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml1.py +0 -0
  137. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml2.py +0 -0
  138. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset_ai_onnx_ml3.py +0 -0
  139. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_opset/_impl/opset_ai_onnx_preview_training1.py +0 -0
  140. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/onnx_types.py +0 -0
  141. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/py.typed +0 -0
  142. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/sourceinfo.py +0 -0
  143. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tensor.py +0 -0
  144. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tensor_test.py +0 -0
  145. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/testing.py +0 -0
  146. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/__init__.py +0 -0
  147. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/common/__init__.py +0 -0
  148. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/common/onnx_script_test_case.py +0 -0
  149. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/common/testutils.py +0 -0
  150. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/eager_mode_test.py +0 -0
  151. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/eager_test.py +0 -0
  152. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/external_tensor_test.py +0 -0
  153. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/function_libs/torch_lib/error_reproduction.py +0 -0
  154. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/function_libs/torch_lib/extra_opinfo.py +0 -0
  155. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/function_libs/torch_lib/ops_test.py +0 -0
  156. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/functions/attr_test.py +0 -0
  157. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/functions/gemmgelu.py +0 -0
  158. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/functions/gemmgelu_test.py +0 -0
  159. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/functions/if_test.py +0 -0
  160. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/functions/onnxfns1A_test.py +0 -0
  161. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/functions/onnxfns2_test.py +0 -0
  162. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/functions/onnxfns_test.py +0 -0
  163. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/functions/ort_custom_ops.py +0 -0
  164. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/if_test.py +0 -0
  165. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/loop_test.py +0 -0
  166. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/__init__.py +0 -0
  167. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/attrref.py +0 -0
  168. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/cast_like.py +0 -0
  169. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/different_opset.py +0 -0
  170. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/dropout.py +0 -0
  171. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/eager_op.py +0 -0
  172. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/eg1.py +0 -0
  173. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/getitem.py +0 -0
  174. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/graph_attr.py +0 -0
  175. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/identity.py +0 -0
  176. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/if_statement.py +0 -0
  177. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/loops_break.py +0 -0
  178. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/loops_while.py +0 -0
  179. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/m1.py +0 -0
  180. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/multi.py +0 -0
  181. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/onnxfns1.py +0 -0
  182. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/onnxfns1A.py +0 -0
  183. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/onnxfns2.py +0 -0
  184. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/opt_input.py +0 -0
  185. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/opt_output.py +0 -0
  186. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/renaming.py +0 -0
  187. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/sequences.py +0 -0
  188. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/signal_dft.py +0 -0
  189. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/subfunction.py +0 -0
  190. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/models/type_double.py +0 -0
  191. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/onnx_types_test.py +0 -0
  192. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/tests/operator_test.py +0 -0
  193. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/type_annotation.py +0 -0
  194. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/type_annotation_test.py +0 -0
  195. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/values.py +0 -0
  196. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript/values_test.py +0 -0
  197. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript.egg-info/SOURCES.txt +0 -0
  198. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript.egg-info/dependency_links.txt +0 -0
  199. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript.egg-info/requires.txt +0 -0
  200. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/onnxscript.egg-info/top_level.txt +0 -0
  201. {onnxscript-0.1.0.dev20231122 → onnxscript-0.1.0.dev20231124}/setup.cfg +0 -0
@@ -1,7 +1,8 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: onnxscript
3
- Version: 0.1.0.dev20231122
3
+ Version: 0.1.0.dev20231124
4
4
  Summary: Naturally author ONNX functions and models using a subset of Python
5
+ Home-page: https://onnxscript.ai/
5
6
  Author-email: Microsoft Corporation <onnx@microsoft.com>
6
7
  License: MIT License
7
8
 
@@ -25,7 +26,6 @@ License: MIT License
25
26
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
27
  SOFTWARE.
27
28
 
28
- Project-URL: Repository, https://github.com/microsoft/onnxscript
29
29
  Classifier: Development Status :: 4 - Beta
30
30
  Classifier: Environment :: Console
31
31
  Classifier: Intended Audience :: Developers
@@ -90,11 +90,14 @@ def _rename_intermediate_value(name: str) -> str:
90
90
  class TorchScriptTensor(onnxscript_tensor.Tensor):
91
91
  """A onnxscript tensor that wraps a torchscript Value."""
92
92
 
93
- def __init__(self, value: torch.Value):
93
+ def __init__(
94
+ self,
95
+ value: torch.Value,
96
+ ):
94
97
  super().__init__(None)
95
98
  self._torch_value: torch.Value = value
96
99
  self._concrete_value: Optional[np.ndarray] = None
97
- self._shape: Optional[Tuple[int | None, ...]] = None
100
+ self._shape: Optional[Tuple[int | str | None, ...]] = None
98
101
  self._torch_dtype: Optional[torch.dtype] = None
99
102
  self._name: Optional[str] = None
100
103
  self._is_complex: bool = False
@@ -125,6 +128,9 @@ class TorchScriptTensor(onnxscript_tensor.Tensor):
125
128
 
126
129
  @property # type: ignore[override]
127
130
  def rank(self) -> int | None:
131
+ if self._shape is not None:
132
+ return len(self._shape)
133
+
128
134
  value_type = self._torch_value.type()
129
135
  if value_type is None:
130
136
  return None
@@ -132,7 +138,7 @@ class TorchScriptTensor(onnxscript_tensor.Tensor):
132
138
  return value_type.dim()
133
139
 
134
140
  @property # type: ignore[override]
135
- def shape(self) -> Tuple[int | None, ...] | None:
141
+ def shape(self) -> Tuple[int | str | None, ...] | None:
136
142
  if self._shape is not None:
137
143
  return self._shape
138
144
 
@@ -149,9 +155,17 @@ class TorchScriptTensor(onnxscript_tensor.Tensor):
149
155
  return tuple(shape)
150
156
 
151
157
  @shape.setter
152
- def shape(self, shape: Tuple[int | None, ...]):
153
- self._shape = shape
154
- self._torch_value.setType(self._torch_value.type().with_sizes(list(shape)))
158
+ def shape(self, shape: Union[torch.Size, Tuple[int | str | None, ...]]):
159
+ # Normalize torch symbolic dimension size to str.
160
+ torch_sym_types = (torch.SymInt, torch.SymFloat, torch.SymBool)
161
+ self._shape = tuple(
162
+ str(dim.node) if isinstance(dim, torch_sym_types) else dim # type: ignore[union-attr]
163
+ for dim in shape
164
+ )
165
+ # jit api does not support assigning symbolic shapes,
166
+ # hence symbols are replaced as None.
167
+ jit_shape = tuple(dim if isinstance(dim, int) else None for dim in shape)
168
+ self._torch_value.setType(self._torch_value.type().with_sizes(list(jit_shape)))
155
169
 
156
170
  @property # type: ignore[override]
157
171
  def dtype(self) -> torch.dtype | None:
@@ -195,6 +209,15 @@ class TorchScriptTensor(onnxscript_tensor.Tensor):
195
209
  """The symbolic Value in torch.Graph."""
196
210
  return self._torch_value
197
211
 
212
+ def value_info(self) -> Optional[onnx.ValueInfoProto]:
213
+ try:
214
+ dtype = self.onnx_dtype.value
215
+ except torch.onnx.errors.OnnxExporterError:
216
+ return None
217
+ if dtype == onnx.TensorProto.UNDEFINED:
218
+ return None
219
+ return onnx.helper.make_tensor_value_info(self.name, dtype, self.shape)
220
+
198
221
 
199
222
  @runtime_typing.checked
200
223
  def _unwrap_tensor_to_torch_value(
@@ -223,7 +246,12 @@ def _unwrap_tensor_to_torch_value(
223
246
 
224
247
  @runtime_typing.checked
225
248
  def _wrap_torch_value_to_tensor(
226
- value: Union[torch.Value, Mapping[str, ValidTorchValueType], Sequence[ValidTorchValueType]]
249
+ value: Union[
250
+ torch.Value, Mapping[str, ValidTorchValueType], Sequence[ValidTorchValueType]
251
+ ],
252
+ *,
253
+ shape: Optional[Union[torch.Size, Tuple[Union[int, str, None], ...]]] = None,
254
+ dtype: Optional[torch.dtype] = None,
227
255
  ) -> Union[
228
256
  ValidArgumentType,
229
257
  Dict[str, ValidArgumentType],
@@ -232,7 +260,12 @@ def _wrap_torch_value_to_tensor(
232
260
  ]:
233
261
  """Wrap torch.Value to TorchScriptTensor."""
234
262
  if isinstance(value, torch.Value):
235
- return TorchScriptTensor(value)
263
+ tensor = TorchScriptTensor(value)
264
+ if shape is not None:
265
+ tensor.shape = shape
266
+ if dtype is not None:
267
+ tensor.dtype = dtype
268
+ return tensor
236
269
  if isinstance(value, dict):
237
270
  return {k: _wrap_torch_value_to_tensor(v) for k, v in value.items()} # type: ignore[misc,return-value]
238
271
  if isinstance(value, list):
@@ -399,6 +432,16 @@ class TorchScriptGraph:
399
432
  self._parent_torch_script_graph = parent_torch_script_graph
400
433
  # Domain name of the graph. None if this is the top level graph.
401
434
  self._domain_name: Optional[str] = domain_name
435
+ # Mapping from `torch.Value` to `TorchScriptTensor`.
436
+ # Because `torch.Value` does not provide API to set and retrieve symbolic shapes,
437
+ # and because `TorchScriptTensor` is not accessible through the `torch.Graph` graph,
438
+ # this mapping is used to keep track of the `TorchScriptTensor` associated with
439
+ # `torch.Value`.
440
+ # `TorchScriptTensor` records dtype and symbolic shapes.
441
+ # This info is later serialized as `ValueInfoProto` inside ONNX, to
442
+ # provide shape and dtype information for nodes within nested function calls.
443
+ # https://github.com/onnx/onnx/issues/5487
444
+ self._value_to_tensor: Dict[torch.Value, TorchScriptTensor] = {}
402
445
 
403
446
  if self._domain_name is None and self._parent_torch_script_graph is not None:
404
447
  raise RuntimeError(
@@ -441,7 +484,7 @@ class TorchScriptGraph:
441
484
  def add_input(
442
485
  self,
443
486
  input_name: Optional[str],
444
- shape: Optional[Union[torch.Size, Sequence[Union[int, str, None]]]] = None,
487
+ shape: Optional[Union[torch.Size, Tuple[Union[int, str, None], ...]]] = None,
445
488
  dtype: Optional[torch.dtype] = None,
446
489
  ) -> TorchScriptTensor:
447
490
  if input_name is None:
@@ -462,7 +505,11 @@ class TorchScriptGraph:
462
505
  [dim if isinstance(dim, int) else None for dim in shape] # type: ignore[union-attr]
463
506
  )
464
507
  )
465
- tensor_value = _wrap_torch_value_to_tensor(torch_value)
508
+ tensor_value = _wrap_torch_value_to_tensor(torch_value, shape=shape, dtype=dtype)
509
+ if isinstance(tensor_value, TorchScriptTensor):
510
+ # NOTE: Only track value that maps to tensor.
511
+ # Value that maps to Sequence/Dict of tensors is not tracked.
512
+ self._value_to_tensor[torch_value] = tensor_value
466
513
  return tensor_value # type: ignore[return-value]
467
514
 
468
515
  @runtime_typing.checked
@@ -486,16 +533,16 @@ class TorchScriptGraph:
486
533
  self._initializers_inputs_from_parent[
487
534
  name
488
535
  ] = self._parent_torch_script_graph.add_initializer(name, value)
489
- torch_value = self._torch_graph.addInput(name)
490
- torch_value.setType(torch.TensorType.create_from_tensor(value))
491
- tensor_value = _wrap_torch_value_to_tensor(torch_value)
492
- self._initializers_inputs[name] = tensor_value # type: ignore[assignment]
493
- return tensor_value # type: ignore[return-value]
536
+ else:
537
+ self._initializers[name] = value
494
538
 
495
- self._initializers[name] = value
496
539
  torch_value = self._torch_graph.addInput(name)
497
540
  torch_value.setType(torch.TensorType.create_from_tensor(value))
498
- tensor_value = _wrap_torch_value_to_tensor(torch_value)
541
+ tensor_value = _wrap_torch_value_to_tensor(
542
+ torch_value, shape=value.shape, dtype=value.dtype
543
+ )
544
+ if isinstance(tensor_value, TorchScriptTensor):
545
+ self._value_to_tensor[torch_value] = tensor_value
499
546
  self._initializers_inputs[name] = tensor_value # type: ignore[assignment]
500
547
  return tensor_value # type: ignore[return-value]
501
548
 
@@ -595,11 +642,16 @@ class TorchScriptGraph:
595
642
  n_outputs=n_outputs,
596
643
  )
597
644
  assert result, "Expected at least one output from ONNX op call."
645
+ # NOTE: TorchScriptTensor is created here, however neither dtype nor shape is
646
+ # set. It is expected that exporter will modify the tensor being returned and
647
+ # set these info.
598
648
  if len(result) == 1:
599
649
  tensor = TorchScriptTensor(result[0])
600
650
  tensor.name = _rename_intermediate_value(tensor.name)
651
+ self._value_to_tensor[result[0]] = tensor
601
652
  return tensor
602
653
  tensors = tuple(TorchScriptTensor(v) for v in result)
654
+ self._value_to_tensor.update(dict(zip(result, tensors)))
603
655
  for tensor in tensors:
604
656
  tensor.name = _rename_intermediate_value(tensor.name)
605
657
  return tensors
@@ -634,6 +686,54 @@ class TorchScriptGraph:
634
686
  function_proto_dict[name_domain] = function.to_function_proto()
635
687
  return function_proto_dict
636
688
 
689
+ @runtime_typing.checked
690
+ def _override_with_symbolic_value_info_proto(self, onnx_model: onnx.ModelProto):
691
+ existing_value_info = {info.name: info for info in onnx_model.graph.value_info}
692
+
693
+ # Override value_info for top level graph inputs.
694
+ for input in self.torch_graph.inputs():
695
+ if input not in self._value_to_tensor:
696
+ raise RuntimeError(f"Input '{input.debugName()}' has no type.")
697
+ tensor = self._value_to_tensor[input]
698
+ if (value_info := tensor.value_info()) is None:
699
+ continue
700
+ for i, input_info in enumerate(onnx_model.graph.input):
701
+ if input_info.name == input.debugName():
702
+ onnx_model.graph.input.insert(i, value_info)
703
+ onnx_model.graph.input.remove(input_info)
704
+ break
705
+
706
+ # Override value_info for top level graph outputs.
707
+ for output in self.torch_graph.outputs():
708
+ if output not in self._value_to_tensor:
709
+ raise RuntimeError(f"Output '{output.debugName()}' has no type.")
710
+ tensor = self._value_to_tensor[output]
711
+ if (value_info := tensor.value_info()) is None:
712
+ continue
713
+ for i, output_info in enumerate(onnx_model.graph.output):
714
+ if output_info.name == output.debugName():
715
+ onnx_model.graph.output.insert(i, value_info)
716
+ onnx_model.graph.output.remove(output_info)
717
+ break
718
+
719
+ # Remove existing static/incomplete value info.
720
+ del onnx_model.graph.value_info[:]
721
+
722
+ # Insert value info for nodes within nested function calls.
723
+ # NOTE: This is an experimental feature, since in official ONNX spec, nodes
724
+ # within FunctionProto to have value info. https://github.com/onnx/onnx/issues/5487
725
+ # The names for value info are generated uniquely to be retrievable based on
726
+ # the call site and call stack.
727
+ # The naming strategy is subject to change. Since all local functions representing
728
+ # nn.Modules exported by dynamo exporter have unique call sites, their function
729
+ # op_type name can serve to form the unique identifier for value info.
730
+ function_value_infos = self.generate_function_value_info_proto()
731
+ # Override existing value info for nodes in top level graph.
732
+ existing_value_info.update(function_value_infos)
733
+ onnx_model.graph.value_info.extend(existing_value_info.values())
734
+
735
+ return onnx_model
736
+
637
737
  @runtime_typing.checked
638
738
  def add_op_call(
639
739
  self,
@@ -692,6 +792,39 @@ class TorchScriptGraph:
692
792
  n_outputs=sub_torch_script_graph.num_outputs,
693
793
  )
694
794
 
795
+ @runtime_typing.checked
796
+ def generate_function_value_info_proto(
797
+ self, prefix: str = ""
798
+ ) -> Mapping[str, onnx.ValueInfoProto]:
799
+ """Unique naming strategies
800
+
801
+ {function1_op_type}/{function2_op_type}/.../{value_name}
802
+
803
+ As long as function op_type has unique call site, this is safe.
804
+
805
+ Preferably, the following is better
806
+
807
+ {node1_name}/{node2_name}/.../{value_name}
808
+
809
+ However, node name is an optional field generated on the fly during torchscript
810
+ graph serialization to onnx model proto. Such info is not retrievable at this point.
811
+ """
812
+ named_value_info = {}
813
+ for torch_value, tensor in self._value_to_tensor.items():
814
+ name = torch_value.debugName()
815
+ if (value_info := tensor.value_info()) is None:
816
+ continue
817
+ if prefix:
818
+ name = f"{prefix}/{name}"
819
+ named_value_info[name] = value_info
820
+ for name, sub_graph in self._sub_torch_script_graphs.items():
821
+ named_value_info.update(
822
+ sub_graph.generate_function_value_info_proto(
823
+ f"{prefix}/{name}" if prefix else name
824
+ )
825
+ )
826
+ return named_value_info
827
+
695
828
  @runtime_typing.checked
696
829
  def to_function_proto(self, opset_version: int, function_name: str) -> onnx.FunctionProto:
697
830
  assert len(self.initializers) == 0, "Model local functions cannot have initializers."
@@ -801,6 +934,9 @@ class TorchScriptGraph:
801
934
  onnx_model.functions.extend(function_proto_dict.values())
802
935
  onnx_model.functions.extend(_shared_functions())
803
936
 
937
+ # Override value_infos with symbolic shapes.
938
+ onnx_model = self._override_with_symbolic_value_info_proto(onnx_model)
939
+
804
940
  # `_export_onnx` only exports opset_imports that is visible to it. It does not
805
941
  # export opset_imports for nested functions, since it does not have access to
806
942
  # them. We manually add them back and merge with existing opset_imports in the
@@ -365,7 +365,9 @@ def aten_all_dims(self: TTensor, dim: Sequence[int] = (), keepdim: bool = False)
365
365
  if not dim:
366
366
  return aten_all_dims_no_dim(self, keepdim)
367
367
  for d in dim:
368
- self = aten_all_dim(self, d, keepdim)
368
+ self = aten_all_dim(self, d, keepdim=True)
369
+ if not keepdim:
370
+ self = op.Squeeze(self, list(dim))
369
371
  return self
370
372
 
371
373
 
@@ -488,7 +490,9 @@ def aten_any_dims(self: TTensor, dim: Sequence[int] = (), keepdim: bool = False)
488
490
  if not dim:
489
491
  return aten_any_dims_no_dim(self, keepdim)
490
492
  for d in dim:
491
- self = aten_any_dim(self, d, keepdim)
493
+ self = aten_any_dim(self, d, keepdim=True)
494
+ if not keepdim:
495
+ self = op.Squeeze(self, list(dim))
492
496
  return self
493
497
 
494
498
 
@@ -7339,17 +7343,16 @@ def aten_smm(self: TensorType, mat2: TensorType) -> TensorType:
7339
7343
  raise NotImplementedError()
7340
7344
 
7341
7345
 
7342
- @torch_op(("aten::softmax", "aten::softmax.int", "aten::special_softmax"))
7343
- def aten_softmax(
7344
- self: TFloatOrBFloat16, dim: int, dtype: int = FLOAT.dtype
7345
- ) -> TFloatOrBFloat16:
7346
+ @torch_op(("aten::softmax", "aten::softmax.int", "aten::special_softmax"), trace_only=True)
7347
+ def aten_softmax(self: TFloatOrBFloat16, dim: int, dtype: int = -1) -> TFloatOrBFloat16:
7346
7348
  """softmax(Tensor self, int dim, ScalarType? dtype=None) -> Tensor"""
7347
7349
 
7348
7350
  self_is_scalar = IsScalar(self)
7349
7351
  if self_is_scalar:
7350
7352
  self = op.Unsqueeze(self, op.Constant(value_ints=[0]))
7351
7353
  result = op.Softmax(self, axis=dim)
7352
- result = op.Cast(result, to=dtype)
7354
+ if dtype != -1:
7355
+ result = op.Cast(result, to=dtype)
7353
7356
  if self_is_scalar:
7354
7357
  # Convert to scalar when input is scalar
7355
7358
  result = op.Squeeze(result)
@@ -13,7 +13,6 @@ from __future__ import annotations
13
13
 
14
14
  from typing import Optional, Sequence
15
15
 
16
- from onnxscript import FLOAT
17
16
  from onnxscript.function_libs.torch_lib.ops import common as common_ops
18
17
  from onnxscript.function_libs.torch_lib.registration import torch_op
19
18
  from onnxscript.function_libs.torch_lib.tensor_typing import TFloatOrBFloat16
@@ -212,9 +211,9 @@ def aten_special_log_ndtr(self: TensorType) -> TensorType:
212
211
  raise NotImplementedError()
213
212
 
214
213
 
215
- @torch_op(("aten::log_softmax", "aten::special_log_softmax"))
214
+ @torch_op(("aten::log_softmax", "aten::special_log_softmax"), trace_only=True)
216
215
  def aten_special_log_softmax(
217
- self: TFloatOrBFloat16, dim: int, dtype: int = FLOAT.dtype
216
+ self: TFloatOrBFloat16, dim: int, dtype: int = -1
218
217
  ) -> TFloatOrBFloat16:
219
218
  """special_log_softmax(Tensor self, int dim, *, ScalarType? dtype=None) -> Tensor"""
220
219
 
@@ -222,7 +221,8 @@ def aten_special_log_softmax(
222
221
  if self_is_scalar:
223
222
  self = op.Unsqueeze(self, op.Constant(value_ints=[0]))
224
223
  result = op.LogSoftmax(self, axis=dim)
225
- result = op.Cast(result, to=dtype)
224
+ if dtype != -1:
225
+ result = op.Cast(result, to=dtype)
226
226
  if self_is_scalar: # squeeze to scalar due to input is scalar
227
227
  result = op.Squeeze(result)
228
228
  return result
@@ -161,6 +161,10 @@ def add_decorate_info(
161
161
  ops_mapping = {(info.name, info.variant_test_name): info for info in all_opinfos}
162
162
  for decorate_meta in skip_or_xfails:
163
163
  opinfo = ops_mapping.get((decorate_meta.op_name, decorate_meta.variant_name))
164
+ if opinfo is None and not decorate_meta.enabled_if:
165
+ # If the OpInfo doesn't exist and it is not enabled, we skip the OpInfo
166
+ # because it could be an OpInfo that is in torch-nightly but not older versions.
167
+ continue
164
168
  assert (
165
169
  opinfo is not None
166
170
  ), f"Couldn't find OpInfo for {decorate_meta}. Did you need to specify variant_name?"
@@ -471,21 +471,41 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
471
471
  ),
472
472
  TorchLibOpInfo("ops.aten._log_softmax", core_ops.aten__log_softmax),
473
473
  TorchLibOpInfo(
474
- "ops.aten._log_softmax_half", core_ops.aten__log_softmax_half, trace_only=True
475
- ).xfail(
474
+ "ops.aten._log_softmax_half",
475
+ core_ops.aten__log_softmax_half,
476
+ trace_only=True,
477
+ tolerance={torch.float16: (1e-3, 1e-3)},
478
+ )
479
+ .xfail(
476
480
  reason="PyTorch does not implement _log_softmax for float16 on CPU",
477
481
  dtypes=(torch.float16,),
482
+ enabled_if=version_utils.torch_older_than("2.2"),
483
+ )
484
+ .xfail(
485
+ dtypes=(torch.float16,),
486
+ reason="fixme: ORT failed. https://github.com/microsoft/onnxruntime/issues/16438",
487
+ test_class_name="TestOutputConsistencyFullGraph",
478
488
  ),
479
489
  TorchLibOpInfo("ops.aten._softmax", core_ops.aten__softmax, trace_only=True),
480
- TorchLibOpInfo(
481
- "ops.aten._softmax_half", core_ops.aten__softmax_half, trace_only=True
482
- ).xfail(
490
+ TorchLibOpInfo("ops.aten._softmax_half", core_ops.aten__softmax_half, trace_only=True)
491
+ .xfail(
483
492
  reason="PyTorch does not implement _softmax for float16 on CPU",
484
493
  dtypes=(torch.float16,),
494
+ enabled_if=version_utils.torch_older_than("2.2"),
495
+ )
496
+ .xfail(
497
+ dtypes=(torch.float16,),
498
+ reason="fixme: ORT failed. https://github.com/microsoft/onnxruntime/issues/16438",
499
+ test_class_name="TestOutputConsistencyFullGraph",
500
+ ),
501
+ TorchLibOpInfo("all_dim", core_ops.aten_all_dim).skip(
502
+ matcher=lambda sample: not (len(sample.kwargs) > 0)
503
+ or isinstance(sample.kwargs.get("dim"), tuple),
504
+ reason="this Aten overload only support one tensor as input and {dim,keepdim} as kwargs by design. dim must be an integer",
485
505
  ),
486
- TorchLibOpInfo("all_dim", core_ops.aten_all_dim).xfail(
487
- matcher=lambda sample: not (len(sample.kwargs) > 0),
488
- reason="this Aten overload only support one tensor as input and {dim,keepdim} as kwargs by design",
506
+ TorchLibOpInfo("all_dims", core_ops.aten_all_dims, trace_only=True).skip(
507
+ matcher=lambda sample: not isinstance(sample.kwargs.get("dim"), tuple),
508
+ reason="this overload requires dim to be a tuple",
489
509
  ),
490
510
  TorchLibOpInfo("allclose", core_ops.aten_allclose),
491
511
  TorchLibOpInfo(
@@ -501,7 +521,11 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
501
521
  TorchLibOpInfo("acosh", core_ops.aten_acosh),
502
522
  TorchLibOpInfo("add", core_ops.aten_add, tolerance={torch.float16: (1e-3, 1e-3)}),
503
523
  TorchLibOpInfo("add", core_ops.aten_add_complex, complex=True, trace_only=True),
504
- TorchLibOpInfo("addbmm", core_ops.aten_addbmm, tolerance={torch.float32: (2e-5, 2e-5)}),
524
+ TorchLibOpInfo(
525
+ "addbmm",
526
+ core_ops.aten_addbmm,
527
+ tolerance={torch.float32: (2e-5, 2e-5), torch.float16: (2e-1, 2e-2)},
528
+ ),
505
529
  TorchLibOpInfo("addcdiv", core_ops.aten_addcdiv),
506
530
  TorchLibOpInfo("addcmul", core_ops.aten_addcmul, tolerance={torch.float16: (4e-3, 3e-3)}),
507
531
  TorchLibOpInfo("addmm", core_ops.aten_addmm)
@@ -522,7 +546,7 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
522
546
  dtypes=(torch.int16, torch.int32, torch.int64),
523
547
  reason="ONNX Runtime does not support int inputs to Gemm",
524
548
  ),
525
- TorchLibOpInfo("addmv", core_ops.aten_addmv),
549
+ TorchLibOpInfo("addmv", core_ops.aten_addmv, tolerance={torch.float16: (1e-3, 1e-2)}),
526
550
  TorchLibOpInfo(
527
551
  "addr",
528
552
  core_ops.aten_addr,
@@ -557,8 +581,13 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
557
581
  "any_dim",
558
582
  core_ops.aten_any_dim,
559
583
  ).skip(
560
- matcher=lambda sample: not (len(sample.kwargs) > 0),
561
- reason="this Aten overload only support one tensor as input and {dim,keepdim} as kwargs by design",
584
+ matcher=lambda sample: not (len(sample.kwargs) > 0)
585
+ or isinstance(sample.kwargs.get("dim"), tuple),
586
+ reason="this Aten overload only support one tensor as input and {dim,keepdim} as kwargs by design. dim must be an integer",
587
+ ),
588
+ TorchLibOpInfo("any_dims", core_ops.aten_any_dims, trace_only=True).skip(
589
+ matcher=lambda sample: not isinstance(sample.kwargs.get("dim"), tuple),
590
+ reason="this overload requires dim to be a tuple",
562
591
  ),
563
592
  TorchLibOpInfo("asin", core_ops.aten_asin),
564
593
  TorchLibOpInfo("asinh", core_ops.aten_asinh),
@@ -640,7 +669,7 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
640
669
  "https://github.com/microsoft/onnxscript/issues/1007"
641
670
  ),
642
671
  ),
643
- TorchLibOpInfo("baddbmm", core_ops.aten_baddbmm),
672
+ TorchLibOpInfo("baddbmm", core_ops.aten_baddbmm, tolerance={torch.float16: (1e-3, 1e-2)}),
644
673
  TorchLibOpInfo("bernoulli", core_ops.aten_bernoulli, nondeterministic=True),
645
674
  TorchLibOpInfo(
646
675
  # This string is a unique ID. In extra_opinfo.py, we
@@ -845,6 +874,12 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
845
874
  dtypes=(torch.int64, torch.int32),
846
875
  reason="fixme: Results do not match with PyTorch. https://github.com/microsoft/onnxscript/issues/854",
847
876
  )
877
+ .xfail(
878
+ variant_name="tensor_overload",
879
+ dtypes=(torch.int64, torch.int32, torch.float16),
880
+ reason="fixme: Results do not match with PyTorch. https://github.com/microsoft/onnxscript/issues/854",
881
+ enabled_if=not version_utils.torch_older_than("2.2"),
882
+ )
848
883
  .xfail(
849
884
  dtypes=(torch.float16,),
850
885
  reason="op 'Range' doesn't support float16.",
@@ -861,17 +896,35 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
861
896
  TorchLibOpInfo(
862
897
  "log_softmax",
863
898
  special_ops.aten_special_log_softmax,
899
+ trace_only=True,
864
900
  tolerance={torch.float32: (3.7e-5, 1.8e-4), torch.float16: (4e-4, 6e-3)},
865
- ).xfail(
901
+ )
902
+ .xfail(
903
+ dtypes=(torch.float16,),
904
+ reason="fixme: ORT failed. https://github.com/microsoft/onnxruntime/issues/16438",
905
+ test_class_name="TestOutputConsistencyFullGraph",
906
+ )
907
+ .xfail(
866
908
  variant_name="with_dtype",
867
909
  dtypes=(torch.float16,),
868
910
  reason="fixme: ORT failed. https://github.com/microsoft/onnxruntime/issues/16438",
869
911
  test_class_name="TestOutputConsistencyFullGraph",
912
+ )
913
+ .skip(
914
+ matcher=lambda sample: len(sample.input.shape) == 0,
915
+ reason="fixme: LogSoftMax does not support empty tensor as input",
916
+ )
917
+ .skip(
918
+ variant_name="with_dtype",
919
+ matcher=lambda sample: len(sample.input.shape) == 0,
920
+ reason="fixme: LogSoftMax does not support empty tensor as input",
870
921
  ),
871
922
  TorchLibOpInfo("log2", core_ops.aten_log2),
872
923
  TorchLibOpInfo("logaddexp", core_ops.aten_logaddexp),
873
924
  TorchLibOpInfo("logaddexp2", core_ops.aten_logaddexp2),
874
- TorchLibOpInfo("logcumsumexp", core_ops.aten_logcumsumexp),
925
+ TorchLibOpInfo(
926
+ "logcumsumexp", core_ops.aten_logcumsumexp, tolerance={torch.float16: (1e-2, 1e-1)}
927
+ ),
875
928
  TorchLibOpInfo("logdet", core_ops.aten_logdet),
876
929
  TorchLibOpInfo("logsumexp", core_ops.aten_logsumexp),
877
930
  TorchLibOpInfo("lt", core_ops.aten_lt),
@@ -884,7 +937,7 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
884
937
  "matmul",
885
938
  core_ops.aten_matmul,
886
939
  # Windows requires a more relaxed tolerance
887
- tolerance={torch.float32: (2e-5, 2e-5)},
940
+ tolerance={torch.float32: (2e-5, 2e-5), torch.float16: (2e-3, 2e-2)},
888
941
  ).skip(
889
942
  matcher=lambda sample: torch.numel(sample.input) == 0,
890
943
  reason="values of matmul of [m, 0] and [0, n] matrices are undefined",
@@ -1339,12 +1392,28 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
1339
1392
  TorchLibOpInfo(
1340
1393
  "softmax",
1341
1394
  core_ops.aten_softmax,
1395
+ trace_only=True,
1342
1396
  tolerance={torch.float32: (3.7e-5, 1.8e-4), torch.float16: (3e-4, 4e-4)},
1343
- ).xfail(
1397
+ )
1398
+ .xfail(
1399
+ dtypes=(torch.float16,),
1400
+ reason="fixme: ORT failed. https://github.com/microsoft/onnxruntime/issues/16438",
1401
+ test_class_name="TestOutputConsistencyFullGraph",
1402
+ )
1403
+ .xfail(
1344
1404
  variant_name="with_dtype",
1345
1405
  dtypes=(torch.float16,),
1346
1406
  reason="fixme: ORT failed. https://github.com/microsoft/onnxruntime/issues/16438",
1347
1407
  test_class_name="TestOutputConsistencyFullGraph",
1408
+ )
1409
+ .skip(
1410
+ matcher=lambda sample: len(sample.input.shape) == 0,
1411
+ reason="fixme: SoftMax does not support empty tensor as input",
1412
+ )
1413
+ .skip(
1414
+ variant_name="with_dtype",
1415
+ matcher=lambda sample: len(sample.input.shape) == 0,
1416
+ reason="fixme: SoftMax does not support empty tensor as input",
1348
1417
  ),
1349
1418
  TorchLibOpInfo("nn.functional.softplus", nn_ops.aten_softplus).xfail(
1350
1419
  dtypes=(torch.float16,),
@@ -1700,7 +1769,12 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
1700
1769
  variant_name="empty_strides",
1701
1770
  reason="fixme: 'shape' do not match: torch.Size([2, 3, 4, 3]) != torch.Size([2, 3, 4, 2]). https://github.com/microsoft/onnxscript/issues/975",
1702
1771
  ),
1703
- TorchLibOpInfo("native_batch_norm", core_ops.aten_native_batch_norm, trace_only=True),
1772
+ TorchLibOpInfo(
1773
+ "native_batch_norm",
1774
+ core_ops.aten_native_batch_norm,
1775
+ trace_only=True,
1776
+ tolerance={torch.float16: (9e-3, 7e-4)},
1777
+ ),
1704
1778
  TorchLibOpInfo(
1705
1779
  "ops.aten._native_batch_norm_legit", core_ops.aten_native_batch_norm, trace_only=True
1706
1780
  ),
@@ -1719,9 +1793,11 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
1719
1793
  "ops.aten.native_group_norm",
1720
1794
  core_ops.aten_native_group_norm,
1721
1795
  trace_only=True,
1796
+ tolerance={torch.float16: (1e-2, 7e-3)},
1722
1797
  ).xfail(
1723
1798
  dtypes=(torch.float16,),
1724
1799
  reason="fixme: 'GroupNormKernelImpl' not implemented for 'Half' in nightly and weekly",
1800
+ enabled_if=version_utils.torch_older_than("2.2"),
1725
1801
  ),
1726
1802
  TorchLibOpInfo(
1727
1803
  "native_layer_norm",
@@ -1809,7 +1885,11 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
1809
1885
  matcher=lambda sample: len(sample.args) != 1,
1810
1886
  reason="this overload is implemented for bias=None",
1811
1887
  ),
1812
- TorchLibOpInfo("nn.functional.linear_bias", nn_ops.aten_linear_bias).skip(
1888
+ TorchLibOpInfo(
1889
+ "nn.functional.linear_bias",
1890
+ nn_ops.aten_linear_bias,
1891
+ tolerance={torch.float16: (2e-1, 4e-4)},
1892
+ ).skip(
1813
1893
  # input: input, args: weight, bias; so len(args) == 2 means bias is provided
1814
1894
  matcher=lambda sample: len(sample.args) != 2,
1815
1895
  reason="this overload is implemented for bias!=None",
@@ -2059,8 +2139,8 @@ TESTED_TORCHLIB_OPS: tuple[TorchLibOpInfo, ...] = (
2059
2139
  TorchLibOpInfo("zeros_like", core_ops.aten_zeros_like, trace_only=True),
2060
2140
  )
2061
2141
 
2062
- ops_test_common.duplicate_opinfo(OPS_DB, "all", ("all_dim",))
2063
- ops_test_common.duplicate_opinfo(OPS_DB, "any", ("any_dim",))
2142
+ ops_test_common.duplicate_opinfo(OPS_DB, "all", ("all_dim", "all_dims"))
2143
+ ops_test_common.duplicate_opinfo(OPS_DB, "any", ("any_dim", "any_dims"))
2064
2144
  ops_test_common.duplicate_opinfo(OPS_DB, "arange", ("arange_start", "arange_start_step"))
2065
2145
  ops_test_common.duplicate_opinfo(OPS_DB, "argmax", ("argmax_dim",))
2066
2146
  ops_test_common.duplicate_opinfo(OPS_DB, "argmin", ("argmin_dim",))
@@ -1,7 +1,8 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: onnxscript
3
- Version: 0.1.0.dev20231122
3
+ Version: 0.1.0.dev20231124
4
4
  Summary: Naturally author ONNX functions and models using a subset of Python
5
+ Home-page: https://onnxscript.ai/
5
6
  Author-email: Microsoft Corporation <onnx@microsoft.com>
6
7
  License: MIT License
7
8
 
@@ -25,7 +26,6 @@ License: MIT License
25
26
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
27
  SOFTWARE.
27
28
 
28
- Project-URL: Repository, https://github.com/microsoft/onnxscript
29
29
  Classifier: Development Status :: 4 - Beta
30
30
  Classifier: Environment :: Console
31
31
  Classifier: Intended Audience :: Developers
@@ -7,7 +7,6 @@ name = "onnxscript"
7
7
  dynamic = ["version"]
8
8
  description = "Naturally author ONNX functions and models using a subset of Python"
9
9
  authors = [{ name = "Microsoft Corporation", email = "onnx@microsoft.com" }]
10
- urls = { "Repository" = "https://github.com/microsoft/onnxscript" }
11
10
  readme = "README.md"
12
11
  requires-python = ">=3.8"
13
12
  license = { file = "LICENSE" }