code: def _assert_quaternions_close(
      self,
      input: Union[torch.Tensor, np.ndarray],
      other: Union[torch.Tensor, np.ndarray],
      *,
      rtol: float = 1e-05,
      atol: float = 1e-08,
      equal_nan: bool = False,
      msg: Optional[str] = None,
  ):
      self.assertEqual(np.shape(input), np.shape(other))
      dot = (input * other).sum(-1)
      ones = torch.ones_like(dot)
      self.assertClose(
          dot.abs(),
          ones,
          rtol=rtol,
          atol=atol,
          equal_nan=equal_nan,
          msg=msg,
      )
  
imports: import itertools
  import math
  import unittest
  from distutils.version import LooseVersion
  from typing import Optional, Union
  import numpy
  import torch
  from pytorch3d.transforms.rotation_conversions import axis_angle_to_matrix, axis_angle_to_quaternion, euler_angles_to_matrix, matrix_to_axis_angle, matrix_to_euler_angles, matrix_to_quaternion, matrix_to_rotation_6d, quaternion_apply, quaternion_multiply, quaternion_to_axis_angle, quaternion_to_matrix, random_quaternions, random_rotation, random_rotations, rotation_6d_to_matrix
  from .common_testing import TestCaseMixin
label_desc: Use image node_id 21 for calling the TestRotationConversion obj's underlying member method code with example usage: obj._assert_quaternions_close(input, other) without return types