Coverage for tests/test_frame.py: 16%

180 statements  

« prev     ^ index     » next       coverage.py v6.4.1, created at 2022-07-09 05:46 -0700

1import math 

2import unittest 

3 

4import numpy as np 

5from numpy.testing import assert_allclose 

6 

7import astshim as ast 

8from astshim.test import MappingTestCase 

9 

10 

11class TestFrame(MappingTestCase): 

12 

13 def test_FrameBasics(self): 

14 frame = ast.Frame(2) 

15 self.assertEqual(frame.className, "Frame") 

16 self.assertEqual(frame.nIn, 2) 

17 self.assertEqual(frame.nAxes, 2) 

18 self.assertEqual(frame.maxAxes, 2) 

19 self.assertEqual(frame.minAxes, 2) 

20 self.assertEqual(frame.alignSystem, "Cartesian") 

21 self.assertEqual(frame.dut1, 0.0) 

22 self.assertEqual(frame.epoch, 2000.0) 

23 self.assertEqual(frame.obsAlt, 0.0) 

24 self.assertEqual(frame.obsLat, "N0:00:00.00") 

25 self.assertEqual(frame.obsLon, "E0:00:00.00") 

26 self.assertTrue(frame.permute) 

27 self.assertFalse(frame.preserveAxes) 

28 self.assertEqual(frame.system, "Cartesian") 

29 self.assertEqual(frame.title, "2-d coordinate system") 

30 self.assertEqual(frame.getDigits(), 7) 

31 

32 for axis in (1, 2): 

33 self.assertGreater(abs(frame.getBottom(axis)), 1e99) 

34 self.assertGreater(abs(frame.getTop(axis)), 1e99) 

35 self.assertGreater(frame.getTop(axis), frame.getBottom(axis)) 

36 self.assertTrue(frame.getDirection(axis)) 

37 self.assertEqual(frame.getDigits(axis), 7) 

38 self.assertEqual(frame.getInternalUnit(axis), "") 

39 self.assertEqual(frame.getNormUnit(axis), "") 

40 self.assertEqual(frame.getSymbol(axis), "x{}".format(axis)) 

41 self.assertEqual(frame.getUnit(axis), "") 

42 

43 self.checkCopy(frame) 

44 self.checkPersistence(frame) 

45 

46 def test_FrameSetDigits(self): 

47 frame = ast.Frame(2) 

48 self.assertEqual(frame.getDigits(), 7) 

49 for axis in (1, 2): 

50 self.assertEqual(frame.getDigits(axis), 7) 

51 

52 frame.setDigits(1, 9) 

53 self.assertEqual(frame.getDigits(), 7) 

54 self.assertEqual(frame.getDigits(1), 9) 

55 self.assertEqual(frame.getDigits(2), 7) 

56 

57 frame.setDigits(2, 4) 

58 self.assertEqual(frame.getDigits(), 7) 

59 self.assertEqual(frame.getDigits(1), 9) 

60 self.assertEqual(frame.getDigits(2), 4) 

61 

62 def test_FrameLabels(self): 

63 frame = ast.Frame(2, "label(1)=a b,label(2)=c d") 

64 

65 self.assertEqual(frame.getLabel(1), "a b") 

66 self.assertEqual(frame.getLabel(2), "c d") 

67 frame.setLabel(2, "A new label") 

68 self.assertEqual(frame.getLabel(2), "A new label") 

69 frame.clear("Label(2)") 

70 self.assertEqual(frame.getLabel(2), "Axis 2") 

71 

72 def test_FrameTitle(self): 

73 frame = ast.Frame(3, "Title=A Title") 

74 

75 self.assertEqual(frame.title, "A Title") 

76 testtitle = "Test Frame" 

77 frame.title = testtitle 

78 frame.clear("Title") 

79 self.assertEqual(frame.title, "3-d coordinate system") 

80 

81 def test_FrameAngle(self): 

82 """Test Frame.angle""" 

83 frame = ast.Frame(2) 

84 angle = frame.angle([4, 3], [0, 0], [4, 0]) 

85 self.assertEqual(angle, math.atan2(3, 4)) 

86 

87 def test_FrameAxis(self): 

88 """Test Frame.axAngle, axDistance and axOffset""" 

89 frame = ast.Frame(2) 

90 angle = frame.axAngle([0, 0], [4, 3], 1) 

91 self.assertEqual(angle, -math.atan2(3, 4)) 

92 distance = frame.axDistance(1, 0, 4) 

93 self.assertEqual(distance, 4) 

94 axoffset = frame.axOffset(1, 1, 4) 

95 self.assertEqual(axoffset, 5) 

96 

97 def test_FrameConvert(self): 

98 frame = ast.Frame(2) 

99 nframe = ast.Frame(2) 

100 fset = frame.convert(nframe) 

101 self.assertEqual(fset.className, "FrameSet") 

102 

103 # the conversion FrameSet should contain two frames 

104 # connected by a unit mapping with 2 axes 

105 self.assertEqual(fset.nFrame, 2) 

106 self.assertEqual(fset.nIn, 2) 

107 self.assertEqual(fset.nOut, 2) 

108 indata = np.array([ 

109 [1.1, 2.2], 

110 [-43.5, 1309.31], 

111 ]) 

112 outdata = fset.applyForward(indata) 

113 assert_allclose(outdata, indata) 

114 self.checkRoundTrip(fset, indata) 

115 

116 self.assertIsNone(frame.convert(ast.Frame(3))) 

117 

