コード例 #1
0
    def test_plot_colour_quality_bars(self):
        """
        Tests :func:`colour.plotting.quality.plot_colour_quality_bars`
        definition.
        """

        illuminant = ILLUMINANTS_SDS['FL2']
        light_source = LIGHT_SOURCES_SDS['Kinoton 75P']
        light_source = light_source.copy().align(SpectralShape(360, 830, 1))
        cqs_i = colour_quality_scale(illuminant, additional_data=True)
        cqs_l = colour_quality_scale(light_source, additional_data=True)

        figure, axes = plot_colour_quality_bars([cqs_i, cqs_l])

        self.assertIsInstance(figure, Figure)
        self.assertIsInstance(axes, Axes)
コード例 #2
0
ファイル: quality.py プロジェクト: aforsythe/colour
def colour_quality_scale_bars_plot(spd, **kwargs):
    """
    Plots the *colour quality scale* of given illuminant or light source.

    Parameters
    ----------
    spd : SpectralPowerDistribution
        Illuminant or light source to plot the *colour quality scale*.
    \*\*kwargs : \*\*
        Keywords arguments.

    Returns
    -------
    bool
        Definition success.

    Examples
    --------
    >>> from colour import ILLUMINANTS_RELATIVE_SPDS
    >>> illuminant = ILLUMINANTS_RELATIVE_SPDS.get('F2')
    >>> colour_quality_scale_bars_plot(illuminant)  # doctest: +SKIP
    True
    """

    if colour_quality_bars_plot(
            colour_quality_scale(
                    spd,
                    additional_data=True),
            standalone=False):
        settings = {
            'title': 'Colour Quality Scale - {0}'.format(spd.title)}

        decorate(**settings)
        return display(**settings)
コード例 #3
0
    def test_plot_colour_quality_bars(self):
        """
        Test :func:`colour.plotting.quality.plot_colour_quality_bars`
        definition.
        """

        illuminant = SDS_ILLUMINANTS["FL2"]
        light_source = SDS_LIGHT_SOURCES["Kinoton 75P"]
        light_source = reshape_sd(light_source, SpectralShape(360, 830, 1))
        cqs_i = colour_quality_scale(illuminant, additional_data=True)
        cqs_l = colour_quality_scale(light_source, additional_data=True)

        figure, axes = plot_colour_quality_bars([cqs_i, cqs_l])

        self.assertIsInstance(figure, Figure)
        self.assertIsInstance(axes, Axes)
コード例 #4
0
ファイル: quality.py プロジェクト: ajun73/Work_Code
def multi_spd_colour_quality_scale_bars_plot(spds, **kwargs):
    """
    Plots the *Colour Quality Scale* (CQS) of given illuminants or light
    sources spectral power distributions.

    Parameters
    ----------
    spds : array_like
        Array of illuminants or light sources spectral power distributions to
        plot the *Colour Quality Scale* (CQS).

    Other Parameters
    ----------------
    \**kwargs : dict, optional
        {:func:`colour.plotting.render`},
        Please refer to the documentation of the previously listed definition.
    labels : bool, optional
        {:func:`colour.plotting.quality.colour_quality_bars_plot`},
        Add labels above bars.
    hatching : bool or None, optional
        {:func:`colour.plotting.quality.colour_quality_bars_plot`},
        Use hatching for the bars.
    hatching_repeat : int, optional
        {:func:`colour.plotting.quality.colour_quality_bars_plot`},
        Hatching pattern repeat.

    Returns
    -------
    Figure
        Current figure or None.

    Examples
    --------
    >>> from colour import (ILLUMINANTS_RELATIVE_SPDS,
    ...                     LIGHT_SOURCES_RELATIVE_SPDS)
    >>> illuminant = ILLUMINANTS_RELATIVE_SPDS['F2']
    >>> light_source = LIGHT_SOURCES_RELATIVE_SPDS['Kinoton 75P']
    >>> multi_spd_colour_quality_scale_bars_plot([illuminant, light_source])
    ... # doctest: +SKIP
    """

    settings = {}
    settings.update(kwargs)
    settings.update({'standalone': False})

    specifications = [
        colour_quality_scale(spd, additional_data=True) for spd in spds
    ]
    colour_quality_bars_plot(specifications, **settings)

    settings = {
        'title':
        'Colour Quality Scale - {0}'.format(', '.join(
            [spd.strict_name for spd in spds]))
    }
    settings.update(kwargs)

    return render(with_boundaries=False, **settings)
コード例 #5
0
ファイル: test_cqs.py プロジェクト: Munins-eye/colour
    def test_colour_quality_scale(self):
        """
        Tests :func:`colour.quality.cqs.colour_quality_scale` definition.
        """

        self.assertAlmostEqual(
            colour_quality_scale(ILLUMINANTS_SDS['FL1']),
            75.332008182589348,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(ILLUMINANTS_SDS['FL2']),
            64.686339173112856,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(LIGHT_SOURCES_SDS['Neodimium Incandescent']),
            87.655035241231985,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)']),
            83.179881092827671,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(LIGHT_SOURCES_SDS['H38HT-100 (Mercury)']),
            22.860610106043985,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(LIGHT_SOURCES_SDS['Luxeon WW 2880']),
            84.879524259605077,
            places=7)
コード例 #6
0
ファイル: tests_cqs.py プロジェクト: scooperly/colour
    def test_colour_quality_scale(self):
        """
        Tests :func:`colour.quality.cqs.colour_quality_scale` definition.
        """

        self.assertAlmostEqual(colour_quality_scale(
            ILLUMINANTS_RELATIVE_SPDS.get('F1')),
                               75.342060410089019,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            ILLUMINANTS_RELATIVE_SPDS.get('F2')),
                               64.686058037115245,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS.get('Neodimium Incandescent')),
                               87.659381222366406,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS.get('F32T8/TL841 (Triphosphor)')),
                               83.179667074336621,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS.get('H38HT-100 (Mercury)')),
                               22.869936010810584,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS.get('Luxeon WW 2880')),
                               84.883777827678131,
                               places=7)
コード例 #7
0
    def test_colour_quality_scale(self):
        """
        Tests :func:`colour.quality.cqs.colour_quality_scale` definition.
        """

        self.assertAlmostEqual(colour_quality_scale(
            ILLUMINANTS_RELATIVE_SPDS.get('F1')),
                               75.334361226715345,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            ILLUMINANTS_RELATIVE_SPDS.get('F2')),
                               64.678111793396397,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS.get('Neodimium Incandescent')),
                               87.655549804699419,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS.get('F32T8/TL841 (Triphosphor)')),
                               83.175799064274571,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS.get('H38HT-100 (Mercury)')),
                               22.847928690340929,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS.get('Luxeon WW 2880')),
                               84.880575409680162,
                               places=7)
コード例 #8
0
    def test_colour_quality_scale(self):
        """
        Tests :func:`colour.quality.cqs.colour_quality_scale` definition.
        """

        self.assertAlmostEqual(colour_quality_scale(
            ILLUMINANTS_RELATIVE_SPDS['F1']),
                               75.342427844068794,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            ILLUMINANTS_RELATIVE_SPDS['F2']),
                               64.686416902222192,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS['Neodimium Incandescent']),
                               87.655035241231985,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS['F32T8/TL841 (Triphosphor)']),
                               83.179847129624022,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS['H38HT-100 (Mercury)']),
                               22.869154075340347,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS['Luxeon WW 2880']),
                               84.880324578632809,
                               places=7)
コード例 #9
0
    def test_colour_quality_scale(self):
        """
        Tests :func:`colour.quality.cqs.colour_quality_scale` definition.
        """

        self.assertAlmostEqual(colour_quality_scale(
            ILLUMINANTS_RELATIVE_SPDS['F1']),
                               75.342591389578701,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            ILLUMINANTS_RELATIVE_SPDS['F2']),
                               64.686339173112856,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS['Neodimium Incandescent']),
                               87.655035241231985,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS['F32T8/TL841 (Triphosphor)']),
                               83.179881092827671,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS['H38HT-100 (Mercury)']),
                               22.870604734960732,
                               places=7)

        self.assertAlmostEqual(colour_quality_scale(
            LIGHT_SOURCES_RELATIVE_SPDS['Luxeon WW 2880']),
                               84.879524259605077,
                               places=7)
コード例 #10
0
ファイル: quality.py プロジェクト: scooperly/colour
def multi_spd_colour_quality_scale_bars_plot(spds, **kwargs):
    """
    Plots the *colour quality scale* of given illuminants or light sources
    spectral power distributions.

    Parameters
    ----------
    spds : array_like
        Array of illuminants or light sources spectral power distributions to
        plot the *colour quality scale*.
    \**kwargs : dict, optional
        Keywords arguments.

    Returns
    -------
    bool
        Definition success.

    Examples
    --------
    >>> from colour import (
    ...     ILLUMINANTS_RELATIVE_SPDS,
    ...     LIGHT_SOURCES_RELATIVE_SPDS)
    >>> illuminant = ILLUMINANTS_RELATIVE_SPDS.get('F2')
    >>> light_source = LIGHT_SOURCES_RELATIVE_SPDS.get('Kinoton 75P')
    >>> multi_spd_colour_quality_scale_bars_plot(  # doctest: +SKIP
    ...     [illuminant, light_source])
    True
    """

    settings = {}
    settings.update(kwargs)
    settings.update({'standalone': False})

    specifications = [
        colour_quality_scale(spd, additional_data=True) for spd in spds
    ]
    colour_quality_bars_plot(specifications, **settings)

    settings = {
        'title':
        'Colour Quality Scale - {0}'.format(', '.join(
            [spd.title for spd in spds]))
    }
    settings.update(kwargs)

    decorate(**settings)

    return display(**settings)
コード例 #11
0
ファイル: quality.py プロジェクト: brehm/colour
def multi_spd_colour_quality_scale_bars_plot(spds, **kwargs):
    """
    Plots the *colour quality scale* of given illuminants or light sources
    spectral power distributions.

    Parameters
    ----------
    spds : array_like
        Array of illuminants or light sources spectral power distributions to
        plot the *colour quality scale*.
    \**kwargs : dict, optional
        Keywords arguments.

    Returns
    -------
    bool
        Definition success.

    Examples
    --------
    >>> from colour import (
    ...     ILLUMINANTS_RELATIVE_SPDS,
    ...     LIGHT_SOURCES_RELATIVE_SPDS)
    >>> illuminant = ILLUMINANTS_RELATIVE_SPDS.get('F2')
    >>> light_source = LIGHT_SOURCES_RELATIVE_SPDS.get('Kinoton 75P')
    >>> multi_spd_colour_quality_scale_bars_plot(  # doctest: +SKIP
    ...     [illuminant, light_source])
    True
    """

    settings = {}
    settings.update(kwargs)
    settings.update({'standalone': False})

    specifications = [colour_quality_scale(spd, additional_data=True)
                      for spd in spds]
    colour_quality_bars_plot(specifications, **settings)

    settings = {'title': 'Colour Quality Scale - {0}'.format(', '.join(
        [spd.title for spd in spds]))}
    settings.update(kwargs)

    decorate(**settings)

    return display(**settings)
コード例 #12
0
ファイル: tests_cqs.py プロジェクト: fangjy88/colour
    def test_colour_quality_scale(self):
        """
        Tests :func:`colour.quality.cqs.colour_quality_scale` definition.
        """

        self.assertAlmostEqual(
            colour_quality_scale(
                ILLUMINANTS_RELATIVE_SPDS.get('F1')),
            75.342060410089019,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                ILLUMINANTS_RELATIVE_SPDS.get('F2')),
            64.686058037115245,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_RELATIVE_SPDS.get('Neodimium Incandescent')),
            87.659381222366406,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_RELATIVE_SPDS.get('F32T8/TL841 (Triphosphor)')),
            83.179667074336621,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_RELATIVE_SPDS.get('H38HT-100 (Mercury)')),
            22.869936010810584,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_RELATIVE_SPDS.get('Luxeon WW 2880')),
            84.883777827678131,
            places=7)
