Coverage for tests/test_frame.py: 15%
180 statements
« prev ^ index » next coverage.py v7.4.3, created at 2024-02-27 12:05 +0000
« prev ^ index » next coverage.py v7.4.3, created at 2024-02-27 12:05 +0000
1import math
2import unittest
4import numpy as np
5from numpy.testing import assert_allclose
7import astshim as ast
8from astshim.test import MappingTestCase
11class TestFrame(MappingTestCase):
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)
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), "")
43 self.checkCopy(frame)
44 self.checkPersistence(frame)
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)
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)
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)
62 def test_FrameLabels(self):
63 frame = ast.Frame(2, "label(1)=a b,label(2)=c d")
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")
72 def test_FrameTitle(self):
73 frame = ast.Frame(3, "Title=A Title")
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")
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))
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)
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")
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)
116 self.assertIsNone(frame.convert(ast.Frame(3)))
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)
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)
137 self.assertIsNone(frame.findFrame(ast.Frame(3)))
139 def test_FrameDistance(self):
140 frame = ast.Frame(2)
141 distance = frame.distance([0, 0], [4, 3])
142 self.assertEqual(distance, 5)
144 def test_FrameFormat(self):
145 frame = ast.Frame(2)
146 fmt = frame.format(1, 55.270)
147 self.assertEqual(fmt, "55.27")
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)
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)
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])
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)
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")
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)
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)
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)
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)
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)
234if __name__ == "__main__": 234 ↛ 235line 234 didn't jump to line 235, because the condition on line 234 was never true
235 unittest.main()