code: def test_circular(self):
      n_train_cameras = 10
      n_test_cameras = 100
      R, T = look_at_view_transform(
          azim=torch.rand(n_train_cameras) * 360
      )
      amplitude = 0.01
      R_jiggled = torch.bmm(
          R,
          axis_angle_to_matrix(
              torch.rand(n_train_cameras, 3) * amplitude
          ),
      )
      cameras_train = PerspectiveCameras(R=R_jiggled, T=T)
      cameras_test = generate_eval_video_cameras(
          cameras_train,
          trajectory_type="circular_lsq_fit",
          trajectory_scale=1.0,
      )
  
      positions_test = cameras_test.get_camera_center()
      center = positions_test.mean(0)
      self.assertClose(center, torch.zeros(3), atol=0.1)
      self.assertClose(
          (positions_test - center).norm(dim=[1]),
          torch.ones(n_test_cameras),
          atol=0.1,
      )
  
file_path: pytorch3d/tests/implicitron/test_eval_cameras.py
imports: import unittest
  import torch
  from pytorch3d.implicitron.tools.eval_video_trajectory import generate_eval_video_cameras
  from pytorch3d.renderer.cameras import look_at_view_transform, PerspectiveCameras
  from pytorch3d.transforms import axis_angle_to_matrix
  from tests.common_testing import TestCaseMixin
label_desc: Use image node_id 2 for calling the TestEvalCameras obj's underlying member method code with example usage: obj.test_circular() without return types