code: def register_add_grad(left_type, right_type, add_grad_function):
    
    key = (left_type, right_type)
    if key in grad_adders:
      raise ValueError('Types %s already mapped to %s' % (key, grad_adders[key]))
    grad_adders[key] = add_grad_function
docs: Register a new gradient adder supporting the given types.
  
    Gradient adders are used to add (in the sense of arithmetic addition)
    intermediate adjoint and tangent variables.
    TODO: Link to the document explaining the overall terminology and mechanics.
  
    Args:
      left_type: A Python type object. The data type of the left operand
        supported by the adder.
      right_type: A Python type object. The data type of the right operand
        supported by the adder.
      add_grad_function: A binary function that takes two arguments, left and
        right, of the types left_type and right_type respectively, and returns
        their sum. For example, the gradient adder for Numpy objects is np.add.
  
    Raises:
      ValueError: If the given type pair was already registered.