Coverage for models/rgb/transfer_functions/tests/test_dicom_gsdf.py: 100%
67 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-16 22:49 +1300
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-16 22:49 +1300
1"""
2Define the unit tests for the
3:mod:`colour.models.rgb.transfer_functions.dicom_gsdf` module.
4"""
6import numpy as np
8from colour.constants import TOLERANCE_ABSOLUTE_TESTS
9from colour.models.rgb.transfer_functions import eotf_DICOMGSDF, eotf_inverse_DICOMGSDF
10from colour.utilities import domain_range_scale, ignore_numpy_errors
12__author__ = "Colour Developers"
13__copyright__ = "Copyright 2013 Colour Developers"
14__license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause"
15__maintainer__ = "Colour Developers"
16__email__ = "colour-developers@colour-science.org"
17__status__ = "Production"
19__all__ = [
20 "TestEotf_inverse_DICOMGSDF",
21 "TestEotf_DICOMGSDF",
22]
25class TestEotf_inverse_DICOMGSDF:
26 """
27 Define :func:`colour.models.rgb.transfer_functions.dicom_gsdf.\
28eotf_inverse_DICOMGSDF` definition unit tests methods.
29 """
31 def test_eotf_inverse_DICOMGSDF(self) -> None:
32 """
33 Test :func:`colour.models.rgb.transfer_functions.dicom_gsdf.\
34eotf_inverse_DICOMGSDF` definition.
35 """
37 np.testing.assert_allclose(
38 eotf_inverse_DICOMGSDF(0.05),
39 0.001007281350787,
40 atol=TOLERANCE_ABSOLUTE_TESTS,
41 )
43 np.testing.assert_allclose(
44 eotf_inverse_DICOMGSDF(130.0662),
45 0.500486263438448,
46 atol=TOLERANCE_ABSOLUTE_TESTS,
47 )
49 np.testing.assert_allclose(
50 eotf_inverse_DICOMGSDF(4000),
51 1.000160314715578,
52 atol=TOLERANCE_ABSOLUTE_TESTS,
53 )
55 np.testing.assert_allclose(
56 eotf_inverse_DICOMGSDF(130.0662, out_int=True),
57 512,
58 atol=TOLERANCE_ABSOLUTE_TESTS,
59 )
61 def test_n_dimensional_eotf_inverse_DICOMGSDF(self) -> None:
62 """
63 Test :func:`colour.models.rgb.transfer_functions.dicom_gsdf.\
64eotf_inverse_DICOMGSDF` definition n-dimensional arrays support.
65 """
67 L = 130.0662
68 J = eotf_inverse_DICOMGSDF(L)
70 L = np.tile(L, 6)
71 J = np.tile(J, 6)
72 np.testing.assert_allclose(
73 eotf_inverse_DICOMGSDF(L), J, atol=TOLERANCE_ABSOLUTE_TESTS
74 )
76 L = np.reshape(L, (2, 3))
77 J = np.reshape(J, (2, 3))
78 np.testing.assert_allclose(
79 eotf_inverse_DICOMGSDF(L), J, atol=TOLERANCE_ABSOLUTE_TESTS
80 )
82 L = np.reshape(L, (2, 3, 1))
83 J = np.reshape(J, (2, 3, 1))
84 np.testing.assert_allclose(
85 eotf_inverse_DICOMGSDF(L), J, atol=TOLERANCE_ABSOLUTE_TESTS
86 )
88 def test_domain_range_scale_eotf_inverse_DICOMGSDF(self) -> None:
89 """
90 Test :func:`colour.models.rgb.transfer_functions.dicom_gsdf.\
91eotf_inverse_DICOMGSDF` definition domain and range scale support.
92 """
94 L = 130.0662
95 J = eotf_inverse_DICOMGSDF(L)
97 d_r = (("reference", 1), ("1", 1), ("100", 100))
98 for scale, factor in d_r:
99 with domain_range_scale(scale):
100 np.testing.assert_allclose(
101 eotf_inverse_DICOMGSDF(L * factor),
102 J * factor,
103 atol=TOLERANCE_ABSOLUTE_TESTS,
104 )
106 @ignore_numpy_errors
107 def test_nan_eotf_inverse_DICOMGSDF(self) -> None:
108 """
109 Test :func:`colour.models.rgb.transfer_functions.dicom_gsdf.\
110eotf_inverse_DICOMGSDF` definition nan support.
111 """
113 eotf_inverse_DICOMGSDF(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
116class TestEotf_DICOMGSDF:
117 """
118 Define :func:`colour.models.rgb.transfer_functions.dicom_gsdf.
119 eotf_DICOMGSDF` definition unit tests methods.
120 """
122 def test_eotf_DICOMGSDF(self) -> None:
123 """
124 Test :func:`colour.models.rgb.transfer_functions.dicom_gsdf.\
125eotf_DICOMGSDF` definition.
126 """
128 np.testing.assert_allclose(
129 eotf_DICOMGSDF(0.001007281350787),
130 0.050143440671692,
131 atol=TOLERANCE_ABSOLUTE_TESTS,
132 )
134 np.testing.assert_allclose(
135 eotf_DICOMGSDF(0.500486263438448),
136 130.062864706476550,
137 atol=TOLERANCE_ABSOLUTE_TESTS,
138 )
140 np.testing.assert_allclose(
141 eotf_DICOMGSDF(1.000160314715578),
142 3997.586161113322300,
143 atol=TOLERANCE_ABSOLUTE_TESTS,
144 )
146 np.testing.assert_allclose(
147 eotf_DICOMGSDF(512, in_int=True),
148 130.065284012159790,
149 atol=TOLERANCE_ABSOLUTE_TESTS,
150 )
152 def test_n_dimensional_eotf_DICOMGSDF(self) -> None:
153 """
154 Test :func:`colour.models.rgb.transfer_functions.dicom_gsdf.\
155eotf_DICOMGSDF` definition n-dimensional arrays support.
156 """
158 J = 0.500486263438448
159 L = eotf_DICOMGSDF(J)
161 J = np.tile(J, 6)
162 L = np.tile(L, 6)
163 np.testing.assert_allclose(eotf_DICOMGSDF(J), L, atol=TOLERANCE_ABSOLUTE_TESTS)
165 J = np.reshape(J, (2, 3))
166 L = np.reshape(L, (2, 3))
167 np.testing.assert_allclose(eotf_DICOMGSDF(J), L, atol=TOLERANCE_ABSOLUTE_TESTS)
169 J = np.reshape(J, (2, 3, 1))
170 L = np.reshape(L, (2, 3, 1))
171 np.testing.assert_allclose(eotf_DICOMGSDF(J), L, atol=TOLERANCE_ABSOLUTE_TESTS)
173 def test_domain_range_scale_eotf_DICOMGSDF(self) -> None:
174 """
175 Test :func:`colour.models.rgb.transfer_functions.dicom_gsdf.\
176eotf_DICOMGSDF` definition domain and range scale support.
177 """
179 J = 0.500486263438448
180 L = eotf_DICOMGSDF(J)
182 d_r = (("reference", 1), ("1", 1), ("100", 100))
183 for scale, factor in d_r:
184 with domain_range_scale(scale):
185 np.testing.assert_allclose(
186 eotf_DICOMGSDF(J * factor),
187 L * factor,
188 atol=TOLERANCE_ABSOLUTE_TESTS,
189 )
191 @ignore_numpy_errors
192 def test_nan_eotf_DICOMGSDF(self) -> None:
193 """
194 Test :func:`colour.models.rgb.transfer_functions.dicom_gsdf.\
195eotf_DICOMGSDF` definition nan support.
196 """
198 eotf_DICOMGSDF(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))