diff options
author | Jeremy Johnson <jeremy.johnson@arm.com> | 2023-12-07 16:35:28 +0000 |
---|---|---|
committer | Eric Kunze <eric.kunze@arm.com> | 2023-12-14 17:56:51 +0000 |
commit | a8420add949564053495ef78f3213f163c30fb9a (patch) | |
tree | 4c5e2783433e9443b2ed02e5e25c51cc5de2affd /verif/generator/tosa_test_gen.py | |
parent | 81db5d2f275f69cc0d3e8687af57bdba99971042 (diff) | |
download | reference_model-a8420add949564053495ef78f3213f163c30fb9a.tar.gz |
Main Compliance testing for SCATTER and GATHER
Added indices shuffling and random INT32 support to generate lib
with testing of these new random generator modes
Signed-off-by: Jeremy Johnson <jeremy.johnson@arm.com>
Change-Id: I058d8b092470228075e8fe69c2ededa639163003
Diffstat (limited to 'verif/generator/tosa_test_gen.py')
-rw-r--r-- | verif/generator/tosa_test_gen.py | 106 |
1 files changed, 51 insertions, 55 deletions
diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py index 53b0b75..ee935d4 100644 --- a/verif/generator/tosa_test_gen.py +++ b/verif/generator/tosa_test_gen.py @@ -66,6 +66,12 @@ class TosaTestGen: v = maxFP elif v == "-max": v = -maxFP + elif v < 0: + # Trim to minimum data type value + v = max(v, -maxFP) + elif v > 0: + # Trim to maximum data type value + v = min(v, maxFP) vals.append(v) return tuple(sorted(vals)) @@ -1722,27 +1728,19 @@ class TosaTestGen: self.ser.addOperator(op["op"], input_list, output_list, attr) return result_tens - def build_gather(self, op, values, validator_fcns=None, error_name=None): - - # Create a new indicies tensor - # here with data that doesn't exceed the dimensions of the values tensor - - K = values.shape[1] # K - W = self.randInt( - self.args.tensor_shape_range[0], self.args.tensor_shape_range[1] - ) # W - indicies_arr = np.int32( - self.rng.integers(low=0, high=K, size=[values.shape[0], W]) - ) # (N, W) - indicies = self.ser.addConst(indicies_arr.shape, DType.INT32, indicies_arr) + def build_gather( + self, op, inputs, args_dict, validator_fcns=None, error_name=None, qinfo=None + ): + assert len(inputs) == 2 + values, indices = inputs - result_tens = OutputShaper.gatherOp( - self.ser, self.rng, values, indicies, error_name + result_tensor = OutputShaper.gatherOp( + self.ser, self.rng, values, indices, error_name ) # Invalidate Input/Output list for error if checks. - input_list = [values.name, indicies.name] - output_list = [result_tens.name] + input_list = [values.name, indices.name] + output_list = [result_tensor.name] pCount, cCount = op["operands"] num_operands = pCount + cCount input_list, output_list = TosaErrorIfArgGen.eiInvalidateInputOutputList( @@ -1755,10 +1753,10 @@ class TosaTestGen: error_name, op=op, input_shape=values.shape, - output_shape=result_tens.shape, + output_shape=result_tensor.shape, input_dtype=values.dtype, - output_dtype=result_tens.dtype, - result_tensors=[result_tens], + output_dtype=result_tensor.dtype, + result_tensors=[result_tensor], input_list=input_list, output_list=output_list, num_operands=num_operands, @@ -1767,33 +1765,24 @@ class TosaTestGen: self.ser.addOperator(op["op"], input_list, output_list) - return result_tens + compliance = self.tensorComplianceMetaData( + op, values.dtype, args_dict, result_tensor, error_name + ) - def build_scatter(self, op, values_in, input, validator_fcns=None, error_name=None): - - K = values_in.shape[1] # K - W = input.shape[1] # W - - # Create an indices tensor here with data that doesn't exceed the - # dimension K of the values_in tensor and does NOT repeat the same K - # location as needed by the spec: - # "It is not permitted to repeat the same output index within a single - # SCATTER operation and so each output index occurs at most once." - assert K >= W - arr = [] - for n in range(values_in.shape[0]): - # Get a shuffled list of output indices and limit it to size W - arr.append(self.rng.permutation(K)[:W]) - indices_arr = np.array(arr, dtype=np.int32) # (N, W) - indices = self.ser.addConst(indices_arr.shape, DType.INT32, indices_arr) - - result_tens = OutputShaper.scatterOp( + return TosaTestGen.BuildInfo(result_tensor, compliance) + + def build_scatter( + self, op, inputs, args_dict, validator_fcns=None, error_name=None, qinfo=None + ): + assert len(inputs) == 3 + values_in, indices, input = inputs + result_tensor = OutputShaper.scatterOp( self.ser, self.rng, values_in, indices, input, error_name ) # Invalidate Input/Output list for error if checks. input_list = [values_in.name, indices.name, input.name] - output_list = [result_tens.name] + output_list = [result_tensor.name] pCount, cCount = op["operands"] num_operands = pCount + cCount input_list, output_list = TosaErrorIfArgGen.eiInvalidateInputOutputList( @@ -1806,10 +1795,10 @@ class TosaTestGen: error_name, op=op, input_shape=values_in.shape, - output_shape=result_tens.shape, + output_shape=result_tensor.shape, input_dtype=values_in.dtype, - output_dtype=result_tens.dtype, - result_tensors=[result_tens], + output_dtype=result_tensor.dtype, + result_tensors=[result_tensor], input_list=input_list, output_list=output_list, num_operands=num_operands, @@ -1818,7 +1807,11 @@ class TosaTestGen: self.ser.addOperator(op["op"], input_list, output_list) - return result_tens + compliance = self.tensorComplianceMetaData( + op, values_in.dtype, args_dict, result_tensor, error_name + ) + + return TosaTestGen.BuildInfo(result_tensor, compliance) def build_resize( self, @@ -4310,14 +4303,13 @@ class TosaTestGen: # Scatter/Gather "gather": { "op": Op.GATHER, - # Only specify 'values' tensor here. 'indices' is generated in op building stage - "operands": (1, 0), + "operands": (2, 0), "rank": (3, 3), "build_fcn": ( build_gather, - TosaTensorGen.tgBasic, - TosaTensorValuesGen.tvgDefault, - None, + TosaTensorGen.tgGather, + TosaTensorValuesGen.tvgGather, + TosaArgGen.agNone, ), "types": ( DType.INT8, @@ -4334,18 +4326,19 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, TosaErrorValidator.evWrongRank, ), + "data_gen": { + "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + }, }, "scatter": { "op": Op.SCATTER, - # Only specify 'values_in' tensor here. - # 'indices' and 'input' are generated in op building stage - "operands": (2, 0), + "operands": (3, 0), "rank": (3, 3), "build_fcn": ( build_scatter, TosaTensorGen.tgScatter, - TosaTensorValuesGen.tvgDefault, - None, + TosaTensorValuesGen.tvgScatter, + TosaArgGen.agNone, ), "types": TYPE_INT_FP, "error_if_validators": ( @@ -4355,6 +4348,9 @@ class TosaTestGen: TosaErrorValidator.evWrongOutputList, TosaErrorValidator.evWrongRank, ), + "data_gen": { + "fp": (gtu.DataGenType.PSEUDO_RANDOM,), + }, }, # Image operations "resize": { |