code: def rotate(
      point: type_alias.TensorLike,
      axis: type_alias.TensorLike,
      angle: type_alias.TensorLike,
      name: str = "axis_angle_rotate",
  ) -> tf.Tensor:
      r"""Rotates a 3d point using an axis-angle by applying the Rodrigues' formula.
  
      Rotates a vector $$\mathbf{v} \in {\mathbb{R}^3}$$ into a vector
      $$\mathbf{v}' \in {\mathbb{R}^3}$$ using the Rodrigues' rotation formula:
  
      $$\mathbf{v}'=\mathbf{v}\cos(\theta)+(\mathbf{a}\times\mathbf{v})\sin(\theta)
      +\mathbf{a}(\mathbf{a}\cdot\mathbf{v})(1-\cos(\theta)).$$
  
      Note:
        In the following, A1 to An are optional batch dimensions.
  
      Args:
        point: A tensor of shape `[A1, ..., An, 3]`, where the last dimension
          represents a 3d point to rotate.
        axis: A tensor of shape `[A1, ..., An, 3]`, where the last dimension
          represents a normalized axis.
        angle: A tensor of shape `[A1, ..., An, 1]`, where the last dimension
          represents an angle.
        name: A name for this op that defaults to "axis_angle_rotate".
  
      Returns:
        A tensor of shape `[A1, ..., An, 3]`, where the last dimension represents
        a 3d point.
  
      Raises:
        ValueError: If `point`, `axis`, or `angle` are of different shape or if
        their respective shape is not supported.
      """
      with tf.name_scope(name):
          point = tf.convert_to_tensor(value=point)
          axis = tf.convert_to_tensor(value=axis)
          angle = tf.convert_to_tensor(value=angle)
  
          shape.check_static(
              tensor=point, tensor_name="point", has_dim_equals=(-1, 3)
          )
          shape.check_static(
              tensor=axis, tensor_name="axis", has_dim_equals=(-1, 3)
          )
          shape.check_static(
              tensor=angle, tensor_name="angle", has_dim_equals=(-1, 1)
          )
          shape.compare_batch_dimensions(
              tensors=(point, axis, angle),
              tensor_names=("point", "axis", "angle"),
              last_axes=-2,
              broadcast_compatible=True,
          )
          axis = asserts.assert_normalized(axis)
  
          cos_angle = tf.cos(angle)
          axis_dot_point = vector.dot(axis, point)
          return (
              point * cos_angle
              + vector.cross(axis, point) * tf.sin(angle)
              + axis * axis_dot_point * (1.0 - cos_angle)
          )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from typing import Tuple
  import tensorflow
  from tensorflow_graphics.geometry.transformation import quaternion
  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 7 for calling a global function with example usage: rotate(point, axis, angle, name) and returns: unknown