code: def test_frames(self, device, dtype):
      batch_size, num_frames, num_points = 5, 3, 4
      pts1 = torch.rand(batch_size, num_frames, num_points, 3)
      pts2 = torch.rand(batch_size, num_frames, num_points, 3)
      Fm = torch.stack(
          [
              utils.create_random_fundamental_matrix(1).type_as(pts1)
              for _ in range(num_frames)
          ],
          dim=1,
      )
      dist_frame_by_frame = torch.stack(
          [
              epi.symmetrical_epipolar_distance(
                  pts1[:, t, ...], pts2[:, t, ...], Fm[:, t, ...]
              )
              for t in range(num_frames)
          ],
          dim=1,
      )
      dist_all_frames = epi.symmetrical_epipolar_distance(
          pts1, pts2, Fm
      )
      assert_close(
          dist_frame_by_frame, dist_all_frames, atol=1e-6, rtol=1e-6
      )
  
imports: import torch
  from torch.autograd import gradcheck
  import kornia.geometry.epipolar
  import kornia.testing
  from kornia.testing import assert_close
label_desc: Use image node_id 3 for calling the TestSymmetricalEpipolarDistance obj's underlying member method code with example usage: obj.test_frames(device, dtype) without return types