code: def register_shape_calculator(operator_name, calculator_function, overwrite=False):
      '''
      :param operator_name: A unique operator ID. It is usually a string but you can use a type as well
      :param calculator_function: A callable object
      :param overwrite:  By default, we raise an exception if the caller of this function is trying to assign an existing
      key (i.e., operator_name) a new value (i.e., calculator_function). Set this flag to True to enable overwriting.
      '''
      if not overwrite and operator_name in _shape_calculator_pool:
          raise ValueError('We do not overwrite registrated shape calculator by default')
      _shape_calculator_pool[operator_name] = calculator_functiof register_shape_calculator(operator_name, calculator_function, overwrite=False):
      '''
      :param operator_name: A unique operator ID. It is usually a string but you can use a type as well
      :param calculator_function: A callable object
      :param overwrite:  By default, we raise an exception if the caller of this function is trying to assign an existing
      key (i.e., operator_name) a new value (i.e., calculator_function). Set this flag to True to enable overwriting.
      '''
      if not overwrite and operator_name in _shape_calculator_pool:
          raise ValueError('We do not overwrite registrated shape calculator by default')
      _shape_calculator_pool[operator_name] = calculator_function
docs: :param operator_name: A unique operator ID. It is usually a string but you can use a type as well
      :param calculator_function: A callable object
      :param overwrite:  By default, we raise an exception if the caller of this function is trying to assign an existing
      key (i.e., operator_name) a new value (i.e., calculator_function). Set this flag to True to enable overwriting.