Coverage for tests/test_Matrix3d.py: 16%

82 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-07-12 10:50 -0700

1# 

2# LSST Data Management System 

3# See COPYRIGHT file at the top of the source tree. 

4# 

5# This product includes software developed by the 

6# LSST Project (http://www.lsst.org/). 

7# 

8# This program is free software: you can redistribute it and/or modify 

9# it under the terms of the GNU General Public License as published by 

10# the Free Software Foundation, either version 3 of the License, or 

11# (at your option) any later version. 

12# 

13# This program is distributed in the hope that it will be useful, 

14# but WITHOUT ANY WARRANTY; without even the implied warranty of 

15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

16# GNU General Public License for more details. 

17# 

18# You should have received a copy of the LSST License Statement and 

19# the GNU General Public License along with this program. If not, 

20# see <https://www.lsstcorp.org/LegalNotices/>. 

21# 

22 

23import pickle 

24import unittest 

25 

26from lsst.sphgeom import Matrix3d, Vector3d 

27 

28 

29class Matrix3dTestCase(unittest.TestCase): 

30 """Test 3D Matrix.""" 

31 

32 def testConstruction(self): 

33 self.assertEqual(Matrix3d().getSquaredNorm(), 0) 

34 self.assertEqual(Matrix3d(1, 0, 0, 0, 1, 0, 0, 0, 1), Matrix3d(1)) 

35 

36 def testComparison(self): 

37 m = Matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9) 

38 self.assertEqual(m, m) 

39 self.assertNotEqual(m, Matrix3d(2)) 

40 

41 def testIter(self): 

42 m = Matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9) 

43 r = 0 

44 for row in m: 

45 self.assertEqual(row, Vector3d(*range(r * 3 + 1, r * 3 + 4))) 

46 r += 1 

47 

48 def testAccess(self): 

49 m = Matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9) 

50 self.assertEqual(len(m), 3) 

51 self.assertEqual(m[0], Vector3d(1, 2, 3)) 

52 self.assertEqual(m[1], Vector3d(4, 5, 6)) 

53 self.assertEqual(m[2], Vector3d(7, 8, 9)) 

54 self.assertEqual(m[0], m.getRow(0)) 

55 self.assertEqual(m[1], m.getRow(1)) 

56 self.assertEqual(m[2], m.getRow(2)) 

57 n = m.transpose() 

58 self.assertEqual(m.getColumn(0), n[0]) 

59 self.assertEqual(m.getColumn(1), n[1]) 

60 self.assertEqual(m.getColumn(2), n[2]) 

61 for r in range(3): 

62 for c in range(3): 

63 self.assertEqual(m[r, c], r * 3 + c + 1) 

64 for i in (-4, 3): 

65 with self.assertRaises(IndexError): 

66 m.getRow(i) 

67 with self.assertRaises(IndexError): 

68 m.getColumn(i) 

69 for i in [-4, 3, (-4, 1), (3, 1), (1, -4), (1, 3)]: 

70 with self.assertRaises(IndexError): 

71 m[i] 

72 

73 def testInner(self): 

74 m = Matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9) 

75 i = Matrix3d(1) 

76 self.assertEqual(m.inner(i), i.inner(m)) 

77 self.assertEqual(m.inner(i), 15.0) 

78 

79 def testNorm(self): 

80 m = Matrix3d(1, 2, 3, 4, 5, 6, 7, 0, 2) 

81 self.assertEqual(m.getSquaredNorm(), 144.0) 

82 self.assertEqual(m.getNorm(), 12.0) 

83 

84 def testArithmetic(self): 

85 v = Vector3d(1, 2, 3) 

86 m = Matrix3d(1, -1, 0, 1, 1, 0, 0, 0, 1) 

87 n = Matrix3d(1, 1, 0, -1, 1, 0, 0, 0, 1) 

88 self.assertEqual(n * (m * v), Vector3d(2, 4, 3)) 

89 self.assertEqual(m + m, m * Matrix3d(2)) 

90 self.assertEqual(m, m * Matrix3d(2) - m) 

91 

92 def testCwiseProduct(self): 

93 m = Matrix3d(1, 2, 3, 4, 1, 6, 7, 8, 1) 

94 self.assertEqual(m.cwiseProduct(Matrix3d(2)), Matrix3d(2)) 

95 

96 def testTranspose(self): 

97 m = Matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9) 

98 n = Matrix3d(1, 4, 7, 2, 5, 8, 3, 6, 9) 

99 self.assertEqual(m.transpose(), n) 

100 self.assertEqual(m.transpose().transpose(), m) 

101 

102 def testInverse(self): 

103 m = Matrix3d(4, 4, 4, -1, 1, 0, 1, -1, -1) 

104 n = Matrix3d(0.125, 0, 0.5, 0.125, 1, 0.5, 0, -1, -1) 

105 i = m.inverse() 

106 self.assertEqual(i, n) 

107 self.assertEqual(i.inverse(), m) 

108 self.assertEqual(i * m, Matrix3d(1)) 

109 self.assertEqual(m * i, Matrix3d(1)) 

110 

111 def testString(self): 

112 m = Matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9) 

113 self.assertEqual(str(m), "[[1.0, 2.0, 3.0],\n [4.0, 5.0, 6.0],\n [7.0, 8.0, 9.0]]") 

114 self.assertEqual(repr(m), "Matrix3d(1.0, 2.0, 3.0,\n 4.0, 5.0, 6.0,\n 7.0, 8.0, 9.0)") 

115 self.assertEqual(m, eval(repr(m), {"Matrix3d": Matrix3d})) 

116 

117 def testPickle(self): 

118 m = Matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9) 

119 n = pickle.loads(pickle.dumps(m)) 

120 self.assertEqual(m, n) 

121 

122 

123if __name__ == "__main__": 

124 unittest.main()