aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatWai Chong <tatwai.chong@arm.com>2024-01-31 21:33:27 -0800
committerTatWai Chong <tatwai.chong@arm.com>2024-02-01 19:24:47 -0800
commitf15bad80b5ada22f4ffdd4642e9b58e2821bf90a (patch)
treece411555f09028d8555cfb563d973b8185372c3f
parent01f937a27a3b56bca622f94af7201c98dfebeb43 (diff)
downloadreference_model-f15bad80b5ada22f4ffdd4642e9b58e2821bf90a.tar.gz
[testing] Switch to using shape type for start and size of slice
The type of both start and size of slice are tosa shape type since 0.90. Update the type of these arguments and its usage in testing. Change-Id: Iff582982ad55d64a792183c6d46c9266510f924c Signed-off-by: TatWai Chong <tatwai.chong@arm.com>
-rw-r--r--verif/generator/tosa_arg_gen.py13
-rw-r--r--verif/generator/tosa_error_if.py5
-rw-r--r--verif/generator/tosa_test_gen.py31
3 files changed, 36 insertions, 13 deletions
diff --git a/verif/generator/tosa_arg_gen.py b/verif/generator/tosa_arg_gen.py
index 0db9717..7825445 100644
--- a/verif/generator/tosa_arg_gen.py
+++ b/verif/generator/tosa_arg_gen.py
@@ -1059,6 +1059,19 @@ class TosaTensorValuesGen:
)
@staticmethod
+ def tvgSlice(testGen, op, dtypeList, shapeList, argsDict, error_name=None):
+ dtypeList[1] = DType.SHAPE
+ shapeList[1] = [len(argsDict["start"])]
+ dtypeList[2] = DType.SHAPE
+ shapeList[2] = [len(argsDict["size"])]
+ # Create a new list for the pre-generated data in argsDict["fixed_data"]
+ argsDict["fixed_data"] = [None, argsDict["start"], argsDict["size"]]
+
+ return TosaTensorValuesGen.tvgLazyGenDefault(
+ testGen, op, dtypeList, shapeList, argsDict, error_name
+ )
+
+ @staticmethod
def tvgTile(testGen, op, dtypeList, shapeList, argsDict, error_name=None):
dtypeList[1] = DType.SHAPE
shapeList[1] = [len(argsDict["multiples"])]
diff --git a/verif/generator/tosa_error_if.py b/verif/generator/tosa_error_if.py
index a5a834f..90c3428 100644
--- a/verif/generator/tosa_error_if.py
+++ b/verif/generator/tosa_error_if.py
@@ -305,6 +305,11 @@ class TosaErrorIfArgGen:
return newStart, newSize
elif error_name == ErrorIf.InputSizeStartLengthMismatch:
remove = testGen.rng.choice([True, False])
+
+ # Get an empty tensor when diminishing dimension on 1-d tensor.
+ if len(start) == 1 or len(size) == 1:
+ remove = False
+
if remove:
newStart = start[1:]
newSize = size[1:]
diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py
index 081aff6..9cb0ce2 100644
--- a/verif/generator/tosa_test_gen.py
+++ b/verif/generator/tosa_test_gen.py
@@ -1705,17 +1705,17 @@ class TosaTestGen:
def build_slice(
self, op, inputs, args_dict, validator_fcns=None, error_name=None, qinfo=None
):
- assert len(inputs) == 1
- a = inputs[0]
- start = args_dict["start"]
- size = args_dict["size"]
+ assert len(inputs) == 3
+ a, start_var, size_var = inputs
+ start_const = args_dict["start"]
+ size_const = args_dict["size"]
result_tensor = OutputShaper.sliceOp(
- self.ser, self.rng, a, start, size, error_name
+ self.ser, self.rng, a, start_const, size_const, error_name
)
# Invalidate Input/Output list for error if checks.
- input_list = [a.name]
+ input_list = [a.name, start_var.name, size_var.name]
output_list = [result_tensor.name]
pCount, cCount = op["operands"]
num_operands = pCount + cCount
@@ -1732,8 +1732,8 @@ class TosaTestGen:
output_shape=result_tensor.shape,
input_dtype=a.dtype,
output_dtype=result_tensor.dtype,
- start=start,
- size=size,
+ start=start_const,
+ size=size_const,
result_tensors=[result_tensor],
input_list=input_list,
output_list=output_list,
@@ -1742,8 +1742,9 @@ class TosaTestGen:
):
return None
+ # TODO remove the slice attribute once shape dynamism support is mature.
attr = ts.TosaSerializerAttribute()
- attr.SliceAttribute(start, size)
+ attr.SliceAttribute(start_const, size_const)
self.ser.addOperator(op["op"], input_list, output_list, attr)
@@ -4358,18 +4359,22 @@ class TosaTestGen:
},
"slice": {
"op": Op.SLICE,
- "operands": (1, 0),
+ "operands": (3, 0),
"rank": (1, 6),
"build_fcn": (
build_slice,
TosaTensorGen.tgBasic,
- TosaTensorValuesGen.tvgLazyGenDefault,
+ TosaTensorValuesGen.tvgSlice,
TosaArgGen.agSlice,
),
"types": TYPE_FIB,
"error_if_validators": (
- TosaErrorValidator.evStartSmallerZero,
- TosaErrorValidator.evSizeSmallerEqualZero,
+ # TODO Turn off these error categories for now as the reference
+ # model cannot allocate memory space for empty tensor. We probably
+ # can report an accurate error messege at the right place during
+ # exeuction.
+ # TosaErrorValidator.evStartSmallerZero,
+ # TosaErrorValidator.evSizeSmallerEqualZero,
TosaErrorValidator.evStartSizeOutsideBounds,
TosaErrorValidator.evSizeOutputShapeMismatch,
TosaErrorValidator.evInputSizeStartLengthMismatch,