Source code for colour_datasets.loaders.brendel2020

"""
Measured Commercial LED Spectra - Brendel (2020)
================================================

Defines the objects implementing support for *Brendel (2020)*
*Measured Commercial LED Spectra* dataset loading:

-   :class:`colour_datasets.loaders.DatasetLoader_Brendel2020`
-   :func:`colour_datasets.loaders.build_Brendel2020`

References
----------
-   :cite:`Brendel2020` : Brendel, H. (2020). Measured Commercial LED Spectra.
    Retrieved September 26, 2020, from
    https://haraldbrendel.com/files/led_spd_350_700.csv
"""

from __future__ import annotations

import os

import numpy as np
from colour import LinearInterpolator, SpectralDistribution, SpectralShape
from colour.hints import Dict
from colour.utilities import as_int

from colour_datasets.loaders import AbstractDatasetLoader
from colour_datasets.records import datasets

__author__ = "Colour Developers"
__copyright__ = "Copyright 2019 Colour Developers"
__license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause"
__maintainer__ = "Colour Developers"
__email__ = "colour-developers@colour-science.org"
__status__ = "Production"

__all__ = [
    "DatasetLoader_Brendel2020",
    "build_Brendel2020",
]


[docs] class DatasetLoader_Brendel2020(AbstractDatasetLoader): """ Define the *Brendel (2020)* *Measured Commercial LED Spectra* dataset loader. Attributes ---------- ID Methods ------- load References ---------- :cite:`Brendel2020` """ ID: str = "4051012" """Dataset record id, i.e. the *Zenodo* record number.""" def __init__(self) -> None: super().__init__(datasets()[DatasetLoader_Brendel2020.ID])
[docs] def load(self) -> Dict[str, SpectralDistribution]: """ Sync, parse, convert and return the *Brendel (2020)* *Measured Commercial LED Spectra* dataset content. Returns ------- :class:`dict` *Brendel (2020)* *Measured Commercial LED Spectra* dataset content. Examples -------- >>> from colour_datasets.utilities import suppress_stdout >>> dataset = DatasetLoader_Brendel2020() >>> with suppress_stdout(): ... dataset.load() >>> len(dataset.content.keys()) 29 """ super().sync() self._content = {} wavelengths = SpectralShape(350, 700, 2).range() csv_path = os.path.join( self.record.repository, "dataset", "led_spd_350_700.csv" ) for i, values in enumerate(np.loadtxt(csv_path, delimiter=",", skiprows=1)): peak = as_int(wavelengths[np.argmax(values)]) name = f"{peak}nm - LED {i} - Brendel (2020)" self._content[name] = SpectralDistribution( values, wavelengths, name=name, interpolator=LinearInterpolator ) return self._content
_DATASET_LOADER_BRENDEL2020: DatasetLoader_Brendel2020 | None = None """ Singleton instance of the *Brendel (2020)* *Measured Commercial LED Spectra* dataset loader. """
[docs] def build_Brendel2020(load: bool = True) -> DatasetLoader_Brendel2020: """ Singleton factory that builds the *Brendel (2020)* *Measured Commercial LED Spectra* dataset loader. Parameters ---------- load Whether to load the dataset upon instantiation. Returns ------- :class:`colour_datasets.loaders.DatasetLoader_Brendel2020` Singleton instance of the *Brendel (2020)* *Measured Commercial LED Spectra* dataset loader. References ---------- :cite:`Brendel2020` """ global _DATASET_LOADER_BRENDEL2020 # noqa: PLW0603 if _DATASET_LOADER_BRENDEL2020 is None: _DATASET_LOADER_BRENDEL2020 = DatasetLoader_Brendel2020() if load: _DATASET_LOADER_BRENDEL2020.load() return _DATASET_LOADER_BRENDEL2020