Changelog History
Page 1
-
v0.4.7 Changes
December 06, 2025Colour 0.4.7 - Alpha Milestone
🔋 Features
Dependencies
- 👌 Support for Python 3.14 was implemented. (#1379, @ KelSolaar)
- scipy has been made optional.
- imageio has been made optional.
- typing-extensions requirement has been dropped.
📦 The following scientific packages minimum versions are required:
- numpy >= 2.0.0
- scipy >= 1.13.0
- matplotlib >= 3.9
- networkx >= 3.3
- pandas >= 2.2
📚 Documentation
- ✏️ Each documented object has been verified and processed with a LLM to improve consistency and correct typos and mistakes. (#1352, #1357, @KelSolaar, Claude Code)
colour.adaptation- Implement support for Li (2025) chromatic adaptation transform with
colour.chromatic_adaptation_Li2025definition. (#1349, #1356, @UltraMo114, @KelSolaar, Claude Code)
colour.appearance- Implement support for sCAM colour appearance model with
colour.XYZ_to_sCAMandcolour.sCAM_to_XYZdefinitions. (#1349, #1356, @UltraMo114, @KelSolaar, Claude Code)
colour.io- The
colour.LUT3D.invertmethod 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_indexandcolour.difference.XYZ_to_metamerism_indexdefinitions. (#1374, @lassefschmidt)
colour.modelsImplement support for sUCS colour space model with
colour.XYZ_to_sUCS,colour.sUCS_to_XYZ,colour.models.sUCS_Iab_to_sUCS_IChandcolour.models.sUCS_ICh_to_sUCS_Iabdefinitions. (#1349, #1356, @UltraMo114, @KelSolaar, Claude Code)Implement Color Interop Forum recommendation for ColorSpace Encodings for Texture Assets and CG Rendering. (#1316, @KelSolaar)
The following RGB colourspaces were added:
colour.models.RGB_COLOURSPACE_LIN_REC709_SCENEcolour.models.RGB_COLOURSPACE_LIN_P3D65_SCENEcolour.models.RGB_COLOURSPACE_LIN_REC2020_SCENEcolour.models.RGB_COLOURSPACE_LIN_ADOBERGB_SCENEcolour.models.RGB_COLOURSPACE_LIN_CIEXYZD65_SCENEcolour.models.RGB_COLOURSPACE_SRGB_REC709_SCENEcolour.models.RGB_COLOURSPACE_G22_REC709_SCENEcolour.models.RGB_COLOURSPACE_G18_REC709_SCENEcolour.models.RGB_COLOURSPACE_SRGB_AP1_SCENEcolour.models.RGB_COLOURSPACE_G22_AP1_SCENEcolour.models.RGB_COLOURSPACE_SRGB_P3D65_SCENEcolour.models.RGB_COLOURSPACE_G22_ADOBERGB_SCENE
The following aliases were added:
lin_ap1_scenelin_ap0_scenelin_rec709_scenelin_p3d65_scenelin_rec2020_scenelin_adobergb_scenelin_ciexyzd65_scenesrgb_rec709_sceneg22_rec709_sceneg18_rec709_scenesrgb_ap1_sceneg22_ap1_scenesrgb_p3d65_sceneg22_adobergb_sceneImplement support for Filmlight E-Gamut 2 RGB colourspace with
colour.models.RGB_COLOURSPACE_FILMLIGHT_E_GAMUT_2attribute. (#1323, @nick-shaw)Implement support for Fujifilm F-Gamut C RGB colourspace with
colour.models.RGB_COLOURSPACE_F_GAMUT_Cattribute. (#1317, @KelSolaar)Implement support for Xiaomi Mi-Log Profile with
colour.models.log_encoding_MiLogandcolour.models.log_decoding_MiLogdefinitions. (#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_tmmthat 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_tmmandcolour.phenomena.multilayer_tmmdefinitions compute thin film and multilayer reflectance / transmittance respectively.colour.phenomena.snell_lawcolour.phenomena.polarised_light_magnitude_elementscolour.phenomena.polarised_light_reflection_amplitudecolour.phenomena.polarised_light_reflection_coefficientcolour.phenomena.polarised_light_transmission_amplitudecolour.phenomena.polarised_light_transmission_coefficientcolour.phenomena.TransferMatrixResultcolour.phenomena.matrix_transfer_tmmcolour.phenomena.light_water_molar_refraction_Schiebener1990colour.phenomena.light_water_refractive_index_Schiebener1990colour.phenomena.thin_film_tmmcolour.phenomena.multilayer_tmm
New plotting definitions were added, most notable ones being
colour.plotting.plot_thin_film_iridescence,colour.plotting.plot_thin_film_reflectance_mapandcolour.plotting.plot_multi_layer_stack.colour.plotting.plot_single_layer_thin_filmcolour.plotting.plot_multi_layer_thin_filmcolour.plotting.plot_thin_film_comparisoncolour.plotting.plot_thin_film_spectrumcolour.plotting.plot_thin_film_iridescencecolour.plotting.plot_thin_film_reflectance_mapcolour.plotting.plot_multi_layer_stack
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_indexdefinition now also supportscolour.MultiSpectralDistributionsas 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
- scipy has been made optional to reduce import times. (#1375, #1376, @KelSolaar)
colour.algebra- Optimise
colour.algebra.table_interpolation_trilinearandcolour.algebra.table_interpolation_tetrahedraldefinitions for 1.3x performance improvement. (b8e1583, @KelSolaar, Claude Code)
colour.temperature- Vectorise
colour.temperature.uv_to_CCT_Robertson1968andcolour.temperature.CCT_to_uv_Robertson1968definitions for 30x and 90x performance improvement. (#1367, @KelSolaar, Claude Code)
🛠 Fixes
colour.utilities- Ensure that
colour.utilities.tsplitdefinition returns a contiguous copy of the input array. (9ba813d, @KelSolaar)
🔄 Changes
colour.algebra- 👍 The
colour.algebra.sdiv_modecontext manager andcolour.algebra.sdivdefinition 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.EPSILONwith a warning.
colour.colorimetry- ⚡️ The
colour.SpectralDistribution.interpolatedefinition 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.interpolatecolour.SpectralDistribution.aligncolour.MultiSpectralDistributions.interpolatecolour.MultiSpectralDistributions.aligncolour.colorimetry.reshape_sdcolour.colorimetry.reshape_msds
colour.modelsObject Name Author colour.IPT_hue_anglecolour.models.IPT_hue_angle@KelSolaar -
v0.4.6 Changes
October 11, 2024Colour 0.4.6 - Alpha Milestone
🛠 Fixes
Dependencies
- 📄 trimesh was incorrectly added as a required dependency during the uv migration. (4649c11, @KelSolaar)
colour.models- Revert c25934e which incorrectly changed Canon Cinema Gamut whitepoint to D55. (92dcd6d, @KelSolaar)
-
v0.4.5 Changes
October 10, 2024Colour 0.4.5 - Alpha Milestone
🔋 Features
Dependencies
- 👌 Support for Python 3.13 was implemented. (#1302, @ KelSolaar)
- 👌 Support for Numpy 2 was implemented. (#1279, @KelSolaar)
- 📦 pygraphviz was replaced with pydot so that installation is easier:
pygraphvizneeds to be built , which is not trivial, whereaspydotis a pure Python package.
📦 The following scientific packages minimum versions are required:
- numpy >= 1.24
- scipy >= 1.10
- matplotlib >= 3.7
- networkx >= 3
- pandas >= 2
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.jenvJSON 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.Pathtype. (ff4fe99, @KelSolaar)
colour.adaptation- Implement support for vK20 chromatic adaptation transform with
colour.adaptation.matrix_chromatic_adaptation_vk20andcolour.adaptation.chromatic_adaptation_vK20definitions. (#1131, @KelSolaar)
colour.characterisation- Add the ColorChecker SG chromaticity coordinates with the
colour.CCS_COLOURCHECKERS["ColorCheckerSG - Before November 2014"]andcolour.CCS_COLOURCHECKERS["ColorCheckerSG - After November 2014"]attribute keys.
colour.colorimetry- Use
shapeif passed, to also reshape thecolour.continuous.AbstractContinuousSignalsub-classes incolour.colorimetry.sd_to_XYZ_integrationdefinition. (#1250, @KelSolaar)
colour.modelsProgrammatically 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_CIELCHabcolour.hdr_CIELCHab_to_hdr_CIELabcolour.Hunter_Lab_to_Hunter_LCHabcolour.Hunter_LCHab_to_Hunter_Labcolour.Hunter_Rdab_to_Hunter_RdCHabcolour.Hunter_RdCHab_to_Hunter_Rdabcolour.ICaCb_to_ICHabcolour.ICHab_to_ICaCbcolour.ICtCp_to_ICHtpcolour.ICHtp_to_ICtCpcolour.IgPgTg_to_IgCHptcolour.IgCHpt_to_IgPgTgcolour.IPT_to_ICHcolour.ICH_to_IPTcolour.Izazbz_to_IzCHabcolour.IzCHab_to_Izazbzcolour.Jzazbz_to_JzCHabcolour.JzCHab_to_Jzazbzcolour.hdr_IPT_to_hdr_ICHcolour.hdr_ICH_to_hdr_IPTcolour.Oklab_to_Oklchcolour.Oklch_to_Oklabcolour.ProLab_to_ProLCHabcolour.ProLCHab_to_ProLabcolour.IPT_Ragoo2021_to_ICH_Ragoo2021colour.ICH_Ragoo2021_to_IPT_Ragoo2021
* Now programmatically defined
colour.utilitiesPort-Based Nodes and Graphs (#1277, @KelSolaar)
👍 6 new classes were introduced to support for a port-based node-graph:
colour.utilities.Portcolour.utilities.PortNodecolour.utilities.PortGraphcolour.utilities.Forcolour.utilities.ParallelForThreadcolour.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")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_msdsdefinition did not always copy the converted spectral distributions and was causing seemingly random unit tests failure. (891d364, @KelSolaar) - Fix issue when passing a
colour.MultiSpectralDistributionstocolour.sd_to_XYZdefinition using the ASTM E308 method. (20fb963, @KelSolaar, @gul916)
colour.io- Ensure that
colour.io.process_image_OpenColorIOdefinition handles non-contiguous arrays. (387c9e5, @nick-shaw, @KelSolaar)
colour.models- Change Canon Cinema Gamut whitepoint to D55. (c25934e, @MrLixm, @KelSolaar)
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.algebraObject Name Author colour.algebra.vector_dotvecmul@KelSolaar colour.plottingObject 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, 2023Colour 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=Trueenvironment 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_AppleLogProfileandcolour.models.log_decoding_AppleLogProfiledefinitions. (@KelSolaar)
colour.plotting➕ Add new definitions to generate data useful for other plotting definitions and used by colour-visuals: (@KelSolaar)
colour.plotting.lines_daylight_locuscolour.plotting.lines_planckian_locuscolour.plotting.lines_pointer_gamutcolour.plotting.lines_spectral_locus
🛠 Fixes
colour.continuous- Ensure that
colour.continuous.AbstractContinuousFunctionclass and sub-classes, e.g.colour.SpectralDistributionclass, can be pickled. (#66c26b6, @KelSolaar)
colour.difference- Fix numerical precision issue in
colour.difference.delta_E_CIE1994definition. (#1206, @volrak, @KelSolaar)
colour.utilities- 🛠 Fix issue in
colour.utilities.verbose.multiline_reprdefinition when an attribute representation isNone. (#1466, @KelSolaar)
🔄 Changes
✅ Unit Tests
- ✅ We have changed our unit tests to use
np.testing.assert_allcloserather thannp.testing.assert_array_almost_equalto help with tests failing on Github Actions because of minor precision issues when usingpytest-xdist, multi-threading and caching. (@KelSolaar)
colour.constantsObject Name Author colour.constants.DEFAULT_INT_DTYPEDTYPE_INT_DEFAULT@KelSolaar colour.constants.DEFAULT_FLOAT_DTYPEDTYPE_FLOAT_DEFAULT... - 📦 Various new literals have been added to help packages using
-
v0.4.3 Changes
August 26, 2023Colour 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:
- flake8
- 💅 pydocstyle
- ⬆️ pyupgrade
🐎 We also replaced mypy with pyright for performance reasons. We took that opportunity to simplify our type annotations.
The
colour.XYZ_to_RGBandcolour.RGB_to_XYZdefinition 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:
- numpy >= 1.22
- scipy >= 1.8
- matplotlib >= 3.5
- networkx >= 2.7
- pandas >= 1.4
🔋 Features
colour.characterisation- Add TE226 V2 colour checker reference values. (#1113, #901, @Rusching)
- Add
colour.apply_matrix_colour_correctiondefinition andcolour.APPLY_MATRIX_COLOUR_CORRECTION_METHODSattribute to conveniently apply a colour-correction matrix computed with thecolour.matrix_colour_correctiondefinition. (@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.SpectralDistributionandcolour.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_Yrgandcolour.Yrg_to_XYZdefinitions. (#1152, @KelSolaar) - Implement support for Fujifilm F-Log2 encodings with
colour.models.log_decoding_FLog2andcolour.models.log_encoding_FLog2definitions. (#1076, @zachlewis) - Implement support for PLASA ANSI E1.54 colourspace with
colour.models.RGB_COLOURSPACE_PLASA_ANSI_E154attribute. (#1193, @KelSolaar)
colour.notation- Implement support for CSS Color 3 with
colour.notation.CSS_COLOR_3attribute andcolour.notation.keyword_to_RGB_CSSColor3definition. (#1140, @KelSolaar)
colour.plottingMake RGB encoding optional in
colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931,colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCSandcolour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCSdefinitions. (@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_locusdefinition. (@KelSolaar)Add a new
planckian_locus_use_miredskeyword argument tocolour.plotting.temperature.plot_planckian_locusdefinition. (@KelSolaar)
colour.temperature- Add
colour.temperature.mired_to_CCTandcolour.temperature.CCT_to_mireddefinitions to perform micro reciprocal degree and CCT conversions. (#1114, @KelSolaar) - Add
colour.temperature.XYZ_to_CCT_Ohno2013andcolour.temperature.CCT_to_XYZ_Ohno2013convenient definitions. (#1120, @tjdcs)
colour.utilities- ➕ Add
colour.utilities.int_digestdefinition using xxhash to compute 64-bit integer hashes. (#1149, @KelSolaar, @tjdcs)
🐎 Performance
- The Colour Fidelity Index (2017), i.e.
colour.quality.colour_fidelity_index_CIE2017definition, and TM 30-18, i.e.colour.quality.colour_fidelity_index_ANSIIESTM3018definition, metrics performance has been improved by x100 thanks to overall optimizations, e.g.colour.temperature.uv_to_CCT_Ohno2013definition is x5 faster. (#1120, @tjdcs, @KelSolaar)
🛠 Fixes
Dependencies
- 🚀 Implement support for Numpy 1.24.0. (#1087, @KelSolaar)
colour.io- Fix incorrect bit-depth conversion in
colour.io.write_image_OpenImageIOdefinition when writing 16-bit integer images (82ef2c4, @nick-shaw, @KelSolaar)
colour.colorimetry- Fix incorrect
colour.colorimetry.sd_gaussian_fwhmdefinition output (#1184, @EricFlyMeToTheMoon, @tjdcs, @KelSolaar)
colour.models- Implement various minor corrections from Sarifuddin (2021) to
colour.RGB_to_HCLdefinition. (1a580ef, @KelSolaar)
colour.phenomena- Fix incorrect CO2 concentration scaling in
colour.phenomena.rayleigh.F_air_Bodhaine1999definition. (#307, #1167, @chnmasta05, @KelSolaar)
colour.utilities- 🛠 Fix dimensionality reduction issue in
colour.utilities.as_floatdefinition that was causing issue with 1-pixel images processing. (#1189, @KelSolaar, @MrLixm)
🔄 Changes
colour.colorimetryObject 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_Ohno2005sd_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_idtdefinition is whitepoint preserving using thecolour.characterisation.optimisation_factory_rawtoaces_v1optimisation factory. (@KelSolaar) - Implement support for Finlayson et al. (2015) root-polynomials colour correction with
colour.characterisation.optimisation_factory_Oklab_15optimisation factory. (@KelSolaar) - The
colour.matrix_idtdefinition optimisation factories are now returning 4 objects. (@KelSolaar)
colour.models- The
colour.XYZ_to_xyandcolour.XYZ_to_xyYdefinitions do no return the parameter illuminant chromaticities when the luminanceYis 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_Munish2021XYZ_to_IPT_Ragoo2021@blue-j, @KelSolaar colour.IPT_Munish2021_to_XYZIPT_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, 2022Colour 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:
- numpy >= 1.20
- scipy >= 1.7
- matplotlib >= 3.4
- networkx >= 2.6
- pandas >= 1.3
🔋 Features
colour.appearance- Implement support for Hellwig and Fairchild (2022) colour appearance model with
colour.XYZ_to_Hellwig2022andcolour.Hellwig2022_to_XYZdefinitions. (#972 @KelSolaar) - Implement support for CIECAM16 colour appearance model with
colour.XYZ_to_CIECAM16andcolour.CIECAM16_to_XYZdefinitions. (#1015, @KelSolaar)
colour.colorimetry- ➕ Add convenient
colour.SpectralShape.wavelengthsproperty. (@KelSolaar)
colour.difference- Implement support for Recommendation ITU-R BT.2124 with
colour.difference.delta_E_ITPdefinition. (#981, @sabarish-srinivasan)
colour.io- Implement simple wrapper for the Color Transformation Language (CTL) with the
colour.io.ctl_renderandcolour.io.process_image_ctldefinitions. (#977, @KelSolaar)
colour.modelsImplement support for Munish Ragoo and Farup (2021) Optimised IPT colourspace with
colour.XYZ_to_IPT_Munish2021andcolour.IPT_Munish2021_to_XYZdefinitions. (#990, @KelSolaar)🌲 Implement support for Leica L-Log log encodings with
colour.models.log_encoding_LLogandcolour.models.log_decoding_LLogdefinitions. (#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_ITUTH273andcolour.MATRIX_COEFFICIENTS_ITUTH273attributes andcolour.models.describe_video_signal_colour_primaries,colour.models.describe_video_signal_transfer_characteristicsandcolour.models.describe_video_signal_matrix_coefficientsdefinitions. (#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_4attribute andcolour.models.log_encoding_ARRILogC4andcolour.models.log_decoding_ARRILogC4definitions. (#1056, @KelSolaar)
colour.recoveryGSoC - 2021
- Implement support for Jiang et al. (2013) camera RGB sensitivities recovery with
colour.recovery.RGB_to_msds_camera_sensitivities_Jiang2013definition. (#1002, @villirion, @KelSolaar)
colour.utilities👍 The
colour.utilities.CanonicalMappingandcolour.utilities.LazyCanonicalMapping, fomerlycolour.utilities.CaseInsensitiveMappingandcolour.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_Ohno2013definition is ~100x faster. (#951, @KelSolaar)colour.temperature.CCT_to_uv_Ohno2013definition is ~425x faster. (#951, @KelSolaar)- 🚦 Creation of the
colour.Signalclass underlying continuous function now happens lazilly. (#1057, @tjdcs) colour.SpectralDistribution.shapeproperty getter is faster by ensuring monotonicity of thecolour.SpectralDistribution.domainproperty. (#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.algebraObject Access Change Author colour.algebra.ellipse_coefficients_general_formcolour.geometry.ellipse_coefficients_general_form@KelSolaar colour.algebra.ellipse_coefficients_canonical_formcolour.geometry.ellipse_coefficients_canonical_form... colour.algebra.point_at_angle_on_ellipsecolour.geometry.point_at_angle_on_ellipse... colour.algebra.ellipse_fitting_Halir1998colour.geometry.ellipse_fitting_Halir1998... colour.algebra.ELLIPSE_FITTING_METHODScolour.geometry.ELLIPSE_FITTING_METHODS... colour.algebra.ellipse_fittingcolour.geometry.ellipse_fitting... colour.algebra.extend_line_segmentcolour.geometry.extend_line_segment... colour.algebra.extend_line_segmentcolour.geometry.extend_line_segment... colour.algebra.extend_line_segmentcolour.geometry.extend_line_segment... colour.characterisationObject | Signature ...
-
v0.4.1 Changes
February 25, 2022Colour 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
- 🛠 Fix import issues when trying to import
colourwith Numpy 1.19.x and 1.20.x. (@KelSolaar, @remia)
Distribution
- 🛠 Fix incorrectly generated
setup.pyfile. (@KelSolaar, @kmilos)
colour.colorimetry- Fix intersection filtering in
colour.colorimetry.closest_spectral_locus_wavelengthdefinition. (@KelSolaar, @sobotka)
- 🛠 Fix import issues when trying to import
-
v0.4.0 Changes
February 20, 2022Colour 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
colouris 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
dataclassdecorator 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!
- @aforsythe
- @fredsavoir
- @ilia3101
- @jedypod
- @JGoldstone
- @nick-shaw
- @njwardhan
- @Paul-Sims
- @ramparvathaneni
- @romanovar
- @saransh
- @SGeetansh
- @sobotka
- @villirion
- @zachlewis
🔋 Features
Typing
- 📦 The API has been fully annotated with typing annotations, a new
colour.hintssub-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.tm3018module. 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_REGISTRYattribute for more information. - The
colour.sd_to_XYZandcolour.msds_to_XYZdefinitions 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 withnp.dot.
colour.adaptationGSoC - 2021
- Implement support for Zhai and Luo (2018) chromatic adaptation model with
colour.adaptation.chromatic_adaptation_Zhai2018definition. (@villirion, @KelSolaar)
colour.appearanceGSoC - 2021
- Implement support for Kim, Weyrich and Kautz (2009) colour appearance model with
colour.XYZ_to_Kim2009andcolour.Kim2009_to_XYZdefinitions. (@villirion, @KelSolaar)
- Implement support for ZCAM colour appearance model with the
colour.XYZ_to_ZCAMandcolour.ZCAM_to_XYZdefinitions. (@KelSolaar) - Implement support for Helmholtz-Kohlrausch effect estimation with
colour.HelmholtzKohlrausch_effect_object_Nayatani1997andcolour.HelmholtzKohlrausch_effect_luminous_Nayatani1997definitions. (@ilia3101, @KelSolaar) - Colour appearance models now use a dataclass-like class output instead of the
namedtupleand 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_1definition. (@KelSolaar, @aforsythe)
colour.colorimetry- 👍 Implement support for spectral uniformity computation with
colour.spectral_uniformitydefinition. (@KelSolaar) - Add
colour.TVS_ILLUMINANTSattribute providing a reference for the CIE XYZ tristimulus values of the CIE illuminants. (@KelSolaar) - Ensure that
colour.SpectralShapeand dictKeysViewclass instances can be passed as domain tocolour.SpectralDistributionandcolour.MutliSpectralDistributionsclasses. (@KelSolaar) - ⚡️ The
colour.colorimetry.yellowness_ASTME313definition has been updated to use the recommended Yellowness Index equation as given by ASTME313. The alternative method has been renamed tocolour.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_stressdefinition andcolour.INDEX_STRESS_METHODSattribute. (@KelSolaar) - Implement support for Huang et al. (2015) power-functions improving colour-difference formulas with
colour.difference.power_function_Huang2015definition. (@KelSolaar)
colour.ioGSoC - 2020
- Implement support for LUT 1D, LUT 3x1D and LUT 3D inversion with the
colour.LUT1D.invert,colour.LUT3x1D.invertandcolour.LUT3D.invertmethods. (@njwardhan, @KelSolaar)
GSoC - 2021
- Implement support for UPRTek and Sekonic spectral data parsers with the
colour.SpectralDistribution_UPRTekandcolour.SpectralDistribution_Sekonicclasses. (@SGeetansh, @KelSolaar)
- Implement support for OpenColorIO processor with
colour.io.process_image_OpenColorIOdefinition. (@KelSolaar) - Implement support for SPImtx LUT input and output with new
colour.io.read_LUT_SonySPImtxandcolour.io.write_LUT_SonySPImtxdefinitions andcolour.io.LUTOperatorMatrixsupport class. (@nick-shaw, @KelSolaar, @zachlewis) - The
colour.io.tm2714.Header_IESTM2714class can now be hashed and compared for equality. (@JGoldstone)
colour.modelsGSoC - 2021
- Implement support for Hanbury (2003) IHLS (Improved HLS) colourspace with
colour.RGB_to_IHLSandcolour.IHLS_to_RGBdefinitions. (@SGeetansh, @KelSolaar) - Implement support for DIN99b, DIN99c, and DIN99d refined formulas in
colour.Lab_to_DIN99andcolour.DIN99_to_Labdefinitions. (@SGeetansh) - Implement support for ProLab colourspace with
colour.ProLab_to_XYZandcolour.XYZ_to_ProLabdefinitions. (@SGeetansh, @KelSolaar)
- Implement support for Sarifuddin and Missaoui (2005) HCL colourspace with
colour.RGB_to_HCLandcolour.HCL_to_RGBdefinitions. (@Saransh-cpp, @KelSolaar) - Implement wrapper
colour.XYZ_to_ICTCPandcolour.ICTCP_to_XYZdefinitions. (@KelSolaar) - Implement wrapper
colour.XYZ_to_CAM02LCD,colour.CAM02LCD_to_XYZ,colour.XYZ_to_CAM02SCD,colour.CAM02SCD_to_XYZ,colour.XYZ_to_CAM02UCSand
colour.CAM02UCS_to_XYZdefinitions. (@KelSolaar) - Implement wrapper
colour.XYZ_to_CAM16LCD,colour.CAM16LCD_to_XYZ,colour.XYZ_to_CAM16SCD,colour.CAM16SCD_to_XYZ,colour.XYZ_to_CAM16UCSand
colour.CAM16UCS_to_XYZdefinitions. (@KelSolaar) - Implement support for R'G'B' to Y'CbCr matrices computation with
colour.matrix_YCbCrandcolour.offset_YCbCrdefinitions. (@KelSolaar, @nick-shaw) - Implement support for Oklab colour model with
colour.XYZ_to_Oklabandcolour.Oklab_to_XYZdefinitions. (@KelSolaar) - Implement support for Nikon N-Gamut colourspace and the N-Log log encoding and decoding curves with
colour.models.RGB_COLOURSPACE_N_GAMUTclass andcolour.models.log_encoding_NLOGandcolour.models.log_decoding_NLOGdefinitions. (@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_GAMUTattribute,colour.models.oetf_BlackmagicFilmGeneration5andcolour.models.oetf_inverse_BlackmagicFilmGeneration5definitions. (@KelSolaar) - 👍 Implement support for *DaVinci Inte...
-
v0.3.16 Changes
November 27, 2020Colour 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.interpolateandcolour.MultiSpectralDistributions.interpolatemethods 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.smoothstepdefinition. (@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_LENSEScontaining the ISO 6728 Standard Lens andcolour.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.colorimetryThe 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_zerosandcolour.msds_onesdefinitions. (@KelSolaar)colour.difference- Add
colour.difference.JND_CIE1976attribute 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.geometrysub-package. The following objects are available: (@KelSolaar)Primitives
colour.geometry.primitive_gridcolour.geometry.primitive_cubecolour.PRIMITIVE_METHODScolour.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_spherecolour.PRIMITIVE_VERTICES_METHODScolour.primitive_vertices
colour.modelsGSoC - 2020
Add
colour.models.log_encoding_Log2andcolour.models.log_decoding_Log2log encoding and decoding definitions. (@njwardhan, @KelSolaar)Add
colour.models.exponent_function_basicandcolour.models.exponent_function_monitor_curvedefinitions. (@njwardhan)Add
colour.models.logarithmic_function_basic,colour.models.logarithmic_function_quasilogandcolour.models.logarithmic_function_cameradefinitions. (@njwardhan, @nick-shaw, @KelSolaar)Implement support for IGPGTG colourspace by Hellwig and Fairchild (2020) with the
colour.XYZ_to_IGPGTGandcolour.IGPGTG_to_XYZdefinitions. (@KelSolaar)Implement support for DaVinci Wide Gamut colourspace. (@KelSolaar)
colour.plotting- Implement support for ANSI/IES TM-30-18 Colour Rendition Report. (@enneract, @KelSolaar)
- 👍 Implement support for RGB colourspaces chromatic adaptation in various plotting routines: (@KelSolaar)
colour.qualityGSoC - 2020
- Implement support for CIE 2017 Colour Fidelity Index quality metric computation
colour.quality.colour_fidelity_index_CIE2017definition. (@enneract) - Implement support for ANSI/IES TM-30-18 Colour Fidelity Index quality metric computation
colour.quality.colour_fidelity_index_ANSIIESTM3018definition. (@enneract)
colour.recoveryGSoC - 2020
- Implement support for Jakob and Hanika (2019) spectral upsampling method with the
colour.recovery.XYZ_to_sd_Jakob2019definition. (@enneract, @KelSolaar) - Implement support for Mallett and Yuksel (2019) spectral upsampling method with the
colour.recovery.RGB_to_sd_Mallett2019definition. (@enneract) - Implement support for Otsu, Yamamoto and Hachisuka (2018) spectral upsampling method with the
colour.recovery.XYZ_to_sd_Otsu2018definition. (@enneract, @KelSolaar)
colour.utilities- Float precision can be set globally with the
colour.utilities.set_float_precisiondefinition and theCOLOUR_SCIENCE__FLOAT_PRECISIONenvironment 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
axisargument to thecolour.utilities.metric_mseandcolour.utilities.metric_psnrdefinitions. (@KelSolaar) - ➕ Add
colour.utilities.LazyCaseInsensitiveMappingclass 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.interpolateandcolour.MultiSpectralDistributions.interpolatemethods did not honour the instantiation time interpolation class and were forcibly using either thecolour.SpragueInterpolatororcolour.CubicSplineInterpolatorclasses unless aninterpolatorargument was passed. This behaviour was not desirable and was changed so that if the instantiation time interpolation class is not one ofcolour.SpragueInterpolatororcolour.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.modelscolour.OETF_INVERSESattribute ITU-R BT.2100 HLG key was incorrectly named ITU-R BT.2100 HLD. (@jchwei)colour.HSL_to_RGBdefinition output was incorrect when saturation was equal to 1. (@KelSolaar, @nadersadoughi)
colour.plotting- The
colour.plotting.diagrams.plot_chromaticity_diagramdefinition was not passing anymore the CMFS to the underlyingcolour.plotting.diagrams.plot_spectral_locusandcolour.plotting.diagrams.plot_chromaticity_diagram_coloursdefinitions. (@KelSolaar, @sobotka)
colour.utilities- ⚠ The
colour.utilities.filter_warningsdefinition was not behaving properly and has been fixed. (@KelSolaar)
Examples
colour.plotting.plot_RGB_colourspaces_gamutsdefinition was using an incorrectstyleargument. (@sianyi)
🔄 Changes
colour.adaptationObject Name Author colour.CMCCAT2000_VIEWING_CONDITIONSVIEWING_CONDITIONS_CMCCAT2000@KelSolaar colour.adaptation.BRADFORD_CATCAT_BRADFORD... colour.adaptation.BS_CATCAT_BIANCO2010... colour.adaptation.BS_PC_CATCAT_PC_BIANCO2010... colour.adaptation.CAT02_BRILL_CATCAT_CAT02_BRILL2008... colour.adaptation.CAT02_CATCAT_CAT02... colour.adaptation.CMCCAT2000_CATCAT_CMCCAT2000... colour.adaptation.CMCCAT2000_InductionFactorsInductionFactors_CMCCAT2000... colour.adaptation.CMCCAT97_CATCAT_CMCCAT97... colour.adaptation.FAIRCHILD_CATCAT_FAIRCHILD... colour.adaptation.SHARP_CATCAT_SHARP... colour.adaptation.VON_KRIES_CATCAT_VON_KRIES... colour.adaptation.XYZ_SCALING_CATCAT_XYZ_SCALING... colour.algebra- The
colour.algebra.cartesian_to_sphericalandcolour.algebra.spherical_to_cartesiandefinitions 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_argskernel_kwargs@KelSolaar colour.KernelInterpolator.padding_argspadding_kwargs... colour.appearanceObject Name Author colour.ATD95_SpecificationCAM_Specification_ATD95@KelSolaar colour.CAM16_SpecificationCAM_Specification_CAM16... colour.CAM16_VIEWING_CONDITIONSVIEWING_CONDITIONS_CAM16... colour.CIECAM02_SpecificationCAM_Specification_CIECAM02... colour.CIECAM02_VIEWING_CONDITIONSVIEWING_CONDITIONS_CIECAM02... colour.HUNT_VIEWING_CONDITIONSVIEWING_CONDITIONS_HUNT... colour.Hunt_SpecificationCAM_Specification_Hunt... colour.LLAB_SpecificationCAM_Specification_LLAB... colour.LLAB_VIEWING_CONDITIONSVIEWING_CONDITIONS_LLAB... colour.Nayatani95_SpecificationCAM_Specification_Nayatani95... colour.RLAB_SpecificationCAM_Specification_RLAB... colour.RLAB_VIEWING_CONDITIONSVIEWING_CONDITIONS_RLAB... colour.appearance.CAM16_InductionFactorsInductionFactors_CAM16... colour.appearance.CIECAM02_InductionFactorsInductionFactors_CIECAM02... colour.appearance.Hunt_InductionFactorsInductionFactors_Hunt... colour.appearance.LLAB_InductionFactorsInductionFactors_LLAB... colour.appearance.RLAB_D_FACTORD_FACTOR_RLAB... colour.appearance.chromatic_adaptation_matrix_VonKriesmatrix_chromatic_adaptation_VonKries... colour.blindnessObject Name Author colour.blindness.anomalous_trichromacy_cmfs_Machado2009msds_cmfs_anomalous_trichromacy_Machado2009@KelSolaar colour.blindness.anomalous_trichromacy_matrix_Machado2009matrix_anomalous_trichromacy_Machado2009... colour.blindness.cvd_matrix_Machado2009matrix_cvd_Machado2009... colour.characterisationObject Name Author colour.CAMERA_RGB_SPECTRAL_SENSITIVITIESMSDS_CAMERA_SENSITIVITIES@KelSolaar colour.COLOURCHECKERSCCS_COLOURCHECKERS... colour.COLOURCHECKER_SDSSDS_COLOURCHECKERS... colour.COLOUR_CORRECTION_MATRIX_METHODSMATRIX_COLOUR_CORRECTION_METHODS... colour.DISPLAY_RGB_PRIMARIESMSDS_DISPLAY_PRIMARIES... colour.characterisation.augmented_matrix_Cheung2004matrix_augmented_Cheung2004... colour.characterisation.colour_correction_matrix_Cheung2004matrix_colour_correction_Cheung2004... colour.characterisation.colour_correction_matrix_Finlayson2015matrix_colour_correction_Finlayson2015... colour.characterisation.colour_correction_matrix_Vandermondematrix_colour_correction_Vandermonde... colour.colour_correction_matrixmatrix_colour_correction... colour.colorimetrycolour.sd_blackbodydefinition now returns values in W/sr/m2/nm instead of W/sr/m2/m. See #559 for more background information. (@KelSolaar, @Wagyx, @MichaelMauderer)
colour.colorimetrycolour.colorimetry.sd_CIE_illuminant_D_seriesdefinition return a spectral distribution whose name includes the used chromaticity coordinates and whose interpolator is instantiated fromcolour.algebra.LinearInterpolator. (@KelSolaar)
Object Signature Author colour.MultiSpectralDistributions.alignalign(self, shape, interpolator=None, interpolator_kwargs=None, extrapolator=None, extrapolator_kwargs=None, **kwargs)@KelSolaar colour.MultiSpectralDistributions.extrapolateextrapolate(self, shape, extrapolator=None, extrapolator_kwargs=None, **kwargs)... colour.MultiSpectralDistributions.interpolateinterpolate(self, shape, interpolator=None, interpolator_kwargs=None, **kwargs)... colour.SpectralDistribution.alignalign(self, shape, interpolator=None, interpolator_kwargs=None, extrapolator=None, extrapolator_kwargs=None, **kwargs)... colour.SpectralDistribution.extrapolateextrapolate(self, shape, extrapolator=None, extrapolator_kwargs=None, **kwargs)... colour.SpectralDistribution.interpolateinterpolate(self, shape, interpolator=None, interpolator_kwargs=None, **kwargs)... Object Name Author colour.ASTME308_PRACTISE_SHAPESPECTRAL_SHAPE_ASTME308@KelSolaar colour.CMFSMSDS_CMFS... colour.DEFAULT_SPECTRAL_SHAPESPECTRAL_SHAPE_DEFAULT... colour.HUNTERLAB_ILLUMINANTSTVS_ILLUMINANTS_HUNTERLAB... colour.ILLUMINANTS_SDSSDS_ILLUMINANTS... colour.ILLUMINANTSCCS_ILLUMINANTS... colour.LEFSSDS_LEFS... colour.LIGHT_SOURCES_SDSSDS_LIGHT_SOURCES... colour.LIGHT_SOURCESCCS_LIGHT_SOURCES... colour.MULTI_SD_TO_XYZ_METHODSMSDS_TO_XYZ_METHODS... colour.colorimetry.D_ILLUMINANTS_S_SDSSDS_BASIS_FUNCTIONS_CIE_ILLUMINANT_D_SERIES... colour.colorimetry.LMS_CMFSMSDS_CMFS_LMS... colour.colorimetry.PHOTOPIC_LEFSSDS_LEFS_PHOTOPIC... colour.colorimetry.RGB_CMFSMSDS_CMFS_RGB... colour.colorimetry.SCOTOPIC_LEFSSDS_LEFS_SCOTOPIC... colour.colorimetry.STANDARD_OBSERVERS_CMFSMSDS_CMFS_STANDARD_OBSERVER... colour.colorimetry.multi_sds_to_XYZ_ASTME308msds_to_XYZ_ASTME308... colour.colorimetry.multi_sds_to_XYZ_integrationmsds_to_XYZ_integration... colour.colorimetry.sds_and_multi_sds_to_multi_sdssds_and_msds_to_msds... colour.colorimetry.sds_and_multi_sds_to_sdssds_and_msds_to_sds... colour.multi_sds_to_XYZmsds_to_XYZ... colour.constantsObject Name Author colour.constants.AVOGADRO_CONSTANTCONSTANT_AVOGADRO@KelSolaar colour.constants.BOLTZMANN_CONSTANTCONSTANT_BOLTZMANN... colour.constants.K_MCONSTANT_K_M... colour.constants.KP_MCONSTANT_KP_M... colour.constants.PLANCK_CONSTANTCONSTANT_PLANCK... colour.constants.LIGHT_SPEEDCONSTANT_LIGHT_SPEED... colour.continuousObject Signature Author colour.continuous.MultiSignals.extrapolator_argsextrapolator_kwargs@KelSolaar colour.continuous.MultiSignals.interpolator_argsinterpolator_kwargs... colour.continuous.Signal.extrapolator_argsextrapolator_kwargs... colour.continuous.Signal.interpolator_argsinterpolator_kwargs... colour.correspondingObject Name Author colour.constants.BRENEMAN_EXPERIMENTS_PRIMARIES_CHROMATICITIESBRENEMAN_EXPERIMENT_PRIMARIES_CHROMATICITIES@KelSolaar colour.geometryObject Signature Author colour.geometry.quadprimitive_vertices_quad_mpl(width=1, height=1, depth=0, origin=np.array([0, 0]), axis='+z')@KelSolaar colour.geometry.gridprimitive_vertices_grid_mpl(width=1, height=1, depth=0, width_segments=1, height_segments=1, origin=np.array([0, 0]), axis='+z')... colour.geometry.cubeprimitive_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.ioObject Signature Author colour.LUT1D.applyapply(self, RGB, interpolator=LinearInterpolator, interpolator_kwargs=None, **kwargs)@KelSolaar colour.LUT3x1D.applyapply(self, RGB, interpolator=LinearInterpolator, interpolator_kwargs=None, **kwargs)... colour.LUT3D.applyapply(self, RGB, interpolator=table_interpolation_trilinear, interpolator_kwargs=None, **kwargs)... colour.LutSequence.applyapply(self, RGB, interpolator_1D=LinearInterpolator, interpolator_1D_kwargs=None, interpolator_3D=table_interpolation_trilinear, interpolator_3D_kwargs=None, **kwargs)... colour.modelsObject Signature Author colour.OSA_UCS_to_XYZOSA_UCS_to_XYZ(Ljg, optimisation_kwargs=None, **kwargs)@KelSolaar colour.RGB_ColourspaceRGB_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_XYZRGB_to_XYZ(RGB, illuminant_RGB, illuminant_XYZ, matrix_RGB_to_XYZ, chromatic_adaptation_transform='CAT02', cctf_decoding=None, **kwargs)... colour.XYZ_to_RGBXYZ_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_RICDcolour.characterisation.MSDS_ACES_RICD@KelSolaar Object Name Author colour.RGB_Colourspace.RGB_to_XYZ_matrixmatrix_RGB_to_XYZ@KelSolaar colour.RGB_Colourspace.XYZ_to_RGB_matrixmatrix_XYZ_to_RGB... colour.RGB_Colourspace.use_derived_RGB_to_XYZ_matrixuse_derived_matrix_RGB_to_XYZ... colour.RGB_Colourspace.use_derived_XYZ_to_RGB_matrixuse_derived_matrix_XYZ_to_RGB... colour.RGB_to_RGB_matrixmatrix_RGB_to_RGB... colour.YCBCR_WEIGHTSWEIGHTS_YCBCR... colour.models.ACES_2065_1_COLOURSPACERGB_COLOURSPACE_ACES2065_1... colour.models.ACES_CCT_COLOURSPACERGB_COLOURSPACE_ACESCCT... colour.models.ACES_CC_COLOURSPACERGB_COLOURSPACE_ACESCC... colour.models.ACES_CG_COLOURSPACERGB_COLOURSPACE_ACESCG... colour.models.ACES_PROXY_COLOURSPACERGB_COLOURSPACE_ACESPROXY... colour.models.ADOBE_RGB_1998_COLOURSPACERGB_COLOURSPACE_ADOBE_RGB1998... colour.models.ADOBE_WIDE_GAMUT_RGB_COLOURSPACERGB_COLOURSPACE_ADOBE_WIDE_GAMUT_RGB... colour.models.ALEXA_WIDE_GAMUT_COLOURSPACERGB_COLOURSPACE_ALEXA_WIDE_GAMUT... colour.models.APPLE_RGB_COLOURSPACERGB_COLOURSPACE_APPLE_RGB... colour.models.BEST_RGB_COLOURSPACERGB_COLOURSPACE_BEST_RGB... colour.models.BETA_RGB_COLOURSPACERGB_COLOURSPACE_BETA_RGB... colour.models.BT2020_COLOURSPACERGB_COLOURSPACE_BT2020... colour.models.BT470_525_COLOURSPACERGB_COLOURSPACE_BT470_525... colour.models.BT470_625_COLOURSPACERGB_COLOURSPACE_BT470_625... colour.models.BT709_COLOURSPACERGB_COLOURSPACE_BT709... colour.models.CIE_RGB_COLOURSPACERGB_COLOURSPACE_CIE_RGB... colour.models.CINEMA_GAMUT_COLOURSPACERGB_COLOURSPACE_CINEMA_GAMUT... colour.models.COLOR_MATCH_RGB_COLOURSPACERGB_COLOURSPACE_COLOR_MATCH_RGB... colour.models.DCDM_XYZ_COLOURSPACERGB_COLOURSPACE_DCDM_XYZ... colour.models.DCI_P3_COLOURSPACERGB_COLOURSPACE_DCI_P3_P... colour.models.DCI_P3_P_COLOURSPACERGB_COLOURSPACE_DCI_P3... colour.models.DISPLAY_P3_COLOURSPACERGB_COLOURSPACE_DISPLAY_P3... colour.models.DJI_D_GAMUT_COLOURSPACERGB_COLOURSPACE_DJI_D_GAMUT... colour.models.DON_RGB_4_COLOURSPACERGB_COLOURSPACE_DON_RGB_4... colour.models.DRAGON_COLOR_2_COLOURSPACERGB_COLOURSPACE_DRAGON_COLOR_2... colour.models.DRAGON_COLOR_COLOURSPACERGB_COLOURSPACE_DRAGON_COLOR... colour.models.ECI_RGB_V2_COLOURSPACERGB_COLOURSPACE_ECI_RGB_V2... colour.models.EKTA_SPACE_PS_5_COLOURSPACERGB_COLOURSPACE_EKTA_SPACE_PS_5... colour.models.ERIMM_RGB_COLOURSPACERGB_COLOURSPACE_ERIMM_RGB... colour.models.FILMLIGHT_E_GAMUT_COLOURSPACERGB_COLOURSPACE_FILMLIGHT_E_GAMUT... colour.models.F_GAMUT_COLOURSPACERGB_COLOURSPACE_F_GAMUT... colour.models.MAX_RGB_COLOURSPACERGB_COLOURSPACE_MAX_RGB... colour.models.NTSC_1953_COLOURSPACERGB_COLOURSPACE_NTSC1953... colour.models.NTSC_1987_COLOURSPACERGB_COLOURSPACE_NTSC1987... colour.models.P3_D65_COLOURSPACERGB_COLOURSPACE_P3_D65... colour.models.PAL_SECAM_COLOURSPACERGB_COLOURSPACE_PAL_SECAM... colour.models.POINTER_GAMUT_BOUNDARIESCCS_POINTER_GAMUT_BOUNDARY... colour.models.POINTER_GAMUT_DATADATA_POINTER_GAMUT_VOLUME... colour.models.POINTER_GAMUT_ILLUMINANTCCS_ILLUMINANT_POINTER_GAMUT... colour.models.PROPHOTO_RGB_COLOURSPACERGB_COLOURSPACE_PROPHOTO_RGB... colour.models.PROTUNE_NATIVE_COLOURSPACERGB_COLOURSPACE_PROTUNE_NATIVE... colour.models.RED_COLOR_2_COLOURSPACERGB_COLOURSPACE_RED_COLOR_2... colour.models.RED_COLOR_3_COLOURSPACERGB_COLOURSPACE_RED_COLOR_3... colour.models.RED_COLOR_4_COLOURSPACERGB_COLOURSPACE_RED_COLOR_4... colour.models.RED_COLOR_COLOURSPACERGB_COLOURSPACE_RED_COLOR... colour.models.RED_WIDE_GAMUT_RGB_COLOURSPACERGB_COLOURSPACE_RED_WIDE_GAMUT_RGB... colour.models.RIMM_RGB_COLOURSPACERGB_COLOURSPACE_RIMM_RGB... colour.models.ROMM_RGB_COLOURSPACERGB_COLOURSPACE_ROMM_RGB... colour.models.RUSSELL_RGB_COLOURSPACERGB_COLOURSPACE_RUSSELL_RGB... colour.models.SHARP_RGB_COLOURSPACERGB_COLOURSPACE_SHARP_RGB... colour.models.SMPTE_240M_COLOURSPACERGB_COLOURSPACE_SMPTE_240M... colour.models.SMPTE_C_COLOURSPACERGB_COLOURSPACE_SMPTE_C... colour.models.S_GAMUT3_CINE_COLOURSPACERGB_COLOURSPACE_S_GAMUT3_CINE... colour.models.S_GAMUT3_COLOURSPACERGB_COLOURSPACE_S_GAMUT3... colour.models.S_GAMUT_COLOURSPACERGB_COLOURSPACE_S_GAMUT... colour.models.VENICE_S_GAMUT3_CINE_COLOURSPACERGB_COLOURSPACE_VENICE_S_GAMUT3_CINE... colour.models.VENICE_S_GAMUT3_COLOURSPACERGB_COLOURSPACE_VENICE_S_GAMUT3... colour.models.V_GAMUT_COLOURSPACERGB_COLOURSPACE_V_GAMUT... colour.models.XTREME_RGB_COLOURSPACERGB_COLOURSPACE_XTREME_RGB... colour.models.oetf_BT2020eotf_inverse_BT2020... colour.models.sRGB_COLOURSPACERGB_COLOURSPACE_sRGB... colour.notation- The
colour.notation.RGB_to_HEXdefinition 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.plottingObject Signature Author colour.plotting.plot_multi_colour_swatchesplot_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_imageplot_image(image, imshow_kwargs=None, text_kwargs=None, **kwargs)... colour.plotting.plot_sds_in_chromaticity_diagram_CIE1931plot_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_CIE1960UCSplot_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_CIE1976UCSplot_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_CIE1931plot_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_CIE1960UCSplot_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_CIE1976UCSplot_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_CIE1931plot_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_CIE1960UCSplot_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_CIE1976UCSplot_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_lociplot_constant_hue_loci(data, model, scatter_kwargs=None, **kwargs)... colour.plotting.plot_planckian_locus_in_chromaticity_diagram_CIE1931plot_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_CIE1960UCSplot_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.quadcolour.geometry.primitive_vertices_quad_mpl@KelSolaar colour.plotting.gridcolour.geometry.primitive_vertices_grid_mpl... colour.plotting.cubecolour.geometry.primitive_vertices_cube_mpl... Object Name Author colour.plotting.ASTMG173_DIRECT_CIRCUMSOLARSD_ASTMG173_DIRECT_CIRCUMSOLAR@KelSolaar colour.plotting.ASTMG173_ETRSD_ASTMG173_ETR... colour.plotting.ASTMG173_GLOBAL_TILTSD_ASTMG173_GLOBAL_TILT... 💅 colour.plotting.COLOUR_STYLE_CONSTANTSCONSTANTS_COLOUR_STYLEcolour.plotting.COLOUR_ARROW_STYLECONSTANTS_ARROW_STYLE... colour.qualityObject Name Author colour.quality.CQS_SpecificationColourRendering_Specification_CQS@KelSolaar colour.quality.CRI_SpecificationColourRendering_Specification_CRI... colour.quality.TCS_SDSSDS_TCS... colour.quality.VS_SDSSDS_VS... colour.recoveryObject Signature Author colour.recovery.XYZ_to_sd_Meng2015XYZ_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_SDSSDS_SMITS1999@KelSolaar colour.temperatureObject Signature Author colour.temperature.CCT_to_xy_Hernandez1999CCT_to_xy_Hernandez1999(CCT, optimisation_kwargs=None, **kwargs)@KelSolaar colour.temperature.CCT_to_xy_McCamy1992CCT_to_xy_McCamy1992(CCT, optimisation_kwargs=None, **kwargs)... colour.temperature.uv_to_CCT_Krystek1985uv_to_CCT_Krystek1985(uv, optimisation_kwargs=None, **kwargs)... colour.temperature.xy_to_CCT_CIE_Dxy_to_CCT_CIE_D(xy, optimisation_kwargs=None, **kwargs)... colour.temperature.xy_to_CCT_Kang2002xy_to_CCT_Kang2002(xy, optimisation_kwargs=None, **kwargs)... colour.utilitiesObject Signature Author colour.utilities.as_floatas_float(a, dtype=None)@KelSolaar colour.utilities.as_float_arrayas_float_array(a, dtype=None)... colour.utilities.as_intas_int(a, dtype=None)... colour.utilities.as_int_arrayas_int_array(a, dtype=None)... ⚠ colour.utilities.filter_warningsfilter_warnings(colour_runtime_warnings=None, colour_usage_warnings=None, colour_warnings=None, python_warnings=None)colour.utilities.metric_msemetric_mse(a, b, axis=None)... colour.utilities.metric_psnrmetric_psnr(a, b, max_a=1, axis=None)... ⚠ colour.utilities.suppress_warningssuppress_warnings(colour_runtime_warnings=None, colour_usage_warnings=None, colour_warnings=None, python_warnings=None)colour.volumeObject Name Author colour.ILLUMINANTS_OPTIMAL_COLOUR_STIMULIOPTIMAL_COLOUR_STIMULI_ILLUMINANTS@KelSolaar - ➕ Add
-
v0.3.15 Changes
January 25, 2020Colour 0.3.15 - Alpha Milestone
🔋 Features
colour.colorimetryThe typical CIE LED illuminants spectral power distributions and chromaticity coordinates have been added to the datasets: (@KelSolaar)
The recommended indoor illuminants ID65 and ID50 spectral power distributions and chromaticity coordinates have been added to the datasets. (@KelSolaar)

Add
colour.colorimetry.sds_and_multi_sds_to_multi_sdsdefinition that converts given spectral and multi-spectral distributions to multi-spectral distributions. (@KelSolaar)colour.models- Implement support for Display P3 RGB colourspace as per https://developer.apple.com/documentation/coregraphics/cgcolorspace/1408916-displayp3#discussion. (@sobotka)
- Add
colour.models.Jab_to_JChandcolour.models.JCh_to_Jabdefinitions. (@KelSolaar)
colour.plottingImporting
colouris enough to be able to plot in-place of importingcolour.plotting: (@KelSolaar)>>> import colour>>> colour.plotting.plot_image<function plot_image at 0x11e6e47a0>
colour.quality- Support for the Academy Spectral Similarity Index (SSI) has been implemented with the
colour.spectral_similarity_indexdefinition.
🛠 Fixes
colourVarious 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- Prevent spi3d LUT index duplicates because of floating point precision related issues. (@KelSolaar, @sobotka, @nick-shaw)
colour.notation- Fix incorrect Domain-Range scale in Munsell Renotation System implementation. (@KelSolaar)
colour.temperaturecolour.temperature.CCT_to_uv_Krystek1985definition was incorrectly implemented. Incorrect reading of the reference publications ended up with exponentiations being different, e.g.10**4was replaced with10e4. (@OlliNiemitalo)
🔄 Changes
colour.algebracolour.algebra.cartesian_to_sphericalandcolour.algebra.spherical_to_cartesianuse 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.volumecolour.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)
- Signature:
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.
- Signature:
colour.plottingcolour.plotting.common.wrap_title: (@KelSolaar)- Remove













