diff options
-rw-r--r-- | verif/generator/tosa_arg_gen.py | 13 | ||||
-rw-r--r-- | verif/generator/tosa_error_if.py | 5 | ||||
-rw-r--r-- | verif/generator/tosa_test_gen.py | 31 |
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, |