MLBEDSW-3302: Reject per-channel scaling for unsupported ops

Vela only supports per-channel scaling for
convolution ops. This commit adds a check that
puts ops with per-channel scaling on the CPU.
A caveat worth mentioning is that neither
TensorFlow Lite or TensorFlow Lite Micro support
per-channel scaling for the CPU placed op,
however the problem is moved away from Vela.
This commit also changes a small utility function
in supported_operators.py used for docstring
formatting.

Signed-off-by: Dwight Lidman <dwight.lidman@arm.com>
Change-Id: I9ed090592f1d05dd4566d3e54dba1ef405299383
diff --git a/ethosu/vela/tensor.py b/ethosu/vela/tensor.py
index 3601c92..b07b4dc 100644
--- a/ethosu/vela/tensor.py
+++ b/ethosu/vela/tensor.py
@@ -246,6 +246,13 @@
 
         return None not in (self.scale_f32, self.zero_point)
 
+    def is_per_axis(self):
+        """Returns True if either the scale, zero point, minimum or maximum values are arrays"""
+        for attr in ("scale_f32", "zero_point", "min", "max"):
+            if isinstance(getattr(self, attr), np.ndarray):
+                return True
+        return False
+
 
 def create_const_tensor(name, shape, dtype, values, value_dtype=None, purpose=TensorPurpose.Unknown, quantization=None):
     # Tensor