Coverage for tests/test_makeRadialMapping.py: 15%
69 statements
« prev ^ index » next coverage.py v6.4.4, created at 2022-09-15 09:29 +0000
« prev ^ index » next coverage.py v6.4.4, created at 2022-09-15 09:29 +0000
2import unittest
4import numpy as np
5import numpy.testing as npt
7import astshim as ast
8from astshim.test import MappingTestCase, makeForwardPolyMap
11class TestMakeRadialMapping(MappingTestCase):
12 def setUp(self):
13 self.in_data_full = np.array([
14 [0.0, 0.1, 1.1, 50.1],
15 [1.45, -47.3, 0.546, 37.3],
16 [0.34, 54.3, 16.2, -55.5],
17 ], dtype=float)
19 def test_MakeRadialMappingForward(self):
20 """Test a radial_map mapping that only has a forward transform
21 """
22 coeff_f = np.array([
23 [5.0, 1, 1],
24 [-0.12, 1, 2],
25 ])
26 mapping1d = ast.PolyMap(coeff_f, 1)
27 self.assertTrue(mapping1d.hasForward)
28 self.assertFalse(mapping1d.hasInverse)
30 # If center = [0.0] then the radial_map mapping is identical to
31 # mapping1d.
32 radial_map = ast.makeRadialMapping([0], mapping1d)
33 self.assertTrue(radial_map.hasForward)
34 self.assertFalse(radial_map.hasInverse)
35 in_data1 = self.in_data_full[0]
36 npt.assert_allclose(radial_map.applyForward(in_data1), mapping1d.applyForward(in_data1))
38 for center in (
39 [0.0],
40 [1.1],
41 [0.0, 0.0],
42 [-5.5, 4.7],
43 [0.0, 0.0, 0.0],
44 [1.1, 2.2, -3.3],
45 ):
46 naxes = len(center)
47 center_reshaped = np.expand_dims(center, 1)
48 in_data = self.in_data_full[0:naxes]
50 radial_map = ast.makeRadialMapping(center, mapping1d)
51 self.assertTrue(radial_map.hasForward)
52 self.assertFalse(radial_map.hasInverse)
54 # compute desired output
55 in_from_center = in_data - center_reshaped
56 in_norm = np.linalg.norm(in_from_center, axis=0)
57 with np.errstate(invalid='ignore'):
58 unit_vector = np.where(in_norm != 0, in_from_center / in_norm, in_from_center)
59 out_norm = mapping1d.applyForward(in_norm)
60 out_from_center = unit_vector * out_norm
61 desired_out_data = out_from_center + center_reshaped
63 out_data = radial_map.applyForward(in_data)
64 npt.assert_allclose(out_data, desired_out_data)
66 def test_MakeRadialMappingInvertible(self):
67 """Test makeRadialMapping on a mapping that has an accurate inverse"""
68 zoom = 5.5
69 mapping1d = ast.ZoomMap(1, zoom)
70 self.assertTrue(mapping1d.hasForward)
71 self.assertTrue(mapping1d.hasInverse)
73 for center in (
74 [0.0],
75 [1.1],
76 [0.0, 0.0],
77 [-5.5, 4.7],
78 [0.0, 0.0, 0.0],
79 [1.1, 2.2, -3.3],
80 ):
81 naxes = len(center)
82 center_reshaped = np.expand_dims(center, 1)
83 in_data = self.in_data_full[0:naxes]
85 radial_map = ast.makeRadialMapping(center, mapping1d)
86 self.assertTrue(radial_map.hasForward)
87 self.assertTrue(radial_map.hasInverse)
88 self.checkRoundTrip(radial_map, in_data)
90 # compute desired output
91 in_from_center = in_data - center_reshaped
92 in_norm = np.linalg.norm(in_from_center, axis=0)
93 with np.errstate(invalid='ignore'):
94 unit_vector = np.where(in_norm != 0, in_from_center / in_norm, in_from_center)
95 out_norm = in_norm * zoom
96 out_from_center = unit_vector * out_norm
97 desired_out_data = out_from_center + center_reshaped
99 out_data = radial_map.applyForward(in_data)
100 npt.assert_allclose(out_data, desired_out_data)
102 def test_MakeRadialMappingErrorHandling(self):
103 """Test error handling in makeRadialMapping"""
104 for bad_nin in (1, 2, 3):
105 for bad_nout in (1, 2, 3):
106 if bad_nin == bad_nout == 1:
107 continue # the only valid case
108 bad_mapping1d = makeForwardPolyMap(bad_nin, bad_nout)
109 with self.assertRaises(ValueError):
110 ast.makeRadialMapping([0.0], bad_mapping1d)
112 mapping1d = ast.ZoomMap(1, 5.5)
113 with self.assertRaises(RuntimeError):
114 ast.makeRadialMapping([], mapping1d)
117if __name__ == "__main__": 117 ↛ 118line 117 didn't jump to line 118, because the condition on line 117 was never true
118 unittest.main()