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

 

from __future__ import absolute_import, division, print_function 

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()