def test_broadcast_transform_points(self): t1 = Scale(0.1, 0.1, 0.1) N = 10 P = 7 M = 20 x = torch.tensor([0.2] * N) y = torch.tensor([0.3] * N) z = torch.tensor([0.4] * N) tN = Translate(x, y, z) p1 = t1.transform_points(torch.randn(P, 3)) self.assertTrue(p1.shape == (P, 3)) p2 = t1.transform_points(torch.randn(1, P, 3)) self.assertTrue(p2.shape == (1, P, 3)) p3 = t1.transform_points(torch.randn(M, P, 3)) self.assertTrue(p3.shape == (M, P, 3)) p4 = tN.transform_points(torch.randn(P, 3)) self.assertTrue(p4.shape == (N, P, 3)) p5 = tN.transform_points(torch.randn(1, P, 3)) self.assertTrue(p5.shape == (N, P, 3))
def test_stack(self): rotations = random_rotations(3) transform3 = Transform3d().rotate(rotations).translate( torch.full((3, 3), 0.3)) transform1 = Scale(37) transform4 = transform1.stack(transform3) self.assertEqual(len(transform1), 1) self.assertEqual(len(transform3), 3) self.assertEqual(len(transform4), 4) self.assertClose( transform4.get_matrix(), torch.cat([transform1.get_matrix(), transform3.get_matrix()]), ) points = torch.rand(4, 5, 3) new_points_expect = torch.cat([ transform1.transform_points(points[:1]), transform3.transform_points(points[1:]), ]) new_points = transform4.transform_points(points) self.assertClose(new_points, new_points_expect)
def test_transform_points_fail(self): t1 = Scale(0.1, 0.1, 0.1) P = 7 with self.assertRaises(ValueError): t1.transform_points(torch.randn(P))