Coverage for models/rgb/transfer_functions/tests/test_itur_bt_1361.py: 100%
69 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.itur_bt_1361` module.
4"""
6import numpy as np
8from colour.constants import TOLERANCE_ABSOLUTE_TESTS
9from colour.models.rgb.transfer_functions import oetf_BT1361, oetf_inverse_BT1361
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 "TestOetf_BT1361",
21 "TestOetf_inverse_BT1361",
22]
25class TestOetf_BT1361:
26 """
27 Define :func:`colour.models.rgb.transfer_functions.itur_bt_1361.oetf_BT1361`
28 definition unit tests methods.
29 """
31 def test_oetf_BT1361(self) -> None:
32 """
33 Test :func:`colour.models.rgb.transfer_functions.itur_bt_1361.\
34oetf_BT1361` definition.
35 """
37 np.testing.assert_allclose(
38 oetf_BT1361(-0.18),
39 -0.212243985492969,
40 atol=TOLERANCE_ABSOLUTE_TESTS,
41 )
43 np.testing.assert_allclose(oetf_BT1361(0.0), 0.0, atol=TOLERANCE_ABSOLUTE_TESTS)
45 np.testing.assert_allclose(
46 oetf_BT1361(0.015),
47 0.067500000000000,
48 atol=TOLERANCE_ABSOLUTE_TESTS,
49 )
51 np.testing.assert_allclose(
52 oetf_BT1361(0.18), 0.409007728864150, atol=TOLERANCE_ABSOLUTE_TESTS
53 )
55 np.testing.assert_allclose(oetf_BT1361(1.0), 1.0, atol=TOLERANCE_ABSOLUTE_TESTS)
57 def test_n_dimensional_oetf_BT1361(self) -> None:
58 """
59 Test :func:`colour.models.rgb.transfer_functions.itur_bt_1361.\
60oetf_BT1361` definition n-dimensional arrays support.
61 """
63 L = 0.18
64 V = oetf_BT1361(L)
66 L = np.tile(L, 6)
67 V = np.tile(V, 6)
68 np.testing.assert_allclose(oetf_BT1361(L), V, atol=TOLERANCE_ABSOLUTE_TESTS)
70 L = np.reshape(L, (2, 3))
71 V = np.reshape(V, (2, 3))
72 np.testing.assert_allclose(oetf_BT1361(L), V, atol=TOLERANCE_ABSOLUTE_TESTS)
74 L = np.reshape(L, (2, 3, 1))
75 V = np.reshape(V, (2, 3, 1))
76 np.testing.assert_allclose(oetf_BT1361(L), V, atol=TOLERANCE_ABSOLUTE_TESTS)
78 def test_domain_range_scale_oetf_BT1361(self) -> None:
79 """
80 Test :func:`colour.models.rgb.transfer_functions.itur_bt_1361.\
81oetf_BT1361` definition domain and range scale support.
82 """
84 L = 0.18
85 V = oetf_BT1361(L)
87 d_r = (("reference", 1), ("1", 1), ("100", 100))
88 for scale, factor in d_r:
89 with domain_range_scale(scale):
90 np.testing.assert_allclose(
91 oetf_BT1361(L * factor),
92 V * factor,
93 atol=TOLERANCE_ABSOLUTE_TESTS,
94 )
96 @ignore_numpy_errors
97 def test_nan_oetf_BT1361(self) -> None:
98 """
99 Test :func:`colour.models.rgb.transfer_functions.itur_bt_1361.\
100oetf_BT1361` definition nan support.
101 """
103 oetf_BT1361(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))
106class TestOetf_inverse_BT1361:
107 """
108 Define :func:`colour.models.rgb.transfer_functions.itur_bt_1361.\
109oetf_inverse_BT1361` definition unit tests methods.
110 """
112 def test_oetf_inverse_BT1361(self) -> None:
113 """
114 Test :func:`colour.models.rgb.transfer_functions.itur_bt_1361.\
115oetf_inverse_BT1361` definition.
116 """
118 np.testing.assert_allclose(
119 oetf_inverse_BT1361(-0.212243985492969),
120 -0.18,
121 atol=TOLERANCE_ABSOLUTE_TESTS,
122 )
124 np.testing.assert_allclose(
125 oetf_inverse_BT1361(0.0), 0.0, atol=TOLERANCE_ABSOLUTE_TESTS
126 )
128 np.testing.assert_allclose(
129 oetf_inverse_BT1361(0.067500000000000),
130 0.015,
131 atol=TOLERANCE_ABSOLUTE_TESTS,
132 )
134 np.testing.assert_allclose(
135 oetf_inverse_BT1361(0.409007728864150),
136 0.18,
137 atol=TOLERANCE_ABSOLUTE_TESTS,
138 )
140 np.testing.assert_allclose(
141 oetf_inverse_BT1361(1.0), 1.0, atol=TOLERANCE_ABSOLUTE_TESTS
142 )
144 def test_n_dimensional_oetf_inverse_BT1361(self) -> None:
145 """
146 Test :func:`colour.models.rgb.transfer_functions.itur_bt_1361.\
147oetf_inverse_BT1361` definition n-dimensional arrays support.
148 """
150 V = 0.409007728864150
151 L = oetf_inverse_BT1361(V)
153 V = np.tile(V, 6)
154 L = np.tile(L, 6)
155 np.testing.assert_allclose(
156 oetf_inverse_BT1361(V), L, atol=TOLERANCE_ABSOLUTE_TESTS
157 )
159 V = np.reshape(V, (2, 3))
160 L = np.reshape(L, (2, 3))
161 np.testing.assert_allclose(
162 oetf_inverse_BT1361(V), L, atol=TOLERANCE_ABSOLUTE_TESTS
163 )
165 V = np.reshape(V, (2, 3, 1))
166 L = np.reshape(L, (2, 3, 1))
167 np.testing.assert_allclose(
168 oetf_inverse_BT1361(V), L, atol=TOLERANCE_ABSOLUTE_TESTS
169 )
171 def test_domain_range_scale_oetf_inverse_BT1361(self) -> None:
172 """
173 Test :func:`colour.models.rgb.transfer_functions.itur_bt_1361.\
174oetf_inverse_BT1361` definition domain and range scale support.
175 """
177 V = 0.409007728864150
178 L = oetf_inverse_BT1361(V)
180 d_r = (("reference", 1), ("1", 1), ("100", 100))
181 for scale, factor in d_r:
182 with domain_range_scale(scale):
183 np.testing.assert_allclose(
184 oetf_inverse_BT1361(V * factor),
185 L * factor,
186 atol=TOLERANCE_ABSOLUTE_TESTS,
187 )
189 @ignore_numpy_errors
190 def test_nan_oetf_inverse_BT1361(self) -> None:
191 """
192 Test :func:`colour.models.rgb.transfer_functions.itur_bt_1361.\
193oetf_inverse_BT1361` definition nan support.
194 """
196 oetf_inverse_BT1361(np.array([-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]))