docstr: Test the Jacobian of the face normals function.
docstr_tok: ["Test","the","Jacobian","of","the","face","normals","function","."]
code: def test_face_normals_jacobian_random(self):
      """Test the Jacobian of the face normals function."""
      tensor_vertex_size = np.random.randint(1, 3)
      tensor_out_shape = np.random.randint(
          1, 5, size=tensor_vertex_size
      )
      tensor_out_shape = tensor_out_shape.tolist()
      tensor_vertex_shape = list(tensor_out_shape)
      tensor_vertex_shape[-1] *= 3
      tensor_index_shape = tensor_out_shape[-1]
      vertex_init = np.random.random(size=tensor_vertex_shape + [3])
      index_init = np.arange(tensor_vertex_shape[-1])
      np.random.shuffle(index_init)
      index_init = np.reshape(
          index_init,
          newshape=[1] * (tensor_vertex_size - 1)
          + [tensor_index_shape, 3],
      )
      index_init = np.tile(
          index_init, tensor_vertex_shape[:-1] + [1, 1]
      )
      index_tensor = tf.convert_to_tensor(value=index_init)
  
      def face_normals(vertex_tensor):
          face_tensor = normals.gather_faces(
              vertex_tensor, index_tensor
          )
          return normals.face_normals(face_tensor)
  
      self.assert_jacobian_is_correct_fn(
          face_normals, [vertex_init], atol=1e-4, delta=1e-9
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from absl.testing import parameterized
  import numpy
  from six.moves import range
  import tensorflow
  from tensorflow_graphics.geometry.representation.mesh import normals
  from tensorflow_graphics.util import test_case
label_desc: Use image node_id 8 for calling the MeshTest obj's underlying member method code with example usage: obj.test_face_normals_jacobian_random() and returns: normals