Coverage for tests/test_skyFrame.py: 94%
127 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-23 02:14 -0700
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-23 02:14 -0700
1import math
2import unittest
4from numpy.testing import assert_allclose
6import astshim as ast
7from astshim.test import MappingTestCase
10class TestSkyFrame(MappingTestCase):
12 def test_FrameBasics(self):
13 frame = ast.SkyFrame()
14 self.assertEqual(frame.className, "SkyFrame")
15 self.assertEqual(frame.nIn, 2)
16 self.assertEqual(frame.nAxes, 2)
17 self.assertEqual(frame.maxAxes, 2)
18 self.assertEqual(frame.minAxes, 2)
20 # default values for Frame properties (methods below test
21 # setters and getters of SkyFrame properties)
22 self.assertEqual(frame.alignSystem, "ICRS")
23 self.assertEqual(frame.dut1, 0.0)
24 self.assertEqual(frame.epoch, 2000.0)
25 self.assertEqual(frame.obsAlt, 0.0)
26 self.assertEqual(frame.obsLat, "N0:00:00.00")
27 self.assertEqual(frame.obsLon, "E0:00:00.00")
28 self.assertTrue(frame.permute)
29 self.assertFalse(frame.preserveAxes)
30 self.assertEqual(frame.system, "ICRS")
31 self.assertEqual(frame.title, "ICRS coordinates")
33 self.assertGreater(abs(frame.getBottom(1)), 1e99)
34 self.assertGreater(abs(frame.getTop(1)), 1e99)
35 self.assertGreater(frame.getTop(1), frame.getBottom(1))
36 self.assertFalse(frame.getDirection(1))
37 self.assertEqual(frame.getInternalUnit(1), "rad")
38 # A sexagesimal format is not a units expression, so NormUnit equals
39 # Unit. See the comment in test_frame.py about AST versions; before
40 # 9.5.0 this reported the Axis InternalUnit, which is radians.
41 if ast.astVersion() >= 9005000: 41 ↛ 42line 41 didn't jump to line 42 because the condition on line 41 was never true
42 self.assertEqual(frame.getNormUnit(1), frame.getUnit(1))
43 self.assertEqual(frame.getNormUnit(1), "hh:mm:ss.s")
44 else:
45 self.assertEqual(frame.getNormUnit(1), "rad")
46 self.assertEqual(frame.getSymbol(1), "RA")
47 self.assertEqual(frame.getUnit(1), "hh:mm:ss.s")
49 self.assertAlmostEqual(frame.getBottom(2), -math.pi / 2)
50 self.assertAlmostEqual(frame.getTop(2), math.pi / 2)
51 self.assertTrue(frame.getDirection(2))
52 self.assertEqual(frame.getInternalUnit(2), "rad")
53 if ast.astVersion() >= 9005000: 53 ↛ 54line 53 didn't jump to line 54 because the condition on line 53 was never true
54 self.assertEqual(frame.getNormUnit(2), frame.getUnit(2))
55 self.assertEqual(frame.getNormUnit(2), "ddd:mm:ss")
56 else:
57 self.assertEqual(frame.getNormUnit(2), "rad")
58 self.assertEqual(frame.getSymbol(2), "Dec")
59 self.assertEqual(frame.getUnit(2), "ddd:mm:ss")
61 self.checkCopy(frame)
62 self.checkPersistence(frame)
64 def test_SkyFrameLonLat(self):
66 frame = ast.SkyFrame()
68 self.assertEqual(frame.lonAxis, 1)
69 self.assertEqual(frame.latAxis, 2)
70 self.assertTrue(frame.getIsLonAxis(1))
71 self.assertTrue(frame.getIsLatAxis(2))
72 self.assertFalse(frame.getIsLonAxis(2))
73 self.assertFalse(frame.getIsLatAxis(1))
75 # permute axes
76 frame.permAxes([2, 1])
77 self.assertEqual(frame.lonAxis, 2)
78 self.assertEqual(frame.latAxis, 1)
79 self.assertTrue(frame.getIsLonAxis(2))
80 self.assertTrue(frame.getIsLatAxis(1))
81 self.assertFalse(frame.getIsLonAxis(1))
82 self.assertFalse(frame.getIsLatAxis(2))
84 # permute again to restore original state
85 frame.permAxes([2, 1])
86 self.assertEqual(frame.lonAxis, 1)
87 self.assertEqual(frame.latAxis, 2)
88 self.assertTrue(frame.getIsLonAxis(1))
89 self.assertTrue(frame.getIsLatAxis(2))
90 self.assertFalse(frame.getIsLonAxis(2))
91 self.assertFalse(frame.getIsLatAxis(1))
93 def test_SkyFrameAlignOffset(self):
94 frame = ast.SkyFrame()
96 self.assertFalse(frame.alignOffset)
97 frame.alignOffset = True
98 self.assertTrue(frame.alignOffset)
100 def test_SkyFrameAsTime(self):
101 frame = ast.SkyFrame()
103 for axis, defAsTime in ((1, True), (2, False)):
104 self.assertEqual(frame.getAsTime(axis), defAsTime)
105 frame.setAsTime(axis, not defAsTime)
106 self.assertEqual(frame.getAsTime(axis), not defAsTime)
108 def test_SkyFrameEquinox(self):
109 frame = ast.SkyFrame()
111 self.assertAlmostEqual(frame.equinox, 2000)
112 newEquinox = 2345.6
113 frame.equinox = newEquinox
114 self.assertAlmostEqual(frame.equinox, newEquinox)
116 def test_SkyFrameNegLon(self):
117 frame = ast.SkyFrame()
119 self.assertFalse(frame.negLon)
120 frame.negLon = True
121 self.assertTrue(frame.negLon)
123 def test_SkyFrameProjection(self):
124 frame = ast.SkyFrame()
126 self.assertEqual(frame.projection, "")
127 newProjection = "Arbitrary description"
128 frame.projection = newProjection
129 self.assertEqual(frame.projection, newProjection)
131 def test_SkyFrameSkyRef(self):
132 frame = ast.SkyFrame()
134 assert_allclose(frame.getSkyRef(), [0, 0])
135 newSkyRef = [-4.5, 1.23]
136 frame.setSkyRef(newSkyRef)
137 assert_allclose(frame.getSkyRef(), newSkyRef)
139 def test_SkyFrameSkyRefIs(self):
140 frame = ast.SkyFrame()
142 self.assertEqual(frame.skyRefIs, "Ignored")
143 for newSkyRefIs in ("Origin", "Pole", "Ignored"):
144 frame.skyRefIs = newSkyRefIs
145 self.assertEqual(frame.skyRefIs, newSkyRefIs)
147 def test_SkyFrameSkyRefP(self):
148 frame = ast.SkyFrame()
150 defSkyRefP = [0.0, math.pi/2]
151 assert_allclose(frame.getSkyRefP(), defSkyRefP)
152 newSkyRefP = [0.1234, 0.5643]
153 frame.setSkyRefP(newSkyRefP)
154 assert_allclose(frame.getSkyRefP(), newSkyRefP)
156 def test_SkyFrameSkyTol(self):
157 frame = ast.SkyFrame()
159 # the default is arbitrary so do not to assume a specific value
160 defSkyTol = frame.skyTol
161 newSkyTol = defSkyTol*1.2345
162 frame.skyTol = newSkyTol
163 self.assertAlmostEqual(frame.skyTol, newSkyTol)
165 def test_SkyFrameSkyOffsetMap(self):
166 frame = ast.SkyFrame()
168 mapping = frame.skyOffsetMap()
169 self.assertEqual(mapping.className, "UnitMap")
172if __name__ == "__main__": 172 ↛ 173line 172 didn't jump to line 173 because the condition on line 172 was never true
173 unittest.main()