All Versions
11
Latest Version
Avg Release Cycle
278 days
Latest Release
369 days ago

Changelog History
Page 1

  • 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
  • v0.3.14 Changes

    October 26, 2019

    Colour 0.3.14 - Alpha Milestone

    We would like to thanks all the contributors as usual!

    πŸš€ With this release we are getting close to have a beta candidate in the coming months. It will likely be the last version to support Python 2.x.

    NumFOCUS

    Colour is now a NumFOCUS affiliated project:

    image

    Hacktoberfest - 2019

    We had a few new contributors for the 2019 edition of the Hacktoberfest. Thanks to @Chinmayrane16, @evalevanto, @feralpoosum, @BPearlstine and, @pavithraes for their contributions!

    Automatic Colour Conversion Graph

    Colour now implements an automatic colour conversion graph based on NetworkX and enabling easier colour conversions:

    \>\>\> sd = colour.COLOURCHECKERS\_SDS['ColorChecker N Ohta']['dark skin']\>\>\> convert(sd, 'Spectral Distribution', 'sRGB', verbose={'mode': 'Short'})
    

    Image Input and Output

    Imageio is now a requirement for reading and writing images, it will be used if OpenImageIO is not available. If you wish to read OpenEXR files or develop Colour, you will need to install the FreeImage plugin as follows:

    $ python -c "import imageio;imageio.plugins.freeimage.download()"
    

    πŸ‘Œ Support for OpenImageIO 2.x has also been implemented.

    Name and Signature Changes

    Various colour component transfer functions objects have been either renamed or their signature changed, most notably the sRGB transfer functions and the colour.oetf definition.

    All the reverse words have been replaced with inverse in object names, file names and, docstrings.

    Coverage

    Coverage was raised to 100%. It does not mean that all the possible code paths are covered but it certainly strengthen the API.

    Dependency Management

    We have adopted Poetry to manage the development dependencies, the setup.py file has been replaced with a standardized pyproject.toml file.

    Continuous Integration

    Travis-ci and Azure Pipelines have been replaced with Github Actions.

    πŸ“š Documentation

    πŸ‘ The README and the Manual have been slightly reorganised to create a better separation between the tutorials, API reference and, the new How-To Guide.

    πŸ”‹ Features

    colour.colorimetry

    • Add colour.sds_and_multi_sds_to_sds definition that converts given spectral and multi-spectral distributions to a flat list of spectral distributions. (@KelSolaar)
    • Implement support for ICC D50 illuminant computed from the following CIE XYZ tristimulus values [96.42, 100.00, 82.49]. (@KelSolaar)
    • Add colour.colorimetry.multi_sds_to_XYZ_ASTME308 definition that converts given multi-spectral distributions to CIE XYZ tristimulus values according to to practise ASTM E308-15 method. (@KelSolaar)
    • Implement support for ICC D50 illuminant computed from the following CIE XYZ tristimulus values [96.42, 100.00, 82.49]. (@KelSolaar)

    colour.corresponding

    • colour.corresponding_chromaticities_prediction definition can now use a colour.CorrespondingColourDataset class instance as argument. (@KelSolaar)

    colour.io

    • The colour.read_image and colour.write_image definitions support Imageio and will fallback to it if OpenImageIO is not available.
    • πŸš€ OpenImageIO 2.x is now supported.

    colour.graph

    • The new colour.convert definition leverages an automatic colour conversion graph enabling easier colour conversions:

      >>> sd = colour.COLOURCHECKERS_SDS['ColorChecker N Ohta']['dark skin']>>> convert(sd, 'Spectral Distribution', 'sRGB', verbose={'mode': 'Short'})

      ===============================================================================

      • *
      • [Conversion Path] *
      • *
      • "sd_to_XYZ" --> "XYZ_to_sRGB" *

      * *

      array([0.45675795, 0.30986982, 0.24861924])>>> illuminant = colour.ILLUMINANTS_SDS['FL2']>>> convert(sd, 'Spectral Distribution', 'sRGB', sd_to_XYZ={'illuminant': illuminant}) array([0.47924575, 0.31676968, 0.17362725])

    image

    colour.models

    • Implement support for Recommendation ITU-R BT.2100-2 with the modified black lift handling of HLG EOTF. (@KelSolaar, @nick-shaw)
    • Implement support for Fujifilm F-Gamut RGB colourspace with colour.models.F_GAMUT_COLOURSPACE class and Fujifilm F-Log with colour.models.log_encoding_FLog and colour.models.log_decoding_FLog transfer functions. (@sobotka, @KelSolaar, @nick-shaw)
    • Re-implement support for SMPTE C RGB colourspace with colour.models.SMPTE_C_COLOURSPACE class and related NTSC (1987) RGB colourspace with colour.models.NTSC_1987_COLOURSPACE class. (@KelSolaar)

    colour.plotting

    • Add colour.plotting.plot_constant_hue_loci definition plotting Constant Hue Loci as given by Hung and Berns (1995) or Ebner and Fairchild (1998). It is intended to be used with Colour - Datasets as follows:

      from colour_datasets import loadfrom colour.plotting import plot_constant_hue_loci plot_constant_hue_loci(load('3362536'), 'IPT')

    image

    colour.temperature

    • βž• Add various optimization based correlated colour temperature computation definitions: (@KelSolaar)
      • colour.temperature.xy_to_CCT_CIE_D
      • colour.temperature.CCT_to_xy_Hernandez1999, this definition is not a bijective function and might produce unexpected results. It is given for consistency with other correlated colour temperature computation methods but should be avoided for practical applications.
      • colour.temperature.xy_to_CCT_Kang2002
      • colour.temperature.uv_to_CCT_Krystek1985
      • colour.temperature.CCT_to_xy_McCamy1992, this definition is not a bijective function and might produce unexpected results. It is given for consistency with other correlated colour temperature computation methods but should be avoided for practical applications.

    πŸ›  Fixes

    colour.quality

    • The individual colour scales returned by colour.colour_quality_scale definition when using the additional_data argument were incorrectly scaled and have been fixed. (@KelSolaar)

    πŸ”„ Changes

    colour.adaptation

    • colour.adaptation.chromatic_adaptation_reverse_CMCCAT2000: (@KelSolaar)
      • Name: chromatic_adaptation_inverse_CMCCAT2000

    colour.appearance

    • βœ… yield based tests dependent on nosetests have been replaced. (@MichaelMauderer)

    colour.characterisation

    • The following colour checkers now use ICC D50 illuminant instead of D50: (@KelSolaar)
      • ColorChecker 2005
      • BabelColor Average
      • ColorChecker24 - Before November 2014
      • ColorChecker24 - After November 2014

    colour.colorimetry

    • colour.ASTME30815_PRACTISE_SHAPE: (@KelSolaar)
      • Name: ASTME308_PRACTISE_SHAPE
    • colour.MultiSpectralDistribution: (@KelSolaar)
      • Name: MultiSpectralDistributions
    • colour.multi_sds_to_XYZ: (@KelSolaar)
      • Signature: multi_sds_to_XYZ(msds, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].copy().trim(DEFAULT_SPECTRAL_SHAPE), illuminant=sd_ones(), k=None, method='ASTM E308-15', **kwargs)
    • colour.colorimetry.multi_sds_to_XYZ_integration: (@KelSolaar)
      • Signature: multi_sds_to_XYZ_integration(msds, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer']. copy().trim(DEFAULT_SPECTRAL_SHAPE), illuminant=sd_ones(), k=None, shape=DEFAULT_SPECTRAL_SHAPE)
    • colour.colorimetry.adjust_tristimulus_weighting_factors_ASTME30815: (@KelSolaar)
      • Name: adjust_tristimulus_weighting_factors_ASTME308
    • colour.colorimetry.lagrange_coefficients_ASTME202211: (@KelSolaar)
      • Name: lagrange_coefficients_ASTME2022
    • colour.colorimetry.luminance_ASTMD153508: (@KelSolaar)
      • Name: luminance_ASTMD1535
    • colour.colorimetry.sd_to_XYZ_ASTME30815: (@KelSolaar)
      • Name: sd_to_XYZ_ASTME308
    • colour.colorimetry.sd_to_XYZ_tristimulus_weighting_factors_ASTME30815: (@KelSolaar)
      • Name: sd_to_XYZ_tristimulus_weighting_factors_ASTME308
    • colour.colorimetry.tristimulus_weighting_factors_ASTME202211: (@KelSolaar)
      • Name: tristimulus_weighting_factors_ASTME2022

    colour.continuous

    • 🚦 colour.continuous.MultiSignal: (@KelSolaar)
      • Name: MultiSignals

    colour.io

    • colour.read_image: (@KelSolaar)
      • Signature: read_image(path, method='OpenImageIO', **kwargs)
    • colour.write_image: (@KelSolaar)
      • Signature: write_image(image, path, method='OpenImageIO', **kwargs)

    colour.models

    • Various CCTF related objects, signatures and properties have been renamed for consistency purposes:
    • colour.ENCODING_CCTFS: (@KelSolaar)
      • Name: CCTF_ENCODINGS
    • colour.encoding_cctf: (@KelSolaar)
      • Name: cctf_encoding
    • colour.DECODING_CCTFS: (@KelSolaar)
      • Name: CCTF_DECODINGS
    • colour.decoding_cctf: (@KelSolaar)
      • Name: cctf_decoding
    • colour.RGB_Colourspace.encoding_cctf: (@KelSolaar)
      • Name: cctf_encoding
    • colour.RGB_Colourspace.decoding_cctf: (@KelSolaar)
      • Name: decoding_cctf
    • colour.XYZ_to_RGB: (@KelSolaar)
      • Signature: XYZ_to_RGB(XYZ, illuminant_XYZ, illuminant_RGB, XYZ_to_RGB_matrix, chromatic_adaptation_transform='CAT02', cctf_encoding=None, **kwargs)
    • colour.XYZ_to_RGB: (@KelSolaar)
      • Signature: RGB_to_XYZ(RGB, illuminant_RGB, illuminant_XYZ, RGB_to_XYZ_matrix, chromatic_adaptation_transform='CAT02', cctf_decoding=None, **kwargs)
    • colour.XYZ_to_sRGB: (@KelSolaar)
      • Signature: XYZ_to_sRGB(XYZ, illuminant=ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D65'], chromatic_adaptation_transform='CAT02', apply_cctf_encoding=True, **kwargs)
    • colour.XYZ_to_sRGB: (@KelSolaar)
      • Signature: sRGB_to_XYZ(RGB, illuminant=ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D65'], chromatic_adaptation_method='CAT02', apply_cctf_decoding=True, **kwargs)

    The colour.RGB_to_RGB definition now accepts keyword arguments, they are filtered and passed accordingly to the decoding and encoding colour component transfer functions:

    colour.RGB_to_RGB: (@KelSolaar)

    - Signature: RGB_to_RGB(RGB, input_colourspace, output_colourspace, chromatic_adaptation_transform='CAT02', apply_decoding_cctf=False, apply_encoding_cctf=False, **kwargs)

    🌲 Various log related objects and signatures have been renamed for consistency purposes:

    colour.log_decoding_curve: (@KelSolaar)

    • Name: colour.log_decoding

    - Signature: log_decoding(value, function='Cineon', **kwargs)

    colour.LOG_DECODING_CURVES: (@KelSolaar)

    - Name: colour.LOG_DECODINGS

    colour.log_encoding_curve: (@KelSolaar)

    • Name: colour.log_encoding

    - Signature: log_encoding(value, function='Cineon', **kwargs)

    colour.LOG_ENCODING_CURVES: (@KelSolaar)

    • Name: colour.LOG_ENCODINGS

    The IEC 61966-2-1:1999 standard does not actually define an OETF but and EOTF so the sRGB related definitions have been renamed accordingly:

    • colour.models.oetf_sRGB: (@KelSolaar)
      • Name: eotf_inverse_sRGB
    • colour.models.oetf_reverse_sRGB: (@KelSolaar)
      • Name: eotf_sRGB

    Various other colour component transfer functions objects have been either renamed or their signature changed:

    colour.eotf: (@KelSolaar)

    - Signature: eotf(value, function='ITU-R BT.1886', **kwargs)

    colour.EOTFS_REVERSE: (@KelSolaar)

    - Name: EOTF_INVERSES

    colour.eotf_reverse: (@KelSolaar)

    - Signature: eotf_inverse(value, function='ITU-R BT.1886', **kwargs)

    colour.oetf: (@KelSolaar)

    - Signature: oetf(value, function='ITU-R BT.709', **kwargs)

    colour.OETFS_REVERSE: (@KelSolaar)

    - Name: OETF_INVERSES

    colour.oetf_reverse: (@KelSolaar)

    - Signature: oetf_inverse(value, function='ITU-R BT.709', **kwargs)

    colour.OOTFS_REVERSE: (@KelSolaar)

    - Name: OOTF_INVERSES

    colour.models.oetf_DICOMGSDF: (@KelSolaar)

    - Name: eotf_inverse_DICOMGSDF

    colour.models.eotf_reverse_BT1886: (@KelSolaar)

    - Name: eotf_inverse_BT1886

    colour.models.eotf_reverse_DCDM: (@KelSolaar)

    - Name: eotf_inverse_DCDM

    colour.models.oetf_ST2084: (@KelSolaar)

    - Name: eotf_inverse_ST2084

    colour.models.oetf_reverse_ARIBSTDB67: (@KelSolaar)

    - Name: oetf_inverse_ARIBSTDB67

    colour.models.oetf_reverse_BT601: (@KelSolaar)

    - Name: oetf_inverse_BT601

    colour.models.oetf_reverse_BT709: (@KelSolaar)

    - Name: oetf_inverse_BT709

    colour.models.oetf_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: oetf_HLG_BT2100

    - Signature: oetf_HLG_BT2100(E, constants=BT2100_HLG_CONSTANTS)

    colour.models.oetf_reverse_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: oetf_inverse_HLG_BT2100

    - Signature: oetf_inverse_HLG_BT2100(E_p, constants=BT2100_HLG_CONSTANTS)

    colour.models.eotf_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: eotf_HLG_BT2100

    - Signature: eotf_HLG_BT2100(E_p, L_B=0, L_W=1000, gamma=None, constants=BT2100_HLG_CONSTANTS, method='ITU-R BT.2100-2')

    colour.models.eotf_reverse_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: eotf_inverse_HLG_BT2100

    - Signature: eotf_inverse_HLG_BT2100(F_D, L_B=0, L_W=1000, gamma=None, constants=BT2100_HLG_CONSTANTS, method='ITU-R BT.2100-2')

    colour.models.ootf_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: ootf_HLG_BT2100

    - Signature: ootf_HLG_BT2100(E, L_B=0, L_W=1000, gamma=None, method='ITU-R BT.2100-2')

    colour.models.ootf_reverse_BT2100_HLG: (@KelSolaar, @nick-shaw)

    • Name: ootf_inverse_HLG_BT2100

    - Signature: ootf_inverse_HLG_BT2100(F_D, L_B=0, gamma=None, method='ITU-R BT.2100-2')

    colour.models.oetf_BT2100_PQ: (@KelSolaar, @nick-shaw)

    - Name: oetf_PQ_BT2100

    colour.models.oetf_reverse_BT2100_PQ: (@KelSolaar, @nick-shaw)

    - Name: oetf_inverse_PQ_BT2100

    colour.models.eotf_BT2100_PQ: (@KelSolaar, @nick-shaw)

    - Name: eotf_PQ_BT2100

    colour.models.eotf_reverse_BT2100_PQ: (@KelSolaar, @nick-shaw)

    - Name: eotf_inverse_PQ_BT2100

    colour.models.ootf_BT2100_PQ: (@KelSolaar, @nick-shaw)

    - Name: ootf_PQ_BT2100

    colour.models.ootf_reverse_BT2100_PQ: (@KelSolaar, @nick-shaw)

    - Name: ootf_inverse_PQ_BT2100

    colour.models.log_encoding_Log3G10: (@KelSolaar)

    - Signature: log_encoding_Log3G10(x, method='v2', **kwargs)

    colour.models.log_decoding_Log3G10: (@KelSolaar)

    - Signature: log_decoding_Log3G10(y, method='v2', **kwargs)

    colour.models.log_encoding_CanonLog: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_encoding_CanonLog(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)

    colour.models.log_decoding_CanonLog: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_decoding_CanonLog(clog, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)

    colour.models.log_encoding_CanonLog2: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_encoding_CanonLog2(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)

    colour.models.log_decoding_CanonLog2: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_decoding_CanonLog2(clog2, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)

    colour.models.log_encoding_CanonLog3: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_encoding_CanonLog3(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)

    colour.models.log_decoding_CanonLog3: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_decoding_CanonLog3(clog3, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)

    colour.models.log_encoding_VLog: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_encoding_VLog(L_in, bit_depth=10, out_normalised_code_value=True, in_reflection=True, constants=VLOG_CONSTANTS, **kwargs)

    colour.models.log_decoding_VLog: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_decoding_VLog(V_out, bit_depth=10, in_normalised_code_value=True, out_reflection=True, constants=VLOG_CONSTANTS, **kwargs)

    colour.models.log_encoding_SLog: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_encoding_SLog(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)

    colour.models.log_decoding_SLog: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_decoding_SLog(y, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)

    colour.models.log_encoding_SLog2: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_encoding_SLog2(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)

    colour.models.log_decoding_SLog2: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_decoding_SLog2(y, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)

    colour.models.log_encoding_SLog3: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_encoding_SLog3(x, bit_depth=10, out_normalised_code_value=True, in_reflection=True, **kwargs)

    colour.models.log_decoding_SLog3: (@KelSolaar, @nick-shaw, @KevinJW)

    - Signature: log_decoding_SLog3(y, bit_depth=10, in_normalised_code_value=True, out_reflection=True, **kwargs)

    colour.models.oetf_ROMMRGB: (@KelSolaar)

    - Name: cctf_encoding_ROMMRGB

    colour.models.eotf_ROMMRGB: (@KelSolaar)

    - Name: cctf_decoding_ROMMRGB

    colour.models.oetf_ProPhotoRGB: (@KelSolaar)

    - Name: cctf_encoding_ProPhotoRGB

    colour.models.eotf_ProPhotoRGB: (@KelSolaar)

    - Name: cctf_decoding_ProPhotoRGB

    colour.models.oetf_RIMMRGB: (@KelSolaar)

    - Name: cctf_encoding_RIMMRGB

    colour.models.eotf_RIMMRGB: (@KelSolaar)

    - Name: cctf_decoding_RIMMRGB

    colour.models.XYZ_to_colourspace_model: (@feralpoosum)

    - Deprecated

    colour.models.NTSC_COLOURSPACE: (@KelSolaar)

    • Name: NTSC_1953_COLOURSPACE

    colour.notation

    • colour.notation.munsell_value_ASTMD153508: (@KelSolaar)
      • Name: munsell_value_ASTMD1535

    colour.plotting

    • colour.plotting.ASTM_G_173_DIRECT_CIRCUMSOLAR: (@KelSolaar)
      • Name: ASTMG173_DIRECT_CIRCUMSOLAR
    • colour.plotting.ASTM_G_173_ETR: (@KelSolaar)
      • Name: ASTMG173_ETR
    • colour.plotting.ASTM_G_173_GLOBAL_TILT: (@KelSolaar)
      • Name: ASTMG173_GLOBAL_TILT
    • colour.plotting.plot_single_sd_colour_quality_scale_bars: (@KelSolaar)
      • Signature: plot_single_sd_colour_quality_scale_bars(sd, method='NIST CQS 9.0', **kwargs)
    • colour.plotting.plot_multi_sds_colour_quality_scales_bars: (@KelSolaar)
      • Signature: plot_multi_sds_colour_quality_scales_bars(sds, method='NIST CQS 9.0', **kwargs)
    • colour.plotting.plot_planckian_locus_in_chromaticity_diagram_CIE1931: (@KelSolaar)
      • Signature: plot_planckian_locus_in_chromaticity_diagram_CIE1931(illuminants=None, annotate_parameters=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: (@KelSolaar)
      • Signature: plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(illuminants=None, annotate_parameters=None, chromaticity_diagram_callable_CIE1960UCS=plot_chromaticity_diagram_CIE1960UCS, planckian_locus_callable_CIE1960UCS=plot_planckian_locus_CIE1960UCS, **kwargs)

    colour.recovery

    • colour.recovery.XYZ_to_sd_Meng2015: (@KelSolaar)
      • Signature: 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_parameters=None)

    colour.temperature

    • colour.xy_to_CCT: (@KelSolaar)
      • Signature: xy_to_CCT(xy, method='CIE Illuminant D Series')
    • colour.CCT_to_xy: (@KelSolaar)
      • Signature: CCT_to_xy(CCT, method='CIE Illuminant D Series')
  • v0.3.13 Changes

    October 13, 2019

    Colour 0.3.13 - Alpha Milestone

    This is mainly a maintenance release addressing regressions introduced in CIECAM02 and CAM16 implementations by Colour 0.3.12.

    πŸ”‹ Features

    colour.quality

    • Add colour.uv_to_Luv and colour.uv_to_UCS conversion definitions. (@KelSolaar)

    colour.quality

    • Implement support for colour quality scale computation using NIST CQS 9.0 method based on the latest available spreadsheet from Yoshi Ohno. The results are typically very close to NIST CQS 7.4 method. The colour.COLOUR_QUALITY_SCALE_METHODS attribute was added to enumerate the available methods. (@KelSolaar)

    colour.utilities

    • 🏁 Implement colour.utilities.multiprocessing_pool context manager to support domain-range scale propagation when multiprocessing code on Windows. (@KelSolaar)

    πŸ›  Fixes

    colour.appearance

    πŸ”„ Changes

    colour.colorimetry

    • colour.whiteness: (@KelSolaar)
      • Signature: whiteness(XYZ, XYZ_0, method='CIE 2004', **kwargs)

    colour.notation

    • The colour.notation.munsell_specification_to_xyY, colour.notation.xyY_to_munsell_specification, colour.munsell_colour_to_xyY and colour.xyY_to_munsell_colour definitions have been updated to support n-dimensional arrays. (@KelSolaar)

    colour.plotting

    • colour.plotting.plot_single_sd: (@KelSolaar)
      • Signature: plot_single_sd(sd, cmfs='CIE 1931 2 Degree Standard Observer', out_of_gamut_clipping=True, modulate_colours_with_sd_amplitude=False, equalize_sd_amplitude=False, **kwargs)
    • colour.plotting.plot_single_sd_colour_quality_scale_bars: (@KelSolaar)
      • Signature: plot_single_sd_colour_quality_scale_bars(sd, method='NIST CQS 7.4', **kwargs)
    • colour.plotting.plot_multi_sds_colour_quality_scales_bars: (@KelSolaar)
      • Signature: plot_multi_sds_colour_quality_scales_bars(sds, method='NIST CQS 7.4', **kwargs)

    colour.quality

    • colour.colour_quality_scale: (@KelSolaar)
      • Signature: colour_quality_scale(sd_test, additional_data=False, method='NIST CQS 9.0')

    colour.temperature

    • The colour.cct.uv_to_CCT_Ohno2013, colour.cct.CCT_to_uv_Ohno2013, colour.cct.uv_to_CCT_Robertson1968, colour.cct.CCT_to_uv_Robertson1968, colour.CCT_to_uv and colour.uv_to_CCT definitions have been updated to support n-dimensional arrays. The D_uv argument is now required to be passed horizontally stacked with the CCT argument. (@KelSolaar)

    Colour 0.3.12

    \>\>\> CCT, D\_uv = 6503.49254150, 0.00320598\>\>\> colour.CCT\_to\_uv(CCT, D\_uv=D\_uv)\>\>\> colour.temperature.CCT\_to\_uv\_Ohno2013(CCT, D\_uv)
    

    Colour 0.3.13

    \>\>\> CCT\_D\_uv = [6503.49254150, 0.00320598]\>\>\> colour.CCT\_to\_uv(CCT\_D\_uv, cmfs=cmfs)\>\>\> colour.temperature.CCT\_to\_uv\_Ohno2013(CCT\_D\_uv)
    
    • colour.temperature.CCT_to_uv_Ohno2013: (@KelSolaar)
      • Signature: `CCT_to_uv_Ohno2013(CCT_D_uv, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'])
    • colour.temperature.CCT_to_uv_Robertson1968: (@KelSolaar)
      • Signature: `CCT_to_uv_Robertson1968(CCT_D_uv)

    colour.volume

    • colour.RGB_colourspace_volume_MonteCarlo: (@KelSolaar)
      • Signature: RGB_colourspace_volume_MonteCarlo(colourspace, samples=10e6, limits=np.array([[0, 100], [-150, 150], [-150, 150]], dtype=np.float), illuminant_Lab=ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D65'], chromatic_adaptation_method='CAT02', random_generator=random_triplet_generator, random_state=None)
  • v0.3.12 Changes

    March 24, 2019

    Colour 0.3.12 - Alpha Milestone

    Another important 700+ commits step on The Road to Stable!

    πŸš€ This release was severely delayed because of the involvement of some of us in the authoring of the upcoming Cinematic Color update. Colouris used to produce an important amount of figures in this work and it was important to improve the plotting capabilities.

    πŸ“¦ Plotting Package Overhaul

    The colour.plotting sub-package was extensively overhauled. It is less opinionated and more flexible. The plotting definitions have been renamed and start with plot_, they return the figure and axes instances. The Cinematic Color 2 - Figures Google Colab document is a good example highlighting the greatest and latest changes and capabilities.

    0️⃣ Default to CIE Standard Illuminant D Series D65

    The CIE Standard Illuminant D Series D65 was made the default illuminant in places where CIE Illuminant D Series D50 was used as the default argument.

    A few reasons for this choice, first D65 is a Standard CIE illuminant along with A, second Colour is used mainly in computer graphics thus it makes sense to adopt D65 where it is ubiquitous, and, finally, it brings consistency across the API while preventing some errors from users with less expertise in the field.

    Domain-Range Scales

    The colour science field adopts many input domains and output ranges. Those are challenging when designing an API. Picking a unique domain-range scale over an other has caused surprise and grief to practitioners of different industries in other software.

    Colour has always used the domain-range scales of the publications it implements while recognizing the need for a unique domain-range scale. The API can be switched to use a soft normalised scale to domain-range [0, 1] using the colour.set_domain_range_scale definition and the colour.domain_range_scale context manager. More information about Domain-Range Scales is available in the documentation.

    Look-Up-Tables IO

    πŸš€ With this release, Colour is now able to read and write Look-Up-Tables (LUTs) of various dimensions, i.e. LUT1D, LUT3x1D, LUT3D and LUT Sequences.

    Polynomial Colour Correction

    Polynomial colour correction was added, it is a useful tool to correct for non-linearity of data, for example, film stocks colours. With great powers come great responsibilities and polynomials will eventually alter significantly
    colour data that is not present in the original fitting set.

    🍎 Windows and macOs CI

    πŸ‘Œ Support for Azure Pipelines was added by @MichaelMauderer giving for the first time continuous integration on macOS and Windows, a few Windows related issues were addressed.

    Contrast Sensitivity Function

    The Barten (1999) contrast sensitivity function was implemented and can be used to estimate ideal code values as a function of viewing conditions.

    Miscellaneous

    The power word and abbreviation has been removed from all the spectral distribution related objects. Likewise, the word spectral has been removed from all the related objects and replaced with sd.

    πŸ“š The built documentation has been removed from the PyPi package to reduce the size of the downloads.

    πŸ”‹ Features

    colour.algebra

    Implement support for safe and symmetrical power with colour.algebra.spow definition and the related colour.algebra.is_spow_enabled, colour.algebra.set_spow_enable and colour.algebra.spow_enable definitions. (@KelSolaar)

    Implement colour.NearestNeighbourInterpolator interpolator class. (@KelSolaar)

    πŸ‘ Implement support for various ellipse related geometrical definitions: (@KelSolaar)

    • colour.algebra.ellipse_coefficients_general_form
    • colour.algebra.ellipse_coefficients_canonical_form
    • colour.algebra.point_at_angle_on_ellipse
    • colour.algebra.ellipse_fitting_Halir1998
    • colour.algebra.ELLIPSE_FITTING_METHODS
    • colour.algebra.ellipse_fitting

    colour.characterisation

    • Implement support for Cheung et al. (2004), Finlayson et al. (2015) and Vandermonde polynomial colour correction with colour.polynomial_expansion, colour.colour_correction_matrix, and colour.colour_correction definitions wrapping the following objects: (@KelSolaar)
      • Cheung et al. (2004) : colour.characterisation.augmented_matrix_Cheung2004,
        colour.characterisation.colour_correction_matrix_Cheung2004 and
        colour.characterisation.colour_correction_Cheung2004 definitions.
      • Finlayson et al. (2015) : colour.characterisation.augmented_matrix_Finlayson2015,
        colour.characterisation.colour_correction_matrix_Finlayson2015 and
        colour.characterisation.colour_correction_Finlayson2015 definitions.
      • Vandermonde : colour.characterisation.augmented_matrix_Vandermonde,
        colour.characterisation.colour_correction_matrix_Vandermonde and
        colour.characterisation.colour_correction_Vandermonde definitions.
    • Add X-Rite new ColourChecker data from prior and after November 2014 in colour.COLOURCHECKERS attribute and available with the following keys:
      • ColorChecker24 - Before November 2014
      • ColorChecker24 - After November 2014

    colour.blindness

    • Implement support for Machado et al. (2009) colour vision deficiency model with colour.anomalous_trichromacy_cmfs_Machado2009, colour.anomalous_trichromacy_matrix_Machado2009 and colour.cvd_matrix_Machado2009 definitions. (@KelSolaar, @MichaelMauderer)

    colour.colorimetry

    • Implement support for multi-spectral distribution array conversion to CIE XYZ tristimulus values with colour.multi_sds_to_XYZ definition. (@KelSolaar)
      It ultimately allows conversion of multi-spectral images to RGB, as an example here is the RIT MetaCow converted to sRGB:

    image

    • Add colour.MultiSpectralDistribution.signal_type property and colour.MultiSpectralDistribution.to_sds method. (@KelSolaar)
    • Implement support for gaussian spectral distributions generation and single and multi LED spectral distributions generation according to Ohno (2005) method with the following objects: (@KelSolaar)
      • colour.SD_GAUSSIAN_METHODS
      • colour.sd_gaussian
      • colour.colorimetry.sd_single_led_Ohno2005
      • colour.SD_SINGLE_LED_METHODS
      • colour.sd_single_led
      • colour.colorimetry.sd_multi_leds_Ohno2005
      • colour.SD_MULTI_LEDS_METHODS
      • colour.sd_multi_leds
    • Add colour.colorimetry.daylight_locus_function definition computing the the Daylight Locus chromaticity coordinate y_D for given chromaticity coordinate x_D. (@KelSolaar)

    colour.contrast

    • Implement support for Barten (1999) contrast sensitivity function (CSF) with colour.contrast.contrast_sensitivity_function_Barten1999 definition and the colour.contrast_sensitivity_function high-level definition wrapper. (@KelSolaar)

    image
    Computing the minimum detectable contrast with the assumed conditions for UHDTV applications as given in ITU-R BT.2246-4 Figure 31 and using Barten (1999) method.

    colour.difference

    • Implement support for DIN99 colour difference formula with colour.difference.delta_E_DIN99 definition.
      (@KelSolaar, @MichaelMauderer)

    colour.io

    • Implement support for reading and writing 1D, 3x1D and 3D LUTs with the colour.read_LUT and colour.write_LUT definitions. (@nick-shaw, @KelSolaar)

    The following LUT formats are currently available:

    - *Cinespace*: `colour.io.read_LUT_Cinespace` and `colour.io.write_LUT_Cinespace` definitions.
    - *Iridas*: `colour.io.read_LUT_IridasCube` and `colour.io.write_LUT_IridasCube` definitions.
    - *Resolve*: `colour.io.read_LUT_ResolveCube` and `colour.io.write_LUT_ResolveCube` definitions.
    - *Sony SPI 1D*: `colour.io.read_LUT_SonySPI1D` and `colour.io.write_LUT_SonySPI1D` definitions.
    - *Sony SPI 3D*: `colour.io.read_LUT_SonySPI3D` and `colour.io.write_LUT_SonySPI3D` definitions.
    
    • πŸ‘ Implement support for writing image attributes using the colour.io.ImageAttribute_Specification class:
      (@KelSolaar)

      import numpy as npimport colour compression = colour.io.ImageAttribute_Specification('Compression', 'none') colour.write_image(np.ones((32, 32, 3)), 'compression_rle.tif') colour.write_image(np.ones((32, 32, 3)), 'compression_none.tif', attributes=[compression])

    colour.models

    • Implement support for Safdar et al. (2017) JzAzBz colourspace with colour.XYZ_to_JzAzBz and colour.JzAzBz_to_XYZ definitions. (@KelSolaar)
    • Implement support for YCoCg colour encoding with colour.RGB_to_YCoCg and colour.YCoCg_to_RGB definitions. (@KelSolaar)
    • Implement colour.ENCODING_CCTFS and colour.DECODING_CCTFS attributes and colour.encoding_cctf and colour.decoding_cctf definitions: they are convenient collections around the following transfer function objects: (@KelSolaar)
      • colour.ENCODING_CCTFS and colour.encoding_cctf:
      • colour.LOG_ENCODING_CURVES
      • colour.OETFS
      • colour.EOTFS_REVERSE
      • colour.DECODING_CCTFS and colour.decoding_cctf:
      • colour.LOG_DECODING_CURVES
      • colour.EOTFS
      • colour.OETFS_REVERSE
    • Implement colour.Hunter_Rdab_to_XYZ definition. (@KelSolaar)
    • Implement colour.UVW_to_XYZ definition. (@KelSolaar)
    • Implement colour.xy_to_Luv_uv and colour.xy_to_UCS_uv definitions. (@KelSolaar)
    • Implement colour.models.DCDM_XYZ_COLOURSPACE. (@KelSolaar, @codycuellar)
    • Implement colour.RGB_Colourspace.copy and colour.RGB_Colourspace.chromatically_adapt methods respectively returning a copy and chromatically adapting the current instance of the RGB_Colourspace to given whitepoint. (@KelSolaar)
    • Implement support for P3-D65 colourspace with colour.models.P3_D65_COLOURSPACE attribute. (@jdvandenberg)
    • Implement support for Filmic Pro log encoding curve with colour.models.log_encoding_FilmicPro6 and colour.models.log.decoding_FilmicPro6 definitions. (@KelSolaar, @nick-shaw)
    • Implement support for FilmLight E-Gamut colourspace and its log encoding curve with the colour.models.FILMLIGHT_E_GAMUT_COLOURSPACEattribute andcolour.models.log_encoding_FilmLightTLogandcolour.models.log. log_decoding_FilmLightTLog` definitions. (@nick-shaw)

    The following definitions have now support for CA bypass by using the None builtin as chromatic_adaptation_transform argument: (@KelSolaar, @scoopxyz)

    colour.XYZ_to_RGB

    colour.RGB_to_XYZ

    colour.RGB_to_RGB_matrix

    colour.RGB_to_RGB

    Implement support for Sharp RGB colourspace from Ward and Eydelberg-Vileshin (2002) with colour.models.SHARP_RGB_COLOURSPACE attribute.

    colour.plotting

    • Implement colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931, colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS and colour.plotting.plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS definitions plotting MacAdam (1942) Ellipses (Observer PGN) in the Chromaticity Diagram. (@KelSolaar)

    image

    • Implement colour.plotting.plot_pointer_gamut definition plotting Pointer's Gamut . (@KelSolaar)
    • Implement support for colour rendition charts comparison with colour.plotting.plot_multi_colour_checkers definition. (@KelSolaar)

    image

    • Implement colour.plotting.plot_single_function and colour.plotting.plot_multi_functions definitions. (@KelSolaar)
    • Implement colour.plotting.plot_single_luminance_function and colour.plotting.plot_multi_luminance_functions definitions. (@KelSolaar)
    • Implement colour.plotting.filter_passthrough utility definition. (@KelSolaar)

    colour.utilities

    • Implement support for multiple different domain-range scales with the following objects: (@KelSolaar)
      • colour.get_domain_range_scale definition which returns the current domain-range scale.
      • colour.set_domain_range_scale definition which sets the current domain-range scale.
      • colour.domain_range_scale decorator/context manager which sets the current domain-range scale for the scope of the decorated objects or context.
    • Implement colour.utilities.metric_mse and colour.utilities.metric_psnr definitions computing respectively mean squared error (MSE) and peak signal-to-noise ratio (PSNR). (@KelSolaar)
    • Implement colour.utilities.describe_environment definition that outputs the important information about the current environment: (@KelSolaar)

      environment = colour.utilities.describe_environment()

      • *
      • Interpreter : *
      • python : 2.7.14 | packaged by conda-forge | (default, Dec 25 2017, *
      • 01:18:54) *
      • [GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] *
      • *
      • colour-science.org : *
      • colour : v0.3.11-323-g380c1838 *
      • *
      • Runtime : *
      • numpy : 1.14.3 *
      • scipy : 1.0.0 *
      • pandas : 0.22.0 *
      • matplotlib : 2.2.2 *
      • notebook : 5.4.0 *
      • ipywidgets : 7.2.1 *

      * *

    • Implement colour.utilities.filter_mapping utility definition. (@KelSolaar)

    • Implement colour.utilities.as_array, colour.utilities.as_int_array, colour.utilities.as_float_array, colour.utilities.as_int, and colour.utilities.as_float utility definitions (@KelSolaar, @MichaelMauderer)

    colour.volume

    • Implement colour.volume.XYZ_outer_surface definition generating CIE XYZ colourspace outer surface. (@KelSolaar)
    • Implement colour.volume.generate_pulse_waves definition generating pulse waves for CIE XYZ colourspace outer surface computation. (@KelSolaar)

    πŸ›  Fixes

    colour.appearance

    • CAM16 computations were incorrect because of a faulty D intermediate variable calculation, colour.XYZ_to_CAM16 and colour.CAM16_to_XYZ definitions are affected. (@KelSolaar, @crowsonkb)
    • CIECAM02 Dim induction factor N_c has been changed from 0.95 to 0.9 to match the CIE recommendation. (@KelSolaar, Mark D. Fairchild)
    • Handles NaNs gracefully incolour.XYZ_to_ATD95 definition. (@KelSolaar)

    colour.colorimetry

    • CIE Illuminant D Series D60 illuminant chromaticity coordinates and spectral distribution were incorrect because of the mistaken assumption that ACES whitepoint is CIE Illuminant D Series D60:
    Whitepoint Chromaticity Coordinates
    ACES [0.32168, 0.33767]
    D60 [0.32163, 0.33774]

    As a consequence, colour.ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D60'], colour.ILLUMINANTS['CIE 1964 10 Degree Standard Observer']['D60'] and colour.ILLUMINANTS_SDS['D60'] values have changed and a new colour.ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['ACES'] illuminant has been introduced.

    • colour.sd_CIE_illuminant_D_series definition has been updated to conform to CIE 015:2004 recommendation and its output now better matches tabulated data. (@KelSolaar)
    • colour.lightness and colour.luminance definitions now use consistent domain/range for Fairchild (2010) and Fairchild (2011) methods.

    colour.models

    • Fixes incorrect computation of epsilon value for hdr-CIELAB and hdr-IPT 2011 colourspaces: colour.XYZ_to_hdr_CIELab, colour.hdr_CIELab_to_XYZ, colour.XYZ_to_hdr_IPT and colour.hdr_IPT_to_XYZ definitions output is affected for the Fairchild 2011 method. (@KelSolaar, @sobotka)

    colour.volume

    • colour.is_within_visible_spectrum definition has been overhauled and now relies on a proper computation of CIE XYZ colourspace outer surface. As a consequence, colour.RGB_colourspace_visible_spectrum_coverage_MonteCarlo definition output is largely affected and RGB colourspaces have increased coverage, e.g. for sRGB: 36% to 49%.

    πŸ”„ Changes

    colour.algebra

    • colour.algebra.random_triplet_generator definition now returns a ndarray instead of an iterator, memory consumption is higher but speed is increased.

    colour.characterisation

    • colour.first_order_colour_fit: (@KelSolaar)
      • Name: colour_correction_matrix
    • colour.COLOURCHECKERS_SPDS: (@KelSolaar)
      • Name: COLOURCHECKERS_SDS
    • colour.COLOURCHECKERS_SDS spectral distributions are now ordered according to the colour rendition chart samples order thus colour.characterisation.COLOURCHECKER_INDEXES_TO_NAMES_MAPPING is not needed anymore. (@KelSolaar)
    • colour.characterisation.COLOURCHECKER_INDEXES_TO_NAMES_MAPPING: (@KelSolaar)
      • Remove
    • colour.COLOURCHECKERS are now using an ordered dict instead of instances of colour.characterisation.dataset.colour_checkers.chromaticity_coordinates.ColourChecker_Specification class. (@KelSolaar)
    • colour.characterisation.dataset.colour_checkers.chromaticity_coordinates.ColourChecker_Specification: (@KelSolaar)
      • Remove

    colour.colorimetry

    • All the Illuminants and light sources now use a linear interpolator by default for consistency with CIE Standard Illuminant D Series which should be linearly interpolated as per CIE 15:2004 recommendations. (@KelSolaar)
    • CIE Standard Illuminant A uses chromaticity coordinates as given in CIE 015:2004 Colorimetry, 3rd Edition.
    • CIE Illuminant D Series D55 uses chromaticity coordinates as given in CIE 015:2004 Colorimetry, 3rd Edition.
    • CIE Illuminant D Series D75 uses chromaticity coordinates as given in CIE 015:2004 Colorimetry, 3rd Edition.
    • Illuminants F Series use chromaticity coordinates as given in CIE 015:2004 Colorimetry, 3rd Edition.
    • Illuminants F Series that were using HunterLab naming convention have been renamed to CIE naming convention, e.g. F1 has been renamed to FL1, F2 to FL2 and so forth.
    • colour.blackbody_spd: (@KelSolaar)
      • Name: sd_blackbody
    • colour.CIE_standard_illuminant_A_function: (@KelSolaar)
      • Name: sd_CIE_standard_illuminant_A
      • Return: colour.SpectralDistribution
    • colour.constant_spd: (@KelSolaar)
      • Name: sd_constant
    • colour.D_illuminant_relative_spd: (@KelSolaar)
      • Name: sd_CIE_illuminant_D_series
      • Signature: sd_CIE_illuminant_D_series(xy, M1_M2_rounding=True)
    • colour.ILLUMINANTS_RELATIVE_SPDS: (@KelSolaar)
      • Name: ILLUMINANTS_SDS
    • colour.LIGHT_SOURCES_RELATIVE_SPDS: (@KelSolaar)
      • Name: LIGHT_SOURCES_SDS
    • colour.colorimetry.lightness_Fairchild2011: (@KelSolaar)
      • Signature: lightness_Fairchild2011(Y, epsilon=0.474, method='hdr-CIELAB')
    • colour.colorimetry.luminance_Fairchild2011: (@KelSolaar)
      • Signature: luminance_Fairchild2011(L_hdr, epsilon=0.474, method='hdr-CIELAB')
    • colour.mesopic_luminous_efficiency_function: (@KelSolaar)
      • Name: sd_mesopic_luminous_efficiency_function
    • colour.MultiSpectralPowerDistribution: (@KelSolaar)
      • Name: MultiSpectralDistribution
    • colour.ones_spd: (@KelSolaar)
      • Name: sd_ones
    • colour.SpectralPowerDistribution: (@KelSolaar)
      • Name: SpectralDistribution
    • colour.SPECTRAL_TO_XYZ_METHODS: (@KelSolaar)
      • Name: SD_TO_XYZ_METHODS
    • colour.spectral_to_XYZ: (@KelSolaar)
      • Name: sd_to_XYZ
      • Signature: sd_to_XYZ(sd, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(ASTME30815_PRACTISE_SHAPE), k=None, method='ASTM E308-15', **kwargs)
    • colour.zeros_spd: (@KelSolaar)
      • Name: sd_zeros
    • colour.colorimetry.spectral_to_XYZ_ASTME30815: (@KelSolaar)
      • Name: sd_to_XYZ_ASTME30815
      • Signature: sd_to_XYZ_ASTME30815(sd, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(ASTME30815_PRACTISE_SHAPE), use_practice_range=True, mi_5nm_omission_method=True, mi_20nm_interpolation_method=True, k=None)
    • colour.colorimetry.spectral_to_XYZ_integration: (@KelSolaar)
      • Name: sd_to_XYZ_integration
      • Signature: sd_to_XYZ_integration(sd, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].shape), k=None)
    • colour.colorimetry.spectral_to_XYZ_tristimulus_weighting_factors_ASTME30815: (@KelSolaar)
      • Name: sd_to_XYZ_tristimulus_weighting_factors_ASTME30815
      • Signature: sd_to_XYZ_tristimulus_weighting_factors_ASTME30815(sd, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(ASTME30815_PRACTISE_SHAPE), k=None)
    • colour.colorimetry.tristimulus_weighting_factors_ASTME202211: (@KelSolaar)
      • Signature: tristimulus_weighting_factors_ASTME202211cmfs, illuminant, shape, k=None)

    colour.constants

    • colour.constants.CIE_E: (@KelSolaar)
      • Remove: The CIE 1976, e.g. Lightness (CIE 1976), Luminance (CIE 1976), CIE L*a*b*, CIE L*u*v** related code uses the algorithm recommended in CIE 015:2004 Colorimetry, 3rd Edition.
    • colour.constants.CIE_K: (@KelSolaar)
      • Remove: The CIE 1976, e.g. Lightness (CIE 1976), Luminance (CIE 1976), CIE L*a*b*, CIE L*u*v** related code uses the algorithm recommended in CIE 015:2004 Colorimetry, 3rd Edition.

    colour.io

    • colour.IES_TM2714_Spd: (@KelSolaar)
      • Name: SpectralDistribution_IESTM2714
    • colour.read_image: (@KelSolaar, @nick-shaw)
      • Signature: read_image(path, bit_depth='float32', attributes=False)
    • colour.read_spds_from_csv_file: (@KelSolaar)
      • Name: read_sds_from_csv_file
    • colour.read_spds_from_xrite_file: (@KelSolaar)
      • Name: read_sds_from_xrite_file
    • colour.write_spds_to_csv_file: (@KelSolaar)
      • Name: write_sds_to_csv_file

    colour.models

    • colour.RGB_Colourspace.illuminant: (@KelSolaar)
      • Name: whitepoint_name
    • colour.spectral_to_aces_relative_exposure_values: (@KelSolaar)
      • Name: sd_to_aces_relative_exposure_values
    • colour.models.DCI_P3_COLOURSPACE and colour.models.DCI_P3_P_COLOURSPACE colourspaces CCTFs have been changed for Gamma 2.6. (@KelSolaar, @codycuellar)

    0️⃣ The following transfer functions now take and output floating point values by default:

    colour.models.oetf_DCIP3: (@KelSolaar, @codycuellar)

    • Name: eotf_reverse_DCDM

    - Signature: eotf_reverse_DCDM(XYZ, out_int=False)

    colour.models.eotf_DCIP3: (@KelSolaar, @codycuellar)

    • Name: eotf_DCDM

    - Signature: oetf_DCDM(XYZ, in_int=False)

    colour.models.oetf_DICOMGSDF: (@KelSolaar)

    - Signature: oetf_DICOMGSDF(L, out_int=False)

    colour.models.eotf_DICOMGSDF: (@KelSolaar)

    - Signature: eotf_DICOMGSDF(J, in_int=False)

    colour.models.oetf_ROMMRGB: (@KelSolaar)

    - Signature: oetf_ROMMRGB(X, bit_depth=8, out_int=False)

    colour.models.eotf_ROMMRGB: (@KelSolaar)

    - Signature: eotf_ROMMRGB(X_p, bit_depth=8, in_int=False)

    colour.models.oetf_ProPhotoRGB: (@KelSolaar)

    - Signature: oetf_ProPhotoRGB(X, bit_depth=8, out_int=False)

    colour.models.eotf_ProPhotoRGB: (@KelSolaar)

    - Signature: eotf_ProPhotoRGB(X_p, bit_depth=8, in_int=False)

    colour.models.oetf_RIMMRGB: (@KelSolaar)

    - Signature: oetf_RIMMRGB(X, bit_depth=8, out_int=False, E_clip=2.0)

    colour.models.eotf_RIMMRGB: (@KelSolaar)

    - Signature: eotf_RIMMRGB(X_p, bit_depth=8, in_int=False, E_clip=2.0)

    colour.models.log_encoding_ERIMMRGB: (@KelSolaar)

    - Signature: log_encoding_ERIMMRGB(X, bit_depth=8, out_int=False, E_min=0.001, E_clip=316.2)

    colour.models.log_decoding_ERIMMRGB: (@KelSolaar)

    - Signature: log_decoding_ERIMMRGB(X_p, bit_depth=8, in_int=False, E_min=0.001, E_clip=316.2)

    RED colourspaces primaries have been chromatically adapted to D65 illuminant as Graeme Natress confirmed RED is using D65. (@nick-shaw)
    The following colourspaces are affected:

    • colour.models.RED_COLOR_COLOURSPACE
    • colour.models.RED_COLOR_2_COLOURSPACE
    • colour.models.RED_COLOR_3_COLOURSPACE
    • colour.models.RED_COLOR_4_COLOURSPACE
    • colour.models.DRAGON_COLOR_COLOURSPACE

    - colour.models.DRAGON_COLOR_2_COLOURSPACE

    colour.function_gamma: (@KelSolaar)

    - Name: gamma_function

    colour.function_linear: (@KelSolaar)

    • Name: linear_function

    colour.phenomena

    • colour.rayleigh_scattering_spd: (@KelSolaar)
      • Name: sd_rayleigh_scattering

    colour.plotting

    • colour.plotting.boundaries: (@KelSolaar)
      • Remove: Functionality has been moved to colour.plotting.render definition.
    • colour.plotting.decorate: (@KelSolaar)
      • Remove: Functionality has been moved to colour.plotting.render definition.
    • colour.plotting.display: (@KelSolaar)
      • Remove: Functionality has been moved to colour.plotting.render definition.
    • colour.plotting.colour_plotting_defaults: (@KelSolaar)
      • Name: colour_plotting_style
    • colour.plotting.get_RGB_colourspace: (@KelSolaar)
      • Name: filter_RGB_colourspaces
      • Signature: filter_RGB_colourspaces(filterer, flags=re.IGNORECASE):
    • colour.plotting.get_cmfs: (@KelSolaar)
      • Name: filter_cmfs
      • Signature: filter_cmfs(filterer, flags=re.IGNORECASE):
    • colour.plotting.get_illuminant: (@KelSolaar)
      • Name: filter_illuminants
      • Signature: filter_illuminants(filterer, flags=re.IGNORECASE):
    • colour.plotting. label_rectangles: (@KelSolaar)
      • Signature: label_rectangles(labels, rectangles, rotation='vertical', text_size=10, offset=None)
    • colour.plotting.cvd_simulation_Machado2009_plot: (@KelSolaar)
      • Name: plot_cvd_simulation_Machado2009
    • colour.plotting.single_colour_checker_plot: (@KelSolaar)
      • Name: plot_single_colour_checker
    • colour.plotting.multi_colour_checker_plot: (@KelSolaar)
      • Name: plot_multi_colour_checkers
    • colour.plotting.single_spd_plot: (@KelSolaar)
      • Name: plot_single_sd
    • colour.plotting.multi_spd_plot: (@KelSolaar)
      • Name: plot_multi_sds
    • colour.plotting.single_cmfs_plot: (@KelSolaar)
      • Name: plot_single_cmfs
    • colour.plotting.multi_cmfs_plot: (@KelSolaar)
      • Name: plot_multi_cmfs
    • colour.plotting.single_illuminant_spd_plot: (@KelSolaar)
      • Name: plot_single_illuminant_sd
    • colour.plotting.multi_illuminant_spd_plot: (@KelSolaar)
      • Name: plot_multi_illuminant_sds
    • colour.plotting.visible_spectrum_plot: (@KelSolaar)
      • Name: plot_visible_spectrum
    • colour.plotting.single_lightness_function_plot: (@KelSolaar)
      • Name: plot_single_lightness_function
    • colour.plotting.multi_lightness_function_plot: (@KelSolaar)
      • Name: plot_multi_lightness_functions
    • colour.plotting.plot_single_lightness_function and colour.plotting.plot_multi_lightness_functions definitions now render normalised Lightness. (@KelSolaar)
    • colour.plotting.blackbody_spectral_radiance_plot: (@KelSolaar)
      • Name: plot_blackbody_spectral_radiance
    • colour.plotting.blackbody_colours_plot: (@KelSolaar)
      • Name: plot_blackbody_colours
    • colour.plotting.single_colour_swatch_plot: (@KelSolaar)
      • Name: plot_single_colour_swatch
    • colour.plotting.multi_colour_swatch_plot: (@KelSolaar)
      • Name: plot_multi_colour_swatches
      • Signature: plot_multi_colour_swatches(colour_swatches, width=1, height=1, spacing=0, columns=3, text_parameters=None, background_colour=(1.0, 1.0, 1.0), compare_swatches=None, **kwargs)
    • colour.plotting.image_plot: (@KelSolaar)
      • Name: plot_image
      • Signature: plot_image(image, text_parameters=None, interpolation='nearest', colour_map=matplotlib.cm.Greys_r, **kwargs)
    • colour.plotting.corresponding_chromaticities_prediction_plot: (@KelSolaar)
      • Name: plot_corresponding_chromaticities_prediction
    • colour.plotting.spectral_locus_plot: (@KelSolaar)
      • Name: plot_spectral_locus
    • colour.plotting.chromaticity_diagram_colours_plot: (@KelSolaar)
      • Name: plot_chromaticity_diagram_colours
    • colour.plotting.chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_chromaticity_diagram
    • colour.plotting.chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_chromaticity_diagram_CIE1931
      • Signature: plot_chromaticity_diagram_CIE1931(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, show_spectral_locus=True, wavelength_labels=None, **kwargs)
    • colour.plotting.chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_chromaticity_diagram_CIE1960UCS
      • Signature: plot_chromaticity_diagram_CIE1960UCS(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, show_spectral_locus=True, wavelength_labels=None, **kwargs)
    • colour.plotting.chromaticity_diagram_plot_CIE1976UCS: (@KelSolaar)
      • Name: plot_chromaticity_diagram_CIE1976UCS
      • Signature: plot_chromaticity_diagram_CIE1976UCS(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, show_spectral_locus=True, wavelength_labels=None, **kwargs)
    • colour.plotting.spds_chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_sds_in_chromaticity_diagram
    • colour.plotting.spds_chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_sds_in_chromaticity_diagram_CIE1931
      • Signature: plot_sds_in_chromaticity_diagram_CIE1931(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_parameters=None, chromaticity_diagram_callable_CIE1931=chromaticity_diagram_plot_CIE1931, **kwargs)
    • colour.plotting.spds_chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_sds_in_chromaticity_diagram_CIE1960UCS
      • Signature: plot_sds_in_chromaticity_diagram_CIE1960UCS(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_parameters=None, chromaticity_diagram_callable_CIE1960UCS=chromaticity_diagram_plot_CIE1960UCS, **kwargs)
    • colour.plotting.spds_chromaticity_diagram_plot_CIE1976UCS: (@KelSolaar)
      • Name: plot_sds_in_chromaticity_diagram_CIE1976UCS
      • Signature: plot_sds_in_chromaticity_diagram_CIE1976UCS(sds, cmfs='CIE 1931 2 Degree Standard Observer', annotate_parameters=None, chromaticity_diagram_callable_CIE1976UCS=chromaticity_diagram_plot_CIE1976UCS, **kwargs)
    • colour.plotting.RGB_colourspaces_chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_RGB_colourspaces_in_chromaticity_diagram
    • colour.plotting.RGB_colourspaces_chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931
    • colour.plotting.RGB_colourspaces_chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_RGB_colourspaces_in_chromaticity_diagram_CIE1960UCS
    • colour.plotting.RGB_colourspaces_chromaticity_diagram_plot_CIE1976UCS: (@KelSolaar)
      • Name: plot_RGB_colourspaces_in_chromaticity_diagram_CIE1976UCS
    • colour.plotting.RGB_chromaticity_coordinates_chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_RGB_chromaticities_in_chromaticity_diagram
    • colour.plotting.RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931
      • Signature: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1931=RGB_colourspaces_chromaticity_diagram_plot_CIE1931, scatter_parameters=None, **kwargs)
    • colour.plotting.RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS
      • Signature: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1960UCS=RGB_colourspaces_chromaticity_diagram_plot_CIE1960UCS, scatter_parameters=None, **kwargs)
    • colour.plotting.RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1976UCS: (@KelSolaar)
      • Name: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS
      • Signature: plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1976UCS= RGB_colourspaces_chromaticity_diagram_plot_CIE1976UCS, scatter_parameters=None, **kwargs)
    • colour.plotting.single_cctf_plot: (@KelSolaar)
      • Name: plot_single_cctf
    • colour.plotting.multi_cctf_plot: (@KelSolaar)
      • Name: plot_multi_cctfs
    • colour.plotting.single_munsell_value_function_plot: (@KelSolaar)
      • Name: plot_single_munsell_value_function
    • colour.plotting.multi_munsell_value_function_plot: (@KelSolaar)
      • Name: plot_multi_munsell_value_functions
    • colour.plotting.single_rayleigh_scattering_spd_plot: (@KelSolaar)
      • Name: plot_single_sd_rayleigh_scattering
    • colour.plotting.the_blue_sky_plot: (@KelSolaar)
      • Name: plot_the_blue_sky
    • colour.plotting.colour_quality_bars_plot: (@KelSolaar)
      • Name: plot_colour_quality_bars
    • colour.plotting.single_spd_colour_rendering_index_bars_plot: (@KelSolaar)
      • Name: plot_single_sd_colour_rendering_index_bars
    • colour.plotting.multi_spd_colour_rendering_index_bars_plot: (@KelSolaar)
      • Name: plot_multi_sds_colour_rendering_indexes_bars
    • colour.plotting.single_spd_colour_quality_scale_bars_plot: (@KelSolaar)
      • Name: plot_single_sd_colour_quality_scale_bars
    • colour.plotting.multi_spd_colour_quality_scale_bars_plot: (@KelSolaar)
      • Name: plot_multi_sds_colour_quality_scales_bars
    • colour.plotting.planckian_locus_plot: (@KelSolaar)
      • Name: plot_planckian_locus
    • colour.plotting.planckian_locus_chromaticity_diagram_plot: (@KelSolaar)
      • Name: plot_planckian_locus_in_chromaticity_diagram
    • colour.plotting.planckian_locus_chromaticity_diagram_plot_CIE1931: (@KelSolaar)
      • Name: plot_planckian_locus_in_chromaticity_diagram_CIE1931
    • colour.plotting.planckian_locus_chromaticity_diagram_plot_CIE1960UCS: (@KelSolaar)
      • Name: plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS
    • colour.plotting.RGB_colourspaces_gamuts_plot: (@KelSolaar)
      • Name: plot_RGB_colourspaces_gamuts
      • Signature: `plot_RGB_colourspaces_gamuts(colourspaces=None, reference_colourspace='CIE xyY', segments=8, show_grid=True, grid_segments=10, show_spectral_locus=False, spectral_locus_colour=None, cmfs='CIE 1931 2 Degree Standard Observer', **kwargs)
    • colour.plotting.RGB_scatter_plot: (@KelSolaar)
      • Name: plot_RGB_scatter
      • Signature: `plot_RGB_scatter(RGB, colourspace, reference_colourspace='CIE xyY', colourspaces=None, segments=8, show_grid=True, grid_segments=10, show_spectral_locus=False, spectral_locus_colour=None, points_size=12, cmfs='CIE 1931 2 Degree Standard Observer', **kwargs)

    colour.recovery

    • colour.REFLECTANCE_RECOVERY_METHODS: (@KelSolaar)
      • Name: XYZ_TO_SD_METHODS
    • colour.XYZ_to_spectral: (@KelSolaar)
      • Name: XYZ_to_sd
    • colour.recovery.RGB_to_spectral_Smits1999: (@KelSolaar)
      • Name: RGB_to_sd_Smits1999
    • colour.recovery.RGB_to_sd_Smits1999 output spectral distribution defaults to colour.LinearInterpolator interpolator. (@KelSolaar)
    • colour.recovery.XYZ_to_spectral_Meng2015: (@KelSolaar)
      • Name: XYZ_to_sd_Meng2015
      • Signature: XYZ_to_sd_Meng2015(XYZ, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], interval=5, optimisation_parameters=None)

    colour.utilities

    • ⚠ colour.utilities.filter_warnings: (@KelSolaar)
      • Signature: filter_warnings(state=True, colour_warnings=True, colour_runtime_warnings=False, colour_usage_warnings=False, python_warnings=False)
    • colour.utilities.message_box: (@KelSolaar)
      • Signature: message_box(message, width=79, padding=3, print_callable=print)
    • colour.utilities.as_numeric: (@KelSolaar)
      • Signature: as_numeric(a, dtype=DEFAULT_FLOAT_DTYPE)

    colour.volume

    • colour.is_within_visible_spectrum: (@KelSolaar)
      • Signature: is_within_visible_spectrum(XYZ, interval=10, cmfs=STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'], illuminant=sd_ones(STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'].shape), tolerance=None)
  • v0.3.11 Changes

    February 19, 2018

    Colour 0.3.11 - Alpha Milestone

    πŸš€ This release is an important milestone on The Road to Stable. The spectral backend has been entirely overhauled and is based on a continuous signal implementation. It is backward incompatible but we think that the ease of use and speed improvements are worth it.

    It requires minimal code changes from an usage standpoint compared to previous version, e.g. colour.SpectralPowerDistribution instantiation now requires spectral data as first argument:

    Colour 0.3.11

    \>\>\> data = { ...500: 0.0651, ...520: 0.0705, ...540: 0.0772, ...560: 0.0870, ...580: 0.1128, ...600: 0.1360... } \>\>\> SpectralPowerDistribution(data)
    

    Colour 0.3.10

    \>\>\> data = { ...500: 0.0651, ...520: 0.0705, ...540: 0.0772, ...560: 0.0870, ...580: 0.1128, ...600: 0.1360... } \>\>\> SpectralPowerDistribution('Sample', data)
    

    πŸ“š The documentation has been entirely rewritten with an improved presentation and layout, the bibliography and cross-references have been fixed and overall it should be much easier and accessible than the interim automatic version previously used. It still misses a lot of context content but we will be gradually addressing that in future versions.

    πŸ‘€ As part of some import API changes, a deprecation system has been implement so that only key objects are exposed at the colour top level namespace. The colour.plotting sub-package is also affected. As a result you might see warnings as such:

    \>\>\> import colour\>\>\> colour.tsplit/Users/kelsolaar/Documents/Development/colour-science/colour/colour/utilities/verbose.py:141: ColourWarning: "colour.tsplit" object access is deprecated and will change to "colour.utilities.tsplit" in a future release. warn(\*args, \*\*kwargs)\<function tsplit at 0x103152c08\>
    

    πŸ”„ Please adjust your access accordingly to the warnings and the updated documentation. You can also find the related API changes exposed into the colour.API_CHANGES and colour.plotting.API_CHANGES attributes.

    🚧 We have also started to use Invoke to provide automation in our regular maintenance tasks.

    πŸ”‹ Features

    colour.adaptation

    • Implement colour.chromatic_adaptation definition wrapping the following definitions: (@KelSolaar)
      • colour.adaptation.chromatic_adaptation_CIE1994
      • colour.adaptation.chromatic_adaptation_CMCCAT2000
      • colour.adaptation.chromatic_adaptation_Fairchild1990
      • colour.adaptation.chromatic_adaptation_VonKries

    colour.algebra

    • πŸ‘• Implement colour.NullInterpolator class: a call within given tolerances will return existing y variable values or default if outside tolerances. (@KelSolaar)
    • Implement colour.kernel_nearest_neighbour, colour.kernel_linear, colour.kernel_sinc, colour.kernel_lanczos, and colour.kernel_cardinal_spline interpolating kernel definitions for use with the new colour.KernelInterpolator class performing interpolation of a 1-D function. (@KelSolaar)

    colour.appearance

    • Implement support for CAM16 colour appearance model with colour.XYZ_to_CAM16 and colour.CAM16_to_XYZ definitions. (@KelSolaar)

    colour.continuous

    • 🚦 Implement colour.continuous.AbstractContinuousFunction, colour.continuous.Signal and colour.continuous.MultiSignal classes implementing support for continuous functions/signals representation. (@KelSolaar, @MichaelMauderer)

    colour.difference

    Implement support for Li et al. (2017) CAM16 based uniform colourspaces colour difference with colour.difference.delta_E_CAM16LCD, colour.difference.delta_E_CAM16SCD, and colour.difference.delta_E_CAM16UCS definitions. (@KelSolaar)

    • colour.delta_E wrapper definition has been improved and accepts the following methods: (@KelSolaar)
      • CIE 1976
      • CIE 1994
      • CIE 2000
      • CMC
      • CAM02-LCD
      • CAM02-SCD
      • CAM02-UCS
      • CAM16-LCD
      • CAM16-SCD
      • CAM16-UCS

    colour.models

    • Implement support for ITU-R BT.2100 transfer functions with the following definitions: (@KelSolaar, @nick-shaw)
      • colour.models.oetf_BT2100_PQ
      • colour.models.oetf_reverse_BT2100_PQ
      • colour.models.eotf_BT2100_PQ
      • colour.models.eotf_reverse_BT2100_PQ
      • colour.models.ootf_BT2100_PQ
      • colour.models.ootf_reverse_BT2100_PQ
      • colour.models.oetf_BT2100_HLG
      • colour.models.oetf_reverse_BT2100_HLG
      • colour.models.eotf_BT2100_HLG
      • colour.models.eotf_reverse_BT2100_HLG
      • colour.models.ootf_BT2100_HLG
      • colour.models.ootf_reverse_BT2100_HLG
    • Implement support for SMPTE 240M transfer functions with colour.models.oetf_SMPTE240M and colour.models.eotf_SMPTE240M definitions. (@KelSolaar)
    • Implement colour.oetf_reverse and colour.eotf_reverse definitions and colour.OETFS_REVERSE and colour.EOTFS_REVERSE attributes defining relevant reverse OETF and EOTF conversions. (@KelSolaar, @nick-shaw, @KevinJW)
    • Implement colour.legal_to_full and colour.full_to_legal definitions providing conversions between full range and legal range. (@KelSolaar)
    • Implement colour.CV_range definition returning the Code Value range for given bit depth, range legality and representation. (@nick-shaw)
    • Implement support for Li et al. (2017) CAM16 based uniform colourspaces with colour.JMh_CAM16_to_CAM16LCD, colour.CAM16LCD_to_JMh_CAM16, colour.JMh_CAM16_to_CAM16SCD, colour.CAM16SCD_to_JMh_CAM16, colour.JMh_CAM16_to_CAM16UCS, CAM16UCS_to_JMh_CAM16 definitions. (@KelSolaar)
    • Implement colour.RGB_Colourspace. __str__ and colour.RGB_Colourspace. __repr__ methods.
      (@KelSolaar)

    colour.recovery

    • Implement colour.XYZ_to_spectral definition wrapping the following definitions: (@KelSolaar)
      • colour.recovery.XYZ_to_spectral_Meng2015
      • colour.recovery.RGB_to_spectral_Smits1999

    colour.utilities

    • Implement colour.utilities.closest_indexes definition that returns a array closest element indexes to reference b array elements. (@KelSolaar)
    • Implement colour..utilities.fill_nan definition that fills given array NaNs either through linear interpolation or with given constant value. (@KelSolaar)
    • Implement colour.utilities.ndarray_write context manager that sets given array writeable to perform an operation and then read-only. (@KelSolaar)
    • Implement colour.utilities.first_item definition that returns the first item of given iterable. (@KelSolaar)

    πŸ›  Fixes

    colour.models

    • colour.models.log_encoding_CanonLog3 and colour.models.log_decoding_CanonLog3 definitions implementation was slightly incorrect, they have been reimplemented correctly. (@nick-shaw, @KelSolaar)
    • colour.models.log_encoding_SLog2 and colour.models.log_decoding_SLog2 definitions implementation was incorrect, they have been reimplemented correctly. (@nick-shaw, @KelSolaar)

    colour.plotting

    • πŸ‘» colour.plotting.display definition was raising an exception when attempting to save a figure. (@KelSolaar)

    colour.recovery

    • colour.recovery.XYZ_to_spectral_Meng2015 definition recovered spectral power distribution has been scaled by 100. (@KelSolaar)

    colour.temperature

    • colour.temperature.uv_to_CCT_Ohno2013 definition was incorrectly using parabolic solution. (@brandondube, @KelSolaar)
      • As a consequence correlated colour temperature computations using Ohno (2013) method are slightly affected:
      • CCT: 6507.51282029, 0.00322336 ---> 6507.47380460, 0.00322335
      • CQS: 75.3424278440688 ---> 75.342591389578701

    colour.utilities

    • colour.utilities.is_iterable definition does not consume consumes the first item of given iterator. (@KelSolaar, @MichaelMauderer)

    colour.volume

    • MacAdam (1935) Optimal Colour Stimuli data for D65 illuminant taken from Centore (2012) had a reproduction error.

    πŸ”„ Changes

    colour.adaptation

    • colour.adaptation.chromatic_adaptation_CMCCAT2000: (@KelSolaar)
      • Signature: chromatic_adaptation_CMCCAT2000(XYZ, XYZ_w, XYZ_wr, L_A1, L_A2, surround=CMCCAT2000_VIEWING_CONDITIONS['Average'], direction='Forward')

    colour.colorimetry

    colour.DEFAULT_WAVELENGTH_DECIMALS: (@KelSolaar)

    - Remove

    colour.SpectralMapping: (@KelSolaar)

    - Remove

    colour.SpectralPowerDistribution: (@KelSolaar)

    - Signature: __init__ (self, data=None, domain=None, **kwargs)

    colour.SpectralPowerDistribution.data: (@KelSolaar)

    - Remove

    colour.SpectralPowerDistribution.title: (@KelSolaar)

    - Name: SpectralPowerDistribution.strict_name

    colour.SpectralPowerDistribution.items: (@KelSolaar)

    - Remove

    colour.SpectralPowerDistribution. __iter__: (@KelSolaar)

    - Remove

    colour.SpectralPowerDistribution.get: (@KelSolaar)

    - Remove

    colour.SpectralPowerDistribution.extrapolate: (@KelSolaar)

    - Signature: extrapolate(self, shape, extrapolator=None, extrapolator_args=None)

    colour.SpectralPowerDistribution.interpolate: (@KelSolaar)

    - Signature: interpolate(self, shape, interpolator=None, interpolator_args=None)

    colour.SpectralPowerDistribution.align: (@KelSolaar)

    - Signature: align(self, shape, interpolator=None, interpolator_args=None, extrapolator=None, extrapolator_args=None)

    colour.SpectralPowerDistribution.trim_wavelengths: (@KelSolaar)

    - Name: SpectralPowerDistribution.trim

    colour.SpectralPowerDistribution.zeros: (@KelSolaar)

    - Remove

    πŸ‘― colour.SpectralPowerDistribution.clone: (@KelSolaar)

    - Name: SpectralPowerDistribution.copy

    colour.MultiSpectralPowerDistribution: (@KelSolaar)

    - Signature: __init__ (self, data=None, domain=None, labels=None, **kwargs)

    colour.MultiSpectralPowerDistribution.mapping: (@KelSolaar)

    - Remove

    colour.MultiSpectralPowerDistribution.data: (@KelSolaar)

    - Remove

    colour.MultiSpectralPowerDistribution.title: (@KelSolaar)

    - Name: MultiSpectralPowerDistribution.strict_name

    colour.MultiSpectralPowerDistribution.x: (@KelSolaar)

    - Remove

    colour.MultiSpectralPowerDistribution.y: (@KelSolaar)

    - Remove

    colour.MultiSpectralPowerDistribution.z: (@KelSolaar)

    - Remove

    colour.MultiSpectralPowerDistribution.items: (@KelSolaar)

    - Remove

    colour.MultiSpectralPowerDistribution. __iter__: (@KelSolaar)

    - Remove

    colour.MultiSpectralPowerDistribution.get: (@KelSolaar)

    - Remove

    colour.MultiSpectralPowerDistribution.extrapolate: (@KelSolaar)

    - Signature: extrapolate(self, shape, extrapolator=None, extrapolator_args=None)

    colour.MultiSpectralPowerDistribution.interpolate: (@KelSolaar)

    - Signature: interpolate(self, shape, interpolator=None, interpolator_args=None)

    colour.MultiSpectralPowerDistribution.align: (@KelSolaar)

    - Signature: align(self, shape, interpolator=None, interpolator_args=None, extrapolator=None, extrapolator_args=None)

    colour.MultiSpectralPowerDistribution.trim_wavelengths: (@KelSolaar)

    - Name: MultiSpectralPowerDistribution.trim

    colour.MultiSpectralPowerDistribution.zeros: (@KelSolaar)

    - Remove

    πŸ‘― colour.MultiSpectralPowerDistribution.clone: (@KelSolaar)

    • Name: MultiSpectralPowerDistribution.copy

    colour.models

    • colour.models.log_encoding_SLog: (@nick-shaw, @KelSolaar)
      • Signature: log_encoding_SLog(x, bit_depth=10, out_legal=True, in_reflection=True)
      • Note: The return value is now in legal range (studio swing).
    • colour.models.log_decoding_SLog: (@nick-shaw, @KelSolaar)
      • Signature: log_decoding_SLog(y, bit_depth=10, in_legal=True, out_reflection=True)
      • Note: The input value is now in legal range (studio swing).
    • colour.models.log_encoding_SLog2: (@nick-shaw, @KelSolaar)
      • Signature: log_encoding_SLog2(x, bit_depth=10, out_legal=True, in_reflection=True)
      • Note: The return value is now in legal range (studio swing).
    • colour.models.log_decoding_SLog2: (@nick-shaw, @KelSolaar)
      • Signature: log_decoding_SLog2(y, bit_depth=10, in_legal=True, out_reflection=True)
      • Note: The input value is now in legal range (studio swing).
    • colour.models.log_encoding_SLog3: (@nick-shaw, @KelSolaar)
      • Signature: log_encoding_SLog3(x, bit_depth=10, out_legal=True, in_reflection=True)
      • Note: The return value is now in legal range (studio swing).
    • colour.models.log_decoding_SLog3: (@nick-shaw, @KelSolaar)
      • Signature: log_decoding_SLog3(y, bit_depth=10, in_legal=True, out_reflection=True)
      • Note: The input value is now in legal range (studio swing).
    • colour.models.log_encoding_VLog: (@nick-shaw, @KelSolaar)
      • Signature: log_encoding_VLog(L_in, bit_depth=10, out_legal=True, in_reflection=True)
    • colour.models.log_decoding_VLog: (@nick-shaw, @KelSolaar)
      • Signature: log_decoding_VLog(V_out, bit_depth=10, in_legal=True, out_reflection=True)
    • colour.models.log_encoding_CanonLog: (@nick-shaw, @KelSolaar)
      • Signature: log_encoding_CanonLog(x, bit_depth=10, out_legal=True, in_reflection=True)
      • Note: The input value is now reflection according to ACES IDT.
    • colour.models.log_decoding_CanonLog: (@nick-shaw, @KelSolaar)
      • Signature: log_decoding_CanonLog(clog_ire, bit_depth=10, in_legal=True, out_reflection=True)
      • Note: The output value is now reflection according to ACES IDT.
    • colour.models.log_encoding_CanonLog2: (@nick-shaw, @KelSolaar)
      • Signature: log_encoding_CanonLog2(x, bit_depth=10, out_legal=True, in_reflection=True)
      • Note: The input value is now reflection according to ACES IDT.
    • colour.models.log_decoding_CanonLog2: (@nick-shaw, @KelSolaar)
      • Signature: log_decoding_CanonLog2(clog2_ire, bit_depth=10, in_legal=True, out_reflection=True)
      • Note: The output value is now reflection according to ACES IDT.
    • colour.models.log_encoding_CanonLog3: (@nick-shaw, @KelSolaar)
      • Signature: log_encoding_CanonLog3(x, bit_depth=10, out_legal=True, in_reflection=True)
      • Note: The input value is now reflection according to ACES IDT.
    • colour.models.log_decoding_CanonLog3: (@nick-shaw, @KelSolaar)
      • Signature: log_decoding_CanonLog3(clog3_ire, bit_depth=10, in_legal=True, out_reflection=True)
      • Note: The output value is now reflection according to ACES IDT.
    • colour.models.eotf_ARIBSTDB67: (@KelSolaar, @nick-shaw, @KevinJW)
      • Name: oetf_reverse_ARIBSTDB67
    • colour.models.eotf_BT709: (@KelSolaar, @nick-shaw, @KevinJW)
      • Name: oetf_reverse_BT709
    • colour.models.oetf_BT1886: (@KelSolaar, @nick-shaw, @KevinJW)
      • Name: eotf_reverse_BT1886
    • colour.models.eotf_sRGB: (@KelSolaar, @nick-shaw, @KevinJW)
      • Name: oetf_reverse_sRGB
    • colour.models.ALEXA_WIDE_GAMUT_RGB_COLOURSPACE: (@KelSolaar)
      • Name: ALEXA_WIDE_GAMUT_COLOURSPACE
    • colour.models.NTSC_RGB_COLOURSPACE: (@KelSolaar)
      • Name: NTSC_COLOURSPACE
    • colour.models.PAL_SECAM_RGB_COLOURSPACE: (@KelSolaar)
      • Name: PAL_SECAM_COLOURSPACE
    • colour.models.REC_709_COLOURSPACE: (@KelSolaar, @nick-shaw, @KevinJW, @meshula)
      • Name: BT709_COLOURSPACE
    • colour.models.REC_2020_COLOURSPACE: (@KelSolaar, @nick-shaw, @KevinJW, @meshula)
      • Name: BT2020_COLOURSPACE
    • colour.models.SMPTE_C_RGB_COLOURSPACE: (@KelSolaar)
      • Name: SMPTE_240M_COLOURSPACE

    colour.plotting

    • colour.plotting.CIE_1931_chromaticity_diagram_plot: (@brandondube, @KelSolaar)
      • Name: chromaticity_diagram_plot_CIE1931
      • Signature: `chromaticity_diagram_plot_CIE1931(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, use_cached_diagram_colours=True, **kwargs)
    • colour.plotting.CIE_1960_UCS_chromaticity_diagram_plot: (@brandondube, @KelSolaar)
      • Name: chromaticity_diagram_plot_CIE1960UCS
      • Signature: `chromaticity_diagram_plot_CIE1960UCS(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, use_cached_diagram_colours=True, **kwargs)
    • colour.plotting.CIE_1976_UCS_chromaticity_diagram_plot: (@brandondube, @KelSolaar)
      • Name: chromaticity_diagram_plot_CIE1976UCS
      • Signature: `chromaticity_diagram_plot_CIE1976UCS(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, use_cached_diagram_colours=True, **kwargs)
    • colour.plotting.spds_CIE_1931_chromaticity_diagram_plot: (@KelSolaar)
      • Name: spds_chromaticity_diagram_plot_CIE1931
      • Signature: spds_chromaticity_diagram_plot_CIE1931(spds, cmfs='CIE 1931 2 Degree Standard Observer', annotate=True, chromaticity_diagram_callable_CIE1931=(chromaticity_diagram_plot_CIE1931), **kwargs)
    • colour.plotting.spds_CIE_1960_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Name: spds_chromaticity_diagram_plot_CIE1960UCS
      • Signature: spds_chromaticity_diagram_plot_CIE1960UCS(spds, cmfs='CIE 1931 2 Degree Standard Observer', annotate=True, chromaticity_diagram_callable_CIE1960UCS=(chromaticity_diagram_plot_CIE1960UCS), **kwargs)
    • colour.plotting.spds_CIE_1976_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Name: spds_chromaticity_diagram_plot_CIE1976UCS
      • Signature: spds_chromaticity_diagram_plot_CIE1976UCS(spds, cmfs='CIE 1931 2 Degree Standard Observer', annotate=True, chromaticity_diagram_callable_CIE1976UCS=(chromaticity_diagram_plot_CIE1976UCS), **kwargs)
    • colour.plotting.RGB_colourspaces_CIE_1931_chromaticity_diagram_plot: (@KelSolaar)
      • Name: RGB_colourspaces_chromaticity_diagram_plot_CIE1931
      • Signature: RGB_colourspaces_chromaticity_diagram_plot_CIE1931(colourspaces=None, cmfs='CIE 1931 2 Degree Standard Observer', chromaticity_diagram_callable_CIE1931=(chromaticity_diagram_plot_CIE1931), **kwargs)
    • colour.plotting.RGB_colourspaces_CIE_1960_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Name: RGB_colourspaces_chromaticity_diagram_plot_CIE1960UCS
      • Signature: RGB_colourspaces_chromaticity_diagram_plot_CIE1960UCS(colourspaces=None, cmfs='CIE 1931 2 Degree Standard Observer', chromaticity_diagram_callable_CIE1960UCS=(chromaticity_diagram_plot_CIE1960UCS), **kwargs)
    • colour.plotting.RGB_colourspaces_CIE_1976_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Name: RGB_colourspaces_chromaticity_diagram_plot_CIE1976UCS
      • Signature: RGB_colourspaces_chromaticity_diagram_plot_CIE1976UCS(colourspaces=None, cmfs='CIE 1931 2 Degree Standard Observer', chromaticity_diagram_callable_CIE1976UCS=(chromaticity_diagram_plot_CIE1976UCS), **kwargs)
    • colour.plotting.RGB_chromaticity_coordinates_CIE_1931_chromaticity_diagram_plot: (@KelSolaar)
      • Name: RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1931
      • Signature: RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1931(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1931=(RGB_colourspaces_CIE_1931_chromaticity_diagram_plot), **kwargs)
    • colour.plotting.RGB_chromaticity_coordinates_CIE_1960_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Name: RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1960UCS
      • Signature: RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1960UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1960UCS=(RGB_colourspaces_CIE_1960_UCS_chromaticity_diagram_plot), **kwargs)
    • colour.plotting.RGB_chromaticity_coordinates_CIE_1976_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Name: RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1976UCS
      • Signature: RGB_chromaticity_coordinates_chromaticity_diagram_plot_CIE1976UCS(RGB, colourspace='sRGB', chromaticity_diagram_callable_CIE1976UCS=(RGB_colourspaces_CIE_1976_UCS_chromaticity_diagram_plot), **kwargs)
    • colour.plotting.planckian_locus_CIE_1931_chromaticity_diagram_plot: (@KelSolaar)
      • Name: planckian_locus_chromaticity_diagram_plot_CIE1931
      • Signature: planckian_locus_chromaticity_diagram_plot_CIE1931(illuminants=None, chromaticity_diagram_callable_CIE1931=(chromaticity_diagram_plot_CIE1931), **kwargs)
    • colour.plotting.planckian_locus_CIE_1960_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Name: planckian_locus_chromaticity_diagram_plot_CIE1960UCS
      • Signature: planckian_locus_chromaticity_diagram_plot_CIE1960UCS(illuminants=None, chromaticity_diagram_callable_CIE1960UCS=(chromaticity_diagram_plot_CIE1960UCS), **kwargs)

    colour.utilities

    • colour.ArbitraryPrecisionMapping: (@KelSolaar)
      • Remove
  • v0.3.10 Changes

    December 02, 2017

    Colour 0.3.10 - Alpha Milestone

    Colour is now formatted using Yapf, the current configuration is subject to change but this will help contributors not using PyCharm to use their favourite editor while having the capability to format the contributed code to our Colour standard.

    πŸ”‹ Features

    colour.biochemistry

    • Implement support for Michaelis–Menten kinetics, a model of enzyme kinetics with colour.reaction_rate_MichealisMenten and colour.substrate_concentration_MichealisMenten definitions. (@KelSolaar)

    colour.colorimetry

    • Implement support for yellowness computation with colour.yellowness_ASTMD1925 and colour.yellowness_ASTME313 definitions. (@KelSolaar)
    • Implement support for Fairchild and Wyble (2010)lightness computation with colour.lightness_Fairchild2010 definition. (@KelSolaar)
    • Implement support for Fairchild and Wyble (2010)luminance computation with colour.luminance_Fairchild2010 definition. (@KelSolaar)

    colour.models

    • 🌲 Implement support for ARIB STD-B67 (Hybrid Log-Gamma) EOTF and OETF with colour.eotf_ARIBSTDB67 and colour.oetf_ARIBSTDB67 definitions. (@KelSolaar)
    • Implement support for DICOM - Grayscale Standard Display Function EOTF and OETF with colour.eotf_DICOMGSDF and colour.oetf_DICOMGSDF definitions. (@KelSolaar)
    • Implement support for Protune Native colourspace with colour.PROTUNE_NATIVE_COLOURSPACE colourspace class. (@KelSolaar)
    • Implement support for Protune log curves with colour.log_encoding_Protune and colour.log_decoding_Protune definitions. (@KelSolaar)
    • Implement support for Prismatic colourspace with colour.RGB_to_Prismatic and colour.Prismatic_to_RGB definitions. (@KelSolaar)
    • Implement support for hdr-CIELab and hdr-IPT colourspaces with colour.XYZ_to_hdr_CIELab, colour.hdr_CIELab_to_XYZ, colour.XYZ_to_hdr_IPT and colour.hdr_IPT_to_XYZ definitions. (@KelSolaar)

    colour.recovery

    • Implement support for Meng et al. reflectance recovery method with colour.XYZ_to_spectral_Meng2015 definition. (@KelSolaar)

    colour.utilities

    • Implement colour.as_namedtuple definition that attempts to convert given array_like, Mapping or Numpy structured array to namedtuple. (@KelSolaar)

    πŸ›  Fixes

    colour.appearance

    • colour.XYZ_to_CIECAM02 and colour.CIECAM02_to_XYZ definitions handles negative numbers gracefully as per CIECAM02 and Its Recent Developments (@crowsonkb)

    colour.colorimetry.

    • colour.TriSpectralPowerDistribution.items method was broken. (@KelSolaar)

    colour.models

    • colour.eotf_BT1886 and colour.oetf_BT1886 definitions default arguments L_B and L_W had their default values changed from respectively 64 and 940 to 0 and 1. (@KelSolaar, @nick-shaw)

    πŸ”„ Changes

    colour.appearance

    • colour.CIECAM02_to_XYZ: (@KelSolaar, @crowsonkb)
      • Signature: CIECAM02_to_XYZ(CIECAM02_specification, XYZ_w, L_A, Y_b, surround=CIECAM02_VIEWING_CONDITIONS['Average'], discount_illuminant=False)

    colour.colorimetry

    • colour.whiteness_ASTM313: (@KelSolaar)
      • Name: whiteness_ASTME313

    colour.models

  • v0.3.9 Changes

    March 12, 2017

    Colour 0.3.9 - Alpha Milestone

    πŸ”‹ Features

    colour.characterisation

    • Add camera spectral sensitivities for Nikon 5100 and Sigma SDMerill measured by the National Physical Laboratory and available from colour.CAMERAS_RGB_SPECTRAL_SENSITIVITIES attribute. (@KelSolaar)

    colour.colorimetry

    • colour.SpectralPowerDistribution and colour.TriSpectralPowerDistribution classes have been optimised and are now 6.5 times faster on usual computations. (@KelSolaar)

    colour.difference

    • Implement support for Luo et al. (2006) CIECAM02 based uniform colourspaces colour difference with colour.delta_E_CAM02LCD, colour.delta_E_CAM02SCD, and colour.delta_E_CAM02UCS definitions. (@KelSolaar)

    colour.plotting

    • Implement colour.plotting.colour_plotting_defaults definition that installs Colour default plotting parameters, this implies that Colour will now not override Matplotlib rc parameters on import. (@KelSolaar)

    colour.quality

    • colour.colour_quality_scale definition has been optimised and is now 10.5 times faster, its return value is minorly altered. (@KelSolaar)
    • colour.colour_rendering_index definition has been optimised and is now 13.1 times faster, its return value is minorly altered. (@KelSolaar)

    colour.models

    • Implement support for Luo et al. (2006) CIECAM02 based uniform colourspaces with colour.JMh_CIECAM02_to_CAM02LCD, colour.CAM02LCD_to_JMh_CIECAM02, colour.JMh_CIECAM02_to_CAM02SCD, colour.CAM02SCD_to_JMh_CIECAM02, colour.JMh_CIECAM02_to_CAM02UCS and colour.CAM02UCS_to_JMh_CIECAM02 definitions. (@KelSolaar)
    • Implement support for Dolby ICTCP colourspace with colour.RGB_to_ICTCP and colour.ICTCP_to_RGB definitions. (@KelSolaar)
    • πŸ‘ Implement support for two sets of transformations matrices in colour.RGB_Colourspace class whose purpose is to support both literature defined dataset and accurate computations enabling transformations without loss of precision. colour.RGB_Colourspace.use_derived_RGB_to_XYZ_matrix and colour.RGB_Colourspace.use_derived_XYZ_to_RGB_matrix attributes and the colour.RGB_Colourspace.use_derived_transformation_matrices method have been introduced to alter the behaviour of the class on a per user need basis. (@KelSolaar, @KevinJW, @nick-shaw, @MichaelMauderer)
    • 🌲 Implement support for Canon Log 2 and Canon Log 3 log curves with colour.log_encoding_CanonLog2, colour.log_decoding_CanonLog2, colour.log_encoding_CanonLog3 and colour.log_decoding_CanonLog3 definitions. (@KelSolaar)
    • Implement support for RedWideGamut RGB colourspace and Log3G10, Log3G12 log curves with respectively colour.RED_WIDE_GAMUT_RGB colourspace class and colour.log_encoding_Log3G10, colour.log_decoding_Log3G10, colour.log_encoding_Log3G12, colour.log_decoding_Log3G12 definitions. (@nick-shaw)
    • Implement support for ACEScct colourspace and ACEScct log curves with respectively colour.ACES_CCT_COLOURSPACE colourspace class and colour.log_encoding_ACEScct, colour.log_encoding_ACEScct definitions. (@scooperxyz)
    • Implement colour.RGB_to_RGB_matrix definition computing the matrix converting from given input RGB colourspace to output RGB colourspace. (@KelSolaar, @KevinJW)

    colour.temperature

    • Implement support for Krystek (1985) correlated colour temperature to chromaticity coordinates uv computation with colour.CCT_to_uv_Krystek1985 definition. (@KelSolaar)
    • colour.uv_to_CCT_Ohno2013 definition has been optimised and is now 15.7 times faster. (@KelSolaar)
    • colour.CCT_to_uv_Ohno2013 definition has been optimised and is now ? times faster. (@KelSolaar)

    colour.utilities

    • Implement colour.linear_conversion definition performing a simple linear conversion of given array between the old and new range. (@KelSolaar)

    πŸ”„ Changes

    colour.algebra

    • colour.cartesian_to_cylindrical: (@KelSolaar)
      • Returns: Cylindrical coordinates array (radial distance ρ, azimuth Ο†, and height z)
    • colour.cylindrical_to_cartesian: (@KelSolaar)
      • Signature: cylindrical_to_cartesian(a), cylindrical coordinates array (radial distance ρ, azimuth Ο†, and height z)

    colour.characterisation

    • colour.characterisation.dataset.colour_checkers.chromaticity_coordinates.ColourChecker_Specification: (@KelSolaar)
      • Signature: ColourChecker_Specification('index', 'name', 'xyY')

    colour.colorimetry

    • colour.DEFAULT_SPECTRAL_SHAPE: (@KelSolaar)
      • Value: SpectralShape(360, 780, 1)

    colour.models

    • colour.log_encoding_ACESproxy: (@KelSolaar)
      • Signature: log_encoding_ACESproxy(lin_AP1, bit_depth='10 Bit')
    • colour.log_encoding_ACEScc: (@KelSolaar)
      • Signature: log_encoding_ACEScc(lin_AP1)
    • colour.oetf_ROMMRGB: (@KelSolaar)
      • Signature: oetf_ROMMRGB(X, I_max=255)
    • colour.eotf_ROMMRGB: (@KelSolaar)
      • Signature: eotf_ROMMRGB(X_p, I_max=255)
    • The following RGB colourspaces XYZ to RGB matrix have been replaced by their specified one if existing: (@KelSolaar)
      • ACES Primaries 0
      • Adobe RGB (1998)
      • ALEXA Wide Gamut RGB
      • CIE RGB
      • ROMM RGB
      • sRGB
      • V-Gamut
    • colour.RGB_to_RGB: (@KelSolaar, @scooperxyz)
      • Signature: RGB_to_RGB(RGB, input_colourspace, output_colourspace, chromatic_adaptation_transform='CAT02', apply_decoding_cctf=False, apply_encoding_cctf=False)

    colour.plotting

    • colour.plotting.multi_colour_plot: (@KelSolaar)
      • Signature: multi_colour_plot(colour_parameters, width=1, height=1, spacing=0, across=3, text_display=True, text_size='large', text_offset=0.075, background_colour=(1.0, 1.0, 1.0), **kwargs)

    colour.temperature

    • colour.CCT_to_uv: (@KelSolaar)
      • Signature: CCT_to_uv(CCT, method='Ohno 2013', **kwargs)
  • v0.3.8 Changes

    July 31, 2016

    Colour 0.3.8 - Alpha Milestone

    This release introduces important backward incompatible changes on various spectral computations, illuminants chromaticity coordinates and RGB colourspace model related objects, please carefully refer to the Changes section.

    A Jupyter Notebook is available to illustrate the expected computational differences: they should remain orders of magnitude under visual discrimination threshold however they will likely create computational discrepancies.

    With Colour 0.3.8, SciPy is now a requirement.

    πŸš€ @MichaelMauderer and I would like to thanks all the contributors for that release whether they contribute to the code or participate in discussions.

    πŸ”‹ Features

    colour.algebra

    • Implement colour.lagrange_coefficients definition computing Lagrange Coefficients at given point for given degree. (@KelSolaar)
    • Implement colour.normalise_vector definition performing vector normalisation. (@KelSolaar)
    • Implement colour.euclidean_distance definition computing the euclidean distance between two vector arrays. (@KelSolaar)
    • Implement colour.intersect_line_segments definition performing line segment intersections computations. (@KelSolaar)

    colour.characterisation

    • πŸ‘ Implement colour.RGB_DisplayPrimaries class providing support for RGB displays primaries tri-spectral power distributions. (@KelSolaar)

    colour.characterisation.dataset

    • Add Apple Studio Display RGB display primaries tri-spectral power distributions.(@KelSolaar)
    • Add Typical CRT Brainard 1997 RGB display primaries tri-spectral power distributions.(@KelSolaar)

    colour.colorimetry

    • Implement colour.CIE_standard_illuminant_A_function definition computing CIE Standard Illuminant A value at given wavelength range. (@KelSolaar)
    • Implement colour.SpectralShape.boundaries method returning the boundaries start and end values of given shape. (@KelSolaar)
    • Implement colour.SpectralPowerDistribution.trim_wavelengths and colour.TriSpectralPowerDistribution.trim_wavelengths methods trimming their respective classes wavelength range to given shape. (@KelSolaar, @MichaelMauderer, @Ron024)
    • Implement colour.dominant_wavelength definition computing the dominant wavelength of a given colour stimulus xy chromaticity coordinates. (@KelSolaar)
    • Implement colour.complementary_wavelength definition computing the complementary wavelength of a given colour stimulus xy chromaticity coordinates. (@KelSolaar)
    • Implement colour.excitation_purity definition computing the excitation purity of a given colour stimulus xy chromaticity coordinates. (@KelSolaar)
    • Implement colour.colorimetric_purity definition computing the colorimetric purity of a given colour stimulus xy chromaticity coordinates. (@KelSolaar)
    • Implement colour.tristimulus_weighting_factors_ASTME202211 definition computing tristimulus weighting factors tables using practise ASTM E2022–11 method. (@KelSolaar, @MichaelMauderer )
    • Implement colour.spectral_to_XYZ_integration definition converting given spectral power distribution to CIE XYZ tristimulus values using given colour matching functions and illuminant accordingly to classical integration method. (@KelSolaar)
    • Implement colour.spectral_to_XYZ_tristimulus_weighting_factors_ASTME30815 definition converting given spectral power distribution to CIE XYZ tristimulus values using given colour matching functions and illuminant accordingly to practise ASTM E308–15 method. (@KelSolaar, @MichaelMauderer )
    • Implement colour.spectral_to_XYZ_ASTME30815 definition converting given spectral power distribution to CIE XYZ tristimulus values accordingly to practise ASTM E308–15 method. (@KelSolaar, @MichaelMauderer )
    • Implement colour.luminous_efficiency definition computing Luminous Efficiency of given spectral power distribution. (@KelSolaar, @canavandl)

    colour.colorimetry.dataset

    • Add Smith & Pokorny 1975 Normal Trichromats colour matching functions. (@KelSolaar)
    • Add various HunterLab illuminants data. Please refer to the colour.colorimetry.dataset.illuminants.hunterlab documentation references for links to more information. (@KelSolaar, @Ron024)

    colour.corresponding

    • Implement colour.corresponding_chromaticities_prediction generic corresponding chromaticities prediction definition. (@KelSolaar)

    colour.models

    • Implement support for Hunter L,a,b and Hunter Rd,a,b colour scales with colour.XYZ_to_Hunter_Lab, colour.Hunter_Lab_to_XYZ and colour.XYZ_to_Hunter_Rdab definitions. (@KelSolaar, @Ron024)
    • Implement support for YCbCr and YcCbcCrc colour encodings with colour.RGB_to_YCbCr, colour.YCbCr_to_RGB, colour.RGB_to_YcCbcCrc and colour.YcCbcCrc_to_RGB definitions. (@nick-shaw, @KelSolaar, @KevinJW)
    • Implement support for BT 1886 EOTF and OETF with colour.eotf_BT1886 and colour.eotf_BT1886 definitions. (@KelSolaar)
    • Implement support for ST 2084 EOTF and OETF with colour.eotf_ST2084 and colour.oetf_ST2084 definitions. (@KelSolaar)
    • Implement explicit support for REDLog log encoding curve with colour.log_encoding_REDLog and colour.log_decoding_REDLog definitions. (@nick-shaw, @KelSolaar)
    • Implement support for ACESproxy log encoding curve with colour.log_encoding_ACESproxy and colour.log_decoding_ACESproxy definitions. (@KelSolaar)
    • Implement complete support for RIMM / ROMM / ERIMM encodings with colour.oetf_ROMMRGB, colour.eotf_ROMMRGB, colour.oetf_RIMMRGB, colour.eotf_RIMMRGB, colour.log_encoding_ERIMMRGB and colour.log_decoding_ERIMMRGB definitions and colour.ROMM_RGB_COLOURSPACE, colour.RIMM_RGB_COLOURSPACE, colour.ERIMM_RGB_COLOURSPACE and colour.PROPHOTO_RGB_COLOURSPACE classes. (@KelSolaar)
    • πŸ‘ Implement support for generic gamma encoding / decoding function with colour.gamma_function definition. (@KelSolaar)
    • πŸ‘ Implement support for generic linear encoding / decoding function with colour.linear_function definition. (@KelSolaar)
    • Implement colour.oetf and colour.eotf definitions and colour.OETFS and colour.EOTFS attributes providing single point access to supported OETFs and EOTFs. (@KelSolaar)

    colour.utilities

    • Implement colour.centroid definition computing array centroid indexes.
    • Implement colour.orient definition performing array rotation, flip and flop.
    • Implement colour.filter_kwargs definition filtering incompatible keyword arguments with given function signature.
    • ⚠ Implement colour.filter_warnings definition filtering API warnings.

    πŸ›  Fixes

    colour.colorimetry

    • colour.luminous_efficiency definition was incorrectly returning the luminous efficacy and has been renamed accordingly. The current colour.luminous_efficiency definition now properly returns luminous efficiency. (@KelSolaar, @canavandl)

    colour.plotting

    • colour.plotting.nadir_grid had various issues and wasn't working properly since Colour 0.3.7. (@KelSolaar)

    colour.io

    • colour.write_spds_to_csv_file definition now correctly writes CSV files without extra line breaks on Windows. (@Ron024)

    colour.models

    • colour.linear_to_red_log_film and colour.red_log_film_to_linear definitions are now properly based on the Cineon curve. (@nick-shaw, @KelSolaar)

    πŸ”„ Changes

    colour.adaptation

    • colour.CMCCAT2000_forward: (@KelSolaar)
      • Name: colour.chromatic_adaptation_forward_CMCCAT2000
    • colour.CMCCAT2000_reverse: (@KelSolaar)
      • Name: colour.chromatic_adaptation_reverse_CMCCAT2000

    colour.algebra

    • colour.is_identity: (@KelSolaar)
      • Signature: colour.is_identity(a, n=3)
    • colour.cartesian_to_spherical: (@KelSolaar)
      • Signature: colour.cartesian_to_spherical(a)
    • colour.spherical_to_cartesian: (@KelSolaar)
      • Signature: colour.spherical_to_cartesian(a)
    • colour.cartesian_to_cylindrical: (@KelSolaar)
      • Signature: colour.cartesian_to_cylindrical(a)
    • colour.cylindrical_to_cartesian: (@KelSolaar)
      • Signature: colour.cylindrical_to_cartesian(a)

    colour.characterisation

    • colour.first_order_colour_fit: (@KelSolaar)
      • Signature: colour.first_order_colour_fit(m_1, m_2)

    colour.colorimetry

    • colour.ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D50']: (@KelSolaar)
      • Value: (0.34570, 0.35850)
    • colour.ILLUMINANTS['CIE 1931 2 Degree Standard Observer']['D65']: (@KelSolaar)
      • Value: (0.31270, 0.32900)
    • colour.SpectralShape.steps: (@KelSolaar)
      • Name: colour.SpectralShape.interval
    • colour.SpectralPowerDistribution and colour.TriSpectralPowerDistribution classes arithmetical operations such
      βž• as addition , subtraction , multiplication , division and exponentiation are not happening in-place anymore. This behaviour is now supported through augmented assignment operators: spd /= np.max(spd.values) instead of spd / np.max(spd.values). (@KelSolaar)
    • colour.SpectralPowerDistribution.align: (@KelSolaar)
      • Signature: colour.SpectralPowerDistribution.align(self, shape, interpolation_method=None, extrapolation_method='Constant', extrapolation_left=None, extrapolation_right=None)
    • colour.TriSpectralPowerDistribution.align: (@KelSolaar)
      • Signature: colour.TriSpectralPowerDistribution.align(self, shape, interpolation_method=None, extrapolation_method='Constant', extrapolation_left=None, extrapolation_right=None)
    • colour.spectral_to_XYZ: (@KelSolaar)
      • Behaviour: colour.spectral_to_XYZ definition will now use practise ASTM E308–15 method instead of classical integration.
      • Signature: colour.spectral_to_XYZ(spd, cmfs=STANDARD_OBSERVERS_CMFS.get('CIE 1931 2 Degree Standard Observer'), illuminant=ones_spd(STANDARD_OBSERVERS_CMFS.get('CIE 1931 2 Degree Standard Observer').shape), method='ASTM E308–15', **kwargs)
    • colour.lightness_1976: (@KelSolaar)
      • Name: colour.lightness_CIE1976
    • colour.luminance_1976: (@KelSolaar)
      • Name: colour.luminance_CIE1976
    • colour.luminous_efficiency: (@KelSolaar, @canavandl)
      • Name: colour.luminous_efficacy

    colour.difference

    • colour.delta_E_CIE1976: (@KelSolaar)
      • Signature: colour.delta_E_CIE1976(Lab_1, Lab_2, **kwargs)
    • colour.delta_E_CIE1994: (@KelSolaar)
      • Signature: colour.delta_E_CIE1994(Lab_1, Lab_2, textiles=False, **kwargs)
    • colour.delta_E_CIE2000: (@KelSolaar)
      • Signature: colour.delta_E_CIE2000(Lab_1, Lab_2, textiles=False, **kwargs)
    • colour.delta_E_CMC: (@KelSolaar)
      • Signature: colour.delta_E_CMC(Lab_1, Lab_2, l=2, c=1)

    colour.models

    • RGB colourspace model related objects have been moved to a dedicated sub-package: colour.models.rgb. (@KelSolaar)
    • RGB colourspace model OETF / EOTF, log encoding curves have been moved have been moved to a dedicated sub-package: colour.models.rgb.transfer_functions. (@KelSolaar)
    • colour.RGB_Colourspace.OECF: (@KelSolaar)
      • Name: colour.RGB_Colourspace.encoding_cctf
    • colour.RGB_Colourspace.EOCF: (@KelSolaar)
      • Name: colour.RGB_Colourspace.decoding_cctf
    • colour.XYZ_to_sRGB: (@KelSolaar)
      • Signature: colour.XYZ_to_sRGB(XYZ, illuminant=RGB_COLOURSPACES.get('sRGB').whitepoint, chromatic_adaptation_transform='CAT02', apply_encoding_cctf=True)
    • colour.sRGB_to_XYZ: (@KelSolaar)
      • Signature: colour.sRGB_to_XYZ(RGB, illuminant=RGB_COLOURSPACES.get('sRGB').whitepoint, chromatic_adaptation_method='CAT02', apply_decoding_cctf=True)
    • colour.linear_to_cineon: (@KelSolaar)
      • Name: colour.log_encoding_Cineon
    • colour.cineon_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_Cineon
    • colour.linear_to_panalog: (@KelSolaar)
      • Name: colour.log_encoding_Panalog
    • colour.panalog_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_Panalog
    • colour.linear_to_viper_log: (@KelSolaar)
      • Name: colour.log_encoding_ViperLog
    • 🌲 colour.viper_log_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_ViperLog
    • colour.linear_to_pivoted_log: (@KelSolaar)
      • Name: colour.log_encoding_PivotedLog
    • 🌲 colour.pivoted_log_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_PivotedLog
    • colour.linear_to_c_log: (@KelSolaar)
      • Name: colour.log_encoding_CLog
    • 🌲 colour.c_log_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_CLog
    • colour.linear_to_aces_cc: (@KelSolaar)
      • Name: colour.log_encoding_ACEScc
    • colour.aces_cc_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_ACEScc
    • colour.linear_to_alexa_log_c: (@KelSolaar)
      • Name: colour.log_encoding_ALEXALogC
    • 🌲 colour.alexa_log_c_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_ALEXALogC
    • colour.linear_to_red_log_film: (@KelSolaar)
      • Name: colour.log_encoding_REDLogFilm
    • 🌲 colour.red_log_film_to_linear: (@KelSolaar)
      • Name: colour.log_encoding_SLog
    • colour.linear_to_s_log: (@KelSolaar)
      • Name: colour.log_encoding_SLog
    • 🌲 colour.s_log_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_SLog
    • colour.linear_to_s_log2: (@KelSolaar)
      • Name: colour.log_encoding_SLog2
    • colour.s_log2_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_SLog2
    • colour.linear_to_s_log3: (@KelSolaar)
      • Name: colour.log_encoding_SLog3
    • colour.s_log3_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_SLog3
    • colour.linear_to_v_log: (@KelSolaar)
      • Name: colour.log_encoding_VLog
    • 🌲 colour.v_log_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_VLog
    • colour.LINEAR_TO_LOG_METHODS: (@KelSolaar)
      • Name: colour.LOG_ENCODING_METHODS
    • colour.linear_to_log: (@KelSolaar)
      • Name: colour.log_encoding_curve
    • colour.LOG_TO_LINEAR_METHODS: (@KelSolaar)
      • Name: colour.LOG_DECODING_METHODS
    • colour.log_to_linear: (@KelSolaar)
      • Name: colour.log_decoding_curve
    • colour.RGB_COLOURSPACES['Adobe RGB 1998']: (@KelSolaar)
      • Name: colour.RGB_COLOURSPACES['Adobe RGB (1998)']
    • colour.ACES_2065_1_OECF: (@KelSolaar)
      • Remove
    • colour.ACES_2065_1_EOCF: (@KelSolaar)
      • Remove
    • colour.ACES_CG_OECF: (@KelSolaar)
      • Remove
    • colour.ACES_CG_EOCF: (@KelSolaar)
      • Remove
    • colour.ACES_CC_OECF: (@KelSolaar)
      • Remove
    • colour.ACES_CC_EOCF: (@KelSolaar)
      • Remove
    • colour.ACES_PROXY_OECF: (@KelSolaar)
      • Remove
    • colour.ACES_PROXY_EOCF: (@KelSolaar)
      • Remove
    • colour.ADOBE_RGB_1998_OECF: (@KelSolaar)
      • Remove
    • colour.ADOBE_RGB_1998_EOCF: (@KelSolaar)
      • Remove
    • colour.ADOBE_WIDE_GAMUT_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.ADOBE_WIDE_GAMUT_RGB_EOCF: (@KelSolaar)
      • Remove
    • 🌲 colour.ALEXA_LOG_C_OECF: (@KelSolaar)
      • Remove
    • 🌲 colour.ALEXA_LOG_C_EOCF: (@KelSolaar)
      • Remove
    • colour.APPLE_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.APPLE_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.BEST_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.BEST_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.BETA_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.BETA_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.CIE_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.CIE_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.CINEMA_GAMUT_OECF: (@KelSolaar)
      • Remove
    • colour.CINEMA_GAMUT_EOCF: (@KelSolaar)
      • Remove
    • colour.COLOR_MATCH_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.COLOR_MATCH_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.DCI_P3_OECF: (@KelSolaar)
      • Remove
    • colour.DCI_P3_EOCF: (@KelSolaar)
      • Remove
    • colour.DCI_P3_OECF: (@KelSolaar)
      • Remove
    • colour.DCI_P3_EOCF: (@KelSolaar)
      • Remove
    • colour.DON_RGB_4_OECF: (@KelSolaar)
      • Remove
    • colour.DON_RGB_4_EOCF: (@KelSolaar)
      • Remove
    • colour.ECI_RGB_V2_OECF: (@KelSolaar)
      • Remove
    • colour.ECI_RGB_V2_EOCF: (@KelSolaar)
      • Remove
    • colour.EKTA_SPACE_PS_5_OECF: (@KelSolaar)
      • Remove
    • colour.EKTA_SPACE_PS_5_EOCF: (@KelSolaar)
      • Remove
    • colour.MAX_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.MAX_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.NTSC_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.NTSC_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.PAL_SECAM_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.PAL_SECAM_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.PROPHOTO_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.PROPHOTO_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.REC_2020_OECF: (@KelSolaar)
      • Remove
    • colour.REC_2020_EOCF: (@KelSolaar)
      • Remove
    • colour.REC_709_OECF: (@KelSolaar)
      • Remove
    • colour.REC_709_EOCF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_OECF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_EOCF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_OECF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_EOCF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_OECF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_EOCF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_OECF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_EOCF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_OECF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_EOCF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_OECF: (@KelSolaar)
      • Remove
    • 🌲 colour.RED_LOG_EOCF: (@KelSolaar)
      • Remove
    • colour.RUSSELL_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.RUSSELL_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.SMPTE_C_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.SMPTE_C_RGB_EOCF: (@KelSolaar)
      • Remove
    • colour.S_LOG2_OECF: (@KelSolaar)
      • Remove
    • colour.S_LOG2_EOCF: (@KelSolaar)
      • Remove
    • colour.S_LOG3_OECF: (@KelSolaar)
      • Remove
    • colour.S_LOG3_EOCF: (@KelSolaar)
      • Remove
    • colour.S_LOG3_OECF: (@KelSolaar)
      • Remove
    • colour.S_LOG3_EOCF: (@KelSolaar)
      • Remove
    • colour.sRGB_OECF: (@KelSolaar)
      • Remove
    • colour.sRGB_EOCF: (@KelSolaar)
      • Remove
    • 🌲 colour.V_LOG_OECF: (@KelSolaar)
      • Remove
    • 🌲 colour.V_LOG_EOCF: (@KelSolaar)
      • Remove
    • colour.XTREME_RGB_OECF: (@KelSolaar)
      • Remove
    • colour.XTREME_RGB_EOCF: (@KelSolaar)
      • Remove

    colour.plotting

    • colour.plotting.decorate: (@KelSolaar)
      • Keyword Argument: no_axes3d renamed to no_axes.
    • colour.plotting.camera: (@KelSolaar)
      • Returns: Axes, Current axes.
    • colour.plotting.decorate: (@KelSolaar)
      • Returns: Axes, Current axes.
    • colour.plotting.boundaries: (@KelSolaar)
      • Returns: Axes, Current axes.
    • colour.plotting.display: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.CIE_1931_chromaticity_diagram_colours_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.CIE_1931_chromaticity_diagram_plot: (@KelSolaar, @MichaelMauderer, @scooperly)
      • Signature: CIE_1931_chromaticity_diagram_plot(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, **kwargs)
      • Returns: Figure, Current figure or None
    • colour.plotting.CIE_1960_UCS_chromaticity_diagram_colours_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.CIE_1960_UCS_chromaticity_diagram_plot: (@KelSolaar, @MichaelMauderer, @scooperly)
      • Signature: CIE_1960_UCS_chromaticity_diagram_plot(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, **kwargs)
      • Returns: Figure, Current figure or None
    • colour.plotting.CIE_1976_UCS_chromaticity_diagram_colours_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.CIE_1976_UCS_chromaticity_diagram_plot: (@KelSolaar, @MichaelMauderer, @scooperly)
      • Signature: CIE_1976_UCS_chromaticity_diagram_plot(cmfs='CIE 1931 2 Degree Standard Observer', show_diagram_colours=True, **kwargs)
      • Returns: Figure, Current figure or None
    • colour.plotting.RGB_chromaticity_coordinates_CIE_1931_chromaticity_diagram_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.RGB_chromaticity_coordinates_CIE_1960_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.RGB_chromaticity_coordinates_CIE_1976_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.RGB_colourspaces_CIE_1931_chromaticity_diagram_plot: (@KelSolaar)
      • Signature: RGB_chromaticity_coordinates_CIE_1931_chromaticity_diagram_plot(RGB, colourspace, **kwargs)
      • Returns: Figure, Current figure or None
    • colour.plotting.RGB_colourspaces_CIE_1960_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Signature: RGB_colourspaces_CIE_1960_UCS_chromaticity_diagram_plot(RGB, colourspace, **kwargs)
      • Returns: Figure, Current figure or None
    • colour.plotting.RGB_colourspaces_CIE_1976_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Signature: RGB_colourspaces_CIE_1976_UCS_chromaticity_diagram_plot(RGB, colourspace, **kwargs)
      • Returns: Figure, Current figure or None
    • colour.plotting.RGB_colourspaces_gamuts_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.RGB_scatter_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.blackbody_colours_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.blackbody_spectral_radiance_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.colour_parameters_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.colour_quality_bars_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.corresponding_chromaticities_prediction_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.image_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.multi_cmfs_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.multi_colour_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.multi_conversion_function_plot: (@KelSolaar)
      • Name: colour.plotting.multi_cctf_plot
      • Signature: colour.plotting.multi_cctf_plot(colourspaces=None, decoding_cctf=False, **kwargs)
      • Returns: Figure, Current figure or None
    • colour.plotting.multi_illuminants_relative_spd_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.multi_lightness_function_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.multi_munsell_value_function_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.multi_spd_colour_quality_scale_bars_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.multi_spd_colour_rendering_index_bars_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.multi_spd_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.planckian_locus_CIE_1931_chromaticity_diagram_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.planckian_locus_CIE_1960_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_cmfs_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_colour_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_conversion_function_plot: (@KelSolaar)
      • Name: colour.plotting.single_cctf_plot
      • Signature: colour.plotting.single_cctf_plot(colourspace=None, decoding_cctf=False, **kwargs)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_illuminant_relative_spd_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_lightness_function_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_munsell_value_function_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_rayleigh_scattering_spd_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_spd_colour_quality_scale_bars_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_spd_colour_rendering_index_bars_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.single_spd_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.spds_CIE_1931_chromaticity_diagram_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.spds_CIE_1960_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.spds_CIE_1976_UCS_chromaticity_diagram_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.the_blue_sky_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None
    • colour.plotting.visible_spectrum_plot: (@KelSolaar)
      • Returns: Figure, Current figure or None

    colour.utilities

    • colour.as_numeric: (@KelSolaar)
      • Signature: colour.as_numeric(a, type_=np.float_)
    • colour.closest: (@KelSolaar)
      • Signature: colour.closest(a, b)
    • colour.normalise: (@KelSolaar)
      • Name: colour.normalise_maximum
      • Signature: colour.normalise_maximum(a, axis=None, factor=1, clip=True)
    • colour.steps: (@KelSolaar)
      • Name: colour.interval
    • colour.is_iterable: (@KelSolaar)
      • Signature: colour.is_iterable(a)
    • colour.is_string: (@KelSolaar)
      • Signature: colour.is_string(a)
    • colour.is_numeric: (@KelSolaar)
      • Signature: colour.is_numeric(a)
    • colour.is_integer: (@KelSolaar)
      • Signature: colour.is_integer(a)
    • colour.is_scipy_installed: (@KelSolaar)
      • Remove
  • v0.3.7 Changes

    December 27, 2017

    Colour 0.3.7 - Alpha Milestone

    πŸ”‹ Features

    API Reference

    Distribution

    • Python 2.7 and 3.5 wheels are now available on Pypi.

    colour.models

    • Implement colour.chromatically_adapted_primaries definition performing chromatic adaptation of a given RGB colourspace primaries. (@KelSolaar)
    • colour.REC_709_COLOURSPACE.EOCF definition will issue a warning when used. (@KevinJW, @KelSolaar)

    colour.plotting

    • colour.plotting.image_plot definition can now plot single channel images. (@KelSolaar)

    colour.utilities

    • πŸ‘ Implement colour.ArbitraryPrecisionMapping class based providing support for floating point keys by rounding them at a specific decimals count. (@KelSolaar)

    πŸ›  Fixes

    colour.colorimetry.dataset

    • Add missing F11 illuminant chromaticity coordinates for CIE 1931 2 Degree Standard Observer. (@henczati, @KelSolaar)

    colour.models.dataset

    πŸ”„ Changes

    colour.algebra

    • colour.Extrapolator1d: (@KelSolaar)
      • Name: colour.Extrapolator

    colour.models

    • colour.RGB_Colourspace: (@KelSolaar)
      • Methods:
      • transfer_function:
        • Name: OECF (Opto-electronic conversion function)
      • inverse_transfer_function:
        • Name: EOCF (Electro-optical conversion function)
    • colour.XYZ_to_RGB: (@KelSolaar)
      • Signature: colour.XYZ_to_RGB(XYZ, illuminant_XYZ, illuminant_RGB, XYZ_to_RGB_matrix, chromatic_adaptation_transform='CAT02', OECF=None)
    • colour.RGB_to_XYZ: (@KelSolaar)
      • Signature: colour.RGB_to_XYZ(RGB, illuminant_RGB, illuminant_XYZ, RGB_to_XYZ_matrix, chromatic_adaptation_transform='CAT02', EOCF=None)
    • colour.XYZ_to_sRGB: (@KelSolaar)
      • Signature: colour.XYZ_to_sRGB(XYZ, illuminant=RGB_COLOURSPACES.get('sRGB').whitepoint, chromatic_adaptation_transform='CAT02', apply_OECF=True)
    • colour.sRGB_to_XYZ: (@KelSolaar)
      • Signature: colour.sRGB_to_XYZ(RGB, illuminant=RGB_COLOURSPACES.get('sRGB').whitepoint, chromatic_adaptation_method='CAT02', apply_EOCF=True)

    colour.plotting

    • colour.plotting.single_transfer_function_plot: (@KelSolaar)
      • Name: colour.plotting.single_conversion_function_plot
      • Signature: colour.plotting.single_conversion_function_plot(colourspace='Rec. 709', EOCF=False, **kwargs)
    • colour.plotting.multi_transfer_function_plot: (@KelSolaar)
      • Name: colour.plotting.multi_conversion_function_plot
      • Signature: colour.plotting.multi_conversion_function_plot(colourspaces, EOCF=False, **kwargs)
    • colour.plotting.colour_parameter: (@KelSolaar)
      • Remove
      • Note: colour.plotting.ColourParameter class should be used instead.