class_docstr: Currently we only use it to infer caffe shape, we use tensorflow engine
  to infer tensorflow op shapes, since tensorflow has too many ops.
class_docstr_tok: ["Currently","we","only","use","it","to","infer","caffe","shape",",","we","use","tensorflow","engine","to","infer","tensorflow","op","shapes",",","since","tensorflow","has","too","many","ops","."]
code: def infer_shape_prior_box(self, op):
      output_shape = [1, 2, 1]
      input_shape = list(self._output_shape_cache[op.input[0]])
      input_w = input_shape[3]
      input_h = input_shape[2]
      min_size = ConverterUtil.get_arg(
          op, MaceKeyword.mace_min_size_str
      ).floats
      max_size = ConverterUtil.get_arg(
          op, MaceKeyword.mace_max_size_str
      ).floats
      aspect_ratio = ConverterUtil.get_arg(
          op, MaceKeyword.mace_aspect_ratio_str
      ).floats
      num_prior = len(aspect_ratio) * len(min_size) + len(max_size)
  
      output_shape[2] = int(num_prior * input_h * input_w * 4)
      self.add_output_shape(op, [output_shape])
  
imports: import math
  import numpy
  import six
  from transform.transformer import Transformer
  from transform.base_converter import DataFormat
  from transform.base_converter import MaceOp
  from transform.base_converter import MaceKeyword
  from transform.base_converter import ConverterUtil
  from utils.util import mace_check
label_desc: Use image node_id 14 for calling the ShapeInference obj's underlying member method code with example usage: obj.infer_shape_prior_box(op) without return types