All Versions
19
Latest Version
Avg Release Cycle
254 days
Latest Release
190 days ago

Changelog History
Page 1

  • v0.4.7 Changes

    December 06, 2025

    Colour 0.4.7 - Alpha Milestone

    🔋 Features

    Dependencies

    📦 The following scientific packages minimum versions are required:

    📚 Documentation

    colour.adaptation

    colour.appearance

    colour.io

    • The colour.LUT3D.invert method has been improved and yields smoother results via Shepard interpolation and iterative adaptive smoothing. (54637c4, @KelSolaar, Claude Code)

    colour.difference

    • Implement support for Metamerism Index computation with colour.difference.Lab_to_metamerism_index and colour.difference.XYZ_to_metamerism_index definitions. (#1374, @lassefschmidt)

    colour.models

    The following RGB colourspaces were added:

    • colour.models.RGB_COLOURSPACE_LIN_REC709_SCENE
    • colour.models.RGB_COLOURSPACE_LIN_P3D65_SCENE
    • colour.models.RGB_COLOURSPACE_LIN_REC2020_SCENE
    • colour.models.RGB_COLOURSPACE_LIN_ADOBERGB_SCENE
    • colour.models.RGB_COLOURSPACE_LIN_CIEXYZD65_SCENE
    • colour.models.RGB_COLOURSPACE_SRGB_REC709_SCENE
    • colour.models.RGB_COLOURSPACE_G22_REC709_SCENE
    • colour.models.RGB_COLOURSPACE_G18_REC709_SCENE
    • colour.models.RGB_COLOURSPACE_SRGB_AP1_SCENE
    • colour.models.RGB_COLOURSPACE_G22_AP1_SCENE
    • colour.models.RGB_COLOURSPACE_SRGB_P3D65_SCENE
    • colour.models.RGB_COLOURSPACE_G22_ADOBERGB_SCENE

    The following aliases were added:

    • lin_ap1_scene

    • lin_ap0_scene

    • lin_rec709_scene

    • lin_p3d65_scene

    • lin_rec2020_scene

    • lin_adobergb_scene

    • lin_ciexyzd65_scene

    • srgb_rec709_scene

    • g22_rec709_scene

    • g18_rec709_scene

    • srgb_ap1_scene

    • g22_ap1_scene

    • srgb_p3d65_scene

    • g22_adobergb_scene

    • Implement support for Filmlight E-Gamut 2 RGB colourspace with colour.models.RGB_COLOURSPACE_FILMLIGHT_E_GAMUT_2 attribute. (#1323, @nick-shaw)

    • Implement support for Fujifilm F-Gamut C RGB colourspace with colour.models.RGB_COLOURSPACE_F_GAMUT_C attribute. (#1317, @KelSolaar)

    • Implement support for Xiaomi Mi-Log Profile with colour.models.log_encoding_MiLog and colour.models.log_decoding_MiLog definitions. (#1359, @KelSolaar, Claude Code)

    • Implement Schlömer (2019) improved OSA-UCS to CIE XYZ conversion: This reduced failure cases significantly and brought x28.5 increased performance. (#1372, @KelSolaar, Claude Code)

    colour.phenomena

    • Implement support for the Transfer Matrix Method: The main definition is colour.phenomena.matrix_transfer_tmm that computes transfer matrices for multilayer thin film structures with full vectorisation across wavelength, angle and thickness. (#1366, @KelSolaar, Claude Code)

    The colour.phenomena.thin_film_tmm and colour.phenomena.multilayer_tmm definitions compute thin film and multilayer reflectance / transmittance respectively.

    • colour.phenomena.snell_law
    • colour.phenomena.polarised_light_magnitude_elements
    • colour.phenomena.polarised_light_reflection_amplitude
    • colour.phenomena.polarised_light_reflection_coefficient
    • colour.phenomena.polarised_light_transmission_amplitude
    • colour.phenomena.polarised_light_transmission_coefficient
    • colour.phenomena.TransferMatrixResult
    • colour.phenomena.matrix_transfer_tmm
    • colour.phenomena.light_water_molar_refraction_Schiebener1990
    • colour.phenomena.light_water_refractive_index_Schiebener1990
    • colour.phenomena.thin_film_tmm
    • colour.phenomena.multilayer_tmm

    New plotting definitions were added, most notable ones being colour.plotting.plot_thin_film_iridescence, colour.plotting.plot_thin_film_reflectance_map and colour.plotting.plot_multi_layer_stack.

    • colour.plotting.plot_single_layer_thin_film
    • colour.plotting.plot_multi_layer_thin_film
    • colour.plotting.plot_thin_film_comparison
    • colour.plotting.plot_thin_film_spectrum
    • colour.plotting.plot_thin_film_iridescence
    • colour.plotting.plot_thin_film_reflectance_map
    • colour.plotting.plot_multi_layer_stack

    imageimage

    colour.quality

    • ✅ Implement support for Spectral radiance factors of test-colour sample #15 of the Japanese skin complexion, 5nm wavelength steps. (#1337, @cmuellner, @KelSolaar)
    • The colour.spectral_similarity_index definition now also supports colour.MultiSpectralDistributions as parameters. (#1373, #1370, @KelSolaar)

    colour.utilities

    📇 Introduce a metadata system for documenting expected input/output value ranges in function signatures using Annotated type hints. Functions now declare scale information (e.g., [0, 1], [0, 100], [0, 360]) directly in their type annotations. (#1371, @KelSolaar)

    Type Aliases for Common Scales

    defXYZ\_to\_Lab(XYZ:Domain1)-\>Range100:# Domain [0, 1], Range [0, 100]...defLab\_to\_LCHab(Lab:Domain100\_100\_360)-\>Range100\_100\_360:# Tuple scales...
    

    📇 Metadata Extraction

    fromcolour.utilitiesimportget\_domain\_range\_scale\_metadatametadata=get\_domain\_range\_scale\_metadata(XYZ\_to\_Lab)# {'domain': {'XYZ': 1}, 'range': 100}
    

    Automatic Scaling in Automatic Colour Conversion Graph

    Lab=convert(XYZ,"CIE XYZ","CIE Lab",to\_reference\_scale=True)# Returns Lab in [0, 100]XYZ=convert(Lab\_native,"CIE Lab","CIE XYZ",from\_reference\_scale=True)# Accepts Lab in [0, 100]
    

    🐎 Performance

    Import Time

    colour.algebra

    • Optimise colour.algebra.table_interpolation_trilinear and colour.algebra.table_interpolation_tetrahedral definitions for 1.3x performance improvement. (b8e1583, @KelSolaar, Claude Code)

    colour.temperature

    • Vectorise colour.temperature.uv_to_CCT_Robertson1968 and colour.temperature.CCT_to_uv_Robertson1968 definitions for 30x and 90x performance improvement. (#1367, @KelSolaar, Claude Code)

    🛠 Fixes

    colour.utilities

    • Ensure that colour.utilities.tsplit definition returns a contiguous copy of the input array. (9ba813d, @KelSolaar)

    🔄 Changes

    colour.algebra

    • 👍 The colour.algebra.sdiv_mode context manager and colour.algebra.sdiv definition and other related objects now support two new modes:
      • Replace With Epsilon: Zero-division is avoided by replacing zero denominators with the machine epsilon value from :attr:colour.constants.EPSILON.
      • Warning Replace With Epsilon: Zero-division is avoided by replacing zero denominators with the machine epsilon value from :attr:colour.constants.EPSILON with a warning.

    colour.colorimetry

    • ⚡️ The colour.SpectralDistribution.interpolate definition has been updated to handle fractional wavelengths better. (#1328, @KelSolaar)
      • Numerical differences are expected if any of the following definitions were used with fractional wavelengths:
      • colour.SpectralDistribution.interpolate
      • colour.SpectralDistribution.align
      • colour.MultiSpectralDistributions.interpolate
      • colour.MultiSpectralDistributions.align
      • colour.colorimetry.reshape_sd
      • colour.colorimetry.reshape_msds

    colour.models

    Object Name Author
    colour.IPT_hue_angle colour.models.IPT_hue_angle @KelSolaar
  • v0.4.6 Changes

    October 11, 2024

    Colour 0.4.6 - Alpha Milestone

    🛠 Fixes

    Dependencies

    colour.models

  • v0.4.5 Changes

    October 10, 2024

    Colour 0.4.5 - Alpha Milestone

    🔋 Features

    Dependencies

    📦 The following scientific packages minimum versions are required:

    Development Environment

    Astral's uv

    • 🏗 We switched from Poetry to uv and hatch for managing the development environment and build our wheels. (#1300)

    • 👌 Improve static typing checks using multi-threading thanks to @erictraut suggestion.

    Environment

    It is now possible to create a ~/.colour-science/colour-science.jenv JSON file from which Colour will load environment variables from: (#1239, @KelSolaar)

    {"COLOUR\_SCIENCE\_\_COLOUR\_\_SHOW\_WARNINGS\_WITH\_TRACEBACK":1}
    

    👍 The following new environment variables are now supported:

    • COLOUR_SCIENCE__FILTER_RUNTIME_WARNINGS: Filter Colour runtime warnings.
    • COLOUR_SCIENCE__FILTER_USAGE_WARNINGS: Filter Colour usage warnings.
    • COLOUR_SCIENCE__FILTER_COLOUR_WARNINGS: Filter Colour warnings, this also filters Colour usage and runtime warnings.
    • COLOUR_SCIENCE__FILTER_PYTHON_WARNINGS: Filter Python warnings.

    Input and Output

    • 👍 Definitions reading from and writing to files now support the pathlib.Path type. (ff4fe99, @KelSolaar)

    colour.adaptation

    • Implement support for vK20 chromatic adaptation transform with colour.adaptation.matrix_chromatic_adaptation_vk20 and colour.adaptation.chromatic_adaptation_vK20 definitions. (#1131, @KelSolaar)

    colour.characterisation

    • Add the ColorChecker SG chromaticity coordinates with the colour.CCS_COLOURCHECKERS["ColorCheckerSG - Before November 2014"] and colour.CCS_COLOURCHECKERS["ColorCheckerSG - After November 2014"] attribute keys.

    image
    image

    colour.colorimetry

    • Use shape if passed, to also reshape the colour.continuous.AbstractContinuousSignal sub-classes in colour.colorimetry.sd_to_XYZ_integration definition. (#1250, @KelSolaar)

    colour.models

    • Programmatically add polar conversions to the following definitions: (#1183, #1272, @KelSolaar)

    • colour.Lab_to_LCHab *

    • colour.LCHab_to_Lab *

    • colour.Luv_to_LCHuv *

    • colour.LCHuv_to_Luv *

    • colour.hdr_CIELab_to_hdr_CIELCHab

    • colour.hdr_CIELCHab_to_hdr_CIELab

    • colour.Hunter_Lab_to_Hunter_LCHab

    • colour.Hunter_LCHab_to_Hunter_Lab

    • colour.Hunter_Rdab_to_Hunter_RdCHab

    • colour.Hunter_RdCHab_to_Hunter_Rdab

    • colour.ICaCb_to_ICHab

    • colour.ICHab_to_ICaCb

    • colour.ICtCp_to_ICHtp

    • colour.ICHtp_to_ICtCp

    • colour.IgPgTg_to_IgCHpt

    • colour.IgCHpt_to_IgPgTg

    • colour.IPT_to_ICH

    • colour.ICH_to_IPT

    • colour.Izazbz_to_IzCHab

    • colour.IzCHab_to_Izazbz

    • colour.Jzazbz_to_JzCHab

    • colour.JzCHab_to_Jzazbz

    • colour.hdr_IPT_to_hdr_ICH

    • colour.hdr_ICH_to_hdr_IPT

    • colour.Oklab_to_Oklch

    • colour.Oklch_to_Oklab

    • colour.ProLab_to_ProLCHab

    • colour.ProLCHab_to_ProLab

    • colour.IPT_Ragoo2021_to_ICH_Ragoo2021

    • colour.ICH_Ragoo2021_to_IPT_Ragoo2021

    * Now programmatically defined

    colour.utilities

    Port-Based Nodes and Graphs (#1277, @KelSolaar)

    👍 6 new classes were introduced to support for a port-based node-graph:

    • colour.utilities.Port
    • colour.utilities.PortNode
    • colour.utilities.PortGraph
    • colour.utilities.For
    • colour.utilities.ParallelForThread
    • colour.utilities.ParallelForMultiProcess

    They enable the construction of processing graphs:

    classNodeAdd(PortNode):def\_\_init\_\_(self,\*args,\*\*kwargs):super().\_\_init\_\_(\*args,\*\*kwargs)self.description="Perform the addition of the two input port values."self.add\_input\_port("a")self.add\_input\_port("b")self.add\_output\_port("output")defprocess(self):a=self.get\_input("a")b=self.get\_input("b")ifaisNoneorbisNone:returnself.\_output\_ports["output"].value=a+bself.dirty=FalseclassNodeMultiply(PortNode):def\_\_init\_\_(self,\*args,\*\*kwargs):super().\_\_init\_\_(\*args,\*\*kwargs)self.description=("Perform the multiplication of the two input port values.")self.add\_input\_port("a")self.add\_input\_port("b")self.add\_output\_port("output")defprocess(self):a=self.get\_input("a")b=self.get\_input("b")ifaisNoneorbisNone:returnself.\_output\_ports["output"].value=a\*bself.dirty=Falsenode\_add=NodeAdd()node\_add.set\_input("a",1)node\_add.set\_input("b",1)node\_multiply=NodeMultiply()node\_multiply.set\_input("b",2)graph=PortGraph()graph.add\_node(node\_add)graph.add\_node(node\_multiply)graph.connect(node\_add,"output",node\_multiply,"a")graph.process()print(node\_multiply.get\_output("output"))graph.to\_graphviz().draw("Graph.png",prog="dot")
    

    image

    colour-hdri uses the new classes to implement a multi-processed HDRI merging graph: https://github.com/colour-science/colour-hdri/blob/develop/colour_hdri/examples/examples_advanced_processing_with_an_input_device_transform.ipynb

    🛠 Fixes

    colour.colorimetry

    • Fix issue where colour.colorimetry.sds_and_msds_to_msds definition did not always copy the converted spectral distributions and was causing seemingly random unit tests failure. (891d364, @KelSolaar)
    • Fix issue when passing a colour.MultiSpectralDistributions to colour.sd_to_XYZ definition using the ASTM E308 method. (20fb963, @KelSolaar, @gul916)

    colour.io

    colour.models

    colour.notation

    • Reduce various thresholds in Munsell Renotation computations to allow sRGB colours to be converted. (#1173, 4b0c38d, @KelSolaar)

    colour.utilities

    • 👀 Ensure that caches are systematically cleared when changing dtype: It was causing seemingly random unit tests failure. (8faeb09, @KelSolaar)

    🔄 Changes

    colour.algebra

    Object Name Author
    colour.algebra.vector_dot vecmul @KelSolaar

    colour.plotting

    Object Signature Author
    colour.plotting.plot_RGB_colourspace_section `plot_RGB_colourspace_section(colourspace: (RGB_Colourspace LiteralRGBColourspace

    colour.utilities

    • ~colour.utilities.is_string: (@KelSolaar)
      • Remove
  • v0.4.4 Changes

    December 17, 2023

    Colour 0.4.4 - Alpha Milestone

    🚀 This release implements support for Python 3.12 (#1224).

    💅 We are now using isort to order our imports. We improved the repository style using the Scientific Python Repository Review page.

    colour-visuals was made public: It is a new repository implementing various WebGPU-based visuals on top of Colour and pygfx.

    🔋 Features

    Packaging

    We have solved the clash with https://github.com/vaab/colour by loading a known subset of the objects given by vaab/colour-0.1.5 into our namespace if the COLOUR_SCIENCE __COLOUR__ IMPORT_VAAB_COLOUR=True environment variable is defined. (#1222, @KelSolaar, @tjdcs, @MichaelMauderer)

    👀 See the following issues for more information:

    colour.hints

    • 📦 Various new literals have been added to help packages using Colourwith typing annotations. (#1198, @KelSolaar, @jamesmyatt)

    colour.models

    • 🌲 Implement support for Apple Log Profile with colour.models.log_encoding_AppleLogProfile and colour.models.log_decoding_AppleLogProfile definitions. (@KelSolaar)

    colour.plotting

    • ➕ Add new definitions to generate data useful for other plotting definitions and used by colour-visuals: (@KelSolaar)

    • colour.plotting.lines_daylight_locus

    • colour.plotting.lines_planckian_locus

    • colour.plotting.lines_pointer_gamut

    • colour.plotting.lines_spectral_locus

    🛠 Fixes

    colour.continuous

    • Ensure that colour.continuous.AbstractContinuousFunction class and sub-classes, e.g. colour.SpectralDistribution class, can be pickled. (#66c26b6, @KelSolaar)

    colour.difference

    colour.utilities

    • 🛠 Fix issue in colour.utilities.verbose.multiline_repr definition when an attribute representation is None. (#1466, @KelSolaar)

    🔄 Changes

    ✅ Unit Tests

    • ✅ We have changed our unit tests to use np.testing.assert_allclose rather than np.testing.assert_array_almost_equal to help with tests failing on Github Actions because of minor precision issues when using pytest-xdist, multi-threading and caching. (@KelSolaar)

    colour.constants

    Object Name Author
    colour.constants.DEFAULT_INT_DTYPE DTYPE_INT_DEFAULT @KelSolaar
    colour.constants.DEFAULT_FLOAT_DTYPE DTYPE_FLOAT_DEFAULT ...
  • v0.4.3 Changes

    August 26, 2023

    Colour 0.4.3 - Alpha Milestone

    🐎 We worked on many optimisations around colour quality metrics that should result in overall performance increase, thanks again to @tjdcs for the heavy lifting!

    @charliermarsh's ruff is now used as a replacement for:

    🐎 We also replaced mypy with pyright for performance reasons. We took that opportunity to simplify our type annotations.

    The colour.XYZ_to_RGB and colour.RGB_to_XYZ definition signatures have been changed to be easier to use, please update any code using them. See #1127 for more information.

    🚀 With this release, the following scientific packages minimum versions are required:

    🔋 Features

    colour.characterisation

    • Add TE226 V2 colour checker reference values. (#1113, #901, @Rusching)
    • Add colour.apply_matrix_colour_correction definition and colour.APPLY_MATRIX_COLOUR_CORRECTION_METHODS attribute to conveniently apply a colour-correction matrix computed with the colour.matrix_colour_correction definition. (@KelSolaar)
    • ➕ Add terms 4 and 35 to Cheung (2004) polynomial transformation. (#1160, @chnmasta05)

    colour.colorimetry

    • 🚦 The continuous signal classes are now iterable, e.g. colour.SpectralDistribution and colour.MultiSpectralDistributions. (#1088, @KelSolaar)

      importcoloursd=colour.SDS_ILLUMINANTS["A"]foriinsd:print(i)

      [300. 0.930483] [305. 1.12821] [310. 1.35769] ... [780. 241.675]

      importcoloursd=colour.MSDS_CMFS["CIE 2012 2 Degree Standard Observer"]foriinsd:print(i)

      [3.90000000e+02 3.76964700e-03 4.14616100e-04 1.84726000e-02] [3.91000000e+02 4.53241600e-03 5.02833300e-04 2.22110100e-02] [3.92000000e+02 5.44655300e-03 6.08499100e-04 2.66981900e-02] ... [8.30000000e+02 1.76246500e-06 7.05386000e-07 0.00000000e+00]

    colour.models

    • Implement support for Kirk (2019) Yrg colourspace with colour.XYZ_to_Yrg and colour.Yrg_to_XYZ definitions. (#1152, @KelSolaar)
    • Implement support for Fujifilm F-Log2 encodings with colour.models.log_decoding_FLog2 and colour.models.log_encoding_FLog2 definitions. (#1076, @zachlewis)
    • Implement support for PLASA ANSI E1.54 colourspace with colour.models.RGB_COLOURSPACE_PLASA_ANSI_E154 attribute. (#1193, @KelSolaar)

    colour.notation

    • Implement support for CSS Color 3 with colour.notation.CSS_COLOR_3 attribute and colour.notation.keyword_to_RGB_CSSColor3 definition. (#1140, @KelSolaar)

    colour.plotting

    • Make RGB encoding optional in colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931, colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS and colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS definitions. (@KelSolaar)

      RGB=np.random.random((128,128,3))plot_RGB_chromaticities_in_chromaticity_diagram(RGB,"ITU-R BT.709",scatter_kwargs={"apply_cctf_encoding":False})

    • Add a new colour.plotting.temperature.plot_daylight_locus definition. (@KelSolaar)

    • Add a new planckian_locus_use_mireds keyword argument to colour.plotting.temperature.plot_planckian_locus definition. (@KelSolaar)

    image

    colour.temperature

    • Add colour.temperature.mired_to_CCT and colour.temperature.CCT_to_mired definitions to perform micro reciprocal degree and CCT conversions. (#1114, @KelSolaar)
    • Add colour.temperature.XYZ_to_CCT_Ohno2013 and colour.temperature.CCT_to_XYZ_Ohno2013 convenient definitions. (#1120, @tjdcs)

    colour.utilities

    🐎 Performance

    • The Colour Fidelity Index (2017), i.e. colour.quality.colour_fidelity_index_CIE2017 definition, and TM 30-18, i.e. colour.quality.colour_fidelity_index_ANSIIESTM3018 definition, metrics performance has been improved by x100 thanks to overall optimizations, e.g. colour.temperature.uv_to_CCT_Ohno2013 definition is x5 faster. (#1120, @tjdcs, @KelSolaar)

    🛠 Fixes

    Dependencies

    colour.io

    • Fix incorrect bit-depth conversion in colour.io.write_image_OpenImageIO definition when writing 16-bit integer images (82ef2c4, @nick-shaw, @KelSolaar)

    colour.colorimetry

    colour.models

    • Implement various minor corrections from Sarifuddin (2021) to colour.RGB_to_HCL definition. (1a580ef, @KelSolaar)

    colour.phenomena

    colour.utilities

    • 🛠 Fix dimensionality reduction issue in colour.utilities.as_float definition that was causing issue with 1-pixel images processing. (#1189, @KelSolaar, @MrLixm)

    🔄 Changes

    colour.colorimetry

    Object Signature Author
    colour.sd_single_led `sd_single_led(peak_wavelength: float, shape: SpectralShape = SPECTRAL_SHAPE_DEFAULT, method: Literal["Ohno 2005"] str = "Ohno 2005", **kwargs: Any) -> SpectralDistribution`
    colour.sd_multi_leds `sd_multi_leds(peak_wavelengths: ArrayLike, shape: SpectralShape = SPECTRAL_SHAPE_DEFAULT, method: Literal["Ohno 2005"] str = "Ohno 2005", **kwargs: Any) -> SpectralDistribution`
    colour.colorimetry.sd_single_led_Ohno2005 sd_single_led_Ohno2005(peak_wavelength: float, half_spectral_width: float, shape: SpectralShape = SPECTRAL_SHAPE_DEFAULT, **kwargs: Any) -> SpectralDistribution ...
    colour.colorimetry.sd_multi_leds_Ohno2005 `sd_multi_leds_Ohno2005(peak_wavelengths: ArrayLike, half_spectral_widths: ArrayLike, peak_power_ratios: ArrayLike None = None, shape: SpectralShape = SPECTRAL_SHAPE_DEFAULT, **kwargs: Any) -> SpectralDistribution`

    colour.characterisation

    • Ensure that the matrix returned by colour.matrix_idt definition is whitepoint preserving using the colour.characterisation.optimisation_factory_rawtoaces_v1 optimisation factory. (@KelSolaar)
    • Implement support for Finlayson et al. (2015) root-polynomials colour correction with colour.characterisation.optimisation_factory_Oklab_15 optimisation factory. (@KelSolaar)
    • The colour.matrix_idt definition optimisation factories are now returning 4 objects. (@KelSolaar)

    colour.models

    • The colour.XYZ_to_xy and colour.XYZ_to_xyY definitions do no return the parameter illuminant chromaticities when the luminance Y is equal to zero. This behaviour was motivated by a note from Bruce Justin Lindbloom but does not have a CIE or ASTM recommendation. (#1153, @KelSolaar)
    Object Name Author
    colour.XYZ_to_IPT_Munish2021 XYZ_to_IPT_Ragoo2021 @blue-j, @KelSolaar
    colour.IPT_Munish2021_to_XYZ IPT_Ragoo2021_to_XYZ ...
    Object Signature Author
    colour.XYZ_to_RGB `XYZ_to_RGB(XYZ: ArrayLike, colourspace: RGB_Colourspace str, illuminant: ArrayLike
  • v0.4.2 Changes

    November 29, 2022

    Colour 0.4.2 - Alpha Milestone

    🚀 This release implements support for Python 3.11. It includes the remaining contributions of the GSoC 2021 work from Cédric (@villirion). New RGB colourspaces, transfer functions, colour models and colour appearance models have been added. Various performance improvements have been implemented.

    We would like to especially thanks @tjdcs for his recent contributions.

    🚀 With this release, the minimum Python version is 3.9 and the following scientific packages minimum versions are required:

    🔋 Features

    colour.appearance

    • Implement support for Hellwig and Fairchild (2022) colour appearance model with colour.XYZ_to_Hellwig2022 and colour.Hellwig2022_to_XYZ definitions. (#972 @KelSolaar)
    • Implement support for CIECAM16 colour appearance model with colour.XYZ_to_CIECAM16 and colour.CIECAM16_to_XYZ definitions. (#1015, @KelSolaar)

    colour.colorimetry

    • ➕ Add convenient colour.SpectralShape.wavelengths property. (@KelSolaar)

    colour.difference

    • Implement support for Recommendation ITU-R BT.2124 with colour.difference.delta_E_ITP definition. (#981, @sabarish-srinivasan)

    colour.io

    colour.models

    • Implement support for Munish Ragoo and Farup (2021) Optimised IPT colourspace with colour.XYZ_to_IPT_Munish2021 and colour.IPT_Munish2021_to_XYZ definitions. (#990, @KelSolaar)

    • 🌲 Implement support for Leica L-Log log encodings with colour.models.log_encoding_LLog and colour.models.log_decoding_LLog definitions. (#986, @KelSolaar, @nick-shaw, @zachlewis)

    • Implement support for Recommendation ITU-T H.273 / INTERNATIONAL STANDARD ISO/IEC 23091-2 code points for video signal type identification with colour.COLOUR_PRIMARIES_ITUTH273, colour.TRANSFER_CHARACTERISTICS_ITUTH273 and colour.MATRIX_COEFFICIENTS_ITUTH273 attributes and colour.models.describe_video_signal_colour_primaries, colour.models.describe_video_signal_transfer_characteristics and colour.models.describe_video_signal_matrix_coefficients definitions. (#987, #1033, @fxthomas, @KelSolaar).

    • Implement support for ARRI Wide Gamut 4 colourspace and ARRI LogC4 log encodings with colour.models.RGB_COLOURSPACE_ARRI_WIDE_GAMUT_4 attribute and colour.models.log_encoding_ARRILogC4 and colour.models.log_decoding_ARRILogC4 definitions. (#1056, @KelSolaar)

    colour.recovery

    GSoC - 2021

    • Implement support for Jiang et al. (2013) camera RGB sensitivities recovery with colour.recovery.RGB_to_msds_camera_sensitivities_Jiang2013 definition. (#1002, @villirion, @KelSolaar)

    Camera RGB Sensitivities Recovery

    colour.utilities

    • 👍 The colour.utilities.CanonicalMapping and colour.utilities.LazyCanonicalMapping, fomerly colour.utilities.CaseInsensitiveMapping and colour.utilities.LazyCaseInsensitiveMapping, respectively, support canonical (and sluggified) keys: (#993, @KelSolaar, @zachlewis)

      >>>importcolour>>>colour.RGB_COLOURSPACES['ALEXA Wide Gamut'].name'ALEXA Wide Gamut'>>>colour.RGB_COLOURSPACES['alexa-wide-gamut'].name'ALEXA Wide Gamut'>>>colour.RGB_COLOURSPACES['alexawidegamut'].name'ALEXA Wide Gamut'>>>'ALEXA Wide Gamut'incolour.RGB_COLOURSPACESTrue>>>'alexa-wide-gamut'incolour.RGB_COLOURSPACESTrue>>>'alexawidegamut'incolour.RGB_COLOURSPACESTrue>>>delcolour.RGB_COLOURSPACES['alexa-wide-gamut']>>>'ALEXA Wide Gamut'incolour.RGB_COLOURSPACESFalse>>>list(colour.RGB_COLOURSPACES.slugified_keys()) ['aces2065-1','acescc','acescct','acescg','acesproxy','adobe-rgb-1998','adobe-wide-gamut-rgb','apple-rgb','best-rgb','beta-rgb','blackmagic-wide-gamut','cie-rgb','cinema-gamut','colormatch-rgb','dcdm-xyz','dci-p3','dci-p3-p','dji-d-gamut','dragoncolor','dragoncolor2','davinci-wide-gamut','display-p3','don-rgb-4','eci-rgb-v2','erimm-rgb','ekta-space-ps-5','f-gamut','filmlight-e-gamut','itu-r-bt2020','itu-r-bt470-525','itu-r-bt470-625','itu-r-bt709','max-rgb','n-gamut','ntsc-1953','ntsc-1987','p3-d65','palsecam','prophoto-rgb','protune-native','redwidegamutrgb','redcolor','redcolor2','redcolor3','redcolor4','rimm-rgb','romm-rgb','russell-rgb','s-gamut','s-gamut3','s-gamut3cine','smpte-240m','smpte-c','sharp-rgb','v-gamut','venice-s-gamut3','venice-s-gamut3cine','xtreme-rgb','srgb','aces','adobe1998','prophoto']>>>list(colour.RGB_COLOURSPACES.canonical_keys()) ['aces20651','acescc','acescct','acescg','acesproxy','adobergb1998','adobewidegamutrgb','applergb','bestrgb','betargb','blackmagicwidegamut','ciergb','cinemagamut','colormatchrgb','dcdmxyz','dcip3','dcip3p','djidgamut','dragoncolor','dragoncolor2','davinciwidegamut','displayp3','donrgb4','ecirgbv2','erimmrgb','ektaspaceps5','fgamut','filmlightegamut','iturbt2020','iturbt470525','iturbt470625','iturbt709','maxrgb','ngamut','ntsc1953','ntsc1987','p3d65','palsecam','prophotorgb','protunenative','redwidegamutrgb','redcolor','redcolor2','redcolor3','redcolor4','rimmrgb','rommrgb','russellrgb','sgamut','sgamut3','sgamut3cine','smpte240m','smptec','sharprgb','vgamut','venicesgamut3','venicesgamut3cine','xtremergb','srgb','aces','adobe1998','prophoto']>>>list(colour.MSDS_CMFS.slugified_keys()) ['stockman-sharpe-2-degree-cone-fundamentals','stockman-sharpe-10-degree-cone-fundamentals','smith-pokorny-1975-normal-trichromats','wright-guild-1931-2-degree-rgb-cmfs','stiles-burch-1955-2-degree-rgb-cmfs','stiles-burch-1959-10-degree-rgb-cmfs','cie-1931-2-degree-standard-observer','cie-1964-10-degree-standard-observer','cie-2012-2-degree-standard-observer','cie-2012-10-degree-standard-observer','cie-2015-2-degree-standard-observer','cie-2015-10-degree-standard-observer','cie_2_1931','cie_10_1964']>>>list(colour.MSDS_CMFS.canonical_keys()) ['stockmansharpe2degreeconefundamentals','stockmansharpe10degreeconefundamentals','smithpokorny1975normaltrichromats','wrightguild19312degreergbcmfs','stilesburch19552degreergbcmfs','stilesburch195910degreergbcmfs','cie19312degreestandardobserver','cie196410degreestandardobserver','cie20122degreestandardobserver','cie201210degreestandardobserver','cie20152degreestandardobserver','cie201510degreestandardobserver','cie21931','cie101964']

    Most of the datasets Colour ship with benefit from this new feature.

    🐎 Performance

    • colour.temperature.uv_to_CCT_Ohno2013 definition is ~100x faster. (#951, @KelSolaar)
    • colour.temperature.CCT_to_uv_Ohno2013 definition is ~425x faster. (#951, @KelSolaar)
    • 🚦 Creation of the colour.Signal class underlying continuous function now happens lazilly. (#1057, @tjdcs)
    • colour.SpectralDistribution.shape property getter is faster by ensuring monotonicity of the colour.SpectralDistribution.domain property. (#1067, 85f6a57, @tjdcs, @KelSolaar)

    🛠 Fixes

    colour.contrast

    • Fix incorrect log function in the pupil diameter computation of Barten (1999) contrast sensitivity function. (#1022, @xmsguan, @KelSolaar)

    🔄 Changes

    colour.algebra

    Object Access Change Author
    colour.algebra.ellipse_coefficients_general_form colour.geometry.ellipse_coefficients_general_form @KelSolaar
    colour.algebra.ellipse_coefficients_canonical_form colour.geometry.ellipse_coefficients_canonical_form ...
    colour.algebra.point_at_angle_on_ellipse colour.geometry.point_at_angle_on_ellipse ...
    colour.algebra.ellipse_fitting_Halir1998 colour.geometry.ellipse_fitting_Halir1998 ...
    colour.algebra.ELLIPSE_FITTING_METHODS colour.geometry.ELLIPSE_FITTING_METHODS ...
    colour.algebra.ellipse_fitting colour.geometry.ellipse_fitting ...
    colour.algebra.extend_line_segment colour.geometry.extend_line_segment ...
    colour.algebra.extend_line_segment colour.geometry.extend_line_segment ...
    colour.algebra.extend_line_segment colour.geometry.extend_line_segment ...

    colour.characterisation

    Object | Signature ...

  • v0.4.1 Changes

    February 25, 2022

    Colour 0.4.1 - Alpha Milestone

    This release is a maintenance release that mainly addresses packaging issues experienced by the MSYS2 maintainers and import issues when using Colour with Numpy 1.19.x and 1.20.x.

    🛠 Fixes

    Dependencies

    Distribution

    colour.colorimetry

    • Fix intersection filtering in colour.colorimetry.closest_spectral_locus_wavelength definition. (@KelSolaar, @sobotka)
  • v0.4.0 Changes

    February 20, 2022

    Colour 0.4.0 - Alpha Milestone

    🚀 Over a year in the making, this release integrates most of the GSoC 2021 work from Cédric (@villirion), all the code from Geetansh (@SGeetansh) and the remaining GSoC 2020 code from Nishant (@njwardhan). We would like to thank them again for their great contributions!

    🚀 Python 2.7 support has been dropped and the minimal version is Python 3.8 as per https://scientific-python.org/. The following minimal dependency versions are also required:

    🚀 The highlights of this release are as follows:

    • Colour now runs on iOS and iPadOS with Pyto.
    • The import of colour is now 3.6 times faster.
    • Typing annotations have been added and the codebase is checked with Mypy.
    • 📚 The documentation has been updated and uses the pydata-sphinx-theme and has better compliance with PEP257.
    • The code formatter is now Black,
    • Many Python 3 features such as f-Strings or the dataclass decorator have been adopted.
    • The plotting API has been improved to be more consistent when setting the colours of some figures, e.g. spectral or planckian locus.
    • 🆕 New colour appearance models:

      • Zhai and Luo (2018) chromatic adaptation model.
      • Kim, Weyrich and Kautz (2009) colour appearance model.
      • ZCAM colour appearance model.
      • Helmholtz-Kohlrausch effect estimation.
    • 🆕 New colour models:

      • Oklab colour model.
      • Hanbury (2003) IHLS (Improved HLS) colourspace.
      • DIN99b, DIN99c, and DIN99d refined formulas.
      • ProLab colourspace.
      • Sarifuddin and Missaoui (2005) HCL colourspace.
    • 🆕 New RGB colourspaces and transfer functions:

      • Nikon N-Gamut colourspace and the N-Log log encoding.
      • Blackmagic Wide Gamut colourspace and the associated Blackmagic Film Generation 5 OETF.
      • DaVinci Intermediate OETF.
      • RED Log3G10 encoding and decoding curves with linear extension.
    • Other notable features:

      • Huang et al. (2015) power-functions.
      • LUT 1D, LUT 3x1D and LUT 3D inversion.
      • UPRTek and Sekonic spectral data parsers.
      • SPImtx LUT input and output.
      • R'G'B' to Y'CbCr matrices computation.
      • Gamut ring/section plotting.
      • Rösch-MacAdam colour solid hue lines.
      • Support for OpenColorIO processor.
      • Note that the optional dependency is not specified in the pyproject.toml, see AcademySoftwareFoundation/OpenColorIO#1573 for more information.

    🚀 Thanks again to all the contributors to this release!

    🔋 Features

    Typing

    • 📦 The API has been fully annotated with typing annotations, a new colour.hints sub-package exporting all the hints has been created.

    🐎 Performance

    • 👀 Import time has been reduced to ~1.5secs from 5.5secs on @KelSolaar's MacBook Pro (Retina, 13-inch, Mid 2014) by using a lazy load mechanism for the spectral data and delaying various imports in the colour.plotting.tm3018 module. See PR #840 for more information.
    • 👀 Repetitive spectral computations are now cached and a small cache management API has been created, see colour.utilities.CACHE_REGISTRY attribute for more information.
    • The colour.sd_to_XYZ and colour.msds_to_XYZ definitions now use the same n-dimensional code under the hood. Some minor numerical differences are expected as the explicit summations and multiplications have been replaced with np.dot.

    colour.adaptation

    GSoC - 2021

    • Implement support for Zhai and Luo (2018) chromatic adaptation model with colour.adaptation.chromatic_adaptation_Zhai2018 definition. (@villirion, @KelSolaar)

    colour.appearance

    GSoC - 2021

    • Implement support for Kim, Weyrich and Kautz (2009) colour appearance model with colour.XYZ_to_Kim2009 and colour.Kim2009_to_XYZ definitions. (@villirion, @KelSolaar)

    • Implement support for ZCAM colour appearance model with the colour.XYZ_to_ZCAM and colour.ZCAM_to_XYZ definitions. (@KelSolaar)
    • Implement support for Helmholtz-Kohlrausch effect estimation with colour.HelmholtzKohlrausch_effect_object_Nayatani1997 and colour.HelmholtzKohlrausch_effect_luminous_Nayatani1997 definitions. (@ilia3101, @KelSolaar)
    • Colour appearance models now use a dataclass-like class output instead of the namedtuple and thus are mutable.

    colour.characterisation

    • Various ACES Input Device Transform computation objects have been updated to generate additional data and support more features for the Academy Input Device Transform (IDT) calculator. (@KelSolaar, @aforsythe)
    • Add colour.camera_RGB_to_ACES2065_1 definition. (@KelSolaar, @aforsythe)

    colour.colorimetry

    • 👍 Implement support for spectral uniformity computation with colour.spectral_uniformity definition. (@KelSolaar)
    • Add colour.TVS_ILLUMINANTS attribute providing a reference for the CIE XYZ tristimulus values of the CIE illuminants. (@KelSolaar)
    • Ensure that colour.SpectralShape and dict KeysView class instances can be passed as domain to colour.SpectralDistribution and colour.MutliSpectralDistributions classes. (@KelSolaar)
    • ⚡️ The colour.colorimetry.yellowness_ASTME313 definition has been updated to use the recommended Yellowness Index equation as given by ASTME313. The alternative method has been renamed to colour.colorimetry.yellowness_ASTME313_alternative. (@KelSolaar, @romanovar)

    colour.difference

    • Implement support for STRESS index computation according to García et al. (2007) method with colour.index_stress definition and colour.INDEX_STRESS_METHODS attribute. (@KelSolaar)
    • Implement support for Huang et al. (2015) power-functions improving colour-difference formulas with colour.difference.power_function_Huang2015 definition. (@KelSolaar)

    colour.io

    GSoC - 2020

    • Implement support for LUT 1D, LUT 3x1D and LUT 3D inversion with the colour.LUT1D.invert, colour.LUT3x1D.invert and colour.LUT3D.invert methods. (@njwardhan, @KelSolaar)

    GSoC - 2021

    • Implement support for UPRTek and Sekonic spectral data parsers with the colour.SpectralDistribution_UPRTek and colour.SpectralDistribution_Sekonic classes. (@SGeetansh, @KelSolaar)

    • Implement support for OpenColorIO processor with colour.io.process_image_OpenColorIO definition. (@KelSolaar)
    • Implement support for SPImtx LUT input and output with new colour.io.read_LUT_SonySPImtx and colour.io.write_LUT_SonySPImtx definitions and colour.io.LUTOperatorMatrix support class. (@nick-shaw, @KelSolaar, @zachlewis)
    • The colour.io.tm2714.Header_IESTM2714 class can now be hashed and compared for equality. (@JGoldstone)

    colour.models

    GSoC - 2021

    • Implement support for Hanbury (2003) IHLS (Improved HLS) colourspace with colour.RGB_to_IHLS and colour.IHLS_to_RGB definitions. (@SGeetansh, @KelSolaar)
    • Implement support for DIN99b, DIN99c, and DIN99d refined formulas in colour.Lab_to_DIN99 and colour.DIN99_to_Lab definitions. (@SGeetansh)
    • Implement support for ProLab colourspace with colour.ProLab_to_XYZ and colour.XYZ_to_ProLab definitions. (@SGeetansh, @KelSolaar)

    • Implement support for Sarifuddin and Missaoui (2005) HCL colourspace with colour.RGB_to_HCL and colour.HCL_to_RGB definitions. (@Saransh-cpp, @KelSolaar)
    • Implement wrapper colour.XYZ_to_ICTCP and colour.ICTCP_to_XYZ definitions. (@KelSolaar)
    • Implement wrapper colour.XYZ_to_CAM02LCD, colour.CAM02LCD_to_XYZ, colour.XYZ_to_CAM02SCD, colour.CAM02SCD_to_XYZ, colour.XYZ_to_CAM02UCS and
      colour.CAM02UCS_to_XYZ definitions. (@KelSolaar)
    • Implement wrapper colour.XYZ_to_CAM16LCD, colour.CAM16LCD_to_XYZ, colour.XYZ_to_CAM16SCD, colour.CAM16SCD_to_XYZ, colour.XYZ_to_CAM16UCS and
      colour.CAM16UCS_to_XYZ definitions. (@KelSolaar)
    • Implement support for R'G'B' to Y'CbCr matrices computation with colour.matrix_YCbCr and colour.offset_YCbCr definitions. (@KelSolaar, @nick-shaw)
    • Implement support for Oklab colour model with colour.XYZ_to_Oklab and colour.Oklab_to_XYZ definitions. (@KelSolaar)
    • Implement support for Nikon N-Gamut colourspace and the N-Log log encoding and decoding curves with colour.models.RGB_COLOURSPACE_N_GAMUT class and colour.models.log_encoding_NLOG and colour.models.log_decoding_NLOG definitions. (@sobotka, @KelSolaar)
    • Implement support for RED Log3G10 encoding and decoding curves that uses a linear extension as given in the final version of White Paper on REDWideGamutRGB and Log3G10. (@jedypod)
    • Implement support for Blackmagic Wide Gamut colourspace and the associated Blackmagic Film Generation 5 OETF and its inverse with colour.models.RGB_COLOURSPACE_BLACKMAGIC_WIDE_GAMUT attribute, colour.models.oetf_BlackmagicFilmGeneration5 and colour.models.oetf_inverse_BlackmagicFilmGeneration5 definitions. (@KelSolaar)
    • 👍 Implement support for *DaVinci Inte...
  • v0.3.16 Changes

    November 27, 2020

    Colour 0.3.16 - Alpha Milestone

    🚀 This release integrates all the GSoC work from Pawel (@enneract), most of the code from Nishant (@njwardhan) and, the optimizations from Omar (@OmarWagih1). We would like to thank them again for their great contributions!

    🚀 With this release, we stop testing for Python 3.5 and, Scipy>=1.1.0 becomes the minimum version. This is the last feature release to support Python 2.7! We will also trim the deprecation code in the next version thus, please make sure to update your code accordingly.

    The colour.SpectralDistribution.interpolate and colour.MultiSpectralDistributions.interpolate methods now honour class instantiation time interpolation parameters instead of blindly applying CIE 167:2005 recommendation, this introduces minor numerical changes.

    Many definitions, methods and, module attributes have been renamed to improve consistency and we are reaching a satisfactory point in that regard, hopefully, the names will be much more stable from now on.

    🔋 Features

    colour.algebra

    • ➕ Add colour.algebra.smoothstep definition. (@KelSolaar)

    colour.characterisation

    • Support for ACES Input Device Transform (IDT) generation: The implementation follows to some extent RAW to ACES v1 and P-2013-001 procedure. (@KelSolaar)

    Usage is simple and as follows:

    \>\>\> sensitivities = colour.CAMERA\_RGB\_SPECTRAL\_SENSITIVITIES['Nikon 5100 (NPL)']\>\>\> illuminant = colour.ILLUMINANT\_SDS['D55']\>\>\> colour.matrix\_idt(sensitivities, illuminant)array([[0.46579991, 0.13409239, 0.01935141], [0.01786094, 0.77557292, -0.16775555], [0.03458652, -0.16152926, 0.74270359]])
    

    The following ISO 7589 and 6728 spectral data has been added: (@KelSolaar)

    ISO 6728 Standard Lens

    ISO 7589 Diffuser

    New attributes colour.SDS_LENSES containing the ISO 6728 Standard Lens and colour.SDS_FILTERScontaining the ISO 7589 Diffuser have been added.

    The ISO 17321-1 24 patches reflectance data has been added as an alias to Ohta (1997) measurements. (@KelSolaar)

    colour.colorimetry

    The following ISO 7589 illuminants have been added: (@KelSolaar)

    ISO 7589 Photographic Daylight

    ISO 7589 Sensitometric Daylight

    ISO 7589 Studio Tungsten

    ISO 7589 Sensitometric Studio Tungsten

    ISO 7589 Photoflood

    ISO 7589 Sensitometric Photoflood

    🖨 ISO 7589 Sensitometric Printer

    Add colour.msds_constant, colour.msds_zeros and colour.msds_ones definitions. (@KelSolaar)

    colour.difference

    • Add colour.difference.JND_CIE1976 attribute representing the Just Noticeable Difference (JND) according to CIE 1976 colour difference formula.

    colour.geometry

    📦 The geometry primitives generation code has been consolidated into a new colour.geometry sub-package. The following objects are available: (@KelSolaar)

    Primitives

    • colour.geometry.primitive_grid
    • colour.geometry.primitive_cube
    • colour.PRIMITIVE_METHODS
    • colour.primitive

    Primitives Vertices

    • colour.geometry.primitive_vertices_quad_mpl (for Matplotlib usage only)
    • colour.geometry.primitive_vertices_grid_mpl (for Matplotlib usage only)
    • colour.geometry.primitive_vertices_cube_mpl (for Matplotlib usage only)
    • colour.geometry.primitive_vertices_sphere
    • colour.PRIMITIVE_VERTICES_METHODS
    • colour.primitive_vertices

    colour.models

    GSoC - 2020

    Add colour.models.log_encoding_Log2 and colour.models.log_decoding_Log2 log encoding and decoding definitions. (@njwardhan, @KelSolaar)

    Add colour.models.exponent_function_basic and colour.models.exponent_function_monitor_curve definitions. (@njwardhan)

    Add colour.models.logarithmic_function_basic, colour.models.logarithmic_function_quasilog and colour.models.logarithmic_function_camera definitions. (@njwardhan, @nick-shaw, @KelSolaar)

    Implement support for IGPGTG colourspace by Hellwig and Fairchild (2020) with the colour.XYZ_to_IGPGTG and colour.IGPGTG_to_XYZ definitions. (@KelSolaar)

    Implement support for DaVinci Wide Gamut colourspace. (@KelSolaar)

    colour.plotting

    image
    image
    image

    • 👍 Implement support for RGB colourspaces chromatic adaptation in various plotting routines: (@KelSolaar)

    image
    image

    colour.quality

    GSoC - 2020

    • Implement support for CIE 2017 Colour Fidelity Index quality metric computation colour.quality.colour_fidelity_index_CIE2017 definition. (@enneract)
    • Implement support for ANSI/IES TM-30-18 Colour Fidelity Index quality metric computation colour.quality.colour_fidelity_index_ANSIIESTM3018 definition. (@enneract)

    colour.recovery

    GSoC - 2020

    • Implement support for Jakob and Hanika (2019) spectral upsampling method with the colour.recovery.XYZ_to_sd_Jakob2019 definition. (@enneract, @KelSolaar)
    • Implement support for Mallett and Yuksel (2019) spectral upsampling method with the colour.recovery.RGB_to_sd_Mallett2019 definition. (@enneract)
    • Implement support for Otsu, Yamamoto and Hachisuka (2018) spectral upsampling method with the colour.recovery.XYZ_to_sd_Otsu2018 definition. (@enneract, @KelSolaar)

    colour.utilities

    • Float precision can be set globally with the colour.utilities.set_float_precision definition and the COLOUR_SCIENCE__FLOAT_PRECISION environment variable. It will affect almost the entire API and lead to increase performance at the price of broken capabilities. (@KelSolaar)
    • It is now possible to pass an axis argument to the colour.utilities.metric_mse and colour.utilities.metric_psnr definitions. (@KelSolaar)
    • ➕ Add colour.utilities.LazyCaseInsensitiveMapping class for lazily loading slow and heavy datasets. (@KelSolaar)

    🛠 Fixes

    colour.characterisation

    • The Finlayson, MacKiewicz and Hurlbert (2015) colour correction method was defective when root-polynomial expansion is in use. (@ChunHsinWang, @KelSolaar)

    colour.colorimetry

    • The colour.SpectralDistribution.align, colour.MultiSpectralDistributions.align, colour.SpectralDistribution.interpolate and colour.MultiSpectralDistributions.interpolate methods did not honour the instantiation time interpolation class and were forcibly using either the colour.SpragueInterpolator or colour.CubicSplineInterpolator classes unless an interpolator argument was passed. This behaviour was not desirable and was changed so that if the instantiation time interpolation class is not one of colour.SpragueInterpolator or colour.CubicSplineInterpolator, then, it will be used instead and thus it will take precedence over the CIE 167:2005 recommendation. (@KelSolaar)

    The immediate consequence is small numerical changes to various spectral computations, for example:

     \>\>\> illuminant = ILLUMINANTS\_SDS['D65'] \>\>\> sd\_to\_XYZ\_tristimulus\_weighting\_factors\_ASTME308( ... sd, cmfs, illuminant) # doctest: +ELLIPSIS- array([10.8402899..., 9.6843539..., 6.2160858...])+ array([10.8405832..., 9.6844909..., 6.2155622...]) \>\>\> from colour import COLOURCHECKERS\_SDS \>\>\> sd = COLOURCHECKERS\_SDS['ColorChecker N Ohta']['dark skin'] \>\>\> sd\_to\_aces\_relative\_exposure\_values(sd) # doctest: +ELLIPSIS- array([0.1171785..., 0.0866347..., 0.0589707...])+ array([0.1171814..., 0.0866360..., 0.0589726...])Colour quality metrics are affected a bit more severely: ```diff \>\>\> from colour import ILLUMINANTS\_SDS \>\>\> sd = ILLUMINANTS\_SDS['FL2'] \>\>\> colour\_rendering\_index(sd) # doctest: +ELLIPSIS- 64.1515202...+ 64.2337241... \>\>\> from colour import ILLUMINANTS\_SDS \>\>\> sd = ILLUMINANTS\_SDS['FL2'] \>\>\> colour\_quality\_scale(sd) # doctest: +ELLIPSIS- 64.0172835...+ 64.1117031...
    

    CIE Illuminant D Series D60 chromaticity have also been modified:

    - 'D60': np.array([0.321626242047397, 0.337736995955436]),+ 'D60': np.array([0.321616709705268, 0.337619916550817]),
    

    👀 See #566 for more details.

    colour.models

    • colour.OETF_INVERSES attribute ITU-R BT.2100 HLG key was incorrectly named ITU-R BT.2100 HLD. (@jchwei)
    • colour.HSL_to_RGB definition output was incorrect when saturation was equal to 1. (@KelSolaar, @nadersadoughi)

    colour.plotting

    • The colour.plotting.diagrams.plot_chromaticity_diagram definition was not passing anymore the CMFS to the underlying colour.plotting.diagrams.plot_spectral_locus and colour.plotting.diagrams.plot_chromaticity_diagram_colours definitions. (@KelSolaar, @sobotka)

    colour.utilities

    • ⚠ The colour.utilities.filter_warnings definition was not behaving properly and has been fixed. (@KelSolaar)

    Examples

    • colour.plotting.plot_RGB_colourspaces_gamuts definition was using an incorrect style argument. (@sianyi)

    🔄 Changes

    colour.adaptation

    Object Name Author
    colour.CMCCAT2000_VIEWING_CONDITIONS VIEWING_CONDITIONS_CMCCAT2000 @KelSolaar
    colour.adaptation.BRADFORD_CAT CAT_BRADFORD ...
    colour.adaptation.BS_CAT CAT_BIANCO2010 ...
    colour.adaptation.BS_PC_CAT CAT_PC_BIANCO2010 ...
    colour.adaptation.CAT02_BRILL_CAT CAT_CAT02_BRILL2008 ...
    colour.adaptation.CAT02_CAT CAT_CAT02 ...
    colour.adaptation.CMCCAT2000_CAT CAT_CMCCAT2000 ...
    colour.adaptation.CMCCAT2000_InductionFactors InductionFactors_CMCCAT2000 ...
    colour.adaptation.CMCCAT97_CAT CAT_CMCCAT97 ...
    colour.adaptation.FAIRCHILD_CAT CAT_FAIRCHILD ...
    colour.adaptation.SHARP_CAT CAT_SHARP ...
    colour.adaptation.VON_KRIES_CAT CAT_VON_KRIES ...
    colour.adaptation.XYZ_SCALING_CAT CAT_XYZ_SCALING ...

    colour.algebra

    • The colour.algebra.cartesian_to_spherical and colour.algebra.spherical_to_cartesian definitions now use the ISO 31-11 parameterisation for consistency.
    Object Signature Author
    colour.KernelInterpolator. __init__ KernelInterpolator(self, x, y, window=3, kernel=kernel_lanczos, kernel_kwargs=None, padding_kwargs=None, dtype=DEFAULT_FLOAT_DTYPE) @KelSolaar
    Object Name Author
    colour.KernelInterpolator.kernel_args kernel_kwargs @KelSolaar
    colour.KernelInterpolator.padding_args padding_kwargs ...

    colour.appearance

    Object Name Author
    colour.ATD95_Specification CAM_Specification_ATD95 @KelSolaar
    colour.CAM16_Specification CAM_Specification_CAM16 ...
    colour.CAM16_VIEWING_CONDITIONS VIEWING_CONDITIONS_CAM16 ...
    colour.CIECAM02_Specification CAM_Specification_CIECAM02 ...
    colour.CIECAM02_VIEWING_CONDITIONS VIEWING_CONDITIONS_CIECAM02 ...
    colour.HUNT_VIEWING_CONDITIONS VIEWING_CONDITIONS_HUNT ...
    colour.Hunt_Specification CAM_Specification_Hunt ...
    colour.LLAB_Specification CAM_Specification_LLAB ...
    colour.LLAB_VIEWING_CONDITIONS VIEWING_CONDITIONS_LLAB ...
    colour.Nayatani95_Specification CAM_Specification_Nayatani95 ...
    colour.RLAB_Specification CAM_Specification_RLAB ...
    colour.RLAB_VIEWING_CONDITIONS VIEWING_CONDITIONS_RLAB ...
    colour.appearance.CAM16_InductionFactors InductionFactors_CAM16 ...
    colour.appearance.CIECAM02_InductionFactors InductionFactors_CIECAM02 ...
    colour.appearance.Hunt_InductionFactors InductionFactors_Hunt ...
    colour.appearance.LLAB_InductionFactors InductionFactors_LLAB ...
    colour.appearance.RLAB_D_FACTOR D_FACTOR_RLAB ...
    colour.appearance.chromatic_adaptation_matrix_VonKries matrix_chromatic_adaptation_VonKries ...

    colour.blindness

    Object Name Author
    colour.blindness.anomalous_trichromacy_cmfs_Machado2009 msds_cmfs_anomalous_trichromacy_Machado2009 @KelSolaar
    colour.blindness.anomalous_trichromacy_matrix_Machado2009 matrix_anomalous_trichromacy_Machado2009 ...
    colour.blindness.cvd_matrix_Machado2009 matrix_cvd_Machado2009 ...

    colour.characterisation

    Object Name Author
    colour.CAMERA_RGB_SPECTRAL_SENSITIVITIES MSDS_CAMERA_SENSITIVITIES @KelSolaar
    colour.COLOURCHECKERS CCS_COLOURCHECKERS ...
    colour.COLOURCHECKER_SDS SDS_COLOURCHECKERS ...
    colour.COLOUR_CORRECTION_MATRIX_METHODS MATRIX_COLOUR_CORRECTION_METHODS ...
    colour.DISPLAY_RGB_PRIMARIES MSDS_DISPLAY_PRIMARIES ...
    colour.characterisation.augmented_matrix_Cheung2004 matrix_augmented_Cheung2004 ...
    colour.characterisation.colour_correction_matrix_Cheung2004 matrix_colour_correction_Cheung2004 ...
    colour.characterisation.colour_correction_matrix_Finlayson2015 matrix_colour_correction_Finlayson2015 ...
    colour.characterisation.colour_correction_matrix_Vandermonde matrix_colour_correction_Vandermonde ...
    colour.colour_correction_matrix matrix_colour_correction ...

    colour.colorimetry

    • colour.sd_blackbody definition now returns values in W/sr/m2/nm instead of W/sr/m2/m. See #559 for more background information. (@KelSolaar, @Wagyx, @MichaelMauderer)
      colour.colorimetry
    • colour.colorimetry.sd_CIE_illuminant_D_series definition return a spectral distribution whose name includes the used chromaticity coordinates and whose interpolator is instantiated from colour.algebra.LinearInterpolator. (@KelSolaar)
    Object Signature Author
    colour.MultiSpectralDistributions.align align(self, shape, interpolator=None, interpolator_kwargs=None, extrapolator=None, extrapolator_kwargs=None, **kwargs) @KelSolaar
    colour.MultiSpectralDistributions.extrapolate extrapolate(self, shape, extrapolator=None, extrapolator_kwargs=None, **kwargs) ...
    colour.MultiSpectralDistributions.interpolate interpolate(self, shape, interpolator=None, interpolator_kwargs=None, **kwargs) ...
    colour.SpectralDistribution.align align(self, shape, interpolator=None, interpolator_kwargs=None, extrapolator=None, extrapolator_kwargs=None, **kwargs) ...
    colour.SpectralDistribution.extrapolate extrapolate(self, shape, extrapolator=None, extrapolator_kwargs=None, **kwargs) ...
    colour.SpectralDistribution.interpolate interpolate(self, shape, interpolator=None, interpolator_kwargs=None, **kwargs) ...
    Object Name Author
    colour.ASTME308_PRACTISE_SHAPE SPECTRAL_SHAPE_ASTME308 @KelSolaar
    colour.CMFS MSDS_CMFS ...
    colour.DEFAULT_SPECTRAL_SHAPE SPECTRAL_SHAPE_DEFAULT ...
    colour.HUNTERLAB_ILLUMINANTS TVS_ILLUMINANTS_HUNTERLAB ...
    colour.ILLUMINANTS_SDS SDS_ILLUMINANTS ...
    colour.ILLUMINANTS CCS_ILLUMINANTS ...
    colour.LEFS SDS_LEFS ...
    colour.LIGHT_SOURCES_SDS SDS_LIGHT_SOURCES ...
    colour.LIGHT_SOURCES CCS_LIGHT_SOURCES ...
    colour.MULTI_SD_TO_XYZ_METHODS MSDS_TO_XYZ_METHODS ...
    colour.colorimetry.D_ILLUMINANTS_S_SDS SDS_BASIS_FUNCTIONS_CIE_ILLUMINANT_D_SERIES ...
    colour.colorimetry.LMS_CMFS MSDS_CMFS_LMS ...
    colour.colorimetry.PHOTOPIC_LEFS SDS_LEFS_PHOTOPIC ...
    colour.colorimetry.RGB_CMFS MSDS_CMFS_RGB ...
    colour.colorimetry.SCOTOPIC_LEFS SDS_LEFS_SCOTOPIC ...
    colour.colorimetry.STANDARD_OBSERVERS_CMFS MSDS_CMFS_STANDARD_OBSERVER ...
    colour.colorimetry.multi_sds_to_XYZ_ASTME308 msds_to_XYZ_ASTME308 ...
    colour.colorimetry.multi_sds_to_XYZ_integration msds_to_XYZ_integration ...
    colour.colorimetry.sds_and_multi_sds_to_multi_sds sds_and_msds_to_msds ...
    colour.colorimetry.sds_and_multi_sds_to_sds sds_and_msds_to_sds ...
    colour.multi_sds_to_XYZ msds_to_XYZ ...

    colour.constants

    Object Name Author
    colour.constants.AVOGADRO_CONSTANT CONSTANT_AVOGADRO @KelSolaar
    colour.constants.BOLTZMANN_CONSTANT CONSTANT_BOLTZMANN ...
    colour.constants.K_M CONSTANT_K_M ...
    colour.constants.KP_M CONSTANT_KP_M ...
    colour.constants.PLANCK_CONSTANT CONSTANT_PLANCK ...
    colour.constants.LIGHT_SPEED CONSTANT_LIGHT_SPEED ...

    colour.continuous

    Object Signature Author
    colour.continuous.MultiSignals.extrapolator_args extrapolator_kwargs @KelSolaar
    colour.continuous.MultiSignals.interpolator_args interpolator_kwargs ...
    colour.continuous.Signal.extrapolator_args extrapolator_kwargs ...
    colour.continuous.Signal.interpolator_args interpolator_kwargs ...

    colour.corresponding

    Object Name Author
    colour.constants.BRENEMAN_EXPERIMENTS_PRIMARIES_CHROMATICITIES BRENEMAN_EXPERIMENT_PRIMARIES_CHROMATICITIES @KelSolaar

    colour.geometry

    Object Signature Author
    colour.geometry.quad primitive_vertices_quad_mpl(width=1, height=1, depth=0, origin=np.array([0, 0]), axis='+z') @KelSolaar
    colour.geometry.grid primitive_vertices_grid_mpl(width=1, height=1, depth=0, width_segments=1, height_segments=1, origin=np.array([0, 0]), axis='+z') ...
    colour.geometry.cube primitive_vertices_cube_mpl(width=1, height=1, depth=1, width_segments=1, height_segments=1, depth_segments=1, origin=np.array([0, 0, 0]), planes=None) ...

    colour.io

    Object Signature Author
    colour.LUT1D.apply apply(self, RGB, interpolator=LinearInterpolator, interpolator_kwargs=None, **kwargs) @KelSolaar
    colour.LUT3x1D.apply apply(self, RGB, interpolator=LinearInterpolator, interpolator_kwargs=None, **kwargs) ...
    colour.LUT3D.apply apply(self, RGB, interpolator=table_interpolation_trilinear, interpolator_kwargs=None, **kwargs) ...
    colour.LutSequence.apply apply(self, RGB, interpolator_1D=LinearInterpolator, interpolator_1D_kwargs=None, interpolator_3D=table_interpolation_trilinear, interpolator_3D_kwargs=None, **kwargs) ...

    colour.models

    Object Signature Author
    colour.OSA_UCS_to_XYZ OSA_UCS_to_XYZ(Ljg, optimisation_kwargs=None, **kwargs) @KelSolaar
    colour.RGB_Colourspace RGB_Colourspace(self, name, primaries, whitepoint, whitepoint_name=None, matrix_RGB_to_XYZ=None, matrix_XYZ_to_RGB=None, cctf_encoding=None, cctf_decoding=None, use_derived_matrix_RGB_to_XYZ=False, use_derived_matrix_XYZ_to_RGB=False) ...
    colour.RGB_to_XYZ RGB_to_XYZ(RGB, illuminant_RGB, illuminant_XYZ, matrix_RGB_to_XYZ, chromatic_adaptation_transform='CAT02', cctf_decoding=None, **kwargs) ...
    colour.XYZ_to_RGB XYZ_to_RGB(XYZ, illuminant_XYZ, illuminant_RGB, matrix_XYZ_to_RGB, chromatic_adaptation_transform='CAT02', cctf_encoding=None, **kwargs) ...
    Object Access Author
    colour.models.ACES_RICD colour.characterisation.MSDS_ACES_RICD @KelSolaar
    Object Name Author
    colour.RGB_Colourspace.RGB_to_XYZ_matrix matrix_RGB_to_XYZ @KelSolaar
    colour.RGB_Colourspace.XYZ_to_RGB_matrix matrix_XYZ_to_RGB ...
    colour.RGB_Colourspace.use_derived_RGB_to_XYZ_matrix use_derived_matrix_RGB_to_XYZ ...
    colour.RGB_Colourspace.use_derived_XYZ_to_RGB_matrix use_derived_matrix_XYZ_to_RGB ...
    colour.RGB_to_RGB_matrix matrix_RGB_to_RGB ...
    colour.YCBCR_WEIGHTS WEIGHTS_YCBCR ...
    colour.models.ACES_2065_1_COLOURSPACE RGB_COLOURSPACE_ACES2065_1 ...
    colour.models.ACES_CCT_COLOURSPACE RGB_COLOURSPACE_ACESCCT ...
    colour.models.ACES_CC_COLOURSPACE RGB_COLOURSPACE_ACESCC ...
    colour.models.ACES_CG_COLOURSPACE RGB_COLOURSPACE_ACESCG ...
    colour.models.ACES_PROXY_COLOURSPACE RGB_COLOURSPACE_ACESPROXY ...
    colour.models.ADOBE_RGB_1998_COLOURSPACE RGB_COLOURSPACE_ADOBE_RGB1998 ...
    colour.models.ADOBE_WIDE_GAMUT_RGB_COLOURSPACE RGB_COLOURSPACE_ADOBE_WIDE_GAMUT_RGB ...
    colour.models.ALEXA_WIDE_GAMUT_COLOURSPACE RGB_COLOURSPACE_ALEXA_WIDE_GAMUT ...
    colour.models.APPLE_RGB_COLOURSPACE RGB_COLOURSPACE_APPLE_RGB ...
    colour.models.BEST_RGB_COLOURSPACE RGB_COLOURSPACE_BEST_RGB ...
    colour.models.BETA_RGB_COLOURSPACE RGB_COLOURSPACE_BETA_RGB ...
    colour.models.BT2020_COLOURSPACE RGB_COLOURSPACE_BT2020 ...
    colour.models.BT470_525_COLOURSPACE RGB_COLOURSPACE_BT470_525 ...
    colour.models.BT470_625_COLOURSPACE RGB_COLOURSPACE_BT470_625 ...
    colour.models.BT709_COLOURSPACE RGB_COLOURSPACE_BT709 ...
    colour.models.CIE_RGB_COLOURSPACE RGB_COLOURSPACE_CIE_RGB ...
    colour.models.CINEMA_GAMUT_COLOURSPACE RGB_COLOURSPACE_CINEMA_GAMUT ...
    colour.models.COLOR_MATCH_RGB_COLOURSPACE RGB_COLOURSPACE_COLOR_MATCH_RGB ...
    colour.models.DCDM_XYZ_COLOURSPACE RGB_COLOURSPACE_DCDM_XYZ ...
    colour.models.DCI_P3_COLOURSPACE RGB_COLOURSPACE_DCI_P3_P ...
    colour.models.DCI_P3_P_COLOURSPACE RGB_COLOURSPACE_DCI_P3 ...
    colour.models.DISPLAY_P3_COLOURSPACE RGB_COLOURSPACE_DISPLAY_P3 ...
    colour.models.DJI_D_GAMUT_COLOURSPACE RGB_COLOURSPACE_DJI_D_GAMUT ...
    colour.models.DON_RGB_4_COLOURSPACE RGB_COLOURSPACE_DON_RGB_4 ...
    colour.models.DRAGON_COLOR_2_COLOURSPACE RGB_COLOURSPACE_DRAGON_COLOR_2 ...
    colour.models.DRAGON_COLOR_COLOURSPACE RGB_COLOURSPACE_DRAGON_COLOR ...
    colour.models.ECI_RGB_V2_COLOURSPACE RGB_COLOURSPACE_ECI_RGB_V2 ...
    colour.models.EKTA_SPACE_PS_5_COLOURSPACE RGB_COLOURSPACE_EKTA_SPACE_PS_5 ...
    colour.models.ERIMM_RGB_COLOURSPACE RGB_COLOURSPACE_ERIMM_RGB ...
    colour.models.FILMLIGHT_E_GAMUT_COLOURSPACE RGB_COLOURSPACE_FILMLIGHT_E_GAMUT ...
    colour.models.F_GAMUT_COLOURSPACE RGB_COLOURSPACE_F_GAMUT ...
    colour.models.MAX_RGB_COLOURSPACE RGB_COLOURSPACE_MAX_RGB ...
    colour.models.NTSC_1953_COLOURSPACE RGB_COLOURSPACE_NTSC1953 ...
    colour.models.NTSC_1987_COLOURSPACE RGB_COLOURSPACE_NTSC1987 ...
    colour.models.P3_D65_COLOURSPACE RGB_COLOURSPACE_P3_D65 ...
    colour.models.PAL_SECAM_COLOURSPACE RGB_COLOURSPACE_PAL_SECAM ...
    colour.models.POINTER_GAMUT_BOUNDARIES CCS_POINTER_GAMUT_BOUNDARY ...
    colour.models.POINTER_GAMUT_DATA DATA_POINTER_GAMUT_VOLUME ...
    colour.models.POINTER_GAMUT_ILLUMINANT CCS_ILLUMINANT_POINTER_GAMUT ...
    colour.models.PROPHOTO_RGB_COLOURSPACE RGB_COLOURSPACE_PROPHOTO_RGB ...
    colour.models.PROTUNE_NATIVE_COLOURSPACE RGB_COLOURSPACE_PROTUNE_NATIVE ...
    colour.models.RED_COLOR_2_COLOURSPACE RGB_COLOURSPACE_RED_COLOR_2 ...
    colour.models.RED_COLOR_3_COLOURSPACE RGB_COLOURSPACE_RED_COLOR_3 ...
    colour.models.RED_COLOR_4_COLOURSPACE RGB_COLOURSPACE_RED_COLOR_4 ...
    colour.models.RED_COLOR_COLOURSPACE RGB_COLOURSPACE_RED_COLOR ...
    colour.models.RED_WIDE_GAMUT_RGB_COLOURSPACE RGB_COLOURSPACE_RED_WIDE_GAMUT_RGB ...
    colour.models.RIMM_RGB_COLOURSPACE RGB_COLOURSPACE_RIMM_RGB ...
    colour.models.ROMM_RGB_COLOURSPACE RGB_COLOURSPACE_ROMM_RGB ...
    colour.models.RUSSELL_RGB_COLOURSPACE RGB_COLOURSPACE_RUSSELL_RGB ...
    colour.models.SHARP_RGB_COLOURSPACE RGB_COLOURSPACE_SHARP_RGB ...
    colour.models.SMPTE_240M_COLOURSPACE RGB_COLOURSPACE_SMPTE_240M ...
    colour.models.SMPTE_C_COLOURSPACE RGB_COLOURSPACE_SMPTE_C ...
    colour.models.S_GAMUT3_CINE_COLOURSPACE RGB_COLOURSPACE_S_GAMUT3_CINE ...
    colour.models.S_GAMUT3_COLOURSPACE RGB_COLOURSPACE_S_GAMUT3 ...
    colour.models.S_GAMUT_COLOURSPACE RGB_COLOURSPACE_S_GAMUT ...
    colour.models.VENICE_S_GAMUT3_CINE_COLOURSPACE RGB_COLOURSPACE_VENICE_S_GAMUT3_CINE ...
    colour.models.VENICE_S_GAMUT3_COLOURSPACE RGB_COLOURSPACE_VENICE_S_GAMUT3 ...
    colour.models.V_GAMUT_COLOURSPACE RGB_COLOURSPACE_V_GAMUT ...
    colour.models.XTREME_RGB_COLOURSPACE RGB_COLOURSPACE_XTREME_RGB ...
    colour.models.oetf_BT2020 eotf_inverse_BT2020 ...
    colour.models.sRGB_COLOURSPACE RGB_COLOURSPACE_sRGB ...

    colour.notation

    • The colour.notation.RGB_to_HEX definition will now clip negative values and the whole input array will be normalised to the maximum value if values over 1 are encountered. (@KelSolaar)

    colour.plotting

    Object Signature Author
    colour.plotting.plot_multi_colour_swatches plot_multi_colour_swatches(colour_swatches, width=1, height=1, spacing=0, columns=None, direction='+y', text_kwargs=None, background_colour=(1.0, 1.0, 1.0), compare_swatches=None, **kwargs) @KelSolaar
    colour.plotting.plot_image plot_image(image, imshow_kwargs=None, text_kwargs=None, **kwargs) ...
    colour.plotting.plot_sds_in_chromaticity_diagram_CIE1931 plot_sds_in_chromaticity_diagram_CIE1931(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_kwargs=None, chromaticity_diagram_callable_CIE1931=plot_chromaticity_diagram_CIE1931, **kwargs) ...
    colour.plotting.plot_sds_in_chromaticity_diagram_CIE1960UCS plot_sds_in_chromaticity_diagram_CIE1960UCS(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_kwargs=None, chromaticity_diagram_callable_CIE1960UCS=plot_chromaticity_diagram_CIE1960UCS, **kwargs) ...
    colour.plotting.plot_sds_in_chromaticity_diagram_CIE1976UCS plot_sds_in_chromaticity_diagram_CIE1976UCS(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_kwargs=None, chromaticity_diagram_callable_CIE1976UCS=plot_chromaticity_diagram_CIE1976UCS, **kwargs) ...
    colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931 plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1931=plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931, scatter_kwargs=None, **kwargs) ...
    colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1960UCS=plot_RGB_colourspaces_in_chromaticity_diagram_CIE1960UCS, scatter_kwargs=None, **kwargs) ...
    colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1976UCS=plot_RGB_colourspaces_in_chromaticity_diagram_CIE1976UCS, scatter_kwargs=None, **kwargs) ...
    colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931 plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931(chromaticity_diagram_callable_CIE1931=plot_chromaticity_diagram_CIE1931, chromaticity_diagram_clipping=False, ellipse_kwargs=None, **kwargs) ...
    colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS(chromaticity_diagram_callable_CIE1960UCS=plot_chromaticity_diagram_CIE1960UCS, chromaticity_diagram_clipping=False, ellipse_kwargs=None, **kwargs) ...
    colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS(chromaticity_diagram_callable_CIE1976UCS=plot_chromaticity_diagram_CIE1976UCS, chromaticity_diagram_clipping=False, ellipse_kwargs=None, **kwargs) ...
    colour.plotting.plot_constant_hue_loci plot_constant_hue_loci(data, model, scatter_kwargs=None, **kwargs) ...
    colour.plotting.plot_planckian_locus_in_chromaticity_diagram_CIE1931 plot_planckian_locus_in_chromaticity_diagram_CIE1931(illuminants=None, annotate_kwargs=None, chromaticity_diagram_callable_CIE1931=plot_chromaticity_diagram_CIE1931, planckian_locus_callable_CIE1931=plot_planckian_locus_CIE1931, **kwargs) ...
    colour.plotting.plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(illuminants=None, annotate_kwargs=None, chromaticity_diagram_callable_CIE1960UCS=plot_chromaticity_diagram_CIE1960UCS, planckian_locus_callable_CIE1960UCS=plot_planckian_locus_CIE1960UCS, **kwargs) ...
    Object Access Author
    colour.plotting.quad colour.geometry.primitive_vertices_quad_mpl @KelSolaar
    colour.plotting.grid colour.geometry.primitive_vertices_grid_mpl ...
    colour.plotting.cube colour.geometry.primitive_vertices_cube_mpl ...
    Object Name Author
    colour.plotting.ASTMG173_DIRECT_CIRCUMSOLAR SD_ASTMG173_DIRECT_CIRCUMSOLAR @KelSolaar
    colour.plotting.ASTMG173_ETR SD_ASTMG173_ETR ...
    colour.plotting.ASTMG173_GLOBAL_TILT SD_ASTMG173_GLOBAL_TILT ...
    💅 colour.plotting.COLOUR_STYLE_CONSTANTS CONSTANTS_COLOUR_STYLE
    colour.plotting.COLOUR_ARROW_STYLE CONSTANTS_ARROW_STYLE ...

    colour.quality

    Object Name Author
    colour.quality.CQS_Specification ColourRendering_Specification_CQS @KelSolaar
    colour.quality.CRI_Specification ColourRendering_Specification_CRI ...
    colour.quality.TCS_SDS SDS_TCS ...
    colour.quality.VS_SDS SDS_VS ...

    colour.recovery

    Object Signature Author
    colour.recovery.XYZ_to_sd_Meng2015 XYZ_to_sd_Meng2015(XYZ, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].copy().align(DEFAULT_SPECTRAL_SHAPE_MENG_2015), illuminant=sd_ones(DEFAULT_SPECTRAL_SHAPE_MENG_2015), optimisation_kwargs=None, **kwargs) @KelSolaar
    Object Name Author
    colour.quality.SMITS_1999_SDS SDS_SMITS1999 @KelSolaar

    colour.temperature

    Object Signature Author
    colour.temperature.CCT_to_xy_Hernandez1999 CCT_to_xy_Hernandez1999(CCT, optimisation_kwargs=None, **kwargs) @KelSolaar
    colour.temperature.CCT_to_xy_McCamy1992 CCT_to_xy_McCamy1992(CCT, optimisation_kwargs=None, **kwargs) ...
    colour.temperature.uv_to_CCT_Krystek1985 uv_to_CCT_Krystek1985(uv, optimisation_kwargs=None, **kwargs) ...
    colour.temperature.xy_to_CCT_CIE_D xy_to_CCT_CIE_D(xy, optimisation_kwargs=None, **kwargs) ...
    colour.temperature.xy_to_CCT_Kang2002 xy_to_CCT_Kang2002(xy, optimisation_kwargs=None, **kwargs) ...

    colour.utilities

    Object Signature Author
    colour.utilities.as_float as_float(a, dtype=None) @KelSolaar
    colour.utilities.as_float_array as_float_array(a, dtype=None) ...
    colour.utilities.as_int as_int(a, dtype=None) ...
    colour.utilities.as_int_array as_int_array(a, dtype=None) ...
    colour.utilities.filter_warnings filter_warnings(colour_runtime_warnings=None, colour_usage_warnings=None, colour_warnings=None, python_warnings=None)
    colour.utilities.metric_mse metric_mse(a, b, axis=None) ...
    colour.utilities.metric_psnr metric_psnr(a, b, max_a=1, axis=None) ...
    colour.utilities.suppress_warnings suppress_warnings(colour_runtime_warnings=None, colour_usage_warnings=None, colour_warnings=None, python_warnings=None)

    colour.volume

    Object Name Author
    colour.ILLUMINANTS_OPTIMAL_COLOUR_STIMULI OPTIMAL_COLOUR_STIMULI_ILLUMINANTS @KelSolaar
  • v0.3.15 Changes

    January 25, 2020

    Colour 0.3.15 - Alpha Milestone

    🔋 Features

    colour.colorimetry

    The typical CIE LED illuminants spectral power distributions and chromaticity coordinates have been added to the datasets: (@KelSolaar)

    • LED-B1
    • LED-B2
    • LED-B3
    • LED-B4
    • LED-B5
    • LED-BH1
    • LED-RGB1
    • LED-V1
    • LED-V2
      image

    The recommended indoor illuminants ID65 and ID50 spectral power distributions and chromaticity coordinates have been added to the datasets. (@KelSolaar)
    image

    Add colour.colorimetry.sds_and_multi_sds_to_multi_sds definition that converts given spectral and multi-spectral distributions to multi-spectral distributions. (@KelSolaar)

    colour.models

    colour.plotting

    • Importing colour is enough to be able to plot in-place of importing colour.plotting: (@KelSolaar)

      >>> import colour>>> colour.plotting.plot_image<function plot_image at 0x11e6e47a0>

    colour.quality

    🛠 Fixes

    colour

    Various fixes have been implemented to ensure compatibility with Python 3.8 and Numpy 1.18. (@KelSolaar, @MaxSchambach, @mzszym)

    📚 Class methods were missing documentation as a consequence of adopting the new documentation build process, this has been addressed accordingly.

    colour.io

    colour.notation

    • Fix incorrect Domain-Range scale in Munsell Renotation System implementation. (@KelSolaar)

    colour.temperature

    • colour.temperature.CCT_to_uv_Krystek1985 definition was incorrectly implemented. Incorrect reading of the reference publications ended up with exponentiations being different, e.g. 10**4 was replaced with 10e4. (@OlliNiemitalo)

    🔄 Changes

    colour.algebra

    • colour.algebra.cartesian_to_spherical and colour.algebra.spherical_to_cartesian use ISO conversion convention. ρ is in range [0, +inf], θ is in range [0, pi] radians, i.e. [0, 180] degrees, and φ is in range [-pi, pi] radians, i.e. [-180, 180] degrees.

    colour.volume

    • colour.is_within_visible_spectrum: (@KelSolaar)
      • Signature: XYZ_outer_surface(XYZ, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].clone().align(DEFAULT_SPECTRAL_SHAPE_XYZ_OUTER_SURFACE), illuminant=sd_ones(DEFAULT_SPECTRAL_SHAPE_XYZ_OUTER_SURFACE), tolerance=None, **kwargs)
    • colour.volume.XYZ_outer_surface: (@KelSolaar)
      • Signature: XYZ_outer_surface(cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].clone().align(DEFAULT_SPECTRAL_SHAPE_XYZ_OUTER_SURFACE), illuminant=sd_ones(DEFAULT_SPECTRAL_SHAPE_XYZ_OUTER_SURFACE), **kwargs)
      • Implementation: The generated CIE XYZ tristimulus values are not normalised anymore, this will only affect computation if a different illuminant than CIE Illuminant E is chosen.

    colour.plotting

    • colour.plotting.common.wrap_title: (@KelSolaar)
      • Remove