Colour v0.3.16 Release Notes

Release Date: 2020-11-27 // 11 months ago
  • 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

Previous changes from v0.3.15

  • 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