docstr: Tests the triangle normal computation in each axis.
docstr_tok: ["Tests","the","triangle","normal","computation","in","each","axis","."]
code: def test_normal_random(self, clockwise):
      """Tests the triangle normal computation in each axis."""
      tensor_size = np.random.randint(3)
      tensor_shape = np.random.randint(
          1, 10, size=(tensor_size)
      ).tolist()
      zeros = np.zeros(shape=tensor_shape + [1])
  
      for i in range(3):
          v0 = np.random.random(size=tensor_shape + [3])
          v1 = np.random.random(size=tensor_shape + [3])
          v2 = np.random.random(size=tensor_shape + [3])
          v0[..., i] = 0.0
          v1[..., i] = 0.0
          v2[..., i] = 0.0
          n = np.zeros_like(v0)
          n[..., i] = 1.0
          normal = triangle.normal(v0, v1, v2, clockwise)
  
          with self.subTest(name="n"):
              self.assertAllClose(tf.abs(normal), n)
  
          with self.subTest(name="v1-v0"):
              self.assertAllClose(vector.dot(normal, (v1 - v0)), zeros)
  
          with self.subTest(name="v2-v0"):
              self.assertAllClose(vector.dot(normal, (v2 - v0)), zeros)
  
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 import triangle
  from tensorflow_graphics.math import vector
  from tensorflow_graphics.util import test_case
label_desc: Use image node_id 7 for calling the TriangleTest obj's underlying member method code with example usage: obj.test_normal_random(clockwise) without return types