Coverage for tests/test_append.py: 12%
90 statements
« prev ^ index » next coverage.py v6.5.0, created at 2022-11-08 21:54 -0800
« prev ^ index » next coverage.py v6.5.0, created at 2022-11-08 21:54 -0800
1import unittest
2from numpy.testing import assert_allclose
4from astshim import Frame, SkyFrame, UnitMap, FrameSet, append
5from astshim.test import makeForwardPolyMap, makeTwoWayPolyMap
8class TestFrameSetAppend(unittest.TestCase):
10 def makeFrameSet(self, nIn, nOut):
11 """Create a FrameSet with the specified dimensions.
13 The FrameSet shall have the following Frames:
14 "base"(nIn, #1)
15 |
16 +--------------
17 | |
18 "mid"(4, #2) "fork"(1, #4)
19 |
20 "current"(nOut, #3)
21 """
22 frameSet = FrameSet(Frame(nIn, "Ident=base"))
23 frameSet.addFrame(FrameSet.CURRENT,
24 makeTwoWayPolyMap(nIn, 4),
25 Frame(4, "Ident=mid"))
26 frameSet.addFrame(FrameSet.CURRENT,
27 makeTwoWayPolyMap(4, nOut),
28 Frame(nOut, "Ident=current"))
29 frameSet.addFrame(FrameSet.BASE,
30 makeTwoWayPolyMap(nIn, 1),
31 Frame(1, "Ident=fork"))
33 frameSet.current = 3
34 assert frameSet.nFrame == 4
35 assert frameSet.base == 1
36 assert frameSet.getFrame(FrameSet.BASE).ident == "base"
37 assert frameSet.getFrame(2).ident == "mid"
38 assert frameSet.current == 3
39 assert frameSet.getFrame(FrameSet.CURRENT).ident == "current"
40 assert frameSet.getFrame(4).ident == "fork"
41 return frameSet
43 def test_AppendEffect(self):
44 """Check that a concatenated FrameSet transforms correctly.
45 """
46 set1 = self.makeFrameSet(2, 3)
47 set2 = self.makeFrameSet(3, 1)
48 set12 = append(set1, set2)
50 # Can't match 1D output to 2D input
51 with self.assertRaises(RuntimeError):
52 append(set2, set1)
54 x = [1.2, 3.4]
55 y_merged = set12.applyForward(x)
56 y_separate = set2.applyForward(set1.applyForward(x))
57 assert_allclose(y_merged, y_separate)
59 y = [-0.3]
60 x_merged = set12.applyInverse(y)
61 x_separate = set1.applyInverse(set2.applyInverse(y))
62 assert_allclose(x_merged, x_separate)
64 # No side effects
65 self.assertEqual(set1.base, 1)
66 self.assertEqual(set1.current, 3)
67 self.assertEqual(set2.base, 1)
68 self.assertEqual(set2.current, 3)
70 def test_AppendFrames(self):
71 """Check that a concatenated FrameSet preserves all Frames.
72 """
73 set1 = self.makeFrameSet(1, 3)
74 # AST docs say FrameSets always have contiguously numbered frames,
75 # but let's make sure
76 set1.removeFrame(2)
77 set2 = self.makeFrameSet(3, 2)
78 set12 = append(set1, set2)
80 self.assertEqual(set1.nFrame + set2.nFrame, set12.nFrame)
81 for i in range(1, 1+set1.nFrame):
82 oldFrame = set1.getFrame(i)
83 newFrame = set12.getFrame(i)
84 self.assertEqual(oldFrame.ident, newFrame.ident)
85 self.assertEqual(oldFrame.nAxes, newFrame.nAxes)
86 if i == set1.base:
87 self.assertTrue(i == set12.base)
88 else:
89 self.assertFalse(i == set12.base)
90 for i in range(1, 1+set2.nFrame):
91 offset = set1.nFrame
92 oldFrame = set2.getFrame(i)
93 newFrame = set12.getFrame(offset + i)
94 self.assertEqual(oldFrame.ident, newFrame.ident)
95 self.assertEqual(oldFrame.nAxes, newFrame.nAxes)
96 if i == set2.current:
97 self.assertTrue(offset + i == set12.current)
98 else:
99 self.assertFalse(offset + i == set12.current)
101 def test_AppendIndependent(self):
102 """Check that a concatenated FrameSet is not affected by changes
103 to its constituents.
104 """
105 set1 = self.makeFrameSet(3, 3)
106 set2 = self.makeFrameSet(3, 3)
107 set12 = append(set1, set2)
109 nTotal = set12.nFrame
110 x = [1.2, 3.4, 5.6]
111 y = set12.applyForward(x)
113 set1.addFrame(2, makeTwoWayPolyMap(4, 2), Frame(2, "Ident=extra"))
114 set1.addFrame(1, makeTwoWayPolyMap(3, 3), Frame(3, "Ident=legume"))
115 set1.removeFrame(3)
116 set2.addFrame(4, makeForwardPolyMap(1, 4), Frame(4, "Ident=extra"))
117 set2.base = 2
119 # Use exact equality because nothing should change
120 self.assertEqual(set12.nFrame, nTotal)
121 self.assertEqual(set12.applyForward(x), y)
123 def test_AppendMismatch(self):
124 """Check that append behaves as expected when joining non-identical
125 frames.
126 """
127 set1 = self.makeFrameSet(3, 2)
128 set2 = self.makeFrameSet(2, 3)
129 set1.addFrame(FrameSet.CURRENT, makeForwardPolyMap(2, 2),
130 SkyFrame("Ident=sky"))
131 set12 = append(set1, set2)
133 x = [1.2, 3.4, 5.6]
134 y_merged = set12.applyForward(x)
135 y_separate = set2.applyForward(set1.applyForward(x))
136 assert_allclose(y_merged, y_separate)
138 iFrom = set1.current
139 iTo = set1.nFrame + set2.base
140 self.assertIsInstance(set12.getFrame(iFrom), SkyFrame)
141 self.assertNotIsInstance(set12.getFrame(iTo), SkyFrame)
142 self.assertIsInstance(set12.getMapping(iFrom, iTo), UnitMap)
145if __name__ == "__main__": 145 ↛ 146line 145 didn't jump to line 146, because the condition on line 145 was never true
146 unittest.main()