docstr: Check that `so3_exp_map(so3_log_map(R))==R` for
  a batch of randomly generated rotation matrices `R`.
docstr_tok: ["Check","that","`","so3_exp_map","(","so3_log_map","(","R",")",")","==R","`","for","a","batch","of","randomly","generated","rotation","matrices","`","R","`","."]
code: def test_so3_exp_to_log_to_exp(self, batch_size: int = 100):
      """
      Check that `so3_exp_map(so3_log_map(R))==R` for
      a batch of randomly generated rotation matrices `R`.
      """
      rot = TestSO3.init_rot(batch_size=batch_size)
      non_singular = (so3_rotation_angle(rot) - math.pi).abs() > 1e-2
      rot = rot[non_singular]
      rot_ = so3_exp_map(
          so3_log_map(rot, eps=1e-8, cos_bound=1e-8), eps=1e-8
      )
      self.assertClose(rot_, rot, atol=0.1)
      angles = so3_relative_angle(rot, rot_, cos_bound=1e-4)
      self.assertClose(angles, torch.zeros_like(angles), atol=0.1)
  
imports: import math
  import unittest
  from distutils.version import LooseVersion
  import numpy
  import torch
  from pytorch3d.transforms.so3 import hat, so3_exp_map, so3_log_map, so3_relative_angle, so3_rotation_angle
  from .common_testing import TestCaseMixin
label_desc: Use image node_id 11 for calling the TestSO3 obj's underlying member method code with example usage: obj.test_so3_exp_to_log_to_exp(batch_size) without return types