docstr: Pytorch implementation for face areas & normals.
docstr_tok: ["Pytorch","implementation","for","face","areas","&","normals","."]
code: def face_areas_normals_python(verts, faces):
      """
      Pytorch implementation for face areas & normals.
      """
      # TODO(gkioxari) Change cast to floats once we add support for doubles.
      verts = verts.float()
      vertices_faces = verts[faces]  # (F, 3, 3)
      # vector pointing from v0 to v1
      v01 = vertices_faces[:, 1] - vertices_faces[:, 0]
      # vector pointing from v0 to v2
      v02 = vertices_faces[:, 2] - vertices_faces[:, 0]
      normals = torch.cross(v01, v02, dim=1)  # (F, 3)
      face_areas = normals.norm(dim=-1) / 2
      face_normals = torch.nn.functional.normalize(
          normals, p=2, dim=1, eps=1e-6
      )
      return face_areas, face_normals
  
file_path: pytorch3d/tests/test_face_areas_normals.py
imports: import unittest
  import torch
  from pytorch3d.ops import mesh_face_areas_normals
  from pytorch3d.structures.meshes import Meshes
  from .common_testing import get_random_cuda_device, TestCaseMixin
label_desc: Use image node_id 3 for calling the TestFaceAreasNormals obj's underlying member method code with example usage: obj.face_areas_normals_python(verts, faces) and returns: face_areas,  face_normals