Coverage for difference/tests/test_cam02_ucs.py: 100%
38 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"""Define the unit tests for the :mod:`colour.difference.cam02_ucs` module."""
3from __future__ import annotations
5from itertools import product
7import numpy as np
9from colour.constants import TOLERANCE_ABSOLUTE_TESTS
10from colour.difference import delta_E_CAM02LCD, delta_E_CAM02SCD, delta_E_CAM02UCS
11from colour.difference.cam02_ucs import delta_E_Luo2006
12from colour.models.cam02_ucs import COEFFICIENTS_UCS_LUO2006
13from colour.utilities import ignore_numpy_errors
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 "TestDelta_E_Luo2006",
24]
27class TestDelta_E_Luo2006:
28 """
29 Define :func:`colour.difference.cam02_ucs.delta_E_Luo2006` definition unit
30 tests methods.
31 """
33 def test_delta_E_Luo2006(self) -> None:
34 """Test :func:`colour.difference.cam02_ucs.delta_E_Luo2006` definition."""
36 np.testing.assert_allclose(
37 delta_E_Luo2006(
38 np.array([54.90433134, -0.08450395, -0.06854831]),
39 np.array([54.80352754, -3.96940084, -13.57591013]),
40 COEFFICIENTS_UCS_LUO2006["CAM02-LCD"],
41 ),
42 14.055546437777583,
43 atol=TOLERANCE_ABSOLUTE_TESTS,
44 )
46 np.testing.assert_allclose(
47 delta_E_Luo2006(
48 np.array([54.90433134, -0.08450395, -0.06854831]),
49 np.array([54.80352754, -3.96940084, -13.57591013]),
50 COEFFICIENTS_UCS_LUO2006["CAM02-LCD"],
51 ),
52 delta_E_CAM02LCD(
53 np.array([54.90433134, -0.08450395, -0.06854831]),
54 np.array([54.80352754, -3.96940084, -13.57591013]),
55 ),
56 atol=TOLERANCE_ABSOLUTE_TESTS,
57 )
59 np.testing.assert_allclose(
60 delta_E_Luo2006(
61 np.array([54.90433134, -0.08450395, -0.06854831]),
62 np.array([54.80352754, -3.96940084, -13.57591013]),
63 COEFFICIENTS_UCS_LUO2006["CAM02-SCD"],
64 ),
65 delta_E_CAM02SCD(
66 np.array([54.90433134, -0.08450395, -0.06854831]),
67 np.array([54.80352754, -3.96940084, -13.57591013]),
68 ),
69 atol=TOLERANCE_ABSOLUTE_TESTS,
70 )
72 np.testing.assert_allclose(
73 delta_E_Luo2006(
74 np.array([54.90433134, -0.08450395, -0.06854831]),
75 np.array([54.80352754, -3.96940084, -13.57591013]),
76 COEFFICIENTS_UCS_LUO2006["CAM02-UCS"],
77 ),
78 delta_E_CAM02UCS(
79 np.array([54.90433134, -0.08450395, -0.06854831]),
80 np.array([54.80352754, -3.96940084, -13.57591013]),
81 ),
82 atol=TOLERANCE_ABSOLUTE_TESTS,
83 )
85 def test_n_dimensional_delta_E_Luo2006(self) -> None:
86 """
87 Test :func:`colour.difference.cam02_ucs.delta_E_Luo2006` definition
88 n-dimensional arrays support.
89 """
91 Jpapbp_1 = np.array([54.90433134, -0.08450395, -0.06854831])
92 Jpapbp_2 = np.array([54.80352754, -3.96940084, -13.57591013])
93 delta_E_p = delta_E_Luo2006(
94 Jpapbp_1, Jpapbp_2, COEFFICIENTS_UCS_LUO2006["CAM02-LCD"]
95 )
97 Jpapbp_1 = np.tile(Jpapbp_1, (6, 1))
98 Jpapbp_2 = np.tile(Jpapbp_2, (6, 1))
99 delta_E_p = np.tile(delta_E_p, 6)
100 np.testing.assert_allclose(
101 delta_E_Luo2006(Jpapbp_1, Jpapbp_2, COEFFICIENTS_UCS_LUO2006["CAM02-LCD"]),
102 delta_E_p,
103 atol=TOLERANCE_ABSOLUTE_TESTS,
104 )
106 Jpapbp_1 = np.reshape(Jpapbp_1, (2, 3, 3))
107 Jpapbp_2 = np.reshape(Jpapbp_2, (2, 3, 3))
108 delta_E_p = np.reshape(delta_E_p, (2, 3))
109 np.testing.assert_allclose(
110 delta_E_Luo2006(Jpapbp_1, Jpapbp_2, COEFFICIENTS_UCS_LUO2006["CAM02-LCD"]),
111 delta_E_p,
112 atol=TOLERANCE_ABSOLUTE_TESTS,
113 )
115 @ignore_numpy_errors
116 def test_nan_delta_E_Luo2006(self) -> None:
117 """
118 Test :func:`colour.difference.cam02_ucs.delta_E_Luo2006`
119 definition nan support.
120 """
122 cases = [-1.0, 0.0, 1.0, -np.inf, np.inf, np.nan]
123 cases = np.array(list(set(product(cases, repeat=3))))
124 delta_E_Luo2006(cases, cases, COEFFICIENTS_UCS_LUO2006["CAM02-LCD"])