code: def normalized_random_uniform(
      quaternion_shape: List[int],
      name: str = "quaternion_normalized_random_uniform",
  ) -> tf.Tensor:
      """Random normalized quaternion following a uniform distribution law on SO(3).
  
      Args:
        quaternion_shape: A list representing the shape of the output tensor.
        name: A name for this op that defaults to
          "quaternion_normalized_random_uniform".
  
      Returns:
        A tensor of shape `[quaternion_shape[0],...,quaternion_shape[-1], 4]`
        representing random normalized quaternions.
      """
      with tf.name_scope(name):
          quaternion_shape = tf.convert_to_tensor(
              value=quaternion_shape, dtype=tf.int32
          )
          quaternion_shape = tf.concat(
              (quaternion_shape, tf.constant([4])), axis=0
          )
          random_normal = tf.random.normal(quaternion_shape)
      return normalize(random_normal)
  
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 12 for calling a global function with example usage: normalized_random_uniform(quaternion_shape, name) and returns: normalize