Coverage for colour/colorimetry/tests/test_uniformity.py: 100%

19 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-11-15 19:01 +1300

1"""Define the unit tests for the :mod:`colour.colorimetry.uniformity` module.""" 

2 

3from __future__ import annotations 

4 

5import typing 

6 

7import numpy as np 

8 

9from colour.colorimetry import spectral_uniformity 

10from colour.constants import TOLERANCE_ABSOLUTE_TESTS 

11 

12if typing.TYPE_CHECKING: 

13 from colour.hints import NDArrayFloat 

14 

15__author__ = "Colour Developers" 

16__copyright__ = "Copyright 2013 Colour Developers" 

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

18__maintainer__ = "Colour Developers" 

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

20__status__ = "Production" 

21 

22__all__ = [ 

23 "DATA_UNIFORMITY_FIRST_ORDER_DERIVATIVES", 

24 "TestSpectralUniformity", 

25] 

26 

27DATA_UNIFORMITY_FIRST_ORDER_DERIVATIVES: NDArrayFloat = np.array( 

28 [ 

29 9.55142857e-06, 

30 1.14821429e-05, 

31 1.87842857e-05, 

32 2.87114286e-05, 

33 3.19714286e-05, 

34 3.23428571e-05, 

35 3.38500000e-05, 

36 3.99257143e-05, 

37 4.13335714e-05, 

38 2.40021429e-05, 

39 5.76214286e-06, 

40 1.47571429e-06, 

41 9.79285714e-07, 

42 2.00571429e-06, 

43 3.71571429e-06, 

44 5.76785714e-06, 

45 7.55571429e-06, 

46 7.46357143e-06, 

47 5.74928571e-06, 

48 3.86928571e-06, 

49 3.54071429e-06, 

50 4.47428571e-06, 

51 5.64357143e-06, 

52 7.63714286e-06, 

53 1.01714286e-05, 

54 1.22542857e-05, 

55 1.48100000e-05, 

56 1.65171429e-05, 

57 1.54307143e-05, 

58 1.45364286e-05, 

59 1.40378571e-05, 

60 1.15878571e-05, 

61 1.07435714e-05, 

62 1.09792857e-05, 

63 1.03985714e-05, 

64 8.29714286e-06, 

65 6.30571429e-06, 

66 5.09428571e-06, 

67 4.85000000e-06, 

68 5.53714286e-06, 

69 6.41285714e-06, 

70 7.25928571e-06, 

71 7.77500000e-06, 

72 7.16071429e-06, 

73 6.66357143e-06, 

74 6.73285714e-06, 

75 7.53071429e-06, 

76 1.07335714e-05, 

77 1.62342857e-05, 

78 2.25707143e-05, 

79 2.70564286e-05, 

80 2.77814286e-05, 

81 2.50257143e-05, 

82 1.79664286e-05, 

83 1.05050000e-05, 

84 5.96571429e-06, 

85 3.64214286e-06, 

86 2.16642857e-06, 

87 1.29357143e-06, 

88 8.36428571e-07, 

89 7.25000000e-07, 

90 6.39285714e-07, 

91 6.62857143e-07, 

92 8.55714286e-07, 

93 1.45071429e-06, 

94 2.25428571e-06, 

95 3.41428571e-06, 

96 4.98642857e-06, 

97 6.49071429e-06, 

98 7.89285714e-06, 

99 9.16642857e-06, 

100 9.95214286e-06, 

101 9.76642857e-06, 

102 9.31500000e-06, 

103 8.90928571e-06, 

104 8.15785714e-06, 

105 6.89357143e-06, 

106 5.57214286e-06, 

107 4.45928571e-06, 

108 3.47785714e-06, 

109 2.76500000e-06, 

110 2.31142857e-06, 

111 1.70928571e-06, 

112 1.17714286e-06, 

113 9.84285714e-07, 

114 8.82857143e-07, 

115 7.41428571e-07, 

116 7.01428571e-07, 

117 7.08571429e-07, 

118 6.66428571e-07, 

119 7.59285714e-07, 

120 8.70000000e-07, 

121 8.27142857e-07, 

122 7.17142857e-07, 

123 6.60000000e-07, 

124 ] 

125) 

126 

