docstr: Tests the computation of mesh face normals in each axis.
docstr_tok: ["Tests","the","computation","of","mesh","face","normals","in","each","axis","."]
code: def test_face_normals_random(self):
      """Tests the computation of mesh face normals in each axis."""
      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]
  
      for i in range(3):
          vertices = np.random.random(size=tensor_vertex_shape + [3])
          indices = np.arange(tensor_vertex_shape[-1])
          np.random.shuffle(indices)
          indices = np.reshape(
              indices,
              newshape=[1] * (tensor_vertex_size - 1)
              + [tensor_index_shape, 3],
          )
          indices = np.tile(indices, tensor_vertex_shape[:-1] + [1, 1])
          vertices[..., i] = 0.0
          expected = np.zeros(
              shape=tensor_out_shape + [3], dtype=vertices.dtype
          )
          expected[..., i] = 1.0
          faces = normals.gather_faces(vertices, indices)
  
          self.assertAllClose(
              tf.abs(normals.face_normals(faces)), expected, rtol=1e-3
          )
  
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 10 for calling the MeshTest obj's underlying member method code with example usage: obj.test_face_normals_random() without return types