import pytest import torch from torch.autograd import gradcheck import kornia import kornia.geometry.epipolar as epi from kornia.testing import assert_close class TestSkewSymmetric: def test_smoke(self, device, dtype): vec = torch.rand(1, 3, device=device, dtype=dtype) cross_product_matrix = epi.cross_product_matrix(vec) assert cross_product_matrix.shape == (1, 3, 3) @pytest.mark.parametrize("batch_size", [1, 2, 4, 7]) def test_shape(self, batch_size, device, dtype): B = batch_size vec = torch.rand(B, 3, device=device, dtype=dtype) cross_product_matrix = epi.cross_product_matrix(vec) assert cross_product_matrix.shape == (B, 3, 3) def test_mean_std(self, device, dtype): vec = torch.tensor([[1.0, 2.0, 3.0]], device=device, dtype=dtype) cross_product_matrix = epi.cross_product_matrix(vec) assert_close(cross_product_matrix[..., 0, 1], -cross_product_matrix[..., 1, 0]) assert_close(cross_product_matrix[..., 0, 2], -cross_product_matrix[..., 2, 0]) assert_close(cross_product_matrix[..., 1, 2], -cross_product_matrix[..., 2, 1]) def test_gradcheck(self, device): vec = torch.ones(2, 3, device=device, requires_grad=True, dtype=torch.float64) assert gradcheck(epi.cross_product_matrix, (vec,), raise_exception=True) class TestEyeLike: def test_smoke(self, device, dtype): image = torch.rand(1, 3, 4, 4, device=device, dtype=dtype) identity = kornia.eye_like(3, image) assert identity.shape == (1, 3, 3) assert identity.device == image.device assert identity.dtype == image.dtype @pytest.mark.parametrize("batch_size, eye_size", [(1, 2), (2, 3), (3, 3), (2, 4)]) def test_shape(self, batch_size, eye_size, device, dtype): B, N = batch_size, eye_size image = torch.rand(B, 3, 4, 4, device=device, dtype=dtype) identity = kornia.eye_like(N, image) assert identity.shape == (B, N, N) assert identity.device == image.device assert identity.dtype == image.dtype class TestVecLike: def test_smoke(self, device, dtype): image = torch.rand(1, 3, 4, 4, device=device, dtype=dtype) vec = kornia.vec_like(3, image) assert vec.shape == (1, 3, 1) assert vec.device == image.device assert vec.dtype == image.dtype @pytest.mark.parametrize("batch_size, eye_size", [(1, 2), (2, 3), (3, 3), (2, 4)]) def test_shape(self, batch_size, eye_size, device, dtype): B, N = batch_size, eye_size image = torch.rand(B, 3, 4, 4, device=device, dtype=dtype) vec = kornia.vec_like(N, image) assert vec.shape == (B, N, 1) assert vec.device == image.device assert vec.dtype == image.dtype