Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

 

import unittest 

 

import numpy as np 

import numpy.testing as npt 

 

import astshim as ast 

from astshim.test import MappingTestCase, makeForwardPolyMap 

 

 

class TestMakeRadialMapping(MappingTestCase): 

def setUp(self): 

self.in_data_full = np.array([ 

[0.0, 0.1, 1.1, 50.1], 

[1.45, -47.3, 0.546, 37.3], 

[0.34, 54.3, 16.2, -55.5], 

], dtype=float) 

 

def test_MakeRadialMappingForward(self): 

"""Test a radial_map mapping that only has a forward transform 

""" 

coeff_f = np.array([ 

[5.0, 1, 1], 

[-0.12, 1, 2], 

]) 

mapping1d = ast.PolyMap(coeff_f, 1) 

self.assertTrue(mapping1d.hasForward) 

self.assertFalse(mapping1d.hasInverse) 

 

# If center = [0.0] then the radial_map mapping is identical to 

# mapping1d. 

radial_map = ast.makeRadialMapping([0], mapping1d) 

self.assertTrue(radial_map.hasForward) 

self.assertFalse(radial_map.hasInverse) 

in_data1 = self.in_data_full[0] 

npt.assert_allclose(radial_map.applyForward(in_data1), mapping1d.applyForward(in_data1)) 

 

for center in ( 

[0.0], 

[1.1], 

[0.0, 0.0], 

[-5.5, 4.7], 

[0.0, 0.0, 0.0], 

[1.1, 2.2, -3.3], 

): 

naxes = len(center) 

center_reshaped = np.expand_dims(center, 1) 

in_data = self.in_data_full[0:naxes] 

 

radial_map = ast.makeRadialMapping(center, mapping1d) 

self.assertTrue(radial_map.hasForward) 

self.assertFalse(radial_map.hasInverse) 

 

# compute desired output 

in_from_center = in_data - center_reshaped 

in_norm = np.linalg.norm(in_from_center, axis=0) 

with np.errstate(invalid='ignore'): 

unit_vector = np.where(in_norm != 0, in_from_center / in_norm, in_from_center) 

out_norm = mapping1d.applyForward(in_norm) 

out_from_center = unit_vector * out_norm 

desired_out_data = out_from_center + center_reshaped 

 

out_data = radial_map.applyForward(in_data) 

npt.assert_allclose(out_data, desired_out_data) 

 

def test_MakeRadialMappingInvertible(self): 

"""Test makeRadialMapping on a mapping that has an accurate inverse""" 

zoom = 5.5 

mapping1d = ast.ZoomMap(1, zoom) 

self.assertTrue(mapping1d.hasForward) 

self.assertTrue(mapping1d.hasInverse) 

 

for center in ( 

[0.0], 

[1.1], 

[0.0, 0.0], 

[-5.5, 4.7], 

[0.0, 0.0, 0.0], 

[1.1, 2.2, -3.3], 

): 

naxes = len(center) 

center_reshaped = np.expand_dims(center, 1) 

in_data = self.in_data_full[0:naxes] 

 

radial_map = ast.makeRadialMapping(center, mapping1d) 

self.assertTrue(radial_map.hasForward) 

self.assertTrue(radial_map.hasInverse) 

self.checkRoundTrip(radial_map, in_data) 

 

# compute desired output 

in_from_center = in_data - center_reshaped 

in_norm = np.linalg.norm(in_from_center, axis=0) 

with np.errstate(invalid='ignore'): 

unit_vector = np.where(in_norm != 0, in_from_center / in_norm, in_from_center) 

out_norm = in_norm * zoom 

out_from_center = unit_vector * out_norm 

desired_out_data = out_from_center + center_reshaped 

 

out_data = radial_map.applyForward(in_data) 

npt.assert_allclose(out_data, desired_out_data) 

 

def test_MakeRadialMappingErrorHandling(self): 

"""Test error handling in makeRadialMapping""" 

for bad_nin in (1, 2, 3): 

for bad_nout in (1, 2, 3): 

if bad_nin == bad_nout == 1: 

continue # the only valid case 

bad_mapping1d = makeForwardPolyMap(bad_nin, bad_nout) 

with self.assertRaises(ValueError): 

ast.makeRadialMapping([0.0], bad_mapping1d) 

 

mapping1d = ast.ZoomMap(1, 5.5) 

with self.assertRaises(RuntimeError): 

ast.makeRadialMapping([], mapping1d) 

 

 

117 ↛ 118line 117 didn't jump to line 118, because the condition on line 117 was never trueif __name__ == "__main__": 

unittest.main()