code: def test_box_planar_dir(self):
      device = torch.device("cuda:0")
      box1 = torch.tensor(
          UNIT_BOX,
          dtype=torch.float32,
          device=device,
      )
  
      n1 = torch.tensor(
          [
              [0.0, 0.0, 1.0],
              [0.0, -1.0, 0.0],
              [0.0, 1.0, 0.0],
              [1.0, 0.0, 0.0],
              [-1.0, 0.0, 0.0],
              [0.0, 0.0, -1.0],
          ],
          device=device,
          dtype=torch.float32,
      )
  
      RR = random_rotation(dtype=torch.float32, device=device)
      TT = torch.rand((1, 3), dtype=torch.float32, device=device)
      box2 = box1 @ RR.transpose(0, 1) + TT
      n2 = n1 @ RR.transpose(0, 1)
  
      self.assertClose(box_planar_dir(box1), n1)
      self.assertClose(box_planar_dir(box2), n2)
  
imports: import pickle
  import random
  import unittest
  from typing import List, Tuple, Union
  import torch
  import torch.nn.functional
  from pytorch3d.io import save_obj
  from pytorch3d.ops.iou_box3d import _box_planes, _box_triangles, box3d_overlap
  from pytorch3d.transforms.rotation_conversions import random_rotation
  from .common_testing import get_random_cuda_device, get_tests_dir, TestCaseMixin
label_desc: Use image node_id 13 for calling the TestIoU3D obj's underlying member method code with example usage: obj.test_box_planar_dir() without return types