diff --git a/backends/arm/_passes/arm_pass_manager.py b/backends/arm/_passes/arm_pass_manager.py index 37398c33a6d..8727e339b53 100644 --- a/backends/arm/_passes/arm_pass_manager.py +++ b/backends/arm/_passes/arm_pass_manager.py @@ -91,7 +91,8 @@ UnsqueezeBeforeRepeatPass, UnsqueezeScalarPlaceholdersPass, ) -from executorch.backends.arm.tosa_specification import ( + +from executorch.backends.arm.tosa.specification import ( TosaLoweringContext, TosaSpecification, ) diff --git a/backends/arm/_passes/decompose_meandim_pass.py b/backends/arm/_passes/decompose_meandim_pass.py index fb88b1c90c0..a78514b6af5 100644 --- a/backends/arm/_passes/decompose_meandim_pass.py +++ b/backends/arm/_passes/decompose_meandim_pass.py @@ -9,7 +9,6 @@ import torch from executorch.backends.arm._passes import ArmPass from executorch.backends.arm._passes.arm_pass_utils import get_node_arg -from executorch.backends.arm.operator_support.pool_2d_support import AvgPool2dSupported from executorch.exir.backend.utils import WhyNoPartitionReporter from executorch.exir.dialects._ops import ops as exir_ops @@ -67,6 +66,11 @@ def __init__(self, graph_module, tosa_spec): super().__init__() self._graph_module = graph_module self._tosa_spec = tosa_spec + # Lazy import to avoid circular dependency with operator_support + from executorch.backends.arm.operator_support.pool_2d_support import ( + AvgPool2dSupported, + ) + self._avg_pool_checker = AvgPool2dSupported( self._tosa_spec, WhyNoPartitionReporter() ) diff --git a/backends/arm/arm_backend.py b/backends/arm/arm_backend.py index 27c5e60bdaf..4dd49d8528f 100644 --- a/backends/arm/arm_backend.py +++ b/backends/arm/arm_backend.py @@ -13,9 +13,7 @@ from enum import Enum from typing import List, Optional -from executorch.backends.arm.tosa_specification import ( # type: ignore[import-not-found] - TosaSpecification, -) +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.backend.compile_spec_schema import ( # type: ignore[import-not-found] CompileSpec, diff --git a/backends/arm/ethosu/backend.py b/backends/arm/ethosu/backend.py index 18fd127f116..c748cf96e93 100644 --- a/backends/arm/ethosu/backend.py +++ b/backends/arm/ethosu/backend.py @@ -16,7 +16,7 @@ from executorch.backends.arm.arm_vela import vela_compile -from executorch.backends.arm.tosa_backend import TOSABackend +from executorch.backends.arm.tosa.backend import TOSABackend from executorch.exir.backend.backend_details import BackendDetails, PreprocessResult from executorch.exir.backend.compile_spec_schema import CompileSpec from torch.export.exported_program import ExportedProgram diff --git a/backends/arm/ethosu/partitioner.py b/backends/arm/ethosu/partitioner.py index efbd6705615..d76b29eb1d9 100644 --- a/backends/arm/ethosu/partitioner.py +++ b/backends/arm/ethosu/partitioner.py @@ -11,7 +11,7 @@ is_ethosu, ) # usort: skip from executorch.backends.arm.ethosu import EthosUBackend -from executorch.backends.arm.tosa_partitioner import TOSAPartitioner +from executorch.backends.arm.tosa.partitioner import TOSAPartitioner from executorch.exir.backend.compile_spec_schema import CompileSpec from executorch.exir.backend.partitioner import DelegationSpec from torch.fx.passes.operator_support import OperatorSupportBase diff --git a/backends/arm/operator_support/clone_support.py b/backends/arm/operator_support/clone_support.py index 786c2803c33..ec7a51fc5cb 100644 --- a/backends/arm/operator_support/clone_support.py +++ b/backends/arm/operator_support/clone_support.py @@ -10,7 +10,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops logger = logging.getLogger(__name__) diff --git a/backends/arm/operator_support/convolution_support.py b/backends/arm/operator_support/convolution_support.py index 692d744025f..6e9d3b3528e 100644 --- a/backends/arm/operator_support/convolution_support.py +++ b/backends/arm/operator_support/convolution_support.py @@ -11,7 +11,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops diff --git a/backends/arm/operator_support/embedding_support.py b/backends/arm/operator_support/embedding_support.py index 58a3a3e3edb..bf95014e575 100644 --- a/backends/arm/operator_support/embedding_support.py +++ b/backends/arm/operator_support/embedding_support.py @@ -11,7 +11,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops diff --git a/backends/arm/operator_support/ethos_u55_support.py b/backends/arm/operator_support/ethos_u55_support.py index 2ef0831af16..bf9e29d5cb7 100644 --- a/backends/arm/operator_support/ethos_u55_support.py +++ b/backends/arm/operator_support/ethos_u55_support.py @@ -14,7 +14,7 @@ from executorch.backends.arm._passes.arm_pass_utils import get_first_fake_tensor from executorch.backends.arm._passes.insert_table_ops import TableOps from executorch.backends.arm.operators.op_permute import transform_permutation_vector -from executorch.backends.arm.tosa_utils import tosa_shape +from executorch.backends.arm.tosa.utils import tosa_shape from executorch.exir.backend.utils import WhyNoPartitionReporter from executorch.exir.dialects._ops import ops as exir_ops from torch.fx.passes.operator_support import OperatorSupportBase diff --git a/backends/arm/operator_support/index_select_support.py b/backends/arm/operator_support/index_select_support.py index 9a48012f603..79f1d154a14 100644 --- a/backends/arm/operator_support/index_select_support.py +++ b/backends/arm/operator_support/index_select_support.py @@ -9,7 +9,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops diff --git a/backends/arm/operator_support/index_tensor_support.py b/backends/arm/operator_support/index_tensor_support.py index 65ea5755d7e..4b226a9c407 100644 --- a/backends/arm/operator_support/index_tensor_support.py +++ b/backends/arm/operator_support/index_tensor_support.py @@ -12,7 +12,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops diff --git a/backends/arm/operator_support/minmax_support.py b/backends/arm/operator_support/minmax_support.py index 1c4b0dd6c78..edbf7f61818 100644 --- a/backends/arm/operator_support/minmax_support.py +++ b/backends/arm/operator_support/minmax_support.py @@ -8,7 +8,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops diff --git a/backends/arm/operator_support/pool_2d_support.py b/backends/arm/operator_support/pool_2d_support.py index 4ce0f7d75e7..ff453741f1f 100644 --- a/backends/arm/operator_support/pool_2d_support.py +++ b/backends/arm/operator_support/pool_2d_support.py @@ -15,7 +15,7 @@ from executorch.backends.arm.operators.operator_validation_utils import ( adjust_pooling_pad_if_needed, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops diff --git a/backends/arm/operator_support/reduce_sum_support.py b/backends/arm/operator_support/reduce_sum_support.py index 0c614eb2bd5..4ff8f54ad69 100644 --- a/backends/arm/operator_support/reduce_sum_support.py +++ b/backends/arm/operator_support/reduce_sum_support.py @@ -10,7 +10,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops diff --git a/backends/arm/operator_support/right_shift_support.py b/backends/arm/operator_support/right_shift_support.py index 454a3b525e3..5d3896e3643 100644 --- a/backends/arm/operator_support/right_shift_support.py +++ b/backends/arm/operator_support/right_shift_support.py @@ -13,7 +13,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops logger = logging.getLogger(__name__) diff --git a/backends/arm/operator_support/sin_cos_support.py b/backends/arm/operator_support/sin_cos_support.py index 03ce1da684b..dcdc20f8e4a 100644 --- a/backends/arm/operator_support/sin_cos_support.py +++ b/backends/arm/operator_support/sin_cos_support.py @@ -11,7 +11,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops diff --git a/backends/arm/operator_support/slice_copy_support.py b/backends/arm/operator_support/slice_copy_support.py index ad9b5b250dd..14ca505635c 100644 --- a/backends/arm/operator_support/slice_copy_support.py +++ b/backends/arm/operator_support/slice_copy_support.py @@ -11,7 +11,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops logger = logging.getLogger(__name__) diff --git a/backends/arm/operator_support/to_copy_support.py b/backends/arm/operator_support/to_copy_support.py index a10f3acb766..4841728fe12 100644 --- a/backends/arm/operator_support/to_copy_support.py +++ b/backends/arm/operator_support/to_copy_support.py @@ -15,7 +15,7 @@ register_tosa_support_check, SupportedTOSAOperatorCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.dialects._ops import ops as exir_ops logger = logging.getLogger(__name__) diff --git a/backends/arm/operator_support/tosa_supported_operators.py b/backends/arm/operator_support/tosa_supported_operators.py index 838e0164a17..0645fde725e 100644 --- a/backends/arm/operator_support/tosa_supported_operators.py +++ b/backends/arm/operator_support/tosa_supported_operators.py @@ -26,7 +26,7 @@ EthosU55TransposeCheck, EthosU55ViewCheck, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir import ExportedProgram from executorch.exir.backend.utils import WhyNoPartitionReporter from executorch.exir.dialects._ops import ops as exir_ops diff --git a/backends/arm/operators/node_visitor.py b/backends/arm/operators/node_visitor.py index 29d4fde1dd5..5881486bfef 100644 --- a/backends/arm/operators/node_visitor.py +++ b/backends/arm/operators/node_visitor.py @@ -10,8 +10,8 @@ import torch from executorch.backends.arm.debug.schema import DebugHook -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.specification import TosaSpecification from torch.export import ExportedProgram diff --git a/backends/arm/operators/op_abs.py b/backends/arm/operators/op_abs.py index 33de1fa048f..625293d66e0 100644 --- a/backends/arm/operators/op_abs.py +++ b/backends/arm/operators/op_abs.py @@ -6,8 +6,8 @@ # pyre-unsafe from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils -import executorch.backends.arm.tosa_utils as tutils +import executorch.backends.arm.tosa.quant_utils as tqutils +import executorch.backends.arm.tosa.utils as tutils from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, @@ -18,8 +18,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_add.py b/backends/arm/operators/op_add.py index bd8440d6346..a571806caf5 100644 --- a/backends/arm/operators/op_add.py +++ b/backends/arm/operators/op_add.py @@ -7,8 +7,8 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils -import executorch.backends.arm.tosa_utils as tutils +import executorch.backends.arm.tosa.quant_utils as tqutils +import executorch.backends.arm.tosa.utils as tutils from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, @@ -19,8 +19,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_amax.py b/backends/arm/operators/op_amax.py index 626b6ec16ef..1fb751597af 100644 --- a/backends/arm/operators/op_amax.py +++ b/backends/arm/operators/op_amax.py @@ -14,7 +14,7 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_amin.py b/backends/arm/operators/op_amin.py index 1e4093fd9b2..9ebe78b946d 100644 --- a/backends/arm/operators/op_amin.py +++ b/backends/arm/operators/op_amin.py @@ -14,7 +14,7 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_any.py b/backends/arm/operators/op_any.py index ee5b2bdfdc6..0c47d6b190a 100644 --- a/backends/arm/operators/op_any.py +++ b/backends/arm/operators/op_any.py @@ -16,7 +16,7 @@ validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg # type: ignore +from executorch.backends.arm.tosa.mapping import TosaArg # type: ignore from torch.fx import Node diff --git a/backends/arm/operators/op_avg_pool2d.py b/backends/arm/operators/op_avg_pool2d.py index 24c0e969a32..d28f5f27acf 100644 --- a/backends/arm/operators/op_avg_pool2d.py +++ b/backends/arm/operators/op_avg_pool2d.py @@ -22,8 +22,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_bmm.py b/backends/arm/operators/op_bmm.py index ce795af2261..81a4df808c3 100644 --- a/backends/arm/operators/op_bmm.py +++ b/backends/arm/operators/op_bmm.py @@ -22,9 +22,9 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_quant_utils import build_rescale -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.quant_utils import build_rescale from tosa.RoundingMode import RoundingMode # type: ignore diff --git a/backends/arm/operators/op_cat.py b/backends/arm/operators/op_cat.py index 9c03cdaa3b8..65b3e2a9549 100644 --- a/backends/arm/operators/op_cat.py +++ b/backends/arm/operators/op_cat.py @@ -14,7 +14,7 @@ from executorch.backends.arm.operators.operator_validation_utils import ( validate_num_inputs, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_clamp.py b/backends/arm/operators/op_clamp.py index e61a875cebe..b0bf044a213 100644 --- a/backends/arm/operators/op_clamp.py +++ b/backends/arm/operators/op_clamp.py @@ -20,9 +20,9 @@ validate_same_dtype, validate_valid_dtype, ) +from executorch.backends.arm.tosa import TosaSpecification -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_constant_pad_nd.py b/backends/arm/operators/op_constant_pad_nd.py index 8e39420f88f..562c4c9ea0e 100644 --- a/backends/arm/operators/op_constant_pad_nd.py +++ b/backends/arm/operators/op_constant_pad_nd.py @@ -21,8 +21,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_conv2d.py b/backends/arm/operators/op_conv2d.py index be7e6be2fbe..6bfe0ab21eb 100644 --- a/backends/arm/operators/op_conv2d.py +++ b/backends/arm/operators/op_conv2d.py @@ -20,10 +20,10 @@ from executorch.backends.arm.operators.operator_validation_utils import ( validate_num_inputs, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_quant_utils import build_rescale -from executorch.backends.arm.tosa_specification import TosaSpecification -from executorch.backends.arm.tosa_utils import tosa_shape +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.quant_utils import build_rescale +from executorch.backends.arm.tosa.utils import tosa_shape @register_node_visitor diff --git a/backends/arm/operators/op_cos.py b/backends/arm/operators/op_cos.py index ae8c6d86d01..0350733190c 100644 --- a/backends/arm/operators/op_cos.py +++ b/backends/arm/operators/op_cos.py @@ -16,8 +16,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_eq.py b/backends/arm/operators/op_eq.py index 9d32348a25b..2136fe2e946 100644 --- a/backends/arm/operators/op_eq.py +++ b/backends/arm/operators/op_eq.py @@ -7,7 +7,7 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils +import executorch.backends.arm.tosa.quant_utils as tqutils from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, @@ -18,8 +18,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_erf.py b/backends/arm/operators/op_erf.py index b46bc55e873..7797b61e562 100644 --- a/backends/arm/operators/op_erf.py +++ b/backends/arm/operators/op_erf.py @@ -15,8 +15,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_exp.py b/backends/arm/operators/op_exp.py index adff20ae6d5..f5d5aef2213 100644 --- a/backends/arm/operators/op_exp.py +++ b/backends/arm/operators/op_exp.py @@ -15,8 +15,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_ge.py b/backends/arm/operators/op_ge.py index 218651b74c1..c538e735880 100644 --- a/backends/arm/operators/op_ge.py +++ b/backends/arm/operators/op_ge.py @@ -7,7 +7,7 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils +import executorch.backends.arm.tosa.quant_utils as tqutils from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, @@ -18,8 +18,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_gt.py b/backends/arm/operators/op_gt.py index 29c0717a0a1..d407e28c1b6 100644 --- a/backends/arm/operators/op_gt.py +++ b/backends/arm/operators/op_gt.py @@ -7,7 +7,7 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils +import executorch.backends.arm.tosa.quant_utils as tqutils from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, @@ -18,8 +18,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_index_select.py b/backends/arm/operators/op_index_select.py index a925f5ee20b..e357416fadb 100644 --- a/backends/arm/operators/op_index_select.py +++ b/backends/arm/operators/op_index_select.py @@ -7,15 +7,15 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils # noqa: F401 +import executorch.backends.arm.tosa.quant_utils as tqutils # noqa: F401 from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, register_node_visitor, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg -from executorch.backends.arm.tosa_utils import build_reshape_tosa_1_0 +from executorch.backends.arm.tosa.utils import build_reshape_tosa_1_0 from torch.fx import Node diff --git a/backends/arm/operators/op_index_tensor.py b/backends/arm/operators/op_index_tensor.py index 598a3eea7aa..2ef7eac352b 100644 --- a/backends/arm/operators/op_index_tensor.py +++ b/backends/arm/operators/op_index_tensor.py @@ -8,7 +8,7 @@ import math from typing import Any, List -import executorch.backends.arm.tosa_utils as tutils +import executorch.backends.arm.tosa.utils as tutils import numpy as np @@ -19,8 +19,8 @@ from executorch.backends.arm.operators.operator_validation_utils import ( validate_same_dtype, ) -from executorch.backends.arm.tosa_mapping import extract_tensor_meta, TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa.mapping import extract_tensor_meta, TosaArg +from executorch.backends.arm.tosa.specification import TosaSpecification from torch.fx import Node diff --git a/backends/arm/operators/op_le.py b/backends/arm/operators/op_le.py index 56cc67d4298..403c6c233d3 100644 --- a/backends/arm/operators/op_le.py +++ b/backends/arm/operators/op_le.py @@ -7,7 +7,7 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils +import executorch.backends.arm.tosa.quant_utils as tqutils from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, @@ -18,8 +18,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_log.py b/backends/arm/operators/op_log.py index 9a68de66f9a..051b10af062 100644 --- a/backends/arm/operators/op_log.py +++ b/backends/arm/operators/op_log.py @@ -15,8 +15,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_lt.py b/backends/arm/operators/op_lt.py index 89d745d4759..f5132dd4feb 100644 --- a/backends/arm/operators/op_lt.py +++ b/backends/arm/operators/op_lt.py @@ -7,7 +7,7 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils +import executorch.backends.arm.tosa.quant_utils as tqutils from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, @@ -18,8 +18,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_max_pool2d.py b/backends/arm/operators/op_max_pool2d.py index 01b4c8f5521..39fcbf5cc64 100644 --- a/backends/arm/operators/op_max_pool2d.py +++ b/backends/arm/operators/op_max_pool2d.py @@ -18,8 +18,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_maximum.py b/backends/arm/operators/op_maximum.py index 45ca36dd8fc..66437f8af1d 100644 --- a/backends/arm/operators/op_maximum.py +++ b/backends/arm/operators/op_maximum.py @@ -7,7 +7,7 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils +import executorch.backends.arm.tosa.quant_utils as tqutils from executorch.backends.arm._passes.fold_qdq_with_annotated_qparams_pass import ( get_input_qparams, @@ -22,9 +22,9 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification -from executorch.backends.arm.tosa_utils import tosa_shape +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.utils import tosa_shape from torch.fx import Node diff --git a/backends/arm/operators/op_minimum.py b/backends/arm/operators/op_minimum.py index e91053d741a..518366d5463 100644 --- a/backends/arm/operators/op_minimum.py +++ b/backends/arm/operators/op_minimum.py @@ -7,7 +7,7 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils +import executorch.backends.arm.tosa.quant_utils as tqutils from executorch.backends.arm._passes.fold_qdq_with_annotated_qparams_pass import ( get_input_qparams, @@ -21,9 +21,9 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification -from executorch.backends.arm.tosa_utils import tosa_shape +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.utils import tosa_shape from torch.fx import Node diff --git a/backends/arm/operators/op_mul.py b/backends/arm/operators/op_mul.py index 5ea86750b0e..65140baf540 100644 --- a/backends/arm/operators/op_mul.py +++ b/backends/arm/operators/op_mul.py @@ -7,8 +7,8 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils -import executorch.backends.arm.tosa_utils as tutils +import executorch.backends.arm.tosa.quant_utils as tqutils +import executorch.backends.arm.tosa.utils as tutils import torch from executorch.backends.arm._passes.fold_qdq_with_annotated_qparams_pass import ( @@ -24,8 +24,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_neg.py b/backends/arm/operators/op_neg.py index 90dda965f2d..98aeea14bea 100644 --- a/backends/arm/operators/op_neg.py +++ b/backends/arm/operators/op_neg.py @@ -21,7 +21,7 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg def get_negate_zero_points(node: torch.fx.Node, is_int8: bool) -> tuple[int, int]: diff --git a/backends/arm/operators/op_permute.py b/backends/arm/operators/op_permute.py index e81e33949de..92cc2b37479 100644 --- a/backends/arm/operators/op_permute.py +++ b/backends/arm/operators/op_permute.py @@ -18,7 +18,7 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg def permutation_vector_to_matrix(permutation_vector: list[int]) -> torch.Tensor: diff --git a/backends/arm/operators/op_pow.py b/backends/arm/operators/op_pow.py index 027cfaf4adf..8e7cffc0770 100644 --- a/backends/arm/operators/op_pow.py +++ b/backends/arm/operators/op_pow.py @@ -16,8 +16,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_reciprocal.py b/backends/arm/operators/op_reciprocal.py index 811186731b4..5aa45f740c2 100644 --- a/backends/arm/operators/op_reciprocal.py +++ b/backends/arm/operators/op_reciprocal.py @@ -17,8 +17,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_repeat.py b/backends/arm/operators/op_repeat.py index 6c569ae1325..5db7ce9347c 100644 --- a/backends/arm/operators/op_repeat.py +++ b/backends/arm/operators/op_repeat.py @@ -17,8 +17,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_utils import tosa_shape +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.utils import tosa_shape @register_node_visitor diff --git a/backends/arm/operators/op_rescale.py b/backends/arm/operators/op_rescale.py index 3f86c439995..d7be2be737c 100644 --- a/backends/arm/operators/op_rescale.py +++ b/backends/arm/operators/op_rescale.py @@ -15,10 +15,10 @@ from executorch.backends.arm.operators.operator_validation_utils import ( validate_num_inputs, ) -from executorch.backends.arm.tosa_mapping import map_dtype, TosaArg -from executorch.backends.arm.tosa_quant_utils import build_rescale -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import map_dtype, TosaArg +from executorch.backends.arm.tosa.quant_utils import build_rescale from torch.fx import Node diff --git a/backends/arm/operators/op_rshift_tensor.py b/backends/arm/operators/op_rshift_tensor.py index 4749df49f01..2a41d685f5d 100644 --- a/backends/arm/operators/op_rshift_tensor.py +++ b/backends/arm/operators/op_rshift_tensor.py @@ -18,7 +18,7 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_rsqrt.py b/backends/arm/operators/op_rsqrt.py index 89c60e22239..362a30f1cf5 100644 --- a/backends/arm/operators/op_rsqrt.py +++ b/backends/arm/operators/op_rsqrt.py @@ -17,8 +17,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_sigmoid.py b/backends/arm/operators/op_sigmoid.py index fdc305d0fc7..2c4673d6b5f 100644 --- a/backends/arm/operators/op_sigmoid.py +++ b/backends/arm/operators/op_sigmoid.py @@ -15,8 +15,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_sin.py b/backends/arm/operators/op_sin.py index da3453f7850..76aee063555 100644 --- a/backends/arm/operators/op_sin.py +++ b/backends/arm/operators/op_sin.py @@ -16,8 +16,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_slice.py b/backends/arm/operators/op_slice.py index 07b31c4c05f..aad4599a4b5 100644 --- a/backends/arm/operators/op_slice.py +++ b/backends/arm/operators/op_slice.py @@ -16,7 +16,7 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_sub.py b/backends/arm/operators/op_sub.py index 2dd4b4fe854..9c27fddf68a 100644 --- a/backends/arm/operators/op_sub.py +++ b/backends/arm/operators/op_sub.py @@ -7,8 +7,8 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils -import executorch.backends.arm.tosa_utils as tutils +import executorch.backends.arm.tosa.quant_utils as tqutils +import executorch.backends.arm.tosa.utils as tutils from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, @@ -19,8 +19,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_sum.py b/backends/arm/operators/op_sum.py index 54e848a1bef..0bd152a8b8c 100644 --- a/backends/arm/operators/op_sum.py +++ b/backends/arm/operators/op_sum.py @@ -7,8 +7,8 @@ from typing import Any, List -import executorch.backends.arm.tosa_quant_utils as tqutils -import executorch.backends.arm.tosa_utils as tutils +import executorch.backends.arm.tosa.quant_utils as tqutils +import executorch.backends.arm.tosa.utils as tutils from executorch.backends.arm.operators.node_visitor import ( NodeVisitor, @@ -18,8 +18,8 @@ validate_num_inputs, validate_same_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_table.py b/backends/arm/operators/op_table.py index 7931ba9a1ca..41b40268f6d 100644 --- a/backends/arm/operators/op_table.py +++ b/backends/arm/operators/op_table.py @@ -16,9 +16,9 @@ validate_num_inputs, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_tanh.py b/backends/arm/operators/op_tanh.py index 7d5971e59f9..5837825a6a1 100644 --- a/backends/arm/operators/op_tanh.py +++ b/backends/arm/operators/op_tanh.py @@ -15,8 +15,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/op_to_copy.py b/backends/arm/operators/op_to_copy.py index 2ee09b2496b..dcf8fc64119 100644 --- a/backends/arm/operators/op_to_copy.py +++ b/backends/arm/operators/op_to_copy.py @@ -15,7 +15,7 @@ from executorch.backends.arm.operators.operator_validation_utils import ( validate_num_inputs, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_to_dim_order_copy.py b/backends/arm/operators/op_to_dim_order_copy.py index cd5c45d459e..aa5873f698e 100644 --- a/backends/arm/operators/op_to_dim_order_copy.py +++ b/backends/arm/operators/op_to_dim_order_copy.py @@ -15,7 +15,7 @@ from executorch.backends.arm.operators.operator_validation_utils import ( validate_num_inputs, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_transpose.py b/backends/arm/operators/op_transpose.py index 7bd4be0c4f4..48766687a62 100644 --- a/backends/arm/operators/op_transpose.py +++ b/backends/arm/operators/op_transpose.py @@ -18,7 +18,7 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg @register_node_visitor diff --git a/backends/arm/operators/op_upsample_bilinear2d.py b/backends/arm/operators/op_upsample_bilinear2d.py index f7e9d17ed96..3cc620727e0 100644 --- a/backends/arm/operators/op_upsample_bilinear2d.py +++ b/backends/arm/operators/op_upsample_bilinear2d.py @@ -17,9 +17,9 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_quant_utils import build_rescale -from executorch.backends.arm.tosa_utils import get_resize_parameters, tosa_shape +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.quant_utils import build_rescale +from executorch.backends.arm.tosa.utils import get_resize_parameters, tosa_shape @register_node_visitor diff --git a/backends/arm/operators/op_upsample_nearest2d.py b/backends/arm/operators/op_upsample_nearest2d.py index 3b93cd75a1a..3c3ca67c9f5 100644 --- a/backends/arm/operators/op_upsample_nearest2d.py +++ b/backends/arm/operators/op_upsample_nearest2d.py @@ -17,8 +17,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_utils import get_resize_parameters +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.utils import get_resize_parameters from tosa.ResizeMode import ResizeMode # type: ignore diff --git a/backends/arm/operators/op_view.py b/backends/arm/operators/op_view.py index b213bbbc1ac..925404da917 100644 --- a/backends/arm/operators/op_view.py +++ b/backends/arm/operators/op_view.py @@ -17,8 +17,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_utils import tosa_shape +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.utils import tosa_shape @register_node_visitor diff --git a/backends/arm/operators/op_where.py b/backends/arm/operators/op_where.py index 2ec26ab63da..dbdbbc67944 100644 --- a/backends/arm/operators/op_where.py +++ b/backends/arm/operators/op_where.py @@ -15,8 +15,8 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node diff --git a/backends/arm/operators/ops_binary.py b/backends/arm/operators/ops_binary.py index 2a8ac9582d3..4e8e393732b 100644 --- a/backends/arm/operators/ops_binary.py +++ b/backends/arm/operators/ops_binary.py @@ -19,7 +19,7 @@ validate_same_dtype, validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg def binary_operator_factory(bw_target: str, tosa_op): diff --git a/backends/arm/operators/ops_identity.py b/backends/arm/operators/ops_identity.py index 94bd9605706..62a307f3012 100644 --- a/backends/arm/operators/ops_identity.py +++ b/backends/arm/operators/ops_identity.py @@ -18,7 +18,7 @@ validate_num_inputs, validate_same_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg def identity_operator_factory(identity_target: str): diff --git a/backends/arm/operators/ops_unary.py b/backends/arm/operators/ops_unary.py index 4ccebc2d467..008330f68b3 100644 --- a/backends/arm/operators/ops_unary.py +++ b/backends/arm/operators/ops_unary.py @@ -18,7 +18,7 @@ validate_valid_dtype, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg def unary_operator_factory(unary_target: str, tosa_op): diff --git a/backends/arm/process_node.py b/backends/arm/process_node.py index ee8eb08592a..9ca435c60c5 100644 --- a/backends/arm/process_node.py +++ b/backends/arm/process_node.py @@ -12,9 +12,9 @@ import torch import torch.fx from executorch.backends.arm.operators.node_visitor import NodeVisitor -from executorch.backends.arm.tosa_mapping import TosaArg -from executorch.backends.arm.tosa_specification import TosaSpecification -from executorch.backends.arm.tosa_utils import tosa_shape +from executorch.backends.arm.tosa.mapping import TosaArg +from executorch.backends.arm.tosa.specification import TosaSpecification +from executorch.backends.arm.tosa.utils import tosa_shape from torch._export.utils import ( get_buffer, get_lifted_tensor_constant, diff --git a/backends/arm/quantizer/arm_quantizer.py b/backends/arm/quantizer/arm_quantizer.py index 92ef5be5781..ae7c8255428 100644 --- a/backends/arm/quantizer/arm_quantizer.py +++ b/backends/arm/quantizer/arm_quantizer.py @@ -17,10 +17,10 @@ from typing import Any, Callable, Dict, List, Optional, Union import torch -from executorch.backends.arm._passes import ArmPassManager from executorch.backends.arm.quantizer import QuantizationConfig -from executorch.backends.arm.tosa_specification import get_tosa_spec, TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.specification import get_tosa_spec from .arm_quantizer_utils import is_annotated, mark_node_as_annotated from .quantization_annotator import annotate_graph @@ -371,6 +371,9 @@ def transform_for_annotation(self, model: GraphModule) -> GraphModule: Currently transforms scalar values to tensor attributes. """ + # TODO: Fix the need to lazily import this. + from executorch.backends.arm._passes import ArmPassManager + return ArmPassManager(self.tosa_spec).transform_for_annotation_pipeline( # type: ignore[arg-type] graph_module=model ) diff --git a/backends/arm/scripts/TOSA_minimal_example.ipynb b/backends/arm/scripts/TOSA_minimal_example.ipynb index e2121b930cb..785affc657b 100644 --- a/backends/arm/scripts/TOSA_minimal_example.ipynb +++ b/backends/arm/scripts/TOSA_minimal_example.ipynb @@ -89,7 +89,7 @@ "from executorch.backends.arm.arm_backend import (\n", " ArmCompileSpecBuilder,\n", ")\n", - "from executorch.backends.arm.tosa_specification import TosaSpecification\n", + "from executorch.backends.arm.tosa.specification import TosaSpecification\n", "from torchao.quantization.pt2e.quantize_pt2e import convert_pt2e, prepare_pt2e\n", "from pathlib import Path\n", "\n", @@ -138,7 +138,7 @@ " TOSAQuantizer,\n", " get_symmetric_quantization_config,\n", ")\n", - "from executorch.backends.arm.tosa_specification import TosaSpecification\n", + "from executorch.backends.arm.tosa.specification import TosaSpecification\n", "from torchao.quantization.pt2e.quantize_pt2e import convert_pt2e, prepare_pt2e\n", "from pathlib import Path\n", "\n", @@ -191,7 +191,7 @@ "metadata": {}, "outputs": [], "source": [ - "from executorch.backends.arm.tosa_partitioner import TOSAPartitioner\n", + "from executorch.backends.arm.tosa.partitioner import TOSAPartitioner\n", "from executorch.exir import (\n", " EdgeCompileConfig,\n", " ExecutorchBackendConfig,\n", diff --git a/backends/arm/test/common.py b/backends/arm/test/common.py index 059c86de351..608c273b2ef 100644 --- a/backends/arm/test/common.py +++ b/backends/arm/test/common.py @@ -21,7 +21,7 @@ model_converter_installed, vkml_emulation_layer_installed, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.exir.backend.compile_spec_schema import CompileSpec diff --git a/backends/arm/test/misc/test_extract_io_params_tosa.py b/backends/arm/test/misc/test_extract_io_params_tosa.py index 2afa3876081..2399a41e201 100644 --- a/backends/arm/test/misc/test_extract_io_params_tosa.py +++ b/backends/arm/test/misc/test_extract_io_params_tosa.py @@ -15,8 +15,8 @@ ) from executorch.backends.arm.test.common import SkipIfNoModelConverter -from executorch.backends.arm.tosa_partitioner import TOSAPartitioner -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.partitioner import TOSAPartitioner from executorch.backends.arm.vgf_partitioner import VgfPartitioner from executorch.exir import to_edge_transform_and_lower from executorch.exir.passes.quantize_io_pass import extract_io_quant_params diff --git a/backends/arm/test/misc/test_tosa_spec.py b/backends/arm/test/misc/test_tosa_spec.py index a2f5f7d85ee..968512f54c6 100644 --- a/backends/arm/test/misc/test_tosa_spec.py +++ b/backends/arm/test/misc/test_tosa_spec.py @@ -5,7 +5,7 @@ import unittest -from executorch.backends.arm.tosa_specification import ( +from executorch.backends.arm.tosa.specification import ( get_tosa_spec, Tosa_1_00, TosaSpecification, diff --git a/backends/arm/test/ops/test_add.py b/backends/arm/test/ops/test_add.py index 01f15bc12dc..8376df47b39 100644 --- a/backends/arm/test/ops/test_add.py +++ b/backends/arm/test/ops/test_add.py @@ -18,7 +18,8 @@ TosaPipelineINT, VgfPipeline, ) -from executorch.backends.arm.tosa_specification import get_tosa_spec, TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.specification import get_tosa_spec from executorch.backends.xnnpack.test.tester import Quantize from torchao.quantization.pt2e import HistogramObserver from torchao.quantization.pt2e.quantizer import QuantizationSpec diff --git a/backends/arm/test/ops/test_linear.py b/backends/arm/test/ops/test_linear.py index 71ec50eee18..e5d00c83e9f 100644 --- a/backends/arm/test/ops/test_linear.py +++ b/backends/arm/test/ops/test_linear.py @@ -23,7 +23,7 @@ TosaPipelineINT, VgfPipeline, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.backends.xnnpack.test.tester import Quantize aten_op = "torch.ops.aten.linear.default" diff --git a/backends/arm/test/ops/test_sigmoid_16bit.py b/backends/arm/test/ops/test_sigmoid_16bit.py index 5a775612d4f..ad8c49b234c 100644 --- a/backends/arm/test/ops/test_sigmoid_16bit.py +++ b/backends/arm/test/ops/test_sigmoid_16bit.py @@ -16,7 +16,7 @@ OpNotSupportedPipeline, TosaPipelineINT, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.backends.xnnpack.test.tester import Quantize from torchao.quantization.pt2e import HistogramObserver from torchao.quantization.pt2e.quantizer import QuantizationSpec diff --git a/backends/arm/test/ops/test_sigmoid_32bit.py b/backends/arm/test/ops/test_sigmoid_32bit.py index 553a852b245..70863cd4757 100644 --- a/backends/arm/test/ops/test_sigmoid_32bit.py +++ b/backends/arm/test/ops/test_sigmoid_32bit.py @@ -12,7 +12,7 @@ OpNotSupportedPipeline, TosaPipelineINT, ) -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification from executorch.backends.xnnpack.test.tester import Quantize from torchao.quantization.pt2e import HistogramObserver from torchao.quantization.pt2e.quantizer import QuantizationSpec diff --git a/backends/arm/test/passes/test_rescale_pass.py b/backends/arm/test/passes/test_rescale_pass.py index ae6c414e884..0959a0eaa25 100644 --- a/backends/arm/test/passes/test_rescale_pass.py +++ b/backends/arm/test/passes/test_rescale_pass.py @@ -15,7 +15,7 @@ EthosU85PipelineINT, TosaPipelineINT, ) -from executorch.backends.arm.tosa_specification import ( +from executorch.backends.arm.tosa.specification import ( TosaLoweringContext, TosaSpecification, ) diff --git a/backends/arm/test/runner_utils.py b/backends/arm/test/runner_utils.py index 9234f4dd7e5..60ddc82d2c6 100644 --- a/backends/arm/test/runner_utils.py +++ b/backends/arm/test/runner_utils.py @@ -20,7 +20,7 @@ from executorch.backends.arm.arm_backend import is_tosa, is_vgf from executorch.backends.arm.test.conftest import is_option_enabled -from executorch.backends.arm.tosa_specification import ( +from executorch.backends.arm.tosa.specification import ( get_tosa_spec, Tosa_1_00, TosaSpecification, diff --git a/backends/arm/test/tester/arm_tester.py b/backends/arm/test/tester/arm_tester.py index 174c5a9849b..1a3fe082d7f 100644 --- a/backends/arm/test/tester/arm_tester.py +++ b/backends/arm/test/tester/arm_tester.py @@ -58,9 +58,10 @@ dump_error_output, print_error_diffs, ) -from executorch.backends.arm.tosa_mapping import extract_tensor_meta -from executorch.backends.arm.tosa_partitioner import TOSAPartitioner -from executorch.backends.arm.tosa_specification import get_tosa_spec, TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.mapping import extract_tensor_meta +from executorch.backends.arm.tosa.partitioner import TOSAPartitioner +from executorch.backends.arm.tosa.specification import get_tosa_spec from executorch.backends.arm.vgf_partitioner import VgfPartitioner diff --git a/backends/arm/test/tester/test_pipeline.py b/backends/arm/test/tester/test_pipeline.py index 941c875f55a..102ccd209e9 100644 --- a/backends/arm/test/tester/test_pipeline.py +++ b/backends/arm/test/tester/test_pipeline.py @@ -31,7 +31,7 @@ ) from executorch.backends.arm.test import common, conftest from executorch.backends.arm.test.tester.arm_tester import ArmTester, RunPasses -from executorch.backends.arm.tosa_specification import ( +from executorch.backends.arm.tosa.specification import ( TosaLoweringContext, TosaSpecification, ) diff --git a/backends/arm/tosa/__init__.py b/backends/arm/tosa/__init__.py new file mode 100644 index 00000000000..132d3563a43 --- /dev/null +++ b/backends/arm/tosa/__init__.py @@ -0,0 +1,10 @@ +# Copyright 2025 Arm Limited and/or its affiliates. +# +# This source code is licensed under the BSD-style license found in the +# LICENSE file in the root directory of this source tree. +# +# pyre-unsafe + +from .specification import TosaSpecification + +__all__ = ["TosaSpecification"] diff --git a/backends/arm/tosa_backend.py b/backends/arm/tosa/backend.py similarity index 95% rename from backends/arm/tosa_backend.py rename to backends/arm/tosa/backend.py index 3f35679cc30..151e37d18a9 100644 --- a/backends/arm/tosa_backend.py +++ b/backends/arm/tosa/backend.py @@ -14,18 +14,14 @@ from typing import cast, final, List import serializer.tosa_serializer as ts # type: ignore -from executorch.backends.arm.debug.schema import DebugHook -from executorch.backends.arm.operators.node_visitor import get_node_visitors -from executorch.backends.arm.tosa_specification import get_tosa_spec -from executorch.backends.arm._passes import ( - ArmPassManager, -) # usort: skip from executorch.backends.arm.common.debug import debug_fail, debug_tosa_dump +from executorch.backends.arm.debug.schema import DebugHook from executorch.backends.arm.process_node import ( process_call_function, process_output, process_placeholder, ) +from executorch.backends.arm.tosa.specification import get_tosa_spec from executorch.exir.backend.backend_details import BackendDetails, PreprocessResult from executorch.exir.backend.compile_spec_schema import CompileSpec from torch.export.exported_program import ExportedProgram @@ -95,6 +91,9 @@ def preprocess( # noqa: C901 and tosa_spec.version.minor == ts.TOSA_VERSION_MINOR ), f"TOSA serializer version ({ts.TOSA_VERSION_MAJOR}.{ts.TOSA_VERSION_MINOR}) doesn't match specification {tosa_spec}" + # TODO: Fix the need to lazily import this. + from executorch.backends.arm._passes import ArmPassManager + graph_module = ArmPassManager(tosa_spec).transform_to_backend_pipeline( # type: ignore exported_program=edge_program ) @@ -103,6 +102,9 @@ def preprocess( # noqa: C901 if dump_debug_info is not None: debug_hook = DebugHook() + # TODO: Fix the need to lazily import this. + from executorch.backends.arm.operators.node_visitor import get_node_visitors + node_visitors = get_node_visitors(edge_program, tosa_spec, debug_hook) input_count = 0 for node in graph_module.graph.nodes: diff --git a/backends/arm/tosa/dialect/ops/rescale.py b/backends/arm/tosa/dialect/ops/rescale.py index f968eb601f7..5f0cf9d15dc 100644 --- a/backends/arm/tosa/dialect/ops/rescale.py +++ b/backends/arm/tosa/dialect/ops/rescale.py @@ -7,7 +7,7 @@ from executorch.backends.arm.tosa.dialect.lib import TosaValueError from executorch.backends.arm.tosa.dialect.ops_registration import register_fake_tosa_op -from executorch.backends.arm.tosa_specification import ( +from executorch.backends.arm.tosa.specification import ( get_context_spec, TosaSpecification, ) diff --git a/backends/arm/tosa/dialect/ops/table.py b/backends/arm/tosa/dialect/ops/table.py index 3faf478893e..40f592e952b 100644 --- a/backends/arm/tosa/dialect/ops/table.py +++ b/backends/arm/tosa/dialect/ops/table.py @@ -7,7 +7,7 @@ from executorch.backends.arm.tosa.dialect.lib import TosaValueError from executorch.backends.arm.tosa.dialect.ops_registration import register_fake_tosa_op -from executorch.backends.arm.tosa_specification import ( +from executorch.backends.arm.tosa.specification import ( get_context_spec, TosaSpecification, ) diff --git a/backends/arm/tosa/dialect/ops/transpose.py b/backends/arm/tosa/dialect/ops/transpose.py index 43095c97bd7..9c5aba05394 100644 --- a/backends/arm/tosa/dialect/ops/transpose.py +++ b/backends/arm/tosa/dialect/ops/transpose.py @@ -7,7 +7,7 @@ from executorch.backends.arm.tosa.dialect.lib import TosaValueError from executorch.backends.arm.tosa.dialect.ops_registration import register_fake_tosa_op -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa.specification import TosaSpecification @register_fake_tosa_op( diff --git a/backends/arm/tosa/dialect/ops_registration.py b/backends/arm/tosa/dialect/ops_registration.py index ad83824b3a2..84aa5cbc6e9 100644 --- a/backends/arm/tosa/dialect/ops_registration.py +++ b/backends/arm/tosa/dialect/ops_registration.py @@ -8,7 +8,7 @@ from executorch.backends.arm.tosa.dialect.lib import register_tosa_dialect_op -from executorch.backends.arm.tosa_specification import ( +from executorch.backends.arm.tosa.specification import ( get_context_spec, TosaSpecification, ) diff --git a/backends/arm/tosa_mapping.py b/backends/arm/tosa/mapping.py similarity index 98% rename from backends/arm/tosa_mapping.py rename to backends/arm/tosa/mapping.py index 4c290a962f0..60ef98a37c0 100644 --- a/backends/arm/tosa_mapping.py +++ b/backends/arm/tosa/mapping.py @@ -16,7 +16,7 @@ import serializer.tosa_serializer as ts # type: ignore import torch -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa.specification import TosaSpecification UNSUPPORTED_DTYPES = ( torch.float64, diff --git a/backends/arm/tosa_partitioner.py b/backends/arm/tosa/partitioner.py similarity index 97% rename from backends/arm/tosa_partitioner.py rename to backends/arm/tosa/partitioner.py index 9ba46dd1d2d..898ea588666 100644 --- a/backends/arm/tosa_partitioner.py +++ b/backends/arm/tosa/partitioner.py @@ -9,9 +9,6 @@ from typing import Callable, List, Optional, Sequence, Tuple import torch -from executorch.backends.arm.arm_backend import ( - is_tosa, -) # usort: skip from executorch.backends.arm._passes.arm_pass_utils import get_first_fake_tensor from executorch.backends.arm._passes.convert_expand_copy_to_repeat import ( calculate_multiples, @@ -20,8 +17,8 @@ from executorch.backends.arm.operator_support.tosa_supported_operators import ( tosa_support_factory, ) -from executorch.backends.arm.tosa_backend import TOSABackend -from executorch.backends.arm.tosa_specification import get_tosa_spec +from executorch.backends.arm.tosa.backend import TOSABackend +from executorch.backends.arm.tosa.specification import get_tosa_spec from executorch.exir.backend.compile_spec_schema import CompileSpec from executorch.exir.backend.partitioner import ( DelegationSpec, @@ -59,6 +56,8 @@ def __init__( compile_spec: List[CompileSpec], additional_checks: Optional[Sequence[OperatorSupportBase]] = None, ) -> None: + from executorch.backends.arm.arm_backend import is_tosa + if not is_tosa(compile_spec): raise RuntimeError("compile spec is not targeting TOSA") self.delegation_spec = DelegationSpec(TOSABackend.__name__, compile_spec) diff --git a/backends/arm/tosa_quant_utils.py b/backends/arm/tosa/quant_utils.py similarity index 99% rename from backends/arm/tosa_quant_utils.py rename to backends/arm/tosa/quant_utils.py index 3edf40f9eaa..1c77f6f02f2 100644 --- a/backends/arm/tosa_quant_utils.py +++ b/backends/arm/tosa/quant_utils.py @@ -20,7 +20,7 @@ get_output_qparams, ) -from executorch.backends.arm.tosa_mapping import TosaArg +from executorch.backends.arm.tosa.mapping import TosaArg from torch.fx import Node from tosa.RoundingMode import RoundingMode # type: ignore diff --git a/backends/arm/tosa_specification.py b/backends/arm/tosa/specification.py similarity index 100% rename from backends/arm/tosa_specification.py rename to backends/arm/tosa/specification.py diff --git a/backends/arm/tosa_utils.py b/backends/arm/tosa/utils.py similarity index 98% rename from backends/arm/tosa_utils.py rename to backends/arm/tosa/utils.py index 983d1f9c023..15c8612d33f 100644 --- a/backends/arm/tosa_utils.py +++ b/backends/arm/tosa/utils.py @@ -15,8 +15,8 @@ import torch -from executorch.backends.arm.tosa_mapping import extract_tensor_meta -from executorch.backends.arm.tosa_specification import TosaSpecification +from executorch.backends.arm.tosa.mapping import extract_tensor_meta +from executorch.backends.arm.tosa.specification import TosaSpecification from torch._subclasses.fake_tensor import FakeTensor from torch.fx import Node diff --git a/backends/arm/vgf_backend.py b/backends/arm/vgf_backend.py index 475df41308b..7c408748529 100644 --- a/backends/arm/vgf_backend.py +++ b/backends/arm/vgf_backend.py @@ -18,7 +18,7 @@ import tempfile from typing import final, List -from executorch.backends.arm.tosa_backend import ( +from executorch.backends.arm.tosa.backend import ( arm_get_first_delegation_tag, TOSABackend, ) diff --git a/backends/arm/vgf_partitioner.py b/backends/arm/vgf_partitioner.py index 0943c01c511..48f8b560d8f 100644 --- a/backends/arm/vgf_partitioner.py +++ b/backends/arm/vgf_partitioner.py @@ -10,7 +10,7 @@ from executorch.backends.arm.arm_backend import ( is_vgf, ) # usort: skip -from executorch.backends.arm.tosa_partitioner import TOSAPartitioner +from executorch.backends.arm.tosa.partitioner import TOSAPartitioner from executorch.backends.arm.vgf_backend import VgfBackend from executorch.exir.backend.compile_spec_schema import CompileSpec from executorch.exir.backend.partitioner import DelegationSpec diff --git a/examples/arm/aot_arm_compiler.py b/examples/arm/aot_arm_compiler.py index a6480a3e3c0..9c65109ab13 100644 --- a/examples/arm/aot_arm_compiler.py +++ b/examples/arm/aot_arm_compiler.py @@ -31,8 +31,9 @@ TOSAQuantizer, VgfQuantizer, ) -from executorch.backends.arm.tosa_partitioner import TOSAPartitioner -from executorch.backends.arm.tosa_specification import get_tosa_spec, TosaSpecification +from executorch.backends.arm.tosa import TosaSpecification +from executorch.backends.arm.tosa.partitioner import TOSAPartitioner +from executorch.backends.arm.tosa.specification import get_tosa_spec from executorch.backends.arm.util.arm_model_evaluator import ( GenericModelEvaluator, diff --git a/examples/arm/vgf_minimal_example.ipynb b/examples/arm/vgf_minimal_example.ipynb index b16ca930a33..7c3962aa5e9 100644 --- a/examples/arm/vgf_minimal_example.ipynb +++ b/examples/arm/vgf_minimal_example.ipynb @@ -85,7 +85,7 @@ "outputs": [], "source": [ "from executorch.backends.arm.arm_backend import ArmCompileSpecBuilder\n", - "from executorch.backends.arm.tosa_specification import ( \n", + "from executorch.backends.arm.tosa import ( \n", " TosaSpecification,\n", ")\n", "\n",