class_docstr: Parent class for every axis update op's class
  
  An axis update op is an op that can be updated, such that it can allow a transpose layer to "pass" through it.
  That is,
  
  op(transpose(x)) == transpose(op_updated(x))
  
  where
  "op" : original op,
  "op_updated": op after being updated.
  
  Example:
  
  if x is a tensor of rank 2, and transpose has perm=[1,0],
  then
  
  reduce_mean[axis=1](transpose(x)) == transpose(reduce_mean[axis=0](x))
  
  here reduce_mean op with axis=1 can be updated to a reduce_mean op with axis=0,
  to allow the transpose to "pass" through it, i.e. get applied after it.
code: def __init__(self, op, transpose_axes):
      self.op = op
      self.transpose_axes = transpose_axes
  
imports: from __future__ import print_function
  from __future__ import division
  from __future__ import absolute_import
  from coremltools.converters.mil.mil.passes.pass_registry import register_pass
  from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil.var import Var
  import logging
  import numpy
  import copy
  from collections import defaultdict
label_desc: Use image node_id 1 to create a new transform_axis_update_ops object from inherited base classes: object with example: obj = transform_axis_update_ops(op, transpose_axes)