Improved test selection before test generation

Add test list output to tosa_verif_build_tests and test list
capture to file for tosa_verif_conformance_generator

Improve PAD & CONV2D test coverage for tosa-mi conformance

Change to use logging for output to hide info from test lists
Tweak verbosity levels of tosa_verif_conformance_generator

Signed-off-by: Jeremy Johnson <jeremy.johnson@arm.com>
Change-Id: Ic29da5776b02e9ac610db6ee89d0ebfb4994e055
diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py
index 0f68999..e7704f1 100644
--- a/verif/generator/tosa_test_gen.py
+++ b/verif/generator/tosa_test_gen.py
@@ -1,6 +1,7 @@
 # Copyright (c) 2020-2024, ARM Limited.
 # SPDX-License-Identifier: Apache-2.0
 import json
+import logging
 import os
 from copy import deepcopy
 from datetime import datetime
@@ -27,6 +28,9 @@
 // AUTO-GENERATED FILE CREATED BY tosa_verif_build_tests
 """
 
+logging.basicConfig()
+logger = logging.getLogger("tosa_verif_build_tests")
+
 
 class TosaTestGen:
     # Maximum rank of tensor supported by test generator.
@@ -2134,6 +2138,7 @@
         double_round = args_dict["double_round"]
         per_channel = args_dict["per_channel"]
         shift_arr = args_dict["shift"]
+        multiplier_arr = args_dict["multiplier"]
 
         result_tensor = OutputShaper.typeConversionOp(
             self.ser, self.rng, val, out_dtype, error_name
@@ -2203,7 +2208,9 @@
             min_shift_value_arr[i] = -1 << (shift_arr[i] - 1)
             max_shift_value_arr[i] = (1 << (shift_arr[i] - 1)) - 1
 
-        # print('multiplier {} shift {} inzp {} outzp {}'.format(multiplier_arr, shift_arr, input_zp, output_zp))
+        logger.debug(
+            f"build_rescale: multiplier={multiplier_arr} shift={shift_arr} inzp={input_zp} outzp={output_zp}"
+        )
         if scale32 and error_name is None:
             # Make sure random values are within apply_scale_32 specification
             # REQUIRES(value >= (-1<<(shift-1)) && value < (1<<(shift-1))
@@ -2907,7 +2914,9 @@
             cleanRankFilter = filterDict["rankFilter"]
             cleanDtypeFilter = filterDict["dtypeFilter"]
             cleanShapeFilter = filterDict["shapeFilter"]
-            # print(f"Error: {error_name}, Filters: S {cleanShapeFilter}, R {cleanRankFilter}, T {cleanDtypeFilter}")
+            logger.debug(
+                f"genOpTestList: Error={error_name}, Filters S={cleanShapeFilter}, R={cleanRankFilter}, T={cleanDtypeFilter}"
+            )
 
             for r in cleanRankFilter:
                 for t in cleanDtypeFilter:
@@ -2981,8 +2990,7 @@
         except KeyError:
             raise Exception("Cannot find op with name {}".format(opName))
 
-        if self.args.verbose:
-            print(f"Creating {testStr}")
+        logger.info(f"Creating {testStr}")
 
         # Create a serializer
         self.createSerializer(opName, testStr)
@@ -3062,7 +3070,7 @@
             self.serialize("test", tensMeta)
         else:
             # The test is not valid
-            print(f"Invalid ERROR_IF test created: {opName} {testStr}")
+            logger.error(f"Invalid ERROR_IF test created: {opName} {testStr}")
 
     def createDynamicOpLists(self):
 
@@ -3084,6 +3092,7 @@
             self.TOSA_OP_LIST[testName] = self.TOSA_OP_LIST["conv2d_TEMPLATE"].copy()
             self.TOSA_OP_LIST[testName]["filter"] = k
             self.TOSA_OP_LIST[testName]["template"] = False
+            self.TOSA_OP_LIST[testName]["real_name"] = "conv2d"
 
             testName = "depthwise_conv2d_{}x{}".format(k[0], k[1])
             self.TOSA_OP_LIST[testName] = self.TOSA_OP_LIST[
@@ -3091,6 +3100,7 @@
             ].copy()
             self.TOSA_OP_LIST[testName]["filter"] = k
             self.TOSA_OP_LIST[testName]["template"] = False
+            self.TOSA_OP_LIST[testName]["real_name"] = "depthwise_conv2d"
 
             testName = "transpose_conv2d_{}x{}".format(k[0], k[1])
             self.TOSA_OP_LIST[testName] = self.TOSA_OP_LIST[
@@ -3098,12 +3108,14 @@
             ].copy()
             self.TOSA_OP_LIST[testName]["filter"] = k
             self.TOSA_OP_LIST[testName]["template"] = False
+            self.TOSA_OP_LIST[testName]["real_name"] = "transpose_conv2d"
 
         for k in KERNELS_3D:
             testName = "conv3d_{}x{}x{}".format(k[0], k[1], k[2])
             self.TOSA_OP_LIST[testName] = self.TOSA_OP_LIST["conv3d_TEMPLATE"].copy()
             self.TOSA_OP_LIST[testName]["filter"] = k
             self.TOSA_OP_LIST[testName]["template"] = False
+            self.TOSA_OP_LIST[testName]["real_name"] = "conv3d"
 
         # Delete any templates after having created any dynamic ops
         # This is a two-pass operation because it's bad practice to delete