code: def add_shape_tensor_from_axis_arg(self, op):
      list_value_arg = ConverterUtil.get_arg(
          op, MaceKeyword.mace_axis_str
      )
      mace_check(
          list_value_arg.ints is not None,
          op.name
          + ": "
          + MaceKeyword.mace_axis_str
          + " value ints should not be None",
      )
      axes = list_value_arg.ints
      for producer in self._model.op:
          if producer.output[0] == op.input[0]:
              input_tensor_shape = producer.output_shape[0].dims
              break
  
      shape_tensor = self._model.tensors.add()
      shape_tensor.name = (
          op.name + "/" + MaceKeyword.mace_axis_str + ":0"
      )
      shape_tensor.data_type = mace_pb2.DT_INT32
      shape_tensor.dims.extend([len(input_tensor_shape) - len(axes)])
      shape_tensor.int32_data.extend(input_tensor_shape)
      for axis in sorted(axes, reverse=True):
          del shape_tensor.int32_data[axis]
      op.input.extend([shape_tensor.name])
      ConverterUtil.del_arg(op, MaceKeyword.mace_axis_str)
  
imports: import copy
  import numpy
  from enum import Enum
  from operator import mul
  from py_proto import mace_pb2
  from transform import base_converter
  from transform.base_converter import ConverterUtil
  from transform.base_converter import EltwiseType
  from transform.base_converter import MaceKeyword
  from transform.base_converter import MaceOp
  from transform.base_converter import PaddingMode
  from transform.base_converter import PadType
  from transform.base_converter import PoolingType
  from transform.base_converter import ReduceType
  from transform.base_converter import DataFormat
  from transform.base_converter import FrameworkType
  from utils.util import mace_check
label_desc: Use image node_id 14 for calling the ApuConverter obj's underlying member method code with example usage: obj.add_shape_tensor_from_axis_arg(op) without return types