Skip to content

Commit

Permalink
Refactor methods validation.
Browse files Browse the repository at this point in the history
  • Loading branch information
KelSolaar committed Feb 26, 2021
1 parent 9409596 commit d634b29
Show file tree
Hide file tree
Showing 56 changed files with 421 additions and 326 deletions.
3 changes: 3 additions & 0 deletions colour/adaptation/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
chromatic_adaptation_forward_CMCCAT2000,
chromatic_adaptation_inverse_CMCCAT2000, chromatic_adaptation_CMCCAT2000)
from .cie1994 import chromatic_adaptation_CIE1994
from colour.utilities import validate_method

__all__ = []
__all__ += datasets.__all__
Expand Down Expand Up @@ -205,6 +206,8 @@ def chromatic_adaptation(XYZ, XYZ_w, XYZ_wr, method='Von Kries', **kwargs):
array([ 0.2332526..., 0.2332455..., 0.7611593...])
"""

method = validate_method(method, CHROMATIC_ADAPTATION_METHODS)

function = CHROMATIC_ADAPTATION_METHODS[method]

domain_range_reference = get_domain_range_scale() == 'reference'
Expand Down
14 changes: 0 additions & 14 deletions colour/adaptation/tests/test_vonkries.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import numpy as np
import unittest
from itertools import permutations
from functools import partial

from colour.adaptation import (matrix_chromatic_adaptation_VonKries,
chromatic_adaptation_VonKries)
Expand Down Expand Up @@ -105,19 +104,6 @@ def test_matrix_chromatic_adaptation_VonKries(self):
]),
decimal=7)

def test_raise_exception_matrix_chromatic_adaptation_VonKries(self):
"""
Tests :func:`colour.adaptation.vonkries.\
matrix_chromatic_adaptation_VonKries` definition raised exception.
"""

self.assertRaises(
KeyError,
partial(matrix_chromatic_adaptation_VonKries,
np.array([0.95045593, 1.00000000, 1.08905775]),
np.array([0.96429568, 1.00000000, 0.82510460]),
'Undefined'))

def test_n_dimensional_matrix_chromatic_adaptation_VonKries(self):
"""
Tests :func:`colour.adaptation.vonkries.\
Expand Down
14 changes: 7 additions & 7 deletions colour/adaptation/vonkries.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@

from colour.adaptation import CHROMATIC_ADAPTATION_TRANSFORMS
from colour.algebra import matrix_dot, vector_dot
from colour.utilities import (from_range_1, row_as_diagonal, to_domain_1)
from colour.utilities import (from_range_1, row_as_diagonal, to_domain_1,
validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -100,13 +101,12 @@ def matrix_chromatic_adaptation_VonKries(XYZ_w, XYZ_wr, transform='CAT02'):
XYZ_w = to_domain_1(XYZ_w)
XYZ_wr = to_domain_1(XYZ_wr)

M = CHROMATIC_ADAPTATION_TRANSFORMS.get(transform)
transform = validate_method(
transform, CHROMATIC_ADAPTATION_TRANSFORMS,
'"{0}" chromatic adaptation transform is invalid, '
'it must be one of {1}!')

if M is None:
raise KeyError(
'"{0}" chromatic adaptation transform is not defined! Supported '
'methods: "{1}".'.format(transform,
CHROMATIC_ADAPTATION_TRANSFORMS.keys()))
M = CHROMATIC_ADAPTATION_TRANSFORMS[transform]

rgb_w = np.einsum('...i,...ij->...j', XYZ_w, np.transpose(M))
rgb_wr = np.einsum('...i,...ij->...j', XYZ_wr, np.transpose(M))
Expand Down
4 changes: 2 additions & 2 deletions colour/algebra/extrapolation.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import numpy as np

from colour.constants import DEFAULT_FLOAT_DTYPE
from colour.utilities import as_float, is_numeric, is_string
from colour.utilities import as_float, is_numeric, is_string, validate_method

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -197,7 +197,7 @@ def method(self, value):
('"{0}" attribute: "{1}" is not a "string" like object!'
).format('method', value))

value = value.lower()
value = validate_method(value, ['Linear', 'Constant'])

self._method = value

Expand Down
4 changes: 3 additions & 1 deletion colour/algebra/geometry.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
from collections import namedtuple

from colour.utilities import (CaseInsensitiveMapping, as_float_array, ones,
tsplit, tstack)
tsplit, tstack, validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -610,6 +610,8 @@ def ellipse_fitting(a, method='Halir 1998'):
array([-0., -0., 2., 1., 0.])
"""

method = validate_method(method, ELLIPSE_FITTING_METHODS)

function = ELLIPSE_FITTING_METHODS[method]

return function(a)
10 changes: 6 additions & 4 deletions colour/algebra/interpolation.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@
from functools import reduce

from colour.constants import DEFAULT_FLOAT_DTYPE, DEFAULT_INT_DTYPE
from colour.utilities import (CaseInsensitiveMapping, as_float_array, as_float,
closest_indexes, interval, is_integer,
is_numeric, runtime_warning, tsplit)
from colour.utilities import (
CaseInsensitiveMapping, as_float_array, as_float, closest_indexes,
interval, is_integer, is_numeric, runtime_warning, tsplit, validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -1877,4 +1877,6 @@ def table_interpolation(V_xyz, table, method='Trilinear'):
[ 1.1178206..., 0.1762039..., 0.2209534...]])
"""

return TABLE_INTERPOLATION_METHODS.get(method)(V_xyz, table)
method = validate_method(method, TABLE_INTERPOLATION_METHODS)

return TABLE_INTERPOLATION_METHODS[method](V_xyz, table)
9 changes: 8 additions & 1 deletion colour/characterisation/correction.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@

from colour.algebra import least_square_mapping_MoorePenrose, spow
from colour.utilities import (CaseInsensitiveMapping, as_float_array, as_int,
closest, filter_kwargs, ones, tsplit, tstack)
closest, filter_kwargs, ones, tsplit, tstack,
validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -588,6 +589,8 @@ def polynomial_expansion(a, method='Cheung 2004', **kwargs):
array([ 0.1722481..., 0.0917066..., 0.0641693..., 0.0010136..., 1...])
"""

method = validate_method(method, POLYNOMIAL_EXPANSION_METHODS)

function = POLYNOMIAL_EXPANSION_METHODS[method]

return function(a, **filter_kwargs(function, **kwargs))
Expand Down Expand Up @@ -838,6 +841,8 @@ def matrix_colour_correction(M_T, M_R, method='Cheung 2004', **kwargs):
[-0.0631495..., 0.0921247..., 0.9713415...]])
"""

method = validate_method(method, MATRIX_COLOUR_CORRECTION_METHODS)

function = MATRIX_COLOUR_CORRECTION_METHODS[method]

return function(M_T, M_R, **filter_kwargs(function, **kwargs))
Expand Down Expand Up @@ -1117,6 +1122,8 @@ def colour_correction(RGB, M_T, M_R, method='Cheung 2004', **kwargs):
array([ 0.1334872..., 0.0843921..., 0.0599014...])
"""

method = validate_method(method, COLOUR_CORRECTION_METHODS)

function = COLOUR_CORRECTION_METHODS[method]

return function(RGB, M_T, M_R, **filter_kwargs(function, **kwargs))
6 changes: 4 additions & 2 deletions colour/colorimetry/correction.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

import numpy as np

from colour.utilities import CaseInsensitiveMapping
from colour.utilities import CaseInsensitiveMapping, validate_method

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -165,4 +165,6 @@ def bandpass_correction(sd, method='Stearns 1988'):
extrapolator_kwargs={...})
"""

return BANDPASS_CORRECTION_METHODS.get(method)(sd)
method = validate_method(method, BANDPASS_CORRECTION_METHODS)

return BANDPASS_CORRECTION_METHODS[method](sd)
9 changes: 8 additions & 1 deletion colour/colorimetry/generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@

from colour.colorimetry import (
SPECTRAL_SHAPE_DEFAULT, MultiSpectralDistributions, SpectralDistribution)
from colour.utilities import CaseInsensitiveMapping, as_float_array, full, ones
from colour.utilities import (CaseInsensitiveMapping, as_float_array, full,
ones, validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -495,6 +496,8 @@ def sd_gaussian(mu_peak_wavelength,
0.3678794...
"""

method = validate_method(method, SD_GAUSSIAN_METHODS)

return SD_GAUSSIAN_METHODS[method](mu_peak_wavelength, sigma_fwhm, shape,
**kwargs)

Expand Down Expand Up @@ -625,6 +628,8 @@ def sd_single_led(peak_wavelength,
1.0000000...
"""

method = validate_method(method, SD_SINGLE_LED_METHODS)

return SD_SINGLE_LED_METHODS[method](peak_wavelength, fwhm, shape,
**kwargs)

Expand Down Expand Up @@ -806,5 +811,7 @@ def sd_multi_leds(peak_wavelengths,
0.1295132...
"""

method = validate_method(method, SD_MULTI_LEDS_METHODS)

return SD_MULTI_LEDS_METHODS[method](peak_wavelengths, fwhm,
peak_power_ratios, shape, **kwargs)
8 changes: 7 additions & 1 deletion colour/colorimetry/lefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from colour.colorimetry import (SDS_LEFS_PHOTOPIC, SDS_LEFS_SCOTOPIC,
SpectralDistribution, SpectralShape)
from colour.colorimetry.datasets.lefs import DATA_MESOPIC_X
from colour.utilities import closest
from colour.utilities import closest, validate_method

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -73,6 +73,12 @@ def mesopic_weighting_function(
0.7052200...
"""

source = validate_method(
source, ['Blue Heavy', 'Red Heavy'],
'"{0}" light source colour temperature is invalid, '
'it must be one of {1}!')
method = validate_method(method, ['MOVE', 'LRC'])

mesopic_x_luminance_values = sorted(DATA_MESOPIC_X.keys())
index = mesopic_x_luminance_values.index(
closest(mesopic_x_luminance_values, Lp))
Expand Down
6 changes: 4 additions & 2 deletions colour/colorimetry/lightness.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
from colour.utilities import (CaseInsensitiveMapping, as_float_array, as_float,
filter_kwargs, from_range_100,
get_domain_range_scale, to_domain_1,
to_domain_100, usage_warning)
to_domain_100, usage_warning, validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -398,8 +398,9 @@ def lightness_Fairchild2011(Y, epsilon=0.474, method='hdr-CIELAB'):
"""

Y = to_domain_1(Y)
method = validate_method(method, ['hdr-CIELAB', 'hdr-IPT'])

if method.lower() == 'hdr-cielab':
if method == 'hdr-cielab':
maximum_perception = 247
else:
maximum_perception = 246
Expand Down Expand Up @@ -504,6 +505,7 @@ def lightness(Y, method='CIE 1976', **kwargs):
"""

Y = as_float_array(Y)
method = validate_method(method, LIGHTNESS_METHODS)

function = LIGHTNESS_METHODS[method]

Expand Down
7 changes: 5 additions & 2 deletions colour/colorimetry/luminance.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
from colour.utilities import (CaseInsensitiveMapping, as_float_array, as_float,
filter_kwargs, from_range_1, from_range_100,
get_domain_range_scale, to_domain_10,
to_domain_100)
to_domain_100, validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -397,8 +397,9 @@ def luminance_Fairchild2011(L_hdr, epsilon=0.474, method='hdr-CIELAB'):
"""

L_hdr = to_domain_100(L_hdr)
method = validate_method(method, ['hdr-CIELAB', 'hdr-IPT'])

if method.lower() == 'hdr-cielab':
if method == 'hdr-cielab':
maximum_perception = 247
else:
maximum_perception = 246
Expand Down Expand Up @@ -507,6 +508,8 @@ def luminance(LV, method='CIE 1976', **kwargs):
12.1972253...
"""

method = validate_method(method, LUMINANCE_METHODS)

function = LUMINANCE_METHODS[method]

domain_range_reference = get_domain_range_scale() == 'reference'
Expand Down
10 changes: 7 additions & 3 deletions colour/colorimetry/tristimulus_values.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@
MultiSpectralDistributions, SpectralShape,
MSDS_CMFS_STANDARD_OBSERVER, sd_ones)
from colour.constants import DEFAULT_INT_DTYPE
from colour.utilities import (CaseInsensitiveMapping, as_float_array,
filter_kwargs, from_range_100,
get_domain_range_scale, runtime_warning, tsplit)
from colour.utilities import (
CaseInsensitiveMapping, as_float_array, filter_kwargs, from_range_100,
get_domain_range_scale, runtime_warning, tsplit, validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -903,6 +903,8 @@ def sd_to_XYZ(
array([ 10.8404805..., 9.6838697..., 6.2115722...])
"""

method = validate_method(method, SD_TO_XYZ_METHODS)

global _CACHE_SD_TO_XYZ
if _CACHE_SD_TO_XYZ is None:
_CACHE_SD_TO_XYZ = {}
Expand Down Expand Up @@ -1414,6 +1416,8 @@ def msds_to_XYZ(
[ 24.6610235..., 26.1093760..., 30.7298791...]]])
"""

method = validate_method(method, MSDS_TO_XYZ_METHODS)

function = MSDS_TO_XYZ_METHODS[method]

return function(msds, cmfs, illuminant, k,
Expand Down
6 changes: 4 additions & 2 deletions colour/colorimetry/whiteness.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@

from colour.utilities import (CaseInsensitiveMapping, get_domain_range_scale,
filter_kwargs, from_range_100, to_domain_100,
tsplit, tstack)
tsplit, tstack, validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -521,9 +521,11 @@ def whiteness(XYZ, XYZ_0, method='CIE 2004', **kwargs):
91.4071738...
"""

method = validate_method(method, WHITENESS_METHODS)

kwargs.update({'XYZ': XYZ, 'XYZ_0': XYZ_0})

function = WHITENESS_METHODS.get(method)
function = WHITENESS_METHODS[method]

if function is whiteness_Stensby1968:
from colour.models import XYZ_to_Lab, XYZ_to_xy
Expand Down
6 changes: 4 additions & 2 deletions colour/colorimetry/yellowness.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"""

from colour.utilities import (CaseInsensitiveMapping, from_range_100,
to_domain_100, tsplit)
to_domain_100, tsplit, validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -210,4 +210,6 @@ def yellowness(XYZ, method='ASTM E313'):
10.2999999...
"""

return YELLOWNESS_METHODS.get(method)(XYZ)
method = validate_method(method, YELLOWNESS_METHODS)

return YELLOWNESS_METHODS[method](XYZ)
5 changes: 4 additions & 1 deletion colour/continuous/multi_signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
from colour.constants import DEFAULT_FLOAT_DTYPE
from colour.continuous import AbstractContinuousFunction, Signal
from colour.utilities import (as_float_array, first_item, is_iterable,
is_pandas_installed, required, tsplit, tstack)
is_pandas_installed, required, tsplit, tstack,
validate_method)

__author__ = 'Colour Developers'
__copyright__ = 'Copyright (C) 2013-2021 - Colour Developers'
Expand Down Expand Up @@ -1515,6 +1516,8 @@ def fill_nan(self, method='Interpolation', default=0):
[ 9. 100. 110. 120.]]
"""

method = validate_method(method, ['Interpolation', 'Constant'])

for signal in self._signals.values():
signal.fill_nan(method, default)

Expand Down
Loading

0 comments on commit d634b29

Please sign in to comment.