Source code for colour_datasets.loaders.jakob2019

"""
Spectral Upsampling Coefficient Tables - Jakob and Hanika (2019)
================================================================

Defines the objects implementing support for *Jakob and Hanika (2019)*
*Spectral Upsampling Coefficient Tables* dataset loading:

-   :class:`colour_datasets.loaders.DatasetLoader_Jakob2019`
-   :func:`colour_datasets.loaders.build_Jakob2019`

References
----------
-   :cite:`Jakob2019` : Jakob, W., & Hanika, J. (2019). A Low-Dimensional
    Function Space for Efficient Spectral Upsampling. Computer Graphics Forum,
    38(2), 147-155. doi:10.1111/cgf.13626
"""

from __future__ import annotations

import glob
import os

from colour.hints import Dict
from colour.recovery import LUT3D_Jakob2019

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_Jakob2019",
    "build_Jakob2019",
]


[docs] class DatasetLoader_Jakob2019(AbstractDatasetLoader): """ Define the *Jakob and Hanika (2019)* *Spectral Upsampling Coefficient Tables* dataset loader. Attributes ---------- - :attr:`colour_datasets.loaders.DatasetLoader_Jakob2019.ID` Methods ------- - :meth:`colour_datasets.loaders.DatasetLoader_Jakob2019.__init__` - :meth:`colour_datasets.loaders.DatasetLoader_Jakob2019.load` References ---------- :cite:`Jakob2019` """ ID: str = "4050598" """Dataset record id, i.e. the *Zenodo* record number.""" def __init__(self) -> None: super().__init__(datasets()[DatasetLoader_Jakob2019.ID])
[docs] def load(self) -> Dict[str, LUT3D_Jakob2019]: """ Sync, parse, convert and return the *Jakob and Hanika (2019)* *Spectral Upsampling Coefficient Tables* dataset content. Returns ------- :class:`dict` *Jakob and Hanika (2019)* *Spectral Upsampling Coefficient Tables* dataset content. Examples -------- >>> from colour_datasets.utilities import suppress_stdout >>> dataset = DatasetLoader_Jakob2019() >>> with suppress_stdout(): ... dataset.load() >>> len(dataset.content.keys()) 4 """ super().sync() self._content = {} tables_path = os.path.join( self.record.repository, "dataset", "Jakob2019Spectral", "supplement", "tables", ) coeff_file_to_RGB_colourspace = { "rec2020": "ITU-R BT.2020", "srgb": "sRGB", "aces2065_1": "ACES2065-1", "prophotorgb": "ProPhoto RGB", } for coeff_file in glob.glob(f"{tables_path}/*.coeff"): key = os.path.splitext(os.path.basename(coeff_file))[0] key = coeff_file_to_RGB_colourspace.get(key, key) LUT = LUT3D_Jakob2019() LUT.read(coeff_file) self._content[key] = LUT return self._content
_DATASET_LOADER_JAKOB2019: DatasetLoader_Jakob2019 | None = None """ Singleton instance of the *Jakob and Hanika (2019)* *Spectral Upsampling Coefficient Tables* dataset loader. """
[docs] def build_Jakob2019(load: bool = True) -> DatasetLoader_Jakob2019: """ Singleton factory that builds the *Jakob and Hanika (2019)* *Spectral Upsampling Coefficient Tables* dataset loader. Parameters ---------- load Whether to load the dataset upon instantiation. Returns ------- :class:`colour_datasets.loaders.DatasetLoader_Jakob2019` Singleton instance of the *Jakob and Hanika (2019)* *Spectral Upsampling Coefficient Tables* dataset loader. References ---------- :cite:`Jakob2019` """ global _DATASET_LOADER_JAKOB2019 # noqa: PLW0603 if _DATASET_LOADER_JAKOB2019 is None: _DATASET_LOADER_JAKOB2019 = DatasetLoader_Jakob2019() if load: _DATASET_LOADER_JAKOB2019.load() return _DATASET_LOADER_JAKOB2019