MLBEDSW-2067: added custom exceptions

Added custom exceptions to handle different types of input errors.

Also performed minor formatting changes using flake8/black.

Change-Id: Ie5b05361507d5e569aff045757aec0a4a755ae98
Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
diff --git a/ethosu/vela/graph_optimiser.py b/ethosu/vela/graph_optimiser.py
index 351716e..72bb486 100644
--- a/ethosu/vela/graph_optimiser.py
+++ b/ethosu/vela/graph_optimiser.py
@@ -22,6 +22,7 @@
 
 from . import rewrite_graph
 from .data_type import DataType
+from .errors import UnsupportedFeatureError
 from .operation import NpuBlockType
 from .operation import Operation
 from .tensor import Tensor
@@ -124,7 +125,7 @@
         top_pad = 0
         bottom_pad = 0
     else:
-        assert 0, "Unknown padding"
+        raise UnsupportedFeatureError("Unknown padding {}".format(str(padding_type)))
     padding = (top_pad, left_pad, bottom_pad, right_pad)
     skirt = (top_pad, left_pad, ypad - top_pad, xpad - left_pad)
     return padding, skirt
@@ -214,7 +215,7 @@
         if op.type == "StridedSlice":
             new_axis_mask = op.attrs["new_axis_mask"]
             shrink_axis_mask = op.attrs["shrink_axis_mask"]
-            ellipsis_mask =  op.attrs["ellipsis_mask"]
+            ellipsis_mask = op.attrs["ellipsis_mask"]
 
             if (new_axis_mask != 0 and shrink_axis_mask != 0) or ellipsis_mask != 0:
                 # Not supported, will be put on CPU
@@ -243,7 +244,7 @@
                     n += 1
                     new_axis_mask &= new_axis_mask - 1
                     axis = int(math.log2(prev_mask - new_axis_mask))
-                    reshape_input_shape = reshape_input_shape[:axis] + reshape_input_shape[(axis + 1):]
+                    reshape_input_shape = reshape_input_shape[:axis] + reshape_input_shape[(axis + 1) :]
                     new_axis_mask >>= 1
 
                 assert len(tens.shape) == (len(op.inputs[0].shape) + n)
@@ -288,7 +289,7 @@
             kernel_size = op.attrs["ksizes"][1:3]
             input_shape = op.inputs[0].shape
         else:
-            assert 0, "Unknown operation that uses padding"
+            raise UnsupportedFeatureError("Unknown operation that uses padding: {}".format(op.type))
 
         padding, skirt = calc_padding_and_skirt(op.attrs["padding"], kernel_size, op.attrs["strides"], input_shape)
         op.attrs["explicit_padding"] = padding
@@ -312,7 +313,9 @@
     )
 )
 depthwise_op = set(("DepthwiseConv2dNative", "DepthwiseConv2dBiasAct",))
-pool_op = set(("AvgPool", "MaxPool", "QuantizedAvgPool", "QuantizedMaxPool", "AvgPoolAct", "MaxPoolAct", "ResizeBilinear",))
+pool_op = set(
+    ("AvgPool", "MaxPool", "QuantizedAvgPool", "QuantizedMaxPool", "AvgPoolAct", "MaxPoolAct", "ResizeBilinear",)
+)
 elementwise_op = set(("AddAct", "MulAct", "SubAct", "Maximum", "Minimum", "LeakyRelu", "Abs"))
 binary_elementwise_op = set(("AddAct", "MulAct", "SubAct", "Maximum", "Minimum"))
 activation_ops = set(("Relu", "Relu6", "ReluN1To1", "Sigmoid", "Tanh"))
@@ -373,13 +376,11 @@
                 weight_tensor.quant_values.shape
             )
         else:
-            print(
-                "Error: Unsupported DepthwiseConv2d with depth_multiplier = {0}, "
-                "ifm channels = {1}, ofm channels = {2}".format(
+            raise UnsupportedFeatureError(
+                "Unsupported DepthwiseConv2d with depth_multiplier = {}, ifm channels = {}, ofm channels = {}".format(
                     op.attrs["depth_multiplier"], ifm_tensor.shape[3], ofm_tensor.shape[3]
                 )
             )
-            assert False
     return op