Coverage for temperature/tests/test_cie_d.py: 100%

1"""Define the unit tests for the :mod:`colour.temperature.cie_d` module."""

2

3 from __future__ import annotations

4

5 from itertools import product

6

7 import numpy as np

8

9 from colour.constants import TOLERANCE_ABSOLUTE_TESTS

10 from colour.temperature import CCT_to_xy_CIE_D, xy_to_CCT_CIE_D

11 from colour.utilities import ignore_numpy_errors, is_scipy_installed

12

13 __author__ = "Colour Developers"

14 __copyright__ = "Copyright 2013 Colour Developers"

15 __license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause"

16 __maintainer__ = "Colour Developers"

17 __email__ = "colour-developers@colour-science.org"

18 __status__ = "Production"

19

20 __all__ = [

21 "TestXy_to_CCT_CIE_D",

22 "TestCCT_to_xy_CIE_D",

23]

24

25

26 class TestXy_to_CCT_CIE_D:

27 """

28 Define :func:`colour.temperature.cie_d.xy_to_CCT_CIE_D` definition unit

29 tests methods.

30 """

31

32 def test_xy_to_CCT_CIE_D(self) -> None:

33 """Test :func:`colour.temperature.cie_d.xy_to_CCT_CIE_D` definition."""

34

35 np.testing.assert_allclose(

36 xy_to_CCT_CIE_D(

37 np.array([0.382343625000000, 0.383766261015578]),

38 {"method": "Nelder-Mead"},

39 ),

40 4000,

41 atol=TOLERANCE_ABSOLUTE_TESTS,

42 )

43

44 np.testing.assert_allclose(

45 xy_to_CCT_CIE_D(

46 np.array([0.305357431486880, 0.321646345474552]),

47 {"method": "Nelder-Mead"},

48 ),

49 7000,

50 atol=TOLERANCE_ABSOLUTE_TESTS,

51 )

52

53 np.testing.assert_allclose(

54 xy_to_CCT_CIE_D(

55 np.array([0.24985367, 0.254799464210944]),

56 {"method": "Nelder-Mead"},

57 ),

58 25000,

59 atol=TOLERANCE_ABSOLUTE_TESTS,

60 )

61

62 def test_n_dimensional_xy_to_CCT_CIE_D(self) -> None:

63 """

64 Test :func:`colour.temperature.cie_d.xy_to_CCT_CIE_D` definition

65 n-dimensional arrays support.

66 """

67

68 if not is_scipy_installed(): # pragma: no cover

69 return

70

71 xy = np.array([0.382343625000000, 0.383766261015578])

72 CCT = xy_to_CCT_CIE_D(xy)

73

74 xy = np.tile(xy, (6, 1))

75 CCT = np.tile(CCT, 6)

76 np.testing.assert_allclose(

77 xy_to_CCT_CIE_D(xy), CCT, atol=TOLERANCE_ABSOLUTE_TESTS

78 )

79

80 xy = np.reshape(xy, (2, 3, 2))

81 CCT = np.reshape(CCT, (2, 3))

82 np.testing.assert_allclose(

83 xy_to_CCT_CIE_D(xy), CCT, atol=TOLERANCE_ABSOLUTE_TESTS

84 )

85

86 @ignore_numpy_errors

87 def test_nan_xy_to_CCT_CIE_D(self) -> None:

88 """

89 Test :func:`colour.temperature.cie_d.xy_to_CCT_CIE_D` definition nan

90 support.

91 """

92

93 if not is_scipy_installed(): # pragma: no cover

94 return

95

96 cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]

97 cases = np.array(list(set(product(cases, repeat=2))))

98 xy_to_CCT_CIE_D(cases)

99

100

101 class TestCCT_to_xy_CIE_D:

102 """

103 Define :func:`colour.temperature.cie_d.CCT_to_xy_CIE_D` definition

104 unit tests methods.

105 """

106

107 def test_CCT_to_xy_CIE_D(self) -> None:

108 """Test :func:`colour.temperature.cie_d.CCT_to_xy_CIE_D` definition."""

109

110 np.testing.assert_allclose(

111 CCT_to_xy_CIE_D(4000),

112 np.array([0.382343625000000, 0.383766261015578]),

113 atol=TOLERANCE_ABSOLUTE_TESTS,

114 )

115

116 np.testing.assert_allclose(

117 CCT_to_xy_CIE_D(7000),

118 np.array([0.305357431486880, 0.321646345474552]),

119 atol=TOLERANCE_ABSOLUTE_TESTS,

120 )

121

122 np.testing.assert_allclose(

123 CCT_to_xy_CIE_D(25000),

124 np.array([0.24985367, 0.254799464210944]),

125 atol=TOLERANCE_ABSOLUTE_TESTS,

126 )

127

128 def test_n_dimensional_CCT_to_xy_CIE_D(self) -> None:

129 """

130 Test :func:`colour.temperature.cie_d.CCT_to_xy_CIE_D` definition

131 n-dimensional arrays support.

132 """

133

134 CCT = 4000

135 xy = CCT_to_xy_CIE_D(CCT)

136

137 CCT = np.tile(CCT, 6)

138 xy = np.tile(xy, (6, 1))

139 np.testing.assert_allclose(

140 CCT_to_xy_CIE_D(CCT), xy, atol=TOLERANCE_ABSOLUTE_TESTS

141 )

142

143 CCT = np.reshape(CCT, (2, 3))

144 xy = np.reshape(xy, (2, 3, 2))

145 np.testing.assert_allclose(

146 CCT_to_xy_CIE_D(CCT), xy, atol=TOLERANCE_ABSOLUTE_TESTS

147 )

148

149 @ignore_numpy_errors

150 def test_nan_CCT_to_xy_CIE_D(self) -> None:

151 """

152 Test :func:`colour.temperature.cie_d.CCT_to_xy_CIE_D` definition

153 nan support.

154 """

155

156 cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]

157 cases = np.array(list(set(product(cases, repeat=2))))

158 CCT_to_xy_CIE_D(cases)