Source code for colour_datasets.loaders

from __future__ import annotations

import sys

from colour.hints import Any
from colour.utilities import CanonicalMapping, warning

from colour_datasets.records import datasets

from .abstract import AbstractDatasetLoader
from .asano2015 import DatasetLoader_Asano2015, build_Asano2015
from .brendel2020 import DatasetLoader_Brendel2020, build_Brendel2020
from .dyer2017 import DatasetLoader_Dyer2017, build_Dyer2017
from .ebner1998 import DatasetLoader_Ebner1998, build_Ebner1998
from .hung1995 import DatasetLoader_Hung1995, build_Hung1995
from .jakob2019 import DatasetLoader_Jakob2019, build_Jakob2019
from .jiang2013 import DatasetLoader_Jiang2013, build_Jiang2013
from .karge2015 import DatasetLoader_Karge2015, build_Karge2015
from .labsphere2019 import DatasetLoader_Labsphere2019, build_Labsphere2019
from .luo1997 import DatasetLoader_Luo1997, build_Luo1997
from .luo1999 import DatasetLoader_Luo1999, build_Luo1999
from .solomotav2023 import DatasetLoader_Solomotav2023, build_Solomotav2023
from .winquist2022 import DatasetLoader_Winquist2022, build_Winquist2022
from .xrite2016 import DatasetLoader_XRite2016, build_XRite2016
from .zhao2009 import DatasetLoader_Zhao2009, build_Zhao2009

__all__ = [
    "AbstractDatasetLoader",
]
__all__ += [
    "DatasetLoader_Asano2015",
    "build_Asano2015",
]
__all__ += [
    "DatasetLoader_Brendel2020",
    "build_Brendel2020",
]
__all__ += [
    "DatasetLoader_Dyer2017",
    "build_Dyer2017",
]
__all__ += [
    "DatasetLoader_Ebner1998",
    "build_Ebner1998",
]
__all__ += [
    "DatasetLoader_Hung1995",
    "build_Hung1995",
]
__all__ += [
    "DatasetLoader_Jakob2019",
    "build_Jakob2019",
]
__all__ += [
    "DatasetLoader_Jiang2013",
    "build_Jiang2013",
]
__all__ += [
    "DatasetLoader_Karge2015",
    "build_Karge2015",
]
__all__ += [
    "DatasetLoader_Labsphere2019",
    "build_Labsphere2019",
]
__all__ += [
    "DatasetLoader_Luo1997",
    "build_Luo1997",
]
__all__ += [
    "DatasetLoader_Luo1999",
    "build_Luo1999",
]
__all__ += [
    "DatasetLoader_Solomotav2023",
    "build_Solomotav2023",
]
__all__ += [
    "DatasetLoader_Winquist2022",
    "build_Winquist2022",
]
__all__ += [
    "DatasetLoader_XRite2016",
    "build_XRite2016",
]
__all__ += [
    "DatasetLoader_Zhao2009",
    "build_Zhao2009",
]

DATASET_LOADERS: CanonicalMapping = CanonicalMapping(
    {
        DatasetLoader_Asano2015.ID: build_Asano2015,
        DatasetLoader_Brendel2020.ID: build_Brendel2020,
        DatasetLoader_Dyer2017.ID: build_Dyer2017,
        DatasetLoader_Ebner1998.ID: build_Ebner1998,
        DatasetLoader_Hung1995.ID: build_Hung1995,
        DatasetLoader_Jakob2019.ID: build_Jakob2019,
        DatasetLoader_Jiang2013.ID: build_Jiang2013,
        DatasetLoader_Karge2015.ID: build_Karge2015,
        DatasetLoader_Labsphere2019.ID: build_Labsphere2019,
        DatasetLoader_Luo1997.ID: build_Luo1997,
        DatasetLoader_Luo1999.ID: build_Luo1999,
        DatasetLoader_Solomotav2023.ID: build_Solomotav2023,
        DatasetLoader_Winquist2022.ID: build_Winquist2022,
        DatasetLoader_XRite2016.ID: build_XRite2016,
        DatasetLoader_Zhao2009.ID: build_Zhao2009,
    }
)
DATASET_LOADERS.__doc__ = """
Dataset loaders ids and callables.
"""

from .kuopio import DATASET_LOADERS_KUOPIO_UNIVERSITY  # noqa: E402

DATASET_LOADERS.update(DATASET_LOADERS_KUOPIO_UNIVERSITY)

from . import kuopio  # noqa: E402

_module = sys.modules["colour_datasets.loaders"]

for _export in kuopio.__all__:
    if _export.startswith(("DatasetLoader_", "build_")):
        setattr(_module, _export, getattr(kuopio, _export))

        __all__ += [_export]  # noqa: PLE0604

del _module, _export

_HAS_TITLE_KEYS: bool = False
"""
Whether the :attr:`colour_datasets.loaders.DATASET_LOADERS` attribute has
been updated with dataset titles. This variable is used in the one time
initialisation step that ensures that datasets can also be loaded using their
titles.
"""


[docs] def load(dataset: int | str) -> Any: """ Load given dataset: The dataset is pulled locally, i.e. synced if required and then its data is loaded. Parameters ---------- dataset Dataset id, i.e. the *Zenodo* record number or title. Returns ------- :class:`object` Dataset data. Examples -------- >>> len(load("3245883").keys()) # doctest: +SKIP 28 >>> len( ... load("Camera Spectral Sensitivity Database - " "Jiang et al. (2013)").keys() ... ) ... # doctest: +SKIP 28 """ global _HAS_TITLE_KEYS # noqa: PLW0603 if not _HAS_TITLE_KEYS: for key in list(DATASET_LOADERS.keys())[:]: dataset_loader = datasets().get(key) if not dataset_loader: continue title = dataset_loader.title if title in DATASET_LOADERS: warning(f'"{title}" key is already defined in the dataset loaders!') DATASET_LOADERS[title] = DATASET_LOADERS[key] _HAS_TITLE_KEYS = True return DATASET_LOADERS[str(dataset)]().content
__all__ += [ "DATASET_LOADERS", "load", ]