code: def add_grad(left, right):
    
    # We assume that initial gradients are always identity WRT add_grad.
    # We also assume that only init_grad could have created None values.
    assert left is not None and right is not None
    left_type = type(left)
    right_type = type(right)
    if left_type is ZeroGradient:
      return right
    if right_type is ZeroGradient:
      return left
    return grad_adders[(left_type, right_type)](left, right)
docs: Recursively add the gradient of two objects.
  
    Args:
      left: The left value to add. Can be either an array, a number, list or
          dictionary.
      right: The right value. Must be of the same type (recursively) as the left.
  
    Returns:
      The sum of the two gradients, which will of the same type.