コード例 #13
0
ファイル: tests_cqs.py プロジェクト: Nick-Shaw/colour
    def test_colour_quality_scale(self):
        """
        Tests :func:`colour.quality.cqs.colour_quality_scale` definition.
        """

        self.assertAlmostEqual(
            colour_quality_scale(
                ILLUMINANTS_RELATIVE_SPDS.get('F1')),
            75.334361226715345,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                ILLUMINANTS_RELATIVE_SPDS.get('F2')),
            64.678111793396397,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_RELATIVE_SPDS.get('Neodimium Incandescent')),
            87.655549804699419,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_RELATIVE_SPDS.get('F32T8/TL841 (Triphosphor)')),
            83.175799064274571,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_RELATIVE_SPDS.get('H38HT-100 (Mercury)')),
            22.847928690340929,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_RELATIVE_SPDS.get('Luxeon WW 2880')),
            84.880575409680162,
            places=7)
コード例 #14
0
ファイル: quality.py プロジェクト: ajun73/Work_Code
def plot_multi_sds_colour_quality_scales_bars(sds, **kwargs):
    """
    Plots the *Colour Quality Scale* (CQS) of given illuminants or light
    sources spectral distributions.

    Parameters
    ----------
    sds : array_like
        Array of illuminants or light sources spectral distributions to
        plot the *Colour Quality Scale* (CQS).

    Other Parameters
    ----------------
    \\**kwargs : dict, optional
        {:func:`colour.plotting.artist`, :func:`colour.plotting.render`},
        Please refer to the documentation of the previously listed definitions.
    labels : bool, optional
        {:func:`colour.plotting.quality.plot_colour_quality_bars`},
        Add labels above bars.
    hatching : bool or None, optional
        {:func:`colour.plotting.quality.plot_colour_quality_bars`},
        Use hatching for the bars.
    hatching_repeat : int, optional
        {:func:`colour.plotting.quality.plot_colour_quality_bars`},
        Hatching pattern repeat.

    Returns
    -------
    tuple
        Current figure and axes.

    Examples
    --------
    >>> from colour import (ILLUMINANTS_SDS,
    ...                     LIGHT_SOURCES_SDS)
    >>> illuminant = ILLUMINANTS_SDS['F2']
    >>> light_source = LIGHT_SOURCES_SDS['Kinoton 75P']
    >>> plot_multi_sds_colour_quality_scales_bars([illuminant, light_source])
    ... # doctest: +SKIP

    .. image:: ../_static/Plotting_\
Plot_Multi_SDs_Colour_Quality_Scales_Bars.png
        :align: center
        :alt: plot_multi_sds_colour_quality_scales_bars
    """

    settings = dict(kwargs)
    settings.update({'standalone': False})

    specifications = [
        colour_quality_scale(sd, additional_data=True) for sd in sds
    ]

    figure, axes = plot_colour_quality_bars(specifications, **settings)

    title = 'Colour Quality Scale - {0}'.format(', '.join(
        [sd.strict_name for sd in sds]))

    settings = {'axes': axes, 'title': title}
    settings.update(kwargs)

    return render(**settings)
コード例 #15
0
ファイル: quality.py プロジェクト: colour-science/colour
def plot_multi_sds_colour_quality_scales_bars(
    sds: Union[
        Sequence[Union[SpectralDistribution, MultiSpectralDistributions]],
        MultiSpectralDistributions,
    ],
    method: Union[
        Literal["NIST CQS 7.4", "NIST CQS 9.0"], str
    ] = "NIST CQS 9.0",
    **kwargs: Any,
) -> Tuple[plt.Figure, plt.Axes]:
    """
    Plot the *Colour Quality Scale* (CQS) of given illuminants or light
    sources spectral distributions.

    Parameters
    ----------
    sds
        Spectral distributions or multi-spectral distributions to
        plot. `sds` can be a single
        :class:`colour.MultiSpectralDistributions` class instance, a list
        of :class:`colour.MultiSpectralDistributions` class instances or a
        list of :class:`colour.SpectralDistribution` class instances.
    method
        *Colour Quality Scale* (CQS) computation method.

    Other Parameters
    ----------------
    kwargs
        {:func:`colour.plotting.artist`,
        :func:`colour.plotting.quality.plot_colour_quality_bars`,
        :func:`colour.plotting.render`},
        See the documentation of the previously listed definitions.

    Returns
    -------
    :class:`tuple`
        Current figure and axes.

    Examples
    --------
    >>> from colour import (SDS_ILLUMINANTS,
    ...                     SDS_LIGHT_SOURCES)
    >>> illuminant = SDS_ILLUMINANTS['FL2']
    >>> light_source = SDS_LIGHT_SOURCES['Kinoton 75P']
    >>> plot_multi_sds_colour_quality_scales_bars([illuminant, light_source])
    ... # doctest: +ELLIPSIS
    (<Figure size ... with 1 Axes>, <...AxesSubplot...>)

    .. image:: ../_static/Plotting_\
Plot_Multi_SDS_Colour_Quality_Scales_Bars.png
        :align: center
        :alt: plot_multi_sds_colour_quality_scales_bars
    """

    method = validate_method(method, COLOUR_QUALITY_SCALE_METHODS)

    sds_converted = sds_and_msds_to_sds(sds)

    settings: Dict[str, Any] = dict(kwargs)
    settings.update({"standalone": False})

    specifications = cast(
        List[ColourRendering_Specification_CQS],
        [colour_quality_scale(sd, True, method) for sd in sds_converted],
    )

    _figure, axes = plot_colour_quality_bars(specifications, **settings)

    title = (
        f"Colour Quality Scale - "
        f"{', '.join([sd.strict_name for sd in sds_converted])}"
    )

    settings = {"axes": axes, "title": title}
    settings.update(kwargs)

    return render(**settings)