118 def test_FrameFindFrame(self): 

119 frame = ast.Frame(2) 

120 nframe = ast.Frame(2) 

121 fset = frame.findFrame(nframe) 

122 self.assertEqual(fset.className, "FrameSet") 

123 self.assertEqual(fset.nFrame, 2) 

124 

125 # the found FrameSet should contain two frames 

126 # connected by a unit mapping with 2 axes 

127 self.assertEqual(fset.nIn, 2) 

128 self.assertEqual(fset.nOut, 2) 

129 indata = np.array([ 

130 [1.1, 2.2], 

131 [-43.5, 1309.31], 

132 ]) 

133 outdata = fset.applyForward(indata) 

134 assert_allclose(outdata, indata) 

135 self.checkRoundTrip(fset, indata) 

136 

137 self.assertIsNone(frame.findFrame(ast.Frame(3))) 

138 

139 def test_FrameDistance(self): 

140 frame = ast.Frame(2) 

141 distance = frame.distance([0, 0], [4, 3]) 

142 self.assertEqual(distance, 5) 

143 

144 def test_FrameFormat(self): 

145 frame = ast.Frame(2) 

146 fmt = frame.format(1, 55.270) 

147 self.assertEqual(fmt, "55.27") 

148 

149 def test_FrameIntersect(self): 

150 frame = ast.Frame(2) 

151 cross = frame.intersect([-1, 1], [1, 1], [0, 0], [2, 2]) 

152 self.assertAlmostEqual(cross[0], 1.0) 

153 self.assertAlmostEqual(cross[1], 1.0) 

154 

155 def test_FrameMatchAxes(self): 

156 frame = ast.Frame(2) 

157 frame2 = ast.Frame(3) 

158 axes = frame.matchAxes(frame2) 

159 self.assertEqual(axes[0], 1) 

160 self.assertEqual(axes[1], 2) 

161 self.assertEqual(axes[2], 0) 

162 

163 def test_FrameNorm(self): 

164 frame = ast.Frame(2) 

165 # arbitrary, but large enough to wrap if applied to an SphFrame 

166 coords = [33.5, 223.4] 

167 ncoords = frame.norm(coords) 

168 self.assertEqual(ncoords[0], coords[0]) 

169 

170 def test_FrameOffset(self): 

171 """Test Frame.offset and Frame.offset2""" 

172 frame = ast.Frame(2) 

173 point = frame.offset([0, 0], [4, 3], 10) 

174 self.assertEqual(point[0], 8) 

175 self.assertEqual(point[1], 6) 

176 dp = frame.offset2([0, 0], math.atan2(4, 3), 10) 

177 self.assertAlmostEqual(dp.point[0], 8) 

178 self.assertAlmostEqual(dp.point[1], 6) 

179 

180 def test_FrameOver(self): 

181 frame1 = ast.Frame(2, "label(1)=a, label(2)=b") 

182 initialNumFrames = frame1.getNObject() # may be >1 when run using pytest 

183 frame2 = ast.Frame(1, "label(1)=c") 

184 self.assertEqual(frame1.getNObject(), initialNumFrames + 1) 

185 cf = frame1.under(frame2) 

186 self.assertEqual(cf.nAxes, 3) 

187 self.assertEqual(cf.getLabel(1), "a") 

188 self.assertEqual(cf.getLabel(2), "b") 

189 self.assertEqual(cf.getLabel(3), "c") 

190 

191 # check that the contained frames are shallow copies 

192 self.assertEqual(frame1.getNObject(), initialNumFrames + 1) 

193 self.assertEqual(frame1.getRefCount(), 2) 

194 self.assertEqual(frame2.getRefCount(), 2) 

195 

196 def test_FramePerm(self): 

197 frame = ast.Frame(2) 

198 frame.permAxes([2, 1]) 

199 fm = frame.pickAxes([2]) 

200 self.assertEqual(fm.frame.className, "Frame") 

201 self.assertEqual(fm.frame.nIn, 1) 

202 self.assertEqual(fm.mapping.className, "PermMap") 

203 self.assertEqual(fm.mapping.nIn, 2) 

204 self.assertEqual(fm.mapping.nOut, 1) 

205 

206 def test_FrameResolve(self): 

207 frame = ast.Frame(2) 

208 res = frame.resolve([0, 0], [2, 1], [0, 4]) 

209 theta = math.atan2(1, 2) 

210 d1pred = 4 * math.sin(theta) 

211 d2pred = 4 * math.cos(theta) 

212 predpoint = [ 

213 d1pred * math.cos(theta), 

214 d1pred * math.sin(theta), 

215 ] 

216 self.assertAlmostEqual(res.d1, d1pred) 

217 self.assertAlmostEqual(res.d2, d2pred) 

218 assert_allclose(res.point, predpoint) 

219 

220 def test_FrameUnformat(self): 

221 frame = ast.Frame(2) 

222 nrv = frame.unformat(1, "56.4 #") 

223 self.assertEqual(nrv.nread, 5) 

224 self.assertEqual(nrv.value, 56.4) 

225 

226 def test_FrameActiveUnit(self): 

227 """Test the ActiveUnit property""" 

228 frame = ast.Frame(2) 

229 self.assertFalse(frame.activeUnit) 

230 frame.activeUnit = True 

231 self.assertTrue(frame.activeUnit) 

232 

233 

234if __name__ == "__main__": 234 ↛ 235line 234 didn't jump to line 235, because the condition on line 234 was never true

235 unittest.main()