127DATA_UNIFORMITY_SECOND_ORDER_DERIVATIVES: NDArrayFloat = np.array( 

128 [ 

129 7.97142857e-09, 

130 3.69285714e-08, 

131 9.21500000e-08, 

132 6.66714286e-08, 

133 6.75428571e-08, 

134 1.30571429e-07, 

135 1.83300000e-07, 

136 8.26071429e-08, 

137 4.10357143e-08, 

138 1.64628571e-07, 

139 1.47007143e-07, 

140 4.51000000e-08, 

141 2.17285714e-08, 

142 1.48071429e-08, 

143 1.10071429e-08, 

144 7.44285714e-09, 

145 2.18571429e-09, 

146 6.13571429e-09, 

147 1.97571429e-08, 

148 2.90714286e-08, 

149 2.38642857e-08, 

150 1.47428571e-08, 

151 1.36000000e-08, 

152 1.38214286e-08, 

153 1.03000000e-08, 

154 1.15142857e-08, 

155 1.10000000e-08, 

156 1.16500000e-08, 

157 2.53071429e-08, 

158 2.91571429e-08, 

159 1.73857143e-08, 

160 1.17571429e-08, 

161 1.42714286e-08, 

162 1.35642857e-08, 

163 6.82142857e-09, 

164 1.81571429e-08, 

165 2.31285714e-08, 

166 1.85857143e-08, 

167 1.46142857e-08, 

168 9.45714286e-09, 

169 5.62142857e-09, 

170 4.75000000e-09, 

171 4.68571429e-09, 

172 8.71428571e-09, 

173 1.58500000e-08, 

174 2.12142857e-08, 

175 3.20785714e-08, 

176 4.23357143e-08, 

177 3.73000000e-08, 

178 2.26357143e-08, 

179 6.57857143e-09, 

180 3.39285714e-09, 

181 1.18071429e-08, 

182 3.26500000e-08, 

183 3.33500000e-08, 

184 1.87428571e-08, 

185 1.10214286e-08, 

186 7.07142857e-09, 

187 4.00000000e-09, 

188 2.15714286e-09, 

189 1.74285714e-09, 

190 1.77857143e-09, 

191 2.10714286e-09, 

192 3.57857143e-09, 

193 4.47142857e-09, 

194 5.59285714e-09, 

195 6.45000000e-09, 

196 6.65000000e-09, 

197 8.52142857e-09, 

198 7.58571429e-09, 

199 4.87857143e-09, 

200 2.58571429e-09, 

201 2.62857143e-09, 

202 1.84285714e-09, 

203 1.41428571e-09, 

204 2.24285714e-09, 

205 3.65714286e-09, 

206 3.47142857e-09, 

207 3.28571429e-09, 

208 2.60000000e-09, 

209 2.27857143e-09, 

210 1.84285714e-09, 

211 2.57142857e-09, 

212 1.32142857e-09, 

213 5.57142857e-10, 

214 6.85714286e-10, 

215 1.10000000e-09, 

216 6.42857143e-10, 

217 2.21428571e-10, 

218 4.50000000e-10, 

219 7.07142857e-10, 

220 2.50000000e-10, 

221 1.85714286e-10, 

222 2.14285714e-10, 

223 2.28571429e-10, 

224 ] 

225) 

226 

227 

228class TestSpectralUniformity: 

229 """ 

230 Define :func:`colour.colorimetry.uniformity.spectral_uniformity` 

231 definition unit tests methods. 

232 """ 

233 

234 def test_spectral_uniformity(self) -> None: 

235 """ 

236 Test :func:`colour.colorimetry.uniformity.spectral_uniformity` 

237 definition. 

238 """ 

239 

240 from colour.quality.datasets import SDS_TCS # noqa: PLC0415 

241 

242 np.testing.assert_allclose( 

243 spectral_uniformity(SDS_TCS["CIE 1995"].values()), 

244 DATA_UNIFORMITY_FIRST_ORDER_DERIVATIVES, 

245 atol=TOLERANCE_ABSOLUTE_TESTS, 

246 ) 

247 

248 np.testing.assert_allclose( 

249 spectral_uniformity( 

250 SDS_TCS["CIE 1995"].values(), use_second_order_derivatives=True 

251 ), 

252 DATA_UNIFORMITY_SECOND_ORDER_DERIVATIVES, 

253 atol=TOLERANCE_ABSOLUTE_TESTS, 

254 )