コード例 #16
0
ファイル: generate_plots.py プロジェクト: yixw/colour
def generate_documentation_plots(output_directory):
    """
    Generates documentation plots.

    Parameters
    ----------
    output_directory : unicode
        Output directory.
    """

    filter_warnings()

    colour_style()

    np.random.seed(0)

    # *************************************************************************
    # "README.rst"
    # *************************************************************************
    filename = os.path.join(output_directory,
                            'Examples_Colour_Automatic_Conversion_Graph.png')
    plot_automatic_colour_conversion_graph(filename)

    arguments = {
        'tight_layout':
        True,
        'transparent_background':
        True,
        'filename':
        os.path.join(output_directory,
                     'Examples_Plotting_Visible_Spectrum.png')
    }
    plt.close(
        plot_visible_spectrum('CIE 1931 2 Degree Standard Observer',
                              **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Examples_Plotting_Illuminant_F1_SD.png')
    plt.close(plot_single_illuminant_sd('FL1', **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Examples_Plotting_Blackbodies.png')
    blackbody_sds = [
        sd_blackbody(i, SpectralShape(0, 10000, 10))
        for i in range(1000, 15000, 1000)
    ]
    plt.close(
        plot_multi_sds(blackbody_sds,
                       y_label='W / (sr m$^2$) / m',
                       use_sds_colours=True,
                       normalise_sds_colours=True,
                       legend_location='upper right',
                       bounding_box=(0, 1250, 0, 2.5e15),
                       **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Examples_Plotting_Cone_Fundamentals.png')
    plt.close(
        plot_single_cmfs('Stockman & Sharpe 2 Degree Cone Fundamentals',
                         y_label='Sensitivity',
                         bounding_box=(390, 870, 0, 1.1),
                         **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Examples_Plotting_Luminous_Efficiency.png')
    plt.close(
        plot_multi_sds((sd_mesopic_luminous_efficiency_function(0.2),
                        PHOTOPIC_LEFS['CIE 1924 Photopic Standard Observer'],
                        SCOTOPIC_LEFS['CIE 1951 Scotopic Standard Observer']),
                       y_label='Luminous Efficiency',
                       legend_location='upper right',
                       y_tighten=True,
                       margins=(0, 0, 0, .1),
                       **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Examples_Plotting_BabelColor_Average.png')
    plt.close(
        plot_multi_sds(COLOURCHECKERS_SDS['BabelColor Average'].values(),
                       use_sds_colours=True,
                       title=('BabelColor Average - '
                              'Spectral Distributions'),
                       **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Examples_Plotting_ColorChecker_2005.png')
    plt.close(
        plot_single_colour_checker('ColorChecker 2005',
                                   text_parameters={'visible': False},
                                   **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Examples_Plotting_Chromaticities_Prediction.png')
    plt.close(
        plot_corresponding_chromaticities_prediction(2, 'Von Kries', 'Bianco',
                                                     **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Examples_Plotting_CCT_CIE_1960_UCS_Chromaticity_Diagram.png')
    plt.close(
        plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(
            ['A', 'B', 'C'], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Examples_Plotting_Chromaticities_CIE_1931_Chromaticity_Diagram.png')
    RGB = np.random.random((32, 32, 3))
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(
            RGB,
            'ITU-R BT.709',
            colourspaces=['ACEScg', 'S-Gamut'],
            show_pointer_gamut=True,
            **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Examples_Plotting_CRI.png')
    plt.close(
        plot_single_sd_colour_rendering_index_bars(ILLUMINANTS_SDS['FL2'],
                                                   **arguments)[0])

    # *************************************************************************
    # Documentation
    # *************************************************************************
    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_CVD_Simulation_Machado2009.png')
    plt.close(plot_cvd_simulation_Machado2009(RGB, **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Single_Colour_Checker.png')
    plt.close(plot_single_colour_checker('ColorChecker 2005', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Multi_Colour_Checkers.png')
    plt.close(
        plot_multi_colour_checkers(['ColorChecker 1976', 'ColorChecker 2005'],
                                   **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Single_SD.png')
    data = {
        500: 0.0651,
        520: 0.0705,
        540: 0.0772,
        560: 0.0870,
        580: 0.1128,
        600: 0.1360
    }
    sd = SpectralDistribution(data, name='Custom')
    plt.close(plot_single_sd(sd, **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Multi_SDS.png')
    data_1 = {
        500: 0.004900,
        510: 0.009300,
        520: 0.063270,
        530: 0.165500,
        540: 0.290400,
        550: 0.433450,
        560: 0.594500
    }
    data_2 = {
        500: 0.323000,
        510: 0.503000,
        520: 0.710000,
        530: 0.862000,
        540: 0.954000,
        550: 0.994950,
        560: 0.995000
    }
    spd1 = SpectralDistribution(data_1, name='Custom 1')
    spd2 = SpectralDistribution(data_2, name='Custom 2')
    plt.close(plot_multi_sds([spd1, spd2], **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Single_CMFS.png')
    plt.close(
        plot_single_cmfs('CIE 1931 2 Degree Standard Observer',
                         **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Multi_CMFS.png')
    cmfs = ('CIE 1931 2 Degree Standard Observer',
            'CIE 1964 10 Degree Standard Observer')
    plt.close(plot_multi_cmfs(cmfs, **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Single_Illuminant_SD.png')
    plt.close(plot_single_illuminant_sd('A', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Multi_Illuminant_SDS.png')
    plt.close(plot_multi_illuminant_sds(['A', 'B', 'C'], **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Visible_Spectrum.png')
    plt.close(plot_visible_spectrum(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Single_Lightness_Function.png')
    plt.close(plot_single_lightness_function('CIE 1976', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Multi_Lightness_Functions.png')
    plt.close(
        plot_multi_lightness_functions(['CIE 1976', 'Wyszecki 1963'],
                                       **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Single_Luminance_Function.png')
    plt.close(plot_single_luminance_function('CIE 1976', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Multi_Luminance_Functions.png')
    plt.close(
        plot_multi_luminance_functions(['CIE 1976', 'Newhall 1943'],
                                       **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Blackbody_Spectral_Radiance.png')
    plt.close(
        plot_blackbody_spectral_radiance(3500,
                                         blackbody='VY Canis Major',
                                         **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Blackbody_Colours.png')
    plt.close(
        plot_blackbody_colours(SpectralShape(150, 12500, 50), **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Single_Colour_Swatch.png')
    RGB = ColourSwatch(RGB=(0.45620519, 0.03081071, 0.04091952))
    plt.close(plot_single_colour_swatch(RGB, **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Multi_Colour_Swatches.png')
    RGB_1 = ColourSwatch(RGB=(0.45293517, 0.31732158, 0.26414773))
    RGB_2 = ColourSwatch(RGB=(0.77875824, 0.57726450, 0.50453169))
    plt.close(plot_multi_colour_swatches([RGB_1, RGB_2], **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Single_Function.png')
    plt.close(plot_single_function(lambda x: x**(1 / 2.2), **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Multi_Functions.png')
    functions = {
        'Gamma 2.2': lambda x: x**(1 / 2.2),
        'Gamma 2.4': lambda x: x**(1 / 2.4),
        'Gamma 2.6': lambda x: x**(1 / 2.6),
    }
    plt.close(plot_multi_functions(functions, **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Image.png')
    path = os.path.join(output_directory, 'Logo_Medium_001.png')
    plt.close(plot_image(read_image(str(path)), **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_Corresponding_Chromaticities_Prediction.png')
    plt.close(
        plot_corresponding_chromaticities_prediction(1, 'Von Kries', 'CAT02',
                                                     **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Spectral_Locus.png')
    plt.close(
        plot_spectral_locus(spectral_locus_colours='RGB', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Chromaticity_Diagram_Colours.png')
    plt.close(plot_chromaticity_diagram_colours(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Chromaticity_Diagram.png')
    plt.close(plot_chromaticity_diagram(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Chromaticity_Diagram_CIE1931.png')
    plt.close(plot_chromaticity_diagram_CIE1931(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Chromaticity_Diagram_CIE1960UCS.png')
    plt.close(plot_chromaticity_diagram_CIE1960UCS(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Chromaticity_Diagram_CIE1976UCS.png')
    plt.close(plot_chromaticity_diagram_CIE1976UCS(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_SDS_In_Chromaticity_Diagram.png')
    A = ILLUMINANTS_SDS['A']
    D65 = ILLUMINANTS_SDS['D65']
    plt.close(plot_sds_in_chromaticity_diagram([A, D65], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1931.png')
    plt.close(
        plot_sds_in_chromaticity_diagram_CIE1931([A, D65], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1960UCS.png')
    plt.close(
        plot_sds_in_chromaticity_diagram_CIE1960UCS([A, D65], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1976UCS.png')
    plt.close(
        plot_sds_in_chromaticity_diagram_CIE1976UCS([A, D65], **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Pointer_Gamut.png')
    plt.close(plot_pointer_gamut(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_RGB_Colourspaces_In_Chromaticity_Diagram.png')
    plt.close(
        plot_RGB_colourspaces_in_chromaticity_diagram(
            ['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_RGB_Colourspaces_In_Chromaticity_Diagram_CIE1931.png')
    plt.close(
        plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931(
            ['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_RGB_Colourspaces_In_'
        'Chromaticity_Diagram_CIE1960UCS.png')
    plt.close(
        plot_RGB_colourspaces_in_chromaticity_diagram_CIE1960UCS(
            ['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_RGB_Colourspaces_In_'
        'Chromaticity_Diagram_CIE1976UCS.png')
    plt.close(
        plot_RGB_colourspaces_in_chromaticity_diagram_CIE1976UCS(
            ['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_RGB_Chromaticities_In_'
        'Chromaticity_Diagram.png')
    RGB = np.random.random((128, 128, 3))
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram(
            RGB, 'ITU-R BT.709', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_RGB_Chromaticities_In_'
        'Chromaticity_Diagram_CIE1931.png')
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(
            RGB, 'ITU-R BT.709', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_RGB_Chromaticities_In_'
        'Chromaticity_Diagram_CIE1960UCS.png')
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS(
            RGB, 'ITU-R BT.709', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_RGB_Chromaticities_In_'
        'Chromaticity_Diagram_CIE1976UCS.png')
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS(
            RGB, 'ITU-R BT.709', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_Ellipses_MacAdam1942_In_Chromaticity_Diagram.png')
    plt.close(
        plot_ellipses_MacAdam1942_in_chromaticity_diagram(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Ellipses_MacAdam1942_In_'
        'Chromaticity_Diagram_CIE1931.png')
    plt.close(
        plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931(
            **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Ellipses_MacAdam1942_In_'
        'Chromaticity_Diagram_CIE1960UCS.png')
    plt.close(
        plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS(
            **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Ellipses_MacAdam1942_In_'
        'Chromaticity_Diagram_CIE1976UCS.png')
    plt.close(
        plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS(
            **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Single_CCTF.png')
    plt.close(plot_single_cctf('ITU-R BT.709', **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Multi_CCTFs.png')
    plt.close(plot_multi_cctfs(['ITU-R BT.709', 'sRGB'], **arguments)[0])

    data = np.array([
        [
            None,
            np.array([0.95010000, 1.00000000, 1.08810000]),
            np.array([0.40920000, 0.28120000, 0.30600000]),
            np.array([
                [0.02495100, 0.01908600, 0.02032900],
                [0.10944300, 0.06235900, 0.06788100],
                [0.27186500, 0.18418700, 0.19565300],
                [0.48898900, 0.40749400, 0.44854600],
            ]),
            None,
        ],
        [
            None,
            np.array([0.95010000, 1.00000000, 1.08810000]),
            np.array([0.30760000, 0.48280000, 0.42770000]),
            np.array([
                [0.02108000, 0.02989100, 0.02790400],
                [0.06194700, 0.11251000, 0.09334400],
                [0.15255800, 0.28123300, 0.23234900],
                [0.34157700, 0.56681300, 0.47035300],
            ]),
            None,
        ],
        [
            None,
            np.array([0.95010000, 1.00000000, 1.08810000]),
            np.array([0.39530000, 0.28120000, 0.18450000]),
            np.array([
                [0.02436400, 0.01908600, 0.01468800],
                [0.10331200, 0.06235900, 0.02854600],
                [0.26311900, 0.18418700, 0.12109700],
                [0.43158700, 0.40749400, 0.39008600],
            ]),
            None,
        ],
        [
            None,
            np.array([0.95010000, 1.00000000, 1.08810000]),
            np.array([0.20510000, 0.18420000, 0.57130000]),
            np.array([
                [0.03039800, 0.02989100, 0.06123300],
                [0.08870000, 0.08498400, 0.21843500],
                [0.18405800, 0.18418700, 0.40111400],
                [0.32550100, 0.34047200, 0.50296900],
                [0.53826100, 0.56681300, 0.80010400],
            ]),
            None,
        ],
        [
            None,
            np.array([0.95010000, 1.00000000, 1.08810000]),
            np.array([0.35770000, 0.28120000, 0.11250000]),
            np.array([
                [0.03678100, 0.02989100, 0.01481100],
                [0.17127700, 0.11251000, 0.01229900],
                [0.30080900, 0.28123300, 0.21229800],
                [0.52976000, 0.40749400, 0.11720000],
            ]),
            None,
        ],
    ])
    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Constant_Hue_Loci.png')
    plt.close(plot_constant_hue_loci(data, 'IPT', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Single_Munsell_Value_Function.png')
    plt.close(plot_single_munsell_value_function('ASTM D1535', **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Multi_Munsell_Value_Functions.png')
    plt.close(
        plot_multi_munsell_value_functions(['ASTM D1535', 'McCamy 1987'],
                                           **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Single_SD_Rayleigh_Scattering.png')
    plt.close(plot_single_sd_rayleigh_scattering(**arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_The_Blue_Sky.png')
    plt.close(plot_the_blue_sky(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Colour_Quality_Bars.png')
    illuminant = ILLUMINANTS_SDS['FL2']
    light_source = LIGHT_SOURCES_SDS['Kinoton 75P']
    light_source = light_source.copy().align(SpectralShape(360, 830, 1))
    cqs_i = colour_quality_scale(illuminant, additional_data=True)
    cqs_l = colour_quality_scale(light_source, additional_data=True)
    plt.close(plot_colour_quality_bars([cqs_i, cqs_l], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_Single_SD_Colour_Rendering_Index_Bars.png')
    illuminant = ILLUMINANTS_SDS['FL2']
    plt.close(
        plot_single_sd_colour_rendering_index_bars(illuminant, **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_Multi_SDS_Colour_Rendering_Indexes_Bars.png')
    light_source = LIGHT_SOURCES_SDS['Kinoton 75P']
    plt.close(
        plot_multi_sds_colour_rendering_indexes_bars(
            [illuminant, light_source], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_Single_SD_Colour_Quality_Scale_Bars.png')
    illuminant = ILLUMINANTS_SDS['FL2']
    plt.close(
        plot_single_sd_colour_quality_scale_bars(illuminant, **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_Multi_SDS_Colour_Quality_Scales_Bars.png')
    light_source = LIGHT_SOURCES_SDS['Kinoton 75P']
    plt.close(
        plot_multi_sds_colour_quality_scales_bars([illuminant, light_source],
                                                  **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_Planckian_Locus.png')
    plt.close(plot_planckian_locus(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Planckian_Locus_CIE1931.png')
    plt.close(plot_planckian_locus_CIE1931(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_Planckian_Locus_CIE1960UCS.png')
    plt.close(plot_planckian_locus_CIE1960UCS(**arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram.png')
    plt.close(
        plot_planckian_locus_in_chromaticity_diagram(['A', 'B', 'C'],
                                                     **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram_CIE1931.png')
    plt.close(
        plot_planckian_locus_in_chromaticity_diagram_CIE1931(['A', 'B', 'C'],
                                                             **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory,
        'Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram_CIE1960UCS.png')
    plt.close(
        plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(
            ['A', 'B', 'C'], **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_RGB_Colourspaces_Gamuts.png')
    plt.close(
        plot_RGB_colourspaces_gamuts(['ITU-R BT.709', 'ACEScg', 'S-Gamut'],
                                     **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Plotting_Plot_RGB_Colourspaces_Gamuts.png')
    plt.close(
        plot_RGB_colourspaces_gamuts(['ITU-R BT.709', 'ACEScg', 'S-Gamut'],
                                     **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Plotting_Plot_RGB_Scatter.png')
    plt.close(plot_RGB_scatter(RGB, 'ITU-R BT.709', **arguments)[0])

    filename = os.path.join(
        output_directory,
        'Plotting_Plot_Colour_Automatic_Conversion_Graph.png')
    plot_automatic_colour_conversion_graph(filename)

    # *************************************************************************
    # "tutorial.rst"
    # *************************************************************************
    arguments['filename'] = os.path.join(output_directory,
                                         'Tutorial_Visible_Spectrum.png')
    plt.close(plot_visible_spectrum(**arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Tutorial_Sample_SD.png')
    sample_sd_data = {
        380: 0.048,
        385: 0.051,
        390: 0.055,
        395: 0.060,
        400: 0.065,
        405: 0.068,
        410: 0.068,
        415: 0.067,
        420: 0.064,
        425: 0.062,
        430: 0.059,
        435: 0.057,
        440: 0.055,
        445: 0.054,
        450: 0.053,
        455: 0.053,
        460: 0.052,
        465: 0.052,
        470: 0.052,
        475: 0.053,
        480: 0.054,
        485: 0.055,
        490: 0.057,
        495: 0.059,
        500: 0.061,
        505: 0.062,
        510: 0.065,
        515: 0.067,
        520: 0.070,
        525: 0.072,
        530: 0.074,
        535: 0.075,
        540: 0.076,
        545: 0.078,
        550: 0.079,
        555: 0.082,
        560: 0.087,
        565: 0.092,
        570: 0.100,
        575: 0.107,
        580: 0.115,
        585: 0.122,
        590: 0.129,
        595: 0.134,
        600: 0.138,
        605: 0.142,
        610: 0.146,
        615: 0.150,
        620: 0.154,
        625: 0.158,
        630: 0.163,
        635: 0.167,
        640: 0.173,
        645: 0.180,
        650: 0.188,
        655: 0.196,
        660: 0.204,
        665: 0.213,
        670: 0.222,
        675: 0.231,
        680: 0.242,
        685: 0.251,
        690: 0.261,
        695: 0.271,
        700: 0.282,
        705: 0.294,
        710: 0.305,
        715: 0.318,
        720: 0.334,
        725: 0.354,
        730: 0.372,
        735: 0.392,
        740: 0.409,
        745: 0.420,
        750: 0.436,
        755: 0.450,
        760: 0.462,
        765: 0.465,
        770: 0.448,
        775: 0.432,
        780: 0.421
    }

    sd = SpectralDistribution(sample_sd_data, name='Sample')
    plt.close(plot_single_sd(sd, **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Tutorial_SD_Interpolation.png')
    sd_copy = sd.copy()
    sd_copy.interpolate(SpectralShape(400, 770, 1))
    plt.close(
        plot_multi_sds([sd, sd_copy],
                       bounding_box=[730, 780, 0.25, 0.5],
                       **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Tutorial_Sample_Swatch.png')
    sd = SpectralDistribution(sample_sd_data)
    cmfs = STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer']
    illuminant = ILLUMINANTS_SDS['D65']
    with domain_range_scale('1'):
        XYZ = sd_to_XYZ(sd, cmfs, illuminant)
        RGB = XYZ_to_sRGB(XYZ)
    plt.close(
        plot_single_colour_swatch(ColourSwatch('Sample', RGB),
                                  text_parameters={'size': 'x-large'},
                                  **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Tutorial_Neutral5.png')
    patch_name = 'neutral 5 (.70 D)'
    patch_sd = COLOURCHECKERS_SDS['ColorChecker N Ohta'][patch_name]
    with domain_range_scale('1'):
        XYZ = sd_to_XYZ(patch_sd, cmfs, illuminant)
        RGB = XYZ_to_sRGB(XYZ)
    plt.close(
        plot_single_colour_swatch(ColourSwatch(patch_name.title(), RGB),
                                  text_parameters={'size': 'x-large'},
                                  **arguments)[0])

    arguments['filename'] = os.path.join(output_directory,
                                         'Tutorial_Colour_Checker.png')
    plt.close(
        plot_single_colour_checker(colour_checker='ColorChecker 2005',
                                   text_parameters={'visible': False},
                                   **arguments)[0])

    arguments['filename'] = os.path.join(
        output_directory, 'Tutorial_CIE_1931_Chromaticity_Diagram.png')
    xy = XYZ_to_xy(XYZ)
    plot_chromaticity_diagram_CIE1931(standalone=False)
    x, y = xy
    plt.plot(x, y, 'o-', color='white')
    # Annotating the plot.
    plt.annotate(patch_sd.name.title(),
                 xy=xy,
                 xytext=(-50, 30),
                 textcoords='offset points',
                 arrowprops=dict(arrowstyle='->',
                                 connectionstyle='arc3, rad=-0.2'))
    plt.close(
        render(standalone=True,
               limits=(-0.1, 0.9, -0.1, 0.9),
               x_tighten=True,
               y_tighten=True,
               **arguments)[0])

    # *************************************************************************
    # "basics.rst"
    # *************************************************************************
    arguments['filename'] = os.path.join(output_directory,
                                         'Basics_Logo_Small_001_CIE_XYZ.png')
    RGB = read_image(os.path.join(output_directory, 'Logo_Small_001.png'))[...,
                                                                           0:3]
    XYZ = sRGB_to_XYZ(RGB)
    plt.close(
        plot_image(XYZ, text_parameters={'text': 'sRGB to XYZ'},
                   **arguments)[0])
コード例 #17
0
ファイル: test_cqs.py プロジェクト: zachlewis/colour
    def test_colour_quality_scale(self):
        """
        Tests :func:`colour.quality.cqs.colour_quality_scale` definition.
        """

        self.assertAlmostEqual(
            colour_quality_scale(ILLUMINANTS_SDS['FL1']),
            74.933405395713180,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                ILLUMINANTS_SDS['FL1'], method='NIST CQS 7.4'),
            75.332008182589348,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(ILLUMINANTS_SDS['FL2']),
            64.017283509280588,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                ILLUMINANTS_SDS['FL2'], method='NIST CQS 7.4'),
            64.686339173112856,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(LIGHT_SOURCES_SDS['Neodimium Incandescent']),
            89.693921013642381,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['Neodimium Incandescent'],
                method='NIST CQS 7.4'),
            87.655035241231985,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)']),
            84.878441814420910,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)'],
                method='NIST CQS 7.4'),
            83.179881092827671,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(LIGHT_SOURCES_SDS['H38HT-100 (Mercury)']),
            19.836071708638958,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['H38HT-100 (Mercury)'],
                method='NIST CQS 7.4'),
            22.860610106043985,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(LIGHT_SOURCES_SDS['Luxeon WW 2880']),
            86.491761709787994,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['Luxeon WW 2880'], method='NIST CQS 7.4'),
            84.879524259605077,
            places=7)

        specification_r = CQS_Specification(
            name='FL1',
            Q_a=75.332008182589348,
            Q_f=76.339439008799872,
            Q_p=74.235391056498486,
            Q_g=84.222748330112054,
            Q_d=84.126957016581841,
            Q_as={
                1:
                    VS_ColourQualityScaleData(
                        name='VS1',
                        Q_a=77.680854801718439,
                        D_C_ab=-1.411454116288503,
                        D_E_ab=7.191809380490093,
                        D_Ep_ab=7.191809380490093),
                2:
                    VS_ColourQualityScaleData(
                        name='VS2',
                        Q_a=98.449964521835454,
                        D_C_ab=2.416949235948934,
                        D_E_ab=2.468031951275495,
                        D_Ep_ab=0.499537889816771),
                3:
                    VS_ColourQualityScaleData(
                        name='VS3',
                        Q_a=85.128488974188656,
                        D_C_ab=2.051673516490851,
                        D_E_ab=5.212485950404579,
                        D_Ep_ab=4.791726783206154),
                4:
                    VS_ColourQualityScaleData(
                        name='VS4',
                        Q_a=75.929101405967231,
                        D_C_ab=-1.544244803829976,
                        D_E_ab=7.756423964663330,
                        D_Ep_ab=7.756423964663330),
                5:
                    VS_ColourQualityScaleData(
                        name='VS5',
                        Q_a=76.560036127768228,
                        D_C_ab=-5.962959343458696,
                        D_E_ab=7.553059580932679,
                        D_Ep_ab=7.553059580932679),
                6:
                    VS_ColourQualityScaleData(
                        name='VS6',
                        Q_a=75.674875949078682,
                        D_C_ab=-7.785240663276603,
                        D_E_ab=7.838368326299190,
                        D_Ep_ab=7.838368326299190),
                7:
                    VS_ColourQualityScaleData(
                        name='VS7',
                        Q_a=74.856012003857145,
                        D_C_ab=-6.773721961614541,
                        D_E_ab=8.102319790027652,
                        D_Ep_ab=8.102319790027652),
                8:
                    VS_ColourQualityScaleData(
                        name='VS8',
                        Q_a=85.007243427918965,
                        D_C_ab=-0.684332522268967,
                        D_E_ab=4.830795743950247,
                        D_Ep_ab=4.830795743950247),
                9:
                    VS_ColourQualityScaleData(
                        name='VS9',
                        Q_a=95.600642739549912,
                        D_C_ab=3.245002214218772,
                        D_E_ab=3.541112179773836,
                        D_Ep_ab=1.417545801537952),
                10:
                    VS_ColourQualityScaleData(
                        name='VS10',
                        Q_a=84.897394198279201,
                        D_C_ab=3.2779983437733051,
                        D_E_ab=5.867290950207070,
                        D_Ep_ab=4.866192551944616),
                11:
                    VS_ColourQualityScaleData(
                        name='VS11',
                        Q_a=76.652664070814652,
                        D_C_ab=0.889135877229947,
                        D_E_ab=7.575563455510737,
                        D_Ep_ab=7.523204042181251),
                12:
                    VS_ColourQualityScaleData(
                        name='VS12',
                        Q_a=74.392341352838727,
                        D_C_ab=-1.950461685183292,
                        D_E_ab=8.251784061375552,
                        D_Ep_ab=8.251784061375552),
                13:
                    VS_ColourQualityScaleData(
                        name='VS13',
                        Q_a=71.733157403665416,
                        D_C_ab=-5.748914457790455,
                        D_E_ab=9.109057119322612,
                        D_Ep_ab=9.109057119322612),
                14:
                    VS_ColourQualityScaleData(
                        name='VS14',
                        Q_a=53.322108325530110,
                        D_C_ab=-14.642967562714134,
                        D_E_ab=15.053589749938459,
                        D_Ep_ab=15.053589749938459),
                15:
                    VS_ColourQualityScaleData(
                        name='VS15',
                        Q_a=62.611167146423085,
                        D_C_ab=-10.071676496831763,
                        D_E_ab=12.051527779341935,
                        D_Ep_ab=12.051527779341935)
            },
            colorimetry_data=([
                VS_ColorimetryData(
                    name='VS1',
                    XYZ=np.array([0.13184562, 0.09885158, 0.22533524]),
                    Lab=np.array([37.63552369, 27.62126274, -26.23567072]),
                    C=38.095204070389400),
                VS_ColorimetryData(
                    name='VS2',
                    XYZ=np.array([0.13066767, 0.10335651, 0.30768635]),
                    Lab=np.array([38.43822294, 23.38828386, -37.84013645]),
                    C=44.484691170961092),
                VS_ColorimetryData(
                    name='VS3',
                    XYZ=np.array([0.10087152, 0.09197794, 0.32255009]),
                    Lab=np.array([36.36236009, 11.00844158, -43.50665998]),
                    C=44.877781233091532),
                VS_ColorimetryData(
                    name='VS4',
                    XYZ=np.array([0.13339874, 0.15690626, 0.38428052]),
                    Lab=np.array([46.56595565, -9.85969969, -33.955993]),
                    C=35.358494572170223),
                VS_ColorimetryData(
                    name='VS5',
                    XYZ=np.array([0.18662805, 0.24704107, 0.40046308]),
                    Lab=np.array([56.78597632, -23.14117043, -18.29881674]),
                    C=29.501872194883592),
                VS_ColorimetryData(
                    name='VS6',
                    XYZ=np.array([0.15841746, 0.24152639, 0.26931454]),
                    Lab=np.array([56.24029681, -36.23772023, -1.42733778]),
                    C=36.265819453020534),
                VS_ColorimetryData(
                    name='VS7',
                    XYZ=np.array([0.14989922, 0.24926212, 0.138238]),
                    Lab=np.array([57.003456, -44.54988402, 24.99942371]),
                    C=51.084864212342254),
                VS_ColorimetryData(
                    name='VS8',
                    XYZ=np.array([0.26139991, 0.36817885, 0.11429053]),
                    Lab=np.array([67.14017484, -33.23131783, 48.67413212]),
                    C=58.936335329004450),
                VS_ColorimetryData(
                    name='VS9',
                    XYZ=np.array([0.42407924, 0.5285824, 0.11437796]),
                    Lab=np.array([77.791228, -22.23481066, 67.01388225]),
                    C=70.606283139833707),
                VS_ColorimetryData(
                    name='VS10',
                    XYZ=np.array([0.553588, 0.62024037, 0.09664934]),
                    Lab=np.array([82.9262011, -8.87753163, 81.03696819]),
                    C=81.521781025372348),
                VS_ColorimetryData(
                    name='VS11',
                    XYZ=np.array([0.39748223, 0.39523993, 0.0573943]),
                    Lab=np.array([69.1291429, 6.94195834, 71.52497069]),
                    C=71.861061901342111),
                VS_ColorimetryData(
                    name='VS12',
                    XYZ=np.array([0.43749683, 0.38968504, 0.08635639]),
                    Lab=np.array([68.72844451, 20.81629234, 59.85617607]),
                    C=63.372548004889417),
                VS_ColorimetryData(
                    name='VS13',
                    XYZ=np.array([0.34652079, 0.27550838, 0.08903238]),
                    Lab=np.array([59.48075943, 31.8153513, 43.0302754]),
                    C=53.514681906739007),
                VS_ColorimetryData(
                    name='VS14',
                    XYZ=np.array([0.14262899, 0.09104011, 0.04951868]),
                    Lab=np.array([36.18378646, 40.75048676, 18.33518283]),
                    C=44.685356670534020),
                VS_ColorimetryData(
                    name='VS15',
                    XYZ=np.array([0.13589052, 0.092129, 0.11599991]),
                    Lab=np.array([36.39100967, 35.60560293, -4.81131533]),
                    C=35.929204214045100)
            ], [
                VS_ColorimetryData(
                    name='VS1',
                    XYZ=np.array([0.15204948, 0.10842571, 0.21637094]),
                    Lab=np.array([39.31404365, 32.98305053, -21.74613572]),
                    C=39.506658186677903),
                VS_ColorimetryData(
                    name='VS2',
                    XYZ=np.array([0.13188419, 0.10619651, 0.29958251]),
                    Lab=np.array([38.93233648, 22.05678627, -35.82168464]),
                    C=42.067741935012158),
                VS_ColorimetryData(
                    name='VS3',
                    XYZ=np.array([0.10125948, 0.09854418, 0.32974284]),
                    Lab=np.array([37.57986983, 6.06363078, -42.39466811]),
                    C=42.826107716600681),
                VS_ColorimetryData(
                    name='VS4',
                    XYZ=np.array([0.13147324, 0.16804591, 0.39334981]),
                    Lab=np.array([48.01287105, -17.35257125, -32.5683964]),
                    C=36.902739376000198),
                VS_ColorimetryData(
                    name='VS5',
                    XYZ=np.array([0.18148174, 0.25847203, 0.41337803]),
                    Lab=np.array([57.89173056, -30.60333248, -17.92178331]),
                    C=35.464831538342288),
                VS_ColorimetryData(
                    name='VS6',
                    XYZ=np.array([0.15185555, 0.25077644, 0.28171886]),
                    Lab=np.array([57.15099451, -44.01579207, -1.76236936]),
                    C=44.051060116297137),
                VS_ColorimetryData(
                    name='VS7',
                    XYZ=np.array([0.1395656, 0.25329693, 0.1447564]),
                    Lab=np.array([57.39525164, -52.59411951, 24.11378416]),
                    C=57.858586173956795),
                VS_ColorimetryData(
                    name='VS8',
                    XYZ=np.array([0.24671064, 0.36211041, 0.11980564]),
                    Lab=np.array([66.68086148, -37.45951248, 46.3832832]),
                    C=59.620667851273417),
                VS_ColorimetryData(
                    name='VS9',
                    XYZ=np.array([0.4081725, 0.508617, 0.11898838]),
                    Lab=np.array([76.59515888, -21.91694258, 63.69607363]),
                    C=67.361280925614935),
                VS_ColorimetryData(
                    name='VS10',
                    XYZ=np.array([0.56031473, 0.60567807, 0.10172838]),
                    Lab=np.array([82.14584971, -3.82960002, 78.15000763]),
                    C=78.243782681599043),
                VS_ColorimetryData(
                    name='VS11',
                    XYZ=np.array([0.40536278, 0.38001713, 0.05756101]),
                    Lab=np.array([68.02187691, 14.16935995, 69.5431055]),
                    C=70.971926024112165),
                VS_ColorimetryData(
                    name='VS12',
                    XYZ=np.array([0.45402541, 0.37917641, 0.08624766]),
                    Lab=np.array([67.95987006, 28.93047228, 58.56725509]),
                    C=65.323009690072709),
                VS_ColorimetryData(
                    name='VS13',
                    XYZ=np.array([0.37202687, 0.27411307, 0.08885905]),
                    Lab=np.array([59.35311972, 40.9220464, 42.86677002]),
                    C=59.263596364529462),
                VS_ColorimetryData(
                    name='VS14',
                    XYZ=np.array([0.19305452, 0.11049115, 0.04885402]),
                    Lab=np.array([39.66307016, 53.96236134, 24.65590426]),
                    C=59.328324233248154),
                VS_ColorimetryData(
                    name='VS15',
                    XYZ=np.array([0.17304703, 0.10699393, 0.11285076]),
                    Lab=np.array([39.0694885, 45.99591907, 0.67561493]),
                    C=46.000880710876864)
            ]))

        specification_t = colour_quality_scale(
            ILLUMINANTS_SDS['FL1'],
            additional_data=True,
            method='NIST CQS 7.4')

        np.testing.assert_almost_equal(
            [
                data.Q_a
                for _index, data in sorted(specification_r.Q_as.items())
            ],
            [
                data.Q_a
                for _index, data in sorted(specification_t.Q_as.items())
            ],
            decimal=7,
        )

        specification_r = CQS_Specification(
            name='FL1',
            Q_a=74.933405395713152,
            Q_f=75.895019131814692,
            Q_p=None,
            Q_g=83.859802969126989,
            Q_d=None,
            Q_as={
                1:
                    VS_ColourQualityScaleData(
                        name='VS1',
                        Q_a=51.884484734774539,
                        D_C_ab=-14.642964823527400,
                        D_E_ab=15.053586922553365,
                        D_Ep_ab=15.053586922553365),
                2:
                    VS_ColourQualityScaleData(
                        name='VS2',
                        Q_a=70.859386580835093,
                        D_C_ab=-5.748912901584454,
                        D_E_ab=9.109057753686301,
                        D_Ep_ab=9.109057753686301),
                3:
                    VS_ColourQualityScaleData(
                        name='VS3',
                        Q_a=74.615079552044733,
                        D_C_ab=-0.199055128982607,
                        D_E_ab=7.934584371287040,
                        D_Ep_ab=7.934584371287040),
                4:
                    VS_ColourQualityScaleData(
                        name='VS4',
                        Q_a=85.470454126502858,
                        D_C_ab=2.620284036804321,
                        D_E_ab=5.242841277796065,
                        D_Ep_ab=4.541089762450278),
                5:
                    VS_ColourQualityScaleData(
                        name='VS5',
                        Q_a=95.464568465261436,
                        D_C_ab=3.244999121708176,
                        D_E_ab=3.541109287718627,
                        D_Ep_ab=1.417545656294811),
                6:
                    VS_ColourQualityScaleData(
                        name='VS6',
                        Q_a=84.543583902150289,
                        D_C_ab=-0.684333146377760,
                        D_E_ab=4.830795633277699,
                        D_Ep_ab=4.830795633277699),
                7:
                    VS_ColourQualityScaleData(
                        name='VS7',
                        Q_a=74.078633444044030,
                        D_C_ab=-6.773727982269591,
                        D_E_ab=8.102322827150674,
                        D_Ep_ab=8.102322827150674),
                8:
                    VS_ColourQualityScaleData(
                        name='VS8',
                        Q_a=74.922760174879087,
                        D_C_ab=-7.785252182726744,
                        D_E_ab=7.838379721335357,
                        D_Ep_ab=7.838379721335357),
                9:
                    VS_ColourQualityScaleData(
                        name='VS9',
                        Q_a=75.835254560528938,
                        D_C_ab=-5.962964833116001,
                        D_E_ab=7.553073243258186,
                        D_Ep_ab=7.553073243258186),
                10:
                    VS_ColourQualityScaleData(
                        name='VS10',
                        Q_a=75.184803574188905,
                        D_C_ab=-1.544240934167505,
                        D_E_ab=7.756446084611037,
                        D_Ep_ab=7.756446084611037),
                11:
                    VS_ColourQualityScaleData(
                        name='VS11',
                        Q_a=78.089782546668729,
                        D_C_ab=1.745770231264103,
                        D_E_ab=7.067228869124241,
                        D_Ep_ab=6.848212189193262),
                12:
                    VS_ColourQualityScaleData(
                        name='VS12',
                        Q_a=91.955688469006077,
                        D_C_ab=2.855869216256835,
                        D_E_ab=3.804866911398577,
                        D_Ep_ab=2.514164519893699),
                13:
                    VS_ColourQualityScaleData(
                        name='VS13',
                        Q_a=81.468184220490429,
                        D_C_ab=0.030402986778803,
                        D_E_ab=5.792177528304779,
                        D_Ep_ab=5.792097735518090),
                14:
                    VS_ColourQualityScaleData(
                        name='VS14',
                        Q_a=76.482628265932789,
                        D_C_ab=-5.080750395110528,
                        D_E_ab=7.350669246766205,
                        D_Ep_ab=7.350669246766205),
                15:
                    VS_ColourQualityScaleData(
                        name='VS15',
                        Q_a=65.370026142948518,
                        D_C_ab=-9.509238816066890,
                        D_E_ab=10.826397690468854,
                        D_Ep_ab=10.826397690468854)
            },
            colorimetry_data=([
                VS_ColorimetryData(
                    name='VS1',
                    XYZ=np.array([0.14262899, 0.09104012, 0.04951869]),
                    Lab=np.array([36.18378647, 40.75048793, 18.33517831]),
                    C=44.685355882758152),
                VS_ColorimetryData(
                    name='VS2',
                    XYZ=np.array([0.3465208, 0.27550838, 0.08903238]),
                    Lab=np.array([59.48075944, 31.81535155, 43.03027426]),
                    C=53.514681133664730),
                VS_ColorimetryData(
                    name='VS3',
                    XYZ=np.array([0.41042219, 0.38688299, 0.06618968]),
                    Lab=np.array([68.5248742, 13.56049316, 66.82043633]),
                    C=68.182532115437340),
                VS_ColorimetryData(
                    name='VS4',
                    XYZ=np.array([0.45420723, 0.50405653, 0.08194422]),
                    Lab=np.array([76.31757819, -7.04196646, 74.43516148]),
                    C=74.767523404153394),
                VS_ColorimetryData(
                    name='VS5',
                    XYZ=np.array([0.42407924, 0.5285824, 0.11437796]),
                    Lab=np.array([77.79122799, -22.23481106, 67.01388407]),
                    C=70.606284995201392),
                VS_ColorimetryData(
                    name='VS6',
                    XYZ=np.array([0.26139991, 0.36817885, 0.11429053]),
                    Lab=np.array([67.14017484, -33.23131787, 48.67413226]),
                    C=58.936335472298275),
                VS_ColorimetryData(
                    name='VS7',
                    XYZ=np.array([0.14989922, 0.24926212, 0.13823798]),
                    Lab=np.array([57.00345599, -44.54988535, 24.99942632]),
                    C=51.084866649348065),
                VS_ColorimetryData(
                    name='VS8',
                    XYZ=np.array([0.15841745, 0.24152639, 0.2693145]),
                    Lab=np.array([56.24029678, -36.23772472, -1.42733192]),
                    C=36.265823711788478),
                VS_ColorimetryData(
                    name='VS9',
                    XYZ=np.array([0.18662804, 0.24704107, 0.40046303]),
                    Lab=np.array([56.78597628, -23.14117544, -18.29881115]),
                    C=29.501872653031871),
                VS_ColorimetryData(
                    name='VS10',
                    XYZ=np.array([0.13339873, 0.15690626, 0.38428046]),
                    Lab=np.array([46.56595559, -9.85970727, -33.95598605]),
                    C=35.358490015776226),
                VS_ColorimetryData(
                    name='VS11',
                    XYZ=np.array([0.09902437, 0.09951361, 0.32046526]),
                    Lab=np.array([37.75499466, 3.55194161, -40.81669619]),
                    C=40.970952848102279),
                VS_ColorimetryData(
                    name='VS12',
                    XYZ=np.array([0.11579654, 0.09612863, 0.31943786]),
                    Lab=np.array([37.1384526, 18.80505207, -41.7368833]),
                    C=45.777695561949436),
                VS_ColorimetryData(
                    name='VS13',
                    XYZ=np.array([0.20977187, 0.16844709, 0.37299873]),
                    Lab=np.array([48.06376988, 26.00174066, -29.97180426]),
                    C=39.678704214193381),
                VS_ColorimetryData(
                    name='VS14',
                    XYZ=np.array([0.32294822, 0.2416386, 0.3623672]),
                    Lab=np.array([56.25148226, 37.44488177, -14.50799142]),
                    C=40.157203412534642),
                VS_ColorimetryData(
                    name='VS15',
                    XYZ=np.array([0.22031646, 0.15367587, 0.17564225]),
                    Lab=np.array([46.13360422, 39.30141636, -2.12353664]),
                    C=39.358744081490819)
            ], [
                VS_ColorimetryData(
                    name='VS1',
                    XYZ=np.array([0.19305453, 0.11049115, 0.04885406]),
                    Lab=np.array([39.6630702, 53.96236472, 24.65588837]),
                    C=59.328320706285552),
                VS_ColorimetryData(
                    name='VS2',
                    XYZ=np.array([0.37202688, 0.27411307, 0.08885906]),
                    Lab=np.array([59.35311972, 40.92204723, 42.86676601]),
                    C=59.263594035249184),
                VS_ColorimetryData(
                    name='VS3',
                    XYZ=np.array([0.42075427, 0.37269638, 0.06621283]),
                    Lab=np.array([67.47883546, 21.21408713, 65.00772248]),
                    C=68.381587244419947),
                VS_ColorimetryData(
                    name='VS4',
                    XYZ=np.array([0.4619684, 0.49480415, 0.08591535]),
                    Lab=np.array([75.74923125, -2.37840511, 72.10802547]),
                    C=72.147239367349073),
                VS_ColorimetryData(
                    name='VS5',
                    XYZ=np.array([0.40817249, 0.508617, 0.11898836]),
                    Lab=np.array([76.59515887, -21.91694373, 63.69607847]),
                    C=67.361285873493216),
                VS_ColorimetryData(
                    name='VS6',
                    XYZ=np.array([0.24671064, 0.36211041, 0.11980563]),
                    Lab=np.array([66.68086148, -37.45951274, 46.38328397]),
                    C=59.620668618676035),
                VS_ColorimetryData(
                    name='VS7',
                    XYZ=np.array([0.1395656, 0.25329693, 0.14475636]),
                    Lab=np.array([57.39525162, -52.59412462, 24.11379331]),
                    C=57.858594631617656),
                VS_ColorimetryData(
                    name='VS8',
                    XYZ=np.array([0.15185552, 0.25077644, 0.28171872]),
                    Lab=np.array([57.15099443, -44.01580867, -1.76234921]),
                    C=44.051075894515222),
                VS_ColorimetryData(
                    name='VS9',
                    XYZ=np.array([0.1814817, 0.25847202, 0.41337786]),
                    Lab=np.array([57.89173046, -30.60335063, -17.92176409]),
                    C=35.464837486147871),
                VS_ColorimetryData(
                    name='VS10',
                    XYZ=np.array([0.1314732, 0.16804591, 0.39334961]),
                    Lab=np.array([48.0128709, -17.35259857, -32.5683723]),
                    C=36.902730949943731),
                VS_ColorimetryData(
                    name='VS11',
                    XYZ=np.array([0.0972772, 0.10656633, 0.32348741]),
                    Lab=np.array([38.99602774, -3.18915863, -39.09532221]),
                    C=39.225182616838175),
                VS_ColorimetryData(
                    name='VS12',
                    XYZ=np.array([0.11499913, 0.09966411, 0.31524145]),
                    Lab=np.array([37.78207842, 15.46056944, -40.04065396]),
                    C=42.921826345692601),
                VS_ColorimetryData(
                    name='VS13',
                    XYZ=np.array([0.23126112, 0.17972713, 0.36052054]),
                    Lab=np.array([49.46299499, 29.95421157, -25.97562318]),
                    C=39.648301227414578),
                VS_ColorimetryData(
                    name='VS14',
                    XYZ=np.array([0.35886253, 0.2560872, 0.35532873]),
                    Lab=np.array([57.66377054, 43.8380947, -11.16664308]),
                    C=45.237953807645169),
                VS_ColorimetryData(
                    name='VS15',
                    XYZ=np.array([0.26550827, 0.17191964, 0.17308227]),
                    Lab=np.array([48.50100521, 48.80442473, 2.49156155]),
                    C=48.86798289755771)
            ]))

        specification_t = colour_quality_scale(
            ILLUMINANTS_SDS['FL1'],
            additional_data=True,
            method='NIST CQS 9.0')

        np.testing.assert_almost_equal(
            [
                data.Q_a
                for _index, data in sorted(specification_r.Q_as.items())
            ],
            [
                data.Q_a
                for _index, data in sorted(specification_t.Q_as.items())
            ],
            decimal=7,
        )
コード例 #18
0
def plot_multi_sds_colour_quality_scales_bars(sds,
                                              method='NIST CQS 9.0',
                                              **kwargs):
    """
    Plots the *Colour Quality Scale* (CQS) of given illuminants or light
    sources spectral distributions.

    Parameters
    ----------
    sds : array_like or MultiSpectralDistributions
        Spectral distributions or multi-spectral distributions to
        plot. `sds` can be a single
        :class:`colour.MultiSpectralDistributions` class instance, a list
        of :class:`colour.MultiSpectralDistributions` class instances or a
        list of :class:`colour.SpectralDistribution` class instances.
    method : unicode, optional
        **{NIST CQS 7.4'}**,
        *Colour Quality Scale* (CQS) computation method.

    Other Parameters
    ----------------
    \\**kwargs : dict, optional
        {:func:`colour.plotting.artist`,
        :func:`colour.plotting.quality.plot_colour_quality_bars`,
        :func:`colour.plotting.render`},
        Please refer to the documentation of the previously listed definitions.
    labels : bool, optional
        {:func:`colour.plotting.quality.plot_colour_quality_bars`},
        Add labels above bars.
    hatching : bool or None, optional
        {:func:`colour.plotting.quality.plot_colour_quality_bars`},
        Use hatching for the bars.
    hatching_repeat : int, optional
        {:func:`colour.plotting.quality.plot_colour_quality_bars`},
        Hatching pattern repeat.

    Returns
    -------
    tuple
        Current figure and axes.

    Examples
    --------
    >>> from colour import (ILLUMINANTS_SDS,
    ...                     LIGHT_SOURCES_SDS)
    >>> illuminant = ILLUMINANTS_SDS['FL2']
    >>> light_source = LIGHT_SOURCES_SDS['Kinoton 75P']
    >>> plot_multi_sds_colour_quality_scales_bars([illuminant, light_source])
    ... # doctest: +ELLIPSIS
    (<Figure size ... with 1 Axes>, \
<matplotlib.axes._subplots.AxesSubplot object at 0x...>)

    .. image:: ../_static/Plotting_\
Plot_Multi_SDS_Colour_Quality_Scales_Bars.png
        :align: center
        :alt: plot_multi_sds_colour_quality_scales_bars
    """

    sds = sds_and_multi_sds_to_sds(sds)

    settings = dict(kwargs)
    settings.update({'standalone': False})

    specifications = [colour_quality_scale(sd, True, method) for sd in sds]

    _figure, axes = plot_colour_quality_bars(specifications, **settings)

    title = 'Colour Quality Scale - {0}'.format(', '.join(
        [sd.strict_name for sd in sds]))

    settings = {'axes': axes, 'title': title}
    settings.update(kwargs)

    return render(**settings)
コード例 #19
0
ファイル: quality.py プロジェクト: colour-science/colour
def plot_multi_sds_colour_quality_scales_bars(sds,
                                              method='NIST CQS 7.4',
                                              **kwargs):
    """
    Plots the *Colour Quality Scale* (CQS) of given illuminants or light
    sources spectral distributions.

    Parameters
    ----------
    sds : array_like
        Array of illuminants or light sources spectral distributions to
        plot the *Colour Quality Scale* (CQS).
    method : unicode, optional
        **{NIST CQS 7.4'}**,
        *Colour Quality Scale* (CQS) computation method.

    Other Parameters
    ----------------
    \\**kwargs : dict, optional
        {:func:`colour.plotting.artist`,
        :func:`colour.plotting.quality.plot_colour_quality_bars`,
        :func:`colour.plotting.render`},
        Please refer to the documentation of the previously listed definitions.
    labels : bool, optional
        {:func:`colour.plotting.quality.plot_colour_quality_bars`},
        Add labels above bars.
    hatching : bool or None, optional
        {:func:`colour.plotting.quality.plot_colour_quality_bars`},
        Use hatching for the bars.
    hatching_repeat : int, optional
        {:func:`colour.plotting.quality.plot_colour_quality_bars`},
        Hatching pattern repeat.

    Returns
    -------
    tuple
        Current figure and axes.

    Examples
    --------
    >>> from colour import (ILLUMINANTS_SDS,
    ...                     LIGHT_SOURCES_SDS)
    >>> illuminant = ILLUMINANTS_SDS['FL2']
    >>> light_source = LIGHT_SOURCES_SDS['Kinoton 75P']
    >>> plot_multi_sds_colour_quality_scales_bars([illuminant, light_source])
    ... # doctest: +SKIP

    .. image:: ../_static/Plotting_\
Plot_Multi_SDs_Colour_Quality_Scales_Bars.png
        :align: center
        :alt: plot_multi_sds_colour_quality_scales_bars
    """

    settings = dict(kwargs)
    settings.update({'standalone': False})

    specifications = [colour_quality_scale(sd, True, method) for sd in sds]

    _figure, axes = plot_colour_quality_bars(specifications, **settings)

    title = 'Colour Quality Scale - {0}'.format(', '.join(
        [sd.strict_name for sd in sds]))

    settings = {'axes': axes, 'title': title}
    settings.update(kwargs)

    return render(**settings)
コード例 #20
0
ファイル: test_cqs.py プロジェクト: colour-science/colour
    def test_colour_quality_scale(self):
        """
        Tests :func:`colour.quality.cqs.colour_quality_scale` definition.
        """

        self.assertAlmostEqual(
            colour_quality_scale(ILLUMINANTS_SDS['FL1']),
            74.933405395713180,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                ILLUMINANTS_SDS['FL1'], method='NIST CQS 7.4'),
            75.332008182589348,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(ILLUMINANTS_SDS['FL2']),
            64.017283509280588,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                ILLUMINANTS_SDS['FL2'], method='NIST CQS 7.4'),
            64.686339173112856,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(LIGHT_SOURCES_SDS['Neodimium Incandescent']),
            89.693921013642381,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['Neodimium Incandescent'],
                method='NIST CQS 7.4'),
            87.655035241231985,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)']),
            84.878441814420910,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)'],
                method='NIST CQS 7.4'),
            83.179881092827671,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(LIGHT_SOURCES_SDS['H38HT-100 (Mercury)']),
            19.836071708638958,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['H38HT-100 (Mercury)'],
                method='NIST CQS 7.4'),
            22.860610106043985,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(LIGHT_SOURCES_SDS['Luxeon WW 2880']),
            86.491761709787994,
            places=7)

        self.assertAlmostEqual(
            colour_quality_scale(
                LIGHT_SOURCES_SDS['Luxeon WW 2880'], method='NIST CQS 7.4'),
            84.879524259605077,
            places=7)
コード例 #21
0
def generate_documentation_plots(output_directory: str):
    """
    Generate documentation plots.

    Parameters
    ----------
    output_directory
        Output directory.
    """

    filter_warnings()

    colour_style()

    np.random.seed(0)

    # *************************************************************************
    # "README.rst"
    # *************************************************************************
    filename = os.path.join(
        output_directory, "Examples_Colour_Automatic_Conversion_Graph.png"
    )
    plot_automatic_colour_conversion_graph(filename)

    arguments = {
        "tight_layout": True,
        "transparent_background": True,
        "filename": os.path.join(
            output_directory, "Examples_Plotting_Visible_Spectrum.png"
        ),
    }
    plt.close(
        plot_visible_spectrum(
            "CIE 1931 2 Degree Standard Observer", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_Illuminant_F1_SD.png"
    )
    plt.close(plot_single_illuminant_sd("FL1", **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_Blackbodies.png"
    )
    blackbody_sds = [
        sd_blackbody(i, SpectralShape(0, 10000, 10))
        for i in range(1000, 15000, 1000)
    ]
    plt.close(
        plot_multi_sds(
            blackbody_sds,
            y_label="W / (sr m$^2$) / m",
            plot_kwargs={"use_sd_colours": True, "normalise_sd_colours": True},
            legend_location="upper right",
            bounding_box=(0, 1250, 0, 2.5e6),
            **arguments,
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_Cone_Fundamentals.png"
    )
    plt.close(
        plot_single_cmfs(
            "Stockman & Sharpe 2 Degree Cone Fundamentals",
            y_label="Sensitivity",
            bounding_box=(390, 870, 0, 1.1),
            **arguments,
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_Luminous_Efficiency.png"
    )
    plt.close(
        plot_multi_sds(
            (
                sd_mesopic_luminous_efficiency_function(0.2),
                SDS_LEFS_PHOTOPIC["CIE 1924 Photopic Standard Observer"],
                SDS_LEFS_SCOTOPIC["CIE 1951 Scotopic Standard Observer"],
            ),
            y_label="Luminous Efficiency",
            legend_location="upper right",
            y_tighten=True,
            margins=(0, 0, 0, 0.1),
            **arguments,
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_BabelColor_Average.png"
    )
    plt.close(
        plot_multi_sds(
            SDS_COLOURCHECKERS["BabelColor Average"].values(),
            plot_kwargs={"use_sd_colours": True},
            title=("BabelColor Average - " "Spectral Distributions"),
            **arguments,
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_ColorChecker_2005.png"
    )
    plt.close(
        plot_single_colour_checker(
            "ColorChecker 2005", text_kwargs={"visible": False}, **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_Chromaticities_Prediction.png"
    )
    plt.close(
        plot_corresponding_chromaticities_prediction(
            2, "Von Kries", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Examples_Plotting_Chromaticities_CIE_1931_Chromaticity_Diagram.png",
    )
    RGB = np.random.random((32, 32, 3))
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(
            RGB,
            "ITU-R BT.709",
            colourspaces=["ACEScg", "S-Gamut"],
            show_pointer_gamut=True,
            **arguments,
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_CRI.png"
    )
    plt.close(
        plot_single_sd_colour_rendering_index_bars(
            SDS_ILLUMINANTS["FL2"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_Colour_Rendition_Report.png"
    )
    plt.close(
        plot_single_sd_colour_rendition_report(
            SDS_ILLUMINANTS["FL2"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_Plot_Visible_Spectrum_Section.png"
    )
    plt.close(
        plot_visible_spectrum_section(
            section_colours="RGB", section_opacity=0.15, **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Examples_Plotting_Plot_RGB_Colourspace_Section.png"
    )
    plt.close(
        plot_RGB_colourspace_section(
            "sRGB", section_colours="RGB", section_opacity=0.15, **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Examples_Plotting_CCT_CIE_1960_UCS_Chromaticity_Diagram.png",
    )
    plt.close(
        plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(
            ["A", "B", "C"], **arguments
        )[0]
    )

    # *************************************************************************
    # Documentation
    # *************************************************************************
    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_CVD_Simulation_Machado2009.png"
    )
    plt.close(plot_cvd_simulation_Machado2009(RGB, **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_Colour_Checker.png"
    )
    plt.close(plot_single_colour_checker("ColorChecker 2005", **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_Colour_Checkers.png"
    )
    plt.close(
        plot_multi_colour_checkers(
            ["ColorChecker 1976", "ColorChecker 2005"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_SD.png"
    )
    data = {
        500: 0.0651,
        520: 0.0705,
        540: 0.0772,
        560: 0.0870,
        580: 0.1128,
        600: 0.1360,
    }
    sd = SpectralDistribution(data, name="Custom")
    plt.close(plot_single_sd(sd, **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_SDS.png"
    )
    data_1 = {
        500: 0.004900,
        510: 0.009300,
        520: 0.063270,
        530: 0.165500,
        540: 0.290400,
        550: 0.433450,
        560: 0.594500,
    }
    data_2 = {
        500: 0.323000,
        510: 0.503000,
        520: 0.710000,
        530: 0.862000,
        540: 0.954000,
        550: 0.994950,
        560: 0.995000,
    }
    spd1 = SpectralDistribution(data_1, name="Custom 1")
    spd2 = SpectralDistribution(data_2, name="Custom 2")
    plt.close(plot_multi_sds([spd1, spd2], **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_CMFS.png"
    )
    plt.close(
        plot_single_cmfs("CIE 1931 2 Degree Standard Observer", **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_CMFS.png"
    )
    cmfs = (
        "CIE 1931 2 Degree Standard Observer",
        "CIE 1964 10 Degree Standard Observer",
    )
    plt.close(plot_multi_cmfs(cmfs, **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_Illuminant_SD.png"
    )
    plt.close(plot_single_illuminant_sd("A", **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_Illuminant_SDS.png"
    )
    plt.close(plot_multi_illuminant_sds(["A", "B", "C"], **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Visible_Spectrum.png"
    )
    plt.close(plot_visible_spectrum(**arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_Lightness_Function.png"
    )
    plt.close(plot_single_lightness_function("CIE 1976", **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_Lightness_Functions.png"
    )
    plt.close(
        plot_multi_lightness_functions(
            ["CIE 1976", "Wyszecki 1963"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_Luminance_Function.png"
    )
    plt.close(plot_single_luminance_function("CIE 1976", **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_Luminance_Functions.png"
    )
    plt.close(
        plot_multi_luminance_functions(
            ["CIE 1976", "Newhall 1943"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Blackbody_Spectral_Radiance.png"
    )
    plt.close(
        plot_blackbody_spectral_radiance(
            3500, blackbody="VY Canis Major", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Blackbody_Colours.png"
    )
    plt.close(
        plot_blackbody_colours(SpectralShape(150, 12500, 50), **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_Colour_Swatch.png"
    )
    RGB = ColourSwatch((0.45620519, 0.03081071, 0.04091952))
    plt.close(plot_single_colour_swatch(RGB, **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_Colour_Swatches.png"
    )
    RGB_1 = ColourSwatch((0.45293517, 0.31732158, 0.26414773))
    RGB_2 = ColourSwatch((0.77875824, 0.57726450, 0.50453169))
    plt.close(plot_multi_colour_swatches([RGB_1, RGB_2], **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_Function.png"
    )
    plt.close(plot_single_function(lambda x: x ** (1 / 2.2), **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_Functions.png"
    )
    functions = {
        "Gamma 2.2": lambda x: x ** (1 / 2.2),
        "Gamma 2.4": lambda x: x ** (1 / 2.4),
        "Gamma 2.6": lambda x: x ** (1 / 2.6),
    }
    plt.close(plot_multi_functions(functions, **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Image.png"
    )
    path = os.path.join(
        colour.__path__[0],
        "examples",
        "plotting",
        "resources",
        "Ishihara_Colour_Blindness_Test_Plate_3.png",
    )
    plt.close(plot_image(read_image(str(path)), **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Corresponding_Chromaticities_Prediction.png",
    )
    plt.close(
        plot_corresponding_chromaticities_prediction(
            1, "Von Kries", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Spectral_Locus.png"
    )
    plt.close(
        plot_spectral_locus(spectral_locus_colours="RGB", **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Chromaticity_Diagram_Colours.png"
    )
    plt.close(
        plot_chromaticity_diagram_colours(diagram_colours="RGB", **arguments)[
            0
        ]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Chromaticity_Diagram.png"
    )
    plt.close(plot_chromaticity_diagram(**arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Chromaticity_Diagram_CIE1931.png"
    )
    plt.close(plot_chromaticity_diagram_CIE1931(**arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Chromaticity_Diagram_CIE1960UCS.png"
    )
    plt.close(plot_chromaticity_diagram_CIE1960UCS(**arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Chromaticity_Diagram_CIE1976UCS.png"
    )
    plt.close(plot_chromaticity_diagram_CIE1976UCS(**arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_SDS_In_Chromaticity_Diagram.png"
    )
    A = SDS_ILLUMINANTS["A"]
    D65 = SDS_ILLUMINANTS["D65"]
    plt.close(plot_sds_in_chromaticity_diagram([A, D65], **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1931.png",
    )
    plt.close(
        plot_sds_in_chromaticity_diagram_CIE1931([A, D65], **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1960UCS.png",
    )
    plt.close(
        plot_sds_in_chromaticity_diagram_CIE1960UCS([A, D65], **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1976UCS.png",
    )
    plt.close(
        plot_sds_in_chromaticity_diagram_CIE1976UCS([A, D65], **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Pointer_Gamut.png"
    )
    plt.close(plot_pointer_gamut(**arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_RGB_Colourspaces_In_Chromaticity_Diagram.png",
    )
    plt.close(
        plot_RGB_colourspaces_in_chromaticity_diagram(
            ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_RGB_Colourspaces_In_Chromaticity_Diagram_CIE1931.png",
    )
    plt.close(
        plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931(
            ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_RGB_Colourspaces_In_"
        "Chromaticity_Diagram_CIE1960UCS.png",
    )
    plt.close(
        plot_RGB_colourspaces_in_chromaticity_diagram_CIE1960UCS(
            ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_RGB_Colourspaces_In_"
        "Chromaticity_Diagram_CIE1976UCS.png",
    )
    plt.close(
        plot_RGB_colourspaces_in_chromaticity_diagram_CIE1976UCS(
            ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_RGB_Chromaticities_In_" "Chromaticity_Diagram.png",
    )
    RGB = np.random.random((128, 128, 3))
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram(
            RGB, "ITU-R BT.709", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_RGB_Chromaticities_In_"
        "Chromaticity_Diagram_CIE1931.png",
    )
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(
            RGB, "ITU-R BT.709", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_RGB_Chromaticities_In_"
        "Chromaticity_Diagram_CIE1960UCS.png",
    )
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS(
            RGB, "ITU-R BT.709", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_RGB_Chromaticities_In_"
        "Chromaticity_Diagram_CIE1976UCS.png",
    )
    plt.close(
        plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS(
            RGB, "ITU-R BT.709", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Ellipses_MacAdam1942_In_Chromaticity_Diagram.png",
    )
    plt.close(
        plot_ellipses_MacAdam1942_in_chromaticity_diagram(**arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Ellipses_MacAdam1942_In_"
        "Chromaticity_Diagram_CIE1931.png",
    )
    plt.close(
        plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931(**arguments)[
            0
        ]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Ellipses_MacAdam1942_In_"
        "Chromaticity_Diagram_CIE1960UCS.png",
    )
    plt.close(
        plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS(
            **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Ellipses_MacAdam1942_In_"
        "Chromaticity_Diagram_CIE1976UCS.png",
    )
    plt.close(
        plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS(
            **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_CCTF.png"
    )
    plt.close(plot_single_cctf("ITU-R BT.709", **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_CCTFs.png"
    )
    plt.close(plot_multi_cctfs(["ITU-R BT.709", "sRGB"], **arguments)[0])

    data = np.array(
        [
            [
                None,
                np.array([0.95010000, 1.00000000, 1.08810000]),
                np.array([0.40920000, 0.28120000, 0.30600000]),
                np.array(
                    [
                        [0.02495100, 0.01908600, 0.02032900],
                        [0.10944300, 0.06235900, 0.06788100],
                        [0.27186500, 0.18418700, 0.19565300],
                        [0.48898900, 0.40749400, 0.44854600],
                    ]
                ),
                None,
            ],
            [
                None,
                np.array([0.95010000, 1.00000000, 1.08810000]),
                np.array([0.30760000, 0.48280000, 0.42770000]),
                np.array(
                    [
                        [0.02108000, 0.02989100, 0.02790400],
                        [0.06194700, 0.11251000, 0.09334400],
                        [0.15255800, 0.28123300, 0.23234900],
                        [0.34157700, 0.56681300, 0.47035300],
                    ]
                ),
                None,
            ],
            [
                None,
                np.array([0.95010000, 1.00000000, 1.08810000]),
                np.array([0.39530000, 0.28120000, 0.18450000]),
                np.array(
                    [
                        [0.02436400, 0.01908600, 0.01468800],
                        [0.10331200, 0.06235900, 0.02854600],
                        [0.26311900, 0.18418700, 0.12109700],
                        [0.43158700, 0.40749400, 0.39008600],
                    ]
                ),
                None,
            ],
            [
                None,
                np.array([0.95010000, 1.00000000, 1.08810000]),
                np.array([0.20510000, 0.18420000, 0.57130000]),
                np.array(
                    [
                        [0.03039800, 0.02989100, 0.06123300],
                        [0.08870000, 0.08498400, 0.21843500],
                        [0.18405800, 0.18418700, 0.40111400],
                        [0.32550100, 0.34047200, 0.50296900],
                        [0.53826100, 0.56681300, 0.80010400],
                    ]
                ),
                None,
            ],
            [
                None,
                np.array([0.95010000, 1.00000000, 1.08810000]),
                np.array([0.35770000, 0.28120000, 0.11250000]),
                np.array(
                    [
                        [0.03678100, 0.02989100, 0.01481100],
                        [0.17127700, 0.11251000, 0.01229900],
                        [0.30080900, 0.28123300, 0.21229800],
                        [0.52976000, 0.40749400, 0.11720000],
                    ]
                ),
                None,
            ],
        ]
    )
    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Constant_Hue_Loci.png"
    )
    plt.close(plot_constant_hue_loci(data, "IPT", **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_Munsell_Value_Function.png"
    )
    plt.close(plot_single_munsell_value_function("ASTM D1535", **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Multi_Munsell_Value_Functions.png"
    )
    plt.close(
        plot_multi_munsell_value_functions(
            ["ASTM D1535", "McCamy 1987"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Single_SD_Rayleigh_Scattering.png"
    )
    plt.close(plot_single_sd_rayleigh_scattering(**arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_The_Blue_Sky.png"
    )
    plt.close(plot_the_blue_sky(**arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Colour_Quality_Bars.png"
    )
    illuminant = SDS_ILLUMINANTS["FL2"]
    light_source = SDS_LIGHT_SOURCES["Kinoton 75P"]
    light_source = light_source.copy().align(SpectralShape(360, 830, 1))
    cqs_i = colour_quality_scale(illuminant, additional_data=True)
    cqs_l = colour_quality_scale(light_source, additional_data=True)
    plt.close(plot_colour_quality_bars([cqs_i, cqs_l], **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Single_SD_Colour_Rendering_Index_Bars.png",
    )
    illuminant = SDS_ILLUMINANTS["FL2"]
    plt.close(
        plot_single_sd_colour_rendering_index_bars(illuminant, **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Multi_SDS_Colour_Rendering_Indexes_Bars.png",
    )
    light_source = SDS_LIGHT_SOURCES["Kinoton 75P"]
    plt.close(
        plot_multi_sds_colour_rendering_indexes_bars(
            [illuminant, light_source], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Single_SD_Colour_Quality_Scale_Bars.png",
    )
    illuminant = SDS_ILLUMINANTS["FL2"]
    plt.close(
        plot_single_sd_colour_quality_scale_bars(illuminant, **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Multi_SDS_Colour_Quality_Scales_Bars.png",
    )
    light_source = SDS_LIGHT_SOURCES["Kinoton 75P"]
    plt.close(
        plot_multi_sds_colour_quality_scales_bars(
            [illuminant, light_source], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Hull_Section_Colours.png"
    )
    vertices, faces, _outline = primitive_cube(1, 1, 1, 64, 64, 64)
    XYZ_vertices = RGB_to_XYZ(
        vertices["position"] + 0.5,
        RGB_COLOURSPACE_sRGB.whitepoint,
        RGB_COLOURSPACE_sRGB.whitepoint,
        RGB_COLOURSPACE_sRGB.matrix_RGB_to_XYZ,
    )
    hull = trimesh.Trimesh(XYZ_vertices, faces, process=False)
    plt.close(
        plot_hull_section_colours(hull, section_colours="RGB", **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Hull_Section_Contour.png"
    )
    plt.close(
        plot_hull_section_contour(hull, section_colours="RGB", **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Visible_Spectrum_Section.png"
    )
    plt.close(
        plot_visible_spectrum_section(
            section_colours="RGB", section_opacity=0.15, **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_RGB_Colourspace_Section.png"
    )
    plt.close(
        plot_RGB_colourspace_section(
            "sRGB", section_colours="RGB", section_opacity=0.15, **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_Planckian_Locus.png"
    )
    plt.close(
        plot_planckian_locus(planckian_locus_colours="RGB", **arguments)[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram.png",
    )
    plt.close(
        plot_planckian_locus_in_chromaticity_diagram(
            ["A", "B", "C"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram_CIE1931.png",
    )
    plt.close(
        plot_planckian_locus_in_chromaticity_diagram_CIE1931(
            ["A", "B", "C"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram_CIE1960UCS.png",
    )
    plt.close(
        plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS(
            ["A", "B", "C"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Single_SD_Colour_Rendition_Report_Full.png",
    )
    plt.close(
        plot_single_sd_colour_rendition_report(
            SDS_ILLUMINANTS["FL2"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Single_SD_Colour_Rendition_Report_Intermediate.png",
    )
    plt.close(
        plot_single_sd_colour_rendition_report(
            SDS_ILLUMINANTS["FL2"], "Intermediate", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory,
        "Plotting_Plot_Single_SD_Colour_Rendition_Report_Simple.png",
    )
    plt.close(
        plot_single_sd_colour_rendition_report(
            SDS_ILLUMINANTS["FL2"], "Simple", **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_RGB_Colourspaces_Gamuts.png"
    )
    plt.close(
        plot_RGB_colourspaces_gamuts(
            ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_RGB_Colourspaces_Gamuts.png"
    )
    plt.close(
        plot_RGB_colourspaces_gamuts(
            ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Plotting_Plot_RGB_Scatter.png"
    )
    plt.close(plot_RGB_scatter(RGB, "ITU-R BT.709", **arguments)[0])

    filename = os.path.join(
        output_directory, "Plotting_Plot_Colour_Automatic_Conversion_Graph.png"
    )
    plot_automatic_colour_conversion_graph(filename)

    # *************************************************************************
    # "tutorial.rst"
    # *************************************************************************
    arguments["filename"] = os.path.join(
        output_directory, "Tutorial_Visible_Spectrum.png"
    )
    plt.close(plot_visible_spectrum(**arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Tutorial_Sample_SD.png"
    )
    sample_sd_data = {
        380: 0.048,
        385: 0.051,
        390: 0.055,
        395: 0.060,
        400: 0.065,
        405: 0.068,
        410: 0.068,
        415: 0.067,
        420: 0.064,
        425: 0.062,
        430: 0.059,
        435: 0.057,
        440: 0.055,
        445: 0.054,
        450: 0.053,
        455: 0.053,
        460: 0.052,
        465: 0.052,
        470: 0.052,
        475: 0.053,
        480: 0.054,
        485: 0.055,
        490: 0.057,
        495: 0.059,
        500: 0.061,
        505: 0.062,
        510: 0.065,
        515: 0.067,
        520: 0.070,
        525: 0.072,
        530: 0.074,
        535: 0.075,
        540: 0.076,
        545: 0.078,
        550: 0.079,
        555: 0.082,
        560: 0.087,
        565: 0.092,
        570: 0.100,
        575: 0.107,
        580: 0.115,
        585: 0.122,
        590: 0.129,
        595: 0.134,
        600: 0.138,
        605: 0.142,
        610: 0.146,
        615: 0.150,
        620: 0.154,
        625: 0.158,
        630: 0.163,
        635: 0.167,
        640: 0.173,
        645: 0.180,
        650: 0.188,
        655: 0.196,
        660: 0.204,
        665: 0.213,
        670: 0.222,
        675: 0.231,
        680: 0.242,
        685: 0.251,
        690: 0.261,
        695: 0.271,
        700: 0.282,
        705: 0.294,
        710: 0.305,
        715: 0.318,
        720: 0.334,
        725: 0.354,
        730: 0.372,
        735: 0.392,
        740: 0.409,
        745: 0.420,
        750: 0.436,
        755: 0.450,
        760: 0.462,
        765: 0.465,
        770: 0.448,
        775: 0.432,
        780: 0.421,
    }

    sd = SpectralDistribution(sample_sd_data, name="Sample")
    plt.close(plot_single_sd(sd, **arguments)[0])

    arguments["filename"] = os.path.join(
        output_directory, "Tutorial_SD_Interpolation.png"
    )
    sd_copy = sd.copy()
    sd_copy.interpolate(SpectralShape(400, 770, 1))
    plt.close(
        plot_multi_sds(
            [sd, sd_copy], bounding_box=[730, 780, 0.25, 0.5], **arguments
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Tutorial_Sample_Swatch.png"
    )
    sd = SpectralDistribution(sample_sd_data)
    cmfs = MSDS_CMFS_STANDARD_OBSERVER["CIE 1931 2 Degree Standard Observer"]
    illuminant = SDS_ILLUMINANTS["D65"]
    with domain_range_scale("1"):
        XYZ = sd_to_XYZ(sd, cmfs, illuminant)
        RGB = XYZ_to_sRGB(XYZ)
    plt.close(
        plot_single_colour_swatch(
            ColourSwatch(RGB, "Sample"),
            text_kwargs={"size": "x-large"},
            **arguments,
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Tutorial_Neutral5.png"
    )
    patch_name = "neutral 5 (.70 D)"
    patch_sd = SDS_COLOURCHECKERS["ColorChecker N Ohta"][patch_name]
    with domain_range_scale("1"):
        XYZ = sd_to_XYZ(patch_sd, cmfs, illuminant)
        RGB = XYZ_to_sRGB(XYZ)
    plt.close(
        plot_single_colour_swatch(
            ColourSwatch(RGB, patch_name.title()),
            text_kwargs={"size": "x-large"},
            **arguments,
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Tutorial_Colour_Checker.png"
    )
    plt.close(
        plot_single_colour_checker(
            colour_checker="ColorChecker 2005",
            text_kwargs={"visible": False},
            **arguments,
        )[0]
    )

    arguments["filename"] = os.path.join(
        output_directory, "Tutorial_CIE_1931_Chromaticity_Diagram.png"
    )
    xy = XYZ_to_xy(XYZ)
    plot_chromaticity_diagram_CIE1931(standalone=False)
    x, y = xy
    plt.plot(x, y, "o-", color="white")
    # Annotating the plot.
    plt.annotate(
        patch_sd.name.title(),
        xy=xy,
        xytext=(-50, 30),
        textcoords="offset points",
        arrowprops=dict(arrowstyle="->", connectionstyle="arc3, rad=-0.2"),
    )
    plt.close(
        render(
            standalone=True,
            limits=(-0.1, 0.9, -0.1, 0.9),
            x_tighten=True,
            y_tighten=True,
            **arguments,
        )[0]
    )

    # *************************************************************************
    # "basics.rst"
    # *************************************************************************
    arguments["filename"] = os.path.join(
        output_directory, "Basics_Logo_Small_001_CIE_XYZ.png"
    )
    RGB = read_image(os.path.join(output_directory, "Logo_Small_001.png"))[
        ..., 0:3
    ]
    XYZ = sRGB_to_XYZ(RGB)
    plt.close(
        plot_image(XYZ, text_kwargs={"text": "sRGB to XYZ"}, **arguments)[0]
    )