executorch 1.1.0__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2784) hide show
  1. executorch/backends/__init__.py +0 -0
  2. executorch/backends/aoti/aoti_backend.py +271 -0
  3. executorch/backends/aoti/aoti_partitioner.py +109 -0
  4. executorch/backends/aoti/passes/replace_view_copy_with_view.py +118 -0
  5. executorch/backends/apple/coreml/compiler/__init__.py +9 -0
  6. executorch/backends/apple/coreml/compiler/coreml_preprocess.py +588 -0
  7. executorch/backends/apple/coreml/compiler/enumerated_shape_utils.py +244 -0
  8. executorch/backends/apple/coreml/compiler/torch_ops.py +219 -0
  9. executorch/backends/apple/coreml/executorchcoreml.pyi +10 -0
  10. executorch/backends/apple/coreml/logging.py +24 -0
  11. executorch/backends/apple/coreml/partition/__init__.py +9 -0
  12. executorch/backends/apple/coreml/partition/coreml_partitioner.py +307 -0
  13. executorch/backends/apple/coreml/quantizer/__init__.py +9 -0
  14. executorch/backends/apple/coreml/quantizer/_annotation_config.py +130 -0
  15. executorch/backends/apple/coreml/quantizer/_coreml_quantizer.py +628 -0
  16. executorch/backends/apple/coreml/quantizer/_coreml_quantizer_utils.py +800 -0
  17. executorch/backends/apple/coreml/quantizer/coreml_quantizer.py +7 -0
  18. executorch/backends/apple/coreml/recipes/__init__.py +17 -0
  19. executorch/backends/apple/coreml/recipes/coreml_recipe_provider.py +413 -0
  20. executorch/backends/apple/coreml/recipes/coreml_recipe_types.py +53 -0
  21. executorch/backends/apple/coreml/runtime/test/export_stateful_model.py +77 -0
  22. executorch/backends/apple/coreml/test/test_coreml_partitioner.py +348 -0
  23. executorch/backends/apple/coreml/test/test_coreml_quantizer.py +172 -0
  24. executorch/backends/apple/coreml/test/test_coreml_recipes.py +552 -0
  25. executorch/backends/apple/coreml/test/test_coreml_utils.py +19 -0
  26. executorch/backends/apple/coreml/test/test_enumerated_shapes.py +112 -0
  27. executorch/backends/apple/coreml/test/test_torch_ops.py +333 -0
  28. executorch/backends/apple/coreml/test/tester.py +121 -0
  29. executorch/backends/apple/metal/metal_backend.py +67 -0
  30. executorch/backends/apple/metal/metal_partitioner.py +25 -0
  31. executorch/backends/apple/metal/tests/__init__.py +5 -0
  32. executorch/backends/apple/metal/tests/test_metal_backend.py +79 -0
  33. executorch/backends/apple/metal/tests/test_metal_partitioner.py +172 -0
  34. executorch/backends/apple/mps/__init__.py +10 -0
  35. executorch/backends/apple/mps/mps_preprocess.py +301 -0
  36. executorch/backends/apple/mps/operators/__init__.py +77 -0
  37. executorch/backends/apple/mps/operators/activation_ops.py +99 -0
  38. executorch/backends/apple/mps/operators/binary_ops.py +156 -0
  39. executorch/backends/apple/mps/operators/clamp_ops.py +60 -0
  40. executorch/backends/apple/mps/operators/constant_ops.py +128 -0
  41. executorch/backends/apple/mps/operators/convolution_ops.py +70 -0
  42. executorch/backends/apple/mps/operators/indexing_ops.py +225 -0
  43. executorch/backends/apple/mps/operators/linear_algebra_ops.py +52 -0
  44. executorch/backends/apple/mps/operators/node_visitor.py +473 -0
  45. executorch/backends/apple/mps/operators/normalization_ops.py +97 -0
  46. executorch/backends/apple/mps/operators/op_clone.py +54 -0
  47. executorch/backends/apple/mps/operators/op_getitem.py +29 -0
  48. executorch/backends/apple/mps/operators/op_quant_dequant.py +142 -0
  49. executorch/backends/apple/mps/operators/op_skip_ops.py +24 -0
  50. executorch/backends/apple/mps/operators/pad_ops.py +37 -0
  51. executorch/backends/apple/mps/operators/pooling_ops.py +142 -0
  52. executorch/backends/apple/mps/operators/range_ops.py +53 -0
  53. executorch/backends/apple/mps/operators/reduce_ops.py +39 -0
  54. executorch/backends/apple/mps/operators/shape_ops.py +263 -0
  55. executorch/backends/apple/mps/operators/unary_ops.py +130 -0
  56. executorch/backends/apple/mps/partition/__init__.py +10 -0
  57. executorch/backends/apple/mps/partition/mps_partitioner.py +133 -0
  58. executorch/backends/apple/mps/serialization/mps_graph_schema.py +817 -0
  59. executorch/backends/apple/mps/serialization/mps_graph_serialize.py +34 -0
  60. executorch/backends/apple/mps/serialization/schema.fbs +523 -0
  61. executorch/backends/apple/mps/test/test_mps.py +2507 -0
  62. executorch/backends/apple/mps/test/test_mps_binary_ops.py +296 -0
  63. executorch/backends/apple/mps/test/test_mps_indexing_ops.py +264 -0
  64. executorch/backends/apple/mps/test/test_mps_linear.py +523 -0
  65. executorch/backends/apple/mps/test/test_mps_models.py +416 -0
  66. executorch/backends/apple/mps/test/test_mps_unary_ops.py +26 -0
  67. executorch/backends/apple/mps/test/test_mps_utils.py +326 -0
  68. executorch/backends/apple/mps/utils/mps_utils.py +82 -0
  69. executorch/backends/apple/mps/utils/quant_utils.py +41 -0
  70. executorch/backends/arm/_passes/__init__.py +134 -0
  71. executorch/backends/arm/_passes/_debug_passes.py +58 -0
  72. executorch/backends/arm/_passes/annotate_decomposed_matmul.py +127 -0
  73. executorch/backends/arm/_passes/annotate_output_dim_order_pass.py +26 -0
  74. executorch/backends/arm/_passes/arm_pass.py +95 -0
  75. executorch/backends/arm/_passes/arm_pass_manager.py +462 -0
  76. executorch/backends/arm/_passes/arm_pass_utils.py +281 -0
  77. executorch/backends/arm/_passes/broadcast_args_pass.py +72 -0
  78. executorch/backends/arm/_passes/cast_int64_pass.py +70 -0
  79. executorch/backends/arm/_passes/cast_to_int32_pass.py +67 -0
  80. executorch/backends/arm/_passes/conv1d_unsqueeze_pass.py +98 -0
  81. executorch/backends/arm/_passes/convert_elu_params.py +67 -0
  82. executorch/backends/arm/_passes/convert_expand_copy_to_repeat.py +77 -0
  83. executorch/backends/arm/_passes/convert_full_like_to_full_pass.py +42 -0
  84. executorch/backends/arm/_passes/convert_int64_const_ops_to_int32.py +81 -0
  85. executorch/backends/arm/_passes/convert_int64_output_ops_to_int32.py +155 -0
  86. executorch/backends/arm/_passes/convert_minmax_pass.py +166 -0
  87. executorch/backends/arm/_passes/convert_permute_singleton_to_view_pass.py +64 -0
  88. executorch/backends/arm/_passes/convert_split_to_slice.py +132 -0
  89. executorch/backends/arm/_passes/convert_squeezes_to_view.py +36 -0
  90. executorch/backends/arm/_passes/convert_to_clamp_pass.py +45 -0
  91. executorch/backends/arm/_passes/decompose_acosh_pass.py +77 -0
  92. executorch/backends/arm/_passes/decompose_adaptive_avg_pool2d_pass.py +112 -0
  93. executorch/backends/arm/_passes/decompose_add_sub_alpha_pass.py +98 -0
  94. executorch/backends/arm/_passes/decompose_addmm_pass.py +72 -0
  95. executorch/backends/arm/_passes/decompose_any_pass.py +114 -0
  96. executorch/backends/arm/_passes/decompose_asin_and_acos_pass.py +236 -0
  97. executorch/backends/arm/_passes/decompose_asinh_pass.py +74 -0
  98. executorch/backends/arm/_passes/decompose_atan_pass.py +142 -0
  99. executorch/backends/arm/_passes/decompose_atanh_pass.py +86 -0
  100. executorch/backends/arm/_passes/decompose_avg_pool2d_pass.py +154 -0
  101. executorch/backends/arm/_passes/decompose_batch_norm_no_stats.py +233 -0
  102. executorch/backends/arm/_passes/decompose_cosh_pass.py +72 -0
  103. executorch/backends/arm/_passes/decompose_cosine_similarity_pass.py +92 -0
  104. executorch/backends/arm/_passes/decompose_cumsum_pass.py +167 -0
  105. executorch/backends/arm/_passes/decompose_div_pass.py +61 -0
  106. executorch/backends/arm/_passes/decompose_div_tensor_mode.py +94 -0
  107. executorch/backends/arm/_passes/decompose_elu_pass.py +107 -0
  108. executorch/backends/arm/_passes/decompose_embedding_pass.py +126 -0
  109. executorch/backends/arm/_passes/decompose_expm1_pass.py +163 -0
  110. executorch/backends/arm/_passes/decompose_floor_divide_pass.py +75 -0
  111. executorch/backends/arm/_passes/decompose_gelu_pass.py +172 -0
  112. executorch/backends/arm/_passes/decompose_glu_pass.py +81 -0
  113. executorch/backends/arm/_passes/decompose_grouped_conv_pass.py +185 -0
  114. executorch/backends/arm/_passes/decompose_groupnorm_pass.py +227 -0
  115. executorch/backends/arm/_passes/decompose_int16_activation_conv_pass.py +137 -0
  116. executorch/backends/arm/_passes/decompose_int_pow_pass.py +64 -0
  117. executorch/backends/arm/_passes/decompose_layernorm_pass.py +203 -0
  118. executorch/backends/arm/_passes/decompose_leaky_relu_pass.py +76 -0
  119. executorch/backends/arm/_passes/decompose_linalg_vector_norm_pass.py +92 -0
  120. executorch/backends/arm/_passes/decompose_linear_pass.py +109 -0
  121. executorch/backends/arm/_passes/decompose_log1p_pass.py +97 -0
  122. executorch/backends/arm/_passes/decompose_logit_pass.py +119 -0
  123. executorch/backends/arm/_passes/decompose_masked_fill_pass.py +58 -0
  124. executorch/backends/arm/_passes/decompose_maxpool2d_with_dilation_pass.py +218 -0
  125. executorch/backends/arm/_passes/decompose_meandim_pass.py +283 -0
  126. executorch/backends/arm/_passes/decompose_ne_pass.py +74 -0
  127. executorch/backends/arm/_passes/decompose_quant_nodes.py +156 -0
  128. executorch/backends/arm/_passes/decompose_remainder_pass.py +70 -0
  129. executorch/backends/arm/_passes/decompose_round_pass.py +96 -0
  130. executorch/backends/arm/_passes/decompose_sdpa_pass.py +36 -0
  131. executorch/backends/arm/_passes/decompose_select.py +75 -0
  132. executorch/backends/arm/_passes/decompose_select_scatter_pass.py +143 -0
  133. executorch/backends/arm/_passes/decompose_sign_pass.py +78 -0
  134. executorch/backends/arm/_passes/decompose_silu_pass.py +41 -0
  135. executorch/backends/arm/_passes/decompose_sinh_pass.py +77 -0
  136. executorch/backends/arm/_passes/decompose_softmax_pass.py +93 -0
  137. executorch/backends/arm/_passes/decompose_softmax_unstable_pass.py +86 -0
  138. executorch/backends/arm/_passes/decompose_sqrt_pass.py +53 -0
  139. executorch/backends/arm/_passes/decompose_sum_pass.py +93 -0
  140. executorch/backends/arm/_passes/decompose_tan_pass.py +51 -0
  141. executorch/backends/arm/_passes/decompose_tosa_unsupported_clamp_pass.py +97 -0
  142. executorch/backends/arm/_passes/decompose_var_pass.py +109 -0
  143. executorch/backends/arm/_passes/decorate_fp32_to_int32_casting_pass.py +88 -0
  144. executorch/backends/arm/_passes/fold_qdq_with_annotated_qparams_pass.py +394 -0
  145. executorch/backends/arm/_passes/fuse_batch_norm2d_pass.py +241 -0
  146. executorch/backends/arm/_passes/fuse_constant_ops_pass.py +272 -0
  147. executorch/backends/arm/_passes/fuse_duplicate_users_pass.py +165 -0
  148. executorch/backends/arm/_passes/fuse_equal_placeholders_pass.py +104 -0
  149. executorch/backends/arm/_passes/fuse_quantized_activation_pass.py +80 -0
  150. executorch/backends/arm/_passes/fuse_view_copy_transform_pass.py +14 -0
  151. executorch/backends/arm/_passes/insert_int32_casts_after_int64_placeholders.py +130 -0
  152. executorch/backends/arm/_passes/insert_rescales_pass.py +584 -0
  153. executorch/backends/arm/_passes/insert_table_ops.py +305 -0
  154. executorch/backends/arm/_passes/match_arg_dtype_pass.py +104 -0
  155. executorch/backends/arm/_passes/match_arg_ranks_pass.py +114 -0
  156. executorch/backends/arm/_passes/mm_to_bmm_pass.py +104 -0
  157. executorch/backends/arm/_passes/normalize_while_initial_args_pass.py +113 -0
  158. executorch/backends/arm/_passes/promote_bool_operands_pass.py +88 -0
  159. executorch/backends/arm/_passes/quant_args.py +125 -0
  160. executorch/backends/arm/_passes/remove_getitem_pass.py +14 -0
  161. executorch/backends/arm/_passes/remove_graph_asserts_pass.py +18 -0
  162. executorch/backends/arm/_passes/remove_noop_pass.py +40 -0
  163. executorch/backends/arm/_passes/replace_inf_and_limit_values_pass.py +73 -0
  164. executorch/backends/arm/_passes/replace_scalar_with_tensor_pass.py +121 -0
  165. executorch/backends/arm/_passes/rewrite_bool_bitwise_not_to_logical_not_pass.py +43 -0
  166. executorch/backends/arm/_passes/rewrite_bool_to_fp32_cast_via_int8_pass.py +77 -0
  167. executorch/backends/arm/_passes/rewrite_conv_pass.py +336 -0
  168. executorch/backends/arm/_passes/rewrite_matmul.py +98 -0
  169. executorch/backends/arm/_passes/rewrite_upsample.py +93 -0
  170. executorch/backends/arm/_passes/scalars_to_attribute_pass.py +97 -0
  171. executorch/backends/arm/_passes/size_adjust_input_pass.py +227 -0
  172. executorch/backends/arm/_passes/to_tosa_memory_format_pass.py +454 -0
  173. executorch/backends/arm/_passes/unsqueeze_before_repeat_pass.py +66 -0
  174. executorch/backends/arm/_passes/unsqueeze_scalar_placeholders_pass.py +85 -0
  175. executorch/backends/arm/arm_vela.py +137 -0
  176. executorch/backends/arm/common/__init__.py +4 -0
  177. executorch/backends/arm/common/annotation_meta.py +39 -0
  178. executorch/backends/arm/common/arm_compile_spec.py +271 -0
  179. executorch/backends/arm/common/debug.py +79 -0
  180. executorch/backends/arm/common/pipeline_config.py +59 -0
  181. executorch/backends/arm/common/type.py +28 -0
  182. executorch/backends/arm/constants.py +48 -0
  183. executorch/backends/arm/debug/__init__.py +4 -0
  184. executorch/backends/arm/debug/schema.py +145 -0
  185. executorch/backends/arm/ethosu/__init__.py +11 -0
  186. executorch/backends/arm/ethosu/backend.py +115 -0
  187. executorch/backends/arm/ethosu/compile_spec.py +117 -0
  188. executorch/backends/arm/ethosu/partitioner.py +35 -0
  189. executorch/backends/arm/operator_support/__init__.py +23 -0
  190. executorch/backends/arm/operator_support/clone_dim_order_support.py +82 -0
  191. executorch/backends/arm/operator_support/control_flow_support.py +162 -0
  192. executorch/backends/arm/operator_support/convolution_support.py +160 -0
  193. executorch/backends/arm/operator_support/embedding_support.py +61 -0
  194. executorch/backends/arm/operator_support/ethos_u55_support.py +598 -0
  195. executorch/backends/arm/operator_support/index_select_support.py +60 -0
  196. executorch/backends/arm/operator_support/index_tensor_support.py +160 -0
  197. executorch/backends/arm/operator_support/minmax_support.py +61 -0
  198. executorch/backends/arm/operator_support/pool_2d_support.py +214 -0
  199. executorch/backends/arm/operator_support/reduce_sum_support.py +76 -0
  200. executorch/backends/arm/operator_support/right_shift_support.py +52 -0
  201. executorch/backends/arm/operator_support/slice_copy_support.py +48 -0
  202. executorch/backends/arm/operator_support/to_dim_order_copy_support.py +200 -0
  203. executorch/backends/arm/operator_support/tosa_profile_supported_op_lists.py +251 -0
  204. executorch/backends/arm/operator_support/tosa_supported_operators.py +748 -0
  205. executorch/backends/arm/operator_support/where_support.py +77 -0
  206. executorch/backends/arm/operators/__init__.py +71 -0
  207. executorch/backends/arm/operators/node_visitor.py +177 -0
  208. executorch/backends/arm/operators/op_abs.py +59 -0
  209. executorch/backends/arm/operators/op_add.py +60 -0
  210. executorch/backends/arm/operators/op_amax.py +72 -0
  211. executorch/backends/arm/operators/op_amin.py +73 -0
  212. executorch/backends/arm/operators/op_any.py +61 -0
  213. executorch/backends/arm/operators/op_avg_pool2d.py +142 -0
  214. executorch/backends/arm/operators/op_bitwise_not.py +62 -0
  215. executorch/backends/arm/operators/op_cat.py +68 -0
  216. executorch/backends/arm/operators/op_ceil.py +56 -0
  217. executorch/backends/arm/operators/op_clamp.py +118 -0
  218. executorch/backends/arm/operators/op_cond_if.py +56 -0
  219. executorch/backends/arm/operators/op_constant_pad_nd.py +117 -0
  220. executorch/backends/arm/operators/op_cos.py +49 -0
  221. executorch/backends/arm/operators/op_eq.py +64 -0
  222. executorch/backends/arm/operators/op_erf.py +54 -0
  223. executorch/backends/arm/operators/op_exp.py +54 -0
  224. executorch/backends/arm/operators/op_floor.py +56 -0
  225. executorch/backends/arm/operators/op_ge.py +64 -0
  226. executorch/backends/arm/operators/op_gt.py +64 -0
  227. executorch/backends/arm/operators/op_index_select.py +109 -0
  228. executorch/backends/arm/operators/op_index_tensor.py +247 -0
  229. executorch/backends/arm/operators/op_le.py +64 -0
  230. executorch/backends/arm/operators/op_log.py +50 -0
  231. executorch/backends/arm/operators/op_logical_not.py +62 -0
  232. executorch/backends/arm/operators/op_lt.py +64 -0
  233. executorch/backends/arm/operators/op_max_pool2d.py +108 -0
  234. executorch/backends/arm/operators/op_maximum.py +66 -0
  235. executorch/backends/arm/operators/op_minimum.py +67 -0
  236. executorch/backends/arm/operators/op_mul.py +61 -0
  237. executorch/backends/arm/operators/op_neg.py +92 -0
  238. executorch/backends/arm/operators/op_permute.py +150 -0
  239. executorch/backends/arm/operators/op_pow.py +63 -0
  240. executorch/backends/arm/operators/op_reciprocal.py +51 -0
  241. executorch/backends/arm/operators/op_repeat.py +77 -0
  242. executorch/backends/arm/operators/op_rshift_tensor.py +62 -0
  243. executorch/backends/arm/operators/op_rsqrt.py +51 -0
  244. executorch/backends/arm/operators/op_sigmoid.py +50 -0
  245. executorch/backends/arm/operators/op_sin.py +49 -0
  246. executorch/backends/arm/operators/op_slice.py +151 -0
  247. executorch/backends/arm/operators/op_sub.py +63 -0
  248. executorch/backends/arm/operators/op_sum.py +64 -0
  249. executorch/backends/arm/operators/op_tanh.py +51 -0
  250. executorch/backends/arm/operators/op_to_dim_order_copy.py +49 -0
  251. executorch/backends/arm/operators/op_tosa_conv2d.py +139 -0
  252. executorch/backends/arm/operators/op_tosa_conv3d.py +24 -0
  253. executorch/backends/arm/operators/op_tosa_depthwise_conv2d.py +32 -0
  254. executorch/backends/arm/operators/op_tosa_matmul.py +102 -0
  255. executorch/backends/arm/operators/op_tosa_rescale.py +261 -0
  256. executorch/backends/arm/operators/op_tosa_resize.py +124 -0
  257. executorch/backends/arm/operators/op_tosa_table.py +72 -0
  258. executorch/backends/arm/operators/op_tosa_transpose.py +71 -0
  259. executorch/backends/arm/operators/op_view.py +81 -0
  260. executorch/backends/arm/operators/op_where.py +75 -0
  261. executorch/backends/arm/operators/op_while.py +103 -0
  262. executorch/backends/arm/operators/operator_validation_utils.py +201 -0
  263. executorch/backends/arm/operators/ops_binary.py +112 -0
  264. executorch/backends/arm/operators/ops_identity.py +80 -0
  265. executorch/backends/arm/process_node.py +230 -0
  266. executorch/backends/arm/quantizer/__init__.py +35 -0
  267. executorch/backends/arm/quantizer/arm_quantizer.py +710 -0
  268. executorch/backends/arm/quantizer/arm_quantizer_utils.py +76 -0
  269. executorch/backends/arm/quantizer/quantization_annotator.py +815 -0
  270. executorch/backends/arm/quantizer/quantization_config.py +228 -0
  271. executorch/backends/arm/scripts/collect_testname_resources.py +194 -0
  272. executorch/backends/arm/scripts/parse_test_names.py +271 -0
  273. executorch/backends/arm/test/common.py +302 -0
  274. executorch/backends/arm/test/conftest.py +134 -0
  275. executorch/backends/arm/test/misc/test_bn_relu_folding_qat.py +124 -0
  276. executorch/backends/arm/test/misc/test_call_operator_submodule.py +72 -0
  277. executorch/backends/arm/test/misc/test_compile_spec.py +55 -0
  278. executorch/backends/arm/test/misc/test_conv_relu_residual_add.py +108 -0
  279. executorch/backends/arm/test/misc/test_custom_partition.py +183 -0
  280. executorch/backends/arm/test/misc/test_debug_feats.py +316 -0
  281. executorch/backends/arm/test/misc/test_debug_hook.py +186 -0
  282. executorch/backends/arm/test/misc/test_dim_order.py +127 -0
  283. executorch/backends/arm/test/misc/test_dw_convs_with_shared_weights.py +46 -0
  284. executorch/backends/arm/test/misc/test_extract_io_params_tosa.py +92 -0
  285. executorch/backends/arm/test/misc/test_int64.py +112 -0
  286. executorch/backends/arm/test/misc/test_lifted_tensor.py +146 -0
  287. executorch/backends/arm/test/misc/test_mixed_type_lowering.py +83 -0
  288. executorch/backends/arm/test/misc/test_model_evaluator.py +58 -0
  289. executorch/backends/arm/test/misc/test_multiple_delegates.py +53 -0
  290. executorch/backends/arm/test/misc/test_multiple_outputs.py +70 -0
  291. executorch/backends/arm/test/misc/test_non_persistent_buffers.py +49 -0
  292. executorch/backends/arm/test/misc/test_outputs_order.py +122 -0
  293. executorch/backends/arm/test/misc/test_partition_decomposed_quantized_ops.py +181 -0
  294. executorch/backends/arm/test/misc/test_pass_pipeline_config.py +35 -0
  295. executorch/backends/arm/test/misc/test_pass_required_order.py +97 -0
  296. executorch/backends/arm/test/misc/test_qat_training_loop.py +100 -0
  297. executorch/backends/arm/test/misc/test_quant_custom_meta.py +105 -0
  298. executorch/backends/arm/test/misc/test_rescale_range.py +130 -0
  299. executorch/backends/arm/test/misc/test_save_exported_model.py +64 -0
  300. executorch/backends/arm/test/misc/test_tosa_dialect_conv2d.py +220 -0
  301. executorch/backends/arm/test/misc/test_tosa_dialect_dw_conv2d.py +227 -0
  302. executorch/backends/arm/test/misc/test_tosa_spec.py +169 -0
  303. executorch/backends/arm/test/models/stable_diffusion/stable_diffusion_module_test_configs.py +114 -0
  304. executorch/backends/arm/test/models/stable_diffusion/test_CLIPTextModelWithProjection.py +168 -0
  305. executorch/backends/arm/test/models/stable_diffusion/test_SD3Transformer2DModel.py +193 -0
  306. executorch/backends/arm/test/models/stable_diffusion/test_T5EncoderModel.py +161 -0
  307. executorch/backends/arm/test/models/stable_diffusion/test_vae_AutoencoderKL.py +118 -0
  308. executorch/backends/arm/test/models/test_conformer.py +138 -0
  309. executorch/backends/arm/test/models/test_deit_tiny_arm.py +120 -0
  310. executorch/backends/arm/test/models/test_dl3_arm.py +118 -0
  311. executorch/backends/arm/test/models/test_inception_v3_arm.py +120 -0
  312. executorch/backends/arm/test/models/test_llama.py +227 -0
  313. executorch/backends/arm/test/models/test_lstm_arm.py +194 -0
  314. executorch/backends/arm/test/models/test_mobilenet_v2_arm.py +179 -0
  315. executorch/backends/arm/test/models/test_mobilenet_v3_arm.py +113 -0
  316. executorch/backends/arm/test/models/test_nn_functional.py +124 -0
  317. executorch/backends/arm/test/models/test_nn_modules.py +161 -0
  318. executorch/backends/arm/test/models/test_nss.py +146 -0
  319. executorch/backends/arm/test/models/test_resnet18.py +98 -0
  320. executorch/backends/arm/test/models/test_torch_functions.py +151 -0
  321. executorch/backends/arm/test/models/test_w2l_arm.py +136 -0
  322. executorch/backends/arm/test/ops/test_abs.py +101 -0
  323. executorch/backends/arm/test/ops/test_acos.py +121 -0
  324. executorch/backends/arm/test/ops/test_acosh.py +137 -0
  325. executorch/backends/arm/test/ops/test_adaptive_avg_pool2d.py +242 -0
  326. executorch/backends/arm/test/ops/test_add.py +291 -0
  327. executorch/backends/arm/test/ops/test_addmm.py +285 -0
  328. executorch/backends/arm/test/ops/test_alias_copy.py +114 -0
  329. executorch/backends/arm/test/ops/test_amax.py +191 -0
  330. executorch/backends/arm/test/ops/test_amin.py +205 -0
  331. executorch/backends/arm/test/ops/test_any.py +210 -0
  332. executorch/backends/arm/test/ops/test_arange.py +258 -0
  333. executorch/backends/arm/test/ops/test_asin.py +105 -0
  334. executorch/backends/arm/test/ops/test_asinh.py +104 -0
  335. executorch/backends/arm/test/ops/test_at.py +256 -0
  336. executorch/backends/arm/test/ops/test_atan.py +111 -0
  337. executorch/backends/arm/test/ops/test_atanh.py +112 -0
  338. executorch/backends/arm/test/ops/test_avg_pool2d.py +295 -0
  339. executorch/backends/arm/test/ops/test_batch_norm.py +385 -0
  340. executorch/backends/arm/test/ops/test_bitwise.py +672 -0
  341. executorch/backends/arm/test/ops/test_bitwise_not.py +115 -0
  342. executorch/backends/arm/test/ops/test_bmm.py +193 -0
  343. executorch/backends/arm/test/ops/test_cat.py +219 -0
  344. executorch/backends/arm/test/ops/test_ceil.py +125 -0
  345. executorch/backends/arm/test/ops/test_clamp.py +474 -0
  346. executorch/backends/arm/test/ops/test_clone.py +150 -0
  347. executorch/backends/arm/test/ops/test_cond.py +338 -0
  348. executorch/backends/arm/test/ops/test_constant_pad_nd.py +119 -0
  349. executorch/backends/arm/test/ops/test_conv1d.py +356 -0
  350. executorch/backends/arm/test/ops/test_conv2d.py +592 -0
  351. executorch/backends/arm/test/ops/test_conv3d.py +711 -0
  352. executorch/backends/arm/test/ops/test_conv_combos.py +668 -0
  353. executorch/backends/arm/test/ops/test_conv_constant_pad_nd.py +145 -0
  354. executorch/backends/arm/test/ops/test_copy.py +171 -0
  355. executorch/backends/arm/test/ops/test_cos.py +115 -0
  356. executorch/backends/arm/test/ops/test_cosh.py +111 -0
  357. executorch/backends/arm/test/ops/test_cumsum.py +122 -0
  358. executorch/backends/arm/test/ops/test_depthwise_conv.py +404 -0
  359. executorch/backends/arm/test/ops/test_div.py +151 -0
  360. executorch/backends/arm/test/ops/test_div_tensor_mode.py +151 -0
  361. executorch/backends/arm/test/ops/test_elu.py +133 -0
  362. executorch/backends/arm/test/ops/test_embedding.py +146 -0
  363. executorch/backends/arm/test/ops/test_eq.py +286 -0
  364. executorch/backends/arm/test/ops/test_erf.py +96 -0
  365. executorch/backends/arm/test/ops/test_exp.py +110 -0
  366. executorch/backends/arm/test/ops/test_expand.py +153 -0
  367. executorch/backends/arm/test/ops/test_expm1.py +113 -0
  368. executorch/backends/arm/test/ops/test_eye.py +156 -0
  369. executorch/backends/arm/test/ops/test_fill_scalar.py +108 -0
  370. executorch/backends/arm/test/ops/test_floor.py +125 -0
  371. executorch/backends/arm/test/ops/test_floor_div.py +156 -0
  372. executorch/backends/arm/test/ops/test_full.py +255 -0
  373. executorch/backends/arm/test/ops/test_ge.py +292 -0
  374. executorch/backends/arm/test/ops/test_gelu.py +156 -0
  375. executorch/backends/arm/test/ops/test_glu.py +130 -0
  376. executorch/backends/arm/test/ops/test_group_norm.py +200 -0
  377. executorch/backends/arm/test/ops/test_gt.py +293 -0
  378. executorch/backends/arm/test/ops/test_hardsigmoid.py +114 -0
  379. executorch/backends/arm/test/ops/test_hardswish.py +104 -0
  380. executorch/backends/arm/test/ops/test_hardtanh.py +113 -0
  381. executorch/backends/arm/test/ops/test_index_select.py +177 -0
  382. executorch/backends/arm/test/ops/test_index_tensor.py +467 -0
  383. executorch/backends/arm/test/ops/test_layer_norm.py +186 -0
  384. executorch/backends/arm/test/ops/test_le.py +296 -0
  385. executorch/backends/arm/test/ops/test_leaky_relu.py +125 -0
  386. executorch/backends/arm/test/ops/test_linalg_vector_norm.py +160 -0
  387. executorch/backends/arm/test/ops/test_linear.py +389 -0
  388. executorch/backends/arm/test/ops/test_log.py +100 -0
  389. executorch/backends/arm/test/ops/test_log1p.py +78 -0
  390. executorch/backends/arm/test/ops/test_logical.py +429 -0
  391. executorch/backends/arm/test/ops/test_logit.py +119 -0
  392. executorch/backends/arm/test/ops/test_logsoftmax.py +124 -0
  393. executorch/backends/arm/test/ops/test_lshift.py +220 -0
  394. executorch/backends/arm/test/ops/test_lt.py +293 -0
  395. executorch/backends/arm/test/ops/test_masked_fill.py +171 -0
  396. executorch/backends/arm/test/ops/test_matmul.py +289 -0
  397. executorch/backends/arm/test/ops/test_max_pool.py +329 -0
  398. executorch/backends/arm/test/ops/test_maximum.py +98 -0
  399. executorch/backends/arm/test/ops/test_mean_dim.py +388 -0
  400. executorch/backends/arm/test/ops/test_minimum.py +98 -0
  401. executorch/backends/arm/test/ops/test_mm.py +93 -0
  402. executorch/backends/arm/test/ops/test_mul.py +376 -0
  403. executorch/backends/arm/test/ops/test_multihead_attention.py +138 -0
  404. executorch/backends/arm/test/ops/test_ne.py +243 -0
  405. executorch/backends/arm/test/ops/test_neg.py +99 -0
  406. executorch/backends/arm/test/ops/test_ones.py +152 -0
  407. executorch/backends/arm/test/ops/test_permute.py +256 -0
  408. executorch/backends/arm/test/ops/test_pixel_shuffling.py +237 -0
  409. executorch/backends/arm/test/ops/test_pow.py +204 -0
  410. executorch/backends/arm/test/ops/test_reciprocal.py +112 -0
  411. executorch/backends/arm/test/ops/test_relu.py +166 -0
  412. executorch/backends/arm/test/ops/test_remainder.py +199 -0
  413. executorch/backends/arm/test/ops/test_repeat.py +162 -0
  414. executorch/backends/arm/test/ops/test_round.py +111 -0
  415. executorch/backends/arm/test/ops/test_rshift.py +226 -0
  416. executorch/backends/arm/test/ops/test_rsqrt.py +153 -0
  417. executorch/backends/arm/test/ops/test_rsub.py +126 -0
  418. executorch/backends/arm/test/ops/test_scalar_tensor.py +135 -0
  419. executorch/backends/arm/test/ops/test_scalars.py +438 -0
  420. executorch/backends/arm/test/ops/test_sdpa.py +73 -0
  421. executorch/backends/arm/test/ops/test_select.py +219 -0
  422. executorch/backends/arm/test/ops/test_select_scatter.py +173 -0
  423. executorch/backends/arm/test/ops/test_sigmoid.py +357 -0
  424. executorch/backends/arm/test/ops/test_sigmoid_32bit.py +177 -0
  425. executorch/backends/arm/test/ops/test_sign.py +113 -0
  426. executorch/backends/arm/test/ops/test_silu.py +174 -0
  427. executorch/backends/arm/test/ops/test_sin.py +108 -0
  428. executorch/backends/arm/test/ops/test_sinh.py +103 -0
  429. executorch/backends/arm/test/ops/test_slice.py +217 -0
  430. executorch/backends/arm/test/ops/test_softmax.py +121 -0
  431. executorch/backends/arm/test/ops/test_split.py +312 -0
  432. executorch/backends/arm/test/ops/test_sqrt.py +112 -0
  433. executorch/backends/arm/test/ops/test_squeeze.py +291 -0
  434. executorch/backends/arm/test/ops/test_stack.py +150 -0
  435. executorch/backends/arm/test/ops/test_sub.py +366 -0
  436. executorch/backends/arm/test/ops/test_sum.py +161 -0
  437. executorch/backends/arm/test/ops/test_t_copy.py +115 -0
  438. executorch/backends/arm/test/ops/test_tan.py +146 -0
  439. executorch/backends/arm/test/ops/test_tanh.py +169 -0
  440. executorch/backends/arm/test/ops/test_to_copy.py +296 -0
  441. executorch/backends/arm/test/ops/test_transpose_copy.py +114 -0
  442. executorch/backends/arm/test/ops/test_unary_combos.py +144 -0
  443. executorch/backends/arm/test/ops/test_unbind.py +82 -0
  444. executorch/backends/arm/test/ops/test_unflatten.py +107 -0
  445. executorch/backends/arm/test/ops/test_unsqueeze.py +107 -0
  446. executorch/backends/arm/test/ops/test_upsample_bilinear2d.py +443 -0
  447. executorch/backends/arm/test/ops/test_upsample_nearest2d.py +520 -0
  448. executorch/backends/arm/test/ops/test_var.py +394 -0
  449. executorch/backends/arm/test/ops/test_view.py +253 -0
  450. executorch/backends/arm/test/ops/test_where.py +285 -0
  451. executorch/backends/arm/test/ops/test_while.py +264 -0
  452. executorch/backends/arm/test/ops/test_zeros.py +158 -0
  453. executorch/backends/arm/test/passes/test_broadcast_args_pass.py +57 -0
  454. executorch/backends/arm/test/passes/test_cast_int64_pass.py +49 -0
  455. executorch/backends/arm/test/passes/test_convert_expand_copy_to_repeat.py +51 -0
  456. executorch/backends/arm/test/passes/test_convert_int64_const_ops_to_int32.py +529 -0
  457. executorch/backends/arm/test/passes/test_convert_int64_output_ops_to_int32.py +129 -0
  458. executorch/backends/arm/test/passes/test_convert_permute_singleton_to_view_pass.py +100 -0
  459. executorch/backends/arm/test/passes/test_convert_split_to_slice.py +75 -0
  460. executorch/backends/arm/test/passes/test_convert_to_clamp.py +92 -0
  461. executorch/backends/arm/test/passes/test_decompose_avg_pool2d_pass.py +82 -0
  462. executorch/backends/arm/test/passes/test_decompose_cosine_similarity_pass.py +58 -0
  463. executorch/backends/arm/test/passes/test_decompose_div_pass.py +70 -0
  464. executorch/backends/arm/test/passes/test_decompose_int_pow_pass.py +80 -0
  465. executorch/backends/arm/test/passes/test_decompose_layernorm_pass.py +69 -0
  466. executorch/backends/arm/test/passes/test_decompose_linalg_vector_norm_pass.py +107 -0
  467. executorch/backends/arm/test/passes/test_decompose_meandim_pass.py +137 -0
  468. executorch/backends/arm/test/passes/test_decompose_quant_nodes.py +44 -0
  469. executorch/backends/arm/test/passes/test_decompose_softmax_pass.py +103 -0
  470. executorch/backends/arm/test/passes/test_decompose_tosa_unsupported_clamp_pass.py +73 -0
  471. executorch/backends/arm/test/passes/test_decompose_var_pass.py +89 -0
  472. executorch/backends/arm/test/passes/test_decorate_fp32_to_int32_casting_pass.py +85 -0
  473. executorch/backends/arm/test/passes/test_fold_qdq_pass.py +51 -0
  474. executorch/backends/arm/test/passes/test_fuse_batchnorm_pass.py +164 -0
  475. executorch/backends/arm/test/passes/test_fuse_constant_ops_pass.py +177 -0
  476. executorch/backends/arm/test/passes/test_fuse_duplicate_users_pass.py +70 -0
  477. executorch/backends/arm/test/passes/test_fuse_equal_placeholders_ops_pass.py +170 -0
  478. executorch/backends/arm/test/passes/test_fuse_view_copy.py +82 -0
  479. executorch/backends/arm/test/passes/test_insert_int32_casts_after_int64_placeholders_pass.py +114 -0
  480. executorch/backends/arm/test/passes/test_insert_rescale_i32_pass.py +107 -0
  481. executorch/backends/arm/test/passes/test_insert_table_ops_pass.py +47 -0
  482. executorch/backends/arm/test/passes/test_int32_cast_embedding_pass.py +46 -0
  483. executorch/backends/arm/test/passes/test_ioquantization_pass.py +48 -0
  484. executorch/backends/arm/test/passes/test_promote_bool_operands_pass.py +103 -0
  485. executorch/backends/arm/test/passes/test_remove_clone_pass.py +45 -0
  486. executorch/backends/arm/test/passes/test_replace_inf_values_pass.py +96 -0
  487. executorch/backends/arm/test/passes/test_rescale_pass.py +81 -0
  488. executorch/backends/arm/test/passes/test_rewrite_conv_pass.py +20 -0
  489. executorch/backends/arm/test/passes/test_to_tosa_memory_format.py +213 -0
  490. executorch/backends/arm/test/passes/test_unsqueeze_before_repeat_pass.py +62 -0
  491. executorch/backends/arm/test/quantizer/test_conv_relu_fusing.py +118 -0
  492. executorch/backends/arm/test/quantizer/test_generic_annotater.py +109 -0
  493. executorch/backends/arm/test/quantizer/test_partial_quantization.py +104 -0
  494. executorch/backends/arm/test/quantizer/test_selective_quantization.py +212 -0
  495. executorch/backends/arm/test/quantizer/test_set_module_name.py +158 -0
  496. executorch/backends/arm/test/quantizer/test_tosa_quantizer_validate.py +55 -0
  497. executorch/backends/arm/test/runner_utils.py +840 -0
  498. executorch/backends/arm/test/test_memory_allocator_log.py +170 -0
  499. executorch/backends/arm/test/test_model.py +345 -0
  500. executorch/backends/arm/test/tester/__init__.py +6 -0
  501. executorch/backends/arm/test/tester/analyze_output_utils.py +346 -0
  502. executorch/backends/arm/test/tester/arm_tester.py +1149 -0
  503. executorch/backends/arm/test/tester/quantize.py +43 -0
  504. executorch/backends/arm/test/tester/serialize.py +78 -0
  505. executorch/backends/arm/test/tester/test_pipeline.py +1190 -0
  506. executorch/backends/arm/tosa/__init__.py +9 -0
  507. executorch/backends/arm/tosa/backend.py +443 -0
  508. executorch/backends/arm/tosa/compile_spec.py +48 -0
  509. executorch/backends/arm/tosa/dialect/__init__.py +15 -0
  510. executorch/backends/arm/tosa/dialect/lib.py +85 -0
  511. executorch/backends/arm/tosa/dialect/ops/conv2d.py +111 -0
  512. executorch/backends/arm/tosa/dialect/ops/conv3d.py +74 -0
  513. executorch/backends/arm/tosa/dialect/ops/depthwise_conv2d.py +56 -0
  514. executorch/backends/arm/tosa/dialect/ops/matmul.py +56 -0
  515. executorch/backends/arm/tosa/dialect/ops/rescale.py +53 -0
  516. executorch/backends/arm/tosa/dialect/ops/resize.py +66 -0
  517. executorch/backends/arm/tosa/dialect/ops/table.py +53 -0
  518. executorch/backends/arm/tosa/dialect/ops/transpose.py +35 -0
  519. executorch/backends/arm/tosa/dialect/ops_registration.py +68 -0
  520. executorch/backends/arm/tosa/mapping.py +309 -0
  521. executorch/backends/arm/tosa/partitioner.py +486 -0
  522. executorch/backends/arm/tosa/schemas/__init__.py +4 -0
  523. executorch/backends/arm/tosa/schemas/tosa_1.0.fbs +559 -0
  524. executorch/backends/arm/tosa/specification.py +406 -0
  525. executorch/backends/arm/tosa/utils.py +304 -0
  526. executorch/backends/arm/util/_factory.py +59 -0
  527. executorch/backends/arm/util/arm_model_evaluator.py +388 -0
  528. executorch/backends/arm/vgf/__init__.py +11 -0
  529. executorch/backends/arm/vgf/backend.py +172 -0
  530. executorch/backends/arm/vgf/compile_spec.py +73 -0
  531. executorch/backends/arm/vgf/model_converter.py +34 -0
  532. executorch/backends/arm/vgf/partitioner.py +35 -0
  533. executorch/backends/cadence/aot/__init__.py +5 -0
  534. executorch/backends/cadence/aot/compiler.py +484 -0
  535. executorch/backends/cadence/aot/compiler_funcs.py +203 -0
  536. executorch/backends/cadence/aot/compiler_utils.py +293 -0
  537. executorch/backends/cadence/aot/decompose_ops.py +120 -0
  538. executorch/backends/cadence/aot/export_example.py +117 -0
  539. executorch/backends/cadence/aot/functions.yaml +470 -0
  540. executorch/backends/cadence/aot/functions_fusion_g3.yaml +191 -0
  541. executorch/backends/cadence/aot/functions_hifi.yaml +565 -0
  542. executorch/backends/cadence/aot/functions_vision.yaml +275 -0
  543. executorch/backends/cadence/aot/fuse_ops.py +1138 -0
  544. executorch/backends/cadence/aot/graph_builder.py +142 -0
  545. executorch/backends/cadence/aot/memory_constraints.py +731 -0
  546. executorch/backends/cadence/aot/memory_planning.py +469 -0
  547. executorch/backends/cadence/aot/memory_planning_algo.py +341 -0
  548. executorch/backends/cadence/aot/ops_registrations.py +2841 -0
  549. executorch/backends/cadence/aot/pass_utils.py +274 -0
  550. executorch/backends/cadence/aot/passes.py +132 -0
  551. executorch/backends/cadence/aot/program_builder.py +138 -0
  552. executorch/backends/cadence/aot/quantizer/fusion_pass.py +743 -0
  553. executorch/backends/cadence/aot/quantizer/patterns.py +738 -0
  554. executorch/backends/cadence/aot/quantizer/quantizer.py +409 -0
  555. executorch/backends/cadence/aot/quantizer/utils.py +288 -0
  556. executorch/backends/cadence/aot/ref_implementations.py +2210 -0
  557. executorch/backends/cadence/aot/remove_ops.py +936 -0
  558. executorch/backends/cadence/aot/reorder_ops.py +843 -0
  559. executorch/backends/cadence/aot/replace_ops.py +2526 -0
  560. executorch/backends/cadence/aot/simplify_ops.py +221 -0
  561. executorch/backends/cadence/aot/tests/test_decompose_ops_passes.py +80 -0
  562. executorch/backends/cadence/aot/tests/test_fusion_ops_passes.py +1023 -0
  563. executorch/backends/cadence/aot/tests/test_graph_builder.py +104 -0
  564. executorch/backends/cadence/aot/tests/test_idma_ops.py +31 -0
  565. executorch/backends/cadence/aot/tests/test_memory_passes.py +1367 -0
  566. executorch/backends/cadence/aot/tests/test_pass_filter.py +167 -0
  567. executorch/backends/cadence/aot/tests/test_program_builder.py +222 -0
  568. executorch/backends/cadence/aot/tests/test_quantizer_ops.py +649 -0
  569. executorch/backends/cadence/aot/tests/test_ref_implementations.py +3151 -0
  570. executorch/backends/cadence/aot/tests/test_remove_ops_passes.py +977 -0
  571. executorch/backends/cadence/aot/tests/test_reorder_ops_passes.py +635 -0
  572. executorch/backends/cadence/aot/tests/test_replace_ops_passes.py +2777 -0
  573. executorch/backends/cadence/aot/tests/test_simplify_ops_passes.py +160 -0
  574. executorch/backends/cadence/aot/tests/test_type_dispatch_passes.py +481 -0
  575. executorch/backends/cadence/aot/type_dispatch.py +190 -0
  576. executorch/backends/cadence/aot/typing_stubs.py +22 -0
  577. executorch/backends/cadence/aot/utils.py +363 -0
  578. executorch/backends/cadence/runtime/__init__.py +13 -0
  579. executorch/backends/cadence/runtime/etdump.py +173 -0
  580. executorch/backends/cadence/runtime/executor.py +202 -0
  581. executorch/backends/cadence/runtime/runtime.py +156 -0
  582. executorch/backends/cadence/runtime/utils.py +100 -0
  583. executorch/backends/cadence/utils/FACTO/calibrator/__init__.py +0 -0
  584. executorch/backends/cadence/utils/FACTO/calibrator/runner.py +190 -0
  585. executorch/backends/cadence/utils/FACTO/examples/example.py +59 -0
  586. executorch/backends/cadence/utils/FACTO/examples/minimal_example.py +21 -0
  587. executorch/backends/cadence/utils/FACTO/examples/random_seed.py +35 -0
  588. executorch/backends/cadence/utils/FACTO/facto/__init__.py +0 -0
  589. executorch/backends/cadence/utils/FACTO/facto/inputgen/__init__.py +0 -0
  590. executorch/backends/cadence/utils/FACTO/facto/inputgen/argtuple/__init__.py +0 -0
  591. executorch/backends/cadence/utils/FACTO/facto/inputgen/argtuple/engine.py +129 -0
  592. executorch/backends/cadence/utils/FACTO/facto/inputgen/argtuple/gen.py +47 -0
  593. executorch/backends/cadence/utils/FACTO/facto/inputgen/argument/__init__.py +0 -0
  594. executorch/backends/cadence/utils/FACTO/facto/inputgen/argument/engine.py +291 -0
  595. executorch/backends/cadence/utils/FACTO/facto/inputgen/argument/gen.py +139 -0
  596. executorch/backends/cadence/utils/FACTO/facto/inputgen/argument/type.py +134 -0
  597. executorch/backends/cadence/utils/FACTO/facto/inputgen/attribute/__init__.py +0 -0
  598. executorch/backends/cadence/utils/FACTO/facto/inputgen/attribute/engine.py +54 -0
  599. executorch/backends/cadence/utils/FACTO/facto/inputgen/attribute/model.py +133 -0
  600. executorch/backends/cadence/utils/FACTO/facto/inputgen/attribute/solve.py +125 -0
  601. executorch/backends/cadence/utils/FACTO/facto/inputgen/specs/__init__.py +0 -0
  602. executorch/backends/cadence/utils/FACTO/facto/inputgen/specs/model.py +149 -0
  603. executorch/backends/cadence/utils/FACTO/facto/inputgen/utils/__init__.py +0 -0
  604. executorch/backends/cadence/utils/FACTO/facto/inputgen/utils/random_manager.py +33 -0
  605. executorch/backends/cadence/utils/FACTO/facto/inputgen/variable/__init__.py +0 -0
  606. executorch/backends/cadence/utils/FACTO/facto/inputgen/variable/constants.py +9 -0
  607. executorch/backends/cadence/utils/FACTO/facto/inputgen/variable/gen.py +283 -0
  608. executorch/backends/cadence/utils/FACTO/facto/inputgen/variable/solve.py +142 -0
  609. executorch/backends/cadence/utils/FACTO/facto/inputgen/variable/space.py +450 -0
  610. executorch/backends/cadence/utils/FACTO/facto/inputgen/variable/type.py +105 -0
  611. executorch/backends/cadence/utils/FACTO/facto/inputgen/variable/utils.py +30 -0
  612. executorch/backends/cadence/utils/FACTO/facto/specdb/db.py +4361 -0
  613. executorch/backends/cadence/utils/FACTO/facto/specdb/default.py +36 -0
  614. executorch/backends/cadence/utils/FACTO/facto/specdb/dtypes.py +25 -0
  615. executorch/backends/cadence/utils/FACTO/facto/specdb/function.py +537 -0
  616. executorch/backends/cadence/utils/FACTO/setup.py +19 -0
  617. executorch/backends/cadence/utils/FACTO/test/inputgen/test_argtuple_engine.py +53 -0
  618. executorch/backends/cadence/utils/FACTO/test/inputgen/test_argtuple_generator.py +58 -0
  619. executorch/backends/cadence/utils/FACTO/test/inputgen/test_argument_attributes.py +78 -0
  620. executorch/backends/cadence/utils/FACTO/test/inputgen/test_argument_generator.py +98 -0
  621. executorch/backends/cadence/utils/FACTO/test/inputgen/test_argument_types.py +28 -0
  622. executorch/backends/cadence/utils/FACTO/test/inputgen/test_attribute_engine.py +62 -0
  623. executorch/backends/cadence/utils/FACTO/test/inputgen/test_attribute_solver.py +83 -0
  624. executorch/backends/cadence/utils/FACTO/test/inputgen/test_constraints.py +27 -0
  625. executorch/backends/cadence/utils/FACTO/test/inputgen/test_meta_arg_engine.py +70 -0
  626. executorch/backends/cadence/utils/FACTO/test/inputgen/test_specs.py +48 -0
  627. executorch/backends/cadence/utils/FACTO/test/inputgen/test_structural_engine.py +32 -0
  628. executorch/backends/cadence/utils/FACTO/test/inputgen/test_variable_generation.py +80 -0
  629. executorch/backends/cadence/utils/FACTO/test/inputgen/test_variable_solving.py +193 -0
  630. executorch/backends/cadence/utils/FACTO/test/inputgen/test_variable_space.py +231 -0
  631. executorch/backends/cadence/utils/FACTO/test/inputgen/test_variable_types.py +71 -0
  632. executorch/backends/cadence/utils/facto_util.py +611 -0
  633. executorch/backends/cadence/utils/gen_header.py +49 -0
  634. executorch/backends/cadence/utils/post_compilation.py +173 -0
  635. executorch/backends/cortex_m/ops/operators.py +890 -0
  636. executorch/backends/cortex_m/ops/operators.yaml +78 -0
  637. executorch/backends/cortex_m/passes/__init__.py +12 -0
  638. executorch/backends/cortex_m/passes/activation_fusion_pass.py +181 -0
  639. executorch/backends/cortex_m/passes/clamp_hardswish_pass.py +37 -0
  640. executorch/backends/cortex_m/passes/convert_to_cortex_m_pass.py +318 -0
  641. executorch/backends/cortex_m/passes/cortex_m_pass_manager.py +73 -0
  642. executorch/backends/cortex_m/passes/decompose_hardswish_pass.py +127 -0
  643. executorch/backends/cortex_m/passes/passes_utils.py +226 -0
  644. executorch/backends/cortex_m/passes/quantized_op_fusion_pass.py +255 -0
  645. executorch/backends/cortex_m/passes/replace_quant_nodes_pass.py +67 -0
  646. executorch/backends/cortex_m/quantizer/__init__.py +18 -0
  647. executorch/backends/cortex_m/quantizer/operator_configs.py +74 -0
  648. executorch/backends/cortex_m/quantizer/quantization_configs.py +121 -0
  649. executorch/backends/cortex_m/quantizer/quantizer.py +500 -0
  650. executorch/backends/cortex_m/test/misc/test_quantization.py +359 -0
  651. executorch/backends/cortex_m/test/models/__init__.py +4 -0
  652. executorch/backends/cortex_m/test/models/test_mobilenet_v3.py +74 -0
  653. executorch/backends/cortex_m/test/ops/__init__.py +4 -0
  654. executorch/backends/cortex_m/test/ops/test_activation.py +528 -0
  655. executorch/backends/cortex_m/test/ops/test_add.py +182 -0
  656. executorch/backends/cortex_m/test/ops/test_avg_pool2d.py +99 -0
  657. executorch/backends/cortex_m/test/ops/test_conv.py +342 -0
  658. executorch/backends/cortex_m/test/ops/test_linear.py +130 -0
  659. executorch/backends/cortex_m/test/ops/test_lstm.py +98 -0
  660. executorch/backends/cortex_m/test/ops/test_maximum.py +83 -0
  661. executorch/backends/cortex_m/test/ops/test_minimum.py +104 -0
  662. executorch/backends/cortex_m/test/ops/test_mul.py +156 -0
  663. executorch/backends/cortex_m/test/ops/test_softmax.py +84 -0
  664. executorch/backends/cortex_m/test/ops/test_transpose.py +102 -0
  665. executorch/backends/cortex_m/test/test_helpers_passes_utils.py +103 -0
  666. executorch/backends/cortex_m/test/test_replace_quant_nodes.py +134 -0
  667. executorch/backends/cortex_m/test/tester.py +113 -0
  668. executorch/backends/cuda/__init__.py +5 -0
  669. executorch/backends/cuda/cuda_backend.py +250 -0
  670. executorch/backends/cuda/cuda_partitioner.py +25 -0
  671. executorch/backends/cuda/passes/__init__.py +0 -0
  672. executorch/backends/cuda/passes/move_cond_predicate_to_cpu.py +90 -0
  673. executorch/backends/cuda/passes/tests/__init__.py +0 -0
  674. executorch/backends/cuda/passes/tests/test_move_cond_predicate_to_cpu.py +553 -0
  675. executorch/backends/cuda/tests/__init__.py +5 -0
  676. executorch/backends/cuda/tests/test_cuda_export.py +327 -0
  677. executorch/backends/cuda/tests/test_cuda_partitioner.py +224 -0
  678. executorch/backends/cuda/triton/__init__.py +17 -0
  679. executorch/backends/cuda/triton/kernels/__init__.py +11 -0
  680. executorch/backends/cuda/triton/kernels/sdpa.py +827 -0
  681. executorch/backends/cuda/triton/replacement_pass.py +130 -0
  682. executorch/backends/example/example_backend.py +41 -0
  683. executorch/backends/example/example_backend_delegate_passes/merge_to_dim_pass.py +83 -0
  684. executorch/backends/example/example_backend_delegate_passes/permute_memory_formats_pass.py +143 -0
  685. executorch/backends/example/example_operators/adaptive_avg_pool2d.py +47 -0
  686. executorch/backends/example/example_operators/add.py +44 -0
  687. executorch/backends/example/example_operators/conv2d.py +52 -0
  688. executorch/backends/example/example_operators/conv_relu.py +49 -0
  689. executorch/backends/example/example_operators/dropout.py +44 -0
  690. executorch/backends/example/example_operators/flatten.py +40 -0
  691. executorch/backends/example/example_operators/linear.py +62 -0
  692. executorch/backends/example/example_operators/op_base.py +15 -0
  693. executorch/backends/example/example_operators/ops.py +32 -0
  694. executorch/backends/example/example_operators/utils.py +34 -0
  695. executorch/backends/example/example_partitioner.py +88 -0
  696. executorch/backends/example/example_quantizer.py +108 -0
  697. executorch/backends/example/test_example_delegate.py +112 -0
  698. executorch/backends/mediatek/__init__.py +5 -0
  699. executorch/backends/mediatek/_passes/__init__.py +0 -0
  700. executorch/backends/mediatek/_passes/decompose_scaled_dot_product_attention.py +79 -0
  701. executorch/backends/mediatek/partitioner.py +107 -0
  702. executorch/backends/mediatek/preprocess.py +214 -0
  703. executorch/backends/mediatek/quantizer/__init__.py +4 -0
  704. executorch/backends/mediatek/quantizer/annotator.py +263 -0
  705. executorch/backends/mediatek/quantizer/qconfig.py +174 -0
  706. executorch/backends/mediatek/quantizer/quantizer.py +45 -0
  707. executorch/backends/nxp/_passes/remove_getitem_pass.py +105 -0
  708. executorch/backends/nxp/aten_passes/convert_unsqueeze_to_view.py +79 -0
  709. executorch/backends/nxp/aten_passes/decompose_split_to_slices_pass.py +193 -0
  710. executorch/backends/nxp/aten_passes/fuse_batch_norm_with_conv_pass.py +146 -0
  711. executorch/backends/nxp/aten_passes/fuse_batch_norm_with_linear_pass.py +150 -0
  712. executorch/backends/nxp/aten_passes/fuse_linear_and_add_pass.py +204 -0
  713. executorch/backends/nxp/aten_passes/move_activation_before_concat.py +102 -0
  714. executorch/backends/nxp/aten_passes/neutron_aten_pass_manager.py +80 -0
  715. executorch/backends/nxp/aten_passes/remove_nodes_with_known_outputs.py +196 -0
  716. executorch/backends/nxp/aten_passes/split_group_convolution.py +281 -0
  717. executorch/backends/nxp/aten_passes/split_gru_based_on_num_layers.py +307 -0
  718. executorch/backends/nxp/backend/custom_delegation_options.py +19 -0
  719. executorch/backends/nxp/backend/edge_helper.py +222 -0
  720. executorch/backends/nxp/backend/edge_program_converter.py +247 -0
  721. executorch/backends/nxp/backend/ir/conversion_config.py +54 -0
  722. executorch/backends/nxp/backend/ir/conversion_context.py +38 -0
  723. executorch/backends/nxp/backend/ir/converter/__init__.py +0 -0
  724. executorch/backends/nxp/backend/ir/converter/builder/__init__.py +0 -0
  725. executorch/backends/nxp/backend/ir/converter/builder/aten_model_builder_director.py +142 -0
  726. executorch/backends/nxp/backend/ir/converter/builder/model_builder.py +1720 -0
  727. executorch/backends/nxp/backend/ir/converter/builder/quantization_verification.py +377 -0
  728. executorch/backends/nxp/backend/ir/converter/conversion/__init__.py +0 -0
  729. executorch/backends/nxp/backend/ir/converter/conversion/aten_translator.py +71 -0
  730. executorch/backends/nxp/backend/ir/converter/conversion/common.py +207 -0
  731. executorch/backends/nxp/backend/ir/converter/conversion/translator.py +689 -0
  732. executorch/backends/nxp/backend/ir/converter/node_converter.py +234 -0
  733. executorch/backends/nxp/backend/ir/converter/node_converters/__init__.py +4 -0
  734. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/__init__.py +101 -0
  735. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/abs_converter.py +35 -0
  736. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/adaptive_avg_pool_2d_converter.py +68 -0
  737. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/add_tensor_converter.py +57 -0
  738. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/addmm_converter.py +62 -0
  739. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/avg_pool_2d_converter.py +101 -0
  740. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/cat_converter.py +209 -0
  741. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/clone_converter.py +118 -0
  742. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/constant_pad_nd_converter.py +160 -0
  743. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/convolution_converter.py +535 -0
  744. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/hardtanh_converter.py +47 -0
  745. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/max_pool_2d_converter.py +104 -0
  746. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/mean_dim_converter.py +112 -0
  747. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/mm_converter.py +59 -0
  748. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/mul_tensor_converter.py +61 -0
  749. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/permute_copy_converter.py +468 -0
  750. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/qdq_dequantize_converter.py +116 -0
  751. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/qdq_quantize_converter.py +46 -0
  752. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/relu_converter.py +33 -0
  753. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/sigmoid_converter.py +35 -0
  754. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/slice_tensor_converter.py +158 -0
  755. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/softmax_converter.py +62 -0
  756. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/sub_tensor_converter.py +59 -0
  757. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/tanh_converter.py +33 -0
  758. executorch/backends/nxp/backend/ir/converter/node_converters/ops_converters/view_copy_converter.py +220 -0
  759. executorch/backends/nxp/backend/ir/converter/node_converters/shared/__init__.py +0 -0
  760. executorch/backends/nxp/backend/ir/converter/node_converters/shared/conv_utils.py +105 -0
  761. executorch/backends/nxp/backend/ir/converter/node_converters/shared/recurrent_utils.py +64 -0
  762. executorch/backends/nxp/backend/ir/converter/node_converters/shared/reduce_utils.py +97 -0
  763. executorch/backends/nxp/backend/ir/converter/node_converters/shared/reshape_transposition.py +233 -0
  764. executorch/backends/nxp/backend/ir/converter/quantization_utils.py +149 -0
  765. executorch/backends/nxp/backend/ir/converter/tensor_utils.py +50 -0
  766. executorch/backends/nxp/backend/ir/lib/__init__.py +0 -0
  767. executorch/backends/nxp/backend/ir/lib/tflite/ATan2Options.py +50 -0
  768. executorch/backends/nxp/backend/ir/lib/tflite/AbsOptions.py +50 -0
  769. executorch/backends/nxp/backend/ir/lib/tflite/ActivationFunctionType.py +12 -0
  770. executorch/backends/nxp/backend/ir/lib/tflite/AddNOptions.py +50 -0
  771. executorch/backends/nxp/backend/ir/lib/tflite/AddOptions.py +82 -0
  772. executorch/backends/nxp/backend/ir/lib/tflite/ArgMaxOptions.py +65 -0
  773. executorch/backends/nxp/backend/ir/lib/tflite/ArgMinOptions.py +65 -0
  774. executorch/backends/nxp/backend/ir/lib/tflite/AssignVariableOptions.py +50 -0
  775. executorch/backends/nxp/backend/ir/lib/tflite/BatchMatMulOptions.py +101 -0
  776. executorch/backends/nxp/backend/ir/lib/tflite/BatchToSpaceNDOptions.py +50 -0
  777. executorch/backends/nxp/backend/ir/lib/tflite/BidirectionalSequenceLSTMOptions.py +160 -0
  778. executorch/backends/nxp/backend/ir/lib/tflite/BidirectionalSequenceRNNOptions.py +126 -0
  779. executorch/backends/nxp/backend/ir/lib/tflite/BitcastOptions.py +50 -0
  780. executorch/backends/nxp/backend/ir/lib/tflite/BitwiseXorOptions.py +50 -0
  781. executorch/backends/nxp/backend/ir/lib/tflite/BroadcastToOptions.py +50 -0
  782. executorch/backends/nxp/backend/ir/lib/tflite/BucketizeOptions.py +98 -0
  783. executorch/backends/nxp/backend/ir/lib/tflite/Buffer.py +132 -0
  784. executorch/backends/nxp/backend/ir/lib/tflite/BuiltinOperator.py +212 -0
  785. executorch/backends/nxp/backend/ir/lib/tflite/BuiltinOptions.py +133 -0
  786. executorch/backends/nxp/backend/ir/lib/tflite/BuiltinOptions2.py +27 -0
  787. executorch/backends/nxp/backend/ir/lib/tflite/CallOnceOptions.py +65 -0
  788. executorch/backends/nxp/backend/ir/lib/tflite/CallOptions.py +67 -0
  789. executorch/backends/nxp/backend/ir/lib/tflite/CastOptions.py +80 -0
  790. executorch/backends/nxp/backend/ir/lib/tflite/CombinerType.py +9 -0
  791. executorch/backends/nxp/backend/ir/lib/tflite/ConcatEmbeddingsOptions.py +163 -0
  792. executorch/backends/nxp/backend/ir/lib/tflite/ConcatenationOptions.py +80 -0
  793. executorch/backends/nxp/backend/ir/lib/tflite/Conv2DOptions.py +155 -0
  794. executorch/backends/nxp/backend/ir/lib/tflite/Conv3DOptions.py +170 -0
  795. executorch/backends/nxp/backend/ir/lib/tflite/CosOptions.py +50 -0
  796. executorch/backends/nxp/backend/ir/lib/tflite/CumsumOptions.py +84 -0
  797. executorch/backends/nxp/backend/ir/lib/tflite/CustomOptionsFormat.py +7 -0
  798. executorch/backends/nxp/backend/ir/lib/tflite/CustomQuantization.py +98 -0
  799. executorch/backends/nxp/backend/ir/lib/tflite/DensifyOptions.py +50 -0
  800. executorch/backends/nxp/backend/ir/lib/tflite/DepthToSpaceOptions.py +65 -0
  801. executorch/backends/nxp/backend/ir/lib/tflite/DepthwiseConv2DOptions.py +157 -0
  802. executorch/backends/nxp/backend/ir/lib/tflite/DequantizeOptions.py +50 -0
  803. executorch/backends/nxp/backend/ir/lib/tflite/DilateOptions.py +50 -0
  804. executorch/backends/nxp/backend/ir/lib/tflite/DimensionMetadata.py +152 -0
  805. executorch/backends/nxp/backend/ir/lib/tflite/DimensionType.py +8 -0
  806. executorch/backends/nxp/backend/ir/lib/tflite/DivOptions.py +65 -0
  807. executorch/backends/nxp/backend/ir/lib/tflite/DynamicUpdateSliceOptions.py +52 -0
  808. executorch/backends/nxp/backend/ir/lib/tflite/EmbeddingLookupSparseOptions.py +67 -0
  809. executorch/backends/nxp/backend/ir/lib/tflite/EqualOptions.py +50 -0
  810. executorch/backends/nxp/backend/ir/lib/tflite/ExpOptions.py +50 -0
  811. executorch/backends/nxp/backend/ir/lib/tflite/ExpandDimsOptions.py +50 -0
  812. executorch/backends/nxp/backend/ir/lib/tflite/FakeQuantOptions.py +116 -0
  813. executorch/backends/nxp/backend/ir/lib/tflite/FillOptions.py +50 -0
  814. executorch/backends/nxp/backend/ir/lib/tflite/FloorDivOptions.py +50 -0
  815. executorch/backends/nxp/backend/ir/lib/tflite/FloorModOptions.py +50 -0
  816. executorch/backends/nxp/backend/ir/lib/tflite/FullyConnectedOptions.py +129 -0
  817. executorch/backends/nxp/backend/ir/lib/tflite/FullyConnectedOptionsWeightsFormat.py +8 -0
  818. executorch/backends/nxp/backend/ir/lib/tflite/GatherNdOptions.py +50 -0
  819. executorch/backends/nxp/backend/ir/lib/tflite/GatherOptions.py +80 -0
  820. executorch/backends/nxp/backend/ir/lib/tflite/GeluOptions.py +67 -0
  821. executorch/backends/nxp/backend/ir/lib/tflite/GreaterEqualOptions.py +50 -0
  822. executorch/backends/nxp/backend/ir/lib/tflite/GreaterOptions.py +50 -0
  823. executorch/backends/nxp/backend/ir/lib/tflite/HardSwishOptions.py +50 -0
  824. executorch/backends/nxp/backend/ir/lib/tflite/HashtableFindOptions.py +50 -0
  825. executorch/backends/nxp/backend/ir/lib/tflite/HashtableImportOptions.py +52 -0
  826. executorch/backends/nxp/backend/ir/lib/tflite/HashtableOptions.py +95 -0
  827. executorch/backends/nxp/backend/ir/lib/tflite/HashtableSizeOptions.py +50 -0
  828. executorch/backends/nxp/backend/ir/lib/tflite/IfOptions.py +80 -0
  829. executorch/backends/nxp/backend/ir/lib/tflite/Int32Vector.py +98 -0
  830. executorch/backends/nxp/backend/ir/lib/tflite/L2NormOptions.py +65 -0
  831. executorch/backends/nxp/backend/ir/lib/tflite/LSHProjectionOptions.py +65 -0
  832. executorch/backends/nxp/backend/ir/lib/tflite/LSHProjectionType.py +9 -0
  833. executorch/backends/nxp/backend/ir/lib/tflite/LSTMKernelType.py +8 -0
  834. executorch/backends/nxp/backend/ir/lib/tflite/LSTMOptions.py +131 -0
  835. executorch/backends/nxp/backend/ir/lib/tflite/LeakyReluOptions.py +67 -0
  836. executorch/backends/nxp/backend/ir/lib/tflite/LessEqualOptions.py +50 -0
  837. executorch/backends/nxp/backend/ir/lib/tflite/LessOptions.py +50 -0
  838. executorch/backends/nxp/backend/ir/lib/tflite/LocalResponseNormalizationOptions.py +118 -0
  839. executorch/backends/nxp/backend/ir/lib/tflite/LogSoftmaxOptions.py +50 -0
  840. executorch/backends/nxp/backend/ir/lib/tflite/LogicalAndOptions.py +50 -0
  841. executorch/backends/nxp/backend/ir/lib/tflite/LogicalNotOptions.py +50 -0
  842. executorch/backends/nxp/backend/ir/lib/tflite/LogicalOrOptions.py +50 -0
  843. executorch/backends/nxp/backend/ir/lib/tflite/MatrixDiagOptions.py +50 -0
  844. executorch/backends/nxp/backend/ir/lib/tflite/MatrixSetDiagOptions.py +50 -0
  845. executorch/backends/nxp/backend/ir/lib/tflite/MaximumMinimumOptions.py +50 -0
  846. executorch/backends/nxp/backend/ir/lib/tflite/Metadata.py +84 -0
  847. executorch/backends/nxp/backend/ir/lib/tflite/MirrorPadMode.py +8 -0
  848. executorch/backends/nxp/backend/ir/lib/tflite/MirrorPadOptions.py +65 -0
  849. executorch/backends/nxp/backend/ir/lib/tflite/Model.py +352 -0
  850. executorch/backends/nxp/backend/ir/lib/tflite/MulOptions.py +65 -0
  851. executorch/backends/nxp/backend/ir/lib/tflite/NegOptions.py +50 -0
  852. executorch/backends/nxp/backend/ir/lib/tflite/NonMaxSuppressionV4Options.py +52 -0
  853. executorch/backends/nxp/backend/ir/lib/tflite/NonMaxSuppressionV5Options.py +52 -0
  854. executorch/backends/nxp/backend/ir/lib/tflite/NotEqualOptions.py +50 -0
  855. executorch/backends/nxp/backend/ir/lib/tflite/OneHotOptions.py +65 -0
  856. executorch/backends/nxp/backend/ir/lib/tflite/Operator.py +428 -0
  857. executorch/backends/nxp/backend/ir/lib/tflite/OperatorCode.py +112 -0
  858. executorch/backends/nxp/backend/ir/lib/tflite/PackOptions.py +80 -0
  859. executorch/backends/nxp/backend/ir/lib/tflite/PadOptions.py +50 -0
  860. executorch/backends/nxp/backend/ir/lib/tflite/PadV2Options.py +50 -0
  861. executorch/backends/nxp/backend/ir/lib/tflite/Padding.py +8 -0
  862. executorch/backends/nxp/backend/ir/lib/tflite/Pool2DOptions.py +140 -0
  863. executorch/backends/nxp/backend/ir/lib/tflite/PowOptions.py +50 -0
  864. executorch/backends/nxp/backend/ir/lib/tflite/QuantizationDetails.py +8 -0
  865. executorch/backends/nxp/backend/ir/lib/tflite/QuantizationParameters.py +295 -0
  866. executorch/backends/nxp/backend/ir/lib/tflite/QuantizeOptions.py +50 -0
  867. executorch/backends/nxp/backend/ir/lib/tflite/RNNOptions.py +82 -0
  868. executorch/backends/nxp/backend/ir/lib/tflite/RandomOptions.py +80 -0
  869. executorch/backends/nxp/backend/ir/lib/tflite/RangeOptions.py +50 -0
  870. executorch/backends/nxp/backend/ir/lib/tflite/RankOptions.py +50 -0
  871. executorch/backends/nxp/backend/ir/lib/tflite/ReadVariableOptions.py +50 -0
  872. executorch/backends/nxp/backend/ir/lib/tflite/ReduceWindowFunction.py +13 -0
  873. executorch/backends/nxp/backend/ir/lib/tflite/ReduceWindowOptions.py +65 -0
  874. executorch/backends/nxp/backend/ir/lib/tflite/ReducerOptions.py +67 -0
  875. executorch/backends/nxp/backend/ir/lib/tflite/ReshapeOptions.py +98 -0
  876. executorch/backends/nxp/backend/ir/lib/tflite/ResizeBilinearOptions.py +84 -0
  877. executorch/backends/nxp/backend/ir/lib/tflite/ResizeNearestNeighborOptions.py +86 -0
  878. executorch/backends/nxp/backend/ir/lib/tflite/ReverseSequenceOptions.py +82 -0
  879. executorch/backends/nxp/backend/ir/lib/tflite/ReverseV2Options.py +50 -0
  880. executorch/backends/nxp/backend/ir/lib/tflite/Rfft2dOptions.py +50 -0
  881. executorch/backends/nxp/backend/ir/lib/tflite/RightShiftOptions.py +50 -0
  882. executorch/backends/nxp/backend/ir/lib/tflite/RngAlgorithm.py +9 -0
  883. executorch/backends/nxp/backend/ir/lib/tflite/SVDFOptions.py +97 -0
  884. executorch/backends/nxp/backend/ir/lib/tflite/ScatterNdOptions.py +50 -0
  885. executorch/backends/nxp/backend/ir/lib/tflite/SegmentSumOptions.py +50 -0
  886. executorch/backends/nxp/backend/ir/lib/tflite/SelectOptions.py +50 -0
  887. executorch/backends/nxp/backend/ir/lib/tflite/SelectV2Options.py +50 -0
  888. executorch/backends/nxp/backend/ir/lib/tflite/SequenceRNNOptions.py +99 -0
  889. executorch/backends/nxp/backend/ir/lib/tflite/ShapeOptions.py +65 -0
  890. executorch/backends/nxp/backend/ir/lib/tflite/SignOptions.py +50 -0
  891. executorch/backends/nxp/backend/ir/lib/tflite/SignatureDef.py +172 -0
  892. executorch/backends/nxp/backend/ir/lib/tflite/SkipGramOptions.py +97 -0
  893. executorch/backends/nxp/backend/ir/lib/tflite/SliceOptions.py +50 -0
  894. executorch/backends/nxp/backend/ir/lib/tflite/SoftmaxOptions.py +67 -0
  895. executorch/backends/nxp/backend/ir/lib/tflite/SpaceToBatchNDOptions.py +50 -0
  896. executorch/backends/nxp/backend/ir/lib/tflite/SpaceToDepthOptions.py +65 -0
  897. executorch/backends/nxp/backend/ir/lib/tflite/SparseIndexVector.py +10 -0
  898. executorch/backends/nxp/backend/ir/lib/tflite/SparseToDenseOptions.py +67 -0
  899. executorch/backends/nxp/backend/ir/lib/tflite/SparsityParameters.py +190 -0
  900. executorch/backends/nxp/backend/ir/lib/tflite/SplitOptions.py +65 -0
  901. executorch/backends/nxp/backend/ir/lib/tflite/SplitVOptions.py +65 -0
  902. executorch/backends/nxp/backend/ir/lib/tflite/SquareOptions.py +50 -0
  903. executorch/backends/nxp/backend/ir/lib/tflite/SquaredDifferenceOptions.py +52 -0
  904. executorch/backends/nxp/backend/ir/lib/tflite/SqueezeOptions.py +98 -0
  905. executorch/backends/nxp/backend/ir/lib/tflite/StablehloBroadcastInDimOptions.py +102 -0
  906. executorch/backends/nxp/backend/ir/lib/tflite/StablehloCompareOptions.py +86 -0
  907. executorch/backends/nxp/backend/ir/lib/tflite/StablehloComparisonDirection.py +12 -0
  908. executorch/backends/nxp/backend/ir/lib/tflite/StablehloComparisonType.py +11 -0
  909. executorch/backends/nxp/backend/ir/lib/tflite/StablehloConcatenateOptions.py +67 -0
  910. executorch/backends/nxp/backend/ir/lib/tflite/StablehloConvolutionOptions.py +634 -0
  911. executorch/backends/nxp/backend/ir/lib/tflite/StablehloCustomCallOptions.py +214 -0
  912. executorch/backends/nxp/backend/ir/lib/tflite/StablehloDotGeneralOptions.py +304 -0
  913. executorch/backends/nxp/backend/ir/lib/tflite/StablehloDynamicSliceOptions.py +100 -0
  914. executorch/backends/nxp/backend/ir/lib/tflite/StablehloGatherOptions.py +276 -0
  915. executorch/backends/nxp/backend/ir/lib/tflite/StablehloIotaOptions.py +65 -0
  916. executorch/backends/nxp/backend/ir/lib/tflite/StablehloPadOptions.py +194 -0
  917. executorch/backends/nxp/backend/ir/lib/tflite/StablehloPrecisionConfig.py +9 -0
  918. executorch/backends/nxp/backend/ir/lib/tflite/StablehloReduceOptions.py +115 -0
  919. executorch/backends/nxp/backend/ir/lib/tflite/StablehloReduceWindowOptions.py +307 -0
  920. executorch/backends/nxp/backend/ir/lib/tflite/StablehloRngBitGeneratorOptions.py +67 -0
  921. executorch/backends/nxp/backend/ir/lib/tflite/StablehloScatterOptions.py +268 -0
  922. executorch/backends/nxp/backend/ir/lib/tflite/StablehloSliceOptions.py +194 -0
  923. executorch/backends/nxp/backend/ir/lib/tflite/StablehloSortOptions.py +97 -0
  924. executorch/backends/nxp/backend/ir/lib/tflite/StablehloTransposeOptions.py +100 -0
  925. executorch/backends/nxp/backend/ir/lib/tflite/StablehloWhileOptions.py +80 -0
  926. executorch/backends/nxp/backend/ir/lib/tflite/StridedSliceOptions.py +142 -0
  927. executorch/backends/nxp/backend/ir/lib/tflite/SubGraph.py +251 -0
  928. executorch/backends/nxp/backend/ir/lib/tflite/SubOptions.py +82 -0
  929. executorch/backends/nxp/backend/ir/lib/tflite/Tensor.py +317 -0
  930. executorch/backends/nxp/backend/ir/lib/tflite/TensorMap.py +84 -0
  931. executorch/backends/nxp/backend/ir/lib/tflite/TensorType.py +24 -0
  932. executorch/backends/nxp/backend/ir/lib/tflite/TileOptions.py +50 -0
  933. executorch/backends/nxp/backend/ir/lib/tflite/TopKV2Options.py +50 -0
  934. executorch/backends/nxp/backend/ir/lib/tflite/TransposeConvOptions.py +125 -0
  935. executorch/backends/nxp/backend/ir/lib/tflite/TransposeOptions.py +50 -0
  936. executorch/backends/nxp/backend/ir/lib/tflite/Uint16Vector.py +98 -0
  937. executorch/backends/nxp/backend/ir/lib/tflite/Uint8Vector.py +98 -0
  938. executorch/backends/nxp/backend/ir/lib/tflite/UnidirectionalSequenceLSTMOptions.py +164 -0
  939. executorch/backends/nxp/backend/ir/lib/tflite/UniqueOptions.py +65 -0
  940. executorch/backends/nxp/backend/ir/lib/tflite/UnpackOptions.py +80 -0
  941. executorch/backends/nxp/backend/ir/lib/tflite/UnsortedSegmentMaxOptions.py +52 -0
  942. executorch/backends/nxp/backend/ir/lib/tflite/UnsortedSegmentMinOptions.py +52 -0
  943. executorch/backends/nxp/backend/ir/lib/tflite/UnsortedSegmentProdOptions.py +52 -0
  944. executorch/backends/nxp/backend/ir/lib/tflite/UnsortedSegmentSumOptions.py +52 -0
  945. executorch/backends/nxp/backend/ir/lib/tflite/VarHandleOptions.py +84 -0
  946. executorch/backends/nxp/backend/ir/lib/tflite/VariantSubType.py +130 -0
  947. executorch/backends/nxp/backend/ir/lib/tflite/WhereOptions.py +50 -0
  948. executorch/backends/nxp/backend/ir/lib/tflite/WhileOptions.py +80 -0
  949. executorch/backends/nxp/backend/ir/lib/tflite/ZerosLikeOptions.py +50 -0
  950. executorch/backends/nxp/backend/ir/lib/tflite/__init__.py +0 -0
  951. executorch/backends/nxp/backend/ir/logger.py +341 -0
  952. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/__init__.py +0 -0
  953. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/graph_utils.py +115 -0
  954. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/operator_rules.py +102 -0
  955. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/optimizations/__init__.py +0 -0
  956. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/optimizations/base_optimization.py +41 -0
  957. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/optimizations/permute_fully_connected_weights_after_reshape.py +121 -0
  958. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/optimizations/prune_transpose_operators.py +174 -0
  959. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/optimizer.py +127 -0
  960. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/pattern_matcher.py +925 -0
  961. executorch/backends/nxp/backend/ir/neutron_ir_post_processing/tensor_rules.py +710 -0
  962. executorch/backends/nxp/backend/ir/tensor_formatting.py +69 -0
  963. executorch/backends/nxp/backend/ir/tflite_generator/__init__.py +0 -0
  964. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/__init__.py +0 -0
  965. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/abs_options.py +25 -0
  966. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/add_n_options.py +32 -0
  967. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/add_options.py +46 -0
  968. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/arg_max_options.py +28 -0
  969. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/arg_min_options.py +28 -0
  970. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/average_pool_2d_options.py +63 -0
  971. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/batch_mat_mul_options.py +45 -0
  972. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/bidirectional_sequence_lstm_options.py +65 -0
  973. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/bidirectional_sequence_rnn_options.py +53 -0
  974. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/bitwise_xor_options.py +23 -0
  975. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/broadcast_to_options.py +25 -0
  976. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/cast_options.py +32 -0
  977. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/concatenation_options.py +38 -0
  978. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/conv_2d_options.py +59 -0
  979. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/conv_3d_options.py +67 -0
  980. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/cum_sum_options.py +30 -0
  981. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/depth_to_space_options.py +29 -0
  982. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/depthwise_conv_2d_options.py +69 -0
  983. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/dequantize_options.py +24 -0
  984. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/div_options.py +43 -0
  985. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/equal_options.py +23 -0
  986. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/exp_options.py +23 -0
  987. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/floor_mod_options.py +23 -0
  988. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/fully_connected_options.py +57 -0
  989. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/gather_nd_options.py +23 -0
  990. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/gather_options.py +30 -0
  991. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/gelu_options.py +27 -0
  992. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/greater_equal_options.py +25 -0
  993. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/greater_options.py +23 -0
  994. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/hard_swish_options.py +23 -0
  995. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/leaky_relu_options.py +32 -0
  996. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/less_equal_options.py +23 -0
  997. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/less_options.py +23 -0
  998. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/log_softmax_options.py +30 -0
  999. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/logical_and_options.py +23 -0
  1000. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/logical_not_options.py +23 -0
  1001. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/logical_or_options.py +23 -0
  1002. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/lrn_options.py +45 -0
  1003. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/lstm_options.py +60 -0
  1004. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/max_pool_2d_options.py +63 -0
  1005. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/maximum_options.py +21 -0
  1006. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/mean_options.py +28 -0
  1007. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/minimum_options.py +21 -0
  1008. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/mirror_pad_options.py +60 -0
  1009. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/mul_options.py +36 -0
  1010. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/multinomial_options.py +30 -0
  1011. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/neg_options.py +23 -0
  1012. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/not_equal_options.py +23 -0
  1013. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/one_hot_options.py +27 -0
  1014. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/pad_options.py +27 -0
  1015. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/pad_v2_options.py +27 -0
  1016. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/pow_options.py +24 -0
  1017. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/quantize_options.py +30 -0
  1018. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/range_options.py +23 -0
  1019. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/reduce_max_options.py +28 -0
  1020. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/reduce_min_options.py +28 -0
  1021. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/reduce_prod_options.py +28 -0
  1022. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/reshape_options.py +53 -0
  1023. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/resize_bilinear_options.py +34 -0
  1024. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/resize_nearest_neighbor_options.py +37 -0
  1025. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/reverse_sequence_options.py +32 -0
  1026. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/scatter_nd_options.py +23 -0
  1027. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/select_v2_options.py +24 -0
  1028. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/shape_options.py +34 -0
  1029. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/sign_options.py +22 -0
  1030. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/slice_options.py +29 -0
  1031. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/softmax_options.py +36 -0
  1032. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/space_to_depth_options.py +29 -0
  1033. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/split_options.py +27 -0
  1034. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/split_v_options.py +27 -0
  1035. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/square_options.py +23 -0
  1036. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/squared_difference_options.py +25 -0
  1037. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/squeeze_options.py +42 -0
  1038. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/strided_slice_options.py +35 -0
  1039. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/sub_options.py +46 -0
  1040. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/sum_options.py +28 -0
  1041. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/tile_options.py +23 -0
  1042. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/transpose_conv_options.py +50 -0
  1043. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/transpose_options.py +30 -0
  1044. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/unidirectional_sequence_lstm_options.py +67 -0
  1045. executorch/backends/nxp/backend/ir/tflite_generator/builtin_options/unidirectional_sequence_rnn_options.py +49 -0
  1046. executorch/backends/nxp/backend/ir/tflite_generator/custom_options/flex_transpose_options.py +78 -0
  1047. executorch/backends/nxp/backend/ir/tflite_generator/meta/__init__.py +0 -0
  1048. executorch/backends/nxp/backend/ir/tflite_generator/meta/meta.py +255 -0
  1049. executorch/backends/nxp/backend/ir/tflite_generator/meta/types.py +198 -0
  1050. executorch/backends/nxp/backend/ir/tflite_generator/tflite_model.py +814 -0
  1051. executorch/backends/nxp/backend/neutron_converter_manager.py +117 -0
  1052. executorch/backends/nxp/backend/neutron_operator_support.py +79 -0
  1053. executorch/backends/nxp/backend/neutron_target_spec.py +143 -0
  1054. executorch/backends/nxp/backend/node_format.py +26 -0
  1055. executorch/backends/nxp/backend/node_format_inference.py +294 -0
  1056. executorch/backends/nxp/edge_passes/move_auxiliary_operator_into_separate_qdq_cluster_pass.py +254 -0
  1057. executorch/backends/nxp/edge_passes/neutron_edge_pass.py +55 -0
  1058. executorch/backends/nxp/edge_passes/neutron_edge_pass_manager.py +29 -0
  1059. executorch/backends/nxp/edge_passes/remove_additional_quantize_dequantize_nodes_pass.py +111 -0
  1060. executorch/backends/nxp/edge_passes/remove_as_strided_copy_nodes.py +66 -0
  1061. executorch/backends/nxp/edge_passes/remove_io_quant_ops_pass.py +79 -0
  1062. executorch/backends/nxp/neutron_node_extraction.py +152 -0
  1063. executorch/backends/nxp/neutron_partitioner.py +421 -0
  1064. executorch/backends/nxp/neutron_pass_manager.py +50 -0
  1065. executorch/backends/nxp/nxp_backend.py +391 -0
  1066. executorch/backends/nxp/quantizer/neutron_quantizer.py +353 -0
  1067. executorch/backends/nxp/quantizer/patterns.py +1089 -0
  1068. executorch/backends/nxp/quantizer/utils.py +195 -0
  1069. executorch/backends/nxp/tests/executorch_pipeline.py +184 -0
  1070. executorch/backends/nxp/tests/executors.py +401 -0
  1071. executorch/backends/nxp/tests/ir/__init__.py +0 -0
  1072. executorch/backends/nxp/tests/ir/converter/__init__.py +0 -0
  1073. executorch/backends/nxp/tests/ir/converter/node_converter/__init__.py +0 -0
  1074. executorch/backends/nxp/tests/ir/converter/node_converter/test_abs_converter.py +91 -0
  1075. executorch/backends/nxp/tests/ir/converter/node_converter/test_adaptive_avg_pool2d_converter.py +148 -0
  1076. executorch/backends/nxp/tests/ir/converter/node_converter/test_add_tensor_converter.py +161 -0
  1077. executorch/backends/nxp/tests/ir/converter/node_converter/test_addmm_converter.py +96 -0
  1078. executorch/backends/nxp/tests/ir/converter/node_converter/test_avg_pool2d_converter.py +221 -0
  1079. executorch/backends/nxp/tests/ir/converter/node_converter/test_cat_converter.py +495 -0
  1080. executorch/backends/nxp/tests/ir/converter/node_converter/test_clone_converter.py +344 -0
  1081. executorch/backends/nxp/tests/ir/converter/node_converter/test_constant_pad_nd_converter.py +188 -0
  1082. executorch/backends/nxp/tests/ir/converter/node_converter/test_conv_converter.py +680 -0
  1083. executorch/backends/nxp/tests/ir/converter/node_converter/test_hardtanh_converter.py +107 -0
  1084. executorch/backends/nxp/tests/ir/converter/node_converter/test_max_pool_2d_converter.py +132 -0
  1085. executorch/backends/nxp/tests/ir/converter/node_converter/test_mean_dim_converter.py +280 -0
  1086. executorch/backends/nxp/tests/ir/converter/node_converter/test_mm_converter.py +96 -0
  1087. executorch/backends/nxp/tests/ir/converter/node_converter/test_mul_tensor_converter.py +212 -0
  1088. executorch/backends/nxp/tests/ir/converter/node_converter/test_permute_copy_converter.py +426 -0
  1089. executorch/backends/nxp/tests/ir/converter/node_converter/test_relu_converter.py +114 -0
  1090. executorch/backends/nxp/tests/ir/converter/node_converter/test_sigmoid_converter.py +78 -0
  1091. executorch/backends/nxp/tests/ir/converter/node_converter/test_slice_tensor_converter.py +244 -0
  1092. executorch/backends/nxp/tests/ir/converter/node_converter/test_softmax_converter.py +115 -0
  1093. executorch/backends/nxp/tests/ir/converter/node_converter/test_sub_tensor_converter.py +181 -0
  1094. executorch/backends/nxp/tests/ir/converter/node_converter/test_tanh_converter.py +90 -0
  1095. executorch/backends/nxp/tests/ir/converter/node_converter/test_view_copy_converter.py +509 -0
  1096. executorch/backends/nxp/tests/ir/edge_passes/__init__.py +0 -0
  1097. executorch/backends/nxp/tests/ir/edge_passes/test_remove_io_quant_ops_pass.py +127 -0
  1098. executorch/backends/nxp/tests/models.py +737 -0
  1099. executorch/backends/nxp/tests/test_batch_norm_fusion.py +233 -0
  1100. executorch/backends/nxp/tests/test_context_sensitive_delegation.py +71 -0
  1101. executorch/backends/nxp/tests/test_convert_unsqueeze_to_view.py +143 -0
  1102. executorch/backends/nxp/tests/test_decompose_split_to_slices.py +315 -0
  1103. executorch/backends/nxp/tests/test_edge_passes.py +382 -0
  1104. executorch/backends/nxp/tests/test_gru_splitting.py +267 -0
  1105. executorch/backends/nxp/tests/test_integration.py +53 -0
  1106. executorch/backends/nxp/tests/test_linear_and_add_fusion.py +653 -0
  1107. executorch/backends/nxp/tests/test_move_activation_before_concatenation.py +905 -0
  1108. executorch/backends/nxp/tests/test_neutron_backend.py +63 -0
  1109. executorch/backends/nxp/tests/test_neutron_backend_executor.py +327 -0
  1110. executorch/backends/nxp/tests/test_neutron_converter_manager.py +59 -0
  1111. executorch/backends/nxp/tests/test_node_format_inference.py +91 -0
  1112. executorch/backends/nxp/tests/test_operator_selector.py +24 -0
  1113. executorch/backends/nxp/tests/test_per_channel_conversion.py +182 -0
  1114. executorch/backends/nxp/tests/test_qdq_clustering_conv.py +31 -0
  1115. executorch/backends/nxp/tests/test_quantizer.py +703 -0
  1116. executorch/backends/nxp/tests/test_removing_dead_code.py +65 -0
  1117. executorch/backends/nxp/tests/test_removing_nodes_with_known_outputs.py +116 -0
  1118. executorch/backends/nxp/tests/test_split_group_convolution.py +291 -0
  1119. executorch/backends/nxp/tests/use_qat.py +11 -0
  1120. executorch/backends/openvino/__init__.py +5 -0
  1121. executorch/backends/openvino/partitioner.py +238 -0
  1122. executorch/backends/openvino/preprocess.py +62 -0
  1123. executorch/backends/openvino/quantizer/__init__.py +3 -0
  1124. executorch/backends/openvino/quantizer/observers.py +186 -0
  1125. executorch/backends/openvino/quantizer/quantizer.py +595 -0
  1126. executorch/backends/openvino/tests/models/test_classification.py +38 -0
  1127. executorch/backends/openvino/tests/ops/base_openvino_op_test.py +86 -0
  1128. executorch/backends/openvino/tests/ops/test_add.py +22 -0
  1129. executorch/backends/openvino/tests/ops/test_addmm.py +28 -0
  1130. executorch/backends/openvino/tests/ops/test_arange.py +23 -0
  1131. executorch/backends/openvino/tests/ops/test_batch_norm.py +61 -0
  1132. executorch/backends/openvino/tests/ops/test_convolution.py +296 -0
  1133. executorch/backends/openvino/tests/ops/test_mean.py +90 -0
  1134. executorch/backends/openvino/tests/ops/test_permute.py +33 -0
  1135. executorch/backends/openvino/tests/ops/test_pooling.py +91 -0
  1136. executorch/backends/openvino/tests/ops/test_unary_ops.py +37 -0
  1137. executorch/backends/openvino/tests/ops/test_view.py +35 -0
  1138. executorch/backends/openvino/tests/test_runner.py +76 -0
  1139. executorch/backends/qualcomm/__init__.py +13 -0
  1140. executorch/backends/qualcomm/_passes/__init__.py +101 -0
  1141. executorch/backends/qualcomm/_passes/annotate_adaptive_avg_pool1d.py +43 -0
  1142. executorch/backends/qualcomm/_passes/annotate_quant_attrs.py +145 -0
  1143. executorch/backends/qualcomm/_passes/annotate_stack.py +44 -0
  1144. executorch/backends/qualcomm/_passes/annotate_unbind.py +42 -0
  1145. executorch/backends/qualcomm/_passes/build_quant_io.py +49 -0
  1146. executorch/backends/qualcomm/_passes/canonicalize_conv.py +204 -0
  1147. executorch/backends/qualcomm/_passes/convert_bmm_to_matmul.py +83 -0
  1148. executorch/backends/qualcomm/_passes/convert_linear_to_conv2d.py +232 -0
  1149. executorch/backends/qualcomm/_passes/convert_mha_to_sha.py +626 -0
  1150. executorch/backends/qualcomm/_passes/convert_square_to_pow.py +38 -0
  1151. executorch/backends/qualcomm/_passes/decompose_any.py +64 -0
  1152. executorch/backends/qualcomm/_passes/decompose_binary_alpha.py +61 -0
  1153. executorch/backends/qualcomm/_passes/decompose_cdist.py +69 -0
  1154. executorch/backends/qualcomm/_passes/decompose_col_im.py +121 -0
  1155. executorch/backends/qualcomm/_passes/decompose_einsum.py +51 -0
  1156. executorch/backends/qualcomm/_passes/decompose_expm1.py +46 -0
  1157. executorch/backends/qualcomm/_passes/decompose_floor_divide.py +62 -0
  1158. executorch/backends/qualcomm/_passes/decompose_glu.py +55 -0
  1159. executorch/backends/qualcomm/_passes/decompose_linalg_vector_norm.py +75 -0
  1160. executorch/backends/qualcomm/_passes/decompose_maxpool3d.py +133 -0
  1161. executorch/backends/qualcomm/_passes/decompose_minmaxdim.py +109 -0
  1162. executorch/backends/qualcomm/_passes/decompose_roll.py +78 -0
  1163. executorch/backends/qualcomm/_passes/decompose_silu.py +45 -0
  1164. executorch/backends/qualcomm/_passes/decompose_threshold.py +61 -0
  1165. executorch/backends/qualcomm/_passes/decompose_triu.py +71 -0
  1166. executorch/backends/qualcomm/_passes/decompose_wrap_with_autocast.py +79 -0
  1167. executorch/backends/qualcomm/_passes/expand_broadcast_tensor_shape.py +67 -0
  1168. executorch/backends/qualcomm/_passes/fixed_linear_keep_dim.py +95 -0
  1169. executorch/backends/qualcomm/_passes/fold_qdq.py +80 -0
  1170. executorch/backends/qualcomm/_passes/fuse_consecutive_cast.py +116 -0
  1171. executorch/backends/qualcomm/_passes/fuse_consecutive_transpose.py +109 -0
  1172. executorch/backends/qualcomm/_passes/i64_to_i32.py +184 -0
  1173. executorch/backends/qualcomm/_passes/insert_io_qdq.py +154 -0
  1174. executorch/backends/qualcomm/_passes/insert_requantize.py +111 -0
  1175. executorch/backends/qualcomm/_passes/insert_reshape_for_reduce_ops.py +59 -0
  1176. executorch/backends/qualcomm/_passes/layout_transform.py +355 -0
  1177. executorch/backends/qualcomm/_passes/lift_constant_scalar_operands.py +186 -0
  1178. executorch/backends/qualcomm/_passes/qnn_pass_manager.py +271 -0
  1179. executorch/backends/qualcomm/_passes/recompose_pad_maxpool2d.py +147 -0
  1180. executorch/backends/qualcomm/_passes/recompose_pixel_unshuffle.py +81 -0
  1181. executorch/backends/qualcomm/_passes/recompose_rms_norm.py +155 -0
  1182. executorch/backends/qualcomm/_passes/reduce_dynamic_range.py +60 -0
  1183. executorch/backends/qualcomm/_passes/remove_0d_tensor.py +36 -0
  1184. executorch/backends/qualcomm/_passes/remove_redundancy.py +73 -0
  1185. executorch/backends/qualcomm/_passes/replace_arange_args.py +48 -0
  1186. executorch/backends/qualcomm/_passes/replace_inf_values.py +60 -0
  1187. executorch/backends/qualcomm/_passes/seq_mse.py +224 -0
  1188. executorch/backends/qualcomm/_passes/tag_quant_io.py +45 -0
  1189. executorch/backends/qualcomm/_passes/utils.py +283 -0
  1190. executorch/backends/qualcomm/builders/__init__.py +221 -0
  1191. executorch/backends/qualcomm/builders/node_visitor.py +518 -0
  1192. executorch/backends/qualcomm/builders/node_visitor_manager.py +79 -0
  1193. executorch/backends/qualcomm/builders/op_abs.py +57 -0
  1194. executorch/backends/qualcomm/builders/op_adaptive_avg_pool2d.py +126 -0
  1195. executorch/backends/qualcomm/builders/op_adaptive_max_pool2d.py +151 -0
  1196. executorch/backends/qualcomm/builders/op_add.py +62 -0
  1197. executorch/backends/qualcomm/builders/op_amax.py +90 -0
  1198. executorch/backends/qualcomm/builders/op_amin.py +90 -0
  1199. executorch/backends/qualcomm/builders/op_and.py +60 -0
  1200. executorch/backends/qualcomm/builders/op_arange.py +41 -0
  1201. executorch/backends/qualcomm/builders/op_argmax.py +78 -0
  1202. executorch/backends/qualcomm/builders/op_argmin.py +78 -0
  1203. executorch/backends/qualcomm/builders/op_asin.py +56 -0
  1204. executorch/backends/qualcomm/builders/op_atan.py +55 -0
  1205. executorch/backends/qualcomm/builders/op_avg_pool2d.py +168 -0
  1206. executorch/backends/qualcomm/builders/op_avg_pool3d.py +299 -0
  1207. executorch/backends/qualcomm/builders/op_batch_norm.py +151 -0
  1208. executorch/backends/qualcomm/builders/op_binary.py +84 -0
  1209. executorch/backends/qualcomm/builders/op_bmm.py +59 -0
  1210. executorch/backends/qualcomm/builders/op_cat.py +89 -0
  1211. executorch/backends/qualcomm/builders/op_ceil.py +56 -0
  1212. executorch/backends/qualcomm/builders/op_clamp.py +80 -0
  1213. executorch/backends/qualcomm/builders/op_conv.py +263 -0
  1214. executorch/backends/qualcomm/builders/op_copy.py +112 -0
  1215. executorch/backends/qualcomm/builders/op_cos.py +56 -0
  1216. executorch/backends/qualcomm/builders/op_cum_sum.py +87 -0
  1217. executorch/backends/qualcomm/builders/op_custom_op.py +93 -0
  1218. executorch/backends/qualcomm/builders/op_depth_to_space.py +78 -0
  1219. executorch/backends/qualcomm/builders/op_dequantize.py +72 -0
  1220. executorch/backends/qualcomm/builders/op_div.py +62 -0
  1221. executorch/backends/qualcomm/builders/op_elu.py +68 -0
  1222. executorch/backends/qualcomm/builders/op_embedding.py +79 -0
  1223. executorch/backends/qualcomm/builders/op_eq.py +62 -0
  1224. executorch/backends/qualcomm/builders/op_exp.py +60 -0
  1225. executorch/backends/qualcomm/builders/op_expand.py +84 -0
  1226. executorch/backends/qualcomm/builders/op_flip.py +81 -0
  1227. executorch/backends/qualcomm/builders/op_floor.py +56 -0
  1228. executorch/backends/qualcomm/builders/op_full.py +41 -0
  1229. executorch/backends/qualcomm/builders/op_full_like.py +41 -0
  1230. executorch/backends/qualcomm/builders/op_gather.py +76 -0
  1231. executorch/backends/qualcomm/builders/op_ge.py +62 -0
  1232. executorch/backends/qualcomm/builders/op_gelu.py +57 -0
  1233. executorch/backends/qualcomm/builders/op_grid_sampler_2d.py +162 -0
  1234. executorch/backends/qualcomm/builders/op_group_norm.py +94 -0
  1235. executorch/backends/qualcomm/builders/op_gt.py +62 -0
  1236. executorch/backends/qualcomm/builders/op_hardsigmoid.py +78 -0
  1237. executorch/backends/qualcomm/builders/op_hardswish.py +57 -0
  1238. executorch/backends/qualcomm/builders/op_hardtanh.py +79 -0
  1239. executorch/backends/qualcomm/builders/op_index.py +85 -0
  1240. executorch/backends/qualcomm/builders/op_index_put.py +481 -0
  1241. executorch/backends/qualcomm/builders/op_index_select.py +81 -0
  1242. executorch/backends/qualcomm/builders/op_instance_norm.py +112 -0
  1243. executorch/backends/qualcomm/builders/op_layer_norm.py +113 -0
  1244. executorch/backends/qualcomm/builders/op_le.py +62 -0
  1245. executorch/backends/qualcomm/builders/op_linear.py +98 -0
  1246. executorch/backends/qualcomm/builders/op_log.py +58 -0
  1247. executorch/backends/qualcomm/builders/op_log_softmax.py +81 -0
  1248. executorch/backends/qualcomm/builders/op_logical_not.py +56 -0
  1249. executorch/backends/qualcomm/builders/op_lt.py +62 -0
  1250. executorch/backends/qualcomm/builders/op_matmul.py +59 -0
  1251. executorch/backends/qualcomm/builders/op_max.py +62 -0
  1252. executorch/backends/qualcomm/builders/op_max_dim.py +89 -0
  1253. executorch/backends/qualcomm/builders/op_max_pool2d.py +145 -0
  1254. executorch/backends/qualcomm/builders/op_mean_dim.py +100 -0
  1255. executorch/backends/qualcomm/builders/op_min.py +62 -0
  1256. executorch/backends/qualcomm/builders/op_min_dim.py +89 -0
  1257. executorch/backends/qualcomm/builders/op_mul.py +62 -0
  1258. executorch/backends/qualcomm/builders/op_ne.py +62 -0
  1259. executorch/backends/qualcomm/builders/op_neg.py +54 -0
  1260. executorch/backends/qualcomm/builders/op_or.py +60 -0
  1261. executorch/backends/qualcomm/builders/op_pad.py +97 -0
  1262. executorch/backends/qualcomm/builders/op_pow.py +75 -0
  1263. executorch/backends/qualcomm/builders/op_prelu.py +81 -0
  1264. executorch/backends/qualcomm/builders/op_quantize.py +73 -0
  1265. executorch/backends/qualcomm/builders/op_relu.py +58 -0
  1266. executorch/backends/qualcomm/builders/op_repeat.py +68 -0
  1267. executorch/backends/qualcomm/builders/op_reshape.py +55 -0
  1268. executorch/backends/qualcomm/builders/op_resize.py +85 -0
  1269. executorch/backends/qualcomm/builders/op_rms_norm.py +132 -0
  1270. executorch/backends/qualcomm/builders/op_round.py +58 -0
  1271. executorch/backends/qualcomm/builders/op_rsqrt.py +58 -0
  1272. executorch/backends/qualcomm/builders/op_scalar_tensor.py +51 -0
  1273. executorch/backends/qualcomm/builders/op_select_copy.py +89 -0
  1274. executorch/backends/qualcomm/builders/op_sigmoid.py +58 -0
  1275. executorch/backends/qualcomm/builders/op_sign.py +56 -0
  1276. executorch/backends/qualcomm/builders/op_sin.py +56 -0
  1277. executorch/backends/qualcomm/builders/op_skip_ops.py +55 -0
  1278. executorch/backends/qualcomm/builders/op_slice_copy.py +95 -0
  1279. executorch/backends/qualcomm/builders/op_slice_scatter.py +122 -0
  1280. executorch/backends/qualcomm/builders/op_softmax.py +79 -0
  1281. executorch/backends/qualcomm/builders/op_space_to_depth.py +78 -0
  1282. executorch/backends/qualcomm/builders/op_split_with_sizes.py +99 -0
  1283. executorch/backends/qualcomm/builders/op_sqrt.py +60 -0
  1284. executorch/backends/qualcomm/builders/op_squeeze.py +57 -0
  1285. executorch/backends/qualcomm/builders/op_stack.py +71 -0
  1286. executorch/backends/qualcomm/builders/op_sub.py +62 -0
  1287. executorch/backends/qualcomm/builders/op_sum_int_list.py +84 -0
  1288. executorch/backends/qualcomm/builders/op_tanh.py +57 -0
  1289. executorch/backends/qualcomm/builders/op_to.py +149 -0
  1290. executorch/backends/qualcomm/builders/op_topk.py +112 -0
  1291. executorch/backends/qualcomm/builders/op_transpose.py +76 -0
  1292. executorch/backends/qualcomm/builders/op_unbind.py +73 -0
  1293. executorch/backends/qualcomm/builders/op_unsqueeze.py +57 -0
  1294. executorch/backends/qualcomm/builders/op_upsample_bilinear2d.py +68 -0
  1295. executorch/backends/qualcomm/builders/op_upsample_nearest2d.py +68 -0
  1296. executorch/backends/qualcomm/builders/op_where.py +82 -0
  1297. executorch/backends/qualcomm/builders/op_xor.py +60 -0
  1298. executorch/backends/qualcomm/builders/qnn_constants.py +630 -0
  1299. executorch/backends/qualcomm/builders/utils.py +160 -0
  1300. executorch/backends/qualcomm/debugger/format_outputs.py +221 -0
  1301. executorch/backends/qualcomm/debugger/metrics_evaluator.py +90 -0
  1302. executorch/backends/qualcomm/debugger/qnn_intermediate_debugger.py +328 -0
  1303. executorch/backends/qualcomm/debugger/utils.py +435 -0
  1304. executorch/backends/qualcomm/partition/common_defs.py +44 -0
  1305. executorch/backends/qualcomm/partition/qnn_partitioner.py +225 -0
  1306. executorch/backends/qualcomm/partition/utils.py +75 -0
  1307. executorch/backends/qualcomm/qnn_preprocess.py +218 -0
  1308. executorch/backends/qualcomm/quantizer/annotators.py +1501 -0
  1309. executorch/backends/qualcomm/quantizer/custom_annotation.py +499 -0
  1310. executorch/backends/qualcomm/quantizer/observers/concat_observer.py +74 -0
  1311. executorch/backends/qualcomm/quantizer/observers/per_block_param_observer.py +145 -0
  1312. executorch/backends/qualcomm/quantizer/observers/per_channel_param_observer.py +113 -0
  1313. executorch/backends/qualcomm/quantizer/qconfig.py +802 -0
  1314. executorch/backends/qualcomm/quantizer/quant_recipe.py +402 -0
  1315. executorch/backends/qualcomm/quantizer/quantizer.py +507 -0
  1316. executorch/backends/qualcomm/recipes/__init__.py +16 -0
  1317. executorch/backends/qualcomm/recipes/qnn_recipe_provider.py +179 -0
  1318. executorch/backends/qualcomm/recipes/qnn_recipe_types.py +28 -0
  1319. executorch/backends/qualcomm/scripts/download_qnn_sdk.py +642 -0
  1320. executorch/backends/qualcomm/serialization/qc_compiler_spec.fbs +299 -0
  1321. executorch/backends/qualcomm/serialization/qc_schema.py +240 -0
  1322. executorch/backends/qualcomm/serialization/qc_schema_serialize.py +59 -0
  1323. executorch/backends/qualcomm/tests/models.py +2393 -0
  1324. executorch/backends/qualcomm/tests/test_passes.py +154 -0
  1325. executorch/backends/qualcomm/tests/test_qnn_delegate.py +8454 -0
  1326. executorch/backends/qualcomm/tests/tester.py +113 -0
  1327. executorch/backends/qualcomm/tests/utils.py +770 -0
  1328. executorch/backends/qualcomm/utils/constants.py +49 -0
  1329. executorch/backends/qualcomm/utils/qnn_manager_lifecycle.py +88 -0
  1330. executorch/backends/qualcomm/utils/utils.py +1302 -0
  1331. executorch/backends/samsung/_passes/annotate_qparams.py +201 -0
  1332. executorch/backends/samsung/_passes/annotate_scalar_parameters.py +65 -0
  1333. executorch/backends/samsung/_passes/conv1d_to_conv2d.py +97 -0
  1334. executorch/backends/samsung/_passes/customized_constant_prop.py +40 -0
  1335. executorch/backends/samsung/_passes/fold_qdq.py +36 -0
  1336. executorch/backends/samsung/_passes/fuse_conv_act.py +77 -0
  1337. executorch/backends/samsung/_passes/insert_qdq.py +164 -0
  1338. executorch/backends/samsung/_passes/remove_useless_ops.py +87 -0
  1339. executorch/backends/samsung/_passes/replace_scalar_ops.py +46 -0
  1340. executorch/backends/samsung/_passes/utils.py +15 -0
  1341. executorch/backends/samsung/builders/__init__.py +97 -0
  1342. executorch/backends/samsung/builders/node_visitor.py +116 -0
  1343. executorch/backends/samsung/builders/op_add.py +41 -0
  1344. executorch/backends/samsung/builders/op_avg_pool2d.py +70 -0
  1345. executorch/backends/samsung/builders/op_batch_norm.py +56 -0
  1346. executorch/backends/samsung/builders/op_bmm.py +43 -0
  1347. executorch/backends/samsung/builders/op_cat.py +50 -0
  1348. executorch/backends/samsung/builders/op_clamp.py +47 -0
  1349. executorch/backends/samsung/builders/op_constant_pad_nd.py +56 -0
  1350. executorch/backends/samsung/builders/op_conv2d.py +89 -0
  1351. executorch/backends/samsung/builders/op_dequantize.py +19 -0
  1352. executorch/backends/samsung/builders/op_div.py +42 -0
  1353. executorch/backends/samsung/builders/op_embedding.py +41 -0
  1354. executorch/backends/samsung/builders/op_expand_copy.py +77 -0
  1355. executorch/backends/samsung/builders/op_gelu.py +40 -0
  1356. executorch/backends/samsung/builders/op_getitem.py +32 -0
  1357. executorch/backends/samsung/builders/op_hardsigmoid.py +35 -0
  1358. executorch/backends/samsung/builders/op_hardswish.py +35 -0
  1359. executorch/backends/samsung/builders/op_hardtanh.py +42 -0
  1360. executorch/backends/samsung/builders/op_layer_norm.py +53 -0
  1361. executorch/backends/samsung/builders/op_leaky_relu.py +58 -0
  1362. executorch/backends/samsung/builders/op_linear.py +51 -0
  1363. executorch/backends/samsung/builders/op_log_softmax.py +39 -0
  1364. executorch/backends/samsung/builders/op_max_pool2d.py +96 -0
  1365. executorch/backends/samsung/builders/op_maximum.py +37 -0
  1366. executorch/backends/samsung/builders/op_mean_dim.py +49 -0
  1367. executorch/backends/samsung/builders/op_minimum.py +39 -0
  1368. executorch/backends/samsung/builders/op_mul.py +43 -0
  1369. executorch/backends/samsung/builders/op_permute.py +37 -0
  1370. executorch/backends/samsung/builders/op_pixel_shuffle.py +38 -0
  1371. executorch/backends/samsung/builders/op_quantize.py +60 -0
  1372. executorch/backends/samsung/builders/op_relu.py +37 -0
  1373. executorch/backends/samsung/builders/op_reshape.py +34 -0
  1374. executorch/backends/samsung/builders/op_rsqrt.py +35 -0
  1375. executorch/backends/samsung/builders/op_select.py +52 -0
  1376. executorch/backends/samsung/builders/op_slice_copy.py +59 -0
  1377. executorch/backends/samsung/builders/op_softmax.py +39 -0
  1378. executorch/backends/samsung/builders/op_sqrt.py +35 -0
  1379. executorch/backends/samsung/builders/op_squeeze.py +37 -0
  1380. executorch/backends/samsung/builders/op_sub.py +39 -0
  1381. executorch/backends/samsung/builders/op_to_copy.py +44 -0
  1382. executorch/backends/samsung/builders/op_unsqueeze.py +35 -0
  1383. executorch/backends/samsung/builders/op_upsample_bilinear2d.py +53 -0
  1384. executorch/backends/samsung/builders/op_upsample_nearest2d.py +52 -0
  1385. executorch/backends/samsung/builders/utils.py +64 -0
  1386. executorch/backends/samsung/enn_preprocess.py +110 -0
  1387. executorch/backends/samsung/partition/enn_partitioner.py +134 -0
  1388. executorch/backends/samsung/quantizer/__init__.py +10 -0
  1389. executorch/backends/samsung/quantizer/annotator.py +871 -0
  1390. executorch/backends/samsung/quantizer/qconfig.py +174 -0
  1391. executorch/backends/samsung/quantizer/quantizer.py +65 -0
  1392. executorch/backends/samsung/serialization/compile_options.py +77 -0
  1393. executorch/backends/samsung/serialization/compile_options_def.fbs +23 -0
  1394. executorch/backends/samsung/serialization/enn_graph_schema.py +141 -0
  1395. executorch/backends/samsung/test/models/test_deeplab_v3.py +28 -0
  1396. executorch/backends/samsung/test/models/test_edsr.py +30 -0
  1397. executorch/backends/samsung/test/models/test_inception_v3.py +30 -0
  1398. executorch/backends/samsung/test/models/test_inception_v4.py +30 -0
  1399. executorch/backends/samsung/test/models/test_mobilenet_v2.py +28 -0
  1400. executorch/backends/samsung/test/models/test_mobilenet_v3.py +33 -0
  1401. executorch/backends/samsung/test/models/test_resnet18.py +30 -0
  1402. executorch/backends/samsung/test/models/test_resnet50.py +30 -0
  1403. executorch/backends/samsung/test/models/test_torchvision_vit.py +32 -0
  1404. executorch/backends/samsung/test/models/test_wav2letter.py +28 -0
  1405. executorch/backends/samsung/test/ops/test_add.py +63 -0
  1406. executorch/backends/samsung/test/ops/test_avg_pool2d.py +66 -0
  1407. executorch/backends/samsung/test/ops/test_batch_norm.py +52 -0
  1408. executorch/backends/samsung/test/ops/test_bmm.py +50 -0
  1409. executorch/backends/samsung/test/ops/test_cat.py +49 -0
  1410. executorch/backends/samsung/test/ops/test_clamp.py +50 -0
  1411. executorch/backends/samsung/test/ops/test_constant_pad_nd.py +46 -0
  1412. executorch/backends/samsung/test/ops/test_conv2d.py +95 -0
  1413. executorch/backends/samsung/test/ops/test_div.py +50 -0
  1414. executorch/backends/samsung/test/ops/test_embedding.py +46 -0
  1415. executorch/backends/samsung/test/ops/test_expand_copy.py +46 -0
  1416. executorch/backends/samsung/test/ops/test_gelu.py +65 -0
  1417. executorch/backends/samsung/test/ops/test_leaky_relu.py +47 -0
  1418. executorch/backends/samsung/test/ops/test_linear.py +48 -0
  1419. executorch/backends/samsung/test/ops/test_log_softmax.py +46 -0
  1420. executorch/backends/samsung/test/ops/test_max_pool2d.py +72 -0
  1421. executorch/backends/samsung/test/ops/test_mean_dim.py +51 -0
  1422. executorch/backends/samsung/test/ops/test_minimum.py +45 -0
  1423. executorch/backends/samsung/test/ops/test_mul.py +63 -0
  1424. executorch/backends/samsung/test/ops/test_permute.py +55 -0
  1425. executorch/backends/samsung/test/ops/test_pixel_shuffle.py +49 -0
  1426. executorch/backends/samsung/test/ops/test_relu.py +65 -0
  1427. executorch/backends/samsung/test/ops/test_reshape.py +46 -0
  1428. executorch/backends/samsung/test/ops/test_rsqrt.py +46 -0
  1429. executorch/backends/samsung/test/ops/test_select.py +52 -0
  1430. executorch/backends/samsung/test/ops/test_slice_copy.py +46 -0
  1431. executorch/backends/samsung/test/ops/test_softmax.py +46 -0
  1432. executorch/backends/samsung/test/ops/test_sqrt.py +46 -0
  1433. executorch/backends/samsung/test/ops/test_squeeze.py +47 -0
  1434. executorch/backends/samsung/test/ops/test_sub.py +63 -0
  1435. executorch/backends/samsung/test/ops/test_to_copy.py +49 -0
  1436. executorch/backends/samsung/test/ops/test_unsqueeze.py +47 -0
  1437. executorch/backends/samsung/test/ops/test_upsample_bilinear2d.py +54 -0
  1438. executorch/backends/samsung/test/ops/test_upsample_nearest2d.py +53 -0
  1439. executorch/backends/samsung/test/tester/__init__.py +11 -0
  1440. executorch/backends/samsung/test/tester/samsung_tester.py +125 -0
  1441. executorch/backends/samsung/test/utils/__init__.py +11 -0
  1442. executorch/backends/samsung/test/utils/runtime_executor.py +186 -0
  1443. executorch/backends/samsung/utils/constants.py +45 -0
  1444. executorch/backends/samsung/utils/export_utils.py +93 -0
  1445. executorch/backends/samsung/utils/utils.py +125 -0
  1446. executorch/backends/test/facto/__init__.py +0 -0
  1447. executorch/backends/test/facto/facto_specs.py +59 -0
  1448. executorch/backends/test/facto/test_facto.py +301 -0
  1449. executorch/backends/test/harness/__init__.py +3 -0
  1450. executorch/backends/test/harness/error_statistics.py +99 -0
  1451. executorch/backends/test/harness/stages/__init__.py +23 -0
  1452. executorch/backends/test/harness/stages/export.py +32 -0
  1453. executorch/backends/test/harness/stages/partition.py +26 -0
  1454. executorch/backends/test/harness/stages/quantize.py +128 -0
  1455. executorch/backends/test/harness/stages/run_passes.py +66 -0
  1456. executorch/backends/test/harness/stages/serialize.py +59 -0
  1457. executorch/backends/test/harness/stages/stage.py +91 -0
  1458. executorch/backends/test/harness/stages/to_edge.py +27 -0
  1459. executorch/backends/test/harness/stages/to_edge_transform_and_lower.py +50 -0
  1460. executorch/backends/test/harness/stages/to_executorch.py +54 -0
  1461. executorch/backends/test/harness/tester.py +478 -0
  1462. executorch/backends/test/harness/tests/test_error_statistics.py +67 -0
  1463. executorch/backends/test/suite/__init__.py +74 -0
  1464. executorch/backends/test/suite/conftest.py +182 -0
  1465. executorch/backends/test/suite/context.py +34 -0
  1466. executorch/backends/test/suite/discovery.py +100 -0
  1467. executorch/backends/test/suite/flow.py +150 -0
  1468. executorch/backends/test/suite/flows/__init__.py +7 -0
  1469. executorch/backends/test/suite/flows/arm.py +92 -0
  1470. executorch/backends/test/suite/flows/coreml.py +31 -0
  1471. executorch/backends/test/suite/flows/portable.py +19 -0
  1472. executorch/backends/test/suite/flows/qualcomm.py +61 -0
  1473. executorch/backends/test/suite/flows/vulkan.py +44 -0
  1474. executorch/backends/test/suite/flows/xnnpack.py +79 -0
  1475. executorch/backends/test/suite/generate_markdown_summary.py +249 -0
  1476. executorch/backends/test/suite/generate_markdown_summary_json.py +229 -0
  1477. executorch/backends/test/suite/models/__init__.py +7 -0
  1478. executorch/backends/test/suite/models/test_torchaudio.py +110 -0
  1479. executorch/backends/test/suite/models/test_torchvision.py +194 -0
  1480. executorch/backends/test/suite/operators/__init__.py +108 -0
  1481. executorch/backends/test/suite/operators/test_abs.py +60 -0
  1482. executorch/backends/test/suite/operators/test_adaptive_avgpool1d.py +102 -0
  1483. executorch/backends/test/suite/operators/test_adaptive_avgpool2d.py +112 -0
  1484. executorch/backends/test/suite/operators/test_adaptive_avgpool3d.py +112 -0
  1485. executorch/backends/test/suite/operators/test_adaptive_maxpool1d.py +125 -0
  1486. executorch/backends/test/suite/operators/test_adaptive_maxpool2d.py +135 -0
  1487. executorch/backends/test/suite/operators/test_adaptive_maxpool3d.py +135 -0
  1488. executorch/backends/test/suite/operators/test_add.py +76 -0
  1489. executorch/backends/test/suite/operators/test_amax.py +257 -0
  1490. executorch/backends/test/suite/operators/test_amin.py +259 -0
  1491. executorch/backends/test/suite/operators/test_argmax.py +201 -0
  1492. executorch/backends/test/suite/operators/test_argmin.py +201 -0
  1493. executorch/backends/test/suite/operators/test_avgpool1d.py +155 -0
  1494. executorch/backends/test/suite/operators/test_avgpool2d.py +168 -0
  1495. executorch/backends/test/suite/operators/test_avgpool3d.py +163 -0
  1496. executorch/backends/test/suite/operators/test_cat.py +176 -0
  1497. executorch/backends/test/suite/operators/test_ceil.py +60 -0
  1498. executorch/backends/test/suite/operators/test_clamp.py +86 -0
  1499. executorch/backends/test/suite/operators/test_conv1d.py +144 -0
  1500. executorch/backends/test/suite/operators/test_conv2d.py +167 -0
  1501. executorch/backends/test/suite/operators/test_conv3d.py +162 -0
  1502. executorch/backends/test/suite/operators/test_convtranspose1d.py +144 -0
  1503. executorch/backends/test/suite/operators/test_convtranspose2d.py +171 -0
  1504. executorch/backends/test/suite/operators/test_convtranspose3d.py +166 -0
  1505. executorch/backends/test/suite/operators/test_div.py +110 -0
  1506. executorch/backends/test/suite/operators/test_elu.py +49 -0
  1507. executorch/backends/test/suite/operators/test_embedding.py +89 -0
  1508. executorch/backends/test/suite/operators/test_embedding_bag.py +118 -0
  1509. executorch/backends/test/suite/operators/test_exp.py +65 -0
  1510. executorch/backends/test/suite/operators/test_expand.py +122 -0
  1511. executorch/backends/test/suite/operators/test_floor.py +57 -0
  1512. executorch/backends/test/suite/operators/test_floor_divide.py +216 -0
  1513. executorch/backends/test/suite/operators/test_gelu.py +52 -0
  1514. executorch/backends/test/suite/operators/test_glu.py +52 -0
  1515. executorch/backends/test/suite/operators/test_hardsigmoid.py +50 -0
  1516. executorch/backends/test/suite/operators/test_hardswish.py +50 -0
  1517. executorch/backends/test/suite/operators/test_hardtanh.py +57 -0
  1518. executorch/backends/test/suite/operators/test_index_put.py +455 -0
  1519. executorch/backends/test/suite/operators/test_index_select.py +128 -0
  1520. executorch/backends/test/suite/operators/test_leaky_relu.py +56 -0
  1521. executorch/backends/test/suite/operators/test_linear.py +124 -0
  1522. executorch/backends/test/suite/operators/test_log.py +80 -0
  1523. executorch/backends/test/suite/operators/test_log10.py +60 -0
  1524. executorch/backends/test/suite/operators/test_log1p.py +60 -0
  1525. executorch/backends/test/suite/operators/test_log2.py +60 -0
  1526. executorch/backends/test/suite/operators/test_logsigmoid.py +40 -0
  1527. executorch/backends/test/suite/operators/test_lstm.py +247 -0
  1528. executorch/backends/test/suite/operators/test_masked_fill.py +101 -0
  1529. executorch/backends/test/suite/operators/test_maxpool1d.py +185 -0
  1530. executorch/backends/test/suite/operators/test_maxpool2d.py +191 -0
  1531. executorch/backends/test/suite/operators/test_maxpool3d.py +189 -0
  1532. executorch/backends/test/suite/operators/test_mean.py +305 -0
  1533. executorch/backends/test/suite/operators/test_median.py +188 -0
  1534. executorch/backends/test/suite/operators/test_mul.py +66 -0
  1535. executorch/backends/test/suite/operators/test_neg.py +70 -0
  1536. executorch/backends/test/suite/operators/test_permute.py +109 -0
  1537. executorch/backends/test/suite/operators/test_pow.py +149 -0
  1538. executorch/backends/test/suite/operators/test_prelu.py +55 -0
  1539. executorch/backends/test/suite/operators/test_relu.py +45 -0
  1540. executorch/backends/test/suite/operators/test_reshape.py +82 -0
  1541. executorch/backends/test/suite/operators/test_round.py +129 -0
  1542. executorch/backends/test/suite/operators/test_rsqrt.py +76 -0
  1543. executorch/backends/test/suite/operators/test_select.py +89 -0
  1544. executorch/backends/test/suite/operators/test_sigmoid.py +40 -0
  1545. executorch/backends/test/suite/operators/test_silu.py +50 -0
  1546. executorch/backends/test/suite/operators/test_slice.py +146 -0
  1547. executorch/backends/test/suite/operators/test_split.py +119 -0
  1548. executorch/backends/test/suite/operators/test_sqrt.py +71 -0
  1549. executorch/backends/test/suite/operators/test_square.py +67 -0
  1550. executorch/backends/test/suite/operators/test_squeeze.py +86 -0
  1551. executorch/backends/test/suite/operators/test_stack.py +114 -0
  1552. executorch/backends/test/suite/operators/test_sub.py +84 -0
  1553. executorch/backends/test/suite/operators/test_tanh.py +40 -0
  1554. executorch/backends/test/suite/operators/test_threshold.py +71 -0
  1555. executorch/backends/test/suite/operators/test_transpose.py +143 -0
  1556. executorch/backends/test/suite/operators/test_trunc.py +73 -0
  1557. executorch/backends/test/suite/operators/test_unsqueeze.py +110 -0
  1558. executorch/backends/test/suite/operators/test_upsample_bilinear2d.py +273 -0
  1559. executorch/backends/test/suite/operators/test_upsample_nearest2d.py +137 -0
  1560. executorch/backends/test/suite/operators/test_view.py +82 -0
  1561. executorch/backends/test/suite/reporting.py +421 -0
  1562. executorch/backends/test/suite/runner.py +328 -0
  1563. executorch/backends/test/suite/tests/__init__.py +0 -0
  1564. executorch/backends/test/suite/tests/test_reporting.py +144 -0
  1565. executorch/backends/transforms/__init__.py +12 -0
  1566. executorch/backends/transforms/addmm_mm_to_linear.py +170 -0
  1567. executorch/backends/transforms/convert_dtype_pass.py +103 -0
  1568. executorch/backends/transforms/decompose_sdpa.py +120 -0
  1569. executorch/backends/transforms/duplicate_dynamic_quant_chain.py +195 -0
  1570. executorch/backends/transforms/fuse_batch_norm_with_conv.py +161 -0
  1571. executorch/backends/transforms/fuse_conv_with_clamp.py +77 -0
  1572. executorch/backends/transforms/fuse_view_copy.py +116 -0
  1573. executorch/backends/transforms/mean_to_sum_div.py +41 -0
  1574. executorch/backends/transforms/rank_0_to_rank_1.py +18 -0
  1575. executorch/backends/transforms/remove_clone_ops.py +109 -0
  1576. executorch/backends/transforms/remove_getitem_op.py +109 -0
  1577. executorch/backends/transforms/replace_scalar_with_tensor.py +93 -0
  1578. executorch/backends/transforms/test/test_create_delete_constant_placeholder.py +122 -0
  1579. executorch/backends/transforms/test/test_create_mutable_buffer.py +503 -0
  1580. executorch/backends/transforms/test/test_duplicate_dynamic_quant_chain.py +184 -0
  1581. executorch/backends/transforms/test/test_rank_0_to_rank_1.py +32 -0
  1582. executorch/backends/transforms/test/test_remove_clone_ops.py +197 -0
  1583. executorch/backends/transforms/utils.py +377 -0
  1584. executorch/backends/transforms/view_copy_to_squeeze_unsqueeze.py +135 -0
  1585. executorch/backends/vulkan/__init__.py +14 -0
  1586. executorch/backends/vulkan/_passes/__init__.py +37 -0
  1587. executorch/backends/vulkan/_passes/fold_qdq.py +40 -0
  1588. executorch/backends/vulkan/_passes/fuse_patterns.py +34 -0
  1589. executorch/backends/vulkan/_passes/fuse_quantized_ops.py +236 -0
  1590. executorch/backends/vulkan/_passes/insert_prepack_nodes.py +83 -0
  1591. executorch/backends/vulkan/_passes/remove_asserts.py +52 -0
  1592. executorch/backends/vulkan/_passes/remove_redundant_ops.py +72 -0
  1593. executorch/backends/vulkan/_passes/squeeze_unsqueeze_inputs.py +93 -0
  1594. executorch/backends/vulkan/_passes/tag_memory_meta_pass.py +485 -0
  1595. executorch/backends/vulkan/custom_ops_lib.py +597 -0
  1596. executorch/backends/vulkan/op_registry.py +885 -0
  1597. executorch/backends/vulkan/partitioner/vulkan_partitioner.py +401 -0
  1598. executorch/backends/vulkan/patterns/__init__.py +139 -0
  1599. executorch/backends/vulkan/patterns/pattern_registry.py +116 -0
  1600. executorch/backends/vulkan/patterns/quantized_binary.py +161 -0
  1601. executorch/backends/vulkan/patterns/quantized_convolution.py +260 -0
  1602. executorch/backends/vulkan/patterns/quantized_linear.py +500 -0
  1603. executorch/backends/vulkan/patterns/rope.py +173 -0
  1604. executorch/backends/vulkan/patterns/sdpa.py +155 -0
  1605. executorch/backends/vulkan/patterns/select_as_symint.py +104 -0
  1606. executorch/backends/vulkan/quantizer/vulkan_quantizer.py +183 -0
  1607. executorch/backends/vulkan/quantizer/vulkan_quantizer_utils.py +223 -0
  1608. executorch/backends/vulkan/runtime/gen_vulkan_spv.py +1517 -0
  1609. executorch/backends/vulkan/runtime/graph/ops/glsl/addmm_naive_buffer.yaml +19 -0
  1610. executorch/backends/vulkan/runtime/graph/ops/glsl/addmm_naive_texture3d.yaml +24 -0
  1611. executorch/backends/vulkan/runtime/graph/ops/glsl/addmm_optimized.yaml +43 -0
  1612. executorch/backends/vulkan/runtime/graph/ops/glsl/arange.yaml +19 -0
  1613. executorch/backends/vulkan/runtime/graph/ops/glsl/avg_pool2d.yaml +18 -0
  1614. executorch/backends/vulkan/runtime/graph/ops/glsl/batchnorm.yaml +11 -0
  1615. executorch/backends/vulkan/runtime/graph/ops/glsl/binary_op.yaml +118 -0
  1616. executorch/backends/vulkan/runtime/graph/ops/glsl/binary_q8ta_q8ta_q8to.yaml +19 -0
  1617. executorch/backends/vulkan/runtime/graph/ops/glsl/binary_scalar_buffer.yaml +20 -0
  1618. executorch/backends/vulkan/runtime/graph/ops/glsl/binary_scalar_texture.yaml +20 -0
  1619. executorch/backends/vulkan/runtime/graph/ops/glsl/bitw8_image_to_nchw_nobitw8buffer.yaml +22 -0
  1620. executorch/backends/vulkan/runtime/graph/ops/glsl/buffer_to_buffer.yaml +20 -0
  1621. executorch/backends/vulkan/runtime/graph/ops/glsl/buffer_to_nchw.yaml +25 -0
  1622. executorch/backends/vulkan/runtime/graph/ops/glsl/choose_qparams_per_row.yaml +19 -0
  1623. executorch/backends/vulkan/runtime/graph/ops/glsl/clone.yaml +13 -0
  1624. executorch/backends/vulkan/runtime/graph/ops/glsl/col2im.yaml +19 -0
  1625. executorch/backends/vulkan/runtime/graph/ops/glsl/concat_buffer.yaml +15 -0
  1626. executorch/backends/vulkan/runtime/graph/ops/glsl/concat_texture.yaml +15 -0
  1627. executorch/backends/vulkan/runtime/graph/ops/glsl/conv1d.yaml +19 -0
  1628. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d.yaml +19 -0
  1629. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_dw.yaml +19 -0
  1630. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_dw_output_tile.yaml +27 -0
  1631. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_dw_prepack_weights.yaml +15 -0
  1632. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_dw_q8ta_q8csw_q8to.yaml +20 -0
  1633. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_dw_sned_output_tile.yaml +25 -0
  1634. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_prepack_weights.yaml +15 -0
  1635. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_pw.yaml +21 -0
  1636. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_pw_q8ta_q8csw_q8to_tiled.yaml +20 -0
  1637. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_pw_s1p0.yaml +19 -0
  1638. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_q8csw_linear_tiled.yaml +22 -0
  1639. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_q8ta_q8csw_linear_tiled.yaml +22 -0
  1640. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_q8ta_q8csw_q8to.yaml +21 -0
  1641. executorch/backends/vulkan/runtime/graph/ops/glsl/conv2d_q8ta_q8csw_q8to_linear_tiled.yaml +21 -0
  1642. executorch/backends/vulkan/runtime/graph/ops/glsl/conv_transpose2d.yaml +19 -0
  1643. executorch/backends/vulkan/runtime/graph/ops/glsl/conv_transpose2d_prepack_weights.yaml +16 -0
  1644. executorch/backends/vulkan/runtime/graph/ops/glsl/embedding_buffer.yaml +16 -0
  1645. executorch/backends/vulkan/runtime/graph/ops/glsl/embedding_legacy.yaml +12 -0
  1646. executorch/backends/vulkan/runtime/graph/ops/glsl/embedding_texture.yaml +15 -0
  1647. executorch/backends/vulkan/runtime/graph/ops/glsl/expand_buffer.yaml +11 -0
  1648. executorch/backends/vulkan/runtime/graph/ops/glsl/flip.yaml +14 -0
  1649. executorch/backends/vulkan/runtime/graph/ops/glsl/full.yaml +20 -0
  1650. executorch/backends/vulkan/runtime/graph/ops/glsl/gather_buffer.yaml +18 -0
  1651. executorch/backends/vulkan/runtime/graph/ops/glsl/gather_texture.yaml +17 -0
  1652. executorch/backends/vulkan/runtime/graph/ops/glsl/grid_priors.yaml +12 -0
  1653. executorch/backends/vulkan/runtime/graph/ops/glsl/group_norm_reduce_texture.yaml +15 -0
  1654. executorch/backends/vulkan/runtime/graph/ops/glsl/group_norm_texture.yaml +15 -0
  1655. executorch/backends/vulkan/runtime/graph/ops/glsl/im2col.yaml +18 -0
  1656. executorch/backends/vulkan/runtime/graph/ops/glsl/im2col_packed_int8.yaml +15 -0
  1657. executorch/backends/vulkan/runtime/graph/ops/glsl/image_to_nchw.yaml +38 -0
  1658. executorch/backends/vulkan/runtime/graph/ops/glsl/index_select.yaml +13 -0
  1659. executorch/backends/vulkan/runtime/graph/ops/glsl/index_select_channel.yaml +13 -0
  1660. executorch/backends/vulkan/runtime/graph/ops/glsl/linear_dq8ca_q4gsw_tiled.yaml +29 -0
  1661. executorch/backends/vulkan/runtime/graph/ops/glsl/linear_q4gsw_coop.yaml +43 -0
  1662. executorch/backends/vulkan/runtime/graph/ops/glsl/linear_q4gsw_tiled.yaml +28 -0
  1663. executorch/backends/vulkan/runtime/graph/ops/glsl/linear_q8csw_tiled.yaml +28 -0
  1664. executorch/backends/vulkan/runtime/graph/ops/glsl/linear_q8ta_q8csw_tiled.yaml +24 -0
  1665. executorch/backends/vulkan/runtime/graph/ops/glsl/linear_qcsnw.yaml +23 -0
  1666. executorch/backends/vulkan/runtime/graph/ops/glsl/linear_qcsnw_coop.yaml +38 -0
  1667. executorch/backends/vulkan/runtime/graph/ops/glsl/linear_qcsnw_tiled.yaml +54 -0
  1668. executorch/backends/vulkan/runtime/graph/ops/glsl/max_pool2d.yaml +17 -0
  1669. executorch/backends/vulkan/runtime/graph/ops/glsl/native_layer_norm.yaml +16 -0
  1670. executorch/backends/vulkan/runtime/graph/ops/glsl/nchw_to_bitw8_image_nobitw8buffer.yaml +22 -0
  1671. executorch/backends/vulkan/runtime/graph/ops/glsl/nchw_to_buffer.yaml +25 -0
  1672. executorch/backends/vulkan/runtime/graph/ops/glsl/nchw_to_image.yaml +37 -0
  1673. executorch/backends/vulkan/runtime/graph/ops/glsl/no_op.yaml +24 -0
  1674. executorch/backends/vulkan/runtime/graph/ops/glsl/pack_int4_linear_weight_transposed_interleaved.yaml +19 -0
  1675. executorch/backends/vulkan/runtime/graph/ops/glsl/pack_q4_linear_weight.yaml +14 -0
  1676. executorch/backends/vulkan/runtime/graph/ops/glsl/pack_q8_conv2d_dw_weights.yaml +15 -0
  1677. executorch/backends/vulkan/runtime/graph/ops/glsl/pack_q8_conv2d_weights.yaml +15 -0
  1678. executorch/backends/vulkan/runtime/graph/ops/glsl/pack_q8_linear_weight.yaml +14 -0
  1679. executorch/backends/vulkan/runtime/graph/ops/glsl/pad_channel.yaml +14 -0
  1680. executorch/backends/vulkan/runtime/graph/ops/glsl/pad_height_width.yaml +14 -0
  1681. executorch/backends/vulkan/runtime/graph/ops/glsl/permute_buffer.yaml +11 -0
  1682. executorch/backends/vulkan/runtime/graph/ops/glsl/permute_texture.yaml +11 -0
  1683. executorch/backends/vulkan/runtime/graph/ops/glsl/quantize_and_pack_4h4w.yaml +25 -0
  1684. executorch/backends/vulkan/runtime/graph/ops/glsl/quantize_and_pack_4h4w_with_group_sums.yaml +30 -0
  1685. executorch/backends/vulkan/runtime/graph/ops/glsl/quantize_and_pack_4w4c.yaml +23 -0
  1686. executorch/backends/vulkan/runtime/graph/ops/glsl/quantize_and_pack_im2col.yaml +18 -0
  1687. executorch/backends/vulkan/runtime/graph/ops/glsl/reduce.yaml +29 -0
  1688. executorch/backends/vulkan/runtime/graph/ops/glsl/reduce2d.yaml +29 -0
  1689. executorch/backends/vulkan/runtime/graph/ops/glsl/reduce_per_row_buffer.yaml +42 -0
  1690. executorch/backends/vulkan/runtime/graph/ops/glsl/repeat.yaml +14 -0
  1691. executorch/backends/vulkan/runtime/graph/ops/glsl/repeat_channel.yaml +12 -0
  1692. executorch/backends/vulkan/runtime/graph/ops/glsl/repeat_interleave.yaml +12 -0
  1693. executorch/backends/vulkan/runtime/graph/ops/glsl/rotary_embedding.yaml +13 -0
  1694. executorch/backends/vulkan/runtime/graph/ops/glsl/scalar_tensor.yaml +27 -0
  1695. executorch/backends/vulkan/runtime/graph/ops/glsl/sdpa_attn_weights_softmax.yaml +19 -0
  1696. executorch/backends/vulkan/runtime/graph/ops/glsl/sdpa_compute_attn_weights_coop.yaml +25 -0
  1697. executorch/backends/vulkan/runtime/graph/ops/glsl/sdpa_compute_attn_weights_tiled.yaml +26 -0
  1698. executorch/backends/vulkan/runtime/graph/ops/glsl/sdpa_compute_out_coop.yaml +25 -0
  1699. executorch/backends/vulkan/runtime/graph/ops/glsl/sdpa_compute_out_tiled.yaml +26 -0
  1700. executorch/backends/vulkan/runtime/graph/ops/glsl/sdpa_kv_cache_update.yaml +23 -0
  1701. executorch/backends/vulkan/runtime/graph/ops/glsl/set_zero.yaml +8 -0
  1702. executorch/backends/vulkan/runtime/graph/ops/glsl/softmax.yaml +21 -0
  1703. executorch/backends/vulkan/runtime/graph/ops/glsl/split_buffer.yaml +18 -0
  1704. executorch/backends/vulkan/runtime/graph/ops/glsl/split_texture.yaml +17 -0
  1705. executorch/backends/vulkan/runtime/graph/ops/glsl/tan.yaml +13 -0
  1706. executorch/backends/vulkan/runtime/graph/ops/glsl/transfer_buffer.yaml +22 -0
  1707. executorch/backends/vulkan/runtime/graph/ops/glsl/transfer_texture.yaml +22 -0
  1708. executorch/backends/vulkan/runtime/graph/ops/glsl/unary_op.yaml +48 -0
  1709. executorch/backends/vulkan/runtime/graph/ops/glsl/unpack_4w4c_and_dequantize.yaml +23 -0
  1710. executorch/backends/vulkan/runtime/graph/ops/glsl/update_concat_offset.yaml +13 -0
  1711. executorch/backends/vulkan/runtime/graph/ops/glsl/upsample_2d.yaml +19 -0
  1712. executorch/backends/vulkan/runtime/graph/ops/glsl/var_buffer.yaml +16 -0
  1713. executorch/backends/vulkan/runtime/graph/ops/glsl/var_texture3d.yaml +16 -0
  1714. executorch/backends/vulkan/runtime/graph/ops/glsl/view.yaml +13 -0
  1715. executorch/backends/vulkan/runtime/graph/ops/glsl/view_buffer.yaml +20 -0
  1716. executorch/backends/vulkan/runtime/graph/ops/glsl/view_convert_buffer.yaml +22 -0
  1717. executorch/backends/vulkan/runtime/graph/ops/glsl/where.yaml +12 -0
  1718. executorch/backends/vulkan/serialization/schema.fbs +158 -0
  1719. executorch/backends/vulkan/serialization/vulkan_graph_builder.py +505 -0
  1720. executorch/backends/vulkan/serialization/vulkan_graph_schema.py +161 -0
  1721. executorch/backends/vulkan/serialization/vulkan_graph_serialize.py +274 -0
  1722. executorch/backends/vulkan/test/custom_ops/glsl/add.yaml +29 -0
  1723. executorch/backends/vulkan/test/glsl/all_shaders.yaml +68 -0
  1724. executorch/backends/vulkan/test/glsl/dynamic_dispatch_test.yaml +7 -0
  1725. executorch/backends/vulkan/test/glsl/reference_matmul_common.yaml +9 -0
  1726. executorch/backends/vulkan/test/op_tests/cases.py +2026 -0
  1727. executorch/backends/vulkan/test/op_tests/generate_op_benchmarks.py +88 -0
  1728. executorch/backends/vulkan/test/op_tests/generate_op_correctness_tests.py +90 -0
  1729. executorch/backends/vulkan/test/op_tests/utils/aten_types.py +31 -0
  1730. executorch/backends/vulkan/test/op_tests/utils/gen_benchmark_vk.py +350 -0
  1731. executorch/backends/vulkan/test/op_tests/utils/gen_computegraph.py +788 -0
  1732. executorch/backends/vulkan/test/op_tests/utils/gen_correctness_base.py +421 -0
  1733. executorch/backends/vulkan/test/op_tests/utils/gen_correctness_vk.py +164 -0
  1734. executorch/backends/vulkan/test/op_tests/utils/test_suite.py +53 -0
  1735. executorch/backends/vulkan/test/test_serialization.py +135 -0
  1736. executorch/backends/vulkan/test/test_vulkan_delegate.py +2696 -0
  1737. executorch/backends/vulkan/test/test_vulkan_delegate_header.py +104 -0
  1738. executorch/backends/vulkan/test/test_vulkan_passes.py +193 -0
  1739. executorch/backends/vulkan/test/tester.py +91 -0
  1740. executorch/backends/vulkan/test/utils.py +1111 -0
  1741. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/apiconventions.py +21 -0
  1742. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/base_generator.py +937 -0
  1743. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/cgenerator.py +549 -0
  1744. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/generator.py +1424 -0
  1745. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/parse_dependency.py +404 -0
  1746. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/reg.py +1885 -0
  1747. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/spec_tools/conventions.py +562 -0
  1748. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/spec_tools/util.py +58 -0
  1749. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/stripAPI.py +42 -0
  1750. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/vkconventions.py +314 -0
  1751. executorch/backends/vulkan/third-party/Vulkan-Headers/registry/vulkan_object.py +484 -0
  1752. executorch/backends/vulkan/third-party/VulkanMemoryAllocator/tools/GpuMemDumpVis/GpuMemDumpVis.py +333 -0
  1753. executorch/backends/vulkan/third-party/volk/generate.py +212 -0
  1754. executorch/backends/vulkan/tools/gpuinfo/glsl/buf_bandwidth.yaml +18 -0
  1755. executorch/backends/vulkan/tools/gpuinfo/glsl/buf_cacheline_size.yaml +12 -0
  1756. executorch/backends/vulkan/tools/gpuinfo/glsl/reg_count.yaml +16 -0
  1757. executorch/backends/vulkan/tools/gpuinfo/glsl/tex_bandwidth.yaml +15 -0
  1758. executorch/backends/vulkan/tools/gpuinfo/glsl/tex_cacheline_concurr.yaml +14 -0
  1759. executorch/backends/vulkan/tools/gpuinfo/glsl/warp_size.yaml +16 -0
  1760. executorch/backends/vulkan/utils.py +1474 -0
  1761. executorch/backends/vulkan/vulkan_preprocess.py +249 -0
  1762. executorch/backends/xnnpack/__init__.py +34 -0
  1763. executorch/backends/xnnpack/_passes/__init__.py +109 -0
  1764. executorch/backends/xnnpack/_passes/channels_last_tagged_reshape_pass.py +561 -0
  1765. executorch/backends/xnnpack/_passes/conv1d_unsqueeze_pass.py +203 -0
  1766. executorch/backends/xnnpack/_passes/convert_to_linear.py +198 -0
  1767. executorch/backends/xnnpack/_passes/convert_to_sdpa.py +114 -0
  1768. executorch/backends/xnnpack/_passes/convert_to_upsample_bilinear2d.py +65 -0
  1769. executorch/backends/xnnpack/_passes/decompose_cat.py +105 -0
  1770. executorch/backends/xnnpack/_passes/fuse_activation_pass.py +87 -0
  1771. executorch/backends/xnnpack/_passes/fuse_batch_norm.py +261 -0
  1772. executorch/backends/xnnpack/_passes/prelu_reshape_pass.py +75 -0
  1773. executorch/backends/xnnpack/_passes/propagate_custom_meta_pass.py +44 -0
  1774. executorch/backends/xnnpack/_passes/remove_redundant_copy_pass.py +158 -0
  1775. executorch/backends/xnnpack/_passes/xnnpack_pass.py +22 -0
  1776. executorch/backends/xnnpack/operators/__init__.py +61 -0
  1777. executorch/backends/xnnpack/operators/node_visitor.py +758 -0
  1778. executorch/backends/xnnpack/operators/op_abs.py +52 -0
  1779. executorch/backends/xnnpack/operators/op_add.py +77 -0
  1780. executorch/backends/xnnpack/operators/op_addmm.py +70 -0
  1781. executorch/backends/xnnpack/operators/op_avg_pooling2d.py +75 -0
  1782. executorch/backends/xnnpack/operators/op_bmm.py +54 -0
  1783. executorch/backends/xnnpack/operators/op_cat.py +121 -0
  1784. executorch/backends/xnnpack/operators/op_ceiling.py +52 -0
  1785. executorch/backends/xnnpack/operators/op_clamp.py +64 -0
  1786. executorch/backends/xnnpack/operators/op_clone.py +60 -0
  1787. executorch/backends/xnnpack/operators/op_conv2d.py +186 -0
  1788. executorch/backends/xnnpack/operators/op_cos.py +52 -0
  1789. executorch/backends/xnnpack/operators/op_div.py +56 -0
  1790. executorch/backends/xnnpack/operators/op_dynamic_dequantize_ops.py +114 -0
  1791. executorch/backends/xnnpack/operators/op_dynamic_quantize_ops.py +179 -0
  1792. executorch/backends/xnnpack/operators/op_elu.py +56 -0
  1793. executorch/backends/xnnpack/operators/op_exp.py +52 -0
  1794. executorch/backends/xnnpack/operators/op_floor.py +48 -0
  1795. executorch/backends/xnnpack/operators/op_gelu.py +52 -0
  1796. executorch/backends/xnnpack/operators/op_hardswish.py +52 -0
  1797. executorch/backends/xnnpack/operators/op_hardtanh.py +67 -0
  1798. executorch/backends/xnnpack/operators/op_leaky_relu.py +65 -0
  1799. executorch/backends/xnnpack/operators/op_linear.py +110 -0
  1800. executorch/backends/xnnpack/operators/op_log.py +52 -0
  1801. executorch/backends/xnnpack/operators/op_matrix_multiplication.py +66 -0
  1802. executorch/backends/xnnpack/operators/op_max_dim.py +206 -0
  1803. executorch/backends/xnnpack/operators/op_max_pool2d.py +136 -0
  1804. executorch/backends/xnnpack/operators/op_maximum.py +55 -0
  1805. executorch/backends/xnnpack/operators/op_mean_dim.py +78 -0
  1806. executorch/backends/xnnpack/operators/op_minimum.py +54 -0
  1807. executorch/backends/xnnpack/operators/op_multiply.py +84 -0
  1808. executorch/backends/xnnpack/operators/op_negate.py +51 -0
  1809. executorch/backends/xnnpack/operators/op_permute.py +87 -0
  1810. executorch/backends/xnnpack/operators/op_prelu.py +56 -0
  1811. executorch/backends/xnnpack/operators/op_quant_dequant.py +196 -0
  1812. executorch/backends/xnnpack/operators/op_relu.py +61 -0
  1813. executorch/backends/xnnpack/operators/op_rsqrt.py +52 -0
  1814. executorch/backends/xnnpack/operators/op_sigmoid.py +48 -0
  1815. executorch/backends/xnnpack/operators/op_sin.py +52 -0
  1816. executorch/backends/xnnpack/operators/op_skip_ops.py +89 -0
  1817. executorch/backends/xnnpack/operators/op_slice_copy.py +100 -0
  1818. executorch/backends/xnnpack/operators/op_softmax.py +58 -0
  1819. executorch/backends/xnnpack/operators/op_square.py +52 -0
  1820. executorch/backends/xnnpack/operators/op_square_root.py +52 -0
  1821. executorch/backends/xnnpack/operators/op_squeeze.py +145 -0
  1822. executorch/backends/xnnpack/operators/op_static_constant_pad.py +145 -0
  1823. executorch/backends/xnnpack/operators/op_static_resize_bilinear_2d.py +61 -0
  1824. executorch/backends/xnnpack/operators/op_sub.py +77 -0
  1825. executorch/backends/xnnpack/operators/op_tanh.py +52 -0
  1826. executorch/backends/xnnpack/operators/op_to_copy.py +91 -0
  1827. executorch/backends/xnnpack/operators/op_view_copy.py +96 -0
  1828. executorch/backends/xnnpack/operators/quant_params.py +412 -0
  1829. executorch/backends/xnnpack/partition/config/__init__.py +127 -0
  1830. executorch/backends/xnnpack/partition/config/gemm_configs.py +575 -0
  1831. executorch/backends/xnnpack/partition/config/generic_node_configs.py +711 -0
  1832. executorch/backends/xnnpack/partition/config/node_configs.py +148 -0
  1833. executorch/backends/xnnpack/partition/config/quant_affine_configs.py +56 -0
  1834. executorch/backends/xnnpack/partition/config/xnnpack_config.py +252 -0
  1835. executorch/backends/xnnpack/partition/graphs/bilinear_2d.py +55 -0
  1836. executorch/backends/xnnpack/partition/graphs/sdpa.py +86 -0
  1837. executorch/backends/xnnpack/partition/xnnpack_partitioner.py +160 -0
  1838. executorch/backends/xnnpack/quantizer/xnnpack_quantizer.py +462 -0
  1839. executorch/backends/xnnpack/quantizer/xnnpack_quantizer_utils.py +1121 -0
  1840. executorch/backends/xnnpack/recipes/__init__.py +19 -0
  1841. executorch/backends/xnnpack/recipes/xnnpack_recipe_provider.py +200 -0
  1842. executorch/backends/xnnpack/recipes/xnnpack_recipe_types.py +37 -0
  1843. executorch/backends/xnnpack/serialization/runtime_schema.fbs +389 -0
  1844. executorch/backends/xnnpack/serialization/schema.fbs +381 -0
  1845. executorch/backends/xnnpack/serialization/xnnpack_graph_schema.py +542 -0
  1846. executorch/backends/xnnpack/serialization/xnnpack_graph_serialize.py +373 -0
  1847. executorch/backends/xnnpack/test/__init__.py +0 -0
  1848. executorch/backends/xnnpack/test/models/deeplab_v3.py +42 -0
  1849. executorch/backends/xnnpack/test/models/edsr.py +55 -0
  1850. executorch/backends/xnnpack/test/models/emformer_rnnt.py +98 -0
  1851. executorch/backends/xnnpack/test/models/inception_v3.py +84 -0
  1852. executorch/backends/xnnpack/test/models/inception_v4.py +62 -0
  1853. executorch/backends/xnnpack/test/models/llama2_et_example.py +49 -0
  1854. executorch/backends/xnnpack/test/models/mobilebert.py +55 -0
  1855. executorch/backends/xnnpack/test/models/mobilenet_v2.py +103 -0
  1856. executorch/backends/xnnpack/test/models/mobilenet_v3.py +84 -0
  1857. executorch/backends/xnnpack/test/models/resnet.py +90 -0
  1858. executorch/backends/xnnpack/test/models/torchvision_vit.py +105 -0
  1859. executorch/backends/xnnpack/test/models/very_big_model.py +45 -0
  1860. executorch/backends/xnnpack/test/models/w2l.py +60 -0
  1861. executorch/backends/xnnpack/test/ops/test_abs.py +87 -0
  1862. executorch/backends/xnnpack/test/ops/test_add.py +266 -0
  1863. executorch/backends/xnnpack/test/ops/test_avgpool2d.py +92 -0
  1864. executorch/backends/xnnpack/test/ops/test_bilinear2d.py +152 -0
  1865. executorch/backends/xnnpack/test/ops/test_bmm.py +49 -0
  1866. executorch/backends/xnnpack/test/ops/test_cat.py +254 -0
  1867. executorch/backends/xnnpack/test/ops/test_ceil.py +63 -0
  1868. executorch/backends/xnnpack/test/ops/test_check_quant_params.py +107 -0
  1869. executorch/backends/xnnpack/test/ops/test_clamp.py +79 -0
  1870. executorch/backends/xnnpack/test/ops/test_clone.py +137 -0
  1871. executorch/backends/xnnpack/test/ops/test_conv1d.py +190 -0
  1872. executorch/backends/xnnpack/test/ops/test_conv2d.py +747 -0
  1873. executorch/backends/xnnpack/test/ops/test_cos.py +87 -0
  1874. executorch/backends/xnnpack/test/ops/test_div.py +78 -0
  1875. executorch/backends/xnnpack/test/ops/test_elu.py +98 -0
  1876. executorch/backends/xnnpack/test/ops/test_exp.py +70 -0
  1877. executorch/backends/xnnpack/test/ops/test_floor.py +58 -0
  1878. executorch/backends/xnnpack/test/ops/test_gelu.py +71 -0
  1879. executorch/backends/xnnpack/test/ops/test_hardswish.py +70 -0
  1880. executorch/backends/xnnpack/test/ops/test_hardtanh.py +83 -0
  1881. executorch/backends/xnnpack/test/ops/test_leaky_relu.py +131 -0
  1882. executorch/backends/xnnpack/test/ops/test_linear.py +1059 -0
  1883. executorch/backends/xnnpack/test/ops/test_log.py +45 -0
  1884. executorch/backends/xnnpack/test/ops/test_lstm.py +67 -0
  1885. executorch/backends/xnnpack/test/ops/test_max_dim.py +66 -0
  1886. executorch/backends/xnnpack/test/ops/test_maximum.py +66 -0
  1887. executorch/backends/xnnpack/test/ops/test_maxpool2d.py +221 -0
  1888. executorch/backends/xnnpack/test/ops/test_mean_dim.py +98 -0
  1889. executorch/backends/xnnpack/test/ops/test_minimum.py +49 -0
  1890. executorch/backends/xnnpack/test/ops/test_multiply.py +149 -0
  1891. executorch/backends/xnnpack/test/ops/test_negate.py +58 -0
  1892. executorch/backends/xnnpack/test/ops/test_permute.py +134 -0
  1893. executorch/backends/xnnpack/test/ops/test_pow.py +62 -0
  1894. executorch/backends/xnnpack/test/ops/test_prelu.py +50 -0
  1895. executorch/backends/xnnpack/test/ops/test_quantize_per_tensor.py +70 -0
  1896. executorch/backends/xnnpack/test/ops/test_relu.py +38 -0
  1897. executorch/backends/xnnpack/test/ops/test_rsqrt.py +45 -0
  1898. executorch/backends/xnnpack/test/ops/test_sigmoid.py +45 -0
  1899. executorch/backends/xnnpack/test/ops/test_sin.py +87 -0
  1900. executorch/backends/xnnpack/test/ops/test_slice_copy.py +170 -0
  1901. executorch/backends/xnnpack/test/ops/test_softmax.py +73 -0
  1902. executorch/backends/xnnpack/test/ops/test_sqrt.py +45 -0
  1903. executorch/backends/xnnpack/test/ops/test_square.py +48 -0
  1904. executorch/backends/xnnpack/test/ops/test_static_constant_pad.py +294 -0
  1905. executorch/backends/xnnpack/test/ops/test_sub.py +178 -0
  1906. executorch/backends/xnnpack/test/ops/test_tanh.py +43 -0
  1907. executorch/backends/xnnpack/test/ops/test_to_copy.py +113 -0
  1908. executorch/backends/xnnpack/test/passes/__init__.py +0 -0
  1909. executorch/backends/xnnpack/test/passes/test_activation_fusion.py +232 -0
  1910. executorch/backends/xnnpack/test/passes/test_batch_norm_fusion.py +179 -0
  1911. executorch/backends/xnnpack/test/passes/test_channels_last_tagged_reshape.py +635 -0
  1912. executorch/backends/xnnpack/test/passes/test_convert_to_linear.py +43 -0
  1913. executorch/backends/xnnpack/test/passes/test_decompose_cat_pass.py +112 -0
  1914. executorch/backends/xnnpack/test/passes/test_propagate_custom_meta_pass.py +185 -0
  1915. executorch/backends/xnnpack/test/passes/test_remove_get_item_pass.py +99 -0
  1916. executorch/backends/xnnpack/test/passes/test_remove_redundant_copy_pass.py +182 -0
  1917. executorch/backends/xnnpack/test/quantizer/test_pt2e_quantization.py +818 -0
  1918. executorch/backends/xnnpack/test/quantizer/test_representation.py +308 -0
  1919. executorch/backends/xnnpack/test/quantizer/test_xnnpack_quantizer.py +1217 -0
  1920. executorch/backends/xnnpack/test/recipes/test_xnnpack_recipes.py +320 -0
  1921. executorch/backends/xnnpack/test/serialization/test_serialization.py +50 -0
  1922. executorch/backends/xnnpack/test/serialization/test_xnnheader.py +104 -0
  1923. executorch/backends/xnnpack/test/test_xnnpack_partitioner.py +163 -0
  1924. executorch/backends/xnnpack/test/test_xnnpack_utils.py +532 -0
  1925. executorch/backends/xnnpack/test/test_xnnpack_utils_classes.py +44 -0
  1926. executorch/backends/xnnpack/test/tester/__init__.py +29 -0
  1927. executorch/backends/xnnpack/test/tester/tester.py +130 -0
  1928. executorch/backends/xnnpack/third-party/FP16/configure.py +65 -0
  1929. executorch/backends/xnnpack/third-party/FP16/confu.yaml +8 -0
  1930. executorch/backends/xnnpack/third-party/FP16/include/fp16/__init__.py +0 -0
  1931. executorch/backends/xnnpack/third-party/FP16/include/fp16/avx.py +50 -0
  1932. executorch/backends/xnnpack/third-party/FP16/include/fp16/avx2.py +53 -0
  1933. executorch/backends/xnnpack/third-party/FP16/test/peachpy/stubs.py +38 -0
  1934. executorch/backends/xnnpack/third-party/FXdiv/configure.py +30 -0
  1935. executorch/backends/xnnpack/third-party/FXdiv/confu.yaml +6 -0
  1936. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/aarch32_template.py +361 -0
  1937. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/aarch64_template.py +347 -0
  1938. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/arm_template.py +78 -0
  1939. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/avx512bf16_template.py +81 -0
  1940. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/avx512f_template.py +390 -0
  1941. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/avx512vnni_template.py +703 -0
  1942. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/base_architecture.py +276 -0
  1943. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/fma3_template.py +260 -0
  1944. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/generate.py +71 -0
  1945. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/generate_bf16_f32_gemm_microkernels.py +39 -0
  1946. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/generate_f32_gemm_microkernels.py +104 -0
  1947. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/generate_gemm_microkernels_main.py +29 -0
  1948. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/generate_qd8_f32_qc4w_gemm_microkernels.py +69 -0
  1949. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/generate_qd8_f32_qc8w_gemm_microkernels.py +93 -0
  1950. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/generate_qs8_qc4w_gemm_microkernels.py +42 -0
  1951. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/generate_qs8_qc8w_gemm_microkernels.py +43 -0
  1952. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/neondot_template.py +463 -0
  1953. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/neonfma_template.py +248 -0
  1954. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/neonmlal_aarch32_template.py +394 -0
  1955. executorch/backends/xnnpack/third-party/XNNPACK/gemm_compiler/x64_template.py +512 -0
  1956. executorch/backends/xnnpack/third-party/XNNPACK/scripts/check_config.py +152 -0
  1957. executorch/backends/xnnpack/third-party/XNNPACK/scripts/check_files_changed.py +53 -0
  1958. executorch/backends/xnnpack/third-party/XNNPACK/scripts/generate-build-identifier.py +106 -0
  1959. executorch/backends/xnnpack/third-party/XNNPACK/scripts/sort-filenames.py +134 -0
  1960. executorch/backends/xnnpack/third-party/XNNPACK/test/bf16-f32-gemm-minmax.yaml +121 -0
  1961. executorch/backends/xnnpack/third-party/XNNPACK/test/bf16-gemm-minmax.yaml +106 -0
  1962. executorch/backends/xnnpack/third-party/XNNPACK/test/f16-conv-hwc2chw.yaml +8 -0
  1963. executorch/backends/xnnpack/third-party/XNNPACK/test/f16-dwconv2d-chw.yaml +88 -0
  1964. executorch/backends/xnnpack/third-party/XNNPACK/test/f16-f32acc-gemm-minmax.yaml +42 -0
  1965. executorch/backends/xnnpack/third-party/XNNPACK/test/f16-f32acc-igemm-minmax.yaml +42 -0
  1966. executorch/backends/xnnpack/third-party/XNNPACK/test/f16-gemm-minmax.yaml +219 -0
  1967. executorch/backends/xnnpack/third-party/XNNPACK/test/f16-ibilinear-chw.yaml +9 -0
  1968. executorch/backends/xnnpack/third-party/XNNPACK/test/f16-ibilinear.yaml +12 -0
  1969. executorch/backends/xnnpack/third-party/XNNPACK/test/f16-igemm-minmax.yaml +165 -0
  1970. executorch/backends/xnnpack/third-party/XNNPACK/test/f16-raddstoreexpminusmax.yaml +52 -0
  1971. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-argmaxpool.yaml +15 -0
  1972. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-conv-hwc2chw.yaml +32 -0
  1973. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-dwconv2d-chw.yaml +712 -0
  1974. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-gemm-minmax.yaml +1572 -0
  1975. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-gemm-relu.yaml +123 -0
  1976. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-gemm.yaml +127 -0
  1977. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-ibilinear-chw.yaml +22 -0
  1978. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-ibilinear.yaml +23 -0
  1979. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-igemm-minmax.yaml +1001 -0
  1980. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-igemm-relu.yaml +123 -0
  1981. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-igemm.yaml +123 -0
  1982. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-ppmm-minmax.yaml +122 -0
  1983. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-qc4w-gemm-minmax.yaml +277 -0
  1984. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-qc8w-gemm-minmax.yaml +757 -0
  1985. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-qc8w-gemm-relu.yaml +67 -0
  1986. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-qc8w-gemm.yaml +115 -0
  1987. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-raddexpminusmax.yaml +38 -0
  1988. executorch/backends/xnnpack/third-party/XNNPACK/test/f32-raddstoreexpminusmax.yaml +88 -0
  1989. executorch/backends/xnnpack/third-party/XNNPACK/test/pf16-gemm-minmax.yaml +20 -0
  1990. executorch/backends/xnnpack/third-party/XNNPACK/test/pf32-gemm-minmax.yaml +34 -0
  1991. executorch/backends/xnnpack/third-party/XNNPACK/test/pqs8-qc8w-gemm-minmax.yaml +20 -0
  1992. executorch/backends/xnnpack/third-party/XNNPACK/test/qd8-f16-qb4w-gemm-minmax.yaml +260 -0
  1993. executorch/backends/xnnpack/third-party/XNNPACK/test/qd8-f16-qc4w-gemm-minmax.yaml +678 -0
  1994. executorch/backends/xnnpack/third-party/XNNPACK/test/qd8-f16-qc8w-gemm-minmax.yaml +412 -0
  1995. executorch/backends/xnnpack/third-party/XNNPACK/test/qd8-f16-qc8w-igemm-minmax.yaml +360 -0
  1996. executorch/backends/xnnpack/third-party/XNNPACK/test/qd8-f32-qb4w-gemm-minmax.yaml +537 -0
  1997. executorch/backends/xnnpack/third-party/XNNPACK/test/qd8-f32-qc4w-gemm-minmax.yaml +2176 -0
  1998. executorch/backends/xnnpack/third-party/XNNPACK/test/qd8-f32-qc8w-gemm-minmax.yaml +1564 -0
  1999. executorch/backends/xnnpack/third-party/XNNPACK/test/qd8-f32-qc8w-igemm-minmax.yaml +1035 -0
  2000. executorch/backends/xnnpack/third-party/XNNPACK/test/qp8-f32-qb4w-gemm-minmax.yaml +54 -0
  2001. executorch/backends/xnnpack/third-party/XNNPACK/test/qp8-f32-qc4w-gemm-minmax.yaml +66 -0
  2002. executorch/backends/xnnpack/third-party/XNNPACK/test/qp8-f32-qc8w-gemm-minmax.yaml +42 -0
  2003. executorch/backends/xnnpack/third-party/XNNPACK/test/qs8-qc4w-gemm-minmax-fp32.yaml +345 -0
  2004. executorch/backends/xnnpack/third-party/XNNPACK/test/qs8-qc8w-gemm-minmax-fp32.yaml +2029 -0
  2005. executorch/backends/xnnpack/third-party/XNNPACK/test/qs8-qc8w-igemm-minmax-fp32.yaml +1831 -0
  2006. executorch/backends/xnnpack/third-party/XNNPACK/test/qu8-gemm-minmax-fp32.yaml +584 -0
  2007. executorch/backends/xnnpack/third-party/XNNPACK/test/qu8-gemm-minmax-rndnu.yaml +148 -0
  2008. executorch/backends/xnnpack/third-party/XNNPACK/test/qu8-igemm-minmax-fp32.yaml +581 -0
  2009. executorch/backends/xnnpack/third-party/XNNPACK/test/qu8-igemm-minmax-rndnu.yaml +110 -0
  2010. executorch/backends/xnnpack/third-party/XNNPACK/test/s8-ibilinear.yaml +22 -0
  2011. executorch/backends/xnnpack/third-party/XNNPACK/test/u8-ibilinear.yaml +22 -0
  2012. executorch/backends/xnnpack/third-party/XNNPACK/test/x8-lut.yaml +47 -0
  2013. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-argmaxpool-test.py +692 -0
  2014. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-conv-hwc-test.py +543 -0
  2015. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-conv-hwc2chw-test.py +591 -0
  2016. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-dwconv-test.py +339 -0
  2017. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-dwconv2d-chw-test.py +463 -0
  2018. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-gemm-test.py +1150 -0
  2019. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-ibilinear-chw-test.py +236 -0
  2020. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-ibilinear-test.py +237 -0
  2021. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-lut-test.py +164 -0
  2022. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-raddexpminusmax-test.py +159 -0
  2023. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-raddstoreexpminusmax-test.py +210 -0
  2024. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-reduce-discontiguous-test.py +495 -0
  2025. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-reduce-test.py +289 -0
  2026. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-spmm-test.py +554 -0
  2027. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-vbinary-test.py +179 -0
  2028. executorch/backends/xnnpack/third-party/XNNPACK/tools/generate-vunary-test.py +280 -0
  2029. executorch/backends/xnnpack/third-party/XNNPACK/tools/parse-microkernel-bench.py +189 -0
  2030. executorch/backends/xnnpack/third-party/XNNPACK/tools/primes.py +1015 -0
  2031. executorch/backends/xnnpack/third-party/XNNPACK/tools/update-microkernels.py +567 -0
  2032. executorch/backends/xnnpack/third-party/XNNPACK/tools/xngen.py +159 -0
  2033. executorch/backends/xnnpack/third-party/XNNPACK/tools/xnncommon.py +275 -0
  2034. executorch/backends/xnnpack/third-party/cpuinfo/configure.py +110 -0
  2035. executorch/backends/xnnpack/third-party/cpuinfo/confu.yaml +9 -0
  2036. executorch/backends/xnnpack/third-party/cpuinfo/deps/clog/configure.py +26 -0
  2037. executorch/backends/xnnpack/third-party/cpuinfo/deps/clog/confu.yaml +5 -0
  2038. executorch/backends/xnnpack/third-party/cpuinfo/scripts/android-device-dump.py +400 -0
  2039. executorch/backends/xnnpack/third-party/cpuinfo/scripts/arm-linux-filesystem-dump.py +107 -0
  2040. executorch/backends/xnnpack/third-party/cpuinfo/scripts/parse-x86-cpuid-dump.py +47 -0
  2041. executorch/backends/xnnpack/third-party/generate-cpuinfo-wrappers.py +93 -0
  2042. executorch/backends/xnnpack/third-party/pthreadpool/configure.py +38 -0
  2043. executorch/backends/xnnpack/third-party/pthreadpool/confu.yaml +8 -0
  2044. executorch/backends/xnnpack/utils/configs.py +49 -0
  2045. executorch/backends/xnnpack/utils/quant_utils.py +301 -0
  2046. executorch/backends/xnnpack/utils/utils.py +221 -0
  2047. executorch/backends/xnnpack/utils/xnnpack_constants.py +37 -0
  2048. executorch/backends/xnnpack/xnnpack_preprocess.py +194 -0
  2049. executorch/codegen/__init__.py +0 -0
  2050. executorch/codegen/api/__init__.py +0 -0
  2051. executorch/codegen/api/custom_ops.py +151 -0
  2052. executorch/codegen/api/et_cpp.py +368 -0
  2053. executorch/codegen/api/types/__init__.py +5 -0
  2054. executorch/codegen/api/types/signatures.py +77 -0
  2055. executorch/codegen/api/types/types.py +77 -0
  2056. executorch/codegen/api/unboxing.py +232 -0
  2057. executorch/codegen/gen.py +1049 -0
  2058. executorch/codegen/model.py +220 -0
  2059. executorch/codegen/parse.py +158 -0
  2060. executorch/codegen/test/test_executorch_custom_ops.py +153 -0
  2061. executorch/codegen/test/test_executorch_gen.py +698 -0
  2062. executorch/codegen/test/test_executorch_signatures.py +65 -0
  2063. executorch/codegen/test/test_executorch_types.py +121 -0
  2064. executorch/codegen/test/test_executorch_unboxing.py +165 -0
  2065. executorch/codegen/test/test_selective_build.py +51 -0
  2066. executorch/codegen/tools/__init__.py +0 -0
  2067. executorch/codegen/tools/combine_prim_ops_headers.py +164 -0
  2068. executorch/codegen/tools/gen_all_oplist.py +252 -0
  2069. executorch/codegen/tools/gen_oplist.py +369 -0
  2070. executorch/codegen/tools/gen_ops_def.py +96 -0
  2071. executorch/codegen/tools/gen_selected_op_variants.py +133 -0
  2072. executorch/codegen/tools/gen_selected_prim_ops.py +96 -0
  2073. executorch/codegen/tools/merge_yaml.py +125 -0
  2074. executorch/codegen/tools/selective_build.cp313-win_amd64.pyd +0 -0
  2075. executorch/codegen/tools/selective_build.pyi +23 -0
  2076. executorch/codegen/tools/test/test_gen_all_oplist.py +122 -0
  2077. executorch/codegen/tools/test/test_gen_oplist.py +263 -0
  2078. executorch/codegen/tools/test/test_gen_oplist_real_model.py +50 -0
  2079. executorch/codegen/tools/test/test_gen_selected_op_variants.py +204 -0
  2080. executorch/codegen/tools/test/test_tools_selective_build.py +129 -0
  2081. executorch/codegen/tools/yaml_util.py +15 -0
  2082. executorch/data/bin/__init__.py +44 -0
  2083. executorch/data/bin/flatc.exe +0 -0
  2084. executorch/data/lib/aoti_cuda_shims.lib +0 -0
  2085. executorch/devtools/__init__.py +19 -0
  2086. executorch/devtools/backend_debug/__init__.py +13 -0
  2087. executorch/devtools/backend_debug/delegation_info.py +183 -0
  2088. executorch/devtools/backend_debug/tests/test_delegation_info.py +79 -0
  2089. executorch/devtools/bundled_program/config.py +120 -0
  2090. executorch/devtools/bundled_program/core.py +395 -0
  2091. executorch/devtools/bundled_program/schema/__init__.py +9 -0
  2092. executorch/devtools/bundled_program/schema/bundled_program_schema.fbs +97 -0
  2093. executorch/devtools/bundled_program/schema/bundled_program_schema.py +99 -0
  2094. executorch/devtools/bundled_program/schema/scalar_type.fbs +43 -0
  2095. executorch/devtools/bundled_program/schema/test/test_schema.py +27 -0
  2096. executorch/devtools/bundled_program/serialize/__init__.py +122 -0
  2097. executorch/devtools/bundled_program/serialize/bundled_program_schema.fbs +97 -0
  2098. executorch/devtools/bundled_program/serialize/scalar_type.fbs +43 -0
  2099. executorch/devtools/bundled_program/serialize/test/test_serialize.py +37 -0
  2100. executorch/devtools/bundled_program/test/test_bundle_data.py +168 -0
  2101. executorch/devtools/bundled_program/test/test_config.py +131 -0
  2102. executorch/devtools/bundled_program/test/test_end2end.py +64 -0
  2103. executorch/devtools/bundled_program/util/test_util.py +289 -0
  2104. executorch/devtools/bundled_program/version.py +13 -0
  2105. executorch/devtools/debug_format/base_schema.py +61 -0
  2106. executorch/devtools/debug_format/et_schema.py +432 -0
  2107. executorch/devtools/etdump/etdump_schema_flatcc.fbs +181 -0
  2108. executorch/devtools/etdump/scalar_type.fbs +43 -0
  2109. executorch/devtools/etdump/schema_flatcc.py +154 -0
  2110. executorch/devtools/etdump/serialize.py +108 -0
  2111. executorch/devtools/etdump/tests/serialize_test.py +142 -0
  2112. executorch/devtools/etrecord/__init__.py +13 -0
  2113. executorch/devtools/etrecord/_etrecord.py +776 -0
  2114. executorch/devtools/etrecord/tests/etrecord_test.py +1748 -0
  2115. executorch/devtools/inspector/__init__.py +24 -0
  2116. executorch/devtools/inspector/_inspector.py +1495 -0
  2117. executorch/devtools/inspector/_inspector_utils.py +1286 -0
  2118. executorch/devtools/inspector/_intermediate_output_capturer.py +62 -0
  2119. executorch/devtools/inspector/inspector_cli.py +76 -0
  2120. executorch/devtools/inspector/numerical_comparator/__init__.py +25 -0
  2121. executorch/devtools/inspector/numerical_comparator/l1_numerical_comparator.py +27 -0
  2122. executorch/devtools/inspector/numerical_comparator/mse_numerical_comparator.py +29 -0
  2123. executorch/devtools/inspector/numerical_comparator/numerical_comparator_base.py +26 -0
  2124. executorch/devtools/inspector/numerical_comparator/snr_numerical_comparator.py +39 -0
  2125. executorch/devtools/inspector/tests/event_blocks_test.py +657 -0
  2126. executorch/devtools/inspector/tests/inspector_test.py +1263 -0
  2127. executorch/devtools/inspector/tests/inspector_test_utils.py +189 -0
  2128. executorch/devtools/inspector/tests/inspector_utils_test.py +896 -0
  2129. executorch/devtools/inspector/tests/intermediate_output_capturer_test.py +101 -0
  2130. executorch/devtools/inspector/tests/l1_comparator_test.py +49 -0
  2131. executorch/devtools/inspector/tests/mse_comparator_test.py +49 -0
  2132. executorch/devtools/inspector/tests/snr_comparator_test.py +52 -0
  2133. executorch/devtools/scripts/generate_profiling_csv.py +62 -0
  2134. executorch/devtools/size_analysis_tool/size_analysis_tool.py +180 -0
  2135. executorch/devtools/size_analysis_tool/size_analysis_tool_test.py +101 -0
  2136. executorch/devtools/visualization/__init__.py +13 -0
  2137. executorch/devtools/visualization/visualization_utils.py +301 -0
  2138. executorch/devtools/visualization/visualization_utils_test.py +177 -0
  2139. executorch/examples/apple/coreml/llama/export.py +224 -0
  2140. executorch/examples/apple/coreml/llama/export_static_llm_coreml.py +504 -0
  2141. executorch/examples/apple/coreml/llama/llama_transformer.py +958 -0
  2142. executorch/examples/apple/coreml/llama/run.py +206 -0
  2143. executorch/examples/apple/coreml/llama/run_lookahead.py +284 -0
  2144. executorch/examples/apple/coreml/llama/run_static_llm.py +293 -0
  2145. executorch/examples/apple/coreml/llama/test.py +48 -0
  2146. executorch/examples/apple/coreml/llama/utils.py +116 -0
  2147. executorch/examples/apple/coreml/scripts/debugger_cli.py +181 -0
  2148. executorch/examples/apple/coreml/scripts/export.py +280 -0
  2149. executorch/examples/apple/coreml/scripts/extract_coreml_models.py +77 -0
  2150. executorch/examples/apple/coreml/scripts/inspector_cli.py +64 -0
  2151. executorch/examples/apple/coreml/scripts/inspector_utils.py +425 -0
  2152. executorch/examples/apple/mps/scripts/bench_utils.py +108 -0
  2153. executorch/examples/apple/mps/scripts/mps_example.py +230 -0
  2154. executorch/examples/cuda/scripts/__init__.py +0 -0
  2155. executorch/examples/cuda/scripts/export.py +107 -0
  2156. executorch/examples/llm_pte_finetuning/__init__.py +19 -0
  2157. executorch/examples/llm_pte_finetuning/llama3_config.yaml +96 -0
  2158. executorch/examples/llm_pte_finetuning/model_exporter.py +87 -0
  2159. executorch/examples/llm_pte_finetuning/model_loading_lib.py +143 -0
  2160. executorch/examples/llm_pte_finetuning/phi3_alpaca_code_config.yaml +44 -0
  2161. executorch/examples/llm_pte_finetuning/phi3_config.yaml +42 -0
  2162. executorch/examples/llm_pte_finetuning/qwen_05b_config.yaml +43 -0
  2163. executorch/examples/llm_pte_finetuning/runner.py +135 -0
  2164. executorch/examples/llm_pte_finetuning/training_lib.py +157 -0
  2165. executorch/examples/models/__init__.py +98 -0
  2166. executorch/examples/models/checkpoint.py +114 -0
  2167. executorch/examples/models/codegen/__init__.py +16 -0
  2168. executorch/examples/models/codegen/convert_weight.py +93 -0
  2169. executorch/examples/models/deeplab_v3/__init__.py +9 -0
  2170. executorch/examples/models/deeplab_v3/model.py +50 -0
  2171. executorch/examples/models/deepseek-r1-distill-llama-8B/config/deepseek_xnnpack_q8da4w.yaml +16 -0
  2172. executorch/examples/models/deit_tiny/__init__.py +8 -0
  2173. executorch/examples/models/deit_tiny/model.py +36 -0
  2174. executorch/examples/models/edsr/__init__.py +11 -0
  2175. executorch/examples/models/edsr/model.py +28 -0
  2176. executorch/examples/models/efficient_sam/__init__.py +11 -0
  2177. executorch/examples/models/efficient_sam/efficient_sam_core/build_efficient_sam.py +25 -0
  2178. executorch/examples/models/efficient_sam/efficient_sam_core/efficient_sam.py +316 -0
  2179. executorch/examples/models/efficient_sam/efficient_sam_core/efficient_sam_decoder.py +373 -0
  2180. executorch/examples/models/efficient_sam/efficient_sam_core/efficient_sam_encoder.py +261 -0
  2181. executorch/examples/models/efficient_sam/efficient_sam_core/mlp.py +31 -0
  2182. executorch/examples/models/efficient_sam/efficient_sam_core/two_way_transformer.py +268 -0
  2183. executorch/examples/models/efficient_sam/model.py +34 -0
  2184. executorch/examples/models/emformer_rnnt/__init__.py +17 -0
  2185. executorch/examples/models/emformer_rnnt/model.py +132 -0
  2186. executorch/examples/models/gemma/__init__.py +16 -0
  2187. executorch/examples/models/gemma/convert_weights.py +104 -0
  2188. executorch/examples/models/gemma2/__init__.py +19 -0
  2189. executorch/examples/models/gemma2/convert_weights.py +113 -0
  2190. executorch/examples/models/gemma3/__init__.py +16 -0
  2191. executorch/examples/models/gemma3/convert_weights.py +110 -0
  2192. executorch/examples/models/glm/__init__.py +16 -0
  2193. executorch/examples/models/glm/convert_weights.py +79 -0
  2194. executorch/examples/models/granite/__init__.py +16 -0
  2195. executorch/examples/models/granite/convert_weights.py +106 -0
  2196. executorch/examples/models/inception_v3/__init__.py +11 -0
  2197. executorch/examples/models/inception_v3/model.py +28 -0
  2198. executorch/examples/models/inception_v4/__init__.py +11 -0
  2199. executorch/examples/models/inception_v4/model.py +26 -0
  2200. executorch/examples/models/internvl3/__init__.py +16 -0
  2201. executorch/examples/models/internvl3/convert_weights.py +82 -0
  2202. executorch/examples/models/lfm2/__init__.py +10 -0
  2203. executorch/examples/models/lfm2/config/lfm2_xnnpack_fp32.yaml +12 -0
  2204. executorch/examples/models/lfm2/config/lfm2_xnnpack_q8da4w.yaml +15 -0
  2205. executorch/examples/models/lfm2/convert_weights.py +74 -0
  2206. executorch/examples/models/lfm2/short_conv.py +112 -0
  2207. executorch/examples/models/llama/__init__.py +11 -0
  2208. executorch/examples/models/llama/attention.py +536 -0
  2209. executorch/examples/models/llama/config/llama_bf16.yaml +7 -0
  2210. executorch/examples/models/llama/config/llama_q8da4w.yaml +11 -0
  2211. executorch/examples/models/llama/config/llama_xnnpack.yaml +17 -0
  2212. executorch/examples/models/llama/config/llama_xnnpack_qat.yaml +23 -0
  2213. executorch/examples/models/llama/config/llama_xnnpack_spinquant.yaml +22 -0
  2214. executorch/examples/models/llama/config/test_llm_config.py +104 -0
  2215. executorch/examples/models/llama/convert_weights.py +61 -0
  2216. executorch/examples/models/llama/eval_llama.py +38 -0
  2217. executorch/examples/models/llama/eval_llama_lib.py +395 -0
  2218. executorch/examples/models/llama/evaluate/__init__.py +11 -0
  2219. executorch/examples/models/llama/evaluate/eager_eval.py +87 -0
  2220. executorch/examples/models/llama/experimental/__init__.py +0 -0
  2221. executorch/examples/models/llama/experimental/generate.py +190 -0
  2222. executorch/examples/models/llama/experimental/load_gguf_q4_0.py +184 -0
  2223. executorch/examples/models/llama/experimental/subclass.py +413 -0
  2224. executorch/examples/models/llama/experimental/test_subclass.py +28 -0
  2225. executorch/examples/models/llama/export_llama.py +56 -0
  2226. executorch/examples/models/llama/export_llama_lib.py +1560 -0
  2227. executorch/examples/models/llama/fairseq2.py +63 -0
  2228. executorch/examples/models/llama/feed_forward.py +68 -0
  2229. executorch/examples/models/llama/hf_download.py +50 -0
  2230. executorch/examples/models/llama/install_requirement_helper.py +29 -0
  2231. executorch/examples/models/llama/llama_transformer.py +289 -0
  2232. executorch/examples/models/llama/lora.py +48 -0
  2233. executorch/examples/models/llama/model.py +378 -0
  2234. executorch/examples/models/llama/model_args.py +173 -0
  2235. executorch/examples/models/llama/norm.py +55 -0
  2236. executorch/examples/models/llama/rope.py +327 -0
  2237. executorch/examples/models/llama/runner/eager.py +142 -0
  2238. executorch/examples/models/llama/runner/generation.py +234 -0
  2239. executorch/examples/models/llama/runner/native.py +145 -0
  2240. executorch/examples/models/llama/source_transformation/__init__.py +0 -0
  2241. executorch/examples/models/llama/source_transformation/apply_spin_quant_r1_r2.py +202 -0
  2242. executorch/examples/models/llama/source_transformation/attention.py +223 -0
  2243. executorch/examples/models/llama/source_transformation/attention_sink.py +312 -0
  2244. executorch/examples/models/llama/source_transformation/custom_kv_cache.py +598 -0
  2245. executorch/examples/models/llama/source_transformation/lora.py +153 -0
  2246. executorch/examples/models/llama/source_transformation/pre_quantization.py +204 -0
  2247. executorch/examples/models/llama/source_transformation/prune_vocab.py +119 -0
  2248. executorch/examples/models/llama/source_transformation/quantize.py +910 -0
  2249. executorch/examples/models/llama/source_transformation/rms_norm.py +23 -0
  2250. executorch/examples/models/llama/source_transformation/rope.py +39 -0
  2251. executorch/examples/models/llama/source_transformation/sdpa.py +550 -0
  2252. executorch/examples/models/llama/source_transformation/spin_quant.py +88 -0
  2253. executorch/examples/models/llama/source_transformation/test_attention_sink.py +514 -0
  2254. executorch/examples/models/llama/source_transformation/test_quantized_kv_cache.py +126 -0
  2255. executorch/examples/models/llama/source_transformation/test_quantized_sdpa.py +167 -0
  2256. executorch/examples/models/llama/source_transformation/test_sdpa_with_quantized_kv_cache.py +97 -0
  2257. executorch/examples/models/llama/static_attention.py +1257 -0
  2258. executorch/examples/models/llama/tests/test_export_llama_lib.py +50 -0
  2259. executorch/examples/models/llama/tests/test_pre_quantization_transforms.py +188 -0
  2260. executorch/examples/models/llama/tests/test_replace_kv_cache.py +158 -0
  2261. executorch/examples/models/llama/tests/test_ring_attention.py +359 -0
  2262. executorch/examples/models/llama/tests/test_ring_kv_cache.py +492 -0
  2263. executorch/examples/models/llama/tests/test_simple_sdpa.py +66 -0
  2264. executorch/examples/models/llama/tests/test_static_attention.py +363 -0
  2265. executorch/examples/models/llama/tokenizer/tiktoken.py +224 -0
  2266. executorch/examples/models/llama3_2_vision/__init__.py +14 -0
  2267. executorch/examples/models/llama3_2_vision/preprocess/__init__.py +0 -0
  2268. executorch/examples/models/llama3_2_vision/preprocess/export_preprocess.py +45 -0
  2269. executorch/examples/models/llama3_2_vision/preprocess/model.py +72 -0
  2270. executorch/examples/models/llama3_2_vision/preprocess/test_preprocess.py +338 -0
  2271. executorch/examples/models/llama3_2_vision/runner/eager.py +59 -0
  2272. executorch/examples/models/llama3_2_vision/runner/exported.py +94 -0
  2273. executorch/examples/models/llama3_2_vision/runner/generation.py +102 -0
  2274. executorch/examples/models/llama3_2_vision/runner/native.py +143 -0
  2275. executorch/examples/models/llama3_2_vision/text_decoder/model.py +199 -0
  2276. executorch/examples/models/llama3_2_vision/text_decoder/test/__init__.py +0 -0
  2277. executorch/examples/models/llama3_2_vision/text_decoder/test/test_text_decoder.py +89 -0
  2278. executorch/examples/models/llama3_2_vision/vision_encoder/__init__.py +12 -0
  2279. executorch/examples/models/llama3_2_vision/vision_encoder/model.py +96 -0
  2280. executorch/examples/models/llama3_2_vision/vision_encoder/test/__init__.py +0 -0
  2281. executorch/examples/models/llama3_2_vision/vision_encoder/test/test_vision_encoder.py +46 -0
  2282. executorch/examples/models/llava/__init__.py +11 -0
  2283. executorch/examples/models/llava/export_llava.py +365 -0
  2284. executorch/examples/models/llava/model.py +415 -0
  2285. executorch/examples/models/llava/test/test_llava.py +151 -0
  2286. executorch/examples/models/llava/test/test_pte.py +106 -0
  2287. executorch/examples/models/lstm/__init__.py +12 -0
  2288. executorch/examples/models/lstm/model.py +31 -0
  2289. executorch/examples/models/mobilebert/__init__.py +11 -0
  2290. executorch/examples/models/mobilebert/model.py +31 -0
  2291. executorch/examples/models/mobilenet_v2/__init__.py +12 -0
  2292. executorch/examples/models/mobilenet_v2/model.py +73 -0
  2293. executorch/examples/models/mobilenet_v3/__init__.py +11 -0
  2294. executorch/examples/models/mobilenet_v3/model.py +30 -0
  2295. executorch/examples/models/model_base.py +47 -0
  2296. executorch/examples/models/model_factory.py +60 -0
  2297. executorch/examples/models/moshi/mimi/test_mimi.py +245 -0
  2298. executorch/examples/models/parakeet/export_parakeet_tdt.py +591 -0
  2299. executorch/examples/models/phi-3-mini/__init__.py +11 -0
  2300. executorch/examples/models/phi-3-mini-lora/export_model.py +144 -0
  2301. executorch/examples/models/phi_4_mini/__init__.py +16 -0
  2302. executorch/examples/models/phi_4_mini/config/phi_4_mini_xnnpack.yaml +12 -0
  2303. executorch/examples/models/phi_4_mini/convert_weights.py +151 -0
  2304. executorch/examples/models/qwen2_5/__init__.py +16 -0
  2305. executorch/examples/models/qwen2_5/config/qwen2_5_xnnpack_q8da4w.yaml +14 -0
  2306. executorch/examples/models/qwen2_5/convert_weights.py +90 -0
  2307. executorch/examples/models/qwen3/__init__.py +16 -0
  2308. executorch/examples/models/qwen3/config/qwen3_xnnpack.yaml +18 -0
  2309. executorch/examples/models/qwen3/config/qwen3_xnnpack_q8da4w.yaml +20 -0
  2310. executorch/examples/models/qwen3/convert_weights.py +140 -0
  2311. executorch/examples/models/resnet/__init__.py +12 -0
  2312. executorch/examples/models/resnet/model.py +48 -0
  2313. executorch/examples/models/smollm2/__init__.py +16 -0
  2314. executorch/examples/models/smollm2/convert_weights.py +84 -0
  2315. executorch/examples/models/smollm3/__init__.py +16 -0
  2316. executorch/examples/models/smollm3/convert_weights.py +112 -0
  2317. executorch/examples/models/smolvlm/__init__.py +16 -0
  2318. executorch/examples/models/smolvlm/convert_weights.py +77 -0
  2319. executorch/examples/models/stable_diffusion/__init__.py +9 -0
  2320. executorch/examples/models/stable_diffusion/model.py +193 -0
  2321. executorch/examples/models/test/__init__.py +0 -0
  2322. executorch/examples/models/test/test_export.py +161 -0
  2323. executorch/examples/models/torchvision_vit/__init__.py +11 -0
  2324. executorch/examples/models/torchvision_vit/model.py +28 -0
  2325. executorch/examples/models/toy_model/__init__.py +25 -0
  2326. executorch/examples/models/toy_model/model.py +143 -0
  2327. executorch/examples/models/wav2letter/__init__.py +11 -0
  2328. executorch/examples/models/wav2letter/model.py +29 -0
  2329. executorch/examples/models/yolo12/export_and_validate.py +397 -0
  2330. executorch/examples/nxp/experimental/cifar_net/cifar_net.py +270 -0
  2331. executorch/examples/xnnpack/__init__.py +51 -0
  2332. executorch/examples/xnnpack/aot_compiler.py +148 -0
  2333. executorch/examples/xnnpack/quantization/example.py +205 -0
  2334. executorch/examples/xnnpack/quantization/utils.py +42 -0
  2335. executorch/exir/__init__.py +57 -0
  2336. executorch/exir/_serialize/__init__.py +20 -0
  2337. executorch/exir/_serialize/_cord.py +49 -0
  2338. executorch/exir/_serialize/_dataclass.py +145 -0
  2339. executorch/exir/_serialize/_flatbuffer.py +357 -0
  2340. executorch/exir/_serialize/_named_data_store.py +222 -0
  2341. executorch/exir/_serialize/_program.py +767 -0
  2342. executorch/exir/_serialize/_serialize.py +123 -0
  2343. executorch/exir/_serialize/data_serializer.py +80 -0
  2344. executorch/exir/_serialize/padding.py +39 -0
  2345. executorch/exir/_serialize/program.fbs +489 -0
  2346. executorch/exir/_serialize/scalar_type.fbs +43 -0
  2347. executorch/exir/_serialize/test/__init__.py +0 -0
  2348. executorch/exir/_serialize/test/test_cord.py +63 -0
  2349. executorch/exir/_serialize/test/test_flatbuffer.py +331 -0
  2350. executorch/exir/_serialize/test/test_named_data_store.py +212 -0
  2351. executorch/exir/_serialize/test/test_program.py +1265 -0
  2352. executorch/exir/_serialize/test/test_serialize.py +289 -0
  2353. executorch/exir/_warnings.py +44 -0
  2354. executorch/exir/backend/backend_api.py +794 -0
  2355. executorch/exir/backend/backend_details.py +150 -0
  2356. executorch/exir/backend/canonical_partitioners/all_node_partitioner.py +55 -0
  2357. executorch/exir/backend/canonical_partitioners/config_partitioner.py +262 -0
  2358. executorch/exir/backend/canonical_partitioners/duplicate_constant_node_pass.py +156 -0
  2359. executorch/exir/backend/canonical_partitioners/duplicate_dequant_node_pass.py +111 -0
  2360. executorch/exir/backend/canonical_partitioners/group_partitioner.py +371 -0
  2361. executorch/exir/backend/canonical_partitioners/pattern_op_partitioner.py +185 -0
  2362. executorch/exir/backend/compile_spec_schema.py +17 -0
  2363. executorch/exir/backend/operator_support.py +127 -0
  2364. executorch/exir/backend/partitioner.py +114 -0
  2365. executorch/exir/backend/test/backend_with_compiler_demo.py +142 -0
  2366. executorch/exir/backend/test/backend_with_delegate_mapping_demo.py +210 -0
  2367. executorch/exir/backend/test/backend_with_named_data_map.py +115 -0
  2368. executorch/exir/backend/test/backend_with_preprocess_all_demo.py +297 -0
  2369. executorch/exir/backend/test/demo_backend.py +35 -0
  2370. executorch/exir/backend/test/demos/rpc/executor_backend_partitioner.py +77 -0
  2371. executorch/exir/backend/test/demos/rpc/executor_backend_preprocess.py +39 -0
  2372. executorch/exir/backend/test/demos/rpc/test_rpc.py +189 -0
  2373. executorch/exir/backend/test/demos/test_delegate_aten_mode.py +72 -0
  2374. executorch/exir/backend/test/hta_partitioner_demo.py +288 -0
  2375. executorch/exir/backend/test/op_partitioner_demo.py +266 -0
  2376. executorch/exir/backend/test/test_backend_with_named_data_map.py +85 -0
  2377. executorch/exir/backend/test/test_backends.py +1463 -0
  2378. executorch/exir/backend/test/test_backends_lifted.py +1326 -0
  2379. executorch/exir/backend/test/test_backends_nested.py +258 -0
  2380. executorch/exir/backend/test/test_compatibility.py +118 -0
  2381. executorch/exir/backend/test/test_debug_handle_map.py +143 -0
  2382. executorch/exir/backend/test/test_delegate_map_builder.py +257 -0
  2383. executorch/exir/backend/test/test_graph_partition.py +248 -0
  2384. executorch/exir/backend/test/test_group_partitioner.py +1674 -0
  2385. executorch/exir/backend/test/test_lowered_backend_module.py +207 -0
  2386. executorch/exir/backend/test/test_partitioner.py +731 -0
  2387. executorch/exir/backend/test/test_passes.py +48 -0
  2388. executorch/exir/backend/test/test_to_backend_multi_method.py +595 -0
  2389. executorch/exir/backend/test/test_utils.py +264 -0
  2390. executorch/exir/backend/utils.py +661 -0
  2391. executorch/exir/capture/__init__.py +28 -0
  2392. executorch/exir/capture/_capture.py +381 -0
  2393. executorch/exir/capture/_config.py +119 -0
  2394. executorch/exir/capture/_unlift.py +159 -0
  2395. executorch/exir/common.py +140 -0
  2396. executorch/exir/control_flow.py +204 -0
  2397. executorch/exir/debug_handle_utils.py +29 -0
  2398. executorch/exir/delegate.py +171 -0
  2399. executorch/exir/delegate.pyi +21 -0
  2400. executorch/exir/dialects/__init__.py +0 -0
  2401. executorch/exir/dialects/_ops.py +166 -0
  2402. executorch/exir/dialects/backend/_ops.py +123 -0
  2403. executorch/exir/dialects/backend/test/test_backend_ops.py +88 -0
  2404. executorch/exir/dialects/edge/_ops.py +405 -0
  2405. executorch/exir/dialects/edge/arg/model.py +238 -0
  2406. executorch/exir/dialects/edge/arg/type.py +46 -0
  2407. executorch/exir/dialects/edge/dtype/runner.py +122 -0
  2408. executorch/exir/dialects/edge/dtype/supported.py +47 -0
  2409. executorch/exir/dialects/edge/dtype/utils.py +36 -0
  2410. executorch/exir/dialects/edge/edge.yaml +8388 -0
  2411. executorch/exir/dialects/edge/op/api.py +86 -0
  2412. executorch/exir/dialects/edge/op/sample_input.py +1283 -0
  2413. executorch/exir/dialects/edge/op/test/test_api.py +51 -0
  2414. executorch/exir/dialects/edge/spec/gen.py +523 -0
  2415. executorch/exir/dialects/edge/spec/utils.py +328 -0
  2416. executorch/exir/dialects/edge/test/test_edge_ops.py +443 -0
  2417. executorch/exir/dialects/edge/test/test_edge_yaml.py +225 -0
  2418. executorch/exir/dialects/test/test_exir_dialect_ops.py +22 -0
  2419. executorch/exir/dim_order_utils.py +85 -0
  2420. executorch/exir/dynamic_shape.py +12 -0
  2421. executorch/exir/emit/__init__.py +11 -0
  2422. executorch/exir/emit/_emit_program.py +216 -0
  2423. executorch/exir/emit/_emitter.py +2071 -0
  2424. executorch/exir/emit/test/test_emit.py +2405 -0
  2425. executorch/exir/error.py +55 -0
  2426. executorch/exir/graph.py +86 -0
  2427. executorch/exir/graph_module.py +153 -0
  2428. executorch/exir/lowered_backend_module.py +966 -0
  2429. executorch/exir/memory.py +50 -0
  2430. executorch/exir/memory_planning.py +1250 -0
  2431. executorch/exir/operator/convert.py +307 -0
  2432. executorch/exir/operator/manip.py +89 -0
  2433. executorch/exir/operator/test/test_operator.py +84 -0
  2434. executorch/exir/operator/util.py +68 -0
  2435. executorch/exir/pass_base.py +808 -0
  2436. executorch/exir/pass_manager.py +78 -0
  2437. executorch/exir/passes/__init__.py +528 -0
  2438. executorch/exir/passes/_quant_patterns_and_replacements.py +1563 -0
  2439. executorch/exir/passes/const_prop_pass.py +84 -0
  2440. executorch/exir/passes/constant_prop_pass.py +402 -0
  2441. executorch/exir/passes/debug_handle_generator_pass.py +81 -0
  2442. executorch/exir/passes/dim_order_ops_registry.py +90 -0
  2443. executorch/exir/passes/dynamic_shape_prop_pass.py +301 -0
  2444. executorch/exir/passes/executorch_prim_ops_registry.py +166 -0
  2445. executorch/exir/passes/external_constants_pass.py +113 -0
  2446. executorch/exir/passes/init_mutable_pass.py +32 -0
  2447. executorch/exir/passes/insert_write_back_for_buffers_pass.py +185 -0
  2448. executorch/exir/passes/memory_format_ops_pass.py +119 -0
  2449. executorch/exir/passes/memory_planning_pass.py +315 -0
  2450. executorch/exir/passes/normalize_transpose_pass.py +24 -0
  2451. executorch/exir/passes/normalize_view_copy_base_pass.py +62 -0
  2452. executorch/exir/passes/pass_registry.py +89 -0
  2453. executorch/exir/passes/prune_empty_tensors_pass.py +67 -0
  2454. executorch/exir/passes/quant_fusion_pass.py +174 -0
  2455. executorch/exir/passes/quantize_io_pass.py +414 -0
  2456. executorch/exir/passes/reinplace.py +103 -0
  2457. executorch/exir/passes/remove_graph_asserts_pass.py +62 -0
  2458. executorch/exir/passes/remove_mixed_type_operators.py +95 -0
  2459. executorch/exir/passes/remove_noop_pass.py +123 -0
  2460. executorch/exir/passes/remove_unused_parameters_pass.py +55 -0
  2461. executorch/exir/passes/replace_aten_with_edge_pass.py +59 -0
  2462. executorch/exir/passes/replace_broken_ops_with_function_ops_pass.py +42 -0
  2463. executorch/exir/passes/replace_edge_with_backend_pass.py +56 -0
  2464. executorch/exir/passes/replace_sym_size_op_pass.py +35 -0
  2465. executorch/exir/passes/replace_view_copy_with_view_pass.py +325 -0
  2466. executorch/exir/passes/scalar_to_tensor_pass.py +32 -0
  2467. executorch/exir/passes/spec_prop_pass.py +123 -0
  2468. executorch/exir/passes/sym_shape_eval_pass.py +289 -0
  2469. executorch/exir/passes/sym_to_tensor_pass.py +64 -0
  2470. executorch/exir/passes/weights_to_outputs_pass.py +88 -0
  2471. executorch/exir/print_program.py +420 -0
  2472. executorch/exir/program/__init__.py +32 -0
  2473. executorch/exir/program/_fake_program.py +67 -0
  2474. executorch/exir/program/_program.py +1995 -0
  2475. executorch/exir/program/test/__init__.py +0 -0
  2476. executorch/exir/program/test/test_fake_program.py +78 -0
  2477. executorch/exir/program/test/test_program.py +922 -0
  2478. executorch/exir/scalar_type.py +38 -0
  2479. executorch/exir/schema.py +308 -0
  2480. executorch/exir/serde/__init__.py +0 -0
  2481. executorch/exir/serde/export_serialize.py +2872 -0
  2482. executorch/exir/serde/schema.py +406 -0
  2483. executorch/exir/serde/schema_check.py +293 -0
  2484. executorch/exir/serde/serialize.py +838 -0
  2485. executorch/exir/serde/union.py +77 -0
  2486. executorch/exir/sym_util.py +95 -0
  2487. executorch/exir/tensor.py +392 -0
  2488. executorch/exir/tensor_layout.py +39 -0
  2489. executorch/exir/tests/asr_joiner.py +82 -0
  2490. executorch/exir/tests/common.py +96 -0
  2491. executorch/exir/tests/control_flow_models.py +105 -0
  2492. executorch/exir/tests/dynamic_shape_models.py +51 -0
  2493. executorch/exir/tests/models.py +576 -0
  2494. executorch/exir/tests/test_arg_validator.py +72 -0
  2495. executorch/exir/tests/test_capture.py +29 -0
  2496. executorch/exir/tests/test_common.py +81 -0
  2497. executorch/exir/tests/test_delegate.py +308 -0
  2498. executorch/exir/tests/test_dim_order_utils.py +49 -0
  2499. executorch/exir/tests/test_dynamic_shape_propagation.py +174 -0
  2500. executorch/exir/tests/test_error.py +19 -0
  2501. executorch/exir/tests/test_extract_io_quant_params.py +93 -0
  2502. executorch/exir/tests/test_joint_graph.py +124 -0
  2503. executorch/exir/tests/test_memory_format_ops_pass.py +443 -0
  2504. executorch/exir/tests/test_memory_format_ops_pass_aten.py +142 -0
  2505. executorch/exir/tests/test_memory_format_ops_pass_utils.py +266 -0
  2506. executorch/exir/tests/test_memory_planning.py +1135 -0
  2507. executorch/exir/tests/test_op_convert.py +88 -0
  2508. executorch/exir/tests/test_pass_infra.py +179 -0
  2509. executorch/exir/tests/test_passes.py +2332 -0
  2510. executorch/exir/tests/test_print_program.py +54 -0
  2511. executorch/exir/tests/test_prune_empty_tensors_pass.py +77 -0
  2512. executorch/exir/tests/test_quant_fusion_pass.py +528 -0
  2513. executorch/exir/tests/test_quantization.py +120 -0
  2514. executorch/exir/tests/test_quantize_io_pass.py +156 -0
  2515. executorch/exir/tests/test_reinplace_pass.py +124 -0
  2516. executorch/exir/tests/test_remove_unused_parameters_pass.py +205 -0
  2517. executorch/exir/tests/test_remove_view_copy.py +234 -0
  2518. executorch/exir/tests/test_serde.py +352 -0
  2519. executorch/exir/tests/test_tensor.py +341 -0
  2520. executorch/exir/tests/test_tracer.py +497 -0
  2521. executorch/exir/tests/test_verification.py +275 -0
  2522. executorch/exir/tests/test_warnings.py +169 -0
  2523. executorch/exir/tests/transformer.py +122 -0
  2524. executorch/exir/tracer.py +803 -0
  2525. executorch/exir/types.py +18 -0
  2526. executorch/exir/verification/arg_validator.py +140 -0
  2527. executorch/exir/verification/dev_html.py +68 -0
  2528. executorch/exir/verification/interpreter.py +425 -0
  2529. executorch/exir/verification/test/test_verifier.py +177 -0
  2530. executorch/exir/verification/verifier.py +352 -0
  2531. executorch/exir/version.py +9 -0
  2532. executorch/exir/wrap.py +32 -0
  2533. executorch/export/__init__.py +40 -0
  2534. executorch/export/export.py +696 -0
  2535. executorch/export/recipe.py +328 -0
  2536. executorch/export/recipe_provider.py +60 -0
  2537. executorch/export/recipe_registry.py +86 -0
  2538. executorch/export/stages.py +686 -0
  2539. executorch/export/target_recipes.py +185 -0
  2540. executorch/export/tests/test_executorch_export.py +34 -0
  2541. executorch/export/tests/test_export_recipe.py +131 -0
  2542. executorch/export/tests/test_export_session.py +973 -0
  2543. executorch/export/tests/test_export_stages.py +534 -0
  2544. executorch/export/tests/test_recipe_provider.py +98 -0
  2545. executorch/export/tests/test_recipe_registry.py +139 -0
  2546. executorch/export/tests/test_target_recipes.py +539 -0
  2547. executorch/export/types.py +22 -0
  2548. executorch/export/utils.py +51 -0
  2549. executorch/extension/audio/mel_spectrogram.py +279 -0
  2550. executorch/extension/export_util/__init__.py +13 -0
  2551. executorch/extension/export_util/utils.py +147 -0
  2552. executorch/extension/flat_tensor/__init__.py +0 -0
  2553. executorch/extension/flat_tensor/serialize/__init__.py +0 -0
  2554. executorch/extension/flat_tensor/serialize/flat_tensor.fbs +73 -0
  2555. executorch/extension/flat_tensor/serialize/flat_tensor_schema.py +34 -0
  2556. executorch/extension/flat_tensor/serialize/scalar_type.fbs +38 -0
  2557. executorch/extension/flat_tensor/serialize/serialize.py +446 -0
  2558. executorch/extension/flat_tensor/test/test_serialize.py +326 -0
  2559. executorch/extension/gguf_util/convert_main.py +53 -0
  2560. executorch/extension/gguf_util/converter.py +27 -0
  2561. executorch/extension/gguf_util/converters/llama_converter.py +123 -0
  2562. executorch/extension/gguf_util/load_gguf.py +103 -0
  2563. executorch/extension/llm/custom_ops/__init__.py +0 -0
  2564. executorch/extension/llm/custom_ops/custom_ops.py +495 -0
  2565. executorch/extension/llm/custom_ops/custom_ops_aot_lib.dll +0 -0
  2566. executorch/extension/llm/custom_ops/model_sharding.py +117 -0
  2567. executorch/extension/llm/custom_ops/op_tile_crop_aot.py +38 -0
  2568. executorch/extension/llm/custom_ops/preprocess_custom_ops.py +69 -0
  2569. executorch/extension/llm/custom_ops/spinquant/special_hadamard_code_gen.py +279 -0
  2570. executorch/extension/llm/custom_ops/spinquant/third-party/FFHT/example.py +20 -0
  2571. executorch/extension/llm/custom_ops/spinquant/third-party/FFHT/gen.py +869 -0
  2572. executorch/extension/llm/custom_ops/test_preprocess_custom_ops.py +34 -0
  2573. executorch/extension/llm/custom_ops/test_quantized_sdpa.py +550 -0
  2574. executorch/extension/llm/custom_ops/test_sdpa_with_kv_cache.py +651 -0
  2575. executorch/extension/llm/custom_ops/test_update_cache.py +433 -0
  2576. executorch/extension/llm/custom_ops/test_update_cross_attn_cache.py +284 -0
  2577. executorch/extension/llm/export/__init__.py +11 -0
  2578. executorch/extension/llm/export/builder.py +535 -0
  2579. executorch/extension/llm/export/config/llm_config.py +727 -0
  2580. executorch/extension/llm/export/export_llm.py +106 -0
  2581. executorch/extension/llm/export/export_passes.py +202 -0
  2582. executorch/extension/llm/export/partitioner_lib.py +238 -0
  2583. executorch/extension/llm/export/quantizer_lib.py +322 -0
  2584. executorch/extension/llm/export/test/__init__.py +0 -0
  2585. executorch/extension/llm/export/test/test_builder.py +118 -0
  2586. executorch/extension/llm/export/test/test_export_llm.py +155 -0
  2587. executorch/extension/llm/export/test_export_passes.py +209 -0
  2588. executorch/extension/llm/modules/__init__.py +24 -0
  2589. executorch/extension/llm/modules/_position_embeddings.py +729 -0
  2590. executorch/extension/llm/modules/attention.py +415 -0
  2591. executorch/extension/llm/modules/kv_cache.py +151 -0
  2592. executorch/extension/llm/modules/test/__init__.py +0 -0
  2593. executorch/extension/llm/modules/test/test_attention.py +353 -0
  2594. executorch/extension/llm/modules/test/test_kv_cache.py +218 -0
  2595. executorch/extension/llm/modules/test/test_position_embeddings.py +230 -0
  2596. executorch/extension/llm/runner/__init__.py +235 -0
  2597. executorch/extension/llm/runner/_llm_runner.pyi +523 -0
  2598. executorch/extension/llm/runner/test/test_runner_pybindings.py +258 -0
  2599. executorch/extension/llm/tokenizers/pytorch_tokenizers/__init__.py +63 -0
  2600. executorch/extension/llm/tokenizers/pytorch_tokenizers/constants.py +31 -0
  2601. executorch/extension/llm/tokenizers/pytorch_tokenizers/hf_tokenizer.py +57 -0
  2602. executorch/extension/llm/tokenizers/pytorch_tokenizers/llama2c.py +111 -0
  2603. executorch/extension/llm/tokenizers/pytorch_tokenizers/tiktoken.py +198 -0
  2604. executorch/extension/llm/tokenizers/pytorch_tokenizers/tools/__init__.py +0 -0
  2605. executorch/extension/llm/tokenizers/pytorch_tokenizers/tools/llama2c/__init__.py +0 -0
  2606. executorch/extension/llm/tokenizers/pytorch_tokenizers/tools/llama2c/convert.py +49 -0
  2607. executorch/extension/llm/tokenizers/setup.py +199 -0
  2608. executorch/extension/llm/tokenizers/test/test_hf_tokenizer.py +83 -0
  2609. executorch/extension/llm/tokenizers/test/test_python_bindings.py +131 -0
  2610. executorch/extension/llm/tokenizers/test/test_tekken_python.py +453 -0
  2611. executorch/extension/llm/tokenizers/test/test_tiktoken.py +49 -0
  2612. executorch/extension/llm/tokenizers/third-party/abseil-cpp/absl/abseil.podspec.gen.py +243 -0
  2613. executorch/extension/llm/tokenizers/third-party/abseil-cpp/absl/copts/copts.py +194 -0
  2614. executorch/extension/llm/tokenizers/third-party/abseil-cpp/absl/copts/generate_copts.py +109 -0
  2615. executorch/extension/llm/tokenizers/third-party/abseil-cpp/conanfile.py +51 -0
  2616. executorch/extension/llm/tokenizers/third-party/abseil-cpp/create_lts.py +139 -0
  2617. executorch/extension/llm/tokenizers/third-party/json/docs/mkdocs/scripts/check_structure.py +179 -0
  2618. executorch/extension/llm/tokenizers/third-party/json/tests/thirdparty/imapdl/filterbr.py +109 -0
  2619. executorch/extension/llm/tokenizers/third-party/json/tools/amalgamate/amalgamate.py +299 -0
  2620. executorch/extension/llm/tokenizers/third-party/json/tools/gdb_pretty_printer/nlohmann-json.py +32 -0
  2621. executorch/extension/llm/tokenizers/third-party/json/tools/generate_natvis/generate_natvis.py +41 -0
  2622. executorch/extension/llm/tokenizers/third-party/json/tools/serve_header/serve_header.py +410 -0
  2623. executorch/extension/llm/tokenizers/third-party/pcre2/maint/GenerateCommon.py +354 -0
  2624. executorch/extension/llm/tokenizers/third-party/pcre2/maint/GenerateTest.py +186 -0
  2625. executorch/extension/llm/tokenizers/third-party/pcre2/maint/GenerateUcd.py +999 -0
  2626. executorch/extension/llm/tokenizers/third-party/pcre2/maint/GenerateUcpHeader.py +98 -0
  2627. executorch/extension/llm/tokenizers/third-party/pcre2/maint/GenerateUcpTables.py +203 -0
  2628. executorch/extension/llm/tokenizers/third-party/pcre2/maint/UpdateCommon.py +31 -0
  2629. executorch/extension/llm/tokenizers/third-party/pcre2/maint/UpdateDates.py +59 -0
  2630. executorch/extension/llm/tokenizers/third-party/pcre2/maint/UpdateRelease.py +29 -0
  2631. executorch/extension/llm/tokenizers/third-party/re2/benchlog/benchplot.py +98 -0
  2632. executorch/extension/llm/tokenizers/third-party/re2/python/re2.py +583 -0
  2633. executorch/extension/llm/tokenizers/third-party/re2/python/re2_test.py +489 -0
  2634. executorch/extension/llm/tokenizers/third-party/re2/python/setup.py +158 -0
  2635. executorch/extension/llm/tokenizers/third-party/re2/python/toolchains/generate.py +98 -0
  2636. executorch/extension/llm/tokenizers/third-party/re2/re2/make_unicode_casefold.py +151 -0
  2637. executorch/extension/llm/tokenizers/third-party/re2/re2/make_unicode_groups.py +117 -0
  2638. executorch/extension/llm/tokenizers/third-party/re2/re2/unicode.py +284 -0
  2639. executorch/extension/llm/tokenizers/third-party/sentencepiece/python/setup.py +215 -0
  2640. executorch/extension/llm/tokenizers/third-party/sentencepiece/python/src/sentencepiece/__init__.py +1224 -0
  2641. executorch/extension/llm/tokenizers/third-party/sentencepiece/python/src/sentencepiece/_version.py +1 -0
  2642. executorch/extension/llm/tokenizers/third-party/sentencepiece/python/src/sentencepiece/sentencepiece_model_pb2.py +44 -0
  2643. executorch/extension/llm/tokenizers/third-party/sentencepiece/python/src/sentencepiece/sentencepiece_pb2.py +30 -0
  2644. executorch/extension/llm/tokenizers/third-party/sentencepiece/python/test/__init__.py +0 -0
  2645. executorch/extension/llm/tokenizers/third-party/sentencepiece/python/test/sentencepiece_test.py +937 -0
  2646. executorch/extension/module/test/resources/gen_bundled_program.py +99 -0
  2647. executorch/extension/pybindings/_portable_lib.cp313-win_amd64.pyd +0 -0
  2648. executorch/extension/pybindings/portable_lib.py +82 -0
  2649. executorch/extension/pybindings/pybindings.pyi +299 -0
  2650. executorch/extension/pybindings/test/make_test.py +186 -0
  2651. executorch/extension/pybindings/test/test_backend_pybinding.py +27 -0
  2652. executorch/extension/pybindings/test/test_pybindings.py +735 -0
  2653. executorch/extension/pytree/__init__.py +54 -0
  2654. executorch/extension/pytree/test/test.py +331 -0
  2655. executorch/extension/training/__init__.py +22 -0
  2656. executorch/extension/training/examples/CIFAR/data_utils.py +389 -0
  2657. executorch/extension/training/examples/CIFAR/export.py +220 -0
  2658. executorch/extension/training/examples/CIFAR/main.py +188 -0
  2659. executorch/extension/training/examples/CIFAR/model.py +73 -0
  2660. executorch/extension/training/examples/CIFAR/train_utils.py +622 -0
  2661. executorch/extension/training/examples/XOR/export_model.py +74 -0
  2662. executorch/extension/training/examples/XOR/model.py +34 -0
  2663. executorch/extension/training/examples/XOR/test/test_export.py +19 -0
  2664. executorch/extension/training/pybindings/_training_lib.pyi +45 -0
  2665. executorch/extension/training/pybindings/_training_module.py +86 -0
  2666. executorch/extension/training/pybindings/test/test.py +67 -0
  2667. executorch/extension/wasm/test/test_model.py +34 -0
  2668. executorch/include/executorch/extension/kernel_util/make_boxed_from_unboxed_functor.h +260 -0
  2669. executorch/include/executorch/extension/kernel_util/meta_programming.h +119 -0
  2670. executorch/include/executorch/extension/kernel_util/type_list.h +145 -0
  2671. executorch/include/executorch/extension/tensor/tensor.h +14 -0
  2672. executorch/include/executorch/extension/tensor/tensor_accessor.h +218 -0
  2673. executorch/include/executorch/extension/tensor/tensor_ptr.h +485 -0
  2674. executorch/include/executorch/extension/tensor/tensor_ptr_maker.h +687 -0
  2675. executorch/include/executorch/extension/threadpool/cpuinfo_utils.h +24 -0
  2676. executorch/include/executorch/extension/threadpool/threadpool.h +124 -0
  2677. executorch/include/executorch/extension/threadpool/threadpool_guard.h +37 -0
  2678. executorch/include/executorch/runtime/core/array_ref.h +262 -0
  2679. executorch/include/executorch/runtime/core/data_loader.h +141 -0
  2680. executorch/include/executorch/runtime/core/defines.h +20 -0
  2681. executorch/include/executorch/runtime/core/error.h +257 -0
  2682. executorch/include/executorch/runtime/core/evalue.h +608 -0
  2683. executorch/include/executorch/runtime/core/event_tracer.h +592 -0
  2684. executorch/include/executorch/runtime/core/event_tracer_hooks.h +340 -0
  2685. executorch/include/executorch/runtime/core/event_tracer_hooks_delegate.h +204 -0
  2686. executorch/include/executorch/runtime/core/exec_aten/exec_aten.h +175 -0
  2687. executorch/include/executorch/runtime/core/exec_aten/testing_util/tensor_factory.h +1133 -0
  2688. executorch/include/executorch/runtime/core/exec_aten/testing_util/tensor_util.h +378 -0
  2689. executorch/include/executorch/runtime/core/exec_aten/util/dim_order_util.h +278 -0
  2690. executorch/include/executorch/runtime/core/exec_aten/util/scalar_type_util.h +1430 -0
  2691. executorch/include/executorch/runtime/core/exec_aten/util/tensor_dimension_limit.h +21 -0
  2692. executorch/include/executorch/runtime/core/exec_aten/util/tensor_shape_to_c_string.h +68 -0
  2693. executorch/include/executorch/runtime/core/exec_aten/util/tensor_util.h +1415 -0
  2694. executorch/include/executorch/runtime/core/freeable_buffer.h +218 -0
  2695. executorch/include/executorch/runtime/core/function_ref.h +108 -0
  2696. executorch/include/executorch/runtime/core/hierarchical_allocator.h +125 -0
  2697. executorch/include/executorch/runtime/core/memory_allocator.h +233 -0
  2698. executorch/include/executorch/runtime/core/named_data_map.h +77 -0
  2699. executorch/include/executorch/runtime/core/portable_type/bfloat16.h +27 -0
  2700. executorch/include/executorch/runtime/core/portable_type/bfloat16_math.h +14 -0
  2701. executorch/include/executorch/runtime/core/portable_type/bits_types.h +83 -0
  2702. executorch/include/executorch/runtime/core/portable_type/c10/c10/macros/Export.h +1 -0
  2703. executorch/include/executorch/runtime/core/portable_type/c10/c10/macros/Macros.h +1 -0
  2704. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-inl.h +1 -0
  2705. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-math.h +299 -0
  2706. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16.h +1 -0
  2707. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/Half-inl.h +1 -0
  2708. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/Half.h +8 -0
  2709. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/TypeSafeSignMath.h +1 -0
  2710. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/bit_cast.h +1 -0
  2711. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/complex.h +78 -0
  2712. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/complex_math.h +406 -0
  2713. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/complex_utils.h +46 -0
  2714. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/floating_point_utils.h +1 -0
  2715. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/irange.h +123 -0
  2716. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/llvmMathExtras.h +905 -0
  2717. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/overflows.h +100 -0
  2718. executorch/include/executorch/runtime/core/portable_type/c10/c10/util/safe_numerics.h +114 -0
  2719. executorch/include/executorch/runtime/core/portable_type/c10/torch/headeronly/macros/Export.h +153 -0
  2720. executorch/include/executorch/runtime/core/portable_type/c10/torch/headeronly/macros/Macros.h +694 -0
  2721. executorch/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/BFloat16.h +480 -0
  2722. executorch/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/Half.h +788 -0
  2723. executorch/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/TypeSafeSignMath.h +148 -0
  2724. executorch/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/bit_cast.h +50 -0
  2725. executorch/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/complex.h +616 -0
  2726. executorch/include/executorch/runtime/core/portable_type/c10/torch/headeronly/util/floating_point_utils.h +38 -0
  2727. executorch/include/executorch/runtime/core/portable_type/complex.h +21 -0
  2728. executorch/include/executorch/runtime/core/portable_type/device.h +74 -0
  2729. executorch/include/executorch/runtime/core/portable_type/half.h +27 -0
  2730. executorch/include/executorch/runtime/core/portable_type/optional.h +36 -0
  2731. executorch/include/executorch/runtime/core/portable_type/qint_types.h +83 -0
  2732. executorch/include/executorch/runtime/core/portable_type/scalar.h +123 -0
  2733. executorch/include/executorch/runtime/core/portable_type/scalar_type.h +154 -0
  2734. executorch/include/executorch/runtime/core/portable_type/string_view.h +29 -0
  2735. executorch/include/executorch/runtime/core/portable_type/tensor.h +175 -0
  2736. executorch/include/executorch/runtime/core/portable_type/tensor_impl.h +304 -0
  2737. executorch/include/executorch/runtime/core/portable_type/tensor_options.h +60 -0
  2738. executorch/include/executorch/runtime/core/result.h +268 -0
  2739. executorch/include/executorch/runtime/core/span.h +110 -0
  2740. executorch/include/executorch/runtime/core/tag.h +90 -0
  2741. executorch/include/executorch/runtime/core/tensor_layout.h +93 -0
  2742. executorch/include/executorch/runtime/core/tensor_shape_dynamism.h +39 -0
  2743. executorch/include/executorch/runtime/core/testing_util/error_matchers.h +303 -0
  2744. executorch/include/executorch/runtime/kernel/kernel_includes.h +23 -0
  2745. executorch/include/executorch/runtime/kernel/kernel_runtime_context.h +131 -0
  2746. executorch/include/executorch/runtime/kernel/operator_registry.h +298 -0
  2747. executorch/include/executorch/runtime/kernel/test/test_util.h +40 -0
  2748. executorch/include/executorch/runtime/kernel/thread_parallel_interface.h +107 -0
  2749. executorch/include/executorch/runtime/platform/abort.h +36 -0
  2750. executorch/include/executorch/runtime/platform/assert.h +124 -0
  2751. executorch/include/executorch/runtime/platform/clock.h +43 -0
  2752. executorch/include/executorch/runtime/platform/compat_unistd.h +75 -0
  2753. executorch/include/executorch/runtime/platform/compiler.h +214 -0
  2754. executorch/include/executorch/runtime/platform/log.h +216 -0
  2755. executorch/include/executorch/runtime/platform/platform.h +276 -0
  2756. executorch/include/executorch/runtime/platform/profiler.h +289 -0
  2757. executorch/include/executorch/runtime/platform/runtime.h +35 -0
  2758. executorch/include/executorch/runtime/platform/system.h +49 -0
  2759. executorch/include/executorch/runtime/platform/test/pal_spy.h +86 -0
  2760. executorch/include/executorch/runtime/platform/test/stub_platform.h +76 -0
  2761. executorch/include/executorch/runtime/platform/types.h +24 -0
  2762. executorch/kernels/quantized/__init__.py +21 -0
  2763. executorch/kernels/quantized/quantized.yaml +113 -0
  2764. executorch/kernels/quantized/quantized_ops_aot_lib.dll +0 -0
  2765. executorch/kernels/quantized/test/supported_features_def.yaml +1 -0
  2766. executorch/kernels/quantized/test/test_out_variants.py +100 -0
  2767. executorch/kernels/quantized/test/test_quant_dequant_per_token.py +149 -0
  2768. executorch/runtime/__init__.py +334 -0
  2769. executorch/runtime/kernel/test/functions.yaml +13 -0
  2770. executorch/runtime/test/test_runtime.py +106 -0
  2771. executorch/runtime/test/test_runtime_etdump_gen.py +163 -0
  2772. executorch/schema/program.fbs +489 -0
  2773. executorch/schema/scalar_type.fbs +43 -0
  2774. executorch/share/cmake/executorch-config.cmake +77 -0
  2775. executorch/util/activation_memory_profiler.py +177 -0
  2776. executorch/util/collect_env.py +748 -0
  2777. executorch/util/python_profiler.py +96 -0
  2778. executorch/version.py +4 -0
  2779. executorch-1.1.0.dist-info/METADATA +87 -0
  2780. executorch-1.1.0.dist-info/RECORD +2784 -0
  2781. executorch-1.1.0.dist-info/WHEEL +5 -0
  2782. executorch-1.1.0.dist-info/entry_points.txt +2 -0
  2783. executorch-1.1.0.dist-info/licenses/LICENSE +37 -0
  2784. executorch-1.1.0.dist-info/top_level.txt +7 -0
@@ -0,0 +1,2841 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ # All rights reserved.
3
+ #
4
+ # This source code is licensed under the BSD-style license found in the
5
+ # LICENSE file in the root directory of this source tree.
6
+
7
+ # pyre-strict
8
+
9
+ from math import prod
10
+ from typing import Callable, Optional, Tuple
11
+
12
+ import torch
13
+ from executorch.backends.cadence.aot.utils import (
14
+ get_conv1d_output_size,
15
+ get_conv2d_output_size,
16
+ get_im2row_output_size,
17
+ )
18
+ from executorch.exir.scalar_type import ScalarType
19
+ from torch._meta_registrations import _linalg_svd_meta
20
+ from torch.library import Library, register_fake
21
+
22
+ lib = Library("cadence", "DEF")
23
+
24
+ # Track meta kernels that have been registered
25
+ _REGISTERED_META_KERNELS: set[str] = set()
26
+
27
+
28
+ # Original register_fake function to use for registrations
29
+ _register_fake_original = register_fake
30
+
31
+ _OUTPUTS_TYPE = torch.Tensor | tuple[torch.Tensor, ...]
32
+
33
+
34
+ def _validate_ref_impl_exists() -> None:
35
+ """
36
+ Validates that all registered meta kernels have corresponding reference implementations.
37
+ This is called at module initialization time after both files have been imported.
38
+ """
39
+
40
+ # Import here after module initialization to ensure ref_implementations has been loaded
41
+ from executorch.backends.cadence.aot.ref_implementations import (
42
+ get_registered_ref_implementations,
43
+ )
44
+
45
+ # If reference implementation should not be in
46
+ # executorch.backends.cadence.aot.ref_implementations, add here
47
+ _SKIP_OPS = {
48
+ "cadence::roi_align_box_processor",
49
+ }
50
+
51
+ ref_impls = get_registered_ref_implementations()
52
+ error_impls = []
53
+ for op_name in _REGISTERED_META_KERNELS:
54
+ # Strip the namespace prefix if present (e.g., "cadence::" -> "")
55
+ op_name_clean = op_name.split("::")[-1] if "::" in op_name else op_name
56
+
57
+ if op_name_clean not in ref_impls:
58
+ if op_name not in _SKIP_OPS:
59
+ error_impls.append(op_name)
60
+
61
+ if error_impls:
62
+ error_msg = (
63
+ f"The following {len(error_impls)} meta kernel registrations are missing reference implementations:\n"
64
+ + "\n".join(f" - {op}" for op in error_impls)
65
+ + "\n\nPlease add reference implementations in ref_implementations.py using "
66
+ + "@impl_tracked(m, '<op_name>')."
67
+ )
68
+
69
+ raise RuntimeError(error_msg)
70
+
71
+
72
+ # Wrap register_fake to track all registrations
73
+ def register_fake(
74
+ op_name: str,
75
+ ) -> Callable[[Callable[..., _OUTPUTS_TYPE]], Callable[..., _OUTPUTS_TYPE]]:
76
+ """
77
+ Wrapped version of register_fake that tracks all meta kernel registrations.
78
+ This enables validation that all meta kernels have reference implementations.
79
+ """
80
+ global _REGISTERED_META_KERNELS
81
+ _REGISTERED_META_KERNELS.add(op_name)
82
+ return _register_fake_original(op_name)
83
+
84
+
85
+ lib.define(
86
+ "quantize_per_tensor(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
87
+ )
88
+ lib.define(
89
+ "quantize_per_tensor.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
90
+ )
91
+
92
+ lib.define(
93
+ "quantize_per_tensor_asym8s(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
94
+ )
95
+ lib.define(
96
+ "quantize_per_tensor_asym8s.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
97
+ )
98
+
99
+ lib.define(
100
+ "quantize_per_tensor_asym8u(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
101
+ )
102
+ lib.define(
103
+ "quantize_per_tensor_asym8u.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
104
+ )
105
+
106
+ lib.define(
107
+ "quantize_per_tensor_asym16s(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
108
+ )
109
+ lib.define(
110
+ "quantize_per_tensor_asym16s.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
111
+ )
112
+
113
+ lib.define(
114
+ "quantize_per_tensor_asym16u(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
115
+ )
116
+ lib.define(
117
+ "quantize_per_tensor_asym16u.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
118
+ )
119
+
120
+ lib.define(
121
+ "quantize_per_tensor_asym32s(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
122
+ )
123
+ lib.define(
124
+ "quantize_per_tensor_asym32s.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
125
+ )
126
+
127
+ lib.define(
128
+ "dequantize_per_tensor(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
129
+ )
130
+ lib.define(
131
+ "dequantize_per_tensor.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
132
+ )
133
+ lib.define(
134
+ "dequantize_per_tensor_asym8s(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
135
+ )
136
+ lib.define(
137
+ "dequantize_per_tensor_asym8s.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
138
+ )
139
+ lib.define(
140
+ "dequantize_per_tensor_asym8u(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
141
+ )
142
+ lib.define(
143
+ "dequantize_per_tensor_asym8u.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
144
+ )
145
+ lib.define(
146
+ "dequantize_per_tensor_asym16s(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
147
+ )
148
+ lib.define(
149
+ "dequantize_per_tensor_asym16s.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
150
+ )
151
+ lib.define(
152
+ "dequantize_per_tensor_asym16u(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
153
+ )
154
+ lib.define(
155
+ "dequantize_per_tensor_asym16u.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
156
+ )
157
+
158
+ lib.define(
159
+ "dequantize_per_tensor_asym32s(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype) -> (Tensor Z)"
160
+ )
161
+ lib.define(
162
+ "dequantize_per_tensor_asym32s.out(Tensor input, float scale, int zero_point, int quant_min, int quant_max, ScalarType dtype, *, Tensor(a!) out) -> Tensor(a!)"
163
+ )
164
+
165
+ lib.define(
166
+ "quantized_layer_norm(Tensor X, Tensor X_scale, Tensor X_zero_point, int[] normalized_shape, Tensor weight, Tensor bias, float eps, float output_scale, int output_zero_point) -> (Tensor Y)"
167
+ )
168
+ lib.define(
169
+ "quantized_layer_norm.out(Tensor X, Tensor X_scale, Tensor X_zero_point, int[] normalized_shape, Tensor weight, Tensor bias, float eps, float output_scale, int output_zero_point, *, Tensor(a!) out) -> Tensor (a!)"
170
+ )
171
+ lib.define(
172
+ "quantized_layer_norm.per_tensor(Tensor X, float X_scale, int X_zero_point, int[] normalized_shape, Tensor weight, Tensor bias, float eps, float output_scale, int output_zero_point) -> (Tensor Y)"
173
+ )
174
+ lib.define(
175
+ "quantized_layer_norm.per_tensor_out(Tensor X, float X_scale, int X_zero_point, int[] normalized_shape, Tensor weight, Tensor bias, float eps, float output_scale, int output_zero_point, *, Tensor(a!) out) -> Tensor (a!)"
176
+ )
177
+
178
+ lib.define(
179
+ "quantized_linear(Tensor src, Tensor weight, Tensor bias, int src_zero_point, Tensor weight_zero_point, Tensor out_multiplier, Tensor out_shift, int out_zero_point, Tensor? offset) -> (Tensor Z)"
180
+ )
181
+ lib.define(
182
+ "quantized_linear.out(Tensor src, Tensor weight, Tensor bias, int src_zero_point, Tensor weight_zero_point, Tensor out_multiplier, Tensor out_shift, int out_zero_point, Tensor? offset, *, Tensor(a!) out) -> Tensor(a!)"
183
+ )
184
+ lib.define(
185
+ "quantized_linear.per_tensor_out(Tensor src, Tensor weight, Tensor bias, SymInt src_zero_point, SymInt weight_zero_point, SymInt out_multiplier, SymInt out_shift, SymInt out_zero_point, Tensor? offset, *, Tensor(a!) out) -> Tensor(a!)"
186
+ )
187
+ lib.define(
188
+ "quantized_linear_asym8sxasym8s_asym8s.per_tensor_out(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
189
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset, *, Tensor(a!) out) -> Tensor(a!)"
190
+ )
191
+ lib.define(
192
+ "quantized_linear_asym8uxasym8u_asym8u.per_tensor_out(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
193
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset, *, Tensor(a!) out) -> Tensor(a!)"
194
+ )
195
+ lib.define(
196
+ "quantized_linear.per_tensor(Tensor src, Tensor weight, Tensor bias, SymInt src_zero_point, "
197
+ "SymInt weight_zero_point, SymInt out_multiplier, SymInt out_shift, SymInt out_zero_point, Tensor? offset) -> Tensor"
198
+ )
199
+ lib.define(
200
+ "quantized_linear_asym8sxasym8s_asym8s.per_tensor(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
201
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset) -> (Tensor Z)"
202
+ )
203
+ lib.define(
204
+ "quantized_linear_asym8uxasym8u_asym8u.per_tensor(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
205
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset) -> (Tensor Z)"
206
+ )
207
+
208
+ lib.define(
209
+ "quantized_relu(Tensor X, Tensor X_zero_point, int out_zero_point, Tensor out_multiplier, Tensor out_shift) -> (Tensor Y)"
210
+ )
211
+ lib.define(
212
+ "quantized_relu.out(Tensor X, Tensor X_zero_point, int out_zero_point, Tensor out_multiplier, Tensor out_shift, *, Tensor(a!) out) -> Tensor (a!)"
213
+ )
214
+
215
+ lib.define(
216
+ "quantized_conv2d_nhwc(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, Tensor weight_zero_point, Tensor bias_scale, float out_scale, int out_zero_point, Tensor out_multiplier, Tensor out_shift) -> (Tensor Z)"
217
+ )
218
+ lib.define(
219
+ "quantized_conv2d_nhwc.out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, Tensor weight_zero_point, Tensor bias_scale, float out_scale, int out_zero_point, Tensor out_multiplier, Tensor out_shift, *, Tensor(a!) out) -> Tensor(a!)"
220
+ )
221
+ lib.define(
222
+ "quantized_conv2d_nhwc.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
223
+ )
224
+ lib.define(
225
+ "quantized_conv2d_nhwc.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
226
+ )
227
+ lib.define(
228
+ "quantized_conv2d_nchw(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, Tensor weight_zero_point, Tensor bias_scale, float out_scale, int out_zero_point, Tensor out_multiplier, Tensor out_shift) -> (Tensor Z)"
229
+ )
230
+ lib.define(
231
+ "quantized_conv2d_nchw.out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, Tensor weight_zero_point, Tensor bias_scale, float out_scale, int out_zero_point, Tensor out_multiplier, Tensor out_shift, *, Tensor(a!) out) -> Tensor(a!)"
232
+ )
233
+ lib.define(
234
+ "quantized_conv2d_nchw.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
235
+ )
236
+ lib.define(
237
+ "quantized_conv2d_nchw.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
238
+ )
239
+ lib.define(
240
+ "quantized_matmul(Tensor X, int X_zero_point, Tensor Y, int Y_zero_point, Tensor? bias, int out_multiplier, int out_shift, int out_zero_point, bool transposed=False) -> (Tensor Z)"
241
+ )
242
+ lib.define(
243
+ "quantized_matmul.out(Tensor X, int X_zero_point, Tensor Y, int Y_zero_point, Tensor? bias, int out_multiplier, int out_shift, int out_zero_point, bool transposed=False, *, Tensor(a!) out) -> Tensor(a!)"
244
+ )
245
+ lib.define(
246
+ "quantized_matmul_asym8sxasym8s_asym8s(Tensor X, int X_zero_point, Tensor Y, int Y_zero_point, Tensor? bias, int out_multiplier, int out_shift, int out_zero_point, bool transposed=False) -> (Tensor Z)"
247
+ )
248
+ lib.define(
249
+ "quantized_matmul_asym8sxasym8s_asym8s.out(Tensor X, int X_zero_point, Tensor Y, int Y_zero_point, Tensor? bias, int out_multiplier, int out_shift, int out_zero_point, bool transposed=False, *, Tensor(a!) out) -> Tensor(a!)"
250
+ )
251
+ lib.define(
252
+ "quantized_conv2d_nchw_asym8sxsym8s_asym8s.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
253
+ )
254
+ lib.define(
255
+ "quantized_conv2d_nchw_asym8sxsym8s_asym8s.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
256
+ )
257
+ lib.define(
258
+ "quantized_conv2d_nchw_asym8uxsym8u_asym8u.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
259
+ )
260
+ lib.define(
261
+ "quantized_conv2d_nchw_asym8uxsym8u_asym8u.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
262
+ )
263
+ lib.define(
264
+ "quantized_conv2d_nhwc_asym8sxsym8s_asym8s.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
265
+ )
266
+ lib.define(
267
+ "quantized_conv2d_nhwc_asym8sxsym8s_asym8s.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
268
+ )
269
+ lib.define(
270
+ "quantized_conv2d_nhwc_asym8uxsym8u_asym8u.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
271
+ )
272
+ lib.define(
273
+ "quantized_conv2d_nhwc_asym8uxsym8u_asym8u.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
274
+ )
275
+ lib.define(
276
+ "quantized_conv2d_nchw_dilated_asym8sxsym8s_asym8s.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
277
+ )
278
+ lib.define(
279
+ "quantized_conv2d_nchw_dilated_asym8sxsym8s_asym8s.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
280
+ )
281
+ lib.define(
282
+ "quantized_conv2d_nchw_dilated_asym8uxsym8u_asym8u.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
283
+ )
284
+ lib.define(
285
+ "quantized_conv2d_nchw_dilated_asym8uxsym8u_asym8u.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
286
+ )
287
+ lib.define(
288
+ "quantized_conv2d_nhwc_dilated_asym8sxsym8s_asym8s.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
289
+ )
290
+ lib.define(
291
+ "quantized_conv2d_nhwc_dilated_asym8sxsym8s_asym8s.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
292
+ )
293
+ lib.define(
294
+ "quantized_conv2d_nhwc_dilated_asym8uxsym8u_asym8u.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
295
+ )
296
+ lib.define(
297
+ "quantized_conv2d_nhwc_dilated_asym8uxsym8u_asym8u.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
298
+ )
299
+ lib.define(
300
+ "quantized_conv1d_ncl_asym8sxsym8s_asym8s.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
301
+ )
302
+ lib.define(
303
+ "quantized_conv1d_ncl_asym8sxsym8s_asym8s.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
304
+ )
305
+ lib.define(
306
+ "quantized_conv1d_ncl_asym8uxsym8u_asym8u.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
307
+ )
308
+ lib.define(
309
+ "quantized_conv1d_ncl_asym8uxsym8u_asym8u.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
310
+ )
311
+ lib.define(
312
+ "quantized_conv1d_nlc_asym8sxsym8s_asym8s.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
313
+ )
314
+ lib.define(
315
+ "quantized_conv1d_nlc_asym8sxsym8s_asym8s.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
316
+ )
317
+ lib.define(
318
+ "quantized_conv1d_nlc_asym8uxsym8u_asym8u.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
319
+ )
320
+ lib.define(
321
+ "quantized_conv1d_nlc_asym8uxsym8u_asym8u.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
322
+ )
323
+ lib.define(
324
+ "quantized_conv2d_nchw_depthwise_asym8sxsym8s_asym8s.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
325
+ )
326
+ lib.define(
327
+ "quantized_conv2d_nchw_depthwise_asym8sxsym8s_asym8s.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
328
+ )
329
+ lib.define(
330
+ "quantized_conv2d_nchw_depthwise_asym8uxsym8u_asym8u.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
331
+ )
332
+ lib.define(
333
+ "quantized_conv2d_nchw_depthwise_asym8uxsym8u_asym8u.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
334
+ )
335
+ lib.define(
336
+ "quantized_conv2d_nhwc_depthwise_asym8sxsym8s_asym8s.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
337
+ )
338
+ lib.define(
339
+ "quantized_conv2d_nhwc_depthwise_asym8sxsym8s_asym8s.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
340
+ )
341
+ lib.define(
342
+ "quantized_conv2d_nhwc_depthwise_asym8uxsym8u_asym8u.per_tensor(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift) -> (Tensor Z)"
343
+ )
344
+ lib.define(
345
+ "quantized_conv2d_nhwc_depthwise_asym8uxsym8u_asym8u.per_tensor_out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, int[] dilation, int groups, int input_zero_point, int weight_zero_point, float bias_scale, float out_scale, int out_zero_point, int out_multiplier, int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
346
+ )
347
+ lib.define(
348
+ "quantized_matmul_asym8uxasym8u_asym8u(Tensor X, int X_zero_point, Tensor Y, int Y_zero_point, Tensor? bias, int out_multiplier, int out_shift, int out_zero_point, bool transposed=False) -> (Tensor Z)"
349
+ )
350
+ lib.define(
351
+ "quantized_matmul_asym8uxasym8u_asym8u.out(Tensor X, int X_zero_point, Tensor Y, int Y_zero_point, Tensor? bias, int out_multiplier, int out_shift, int out_zero_point, bool transposed=False, *, Tensor(a!) out) -> Tensor(a!)"
352
+ )
353
+
354
+ lib.define(
355
+ "transposed_convolution(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, "
356
+ "int[] dilation, SymInt[] output_padding, int groups, bool channel_last=False) -> (Tensor Y)"
357
+ )
358
+ lib.define("dequantize(Tensor X, Tensor X_scale, Tensor X_zero_point) -> (Tensor Y)")
359
+ lib.define(
360
+ "quantized_add(Tensor X, Tensor X_scale, Tensor X_zero_point, Tensor Y, Tensor Y_scale, "
361
+ "Tensor Y_zero_point, float out_scale, int out_zero_point) -> (Tensor Z)"
362
+ )
363
+ lib.define(
364
+ "quantized_add.per_tensor(Tensor X, float X_scale, int X_zero_point, Tensor Y, float Y_scale, "
365
+ "int Y_zero_point, float out_scale, int out_zero_point) -> (Tensor Z)"
366
+ )
367
+ lib.define(
368
+ "quantized_mul(Tensor X, Tensor X_scale, Tensor X_zero_point, Tensor Y, Tensor Y_scale, "
369
+ "Tensor Y_zero_point, float out_scale, int out_zero_point) -> (Tensor Z)"
370
+ )
371
+ lib.define(
372
+ "quantized_add_Scalar(Tensor X, Tensor X_scale, Tensor X_zero_point, Scalar Y, "
373
+ "float out_scale, int out_zero_point) -> (Tensor Z)"
374
+ )
375
+ lib.define(
376
+ "quantized_mul_Scalar(Tensor X, Tensor X_scale, Tensor X_zero_point, Scalar Y, "
377
+ "float out_scale, int out_zero_point) -> (Tensor Z)"
378
+ )
379
+ lib.define(
380
+ "quantized_embedding_byte(Tensor weight, Tensor weight_scales, Tensor? weight_zero_points, "
381
+ "Tensor indices, bool pruned_weights=False) -> (Tensor X)"
382
+ )
383
+ lib.define(
384
+ "quantized_transposed_conv(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, "
385
+ "int[] dilation, SymInt[] output_padding, int groups, int input_zero_point, Tensor weight_zero_point, "
386
+ "Tensor bias_scale, float out_scale, int out_zero_point, Tensor out_multiplier, Tensor out_shift, bool channel_last=False) -> (Tensor out)"
387
+ )
388
+ lib.define(
389
+ "avg_pool2d(Tensor input, int[2] kernel_size, int[2] stride=[], int[2] padding=[], bool ceil_mode=False, "
390
+ "bool count_include_pad=True, int? divisor_override=None, Tensor? in_zero_point=None, bool channel_last=False) -> (Tensor out)"
391
+ )
392
+ lib.define(
393
+ "im2row(Tensor input, int[2] kernel_size, int[2] dilation, int[2] padding, int[2] stride, "
394
+ "Tensor in_zero_point, bool channel_last=False) -> (Tensor out)"
395
+ )
396
+ lib.define(
397
+ "im2row.per_tensor(Tensor input, int[2] kernel_size, int[2] dilation, int[2] padding, int[2] stride, "
398
+ "int in_zero_point, bool channel_last=False) -> (Tensor out)"
399
+ )
400
+ lib.define(
401
+ "linalg_svd(Tensor A, bool full_matrices=False, bool compute_uv=True, str? driver=None) -> (Tensor U, Tensor S, Tensor Vh)"
402
+ )
403
+ lib.define(
404
+ "linalg_svd.out(Tensor A, bool full_matrices=False, bool compute_uv=True, str? driver=None, *, Tensor(a!) U, Tensor(b!) S, Tensor(c!) Vh) -> (Tensor(a!) U, Tensor(b!) S, Tensor(c!) Vh)"
405
+ )
406
+ lib.define(
407
+ "transposed_im2row(Tensor input, int[2] kernel_size, int[2] dilation, int[2] padding, int[2] stride, "
408
+ "int[2] output_padding, Tensor in_zero_point, bool channel_last=False) -> (Tensor out)"
409
+ )
410
+ lib.define(
411
+ "requantize(Tensor input, Tensor in_scale, Tensor in_zero_point, Tensor out_scale, "
412
+ "Tensor out_zero_point, ScalarType out_dtype) -> (Tensor Y)"
413
+ )
414
+ lib.define(
415
+ "requantize.per_tensor(Tensor input, float in_scale, int in_zero_point, float out_scale, "
416
+ "int out_zero_point, ScalarType out_dtype) -> (Tensor Y)"
417
+ )
418
+ lib.define(
419
+ "fully_connected(Tensor input, Tensor weight, Tensor? bias=None) -> (Tensor out)"
420
+ )
421
+ lib.define(
422
+ "quantized_fully_connected(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
423
+ "Tensor weight_zero_point, Tensor out_multiplier, Tensor out_shift, int out_zero_point, Tensor? offset) -> (Tensor Z)"
424
+ )
425
+ lib.define(
426
+ "quantized_fully_connected.per_tensor(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
427
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset) -> (Tensor Z)"
428
+ )
429
+ lib.define(
430
+ "quantized_fully_connected_asym8sxasym8s_asym8s.per_tensor(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
431
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset) -> (Tensor Z)"
432
+ )
433
+ lib.define(
434
+ "quantized_fully_connected_asym8uxasym8u_asym8u.per_tensor(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
435
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset) -> (Tensor Z)"
436
+ )
437
+ lib.define("where_Scalar(Tensor condition, float self, float other) -> (Tensor Z)")
438
+ lib.define(
439
+ "where_Scalar.out(Tensor condition, float self, float other, *, Tensor(a!) out) -> Tensor(a!)"
440
+ )
441
+
442
+ lib.define(
443
+ "rope(Tensor input, Tensor sin_tensor, Tensor cos_tensor, Tensor? pos) -> (Tensor out)"
444
+ )
445
+ lib.define(
446
+ "rope.out(Tensor input, Tensor sin_tensor, Tensor cos_tensor, Tensor? pos, *, Tensor(a!) out) -> Tensor(a!)"
447
+ )
448
+
449
+ lib.define(
450
+ "quantized_softmax(Tensor input, Tensor mask, int dim, Tensor in_scale, Tensor in_zero_point, Tensor out_scale, Tensor out_zero_point) -> (Tensor out)"
451
+ )
452
+ lib.define(
453
+ "quantized_softmax.per_tensor(Tensor input, Tensor mask, int dim, float in_scale, int in_zero_point, float out_scale, int out_zero_point) -> (Tensor out)"
454
+ )
455
+ lib.define(
456
+ "quantized_softmax.out(Tensor input, Tensor mask, int dim, Tensor in_scale, Tensor in_zero_point, Tensor out_scale, Tensor out_zero_point, *, Tensor(a!) out) -> Tensor (a!)"
457
+ )
458
+ lib.define(
459
+ "quantized_softmax.per_tensor_out(Tensor input, Tensor mask, int dim, float in_scale, int in_zero_point, float out_scale, int out_zero_point, *, Tensor(a!) out) -> Tensor (a!)"
460
+ )
461
+
462
+ # Load/store with iDMA. These only exist before memory planning.
463
+ # Post memory planning, we check that outputs/inputs for the load/store are in
464
+ # DTCM and replace idma_load/idma_store with idma_copy.
465
+ lib.define("idma_load(Tensor src, int task_num=0, int channel=0) -> Tensor")
466
+ lib.define(
467
+ "idma_load.out(Tensor src, int task_num=0, int channel=0, *, Tensor(a!) out) -> Tensor(a!)"
468
+ )
469
+ lib.define("idma_store(Tensor src, int task_num=0, int channel=0) -> Tensor")
470
+ lib.define(
471
+ "idma_store.out(Tensor src, int task_num=0, int channel=0, *, Tensor(a!) out) -> Tensor(a!)"
472
+ )
473
+
474
+ # Non-blocking iDMA copy.
475
+ lib.define("idma_copy(Tensor src, int task_num=0, int channel=0) -> Tensor")
476
+ lib.define(
477
+ "idma_copy.out(Tensor src, int task_num=0, int channel=0, *, Tensor(a!) out) -> Tensor(a!)"
478
+ )
479
+ # iDMA wait.
480
+ lib.define("idma_wait(Tensor src, int task_num=0) -> Tensor")
481
+ lib.define("idma_wait.out(Tensor src, int task_num=0, *, Tensor(a!) out) -> Tensor(a!)")
482
+
483
+ # ------------------------------------ #
484
+ # Migrated from custom_ops.yaml #
485
+ # ------------------------------------ #
486
+ # Migrated from the custom_ops.yaml files containing different operator variants (e.g., .out, .tensor_out)
487
+ lib.define(
488
+ "conv1d(Tensor input, Tensor weight, Tensor bias, int[1] stride, SymInt[1] padding, int[1] dilation, "
489
+ "int groups) -> Tensor"
490
+ )
491
+ lib.define(
492
+ "conv1d.out(Tensor input, Tensor weight, Tensor bias, int[1] stride, SymInt[1] padding, int[1] dilation, "
493
+ "int groups, *, Tensor(a!) out) -> Tensor(a!)"
494
+ )
495
+ lib.define(
496
+ "conv2d(Tensor input, Tensor weight, Tensor bias, int[2] stride, SymInt[2] padding, int[2] dilation, "
497
+ "int groups) -> Tensor"
498
+ )
499
+ lib.define(
500
+ "conv2d.out(Tensor input, Tensor weight, Tensor bias, int[2] stride, SymInt[2] padding, int[2] dilation, "
501
+ "int groups, *, Tensor(a!) out) -> Tensor(a!)"
502
+ )
503
+ lib.define(
504
+ "conv3d(Tensor input, Tensor weight, Tensor bias, int[3] stride, SymInt[3] padding, int[3] dilation, "
505
+ "int groups) -> Tensor"
506
+ )
507
+ lib.define(
508
+ "conv3d.out(Tensor input, Tensor weight, Tensor bias, int[3] stride, SymInt[3] padding, int[3] dilation, "
509
+ "int groups, *, Tensor(a!) out) -> Tensor(a!)"
510
+ )
511
+ lib.define(
512
+ "transposed_convolution.out(Tensor input, Tensor weight, Tensor bias, int[] stride, SymInt[] padding, "
513
+ "int[] dilation, SymInt[] output_padding, int groups, bool channel_last=False, *, Tensor(a!) out) -> Tensor(a!)"
514
+ )
515
+ lib.define(
516
+ "quantized_relu.per_tensor(Tensor X, int X_zero_point, int out_zero_point, int out_multiplier, int out_shift) -> Tensor"
517
+ )
518
+ lib.define(
519
+ "quantized_relu.per_tensor_out(Tensor X, int X_zero_point, int out_zero_point, int out_multiplier, "
520
+ "int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
521
+ )
522
+ lib.define(
523
+ "quantized_relu_asym8s_asym8s.per_tensor(Tensor X, int X_zero_point, int out_zero_point, int out_multiplier, int out_shift) -> Tensor"
524
+ )
525
+ lib.define(
526
+ "quantized_relu_asym8s_asym8s.per_tensor_out(Tensor X, int X_zero_point, int out_zero_point, int out_multiplier, "
527
+ "int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
528
+ )
529
+ lib.define(
530
+ "quantized_relu_asym8u_asym8u.per_tensor(Tensor X, int X_zero_point, int out_zero_point, int out_multiplier, int out_shift) -> Tensor"
531
+ )
532
+ lib.define(
533
+ "quantized_relu_asym8u_asym8u.per_tensor_out(Tensor X, int X_zero_point, int out_zero_point, int out_multiplier, "
534
+ "int out_shift, *, Tensor(a!) out) -> Tensor(a!)"
535
+ )
536
+ lib.define(
537
+ "quantized_add.out(Tensor X, Tensor X_scale, Tensor X_zero_point, Tensor Y, Tensor Y_scale, "
538
+ "Tensor Y_zero_point, float out_scale, int out_zero_point, *, Tensor(a!) out) -> Tensor(a!)"
539
+ )
540
+ lib.define(
541
+ "quantized_add.per_tensor_out(Tensor X, float X_scale, int X_zero_point, Tensor Y, float Y_scale, "
542
+ "int Y_zero_point, float out_scale, int out_zero_point, *, Tensor(a!) out) -> Tensor(a!)"
543
+ )
544
+ lib.define(
545
+ "quantized_add_asym8sxasym8s_asym8s.per_tensor(Tensor X, float X_scale, int X_zero_point, Tensor Y, float Y_scale, "
546
+ "int Y_zero_point, float out_scale, int out_zero_point) -> Tensor"
547
+ )
548
+ lib.define(
549
+ "quantized_add_asym8sxasym8s_asym8s.per_tensor_out(Tensor X, float X_scale, int X_zero_point, Tensor Y, float Y_scale, "
550
+ "int Y_zero_point, float out_scale, int out_zero_point, *, Tensor(a!) out) -> Tensor(a!)"
551
+ )
552
+ lib.define(
553
+ "quantized_add_asym8uxasym8u_asym8u.per_tensor(Tensor X, float X_scale, int X_zero_point, Tensor Y, float Y_scale, "
554
+ "int Y_zero_point, float out_scale, int out_zero_point) -> Tensor"
555
+ )
556
+ lib.define(
557
+ "quantized_add_asym8uxasym8u_asym8u.per_tensor_out(Tensor X, float X_scale, int X_zero_point, Tensor Y, float Y_scale, "
558
+ "int Y_zero_point, float out_scale, int out_zero_point, *, Tensor(a!) out) -> Tensor(a!)"
559
+ )
560
+ lib.define(
561
+ "quantized_mul.out(Tensor X, Tensor X_scale, Tensor X_zero_point, Tensor Y, Tensor Y_scale, "
562
+ "Tensor Y_zero_point, float out_scale, int out_zero_point, *, Tensor(a!) out) -> Tensor(a!)"
563
+ )
564
+ lib.define(
565
+ "quantized_add_Scalar.out(Tensor X, Tensor X_scale, Tensor X_zero_point, Scalar Y, "
566
+ "float out_scale, int out_zero_point, *, Tensor(a!) out) -> Tensor(a!)"
567
+ )
568
+ lib.define(
569
+ "quantized_mul_Scalar.out(Tensor X, Tensor X_scale, Tensor X_zero_point, Scalar Y, "
570
+ "float out_scale, int out_zero_point, *, Tensor(a!) out) -> Tensor(a!)"
571
+ )
572
+ lib.define(
573
+ "fully_connected.out(Tensor input, Tensor weight, Tensor? bias=None, *, Tensor(a!) out) -> Tensor(a!)"
574
+ )
575
+ lib.define(
576
+ "quantized_fully_connected.out(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
577
+ "Tensor weight_zero_point, Tensor out_multiplier, Tensor out_shift, int out_zero_point, Tensor? offset, *, Tensor(a!) out) -> Tensor(a!)"
578
+ )
579
+ lib.define(
580
+ "quantized_fully_connected.per_tensor_out(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
581
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset, *, Tensor(a!) out) -> Tensor(a!)"
582
+ )
583
+ lib.define(
584
+ "quantized_fully_connected_asym8sxasym8s_asym8s.per_tensor_out(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
585
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset, *, Tensor(a!) out) -> Tensor(a!)"
586
+ )
587
+ lib.define(
588
+ "quantized_fully_connected_asym8uxasym8u_asym8u.per_tensor_out(Tensor src, Tensor weight, Tensor bias, int src_zero_point, "
589
+ "int weight_zero_point, int out_multiplier, int out_shift, int out_zero_point, Tensor? offset, *, Tensor(a!) out) -> Tensor(a!)"
590
+ )
591
+ lib.define(
592
+ "quantized_embedding_byte.out(Tensor weight, Tensor weight_scales, Tensor? weight_zero_points, "
593
+ "Tensor indices, bool pruned_weights=False, *, Tensor(a!) out) -> Tensor(a!)"
594
+ )
595
+
596
+ lib.define(
597
+ "quantized_transposed_conv.out(Tensor input, Tensor weight, Tensor bias, int[] stride, "
598
+ "SymInt[] padding, int[] dilation, SymInt[] output_padding, int groups, int input_zero_point, "
599
+ "Tensor weight_zero_point, Tensor bias_scale, float out_scale, int out_zero_point, "
600
+ "Tensor out_multiplier, Tensor out_shift, bool channel_last=False, *, Tensor(a!) out) -> Tensor(a!)"
601
+ )
602
+ lib.define(
603
+ "avg_pool2d.out(Tensor input, int[2] kernel_size, int[2] stride=[], int[2] padding=[], "
604
+ "bool ceil_mode=False, bool count_include_pad=True, int? divisor_override=None, "
605
+ "Tensor? in_zero_point=None, bool channel_last=False, *, Tensor(a!) out) -> Tensor(a!)"
606
+ )
607
+ lib.define(
608
+ "im2row.out(Tensor input, int[2] kernel_size, int[2] dilation, int[2] padding, int[2] stride, "
609
+ "Tensor in_zero_point, bool channel_last=False, *, Tensor(a!) out) -> Tensor(a!)"
610
+ )
611
+ lib.define(
612
+ "im2row.per_tensor_out(Tensor input, int[2] kernel_size, int[2] dilation, int[2] padding, int[2] stride, "
613
+ "int in_zero_point, bool channel_last=False, *, Tensor(a!) out) -> Tensor(a!)"
614
+ )
615
+ lib.define(
616
+ "transposed_im2row.out(Tensor input, int[2] kernel_size, int[2] dilation, int[2] padding, "
617
+ "int[2] stride, int[2] output_padding, Tensor in_zero_point, bool channel_last=False, *, Tensor(a!) out) -> Tensor(a!)"
618
+ )
619
+ lib.define(
620
+ "requantize.out(Tensor input, Tensor in_scale, Tensor in_zero_point, Tensor out_scale, "
621
+ "Tensor out_zero_point, ScalarType out_dtype, *, Tensor(a!) out) -> Tensor(a!)"
622
+ )
623
+ lib.define(
624
+ "requantize.per_tensor_out(Tensor input, float in_scale, int in_zero_point, float out_scale, "
625
+ "int out_zero_point, ScalarType out_dtype, *, Tensor(a!) out) -> Tensor(a!)"
626
+ )
627
+ lib.define(
628
+ "roi_align_box_processor.out(Tensor rois, int output_size_h, int output_size_w, "
629
+ "int sampling_ratio, bool aligned, *, Tensor(a!) out) -> Tensor(a!)"
630
+ )
631
+ lib.define(
632
+ "roi_align_box_processor(Tensor rois, int output_size_h, int output_size_w, "
633
+ "int sampling_ratio, bool aligned) -> (Tensor out)"
634
+ )
635
+ lib.define(
636
+ "_softmax_f32_f32(Tensor self, int dim, bool? half_to_float = None) -> (Tensor out)"
637
+ )
638
+ lib.define(
639
+ "_softmax_f32_f32.out(Tensor self, int dim, bool? half_to_float = None, *, Tensor(a!) out) -> Tensor(a!)"
640
+ )
641
+
642
+ lib.define(
643
+ "quantized_w8a32_linear(Tensor input, Tensor weight, float w_scale, Tensor bias, float b_scale) -> Tensor"
644
+ )
645
+ lib.define(
646
+ "quantized_w8a32_linear.out(Tensor input, Tensor weight, float w_scale, Tensor bias, float b_scale, *, Tensor(a!) output) -> Tensor(a!)"
647
+ )
648
+
649
+ lib.define(
650
+ "quantized_w8a32_conv(Tensor input, Tensor weight, float w_scale, Tensor bias, float b_scale) -> Tensor"
651
+ )
652
+ lib.define(
653
+ "quantized_w8a32_conv.out(Tensor input, Tensor weight, float w_scale, Tensor bias, float b_scale, *, Tensor(a!) output) -> Tensor(a!)"
654
+ )
655
+
656
+ lib.define(
657
+ "quantized_w8a32_gru(Tensor inputs, Tensor hidden, Tensor weights_inputs, float w_i_scale, Tensor weights_hidden, float w_h_scale, Tensor bias_inputs, float b_i_scale, Tensor bias_hidden, float b_h_scale) -> Tensor"
658
+ )
659
+
660
+ lib.define(
661
+ "quantized_w8a32_gru.out(Tensor inputs, Tensor hidden, Tensor weights_inputs, float w_i_scale, Tensor weights_hidden, float w_h_scale, Tensor bias_inputs, float b_i_scale, Tensor bias_hidden, float b_h_scale, *, Tensor(a!) out) -> Tensor(a!)"
662
+ )
663
+
664
+
665
+ # Custom ops with aten namespace. Need to specify the lib var as FRAGMENT type as aten library is already defined
666
+ aten_lib = Library("aten", "FRAGMENT")
667
+ aten_lib.define(
668
+ "chunk.out(Tensor self, int chunks, int dim=0, *, Tensor(a!)[] out) -> ()"
669
+ )
670
+ aten_lib.define(
671
+ "contiguous.out(Tensor self, *, MemoryFormat memory_format=contiguous_format, "
672
+ "Tensor(a!) out) -> Tensor(a!)"
673
+ )
674
+ aten_lib.define(
675
+ "tensor_split.sections_out(Tensor self, int sections, int dim=0, *, Tensor(a!)[] out) -> ()"
676
+ )
677
+ aten_lib.define(
678
+ "_slice_copy_nop(Tensor self, int dim=0, SymInt? start=None, SymInt? end=None, "
679
+ "SymInt step=1) -> Tensor(a!)"
680
+ )
681
+ aten_lib.define(
682
+ "_select_copy_nop.int_out(Tensor self, int dim, SymInt index, *, Tensor(a!) out) -> Tensor(a!)"
683
+ )
684
+ aten_lib.define(
685
+ "_slice_copy_nop.Tensor_out(Tensor self, int dim=0, SymInt? start=None, SymInt? end=None, "
686
+ "SymInt step=1, *, Tensor(a!) out) -> Tensor(a!)"
687
+ )
688
+ aten_lib.define("_cat_nop(Tensor[] tensors, int dim=0) -> Tensor(a!)")
689
+ aten_lib.define(
690
+ "_cat_nop.out(Tensor[] tensors, int dim=0, *, Tensor(a!) out) -> Tensor(a!)"
691
+ )
692
+
693
+ # Custom ops with cadence_nn_ops namespace
694
+ jarvis_nn_lib = Library("jarvis_nn_ops", "DEF")
695
+ jarvis_nn_lib.define(
696
+ "attention_mask.out(Tensor input, Tensor start, Tensor stop, *, Tensor(a!) out) -> Tensor(a!)"
697
+ )
698
+
699
+ # Custom ops in aten namespace. RMSNorm is usually decomposed, so having
700
+ # an out-variant is non-standard
701
+
702
+ lib_aten = Library("aten", "FRAGMENT")
703
+
704
+ lib_aten.define(
705
+ "rms_norm.out(Tensor input, SymInt[] normalized_shape, Tensor? weight=None, float? eps=None, *, Tensor(a!) out) -> Tensor(a!)"
706
+ )
707
+
708
+
709
+ @register_fake("cadence::quantize_per_tensor")
710
+ def quantize_per_tensor_meta(
711
+ input: torch.Tensor,
712
+ scale: float,
713
+ zero_point: int,
714
+ quant_min: int,
715
+ quant_max: int,
716
+ dtype: torch.dtype,
717
+ ) -> torch.Tensor:
718
+ return input.new_empty(input.size(), dtype=dtype)
719
+
720
+
721
+ @register_fake("cadence::quantize_per_tensor_asym8s")
722
+ def quantize_per_tensor_asym8s_meta(
723
+ input: torch.Tensor,
724
+ scale: float,
725
+ zero_point: int,
726
+ quant_min: int,
727
+ quant_max: int,
728
+ dtype: torch.dtype,
729
+ ) -> torch.Tensor:
730
+ return input.new_empty(input.size(), dtype=dtype)
731
+
732
+
733
+ @register_fake("cadence::quantize_per_tensor_asym8u")
734
+ def quantize_per_tensor_asym8u_meta(
735
+ input: torch.Tensor,
736
+ scale: float,
737
+ zero_point: int,
738
+ quant_min: int,
739
+ quant_max: int,
740
+ dtype: torch.dtype,
741
+ ) -> torch.Tensor:
742
+ return input.new_empty(input.size(), dtype=dtype)
743
+
744
+
745
+ @register_fake("cadence::quantize_per_tensor_asym16s")
746
+ def quantize_per_tensor_asym16s_meta(
747
+ input: torch.Tensor,
748
+ scale: float,
749
+ zero_point: int,
750
+ quant_min: int,
751
+ quant_max: int,
752
+ dtype: torch.dtype,
753
+ ) -> torch.Tensor:
754
+ return input.new_empty(input.size(), dtype=dtype)
755
+
756
+
757
+ @register_fake("cadence::quantize_per_tensor_asym16u")
758
+ def quantize_per_tensor_asym16u_meta(
759
+ input: torch.Tensor,
760
+ scale: float,
761
+ zero_point: int,
762
+ quant_min: int,
763
+ quant_max: int,
764
+ dtype: torch.dtype,
765
+ ) -> torch.Tensor:
766
+ return input.new_empty(input.size(), dtype=dtype)
767
+
768
+
769
+ @register_fake("cadence::quantize_per_tensor_asym32s")
770
+ def quantize_per_tensor_asym32s_meta(
771
+ input: torch.Tensor,
772
+ scale: float,
773
+ zero_point: int,
774
+ quant_min: int,
775
+ quant_max: int,
776
+ dtype: torch.dtype,
777
+ ) -> torch.Tensor:
778
+ return input.new_empty(input.size(), dtype=dtype)
779
+
780
+
781
+ @register_fake("cadence::dequantize_per_tensor")
782
+ def dequantize_per_tensor_meta(
783
+ input: torch.Tensor,
784
+ scale: float,
785
+ zero_point: int,
786
+ quant_min: int,
787
+ quant_max: int,
788
+ dtype: torch.dtype,
789
+ ) -> torch.Tensor:
790
+ return input.new_empty(input.size(), dtype=torch.float)
791
+
792
+
793
+ @register_fake("cadence::dequantize_per_tensor_asym8s")
794
+ def dequantize_per_tensor_asym8s_meta(
795
+ input: torch.Tensor,
796
+ scale: float,
797
+ zero_point: int,
798
+ quant_min: int,
799
+ quant_max: int,
800
+ dtype: torch.dtype,
801
+ ) -> torch.Tensor:
802
+ return input.new_empty(input.size(), dtype=torch.float)
803
+
804
+
805
+ @register_fake("cadence::dequantize_per_tensor_asym8u")
806
+ def dequantize_per_tensor_asym8u_meta(
807
+ input: torch.Tensor,
808
+ scale: float,
809
+ zero_point: int,
810
+ quant_min: int,
811
+ quant_max: int,
812
+ dtype: torch.dtype,
813
+ ) -> torch.Tensor:
814
+ return input.new_empty(input.size(), dtype=torch.float)
815
+
816
+
817
+ @register_fake("cadence::dequantize_per_tensor_asym16s")
818
+ def dequantize_per_tensor_asym16s_meta(
819
+ input: torch.Tensor,
820
+ scale: float,
821
+ zero_point: int,
822
+ quant_min: int,
823
+ quant_max: int,
824
+ dtype: torch.dtype,
825
+ ) -> torch.Tensor:
826
+ return input.new_empty(input.size(), dtype=torch.float)
827
+
828
+
829
+ @register_fake("cadence::dequantize_per_tensor_asym16u")
830
+ def dequantize_per_tensor_asym16u_meta(
831
+ input: torch.Tensor,
832
+ scale: float,
833
+ zero_point: int,
834
+ quant_min: int,
835
+ quant_max: int,
836
+ dtype: torch.dtype,
837
+ ) -> torch.Tensor:
838
+ return input.new_empty(input.size(), dtype=torch.float)
839
+
840
+
841
+ @register_fake("cadence::dequantize_per_tensor_asym32s")
842
+ def dequantize_per_tensor_asym32s_meta(
843
+ input: torch.Tensor,
844
+ scale: float,
845
+ zero_point: int,
846
+ quant_min: int,
847
+ quant_max: int,
848
+ dtype: torch.dtype,
849
+ ) -> torch.Tensor:
850
+ return input.new_empty(input.size(), dtype=torch.float)
851
+
852
+
853
+ @register_fake("cadence::quantized_add")
854
+ def quantized_add_meta(
855
+ X: torch.Tensor,
856
+ X_scale: torch.Tensor,
857
+ X_zero_point: torch.Tensor,
858
+ Y: torch.Tensor,
859
+ Y_scale: torch.Tensor,
860
+ Y_zero_point: torch.Tensor,
861
+ out_scale: float,
862
+ out_zero_point: int,
863
+ ) -> torch.Tensor:
864
+
865
+ # Determine output shape by broadcasting X and Y
866
+ out_size = torch.broadcast_shapes(X.size(), Y.size())
867
+ return X.new_empty(out_size, dtype=X.dtype)
868
+
869
+
870
+ @register_fake("cadence::quantized_add.per_tensor")
871
+ def quantized_add_per_tensor_meta(
872
+ X: torch.Tensor,
873
+ X_scale: float,
874
+ X_zero_point: int,
875
+ Y: torch.Tensor,
876
+ Y_scale: float,
877
+ Y_zero_point: int,
878
+ out_scale: float,
879
+ out_zero_point: int,
880
+ ) -> torch.Tensor:
881
+
882
+ out_size = torch.broadcast_shapes(X.size(), Y.size())
883
+ return X.new_empty(out_size, dtype=X.dtype)
884
+
885
+
886
+ @register_fake("cadence::quantized_add_asym8sxasym8s_asym8s.per_tensor")
887
+ def quantized_add_asym8sxasym8s_asym8s_per_tensor_meta(
888
+ X: torch.Tensor,
889
+ X_scale: float,
890
+ X_zero_point: int,
891
+ Y: torch.Tensor,
892
+ Y_scale: float,
893
+ Y_zero_point: int,
894
+ out_scale: float,
895
+ out_zero_point: int,
896
+ ) -> torch.Tensor:
897
+ out_size = torch.broadcast_shapes(X.size(), Y.size())
898
+ return X.new_empty(out_size, dtype=X.dtype)
899
+
900
+
901
+ @register_fake("cadence::quantized_add_asym8uxasym8u_asym8u.per_tensor")
902
+ def quantized_add_asym8uxasym8u_asym8u_per_tensor_meta(
903
+ X: torch.Tensor,
904
+ X_scale: float,
905
+ X_zero_point: int,
906
+ Y: torch.Tensor,
907
+ Y_scale: float,
908
+ Y_zero_point: int,
909
+ out_scale: float,
910
+ out_zero_point: int,
911
+ ) -> torch.Tensor:
912
+ out_size = torch.broadcast_shapes(X.size(), Y.size())
913
+ return X.new_empty(out_size, dtype=X.dtype)
914
+
915
+
916
+ @register_fake("cadence::quantized_linear")
917
+ def quantized_linear_meta(
918
+ src: torch.Tensor,
919
+ weight: torch.Tensor,
920
+ bias: torch.Tensor,
921
+ in_zero_point: int,
922
+ weight_zero_point: torch.Tensor,
923
+ out_multiplier: torch.Tensor,
924
+ out_shift: torch.Tensor,
925
+ out_zero_point: int,
926
+ offset: Optional[torch.Tensor],
927
+ ) -> torch.Tensor:
928
+ # src comes in shape [leading_dims, in_dim]
929
+ # weight comes in shape [out_dim, in_dim]
930
+ # output comes in empty with shape [leading_dims, out_dim]
931
+ out_size = list(src.size())
932
+ weight_size = list(weight.size())
933
+ assert len(weight_size) == 2
934
+ out_size[-1] = weight_size[0]
935
+ return src.new_empty(out_size, dtype=src.dtype)
936
+
937
+
938
+ @register_fake("cadence::quantized_linear.per_tensor")
939
+ def quantized_linear_per_tensor_meta(
940
+ src: torch.Tensor,
941
+ weight: torch.Tensor,
942
+ bias: torch.Tensor,
943
+ in_zero_point: torch.SymInt,
944
+ weight_zero_point: torch.SymInt,
945
+ out_multiplier: torch.SymInt,
946
+ out_shift: torch.SymInt,
947
+ out_zero_point: torch.SymInt,
948
+ offset: Optional[torch.Tensor],
949
+ ) -> torch.Tensor:
950
+ # src comes in shape [leading_dims, in_dim]
951
+ # weight comes in shape [out_dim, in_dim]
952
+ # output comes in empty with shape [leading_dims, out_dim]
953
+ out_size = list(src.size())
954
+ weight_size = list(weight.size())
955
+ assert len(weight_size) == 2
956
+ out_size[-1] = weight_size[0]
957
+ return src.new_empty(out_size, dtype=src.dtype)
958
+
959
+
960
+ @register_fake("cadence::quantized_linear_asym8sxasym8s_asym8s.per_tensor")
961
+ def quantized_linear_asym8sxasym8s_asym8s_per_tensor_meta(
962
+ src: torch.Tensor,
963
+ weight: torch.Tensor,
964
+ bias: torch.Tensor,
965
+ in_zero_point: int,
966
+ weight_zero_point: int,
967
+ out_multiplier: int,
968
+ out_shift: int,
969
+ out_zero_point: int,
970
+ offset: Optional[torch.Tensor],
971
+ ) -> torch.Tensor:
972
+ # src comes in shape [leading_dims, in_dim]
973
+ # weight comes in shape [out_dim, in_dim]
974
+ # output comes in empty with shape [leading_dims, out_dim]
975
+ out_size = list(src.size())
976
+ weight_size = list(weight.size())
977
+ assert len(weight_size) == 2
978
+ out_size[-1] = weight_size[0]
979
+ return src.new_empty(out_size, dtype=src.dtype)
980
+
981
+
982
+ @register_fake("cadence::quantized_linear_asym8uxasym8u_asym8u.per_tensor")
983
+ def quantized_linear_asym8uxasym8u_asym8u_per_tensor_meta(
984
+ src: torch.Tensor,
985
+ weight: torch.Tensor,
986
+ bias: torch.Tensor,
987
+ in_zero_point: int,
988
+ weight_zero_point: int,
989
+ out_multiplier: int,
990
+ out_shift: int,
991
+ out_zero_point: int,
992
+ offset: Optional[torch.Tensor],
993
+ ) -> torch.Tensor:
994
+ # src comes in shape [leading_dims, in_dim]
995
+ # weight comes in shape [out_dim, in_dim]
996
+ # output comes in empty with shape [leading_dims, out_dim]
997
+ out_size = list(src.size())
998
+ weight_size = list(weight.size())
999
+ assert len(weight_size) == 2
1000
+ out_size[-1] = weight_size[0]
1001
+ return src.new_empty(out_size, dtype=src.dtype)
1002
+
1003
+
1004
+ @register_fake("cadence::quantized_conv2d_nhwc")
1005
+ def quantized_conv2d_nhwc_meta(
1006
+ input: torch.Tensor,
1007
+ weight: torch.Tensor,
1008
+ bias: torch.Tensor,
1009
+ stride: Tuple[int],
1010
+ padding: Tuple[int],
1011
+ dilation: Tuple[int],
1012
+ groups: int,
1013
+ in_zero_point: int,
1014
+ weight_zero_point: torch.Tensor,
1015
+ bias_scale: torch.Tensor,
1016
+ output_scale: float,
1017
+ output_zero_point: int,
1018
+ out_multiplier: torch.Tensor,
1019
+ out_shift: torch.Tensor,
1020
+ ) -> torch.Tensor:
1021
+ out_channels, *kernel_size, _ = weight.shape
1022
+
1023
+ in_size = input.shape
1024
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1025
+ assert len(in_size) > 2
1026
+ assert len(in_size) < 6
1027
+
1028
+ # Compute the output tensor size
1029
+ output_size = (
1030
+ get_conv1d_output_size(
1031
+ in_size,
1032
+ out_channels,
1033
+ stride[-1],
1034
+ padding[-1],
1035
+ dilation[-1],
1036
+ kernel_size[0],
1037
+ True,
1038
+ )
1039
+ if len(in_size) == 3
1040
+ else get_conv2d_output_size(
1041
+ in_size, out_channels, stride, padding, dilation, kernel_size, True
1042
+ )
1043
+ )
1044
+
1045
+ return input.new_empty(output_size, dtype=input.dtype)
1046
+
1047
+
1048
+ @register_fake("cadence::quantized_conv2d_nchw")
1049
+ def quantized_conv2d_nchw_meta(
1050
+ input: torch.Tensor,
1051
+ weight: torch.Tensor,
1052
+ bias: torch.Tensor,
1053
+ stride: Tuple[int],
1054
+ padding: Tuple[int],
1055
+ dilation: Tuple[int],
1056
+ groups: int,
1057
+ in_zero_point: int,
1058
+ weight_zero_point: torch.Tensor,
1059
+ bias_scale: torch.Tensor,
1060
+ output_scale: float,
1061
+ output_zero_point: int,
1062
+ out_multiplier: torch.Tensor,
1063
+ out_shift: torch.Tensor,
1064
+ ) -> torch.Tensor:
1065
+ out_channels, _, *kernel_size = weight.shape
1066
+
1067
+ in_size = input.shape
1068
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1069
+ assert len(in_size) > 2
1070
+ assert len(in_size) < 6
1071
+
1072
+ # Compute the output tensor size
1073
+ output_size = (
1074
+ get_conv1d_output_size(
1075
+ in_size,
1076
+ out_channels,
1077
+ stride[-1],
1078
+ padding[-1],
1079
+ dilation[-1],
1080
+ kernel_size[0],
1081
+ False,
1082
+ )
1083
+ if len(in_size) == 3
1084
+ else get_conv2d_output_size(
1085
+ in_size, out_channels, stride, padding, dilation, kernel_size, False
1086
+ )
1087
+ )
1088
+
1089
+ return input.new_empty(output_size, dtype=input.dtype)
1090
+
1091
+
1092
+ @register_fake("cadence::quantized_conv2d_nchw.per_tensor")
1093
+ def quantized_conv2d_nchw_per_tensor_meta(
1094
+ input: torch.Tensor,
1095
+ weight: torch.Tensor,
1096
+ bias: torch.Tensor,
1097
+ stride: Tuple[int],
1098
+ padding: Tuple[int],
1099
+ dilation: Tuple[int],
1100
+ groups: int,
1101
+ in_zero_point: int,
1102
+ weight_zero_point: int,
1103
+ bias_scale: float,
1104
+ output_scale: float,
1105
+ output_zero_point: int,
1106
+ out_multiplier: int,
1107
+ out_shift: int,
1108
+ ) -> torch.Tensor:
1109
+ out_channels, _, *kernel_size = weight.shape
1110
+
1111
+ in_size = input.shape
1112
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1113
+ assert len(in_size) > 2
1114
+ assert len(in_size) < 6
1115
+
1116
+ # Compute the output tensor size
1117
+ output_size = (
1118
+ get_conv1d_output_size(
1119
+ in_size,
1120
+ out_channels,
1121
+ stride[-1],
1122
+ padding[-1],
1123
+ dilation[-1],
1124
+ kernel_size[0],
1125
+ False,
1126
+ )
1127
+ if len(in_size) == 3
1128
+ else get_conv2d_output_size(
1129
+ in_size, out_channels, stride, padding, dilation, kernel_size, False
1130
+ )
1131
+ )
1132
+
1133
+ return input.new_empty(output_size, dtype=input.dtype)
1134
+
1135
+
1136
+ @register_fake("cadence::quantized_conv2d_nhwc.per_tensor")
1137
+ def quantized_conv2d_nhwc_per_tensor_meta(
1138
+ input: torch.Tensor,
1139
+ weight: torch.Tensor,
1140
+ bias: torch.Tensor,
1141
+ stride: Tuple[int],
1142
+ padding: Tuple[int],
1143
+ dilation: Tuple[int],
1144
+ groups: int,
1145
+ in_zero_point: int,
1146
+ weight_zero_point: int,
1147
+ bias_scale: float,
1148
+ output_scale: float,
1149
+ output_zero_point: int,
1150
+ out_multiplier: int,
1151
+ out_shift: int,
1152
+ ) -> torch.Tensor:
1153
+ out_channels, *kernel_size, _ = weight.shape
1154
+
1155
+ in_size = input.shape
1156
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1157
+ assert len(in_size) > 2
1158
+ assert len(in_size) < 6
1159
+
1160
+ # Compute the output tensor size
1161
+ output_size = (
1162
+ get_conv1d_output_size(
1163
+ in_size,
1164
+ out_channels,
1165
+ stride[-1],
1166
+ padding[-1],
1167
+ dilation[-1],
1168
+ kernel_size[0],
1169
+ True,
1170
+ )
1171
+ if len(in_size) == 3
1172
+ else get_conv2d_output_size(
1173
+ in_size, out_channels, stride, padding, dilation, kernel_size, True
1174
+ )
1175
+ )
1176
+
1177
+ return input.new_empty(output_size, dtype=input.dtype)
1178
+
1179
+
1180
+ @register_fake("cadence::quantized_conv2d_nchw_asym8sxsym8s_asym8s.per_tensor")
1181
+ def quantized_conv2d_nchw_asym8sxsym8s_asym8s_per_tensor_meta(
1182
+ input: torch.Tensor,
1183
+ weight: torch.Tensor,
1184
+ bias: torch.Tensor,
1185
+ stride: Tuple[int],
1186
+ padding: Tuple[int],
1187
+ dilation: Tuple[int],
1188
+ groups: int,
1189
+ in_zero_point: int,
1190
+ weight_zero_point: int,
1191
+ bias_scale: float,
1192
+ output_scale: float,
1193
+ output_zero_point: int,
1194
+ out_multiplier: int,
1195
+ out_shift: int,
1196
+ ) -> torch.Tensor:
1197
+ assert (
1198
+ input.dtype == torch.int8
1199
+ and weight.dtype == torch.int8
1200
+ and bias.dtype == torch.int32
1201
+ )
1202
+ out_channels, _, *kernel_size = weight.shape
1203
+
1204
+ in_size = input.shape
1205
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1206
+ assert len(in_size) > 2
1207
+ assert len(in_size) < 6
1208
+
1209
+ # Compute the output tensor size
1210
+ output_size = (
1211
+ get_conv1d_output_size(
1212
+ in_size,
1213
+ out_channels,
1214
+ stride[-1],
1215
+ padding[-1],
1216
+ dilation[-1],
1217
+ kernel_size[0],
1218
+ False,
1219
+ )
1220
+ if len(in_size) == 3
1221
+ else get_conv2d_output_size(
1222
+ in_size, out_channels, stride, padding, dilation, kernel_size, False
1223
+ )
1224
+ )
1225
+
1226
+ return input.new_empty(output_size, dtype=input.dtype)
1227
+
1228
+
1229
+ @register_fake("cadence::quantized_conv2d_nchw_asym8uxsym8u_asym8u.per_tensor")
1230
+ def quantized_conv2d_nchw_asym8uxsym8u_asym8u_per_tensor_meta(
1231
+ input: torch.Tensor,
1232
+ weight: torch.Tensor,
1233
+ bias: torch.Tensor,
1234
+ stride: Tuple[int],
1235
+ padding: Tuple[int],
1236
+ dilation: Tuple[int],
1237
+ groups: int,
1238
+ in_zero_point: int,
1239
+ weight_zero_point: int,
1240
+ bias_scale: float,
1241
+ output_scale: float,
1242
+ output_zero_point: int,
1243
+ out_multiplier: int,
1244
+ out_shift: int,
1245
+ ) -> torch.Tensor:
1246
+ assert (
1247
+ input.dtype == torch.uint8
1248
+ and weight.dtype == torch.uint8
1249
+ and bias.dtype == torch.int32
1250
+ )
1251
+ out_channels, _, *kernel_size = weight.shape
1252
+
1253
+ in_size = input.shape
1254
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1255
+ assert len(in_size) > 2
1256
+ assert len(in_size) < 6
1257
+
1258
+ # Compute the output tensor size
1259
+ output_size = (
1260
+ get_conv1d_output_size(
1261
+ in_size,
1262
+ out_channels,
1263
+ stride[-1],
1264
+ padding[-1],
1265
+ dilation[-1],
1266
+ kernel_size[0],
1267
+ False,
1268
+ )
1269
+ if len(in_size) == 3
1270
+ else get_conv2d_output_size(
1271
+ in_size, out_channels, stride, padding, dilation, kernel_size, False
1272
+ )
1273
+ )
1274
+
1275
+ return input.new_empty(output_size, dtype=input.dtype)
1276
+
1277
+
1278
+ @register_fake("cadence::quantized_conv2d_nhwc_asym8sxsym8s_asym8s.per_tensor")
1279
+ def quantized_conv2d_nhwc_asym8sxsym8s_asym8s_per_tensor_meta(
1280
+ input: torch.Tensor,
1281
+ weight: torch.Tensor,
1282
+ bias: torch.Tensor,
1283
+ stride: Tuple[int],
1284
+ padding: Tuple[int],
1285
+ dilation: Tuple[int],
1286
+ groups: int,
1287
+ in_zero_point: int,
1288
+ weight_zero_point: int,
1289
+ bias_scale: float,
1290
+ output_scale: float,
1291
+ output_zero_point: int,
1292
+ out_multiplier: int,
1293
+ out_shift: int,
1294
+ ) -> torch.Tensor:
1295
+ assert (
1296
+ input.dtype == torch.int8
1297
+ and weight.dtype == torch.int8
1298
+ and bias.dtype == torch.int32
1299
+ )
1300
+ out_channels, *kernel_size, _ = weight.shape
1301
+
1302
+ in_size = input.shape
1303
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1304
+ assert len(in_size) > 2
1305
+ assert len(in_size) < 6
1306
+
1307
+ # Compute the output tensor size
1308
+ output_size = (
1309
+ get_conv1d_output_size(
1310
+ in_size,
1311
+ out_channels,
1312
+ stride[-1],
1313
+ padding[-1],
1314
+ dilation[-1],
1315
+ kernel_size[0],
1316
+ True,
1317
+ )
1318
+ if len(in_size) == 3
1319
+ else get_conv2d_output_size(
1320
+ in_size, out_channels, stride, padding, dilation, kernel_size, True
1321
+ )
1322
+ )
1323
+
1324
+ return input.new_empty(output_size, dtype=input.dtype)
1325
+
1326
+
1327
+ @register_fake("cadence::quantized_conv2d_nhwc_asym8uxsym8u_asym8u.per_tensor")
1328
+ def quantized_conv2d_nhwc_asym8uxsym8u_asym8u_per_tensor_meta(
1329
+ input: torch.Tensor,
1330
+ weight: torch.Tensor,
1331
+ bias: torch.Tensor,
1332
+ stride: Tuple[int],
1333
+ padding: Tuple[int],
1334
+ dilation: Tuple[int],
1335
+ groups: int,
1336
+ in_zero_point: int,
1337
+ weight_zero_point: int,
1338
+ bias_scale: float,
1339
+ output_scale: float,
1340
+ output_zero_point: int,
1341
+ out_multiplier: int,
1342
+ out_shift: int,
1343
+ ) -> torch.Tensor:
1344
+ assert (
1345
+ input.dtype == torch.uint8
1346
+ and weight.dtype == torch.uint8
1347
+ and bias.dtype == torch.int32
1348
+ )
1349
+ out_channels, *kernel_size, _ = weight.shape
1350
+
1351
+ in_size = input.shape
1352
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1353
+ assert len(in_size) > 2
1354
+ assert len(in_size) < 6
1355
+
1356
+ # Compute the output tensor size
1357
+ output_size = (
1358
+ get_conv1d_output_size(
1359
+ in_size,
1360
+ out_channels,
1361
+ stride[-1],
1362
+ padding[-1],
1363
+ dilation[-1],
1364
+ kernel_size[0],
1365
+ True,
1366
+ )
1367
+ if len(in_size) == 3
1368
+ else get_conv2d_output_size(
1369
+ in_size, out_channels, stride, padding, dilation, kernel_size, True
1370
+ )
1371
+ )
1372
+
1373
+ return input.new_empty(output_size, dtype=input.dtype)
1374
+
1375
+
1376
+ @register_fake("cadence::quantized_conv2d_nchw_dilated_asym8sxsym8s_asym8s.per_tensor")
1377
+ def quantized_conv2d_nchw_dilated_asym8sxsym8s_asym8s_per_tensor_meta(
1378
+ input: torch.Tensor,
1379
+ weight: torch.Tensor,
1380
+ bias: torch.Tensor,
1381
+ stride: Tuple[int],
1382
+ padding: Tuple[int],
1383
+ dilation: Tuple[int],
1384
+ groups: int,
1385
+ in_zero_point: int,
1386
+ weight_zero_point: int,
1387
+ bias_scale: float,
1388
+ output_scale: float,
1389
+ output_zero_point: int,
1390
+ out_multiplier: int,
1391
+ out_shift: int,
1392
+ ) -> torch.Tensor:
1393
+ assert (
1394
+ input.dtype == torch.int8
1395
+ and weight.dtype == torch.int8
1396
+ and bias.dtype == torch.int32
1397
+ )
1398
+ out_channels, _, *kernel_size = weight.shape
1399
+
1400
+ in_size = input.shape
1401
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1402
+ assert len(in_size) > 2
1403
+ assert len(in_size) < 6
1404
+
1405
+ # Compute the output tensor size
1406
+ output_size = (
1407
+ get_conv1d_output_size(
1408
+ in_size,
1409
+ out_channels,
1410
+ stride[-1],
1411
+ padding[-1],
1412
+ dilation[-1],
1413
+ kernel_size[0],
1414
+ False,
1415
+ )
1416
+ if len(in_size) == 3
1417
+ else get_conv2d_output_size(
1418
+ in_size, out_channels, stride, padding, dilation, kernel_size, False
1419
+ )
1420
+ )
1421
+
1422
+ return input.new_empty(output_size, dtype=input.dtype)
1423
+
1424
+
1425
+ @register_fake("cadence::quantized_conv2d_nchw_dilated_asym8uxsym8u_asym8u.per_tensor")
1426
+ def quantized_conv2d_nchw_dilated_asym8uxsym8u_asym8u_per_tensor_meta(
1427
+ input: torch.Tensor,
1428
+ weight: torch.Tensor,
1429
+ bias: torch.Tensor,
1430
+ stride: Tuple[int],
1431
+ padding: Tuple[int],
1432
+ dilation: Tuple[int],
1433
+ groups: int,
1434
+ in_zero_point: int,
1435
+ weight_zero_point: int,
1436
+ bias_scale: float,
1437
+ output_scale: float,
1438
+ output_zero_point: int,
1439
+ out_multiplier: int,
1440
+ out_shift: int,
1441
+ ) -> torch.Tensor:
1442
+ assert (
1443
+ input.dtype == torch.uint8
1444
+ and weight.dtype == torch.uint8
1445
+ and bias.dtype == torch.int32
1446
+ )
1447
+ out_channels, _, *kernel_size = weight.shape
1448
+
1449
+ in_size = input.shape
1450
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1451
+ assert len(in_size) > 2
1452
+ assert len(in_size) < 6
1453
+
1454
+ # Compute the output tensor size
1455
+ output_size = (
1456
+ get_conv1d_output_size(
1457
+ in_size,
1458
+ out_channels,
1459
+ stride[-1],
1460
+ padding[-1],
1461
+ dilation[-1],
1462
+ kernel_size[0],
1463
+ False,
1464
+ )
1465
+ if len(in_size) == 3
1466
+ else get_conv2d_output_size(
1467
+ in_size, out_channels, stride, padding, dilation, kernel_size, False
1468
+ )
1469
+ )
1470
+
1471
+ return input.new_empty(output_size, dtype=input.dtype)
1472
+
1473
+
1474
+ @register_fake("cadence::quantized_conv2d_nhwc_dilated_asym8sxsym8s_asym8s.per_tensor")
1475
+ def quantized_conv2d_nhwc_dilated_asym8sxsym8s_asym8s_per_tensor_meta(
1476
+ input: torch.Tensor,
1477
+ weight: torch.Tensor,
1478
+ bias: torch.Tensor,
1479
+ stride: Tuple[int],
1480
+ padding: Tuple[int],
1481
+ dilation: Tuple[int],
1482
+ groups: int,
1483
+ in_zero_point: int,
1484
+ weight_zero_point: int,
1485
+ bias_scale: float,
1486
+ output_scale: float,
1487
+ output_zero_point: int,
1488
+ out_multiplier: int,
1489
+ out_shift: int,
1490
+ ) -> torch.Tensor:
1491
+ assert (
1492
+ input.dtype == torch.int8
1493
+ and weight.dtype == torch.int8
1494
+ and bias.dtype == torch.int32
1495
+ )
1496
+ out_channels, *kernel_size, _ = weight.shape
1497
+
1498
+ in_size = input.shape
1499
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1500
+ assert len(in_size) > 2
1501
+ assert len(in_size) < 6
1502
+
1503
+ # Compute the output tensor size
1504
+ output_size = (
1505
+ get_conv1d_output_size(
1506
+ in_size,
1507
+ out_channels,
1508
+ stride[-1],
1509
+ padding[-1],
1510
+ dilation[-1],
1511
+ kernel_size[0],
1512
+ True,
1513
+ )
1514
+ if len(in_size) == 3
1515
+ else get_conv2d_output_size(
1516
+ in_size, out_channels, stride, padding, dilation, kernel_size, True
1517
+ )
1518
+ )
1519
+
1520
+ return input.new_empty(output_size, dtype=input.dtype)
1521
+
1522
+
1523
+ @register_fake("cadence::quantized_conv2d_nhwc_dilated_asym8uxsym8u_asym8u.per_tensor")
1524
+ def quantized_conv2d_nhwc_dilated_asym8uxsym8u_asym8u_per_tensor_meta(
1525
+ input: torch.Tensor,
1526
+ weight: torch.Tensor,
1527
+ bias: torch.Tensor,
1528
+ stride: Tuple[int],
1529
+ padding: Tuple[int],
1530
+ dilation: Tuple[int],
1531
+ groups: int,
1532
+ in_zero_point: int,
1533
+ weight_zero_point: int,
1534
+ bias_scale: float,
1535
+ output_scale: float,
1536
+ output_zero_point: int,
1537
+ out_multiplier: int,
1538
+ out_shift: int,
1539
+ ) -> torch.Tensor:
1540
+ assert (
1541
+ input.dtype == torch.uint8
1542
+ and weight.dtype == torch.uint8
1543
+ and bias.dtype == torch.int32
1544
+ )
1545
+ out_channels, *kernel_size, _ = weight.shape
1546
+
1547
+ in_size = input.shape
1548
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1549
+ assert len(in_size) > 2
1550
+ assert len(in_size) < 6
1551
+
1552
+ # Compute the output tensor size
1553
+ output_size = (
1554
+ get_conv1d_output_size(
1555
+ in_size,
1556
+ out_channels,
1557
+ stride[-1],
1558
+ padding[-1],
1559
+ dilation[-1],
1560
+ kernel_size[0],
1561
+ True,
1562
+ )
1563
+ if len(in_size) == 3
1564
+ else get_conv2d_output_size(
1565
+ in_size, out_channels, stride, padding, dilation, kernel_size, True
1566
+ )
1567
+ )
1568
+
1569
+ return input.new_empty(output_size, dtype=input.dtype)
1570
+
1571
+
1572
+ @register_fake(
1573
+ "cadence::quantized_conv2d_nchw_depthwise_asym8sxsym8s_asym8s.per_tensor"
1574
+ )
1575
+ def quantized_conv2d_nchw_depthwise_asym8sxsym8s_asym8s_per_tensor_meta(
1576
+ input: torch.Tensor,
1577
+ weight: torch.Tensor,
1578
+ bias: torch.Tensor,
1579
+ stride: Tuple[int],
1580
+ padding: Tuple[int],
1581
+ dilation: Tuple[int],
1582
+ groups: int,
1583
+ in_zero_point: int,
1584
+ weight_zero_point: int,
1585
+ bias_scale: float,
1586
+ output_scale: float,
1587
+ output_zero_point: int,
1588
+ out_multiplier: int,
1589
+ out_shift: int,
1590
+ ) -> torch.Tensor:
1591
+ assert (
1592
+ input.dtype == torch.int8
1593
+ and weight.dtype == torch.int8
1594
+ and bias.dtype == torch.int32
1595
+ )
1596
+ out_channels, _, *kernel_size = weight.shape
1597
+
1598
+ in_size = input.shape
1599
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1600
+ assert len(in_size) > 2
1601
+ assert len(in_size) < 6
1602
+
1603
+ # Compute the output tensor size
1604
+ output_size = (
1605
+ get_conv1d_output_size(
1606
+ in_size,
1607
+ out_channels,
1608
+ stride[-1],
1609
+ padding[-1],
1610
+ dilation[-1],
1611
+ kernel_size[0],
1612
+ False,
1613
+ )
1614
+ if len(in_size) == 3
1615
+ else get_conv2d_output_size(
1616
+ in_size, out_channels, stride, padding, dilation, kernel_size, False
1617
+ )
1618
+ )
1619
+
1620
+ return input.new_empty(output_size, dtype=input.dtype)
1621
+
1622
+
1623
+ @register_fake(
1624
+ "cadence::quantized_conv2d_nchw_depthwise_asym8uxsym8u_asym8u.per_tensor"
1625
+ )
1626
+ def quantized_conv2d_nchw_depthwise_asym8uxsym8u_asym8u_per_tensor_meta(
1627
+ input: torch.Tensor,
1628
+ weight: torch.Tensor,
1629
+ bias: torch.Tensor,
1630
+ stride: Tuple[int],
1631
+ padding: Tuple[int],
1632
+ dilation: Tuple[int],
1633
+ groups: int,
1634
+ in_zero_point: int,
1635
+ weight_zero_point: int,
1636
+ bias_scale: float,
1637
+ output_scale: float,
1638
+ output_zero_point: int,
1639
+ out_multiplier: int,
1640
+ out_shift: int,
1641
+ ) -> torch.Tensor:
1642
+ assert (
1643
+ input.dtype == torch.uint8
1644
+ and weight.dtype == torch.uint8
1645
+ and bias.dtype == torch.int32
1646
+ )
1647
+ out_channels, _, *kernel_size = weight.shape
1648
+
1649
+ in_size = input.shape
1650
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1651
+ assert len(in_size) > 2
1652
+ assert len(in_size) < 6
1653
+
1654
+ # Compute the output tensor size
1655
+ output_size = (
1656
+ get_conv1d_output_size(
1657
+ in_size,
1658
+ out_channels,
1659
+ stride[-1],
1660
+ padding[-1],
1661
+ dilation[-1],
1662
+ kernel_size[0],
1663
+ False,
1664
+ )
1665
+ if len(in_size) == 3
1666
+ else get_conv2d_output_size(
1667
+ in_size, out_channels, stride, padding, dilation, kernel_size, False
1668
+ )
1669
+ )
1670
+
1671
+ return input.new_empty(output_size, dtype=input.dtype)
1672
+
1673
+
1674
+ @register_fake(
1675
+ "cadence::quantized_conv2d_nhwc_depthwise_asym8sxsym8s_asym8s.per_tensor"
1676
+ )
1677
+ def quantized_conv2d_nhwc_depthwise_asym8sxsym8s_asym8s_per_tensor_meta(
1678
+ input: torch.Tensor,
1679
+ weight: torch.Tensor,
1680
+ bias: torch.Tensor,
1681
+ stride: Tuple[int],
1682
+ padding: Tuple[int],
1683
+ dilation: Tuple[int],
1684
+ groups: int,
1685
+ in_zero_point: int,
1686
+ weight_zero_point: int,
1687
+ bias_scale: float,
1688
+ output_scale: float,
1689
+ output_zero_point: int,
1690
+ out_multiplier: int,
1691
+ out_shift: int,
1692
+ ) -> torch.Tensor:
1693
+ assert (
1694
+ input.dtype == torch.int8
1695
+ and weight.dtype == torch.int8
1696
+ and bias.dtype == torch.int32
1697
+ )
1698
+ out_channels, *kernel_size, _ = weight.shape
1699
+
1700
+ in_size = input.shape
1701
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1702
+ assert len(in_size) > 2
1703
+ assert len(in_size) < 6
1704
+
1705
+ # Compute the output tensor size
1706
+ output_size = (
1707
+ get_conv1d_output_size(
1708
+ in_size,
1709
+ out_channels,
1710
+ stride[-1],
1711
+ padding[-1],
1712
+ dilation[-1],
1713
+ kernel_size[0],
1714
+ True,
1715
+ )
1716
+ if len(in_size) == 3
1717
+ else get_conv2d_output_size(
1718
+ in_size, out_channels, stride, padding, dilation, kernel_size, True
1719
+ )
1720
+ )
1721
+
1722
+ return input.new_empty(output_size, dtype=input.dtype)
1723
+
1724
+
1725
+ @register_fake(
1726
+ "cadence::quantized_conv2d_nhwc_depthwise_asym8uxsym8u_asym8u.per_tensor"
1727
+ )
1728
+ def quantized_conv2d_nhwc_depthwise_asym8uxsym8u_asym8u_per_tensor_meta(
1729
+ input: torch.Tensor,
1730
+ weight: torch.Tensor,
1731
+ bias: torch.Tensor,
1732
+ stride: Tuple[int],
1733
+ padding: Tuple[int],
1734
+ dilation: Tuple[int],
1735
+ groups: int,
1736
+ in_zero_point: int,
1737
+ weight_zero_point: int,
1738
+ bias_scale: float,
1739
+ output_scale: float,
1740
+ output_zero_point: int,
1741
+ out_multiplier: int,
1742
+ out_shift: int,
1743
+ ) -> torch.Tensor:
1744
+ assert (
1745
+ input.dtype == torch.uint8
1746
+ and weight.dtype == torch.uint8
1747
+ and bias.dtype == torch.int32
1748
+ )
1749
+ out_channels, *kernel_size, _ = weight.shape
1750
+
1751
+ in_size = input.shape
1752
+ # Assert that the input tensor has at least 3 dimensions, and at most 6
1753
+ assert len(in_size) > 2
1754
+ assert len(in_size) < 6
1755
+
1756
+ # Compute the output tensor size
1757
+ output_size = (
1758
+ get_conv1d_output_size(
1759
+ in_size,
1760
+ out_channels,
1761
+ stride[-1],
1762
+ padding[-1],
1763
+ dilation[-1],
1764
+ kernel_size[0],
1765
+ True,
1766
+ )
1767
+ if len(in_size) == 3
1768
+ else get_conv2d_output_size(
1769
+ in_size, out_channels, stride, padding, dilation, kernel_size, True
1770
+ )
1771
+ )
1772
+
1773
+ return input.new_empty(output_size, dtype=input.dtype)
1774
+
1775
+
1776
+ @register_fake("cadence::quantized_layer_norm")
1777
+ def quantized_layer_norm_meta(
1778
+ input: torch.Tensor,
1779
+ X_scale: torch.Tensor,
1780
+ X_zero_point: torch.Tensor,
1781
+ normalized_shape: list[int],
1782
+ weight: torch.Tensor,
1783
+ bias: torch.Tensor,
1784
+ eps: float,
1785
+ output_scale: float,
1786
+ output_zero_point: int,
1787
+ ) -> torch.Tensor:
1788
+ return input.new_empty(input.size(), dtype=input.dtype)
1789
+
1790
+
1791
+ @register_fake("cadence::quantized_layer_norm.per_tensor")
1792
+ def quantized_layer_norm_per_tensor_meta(
1793
+ input: torch.Tensor,
1794
+ X_scale: float,
1795
+ X_zero_point: int,
1796
+ normalized_shape: list[int],
1797
+ weight: torch.Tensor,
1798
+ bias: torch.Tensor,
1799
+ eps: float,
1800
+ output_scale: float,
1801
+ output_zero_point: int,
1802
+ ) -> torch.Tensor:
1803
+ return input.new_empty(input.size(), dtype=input.dtype)
1804
+
1805
+
1806
+ @register_fake("cadence::quantized_relu")
1807
+ def quantized_relu_meta(
1808
+ X: torch.Tensor,
1809
+ X_zero_point: torch.Tensor,
1810
+ out_zero_point: int,
1811
+ out_multiplier: torch.Tensor,
1812
+ out_shift: torch.Tensor,
1813
+ ) -> torch.Tensor:
1814
+ return X.new_empty(X.size(), dtype=X.dtype)
1815
+
1816
+
1817
+ @register_fake("cadence::quantized_matmul")
1818
+ def quantized_matmul_meta(
1819
+ X: torch.Tensor,
1820
+ X_zero_point: int,
1821
+ Y: torch.Tensor,
1822
+ Y_zero_point: int,
1823
+ bias: Optional[torch.Tensor],
1824
+ out_multiplier: int,
1825
+ out_shift: int,
1826
+ out_zero_point: int,
1827
+ transposed: bool = False,
1828
+ ) -> torch.Tensor:
1829
+ X_size = list(X.size())
1830
+ Y_size = list(Y.size())
1831
+
1832
+ # Get the batch dimensions for both tensors
1833
+ X_batch_dims = X_size[:-2]
1834
+ Y_batch_dims = Y_size[:-2]
1835
+
1836
+ # If they don't match, check that they're compatible
1837
+ if X_batch_dims != Y_batch_dims:
1838
+ assert prod(X_batch_dims) == prod(
1839
+ Y_batch_dims
1840
+ ), f"Batch dimensions of X and Y do not match: {X_batch_dims} vs {Y_batch_dims}"
1841
+
1842
+ # Get the matmul output size
1843
+ if transposed:
1844
+ assert X_size[-1] == Y_size[-1], "matrices cannot be multiplied"
1845
+ mat_size = [X_size[-2], Y_size[-2]]
1846
+ else:
1847
+ assert X_size[-1] == Y_size[-2], "matrices cannot be multiplied"
1848
+ mat_size = [X_size[-2], Y_size[-1]]
1849
+
1850
+ # Combine the larger batch dimensions with the matmul output size
1851
+ out_size = (
1852
+ X_batch_dims + mat_size
1853
+ if len(X_batch_dims) > len(Y_batch_dims)
1854
+ else Y_batch_dims + mat_size
1855
+ )
1856
+
1857
+ return X.new_empty(out_size, dtype=X.dtype)
1858
+
1859
+
1860
+ @register_fake("cadence::quantized_matmul_asym8sxasym8s_asym8s")
1861
+ def quantized_matmul_asym8sxasym8s_asym8s_meta(
1862
+ X: torch.Tensor,
1863
+ X_zero_point: int,
1864
+ Y: torch.Tensor,
1865
+ Y_zero_point: int,
1866
+ bias: Optional[torch.Tensor],
1867
+ out_multiplier: int,
1868
+ out_shift: int,
1869
+ out_zero_point: int,
1870
+ transposed: bool = False,
1871
+ ) -> torch.Tensor:
1872
+ X_size = list(X.size())
1873
+ Y_size = list(Y.size())
1874
+
1875
+ # Get the batch dimensions for both tensors
1876
+ X_batch_dims = X_size[:-2]
1877
+ Y_batch_dims = Y_size[:-2]
1878
+
1879
+ # If they don't match, check that they're compatible
1880
+ if X_batch_dims != Y_batch_dims:
1881
+ assert prod(X_batch_dims) == prod(
1882
+ Y_batch_dims
1883
+ ), f"Batch dimensions of X and Y do not match: {X_batch_dims} vs {Y_batch_dims}"
1884
+
1885
+ # Get the matmul output size
1886
+ if transposed:
1887
+ assert X_size[-1] == Y_size[-1], "matrices cannot be multiplied"
1888
+ mat_size = [X_size[-2], Y_size[-2]]
1889
+ else:
1890
+ assert X_size[-1] == Y_size[-2], "matrices cannot be multiplied"
1891
+ mat_size = [X_size[-2], Y_size[-1]]
1892
+
1893
+ # Combine the larger batch dimensions with the matmul output size
1894
+ out_size = (
1895
+ X_batch_dims + mat_size
1896
+ if len(X_batch_dims) > len(Y_batch_dims)
1897
+ else Y_batch_dims + mat_size
1898
+ )
1899
+
1900
+ return X.new_empty(out_size, dtype=X.dtype)
1901
+
1902
+
1903
+ @register_fake("cadence::quantized_matmul_asym8uxasym8u_asym8u")
1904
+ def quantized_matmul_asym8uxasym8u_asym8u_meta(
1905
+ X: torch.Tensor,
1906
+ X_zero_point: int,
1907
+ Y: torch.Tensor,
1908
+ Y_zero_point: int,
1909
+ bias: Optional[torch.Tensor],
1910
+ out_multiplier: int,
1911
+ out_shift: int,
1912
+ out_zero_point: int,
1913
+ transposed: bool = False,
1914
+ ) -> torch.Tensor:
1915
+ X_size = list(X.size())
1916
+ Y_size = list(Y.size())
1917
+
1918
+ # Get the batch dimensions for both tensors
1919
+ X_batch_dims = X_size[:-2]
1920
+ Y_batch_dims = Y_size[:-2]
1921
+
1922
+ # If they don't match, check that they're compatible
1923
+ if X_batch_dims != Y_batch_dims:
1924
+ assert prod(X_batch_dims) == prod(
1925
+ Y_batch_dims
1926
+ ), f"Batch dimensions of X and Y do not match: {X_batch_dims} vs {Y_batch_dims}"
1927
+
1928
+ # Get the matmul output size
1929
+ if transposed:
1930
+ assert X_size[-1] == Y_size[-1], "matrices cannot be multiplied"
1931
+ mat_size = [X_size[-2], Y_size[-2]]
1932
+ else:
1933
+ assert X_size[-1] == Y_size[-2], "matrices cannot be multiplied"
1934
+ mat_size = [X_size[-2], Y_size[-1]]
1935
+
1936
+ # Combine the larger batch dimensions with the matmul output size
1937
+ out_size = (
1938
+ X_batch_dims + mat_size
1939
+ if len(X_batch_dims) > len(Y_batch_dims)
1940
+ else Y_batch_dims + mat_size
1941
+ )
1942
+
1943
+ return X.new_empty(out_size, dtype=X.dtype)
1944
+
1945
+
1946
+ @register_fake("cadence::im2row")
1947
+ def im2row_meta(
1948
+ input: torch.Tensor,
1949
+ kernel_size: Tuple[int],
1950
+ dilation: Tuple[int],
1951
+ padding: Tuple[int],
1952
+ stride: Tuple[int],
1953
+ in_zero_point: torch.Tensor,
1954
+ channel_last: bool = False,
1955
+ ) -> torch.Tensor:
1956
+ output_size = get_im2row_output_size(
1957
+ input, kernel_size, dilation, padding, stride, channel_last
1958
+ )
1959
+ return input.new_empty(output_size, dtype=input.dtype)
1960
+
1961
+
1962
+ @register_fake("cadence::im2row.per_tensor")
1963
+ def im2row_per_tensor_meta(
1964
+ input: torch.Tensor,
1965
+ kernel_size: Tuple[int],
1966
+ dilation: Tuple[int],
1967
+ padding: Tuple[int],
1968
+ stride: Tuple[int],
1969
+ in_zero_point: int,
1970
+ channel_last: bool = False,
1971
+ ) -> torch.Tensor:
1972
+ output_size = get_im2row_output_size(
1973
+ input, kernel_size, dilation, padding, stride, channel_last
1974
+ )
1975
+ return input.new_empty(output_size, dtype=input.dtype)
1976
+
1977
+
1978
+ @register_fake("cadence::linalg_svd")
1979
+ def linalg_svd_meta(
1980
+ A: torch.Tensor,
1981
+ full_matrices: bool = False,
1982
+ compute_uv: bool = True,
1983
+ driver: Optional[str] = None,
1984
+ ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
1985
+ # Based on the _linalg_svd meta implementation, but ensuring contiguous strides
1986
+
1987
+ # Get the shapes from the original meta function
1988
+ U, S, Vh = _linalg_svd_meta(A, full_matrices, compute_uv, driver)
1989
+
1990
+ # Create new tensors with contiguous strides to fix the non-contiguous issue
1991
+ U_contiguous = A.new_empty(U.shape, dtype=A.dtype).contiguous()
1992
+ S_contiguous = A.new_empty(S.shape, dtype=A.dtype).contiguous()
1993
+ Vh_contiguous = A.new_empty(Vh.shape, dtype=A.dtype).contiguous()
1994
+
1995
+ return U_contiguous, S_contiguous, Vh_contiguous
1996
+
1997
+
1998
+ @register_fake("cadence::requantize")
1999
+ def requantize_meta(
2000
+ input: torch.Tensor,
2001
+ in_scale: torch.Tensor,
2002
+ in_zero_point: torch.Tensor,
2003
+ out_scale: torch.Tensor,
2004
+ out_zero_point: torch.Tensor,
2005
+ dtype: ScalarType,
2006
+ ) -> torch.Tensor:
2007
+ return input.new_empty(
2008
+ input.size(),
2009
+ # pyre-ignore[6]: Incompatible type
2010
+ dtype=dtype,
2011
+ )
2012
+
2013
+
2014
+ @register_fake("cadence::requantize.per_tensor")
2015
+ def requantize_per_tensor_meta(
2016
+ input: torch.Tensor,
2017
+ in_scale: float,
2018
+ in_zero_point: int,
2019
+ out_scale: float,
2020
+ out_zero_point: int,
2021
+ dtype: ScalarType,
2022
+ ) -> torch.Tensor:
2023
+ return input.new_empty(
2024
+ input.size(),
2025
+ # pyre-ignore[6]: Incompatible type
2026
+ dtype=dtype,
2027
+ )
2028
+
2029
+
2030
+ @register_fake("cadence::quantized_relu.per_tensor")
2031
+ def quantized_relu_per_tensor_meta(
2032
+ input: torch.Tensor,
2033
+ in_zero_point: int,
2034
+ out_zero_point: int,
2035
+ out_multiplier: int,
2036
+ out_shift: int,
2037
+ ) -> torch.Tensor:
2038
+ return input.new_empty(input.size(), dtype=input.dtype)
2039
+
2040
+
2041
+ @register_fake("cadence::quantized_relu_asym8s_asym8s.per_tensor")
2042
+ def quantized_relu_asym8s_asym8s_per_tensor_meta(
2043
+ input: torch.Tensor,
2044
+ in_zero_point: int,
2045
+ out_zero_point: int,
2046
+ out_multiplier: int,
2047
+ out_shift: int,
2048
+ ) -> torch.Tensor:
2049
+ return input.new_empty(input.size(), dtype=input.dtype)
2050
+
2051
+
2052
+ @register_fake("cadence::quantized_relu_asym8u_asym8u.per_tensor")
2053
+ def quantized_relu_asym8u_asym8u_per_tensor_meta(
2054
+ input: torch.Tensor,
2055
+ in_zero_point: int,
2056
+ out_zero_point: int,
2057
+ out_multiplier: int,
2058
+ out_shift: int,
2059
+ ) -> torch.Tensor:
2060
+ return input.new_empty(input.size(), dtype=input.dtype)
2061
+
2062
+
2063
+ @register_fake("cadence::fully_connected")
2064
+ def fully_connected_meta(
2065
+ src: torch.Tensor,
2066
+ weight: torch.Tensor,
2067
+ bias: torch.Tensor,
2068
+ ) -> torch.Tensor:
2069
+ # src comes in shape [leading_dims, in_dim]
2070
+ # weight comes in shape [out_dim, in_dim]
2071
+ # output comes in empty with shape [leading_dims, out_dim]
2072
+ out_size = list(src.size())
2073
+ weight_size = list(weight.size())
2074
+ assert len(weight_size) == 2
2075
+ out_size[-1] = weight_size[0]
2076
+ return src.new_empty(out_size, dtype=src.dtype)
2077
+
2078
+
2079
+ @register_fake("cadence::quantized_fully_connected")
2080
+ def quantized_fully_connected_meta(
2081
+ src: torch.Tensor,
2082
+ weight: torch.Tensor,
2083
+ bias: torch.Tensor,
2084
+ in_zero_point: int,
2085
+ weight_zero_point: torch.Tensor,
2086
+ out_multiplier: torch.Tensor,
2087
+ out_shift: torch.Tensor,
2088
+ out_zero_point: int,
2089
+ offset: Optional[torch.Tensor],
2090
+ ) -> torch.Tensor:
2091
+ # src comes in shape [leading_dims, in_dim]
2092
+ # weight comes in shape [out_dim, in_dim]
2093
+ # output comes in empty with shape [leading_dims, out_dim]
2094
+ assert src.shape[0] == 1
2095
+ out_size = list(src.size())
2096
+ weight_size = list(weight.size())
2097
+ assert len(weight_size) == 2
2098
+ out_size[-1] = weight_size[0]
2099
+ return src.new_empty(out_size, dtype=src.dtype)
2100
+
2101
+
2102
+ @register_fake("cadence::quantized_fully_connected.per_tensor")
2103
+ def quantized_fully_connected_per_tensor_meta(
2104
+ src: torch.Tensor,
2105
+ weight: torch.Tensor,
2106
+ bias: torch.Tensor,
2107
+ in_zero_point: int,
2108
+ weight_zero_point: int,
2109
+ out_multiplier: int,
2110
+ out_shift: int,
2111
+ out_zero_point: int,
2112
+ offset: Optional[torch.Tensor],
2113
+ ) -> torch.Tensor:
2114
+ # src comes in shape [leading_dims, in_dim]
2115
+ # weight comes in shape [out_dim, in_dim]
2116
+ # output comes in empty with shape [leading_dims, out_dim]
2117
+ assert src.shape[0] == 1
2118
+ out_size = list(src.size())
2119
+ weight_size = list(weight.size())
2120
+ assert len(weight_size) == 2
2121
+ out_size[-1] = weight_size[0]
2122
+ return src.new_empty(out_size, dtype=src.dtype)
2123
+
2124
+
2125
+ @register_fake("cadence::quantized_fully_connected_asym8sxasym8s_asym8s.per_tensor")
2126
+ def quantized_fully_connected_asym8sxasym8s_asym8s_per_tensor_meta(
2127
+ src: torch.Tensor,
2128
+ weight: torch.Tensor,
2129
+ bias: torch.Tensor,
2130
+ in_zero_point: int,
2131
+ weight_zero_point: int,
2132
+ out_multiplier: int,
2133
+ out_shift: int,
2134
+ out_zero_point: int,
2135
+ offset: Optional[torch.Tensor],
2136
+ ) -> torch.Tensor:
2137
+ # src comes in shape [leading_dims, in_dim]
2138
+ # weight comes in shape [out_dim, in_dim]
2139
+ # output comes in empty with shape [leading_dims, out_dim]
2140
+ assert src.shape[0] == 1
2141
+ out_size = list(src.size())
2142
+ weight_size = list(weight.size())
2143
+ assert len(weight_size) == 2
2144
+ out_size[-1] = weight_size[0]
2145
+ return src.new_empty(out_size, dtype=src.dtype)
2146
+
2147
+
2148
+ @register_fake("cadence::quantized_fully_connected_asym8uxasym8u_asym8u.per_tensor")
2149
+ def quantized_fully_connected_asym8uxasym8u_asym8u_per_tensor_meta(
2150
+ src: torch.Tensor,
2151
+ weight: torch.Tensor,
2152
+ bias: torch.Tensor,
2153
+ in_zero_point: int,
2154
+ weight_zero_point: int,
2155
+ out_multiplier: int,
2156
+ out_shift: int,
2157
+ out_zero_point: int,
2158
+ offset: Optional[torch.Tensor],
2159
+ ) -> torch.Tensor:
2160
+ # src comes in shape [leading_dims, in_dim]
2161
+ # weight comes in shape [out_dim, in_dim]
2162
+ # output comes in empty with shape [leading_dims, out_dim]
2163
+ assert src.shape[0] == 1
2164
+ out_size = list(src.size())
2165
+ weight_size = list(weight.size())
2166
+ assert len(weight_size) == 2
2167
+ out_size[-1] = weight_size[0]
2168
+ return src.new_empty(out_size, dtype=src.dtype)
2169
+
2170
+
2171
+ @register_fake("cadence::conv1d")
2172
+ def conv1d_meta(
2173
+ input: torch.Tensor,
2174
+ weight: torch.Tensor,
2175
+ bias: torch.Tensor,
2176
+ stride: Tuple[int],
2177
+ padding: Tuple[int],
2178
+ dilation: Tuple[int],
2179
+ groups: int,
2180
+ ) -> torch.Tensor:
2181
+ # Validate tensor dimensions
2182
+ assert len(input.shape) == 3, f"Conv1d expects 3D input, got {len(input.shape)}D"
2183
+ assert len(weight.shape) == 3, f"Conv1d expects 3D weight, got {len(weight.shape)}D"
2184
+
2185
+ # Extract dimensions
2186
+ batch_size, in_channels, length = input.shape
2187
+ out_channels, weight_in_channels, kernel_size = weight.shape
2188
+
2189
+ # Validate groups parameter and channel consistency
2190
+ assert groups > 0, f"groups must be positive, got {groups}"
2191
+ assert (
2192
+ in_channels % groups == 0
2193
+ ), f"in_channels ({in_channels}) must be divisible by groups ({groups})"
2194
+ assert (
2195
+ out_channels % groups == 0
2196
+ ), f"out_channels ({out_channels}) must be divisible by groups ({groups})"
2197
+
2198
+ # Validate weight channels match input channels divided by groups
2199
+ expected_weight_in_channels = in_channels // groups
2200
+ assert (
2201
+ weight_in_channels == expected_weight_in_channels
2202
+ ), f"Expected weight to have {expected_weight_in_channels} input channels (in_channels/groups), but got {weight_in_channels}"
2203
+
2204
+ output_size = get_conv1d_output_size(
2205
+ input.shape,
2206
+ out_channels,
2207
+ stride[0],
2208
+ padding[0],
2209
+ dilation[0],
2210
+ kernel_size,
2211
+ False,
2212
+ )
2213
+
2214
+ return input.new_empty(output_size, dtype=input.dtype)
2215
+
2216
+
2217
+ @register_fake("cadence::conv2d")
2218
+ def conv2d_meta(
2219
+ input: torch.Tensor,
2220
+ weight: torch.Tensor,
2221
+ bias: torch.Tensor,
2222
+ stride: Tuple[int],
2223
+ padding: Tuple[int],
2224
+ dilation: Tuple[int],
2225
+ groups: int,
2226
+ ) -> torch.Tensor:
2227
+ assert (
2228
+ len(weight.shape) == 4
2229
+ ), f"Conv2d expects a 4D weight, got {len(weight.shape)}D"
2230
+ out_channels, _, *kernel_size = weight.shape
2231
+ in_size = input.shape
2232
+ assert len(in_size) == 4, f"conv2d expects 4D input, got {len(in_size)}D"
2233
+
2234
+ output_size = get_conv2d_output_size(
2235
+ in_size, out_channels, stride, padding, dilation, kernel_size, False
2236
+ )
2237
+
2238
+ return input.new_empty(output_size, dtype=input.dtype)
2239
+
2240
+
2241
+ @register_fake("cadence::conv3d")
2242
+ def conv3d_meta(
2243
+ input: torch.Tensor,
2244
+ weight: torch.Tensor,
2245
+ bias: torch.Tensor,
2246
+ stride: Tuple[int, int, int],
2247
+ padding: Tuple[int, int, int],
2248
+ dilation: Tuple[int, int, int],
2249
+ groups: int,
2250
+ ) -> torch.Tensor:
2251
+ assert (
2252
+ len(weight.shape) == 5
2253
+ ), f"Conv3d expects a 5D weight, got {len(weight.shape)}D"
2254
+ out_channels, _, *kernel_size = weight.shape
2255
+ in_size = input.shape
2256
+ assert len(in_size) == 5, f"conv3d expects 5D input, got {len(in_size)}D"
2257
+
2258
+ # Helper to compute 3D convolution output size
2259
+ def get_conv3d_output_size(
2260
+ in_size: torch.Size,
2261
+ out_channels: int,
2262
+ stride: Tuple[int, int, int],
2263
+ padding: Tuple[int, int, int],
2264
+ dilation: Tuple[int, int, int],
2265
+ kernel_size: list[int],
2266
+ ) -> torch.Size:
2267
+ N, C, D, H, W = in_size
2268
+
2269
+ dout = (D + 2 * padding[0] - dilation[0] * (kernel_size[0] - 1) - 1) // stride[
2270
+ 0
2271
+ ] + 1
2272
+ hout = (H + 2 * padding[1] - dilation[1] * (kernel_size[1] - 1) - 1) // stride[
2273
+ 1
2274
+ ] + 1
2275
+ wout = (W + 2 * padding[2] - dilation[2] * (kernel_size[2] - 1) - 1) // stride[
2276
+ 2
2277
+ ] + 1
2278
+
2279
+ return torch.Size((N, out_channels, dout, hout, wout))
2280
+
2281
+ output_size = get_conv3d_output_size(
2282
+ in_size, out_channels, stride, padding, dilation, kernel_size
2283
+ )
2284
+
2285
+ return input.new_empty(output_size, dtype=input.dtype)
2286
+
2287
+
2288
+ @register_fake("cadence::transposed_convolution")
2289
+ def transposed_convolution_meta(
2290
+ input: torch.Tensor,
2291
+ weight: torch.Tensor,
2292
+ bias: torch.Tensor,
2293
+ stride: Tuple[int],
2294
+ padding: Tuple[int],
2295
+ dilation: Tuple[int],
2296
+ output_padding: Tuple[int],
2297
+ groups: int,
2298
+ channel_last: bool = False,
2299
+ ) -> torch.Tensor:
2300
+ # The native definition of torch transposed conv will have weight shape as
2301
+ # (in_channels, out_channels/groups, *kernel_size).
2302
+ # However, the two channel position is flipped in the Cadence pass of replacing it
2303
+ # with cadence::transposed_convolution here: https://fburl.com/code/d2s7pkyy
2304
+ out_channels, _input_channels, *kernel_size = weight.shape
2305
+ out_channels *= groups
2306
+ in_size = input.shape
2307
+
2308
+ # Get the output size of a transposed 1D convolution given the input size and parameters
2309
+ def get_conv_transpose1d_output_size(
2310
+ in_size: torch.Size,
2311
+ kernel_size: list[int],
2312
+ out_channels: int,
2313
+ stride: Tuple[int],
2314
+ padding: Tuple[int],
2315
+ dilation: Tuple[int],
2316
+ output_padding: Tuple[int],
2317
+ channel_last: bool = False,
2318
+ ) -> torch.Size:
2319
+ assert len(in_size) == 3
2320
+ if channel_last:
2321
+ N, L, C = in_size
2322
+ else:
2323
+ N, C, L = in_size
2324
+
2325
+ # Reference: https://pytorch.org/docs/stable/generated/torch.nn.ConvTranspose1d.html
2326
+ lout = (
2327
+ (L - 1) * stride[0]
2328
+ - 2 * padding[0]
2329
+ + dilation[0] * (kernel_size[0] - 1)
2330
+ + output_padding[0]
2331
+ + 1
2332
+ )
2333
+
2334
+ if channel_last:
2335
+ return torch.Size((in_size[0], lout, out_channels))
2336
+ else:
2337
+ return torch.Size((in_size[0], out_channels, lout))
2338
+
2339
+ def get_conv_transpose2d_output_size(
2340
+ in_size: torch.Size,
2341
+ kernel_size: list[int],
2342
+ out_channels: int,
2343
+ stride: Tuple[int],
2344
+ padding: Tuple[int],
2345
+ dilation: Tuple[int],
2346
+ output_padding: Tuple[int],
2347
+ channel_last: bool = False,
2348
+ ) -> torch.Size:
2349
+ assert len(in_size) == 4
2350
+ if channel_last:
2351
+ N, H, W, C = in_size
2352
+ else:
2353
+ N, C, H, W = in_size
2354
+
2355
+ # Reference: https://pytorch.org/docs/stable/generated/torch.nn.ConvTranspose2d.html
2356
+ hout = (
2357
+ (H - 1) * stride[0]
2358
+ - 2 * padding[0]
2359
+ + dilation[0] * (kernel_size[0] - 1)
2360
+ + output_padding[0]
2361
+ + 1
2362
+ )
2363
+ wout = (
2364
+ (W - 1) * stride[1]
2365
+ - 2 * padding[1]
2366
+ + dilation[1] * (kernel_size[1] - 1)
2367
+ + output_padding[1]
2368
+ + 1
2369
+ )
2370
+
2371
+ if channel_last:
2372
+ return torch.Size((in_size[0], hout, wout, out_channels))
2373
+ else:
2374
+ return torch.Size((in_size[0], out_channels, hout, wout))
2375
+
2376
+ # Compute the output tensor size
2377
+ if len(in_size) == 3:
2378
+ output_size = get_conv_transpose1d_output_size(
2379
+ in_size,
2380
+ kernel_size,
2381
+ out_channels,
2382
+ stride,
2383
+ padding,
2384
+ dilation,
2385
+ output_padding,
2386
+ channel_last,
2387
+ )
2388
+ elif len(in_size) == 4:
2389
+ output_size = get_conv_transpose2d_output_size(
2390
+ in_size,
2391
+ kernel_size,
2392
+ out_channels,
2393
+ stride,
2394
+ padding,
2395
+ dilation,
2396
+ output_padding,
2397
+ channel_last,
2398
+ )
2399
+ else:
2400
+ raise NotImplementedError(
2401
+ f"transposed_convolution meta is not implemented for input tensor with {len(in_size)} dimensions"
2402
+ )
2403
+
2404
+ return input.new_empty(output_size, dtype=input.dtype)
2405
+
2406
+
2407
+ @register_fake("cadence::avg_pool2d")
2408
+ def avg_pool2d_meta(
2409
+ input: torch.Tensor,
2410
+ kernel_size: Tuple[int],
2411
+ stride: Tuple[int],
2412
+ padding: Tuple[int],
2413
+ ceil_mode: bool = False,
2414
+ count_include_pad: bool = True,
2415
+ divisor_override: Optional[int] = None,
2416
+ in_zero_point: Optional[torch.Tensor] = None,
2417
+ channel_last: bool = False,
2418
+ ) -> torch.Tensor:
2419
+ # Use torch native meta kernels when operator semantics are similar
2420
+ return torch._meta_registrations.meta_avg_pool2d(
2421
+ input,
2422
+ kernel_size,
2423
+ stride,
2424
+ padding,
2425
+ ceil_mode,
2426
+ count_include_pad,
2427
+ divisor_override,
2428
+ )
2429
+
2430
+
2431
+ @register_fake("cadence::transposed_im2row")
2432
+ def transposed_im2row_meta(
2433
+ input: torch.Tensor,
2434
+ kernel_size: Tuple[int],
2435
+ dilation: Tuple[int],
2436
+ padding: Tuple[int],
2437
+ stride: Tuple[int],
2438
+ output_padding: Tuple[int],
2439
+ in_zero_point: torch.Tensor,
2440
+ channel_last: bool = False,
2441
+ ) -> torch.Tensor:
2442
+ """
2443
+ Shape inference for transposed_im2row operation.
2444
+
2445
+ Returns shape: (N, H_out * W_out, K_h * K_w * C_in)
2446
+ """
2447
+ if len(input.shape) == 3:
2448
+ height_dim = 1 if channel_last else 2
2449
+ input = input.unsqueeze(height_dim)
2450
+
2451
+ batch_size = input.shape[0]
2452
+ n_input_channels = input.shape[3] if channel_last else input.shape[1]
2453
+ input_height = input.shape[1] if channel_last else input.shape[2]
2454
+ input_width = input.shape[2] if channel_last else input.shape[3]
2455
+
2456
+ # Calculate output spatial dimensions
2457
+ output_height = (
2458
+ (input_height - 1) * stride[0]
2459
+ - 2 * padding[0]
2460
+ + dilation[0] * (kernel_size[0] - 1)
2461
+ + output_padding[0]
2462
+ + 1
2463
+ )
2464
+ output_width = (
2465
+ (input_width - 1) * stride[1]
2466
+ - 2 * padding[1]
2467
+ + dilation[1] * (kernel_size[1] - 1)
2468
+ + output_padding[1]
2469
+ + 1
2470
+ )
2471
+
2472
+ # Patch size is kernel_h * kernel_w * in_channels
2473
+ patch_size = kernel_size[0] * kernel_size[1] * n_input_channels
2474
+ num_patches = output_height * output_width
2475
+ output_size = torch.Size((batch_size, num_patches, patch_size))
2476
+
2477
+ return input.new_empty(output_size, dtype=input.dtype)
2478
+
2479
+
2480
+ @register_fake("cadence::quantized_embedding_byte")
2481
+ def quantized_embedding_byte_meta(
2482
+ weight: torch.Tensor,
2483
+ weight_scales: torch.Tensor,
2484
+ weight_zero_points: torch.Tensor | None,
2485
+ indices: torch.Tensor,
2486
+ pruned_weights: bool = False,
2487
+ ) -> torch.Tensor:
2488
+ assert not pruned_weights
2489
+ assert len(weight.shape) == 2
2490
+ assert 1 <= len(weight_scales.shape) <= 2
2491
+ if len(weight_scales.shape) == 2:
2492
+ num_groups = weight_scales.shape[-1]
2493
+ assert weight.shape[1] % num_groups == 0
2494
+
2495
+ if weight_zero_points is not None:
2496
+ assert weight_zero_points.shape == weight_scales.shape
2497
+
2498
+ assert 1 <= len(indices.shape) <= 2
2499
+ return torch.empty(*indices.shape, weight.shape[1], dtype=torch.float32)
2500
+
2501
+
2502
+ @register_fake("cadence::where_Scalar")
2503
+ def where_Scalar_meta(
2504
+ condition: torch.Tensor,
2505
+ self: float,
2506
+ other: float,
2507
+ ) -> torch.Tensor:
2508
+ return condition.new_empty(condition.size(), dtype=torch.float32)
2509
+
2510
+
2511
+ @register_fake("cadence::rope")
2512
+ def rope_meta(
2513
+ input: torch.Tensor,
2514
+ sin_tensor: torch.Tensor,
2515
+ cos_tensor: torch.Tensor,
2516
+ pos: Optional[torch.Tensor],
2517
+ ) -> torch.Tensor:
2518
+ input_shape = list(input.shape)
2519
+ assert (
2520
+ len(input_shape) in (4, 5) and input_shape[0] == 1
2521
+ ), f"input shape {input_shape} must be (1, seq, h, hd) or (1, seq, h, hd / 2, 2)"
2522
+ seq = input_shape[1]
2523
+ h = input_shape[2]
2524
+ hd = prod(input_shape) / (seq * h)
2525
+ sin_shape = list(sin_tensor.shape)
2526
+ cos_shape = list(cos_tensor.shape)
2527
+ assert sin_shape == cos_shape, f"{sin_shape=} must be same as {cos_shape}"
2528
+ assert (
2529
+ len(sin_shape) == 2 and sin_shape[-1] == hd // 2
2530
+ ), f"{sin_shape=} must be [seq, hd/2]"
2531
+ if pos is not None:
2532
+ assert (
2533
+ len(pos.shape) == 1 and pos.shape[0] == seq
2534
+ ), f"{pos.shape} must be [{seq}]"
2535
+ return input.new_empty(input.shape, dtype=input.dtype)
2536
+
2537
+
2538
+ @register_fake("cadence::idma_copy")
2539
+ def copy_idma_copy_impl(
2540
+ src: torch.Tensor,
2541
+ task_num: int = 0,
2542
+ channel: int = 0,
2543
+ ) -> torch.Tensor:
2544
+ return src.new_empty(*src.shape, dtype=src.dtype)
2545
+
2546
+
2547
+ @register_fake("cadence::idma_wait")
2548
+ def copy_idma_wait_impl(
2549
+ src: torch.Tensor,
2550
+ task_num: int = 0,
2551
+ ) -> torch.Tensor:
2552
+ return src.new_empty(*src.shape, dtype=src.dtype)
2553
+
2554
+
2555
+ @register_fake("cadence::idma_load")
2556
+ def idma_load_impl(
2557
+ src: torch.Tensor,
2558
+ task_num: int = 0,
2559
+ channel: int = 0,
2560
+ ) -> torch.Tensor:
2561
+ res = copy_idma_copy_impl(src, task_num, channel)
2562
+ assert isinstance(res, torch.Tensor)
2563
+ return res
2564
+
2565
+
2566
+ @register_fake("cadence::idma_store")
2567
+ def idma_store_impl(
2568
+ src: torch.Tensor,
2569
+ task_num: int = 0,
2570
+ channel: int = 0,
2571
+ ) -> torch.Tensor:
2572
+ res = copy_idma_copy_impl(src, task_num, channel)
2573
+ assert isinstance(res, torch.Tensor)
2574
+ return res
2575
+
2576
+
2577
+ @register_fake("cadence::roi_align_box_processor")
2578
+ def roi_align_box_processor_meta(
2579
+ rois: torch.Tensor,
2580
+ output_size_h: int,
2581
+ output_size_w: int,
2582
+ sampling_ratio: int,
2583
+ aligned: bool,
2584
+ ) -> torch.Tensor:
2585
+ return rois.new_empty((rois.shape[0], 80), dtype=torch.uint8)
2586
+
2587
+
2588
+ @register_fake("cadence::quantized_conv1d_ncl_asym8sxsym8s_asym8s.per_tensor")
2589
+ def quantized_conv1d_ncl_asym8sxsym8s_asym8s_per_tensor_meta(
2590
+ input: torch.Tensor,
2591
+ weight: torch.Tensor,
2592
+ bias: torch.Tensor,
2593
+ stride: Tuple[int],
2594
+ padding: Tuple[int],
2595
+ dilation: Tuple[int],
2596
+ groups: int,
2597
+ in_zero_point: int,
2598
+ weight_zero_point: int,
2599
+ bias_scale: float,
2600
+ output_scale: float,
2601
+ output_zero_point: int,
2602
+ out_multiplier: int,
2603
+ out_shift: int,
2604
+ ) -> torch.Tensor:
2605
+ assert input.dim() == 3 and weight.dim() == 3
2606
+ assert (
2607
+ input.dtype == torch.int8
2608
+ and weight.dtype == torch.int8
2609
+ and bias.dtype == torch.int32
2610
+ )
2611
+ out_channels, _, kernel_size = weight.shape
2612
+ output_size = get_conv1d_output_size(
2613
+ input.shape,
2614
+ out_channels,
2615
+ stride[1],
2616
+ padding[1],
2617
+ dilation[1],
2618
+ kernel_size,
2619
+ False,
2620
+ )
2621
+ return input.new_empty(output_size, dtype=input.dtype)
2622
+
2623
+
2624
+ @register_fake("cadence::quantized_conv1d_ncl_asym8uxsym8u_asym8u.per_tensor")
2625
+ def quantized_conv1d_ncl_asym8uxsym8u_asym8u_per_tensor_meta(
2626
+ input: torch.Tensor,
2627
+ weight: torch.Tensor,
2628
+ bias: torch.Tensor,
2629
+ stride: Tuple[int],
2630
+ padding: Tuple[int],
2631
+ dilation: Tuple[int],
2632
+ groups: int,
2633
+ in_zero_point: int,
2634
+ weight_zero_point: int,
2635
+ bias_scale: float,
2636
+ output_scale: float,
2637
+ output_zero_point: int,
2638
+ out_multiplier: int,
2639
+ out_shift: int,
2640
+ ) -> torch.Tensor:
2641
+ assert input.dim() == 3 and weight.dim() == 3
2642
+ assert (
2643
+ input.dtype == torch.uint8
2644
+ and weight.dtype == torch.uint8
2645
+ and bias.dtype == torch.int32
2646
+ )
2647
+ out_channels, _, kernel_size = weight.shape
2648
+ output_size = get_conv1d_output_size(
2649
+ input.shape,
2650
+ out_channels,
2651
+ stride[1],
2652
+ padding[1],
2653
+ dilation[1],
2654
+ kernel_size,
2655
+ False,
2656
+ )
2657
+ return input.new_empty(output_size, dtype=input.dtype)
2658
+
2659
+
2660
+ @register_fake("cadence::quantized_conv1d_nlc_asym8sxsym8s_asym8s.per_tensor")
2661
+ def quantized_conv1d_nlc_asym8sxsym8s_asym8s_per_tensor_meta(
2662
+ input: torch.Tensor,
2663
+ weight: torch.Tensor,
2664
+ bias: torch.Tensor,
2665
+ stride: Tuple[int],
2666
+ padding: Tuple[int],
2667
+ dilation: Tuple[int],
2668
+ groups: int,
2669
+ in_zero_point: int,
2670
+ weight_zero_point: int,
2671
+ bias_scale: float,
2672
+ output_scale: float,
2673
+ output_zero_point: int,
2674
+ out_multiplier: int,
2675
+ out_shift: int,
2676
+ ) -> torch.Tensor:
2677
+ assert input.dim() == 3 and weight.dim() == 3
2678
+ assert (
2679
+ input.dtype == torch.int8
2680
+ and weight.dtype == torch.int8
2681
+ and bias.dtype == torch.int32
2682
+ )
2683
+ out_channels, kernel_size, _ = weight.shape
2684
+ output_size = get_conv1d_output_size(
2685
+ input.shape,
2686
+ out_channels,
2687
+ stride[1],
2688
+ padding[1],
2689
+ dilation[1],
2690
+ kernel_size,
2691
+ True,
2692
+ )
2693
+ return input.new_empty(output_size, dtype=input.dtype)
2694
+
2695
+
2696
+ @register_fake("cadence::quantized_conv1d_nlc_asym8uxsym8u_asym8u.per_tensor")
2697
+ def quantized_conv1d_nlc_asym8uxsym8u_asym8u_per_tensor_meta(
2698
+ input: torch.Tensor,
2699
+ weight: torch.Tensor,
2700
+ bias: torch.Tensor,
2701
+ stride: Tuple[int],
2702
+ padding: Tuple[int],
2703
+ dilation: Tuple[int],
2704
+ groups: int,
2705
+ in_zero_point: int,
2706
+ weight_zero_point: int,
2707
+ bias_scale: float,
2708
+ output_scale: float,
2709
+ output_zero_point: int,
2710
+ out_multiplier: int,
2711
+ out_shift: int,
2712
+ ) -> torch.Tensor:
2713
+ assert input.dim() == 3 and weight.dim() == 3
2714
+ assert (
2715
+ input.dtype == torch.uint8
2716
+ and weight.dtype == torch.uint8
2717
+ and bias.dtype == torch.int32
2718
+ )
2719
+ out_channels, kernel_size, _ = weight.shape
2720
+ output_size = get_conv1d_output_size(
2721
+ input.shape,
2722
+ out_channels,
2723
+ stride[1],
2724
+ padding[1],
2725
+ dilation[1],
2726
+ kernel_size,
2727
+ True,
2728
+ )
2729
+ return input.new_empty(output_size, dtype=input.dtype)
2730
+
2731
+
2732
+ @register_fake("cadence::_softmax_f32_f32")
2733
+ def softmax_f32_f32_meta(
2734
+ input_tensor: torch.Tensor,
2735
+ dim: int,
2736
+ half_to_float: Optional[bool] = None,
2737
+ ) -> torch.Tensor:
2738
+ assert input_tensor.dtype == torch.float32, "input_tensor must be float32"
2739
+ assert not half_to_float, "half_to_float is not supported"
2740
+ return input_tensor.new_empty(input_tensor.size(), dtype=torch.float32)
2741
+
2742
+
2743
+ @register_fake("cadence::quantized_softmax")
2744
+ def quantized_softmax_meta(
2745
+ input: torch.Tensor,
2746
+ mask: torch.Tensor,
2747
+ dim: int,
2748
+ in_scale: torch.Tensor,
2749
+ in_zero_point: torch.Tensor,
2750
+ out_scale: torch.Tensor,
2751
+ out_zero_point: torch.Tensor,
2752
+ ) -> torch.Tensor:
2753
+ return input.new_empty(input.size(), dtype=input.dtype)
2754
+
2755
+
2756
+ @register_fake("cadence::quantized_softmax.per_tensor")
2757
+ def quantized_softmax_per_tensor_meta(
2758
+ input: torch.Tensor,
2759
+ mask: torch.Tensor,
2760
+ dim: int,
2761
+ in_scale: float,
2762
+ in_zero_point: int,
2763
+ out_scale: float,
2764
+ out_zero_point: int,
2765
+ ) -> torch.Tensor:
2766
+ return input.new_empty(input.size(), dtype=input.dtype)
2767
+
2768
+
2769
+ @register_fake("cadence::quantized_w8a32_linear")
2770
+ def quantized_w8a32_linear_meta(
2771
+ src: torch.Tensor,
2772
+ weight: torch.Tensor,
2773
+ w_scale: float,
2774
+ bias: torch.Tensor,
2775
+ b_scale: float,
2776
+ ) -> torch.Tensor:
2777
+ # src comes in shape [leading_dims, in_dim]
2778
+ # weight comes in shape [in_dim, out_dim]
2779
+ # output comes in empty with shape [leading_dims, out_dim]
2780
+ src_shape = list(src.shape)
2781
+ weight_shape = weight.shape
2782
+ assert (src_shape[-1] % 4) == 0
2783
+ if len(src_shape) >= 2:
2784
+ assert src_shape[-2] == 1
2785
+ assert len(weight_shape) == 2
2786
+ assert src_shape[-1] == weight_shape[-1]
2787
+ src_shape[-1] = weight_shape[0]
2788
+ return src.new_empty(src_shape, dtype=src.dtype)
2789
+
2790
+
2791
+ @register_fake("cadence::quantized_w8a32_conv")
2792
+ def quantized_w8a32_conv_meta(
2793
+ src: torch.Tensor,
2794
+ weight: torch.Tensor,
2795
+ w_scale: float,
2796
+ bias: torch.Tensor,
2797
+ b_scale: float,
2798
+ ) -> torch.Tensor:
2799
+ # src comes in shape [batch, in_length, in_channels]
2800
+ # weight comes in shape [kernel_dim, out_ch, in_ch]
2801
+ # output comes in empty with shape [batch, out_ch, in_length - kernel_dim + 1]
2802
+ assert len(src.shape) == 3
2803
+
2804
+ kernel_size, out_channels, in_channels = weight.shape
2805
+ assert kernel_size == 3
2806
+ assert (out_channels % 4) == 0
2807
+ assert (in_channels % 4) == 0
2808
+ assert in_channels == src.shape[-1]
2809
+
2810
+ # Compute the output tensor size
2811
+ output_size = get_conv1d_output_size(
2812
+ src.permute(0, 2, 1).shape,
2813
+ out_channels,
2814
+ stride=1,
2815
+ padding=0,
2816
+ dilation=1,
2817
+ kernel_size=kernel_size,
2818
+ channel_last=False,
2819
+ )
2820
+ return src.new_empty(output_size, dtype=src.dtype)
2821
+
2822
+
2823
+ @register_fake("cadence::quantized_w8a32_gru")
2824
+ def quantized_w8a32_gru_meta(
2825
+ inputs: torch.Tensor,
2826
+ hidden: torch.Tensor,
2827
+ weights_inputs: torch.Tensor,
2828
+ w_i_scale: float,
2829
+ weights_hidden: torch.Tensor,
2830
+ w_h_scale: float,
2831
+ bias_inputs: torch.Tensor,
2832
+ b_i_scale: float,
2833
+ bias_hidden: torch.Tensor,
2834
+ b_h_scale: float,
2835
+ ) -> torch.Tensor:
2836
+ return hidden.new_empty((2, hidden.shape[-1]), dtype=torch.float32)
2837
+
2838
+
2839
+ # Validate that all meta kernels have reference implementations
2840
+ # This is called at module import time to catch missing implementations early
2841
+ _validate_ref_impl_exists()