code: def relative_angle(
      quaternion1: type_alias.TensorLike,
      quaternion2: type_alias.TensorLike,
      name: str = "quaternion_relative_angle",
  ) -> tf.Tensor:
      r"""Computes the unsigned relative rotation angle between 2 unit quaternions.
  
      Given two normalized quanternions $$\mathbf{q}_1$$ and $$\mathbf{q}_2$$, the
      relative angle is computed as
      $$\theta = 2\arccos(\mathbf{q}_1^T\mathbf{q}_2)$$.
  
      Note:
        In the following, A1 to An are optional batch dimensions.
  
      Args:
        quaternion1: A tensor of shape `[A1, ..., An, 4]`, where the last dimension
          represents a normalized quaternion.
        quaternion2: A tensor of shape `[A1, ..., An, 4]`, where the last dimension
          represents a normalized quaternion.
        name: A name for this op that defaults to "quaternion_relative_angle".
  
      Returns:
        A tensor of shape `[A1, ..., An, 1]` where the last dimension represents
        rotation angles in the range [0.0, pi].
  
      Raises:
        ValueError: If the shape of `quaternion1` or `quaternion2` is not supported.
      """
      with tf.name_scope(name):
          quaternion1 = tf.convert_to_tensor(value=quaternion1)
          quaternion2 = tf.convert_to_tensor(value=quaternion2)
  
          shape.check_static(
              tensor=quaternion1,
              tensor_name="quaternion1",
              has_dim_equals=(-1, 4),
          )
          shape.check_static(
              tensor=quaternion2,
              tensor_name="quaternion2",
              has_dim_equals=(-1, 4),
          )
          quaternion1 = asserts.assert_normalized(quaternion1)
          quaternion2 = asserts.assert_normalized(quaternion2)
  
          dot_product = vector.dot(
              quaternion1, quaternion2, keepdims=False
          )
          # Ensure dot product is in range [-1. 1].
          eps_dot_prod = 4.0 * asserts.select_eps_for_addition(
              dot_product.dtype
          )
          dot_product = safe_ops.safe_shrink(
              dot_product, -1.0, 1.0, False, eps=eps_dot_prod
          )
          return 2.0 * tf.acos(tf.abs(dot_product))
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from typing import List
  from six.moves import range
  import tensorflow
  from tensorflow_graphics.geometry.transformation import rotation_matrix_3d
  from tensorflow_graphics.math import vector
  from tensorflow_graphics.util import asserts
  from tensorflow_graphics.util import export_api
  from tensorflow_graphics.util import safe_ops
  from tensorflow_graphics.util import shape
  from tensorflow_graphics.util import type_alias
label_desc: Use image node_id 15 for calling a global function with example usage: relative_angle(quaternion1, quaternion2, name) and returns: unknown