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
« 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."""
3from __future__ import annotations
5import typing
7import numpy as np
9from colour.colorimetry import spectral_uniformity
10from colour.constants import TOLERANCE_ABSOLUTE_TESTS
12if typing.TYPE_CHECKING:
13 from colour.hints import NDArrayFloat
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"
22__all__ = [
23 "DATA_UNIFORMITY_FIRST_ORDER_DERIVATIVES",
24 "TestSpectralUniformity",
25]
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)
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)
228class TestSpectralUniformity:
229 """
230 Define :func:`colour.colorimetry.uniformity.spectral_uniformity`
231 definition unit tests methods.
232 """
234 def test_spectral_uniformity(self) -> None:
235 """
236 Test :func:`colour.colorimetry.uniformity.spectral_uniformity`
237 definition.
238 """
240 from colour.quality.datasets import SDS_TCS # noqa: PLC0415
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 )
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 )