diff --git a/backends/arm/operator_support/tosa_profile_supported_op_lists.py b/backends/arm/operator_support/tosa_profile_supported_op_lists.py new file mode 100644 index 00000000000..d3207c65dff --- /dev/null +++ b/backends/arm/operator_support/tosa_profile_supported_op_lists.py @@ -0,0 +1,247 @@ +# 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. + +import operator +from typing import Final, Set + +import torch + +from executorch.exir.dialects._ops import ops as exir_ops + + +# INT profile: ops supported via native TOSA ops, decompositions/transformations, precompute, TableOps, etc. +TOSA_PRO_INT_SupportList: Final[Set] = { + exir_ops.edge.aten.abs.default, + exir_ops.edge.aten.add.Tensor, + exir_ops.edge.aten.any.default, + exir_ops.edge.aten.any.dim, + exir_ops.edge.aten.any.dims, + exir_ops.edge.aten.bitwise_and.Tensor, + exir_ops.edge.aten.bitwise_or.Tensor, + exir_ops.edge.aten.bitwise_xor.Tensor, + exir_ops.edge.aten.bitwise_and.Scalar, + exir_ops.edge.aten.bitwise_or.Scalar, + exir_ops.edge.aten.bitwise_xor.Scalar, + exir_ops.edge.aten.logical_and.default, + exir_ops.edge.aten.logical_or.default, + exir_ops.edge.aten.logical_xor.default, + exir_ops.edge.aten.logical_not.default, + exir_ops.edge.aten.arange.start_step, + exir_ops.edge.aten.expand_copy.default, + exir_ops.edge.aten.cat.default, + exir_ops.edge.aten.ceil.default, + exir_ops.edge.aten.clamp.default, + exir_ops.edge.aten.cumsum.default, + exir_ops.edge.aten.bmm.default, + exir_ops.edge.aten.permute_copy.default, + exir_ops.edge.aten.hardsigmoid.default, + exir_ops.edge.aten.hardtanh.default, + exir_ops.edge.aten.hardswish.default, + exir_ops.edge.aten.div.Tensor, + exir_ops.edge.aten.div.Tensor_mode, + exir_ops.edge.aten.eq.Tensor, + exir_ops.edge.aten.eq.Scalar, + exir_ops.edge.aten.erf.default, + exir_ops.edge.aten.exp.default, + exir_ops.edge.aten.expm1.default, + exir_ops.edge.aten.log.default, + exir_ops.edge.aten.linear.default, + exir_ops.edge.aten.split_with_sizes_copy.default, + exir_ops.edge.aten.floor.default, + exir_ops.edge.aten.full.default, + exir_ops.edge.aten.full_like.default, + exir_ops.edge.aten.ge.Tensor, + exir_ops.edge.aten.ge.Scalar, + exir_ops.edge.aten.gt.Tensor, + exir_ops.edge.aten.gt.Scalar, + exir_ops.edge.aten.le.Tensor, + exir_ops.edge.aten.le.Scalar, + exir_ops.edge.aten.lt.Tensor, + exir_ops.edge.aten.lt.Scalar, + exir_ops.edge.aten.mul.Tensor, + exir_ops.edge.aten.ne.Tensor, + exir_ops.edge.aten.ne.Scalar, + exir_ops.edge.aten.neg.default, + exir_ops.edge.aten.add.Scalar, + exir_ops.edge.aten.sub.Scalar, + exir_ops.edge.aten.mul.Scalar, + exir_ops.edge.aten.div.Scalar, + exir_ops.edge.aten._native_batch_norm_legit_no_training.default, + exir_ops.edge.aten.native_layer_norm.default, + exir_ops.edge.aten.native_group_norm.default, + exir_ops.edge.aten.sigmoid.default, + exir_ops.edge.aten.mean.dim, + exir_ops.edge.aten.mm.default, + exir_ops.edge.aten.minimum.default, + exir_ops.edge.aten.maximum.default, + exir_ops.edge.aten.repeat.default, + exir_ops.edge.aten.reciprocal.default, + exir_ops.edge.aten.relu.default, + exir_ops.edge.aten.leaky_relu.default, + exir_ops.edge.aten.sqrt.default, + exir_ops.edge.aten.rsqrt.default, + exir_ops.edge.aten.round.default, + exir_ops.edge.aten._softmax.default, + exir_ops.edge.aten.select_copy.int, + exir_ops.edge.aten._log_softmax.default, + exir_ops.edge.aten.sub.Tensor, + exir_ops.edge.aten.tanh.default, + exir_ops.edge.aten.upsample_bilinear2d.vec, + exir_ops.edge.aten.upsample_nearest2d.vec, + exir_ops.edge.aten.var.correction, + exir_ops.edge.aten.var.dim, + exir_ops.edge.aten.view_copy.default, + exir_ops.edge.aten.unsqueeze_copy.default, + exir_ops.edge.aten.squeeze_copy.dims, + exir_ops.edge.aten.pow.Tensor_Scalar, + exir_ops.edge.aten.pow.Tensor_Tensor, + exir_ops.edge.aten.where.self, + operator.getitem, + exir_ops.edge.quantized_decomposed.quantize_per_tensor.default, + exir_ops.edge.quantized_decomposed.quantize_per_channel.default, + exir_ops.edge.quantized_decomposed.dequantize_per_tensor.default, + exir_ops.edge.quantized_decomposed.dequantize_per_channel.default, + exir_ops.edge.aten.constant_pad_nd.default, + exir_ops.edge.aten.amax.default, + exir_ops.edge.aten.amin.default, + exir_ops.edge.aten.eye.default, + exir_ops.edge.aten.linspace.default, + exir_ops.edge.aten.bitwise_left_shift.Tensor, + exir_ops.edge.aten.__lshift__.Scalar, + torch.ops.aten.scalar_tensor.default, + exir_ops.edge.aten.gelu.default, + exir_ops.edge.aten.alias_copy.default, + exir_ops.edge.aten.sinh.default, + exir_ops.edge.aten.atan.default, + exir_ops.edge.aten.acosh.default, + exir_ops.edge.aten._adaptive_avg_pool2d.default, + exir_ops.edge.aten.sign.default, + exir_ops.edge.aten.asin.default, + exir_ops.edge.aten.atanh.default, + exir_ops.edge.aten.addmm.default, + exir_ops.edge.aten.masked_fill.Scalar, + exir_ops.edge.aten.asinh.default, + exir_ops.edge.aten.cosh.default, + exir_ops.edge.aten.glu.default, + exir_ops.edge.aten.logit.default, + exir_ops.edge.aten.acos.default, + exir_ops.edge.aten.elu.default, +} + + +# FP profile: ops supported via native TOSA ops, decompositions/transformations, precompute, etc. +TOSA_PRO_FP_SupportList: Final[Set] = { + exir_ops.edge.aten.abs.default, + exir_ops.edge.aten.add.Tensor, + exir_ops.edge.aten.any.default, + exir_ops.edge.aten.any.dim, + exir_ops.edge.aten.any.dims, + exir_ops.edge.aten.logical_and.default, + exir_ops.edge.aten.logical_or.default, + exir_ops.edge.aten.logical_xor.default, + exir_ops.edge.aten.logical_not.default, + exir_ops.edge.aten.arange.start_step, + exir_ops.edge.aten.expand_copy.default, + exir_ops.edge.aten.cat.default, + exir_ops.edge.aten.ceil.default, + exir_ops.edge.aten.clamp.default, + exir_ops.edge.aten.cumsum.default, + exir_ops.edge.aten.bmm.default, + exir_ops.edge.aten.permute_copy.default, + exir_ops.edge.aten.hardsigmoid.default, + exir_ops.edge.aten.hardtanh.default, + exir_ops.edge.aten.hardswish.default, + exir_ops.edge.aten.div.Tensor, + exir_ops.edge.aten.div.Tensor_mode, + exir_ops.edge.aten.eq.Tensor, + exir_ops.edge.aten.eq.Scalar, + exir_ops.edge.aten.erf.default, + exir_ops.edge.aten.exp.default, + exir_ops.edge.aten.expm1.default, + exir_ops.edge.aten.log.default, + exir_ops.edge.aten.linear.default, + exir_ops.edge.aten.split_with_sizes_copy.default, + exir_ops.edge.aten.floor.default, + exir_ops.edge.aten.full.default, + exir_ops.edge.aten.full_like.default, + exir_ops.edge.aten.ge.Tensor, + exir_ops.edge.aten.ge.Scalar, + exir_ops.edge.aten.gt.Tensor, + exir_ops.edge.aten.gt.Scalar, + exir_ops.edge.aten.le.Tensor, + exir_ops.edge.aten.le.Scalar, + exir_ops.edge.aten.lt.Tensor, + exir_ops.edge.aten.lt.Scalar, + exir_ops.edge.aten.mul.Tensor, + exir_ops.edge.aten.ne.Tensor, + exir_ops.edge.aten.ne.Scalar, + exir_ops.edge.aten.neg.default, + exir_ops.edge.aten.add.Scalar, + exir_ops.edge.aten.sub.Scalar, + exir_ops.edge.aten.mul.Scalar, + exir_ops.edge.aten.div.Scalar, + exir_ops.edge.aten._native_batch_norm_legit_no_training.default, + exir_ops.edge.aten.native_layer_norm.default, + exir_ops.edge.aten.native_group_norm.default, + exir_ops.edge.aten.sigmoid.default, + exir_ops.edge.aten.mean.dim, + exir_ops.edge.aten.mm.default, + exir_ops.edge.aten.minimum.default, + exir_ops.edge.aten.maximum.default, + exir_ops.edge.aten.repeat.default, + exir_ops.edge.aten.reciprocal.default, + exir_ops.edge.aten.relu.default, + exir_ops.edge.aten.leaky_relu.default, + exir_ops.edge.aten.sqrt.default, + exir_ops.edge.aten.rsqrt.default, + exir_ops.edge.aten.round.default, + exir_ops.edge.aten._softmax.default, + exir_ops.edge.aten.select_copy.int, + exir_ops.edge.aten._log_softmax.default, + exir_ops.edge.aten.sub.Tensor, + exir_ops.edge.aten.tanh.default, + exir_ops.edge.aten.upsample_bilinear2d.vec, + exir_ops.edge.aten.upsample_nearest2d.vec, + exir_ops.edge.aten.var.correction, + exir_ops.edge.aten.var.dim, + exir_ops.edge.aten.view_copy.default, + exir_ops.edge.aten.unsqueeze_copy.default, + exir_ops.edge.aten.squeeze_copy.dims, + exir_ops.edge.aten.pow.Tensor_Scalar, + exir_ops.edge.aten.pow.Tensor_Tensor, + exir_ops.edge.aten.where.self, + operator.getitem, + exir_ops.edge.aten.constant_pad_nd.default, + exir_ops.edge.aten.amax.default, + exir_ops.edge.aten.amin.default, + exir_ops.edge.aten.eye.default, + exir_ops.edge.aten.linspace.default, + exir_ops.edge.aten.bitwise_left_shift.Tensor, + exir_ops.edge.aten.__lshift__.Scalar, + torch.ops.aten.scalar_tensor.default, + exir_ops.edge.aten.gelu.default, + exir_ops.edge.aten.alias_copy.default, + exir_ops.edge.aten.sinh.default, + exir_ops.edge.aten.atan.default, + exir_ops.edge.aten.acosh.default, + exir_ops.edge.aten._adaptive_avg_pool2d.default, + exir_ops.edge.aten.sign.default, + exir_ops.edge.aten.asin.default, + exir_ops.edge.aten.atanh.default, + exir_ops.edge.aten.addmm.default, + exir_ops.edge.aten.masked_fill.Scalar, + exir_ops.edge.aten.asinh.default, + exir_ops.edge.aten.cosh.default, + exir_ops.edge.aten.glu.default, + exir_ops.edge.aten.logit.default, + exir_ops.edge.aten.acos.default, + exir_ops.edge.aten.elu.default, +} + + +__all__ = [ + "TOSA_PRO_INT_SupportList", + "TOSA_PRO_FP_SupportList", +] diff --git a/backends/arm/operator_support/tosa_supported_operators.py b/backends/arm/operator_support/tosa_supported_operators.py index 9fa84d051d5..b580fbb9a9a 100644 --- a/backends/arm/operator_support/tosa_supported_operators.py +++ b/backends/arm/operator_support/tosa_supported_operators.py @@ -26,6 +26,10 @@ EthosU55TransposeCheck, EthosU55ViewCheck, ) +from executorch.backends.arm.operator_support.tosa_profile_supported_op_lists import ( + TOSA_PRO_FP_SupportList, + TOSA_PRO_INT_SupportList, +) from executorch.backends.arm.tosa import TosaSpecification from executorch.exir import ExportedProgram from executorch.exir.backend.utils import WhyNoPartitionReporter @@ -106,12 +110,16 @@ def tosa_support_factory( Additional checks can be supplied to avoid partitioning additional nodes. """ # Postive checks: Add nodes to partitioning - positive_checks: list[OperatorSupportBase] = [ - BaseTOSASupportList(), - *[ - check(tosa_spec, reporter) - for check in get_registered_tosa_support_checks(tosa_spec) - ], + positive_checks: list[OperatorSupportBase] = [] + + if tosa_spec.support_integer(): + positive_checks.append(TOSAProINTSupportList()) + if tosa_spec.support_float(): + positive_checks.append(TOSAProFPSupportList()) + # TODO: Refactor to use TOSAProSupportLists + negtive checks + positive_checks += [ + check(tosa_spec, reporter) + for check in get_registered_tosa_support_checks(tosa_spec) ] # Negative checks: Remove nodes from partitioning @@ -143,130 +151,30 @@ def tosa_support_factory( ) -class BaseTOSASupportList(OperatorSupportBase): +class TOSAProINTSupportList(OperatorSupportBase): + """ + TOSA_PRO_INT_SupportList: + Ops supported in INT profile via native TOSA ops, decomposition/transformation, pre-compute, or TableOps + """ + + def is_node_supported( + self, submodules: typing.Mapping[str, torch.nn.Module], node: fx.Node + ) -> bool: + + return node.op == "call_function" and node.target in TOSA_PRO_INT_SupportList + + +class TOSAProFPSupportList(OperatorSupportBase): + """ + TOSA_PRO_FP_SupportList: + Ops supported in FP profile via native TOSA ops, decomposition/transformation, pre-compute + """ def is_node_supported( self, submodules: typing.Mapping[str, torch.nn.Module], node: fx.Node ) -> bool: - supported = node.op == "call_function" and node.target in [ - exir_ops.edge.aten.abs.default, - exir_ops.edge.aten.add.Tensor, - exir_ops.edge.aten.any.default, - exir_ops.edge.aten.any.dim, - exir_ops.edge.aten.any.dims, - exir_ops.edge.aten.logical_and.default, - exir_ops.edge.aten.logical_or.default, - exir_ops.edge.aten.logical_xor.default, - exir_ops.edge.aten.logical_not.default, - exir_ops.edge.aten.arange.start_step, - exir_ops.edge.aten.bitwise_and.Tensor, - exir_ops.edge.aten.bitwise_or.Tensor, - exir_ops.edge.aten.bitwise_xor.Tensor, - exir_ops.edge.aten.bitwise_and.Scalar, - exir_ops.edge.aten.bitwise_or.Scalar, - exir_ops.edge.aten.bitwise_xor.Scalar, - exir_ops.edge.aten.expand_copy.default, - exir_ops.edge.aten.cat.default, - exir_ops.edge.aten.ceil.default, - exir_ops.edge.aten.clamp.default, - exir_ops.edge.aten.cumsum.default, - exir_ops.edge.aten.bmm.default, - exir_ops.edge.aten.permute_copy.default, - exir_ops.edge.aten.hardsigmoid.default, - exir_ops.edge.aten.hardtanh.default, - exir_ops.edge.aten.hardswish.default, - exir_ops.edge.aten.div.Tensor, - exir_ops.edge.aten.div.Tensor_mode, - exir_ops.edge.aten.eq.Tensor, - exir_ops.edge.aten.eq.Scalar, - exir_ops.edge.aten.erf.default, - exir_ops.edge.aten.exp.default, - exir_ops.edge.aten.expm1.default, - exir_ops.edge.aten.log.default, - exir_ops.edge.aten.linear.default, - exir_ops.edge.aten.split_with_sizes_copy.default, - exir_ops.edge.aten.floor.default, - exir_ops.edge.aten.full.default, - exir_ops.edge.aten.full_like.default, - exir_ops.edge.aten.ge.Tensor, - exir_ops.edge.aten.ge.Scalar, - exir_ops.edge.aten.gt.Tensor, - exir_ops.edge.aten.gt.Scalar, - exir_ops.edge.aten.le.Tensor, - exir_ops.edge.aten.le.Scalar, - exir_ops.edge.aten.lt.Tensor, - exir_ops.edge.aten.lt.Scalar, - exir_ops.edge.aten.mul.Tensor, - exir_ops.edge.aten.ne.Tensor, - exir_ops.edge.aten.ne.Scalar, - exir_ops.edge.aten.neg.default, - exir_ops.edge.aten.add.Scalar, - exir_ops.edge.aten.sub.Scalar, - exir_ops.edge.aten.mul.Scalar, - exir_ops.edge.aten.div.Scalar, - exir_ops.edge.aten._native_batch_norm_legit_no_training.default, - exir_ops.edge.aten.native_layer_norm.default, - exir_ops.edge.aten.native_group_norm.default, - exir_ops.edge.aten.sigmoid.default, - exir_ops.edge.aten.mean.dim, - exir_ops.edge.aten.mm.default, - exir_ops.edge.aten.minimum.default, - exir_ops.edge.aten.maximum.default, - exir_ops.edge.aten.repeat.default, - exir_ops.edge.aten.reciprocal.default, - exir_ops.edge.aten.relu.default, - exir_ops.edge.aten.leaky_relu.default, - exir_ops.edge.aten.sqrt.default, - exir_ops.edge.aten.rsqrt.default, - exir_ops.edge.aten.round.default, - exir_ops.edge.aten._softmax.default, - exir_ops.edge.aten.select_copy.int, - exir_ops.edge.aten._log_softmax.default, - exir_ops.edge.aten.sub.Tensor, - exir_ops.edge.aten.tanh.default, - exir_ops.edge.aten.upsample_bilinear2d.vec, - exir_ops.edge.aten.upsample_nearest2d.vec, - exir_ops.edge.aten.var.correction, - exir_ops.edge.aten.var.dim, - exir_ops.edge.aten.view_copy.default, - exir_ops.edge.aten.unsqueeze_copy.default, - exir_ops.edge.aten.squeeze_copy.dims, - exir_ops.edge.aten.pow.Tensor_Scalar, - exir_ops.edge.aten.pow.Tensor_Tensor, - exir_ops.edge.aten.where.self, - operator.getitem, - exir_ops.edge.quantized_decomposed.quantize_per_tensor.default, - exir_ops.edge.quantized_decomposed.quantize_per_channel.default, - exir_ops.edge.quantized_decomposed.dequantize_per_tensor.default, - exir_ops.edge.quantized_decomposed.dequantize_per_channel.default, - exir_ops.edge.aten.constant_pad_nd.default, - exir_ops.edge.aten.amax.default, - exir_ops.edge.aten.amin.default, - exir_ops.edge.aten.eye.default, - exir_ops.edge.aten.linspace.default, - exir_ops.edge.aten.bitwise_left_shift.Tensor, - exir_ops.edge.aten.__lshift__.Scalar, - torch.ops.aten.scalar_tensor.default, - exir_ops.edge.aten.gelu.default, - exir_ops.edge.aten.alias_copy.default, - exir_ops.edge.aten.sinh.default, - exir_ops.edge.aten.atan.default, - exir_ops.edge.aten.acosh.default, - exir_ops.edge.aten._adaptive_avg_pool2d.default, - exir_ops.edge.aten.sign.default, - exir_ops.edge.aten.asin.default, - exir_ops.edge.aten.atanh.default, - exir_ops.edge.aten.addmm.default, - exir_ops.edge.aten.masked_fill.Scalar, - exir_ops.edge.aten.asinh.default, - exir_ops.edge.aten.cosh.default, - exir_ops.edge.aten.glu.default, - exir_ops.edge.aten.logit.default, - exir_ops.edge.aten.acos.default, - exir_ops.edge.aten.elu.default, - ] - return supported + return node.op == "call_function" and node.target in TOSA_PRO_FP_SupportList class NeedsDecompositionCheck(OperatorSupportBase): diff --git a/backends/arm/test/ops/test_bitwise.py b/backends/arm/test/ops/test_bitwise.py index 46e84361573..218f2290cab 100644 --- a/backends/arm/test/ops/test_bitwise.py +++ b/backends/arm/test/ops/test_bitwise.py @@ -13,7 +13,6 @@ from executorch.backends.arm.test.tester.test_pipeline import ( EthosU85PipelineINT, OpNotSupportedPipeline, - TosaPipelineFP, TosaPipelineINT, VgfPipeline, ) @@ -113,6 +112,7 @@ class AndScalar(BitwiseBinaryScalar): aten_op = "torch.ops.aten.bitwise_and.Scalar" # Tensor because it gets converted from Scalar -> Tensor in lowering exir_op = "executorch_exir_dialects_edge__ops_aten_bitwise_and_Tensor" + exir_op_scalar = "executorch_exir_dialects_edge__ops_aten_bitwise_and_Scalar" def forward(self, tensor: torch.Tensor, scalar: int): return tensor.bitwise_and(scalar) @@ -122,6 +122,7 @@ class XorScalar(BitwiseBinaryScalar): aten_op = "torch.ops.aten.bitwise_xor.Scalar" # Tensor because it gets converted from Scalar -> Tensor in lowering exir_op = "executorch_exir_dialects_edge__ops_aten_bitwise_xor_Tensor" + exir_op_scalar = "executorch_exir_dialects_edge__ops_aten_bitwise_xor_Scalar" def forward(self, tensor: torch.Tensor, scalar: int): return tensor.bitwise_xor(scalar) @@ -131,6 +132,7 @@ class OrScalar(BitwiseBinaryScalar): aten_op = "torch.ops.aten.bitwise_or.Scalar" # Tensor because it gets converted from Scalar -> Tensor in lowering exir_op = "executorch_exir_dialects_edge__ops_aten_bitwise_or_Tensor" + exir_op_scalar = "executorch_exir_dialects_edge__ops_aten_bitwise_or_Scalar" def forward(self, tensor: torch.Tensor, scalar: int): return tensor.bitwise_or(scalar) @@ -143,28 +145,20 @@ def forward(self, tensor: torch.Tensor, scalar: int): @common.parametrize("test_data", And().test_data) def test_bitwise_and_tensor_tosa_FP(test_data: input_t2): - pipeline = TosaPipelineFP[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( And(), test_data(), - And().aten_op, - And().exir_op, - atol=0, - rtol=0, - qtol=0, + {And.exir_op: 1}, ) pipeline.run() @common.parametrize("test_data", AndScalar.test_data) def test_bitwise_and_scalar_tosa_FP(test_data: input_t2): - pipeline = TosaPipelineFP[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( AndScalar(), test_data(), - AndScalar.aten_op, - AndScalar.exir_op, - atol=0, - rtol=0, - qtol=0, + {AndScalar.exir_op_scalar: 1}, ) pipeline.run() @@ -207,7 +201,7 @@ def test_bitwise_and_tensor_u55_INT(test_data: input_t2): pipeline = OpNotSupportedPipeline[input_t2]( And(), test_data(), - {And().exir_op: 1}, + {And.exir_op: 1}, quantize=True, u55_subset=True, ) @@ -272,15 +266,10 @@ def test_bitwise_and_tensor_u85_INT(test_data: input_t2): @common.parametrize("test_data", And().test_data) @common.SkipIfNoModelConverter def test_bitwise_and_tensor_vgf_FP(test_data: input_t2): - pipeline = VgfPipeline[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( And(), test_data(), - And().aten_op, - And().exir_op, - atol=0, - rtol=0, - qtol=0, - tosa_version="TOSA-1.0+FP", + {And.exir_op: 1}, ) pipeline.run() @@ -288,15 +277,10 @@ def test_bitwise_and_tensor_vgf_FP(test_data: input_t2): @common.parametrize("test_data", AndScalar().test_data) @common.SkipIfNoModelConverter def test_bitwise_and_scalar_vgf_FP(test_data: input_t2): - pipeline = VgfPipeline[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( AndScalar(), test_data(), - AndScalar().aten_op, - AndScalar().exir_op, - atol=0, - rtol=0, - qtol=0, - tosa_version="TOSA-1.0+FP", + {AndScalar.exir_op_scalar: 1}, ) pipeline.run() @@ -344,28 +328,20 @@ def test_bitwise_and_scalar_vgf_INT(test_data: input_t2): @common.parametrize("test_data", Xor().test_data) def test_bitwise_xor_tensor_tosa_FP(test_data: input_t2): - pipeline = TosaPipelineFP[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( Xor(), test_data(), - Xor().aten_op, - Xor().exir_op, - atol=0, - rtol=0, - qtol=0, + {Xor.exir_op: 1}, ) pipeline.run() @common.parametrize("test_data", XorScalar.test_data) def test_bitwise_xor_scalar_tosa_FP(test_data: input_t2): - pipeline = TosaPipelineFP[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( XorScalar(), test_data(), - XorScalar.aten_op, - XorScalar.exir_op, - atol=0, - rtol=0, - qtol=0, + {XorScalar.exir_op_scalar: 1}, ) pipeline.run() @@ -473,15 +449,10 @@ def test_bitwise_xor_scalar_u85_INT(test_data: input_t2): @common.parametrize("test_data", Xor().test_data) @common.SkipIfNoModelConverter def test_bitwise_xor_tensor_vgf_FP(test_data: input_t2): - pipeline = VgfPipeline[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( Xor(), test_data(), - Xor().aten_op, - Xor().exir_op, - atol=0, - rtol=0, - qtol=0, - tosa_version="TOSA-1.0+FP", + {Xor.exir_op: 1}, ) pipeline.run() @@ -489,15 +460,10 @@ def test_bitwise_xor_tensor_vgf_FP(test_data: input_t2): @common.parametrize("test_data", XorScalar().test_data) @common.SkipIfNoModelConverter def test_bitwise_xor_scalar_vgf_FP(test_data: input_t2): - pipeline = VgfPipeline[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( XorScalar(), test_data(), - XorScalar().aten_op, - XorScalar().exir_op, - atol=0, - rtol=0, - qtol=0, - tosa_version="TOSA-1.0+FP", + {XorScalar.exir_op_scalar: 1}, ) pipeline.run() @@ -545,28 +511,20 @@ def test_bitwise_xor_scalar_vgf_INT(test_data: input_t2): @common.parametrize("test_data", Or().test_data) def test_bitwise_or_tensor_tosa_FP(test_data: input_t2): - pipeline = TosaPipelineFP[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( Or(), test_data(), - Or().aten_op, - Or().exir_op, - atol=0, - rtol=0, - qtol=0, + {Or.exir_op: 1}, ) pipeline.run() @common.parametrize("test_data", OrScalar.test_data) def test_bitwise_or_scalar_tosa_FP(test_data: input_t2): - pipeline = TosaPipelineFP[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( OrScalar(), test_data(), - OrScalar.aten_op, - OrScalar.exir_op, - atol=0, - rtol=0, - qtol=0, + {OrScalar.exir_op_scalar: 1}, ) pipeline.run() @@ -674,15 +632,10 @@ def test_bitwise_or_scalar_u85_INT(test_data: input_t2): @common.parametrize("test_data", Or().test_data) @common.SkipIfNoModelConverter def test_bitwise_or_tensor_vgf_FP(test_data: input_t2): - pipeline = VgfPipeline[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( Or(), test_data(), - Or().aten_op, - Or().exir_op, - atol=0, - rtol=0, - qtol=0, - tosa_version="TOSA-1.0+FP", + {Or.exir_op: 1}, ) pipeline.run() @@ -690,15 +643,10 @@ def test_bitwise_or_tensor_vgf_FP(test_data: input_t2): @common.parametrize("test_data", OrScalar().test_data) @common.SkipIfNoModelConverter def test_bitwise_or_scalar_vgf_FP(test_data: input_t2): - pipeline = VgfPipeline[input_t2]( + pipeline = OpNotSupportedPipeline[input_t2]( OrScalar(), test_data(), - OrScalar().aten_op, - OrScalar().exir_op, - atol=0, - rtol=0, - qtol=0, - tosa_version="TOSA-1.0+FP", + {OrScalar.exir_op_scalar: 1}, ) pipeline.run()