vela: Change Shape4D mutability usage

 - Removed requirement for cloning shapes when unique values required
   by forcing top-level immutability. This alleviates issues with Shapes
   being unintentionally shared and then mutated as if value-types.
 - Shape4D fields can no longer be assigned without replication.

Signed-off-by: Tim Hall <tim.hall@arm.com>
Change-Id: Ic0dbfa349eb0215eabefb4f4e2cf99f12d83699c
diff --git a/ethosu/vela/softmax.py b/ethosu/vela/softmax.py
index c3b0611..4418f01 100644
--- a/ethosu/vela/softmax.py
+++ b/ethosu/vela/softmax.py
@@ -216,10 +216,9 @@
         # Reshape ifm/ofm (if needed)
         ifm_shape = self.op.ifm_shapes[0]
         if ifm_shape.batch > 1:
-            ifm_shape.height = ifm_shape.batch * ifm_shape.height
-            ifm_shape.batch = 1
+            self.op.ifm_shapes[0] = ifm_shape.with_height(ifm_shape.batch * ifm_shape.height).with_batch(1)
             self.op.ifm.avoid_NHCWB16 = True
-            self.op.ofm_shapes[0] = ifm_shape.clone()
+            self.op.ofm_shapes[0] = self.op.ifm_shapes[0]
             self.op.ofm.avoid_NHCWB16 = True
 
         if ifm.dtype in (DataType.uint8, DataType.int8) and ofm.dtype == ifm.dtype: