diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b527df6..570a31c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,6 +3,10 @@ repos: rev: '1.0.1' hooks: - id: flynt +- repo: https://github.com/PyCQA/isort + rev: '5.12.0' + hooks: + - id: isort - repo: https://github.com/charliermarsh/ruff-pre-commit rev: 'v0.0.285' hooks: diff --git a/BIBLIOGRAPHY.bib b/BIBLIOGRAPHY.bib index 9b94c36..3b43090 100644 --- a/BIBLIOGRAPHY.bib +++ b/BIBLIOGRAPHY.bib @@ -10,6 +10,7 @@ @misc{Brendel2020 author = {Brendel, Harald}, year = 2020, month = apr, + urldate = {2020-09-26}, } @article{Breneman1987b, title = {Corresponding Chromaticities for Different States of @@ -23,6 +24,7 @@ @article{Breneman1987b pages = 1115, issn = {1084-7529}, doi = {10.1364/JOSAA.4.001115}, + urldate = {2014-09-27}, abstract = {While each of his or her two eyes was independently adapted to a different illuminant in viewing a complex visual field, each of a number of observers matched a series of test @@ -132,6 +134,7 @@ @article{Jakob2019 pages = {147--155}, issn = {0167-7055, 1467-8659}, doi = {10.1111/cgf.13626}, + urldate = {2020-06-21}, langid = {english}, } @inproceedings{Jiang2013, @@ -184,6 +187,7 @@ @inproceedings{Langlands2020 publisher = {{ACM}}, address = {{Virtual Event USA}}, doi = {10.1145/3388767.3407368}, + urldate = {2022-05-28}, isbn = {978-1-4503-7971-7}, langid = {english}, } @@ -296,6 +300,7 @@ @misc{Luo1997 title = {Using the {{LUTCHI Colour Appearance Data}}}, author = {Luo, M Ronnier and Rhodes, Peter A.}, year = 1997, + urldate = {2019-09-10}, howpublished = {https://web.archive.org/web/20040212195937/http://colour.derby.ac.uk:80/colour/info/lutchi/}, } @article{Luo1999, @@ -308,7 +313,7 @@ @article{Luo1999 number = 4, pages = {295--296}, issn = {0361-2317}, - doi = {10.1002/(SICI)1520-6378(199908)24:4<295::AID-COL10>3.0.CO;2-K}, + doi = {10.1002/(SICI)1520-6378(199908)24:4{$<$}295::AID-COL10{$>$}3.0.CO;2-K}, abstract = {Predicting the binding mode of flexible polypeptides to proteins is an important task that falls outside the domain of applicability of most small molecule and protein-protein docking @@ -368,17 +373,27 @@ @misc{Silvennoinen author = {Silvennoinen, Raimo and {University of Kuopio}}, doi = {10.5281/zenodo.3269920}, } +@inproceedings{Solomatov2023, + title = {Spectral Sensitivity Estimation without a Camera}, + booktitle = {{{IEEE}} International Conference on Computational + Photography ({{ICCP}})}, + author = {Solomatov, Grigory and Akkaynak, Derya}, + year = 2023, + month = jul, +} @misc{Winquist2022, title = {Physlight - {{Camera Spectral Sensitivity Curves}}}, author = {Winquist, Erik and Thurston, Kimball and {Weta Digital}}, year = 2022, + urldate = {2022-05-28}, } @misc{X-Rite2016, title = {New Color Specifications for {{ColorChecker SG}} and {{Classic Charts}}}, author = {{X-Rite}}, year = 2016, + urldate = {2018-10-29}, howpublished = {http://xritephoto.com/ph\_product\_overview.aspx?ID=938\&Action=Support\&SupportID=5884\#}, } @misc{Zhao2009, diff --git a/README.rst b/README.rst index d6d6be2..30138d4 100644 --- a/README.rst +++ b/README.rst @@ -86,7 +86,7 @@ definition: colour-science-datasets ======================= - Datasets : 22 + Datasets : 23 Synced : 1 URL : https://zenodo.org/communities/colour-science-datasets/ @@ -94,6 +94,7 @@ definition: -------- [ ] 3269926 : Agfa IT8.7/2 Set - Marszalec (n.d.) + [ ] 8314702 : Camera Dataset - Solomatov and Akkaynak (2023) [ ] 3245883 : Camera Spectral Sensitivity Database - Jiang et al. (2013) [ ] 3367463 : Constant Hue Loci Data - Hung and Berns (1995) [ ] 3362536 : Constant Perceived-Hue Data - Ebner and Fairchild (1998) diff --git a/colour_datasets/__init__.py b/colour_datasets/__init__.py index c41c55d..402426a 100644 --- a/colour_datasets/__init__.py +++ b/colour_datasets/__init__.py @@ -16,16 +16,14 @@ """ import contextlib -import numpy as np import os import subprocess import colour +import numpy as np -from .records import Configuration -from .records import Community, Record, datasets -from .records import sandbox from .loaders import load +from .records import Community, Configuration, Record, datasets, sandbox __author__ = "Colour Developers" __copyright__ = "Copyright 2019 Colour Developers" @@ -53,7 +51,7 @@ __major_version__ = "0" __minor_version__ = "2" -__change_version__ = "2" +__change_version__ = "3" __version__ = ".".join( (__major_version__, __minor_version__, __change_version__) ) diff --git a/colour_datasets/loaders/__init__.py b/colour_datasets/loaders/__init__.py index b28c0a9..7d13ff3 100644 --- a/colour_datasets/loaders/__init__.py +++ b/colour_datasets/loaders/__init__.py @@ -19,6 +19,7 @@ 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 @@ -70,6 +71,10 @@ "DatasetLoader_Luo1999", "build_Luo1999", ] +__all__ += [ + "DatasetLoader_Solomotav2023", + "build_Solomotav2023", +] __all__ += [ "DatasetLoader_Winquist2022", "build_Winquist2022", @@ -96,6 +101,7 @@ 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, diff --git a/colour_datasets/loaders/asano2015.py b/colour_datasets/loaders/asano2015.py index 50376f8..b4c27b7 100644 --- a/colour_datasets/loaders/asano2015.py +++ b/colour_datasets/loaders/asano2015.py @@ -16,15 +16,15 @@ from __future__ import annotations -import numpy as np import os -import xlrd from collections import namedtuple +import numpy as np +import xlrd from colour import SpectralShape from colour.colorimetry import ( - XYZ_ColourMatchingFunctions, LMS_ConeFundamentals, + XYZ_ColourMatchingFunctions, ) from colour.hints import Dict, NDArrayFloat from colour.utilities import as_float_array, tstack diff --git a/colour_datasets/loaders/brendel2020.py b/colour_datasets/loaders/brendel2020.py index 3528974..4ce77c4 100644 --- a/colour_datasets/loaders/brendel2020.py +++ b/colour_datasets/loaders/brendel2020.py @@ -17,10 +17,10 @@ from __future__ import annotations -import numpy as np import os -from colour import LinearInterpolator, SpectralShape, SpectralDistribution +import numpy as np +from colour import LinearInterpolator, SpectralDistribution, SpectralShape from colour.hints import Dict from colour.utilities import as_int diff --git a/colour_datasets/loaders/dyer2017.py b/colour_datasets/loaders/dyer2017.py index 9cadfba..a6bb01e 100644 --- a/colour_datasets/loaders/dyer2017.py +++ b/colour_datasets/loaders/dyer2017.py @@ -16,8 +16,8 @@ from __future__ import annotations -import json import glob +import json import os from colour import MultiSpectralDistributions, SpectralDistribution diff --git a/colour_datasets/loaders/ebner1998.py b/colour_datasets/loaders/ebner1998.py index db5a2dc..4509733 100644 --- a/colour_datasets/loaders/ebner1998.py +++ b/colour_datasets/loaders/ebner1998.py @@ -19,10 +19,10 @@ from __future__ import annotations import codecs -import numpy as np import os from collections import namedtuple +import numpy as np from colour.hints import Dict, NDArrayFloat from colour.utilities import as_float_array diff --git a/colour_datasets/loaders/hung1995.py b/colour_datasets/loaders/hung1995.py index 210367a..ef21104 100644 --- a/colour_datasets/loaders/hung1995.py +++ b/colour_datasets/loaders/hung1995.py @@ -18,10 +18,10 @@ from __future__ import annotations -import numpy as np import os from collections import namedtuple +import numpy as np from colour import CCS_ILLUMINANTS, xy_to_XYZ, xyY_to_XYZ from colour.hints import Dict diff --git a/colour_datasets/loaders/jiang2013.py b/colour_datasets/loaders/jiang2013.py index ee90134..a3636dd 100644 --- a/colour_datasets/loaders/jiang2013.py +++ b/colour_datasets/loaders/jiang2013.py @@ -19,10 +19,10 @@ from __future__ import annotations import codecs -import numpy as np import os import re +import numpy as np from colour import SpectralShape from colour.characterisation import RGB_CameraSensitivities from colour.hints import Dict diff --git a/colour_datasets/loaders/kuopio.py b/colour_datasets/loaders/kuopio.py index 12f4431..61f45fb 100644 --- a/colour_datasets/loaders/kuopio.py +++ b/colour_datasets/loaders/kuopio.py @@ -37,14 +37,14 @@ import contextlib import functools -import numpy as np import os import re -import scipy.io import sys from collections import namedtuple from typing import ClassVar +import numpy as np +import scipy.io from colour import SpectralDistribution, SpectralShape from colour.hints import Any, Dict, Tuple, Type, cast diff --git a/colour_datasets/loaders/labsphere2019.py b/colour_datasets/loaders/labsphere2019.py index 3cf6396..c468d7f 100644 --- a/colour_datasets/loaders/labsphere2019.py +++ b/colour_datasets/loaders/labsphere2019.py @@ -14,9 +14,9 @@ doi:10.5281/zenodo.3245875 """ -import numpy as np import os +import numpy as np from colour import SpectralDistribution from colour.hints import Dict, Optional from colour.utilities import tsplit diff --git a/colour_datasets/loaders/luo1997.py b/colour_datasets/loaders/luo1997.py index 39c2f00..2381e4d 100644 --- a/colour_datasets/loaders/luo1997.py +++ b/colour_datasets/loaders/luo1997.py @@ -31,10 +31,10 @@ from __future__ import annotations -import numpy as np import os from collections import namedtuple +import numpy as np from colour.hints import Dict, Tuple from colour.utilities import as_float_array, usage_warning diff --git a/colour_datasets/loaders/luo1999.py b/colour_datasets/loaders/luo1999.py index ad75aa7..8ab4747 100644 --- a/colour_datasets/loaders/luo1999.py +++ b/colour_datasets/loaders/luo1999.py @@ -26,10 +26,10 @@ from __future__ import annotations import codecs -import numpy as np import os from collections import namedtuple +import numpy as np from colour.hints import Dict, Tuple, cast from colour.utilities import as_float_array diff --git a/colour_datasets/loaders/solomotav2023.py b/colour_datasets/loaders/solomotav2023.py new file mode 100644 index 0000000..c0ff1bb --- /dev/null +++ b/colour_datasets/loaders/solomotav2023.py @@ -0,0 +1,149 @@ +""" +Camera Dataset - Solomatov and Akkaynak (2023) +============================================== + +Defines the objects implementing support for *Solomatov and Akkaynak (2023)* +*Camera Dataset* dataset loading: + +- :class:`colour_datasets.loaders.DatasetLoader_Solomotav2023` +- :func:`colour_datasets.loaders.build_Solomotav2023` + +References +---------- +- :cite:`Solomotav2023` : Solomatov, G., & Akkaynak, D. (2023, July). + Spectral sensitivity estimation without a camera. IEEE International + Conference on Computational Photography (ICCP). +""" + +from __future__ import annotations + +import glob +import os + +from colour.characterisation import RGB_CameraSensitivities +from colour.hints import Dict +from colour.io import read_sds_from_csv_file + +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_Solomotav2023", + "build_Solomotav2023", +] + + +class DatasetLoader_Solomotav2023(AbstractDatasetLoader): + """ + Define the *Solomatov and Akkaynak (2023)* *Camera Dataset* dataset loader. + + Attributes + ---------- + - :attr:`colour_datasets.loaders.DatasetLoader_Solomotav2023.ID` + + Methods + ------- + - :meth:`colour_datasets.loaders.DatasetLoader_Solomotav2023.__init__` + - :meth:`colour_datasets.loaders.DatasetLoader_Solomotav2023.load` + + References + ---------- + :cite:`Solomotav2023` + """ + + ID: str = "8314702" + """Dataset record id, i.e. the *Zenodo* record number.""" + + def __init__(self) -> None: + super().__init__(datasets()[DatasetLoader_Solomotav2023.ID]) + + def load(self) -> Dict[str, Dict[str, RGB_CameraSensitivities]]: + """ + Sync, parse, convert and return the *Solomatov and Akkaynak (2023)* + *Camera Dataset* dataset content. + + Returns + ------- + :class:`dict` + *Solomatov and Akkaynak (2023)* *Camera Dataset* + dataset content. + + Examples + -------- + >>> from colour_datasets.utilities import suppress_stdout + >>> dataset = DatasetLoader_Solomotav2023() + >>> with suppress_stdout(): + ... dataset.load() + ... + >>> len(dataset.content.keys()) + 2 + >>> len(dataset.content["Estimated"].keys()) + 1012 + """ + + super().sync() + + self._content = {"Estimated": {}, "Ground Truth": {}} + + for key, path in [ + ("Estimated", "csv"), + ("Ground Truth", "ground-truths"), + ]: + csv_files = glob.glob( + f'{os.path.join(self.record.repository, "dataset", path, path)}/' + f"*.csv" + ) + for csv_file in csv_files: + camera_name = os.path.splitext(os.path.basename(csv_file))[ + 0 + ].replace("-", " ") + self._content[key][camera_name] = RGB_CameraSensitivities( + read_sds_from_csv_file(csv_file), name=camera_name + ) + + return self._content + + +_DATASET_LOADER_SOLOMOTAV2023: DatasetLoader_Solomotav2023 | None = None +""" +Singleton instance of the *Solomatov and Akkaynak (2023)* +*Camera Dataset* dataset loader. +""" + + +def build_Solomotav2023(load: bool = True) -> DatasetLoader_Solomotav2023: + """ + Singleton factory that builds the *Solomatov and Akkaynak (2023)* + *Camera Dataset* dataset loader. + + Parameters + ---------- + load + Whether to load the dataset upon instantiation. + + Returns + ------- + :class:`colour_datasets.loaders.DatasetLoader_Solomotav2023` + Singleton instance of the *Solomatov and Akkaynak (2023)* + *Camera Dataset* dataset loader. + + References + ---------- + :cite:`Solomotav2023` + """ + + global _DATASET_LOADER_SOLOMOTAV2023 # noqa: PLW0603 + + if _DATASET_LOADER_SOLOMOTAV2023 is None: + _DATASET_LOADER_SOLOMOTAV2023 = DatasetLoader_Solomotav2023() + if load: + _DATASET_LOADER_SOLOMOTAV2023.load() + + return _DATASET_LOADER_SOLOMOTAV2023 diff --git a/colour_datasets/loaders/tests/test_asano2015.py b/colour_datasets/loaders/tests/test_asano2015.py index 8a4bebc..f48ffb3 100644 --- a/colour_datasets/loaders/tests/test_asano2015.py +++ b/colour_datasets/loaders/tests/test_asano2015.py @@ -1,9 +1,9 @@ # !/usr/bin/env python """Define the unit tests for the :mod:`colour_datasets.loaders.asano2015` module.""" -import numpy as np import unittest +import numpy as np from colour import SpectralShape from colour_datasets.loaders import DatasetLoader_Asano2015, build_Asano2015 diff --git a/colour_datasets/loaders/tests/test_dyer2017.py b/colour_datasets/loaders/tests/test_dyer2017.py index 5773cf8..d41bc65 100644 --- a/colour_datasets/loaders/tests/test_dyer2017.py +++ b/colour_datasets/loaders/tests/test_dyer2017.py @@ -1,9 +1,10 @@ # !/usr/bin/env python """Define the unit tests for the :mod:`colour_datasets.loaders.dyer2017` module.""" -import numpy as np import unittest +import numpy as np + from colour_datasets.loaders import DatasetLoader_Dyer2017, build_Dyer2017 __author__ = "Colour Developers" diff --git a/colour_datasets/loaders/tests/test_ebner1998.py b/colour_datasets/loaders/tests/test_ebner1998.py index 7ddd238..291d878 100644 --- a/colour_datasets/loaders/tests/test_ebner1998.py +++ b/colour_datasets/loaders/tests/test_ebner1998.py @@ -1,9 +1,10 @@ # !/usr/bin/env python """Define the unit tests for the :mod:`colour_datasets.loaders.ebner1998` module.""" -import numpy as np import unittest +import numpy as np + from colour_datasets.loaders import DatasetLoader_Ebner1998, build_Ebner1998 __author__ = "Colour Developers" diff --git a/colour_datasets/loaders/tests/test_hung1995.py b/colour_datasets/loaders/tests/test_hung1995.py index 7a650cd..b042d53 100644 --- a/colour_datasets/loaders/tests/test_hung1995.py +++ b/colour_datasets/loaders/tests/test_hung1995.py @@ -1,9 +1,10 @@ # !/usr/bin/env python """Define the unit tests for the :mod:`colour_datasets.loaders.hung1995` module.""" -import numpy as np import unittest +import numpy as np + from colour_datasets.loaders import DatasetLoader_Hung1995, build_Hung1995 __author__ = "Colour Developers" diff --git a/colour_datasets/loaders/tests/test_kuopio.py b/colour_datasets/loaders/tests/test_kuopio.py index 2138897..7ab417b 100644 --- a/colour_datasets/loaders/tests/test_kuopio.py +++ b/colour_datasets/loaders/tests/test_kuopio.py @@ -1,25 +1,27 @@ # !/usr/bin/env python -"""Define the unit tests for the :mod:`colour_datasets.loaders.kuopio` module.""" +""" +Define the unit tests for the :mod:`colour_datasets.loaders.kuopio` module. + +isort:skip_file +""" -import numpy as np import os import unittest +import numpy as np from colour import SpectralShape from colour_datasets.loaders.kuopio import ( - MatFileMetadata_KuopioUniversity, - read_sds_from_mat_file_KuopioUniversity, -) -from colour_datasets.loaders.kuopio import ( - DatasetLoader_MunsellColorsMattSpectrofotometerMeasured, # pyright: ignore - DatasetLoader_MunsellColorsMattAOTFMeasured, # pyright: ignore - DatasetLoader_MunsellColorsGlossySpectrofotometerMeasured, # pyright: ignore - DatasetLoader_MunsellColorsGlossyAllSpectrofotometerMeasured, # pyright: ignore + DatasetLoader_AgfaIT872Set, # pyright: ignore DatasetLoader_ForestColors, # pyright: ignore DatasetLoader_PaperSpectra, # pyright: ignore DatasetLoader_LumberSpectra, # pyright: ignore - DatasetLoader_AgfaIT872Set, # pyright: ignore + DatasetLoader_MunsellColorsGlossyAllSpectrofotometerMeasured, # pyright: ignore + DatasetLoader_MunsellColorsGlossySpectrofotometerMeasured, # pyright: ignore + DatasetLoader_MunsellColorsMattAOTFMeasured, # pyright: ignore + DatasetLoader_MunsellColorsMattSpectrofotometerMeasured, # pyright: ignore + MatFileMetadata_KuopioUniversity, + read_sds_from_mat_file_KuopioUniversity, ) __author__ = "Colour Developers" diff --git a/colour_datasets/loaders/tests/test_luo1997.py b/colour_datasets/loaders/tests/test_luo1997.py index 4362ff4..a1c20af 100644 --- a/colour_datasets/loaders/tests/test_luo1997.py +++ b/colour_datasets/loaders/tests/test_luo1997.py @@ -1,9 +1,10 @@ # !/usr/bin/env python """Define the unit tests for the :mod:`colour_datasets.loaders.luo1997` module.""" -import numpy as np import unittest +import numpy as np + from colour_datasets.loaders import DatasetLoader_Luo1997, build_Luo1997 __author__ = "Colour Developers" diff --git a/colour_datasets/loaders/tests/test_luo1999.py b/colour_datasets/loaders/tests/test_luo1999.py index 69fd488..e6e1d98 100644 --- a/colour_datasets/loaders/tests/test_luo1999.py +++ b/colour_datasets/loaders/tests/test_luo1999.py @@ -1,9 +1,10 @@ # !/usr/bin/env python """Define the unit tests for the :mod:`colour_datasets.loaders.luo1999` module.""" -import numpy as np import unittest +import numpy as np + from colour_datasets.loaders import DatasetLoader_Luo1999, build_Luo1999 __author__ = "Colour Developers" diff --git a/colour_datasets/loaders/tests/test_solomotav2023.py b/colour_datasets/loaders/tests/test_solomotav2023.py new file mode 100644 index 0000000..23dd143 --- /dev/null +++ b/colour_datasets/loaders/tests/test_solomotav2023.py @@ -0,0 +1,81 @@ +# !/usr/bin/env python +"""Define the unit tests for the :mod:`colour_datasets.loaders.solomotav2023` module.""" + +import unittest + +from colour import SpectralShape + +from colour_datasets.loaders import ( + DatasetLoader_Solomotav2023, + build_Solomotav2023, +) + +__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__ = [ + "TestDatasetLoader_Solomotav2023", + "TestBuildSolomotav2023", +] + + +class TestDatasetLoader_Solomotav2023(unittest.TestCase): + """ + Define :class:`colour_datasets.loaders.solomotav2023.DatasetLoader_Solomotav2023` + class unit tests methods. + """ + + def test_required_attributes(self): + """Test the presence of required attributes.""" + + required_attributes = ("ID",) + + for attribute in required_attributes: + self.assertIn(attribute, dir(DatasetLoader_Solomotav2023)) + + def test_required_methods(self): + """Test the presence of required methods.""" + + required_methods = ("__init__", "load") + + for method in required_methods: + self.assertIn(method, dir(DatasetLoader_Solomotav2023)) + + def test_load(self): + """ + Test :func:`colour_datasets.loaders.solomotav2023.\ +DatasetLoader_Solomotav2023.load` method. + """ + + dataset = DatasetLoader_Solomotav2023() + self.assertEqual( + list(dataset.load().keys()), ["Estimated", "Ground Truth"] + ) + + self.assertEqual( + dataset.content["Estimated"]["Canon EOS 1D C"].shape, + SpectralShape(400, 700, 10), + ) + + +class TestBuildSolomotav2023(unittest.TestCase): + """ + Define :func:`colour_datasets.loaders.solomotav2023.build_Solomotav2023` + definition unit tests methods. + """ + + def test_build_Solomotav2023(self): + """ + Test :func:`colour_datasets.loaders.solomotav2023.build_Solomotav2023` + definition. + """ + + self.assertIs(build_Solomotav2023(), build_Solomotav2023()) + + +if __name__ == "__main__": + unittest.main() diff --git a/colour_datasets/loaders/tests/test_winquist2022.py b/colour_datasets/loaders/tests/test_winquist2022.py index f63a7ce..31dda28 100644 --- a/colour_datasets/loaders/tests/test_winquist2022.py +++ b/colour_datasets/loaders/tests/test_winquist2022.py @@ -4,9 +4,10 @@ module. """ -import numpy as np import unittest +import numpy as np + from colour_datasets.loaders import ( DatasetLoader_Winquist2022, build_Winquist2022, diff --git a/colour_datasets/loaders/xrite2016.py b/colour_datasets/loaders/xrite2016.py index 00ef512..bfd5582 100644 --- a/colour_datasets/loaders/xrite2016.py +++ b/colour_datasets/loaders/xrite2016.py @@ -19,9 +19,9 @@ from __future__ import annotations import codecs -import numpy as np import os +import numpy as np from colour import CCS_ILLUMINANTS, Lab_to_XYZ, XYZ_to_xyY from colour.characterisation import ColourChecker from colour.hints import Dict diff --git a/colour_datasets/loaders/zhao2009.py b/colour_datasets/loaders/zhao2009.py index e1fd1c1..241b075 100644 --- a/colour_datasets/loaders/zhao2009.py +++ b/colour_datasets/loaders/zhao2009.py @@ -17,9 +17,9 @@ from __future__ import annotations -import numpy as np import os +import numpy as np from colour.characterisation import RGB_CameraSensitivities from colour.hints import Dict diff --git a/colour_datasets/records/__init__.py b/colour_datasets/records/__init__.py index d321c97..5d2a283 100644 --- a/colour_datasets/records/__init__.py +++ b/colour_datasets/records/__init__.py @@ -33,8 +33,7 @@ def datasets() -> Community: Examples -------- - # Doctests skip for Python 2.x compatibility. - >>> datasets()["3245883"].title # doctest: +SKIP + >>> datasets()["3245883"].title 'Camera Spectral Sensitivity Database - Jiang et al. (2013)' """ diff --git a/colour_datasets/records/tests/test_configuration.py b/colour_datasets/records/tests/test_configuration.py index a1e49d8..5aea6ed 100644 --- a/colour_datasets/records/tests/test_configuration.py +++ b/colour_datasets/records/tests/test_configuration.py @@ -5,7 +5,7 @@ import unittest -from colour_datasets.records import Configuration, use_sandbox, sandbox +from colour_datasets.records import Configuration, sandbox, use_sandbox __author__ = "Colour Developers" __copyright__ = "Copyright 2019 Colour Developers" diff --git a/colour_datasets/records/tests/test_zenodo.py b/colour_datasets/records/tests/test_zenodo.py index 1bf095f..8261dff 100644 --- a/colour_datasets/records/tests/test_zenodo.py +++ b/colour_datasets/records/tests/test_zenodo.py @@ -4,10 +4,10 @@ """ import os -import unittest import textwrap +import unittest -from colour_datasets.records import Configuration, Record, Community +from colour_datasets.records import Community, Configuration, Record from colour_datasets.utilities import json_open __author__ = "Colour Developers" @@ -108,7 +108,9 @@ def test_title(self): ) def test__init__(self): - """Test :func:`colour_datasets.records.zenodo.Record.__init__` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Record.__init__` method. + """ record = Record(self._data, self._configuration) @@ -118,7 +120,9 @@ def test__init__(self): ) def test__str__(self): - """Test :func:`colour_datasets.records.zenodo.Record.__str__` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Record.__str__` method. + """ self.assertEqual( str(self._record), @@ -129,10 +133,10 @@ def test__str__(self): Record ID : 3245883 Authors : Jiang, Jun; Liu, Dengyu; Gu, Jinwei; Süsstrunk, Sabine -License : CC-BY-NC-SA-4.0 +License : cc-by-nc-sa-4.0 DOI : 10.5281/zenodo.3245883 Publication Date : 2019-06-14 -URL : https://zenodo.org/record/3245883 +URL : https://zenodo.org/records/3245883 Description ----------- @@ -154,17 +158,18 @@ def test__str__(self): Files ----- -- camlist&equipment.txt : https://zenodo.org/api/files/\ -a9c418ed-c354-4a90-abc7-5f88c89de741/camlist%26equipment.txt -- camspec_database.txt : https://zenodo.org/api/files/\ -a9c418ed-c354-4a90-abc7-5f88c89de741/camspec_database.txt -- urls.txt : https://zenodo.org/api/files/\ -a9c418ed-c354-4a90-abc7-5f88c89de741/urls.txt""" +- camlist&equipment.txt : https://zenodo.org/api/records/3245883/files/\ +camlist&equipment.txt +- camspec_database.txt : https://zenodo.org/api/records/3245883/files/\ +camspec_database.txt +- urls.txt : https://zenodo.org/api/records/3245883/files/urls.txt""" )[1:], ) def test__repr__(self): - """Test :func:`colour_datasets.records.zenodo.Record.__repr__` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Record.__repr__` method. + """ self.assertIsInstance( eval( # noqa: PGH001, S307 @@ -219,12 +224,9 @@ def setUp(self): """Initialise the common tests attributes.""" community_data = json_open( - "https://zenodo.org/api/communities/colour-science-datasets" - ) - records_data = json_open( - "https://zenodo.org/api/records/?q=communities:" - "colour-science-datasets-tests" + "https://zenodo.org/api/communities/colour-science-datasets-tests" ) + records_data = json_open(community_data["links"]["records"]) self._data = { "community": community_data, @@ -275,7 +277,9 @@ def test_configuration(self): self.assertEqual(self._community.configuration, self._configuration) def test_data(self): - """Test :func:colour_datasets.records.zenodo.Community.data` property.""" + """ + Test :func:colour_datasets.records.zenodo.Community.data` property. + """ self.assertEqual(self._community.data, self._data) @@ -290,12 +294,16 @@ def test_repository(self): ) def test_records(self): - """Test :func:colour_datasets.records.zenodo.Community.records` property.""" + """ + Test :func:colour_datasets.records.zenodo.Community.records` property. + """ self.assertIn("3245883", list(self._community.records)) def test__init__(self): - """Test :func:`colour_datasets.records.zenodo.Community.__init__` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Community.__init__` method. + """ community = Community(self._data, self._configuration) @@ -305,7 +313,9 @@ def test__init__(self): ) def test__str__(self): - """Test :func:`colour_datasets.records.zenodo.Community.__str__` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Community.__str__` method. + """ self._community.remove() @@ -318,7 +328,7 @@ def test__str__(self): Datasets : 4 Synced : 0 -URL : https://zenodo.org/communities/colour-science-datasets/ +URL : https://zenodo.org/communities/colour-science-datasets-tests Datasets -------- @@ -332,7 +342,9 @@ def test__str__(self): ) def test__repr__(self): - """Test :func:`colour_datasets.records.zenodo.Community.__repr__` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Community.__repr__` method. + """ self.assertIsInstance( eval( # noqa: PGH001, S307 @@ -372,7 +384,9 @@ def test__len__(self): self.assertEqual(len(self._community), len(self._community.records)) def test_from_id(self): - """Test :func:`colour_datasets.records.zenodo.Community.from_id` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Community.from_id` method. + """ community = Community.from_id("colour-science-datasets") @@ -383,7 +397,9 @@ def test_from_id(self): ) def test_synced(self): - """Test :func:`colour_datasets.records.zenodo.Community.synced` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Community.synced` method. + """ self._community.pull() self.assertTrue(self._community.synced()) @@ -391,14 +407,18 @@ def test_synced(self): self.assertFalse(self._community.synced()) def test_pull(self): - """Test :func:`colour_datasets.records.zenodo.Community.pull` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Community.pull` method. + """ self._community.remove() self._community.pull() self.assertTrue(self._community.synced()) def test_remove(self): - """Test :func:`colour_datasets.records.zenodo.Community.remove` method.""" + """ + Test :func:`colour_datasets.records.zenodo.Community.remove` method. + """ self._community.pull() self._community.remove() diff --git a/colour_datasets/records/zenodo.py b/colour_datasets/records/zenodo.py index 0eaad9b..507575b 100644 --- a/colour_datasets/records/zenodo.py +++ b/colour_datasets/records/zenodo.py @@ -14,7 +14,6 @@ import json import os import shutil -import setuptools.archive_util import stat import tempfile import textwrap @@ -24,6 +23,7 @@ from html.parser import HTMLParser from pprint import pformat +import setuptools.archive_util from colour.hints import ( Any, Callable, @@ -33,8 +33,8 @@ ) from colour.utilities import optional, warning -from colour_datasets.utilities import url_download, json_open from colour_datasets.records import Configuration +from colour_datasets.utilities import json_open, url_download __author__ = "Colour Developers" __copyright__ = "Copyright 2019 Colour Developers" @@ -82,11 +82,9 @@ class Record: Examples -------- >>> record = Record(json_open("https://zenodo.org/api/records/3245883")) - - # Doctests skip for Python 2.x compatibility. - >>> record.id # doctest: +SKIP + >>> record.id '3245883' - >>> record.title # doctest: +SKIP + >>> record.title 'Camera Spectral Sensitivity Database - Jiang et al. (2013)' """ @@ -203,10 +201,11 @@ def strip_html(text: str) -> str: description = "\n".join( textwrap.wrap(strip_html(metadata["description"]), 79) ) + files = "\n".join( [ - f"- {file_data['key']} : {file_data['links']['self']}" - for file_data in sorted(files, key=lambda x: x["key"]) + f"- {file_data['filename']} : {file_data['links']['self']}" + for file_data in sorted(files, key=lambda x: x["filename"]) ] ) @@ -220,7 +219,7 @@ def strip_html(text: str) -> str: f'License : {metadata["license"]["id"]}', f'DOI : {metadata["doi"]}', f'Publication Date : {metadata["publication_date"]}', - f'URL : {self._data["links"]["html"]}\n', + f'URL : {self._data["links"]["self_html"]}\n', "Description", "-----------", "", @@ -247,10 +246,7 @@ def __repr__(self) -> str: Examples -------- >>> data = json_open("https://zenodo.org/api/records/3245883") - - # Doctests skip for Python 2.x compatibility. >>> print("\\n".join(repr(Record(data)).splitlines()[:4])) - ... # doctest: +SKIP Record( {'conceptdoi': '10.5281/zenodo.3245882', 'conceptrecid': '3245882', @@ -298,9 +294,7 @@ def from_id( Examples -------- - # Doctests skip for Python 2.x compatibility. >>> Record.from_id("3245883").title - ... # doctest: +SKIP 'Camera Spectral Sensitivity Database - Jiang et al. (2013)' """ @@ -394,11 +388,11 @@ def pull(self, use_urls_txt_file: bool = True, retries: int = 3): # given by the content of :attr:`URLS_TXT_FILE` attribute file. urls_txt = None for file_data in self.data["files"]: - if file_data["key"] == self._configuration.urls_txt_file: + if file_data["filename"] == self._configuration.urls_txt_file: urls_txt = file_data break - def urls_download(urls: Dict): + def urls_download(urls: Dict, is_content_url=False): """Download given urls.""" for url, md5 in urls.items(): @@ -408,6 +402,9 @@ def urls_download(urls: Dict): url.split("/")[-1] ), ) + url = ( # noqa: PLW2901 + f"{url}/content" if is_content_url else url + ) url_download(url, filename, md5.split(":")[-1], retries) try: @@ -415,7 +412,7 @@ def urls_download(urls: Dict): urls = {} urls_txt_file = tempfile.NamedTemporaryFile(delete=False).name url_download( - urls_txt["links"]["self"], + urls_txt["links"]["download"], urls_txt_file, urls_txt["checksum"].split(":")[-1], retries, @@ -448,14 +445,19 @@ def urls_download(urls: Dict): urls = {} for file_data in self.data["files"]: - if file_data["key"] == self._configuration.urls_txt_file: + if file_data["filename"] == self._configuration.urls_txt_file: continue - urls[file_data["links"]["self"]] = file_data["checksum"].split( - ":" - )[-1] + # TODO: Remove the following space escaping: The new Zenodo API + # is not quoting filenames properly thus we are temporarily + # escaping spaces for now. + # https://github.com/colour-science/colour-datasets/issues/ + # 36#issuecomment-1773464695 + url = file_data["links"]["self"].replace(" ", "%20") + + urls[url] = file_data["checksum"].split(":")[-1] - urls_download(urls) + urls_download(urls, is_content_url=True) deflate_directory = os.path.join( self.repository, self._configuration.deflate_directory @@ -548,19 +550,14 @@ class Community(Mapping): >>> community_data = json_open( ... "https://zenodo.org/api/communities/colour-science-datasets" ... ) - >>> records_data = json_open( - ... "https://zenodo.org/api/records/?q=communities:" - ... "colour-science-datasets" - ... ) + >>> records_data = json_open(community_data["links"]["records"]) >>> community = Community( ... { ... "community": community_data, ... "records": records_data, ... } ... ) - - # Doctests skip for Python 2.x compatibility. - >>> community["3245883"].title # doctest: +SKIP + >>> community["3245883"].title 'Camera Spectral Sensitivity Database - Jiang et al. (2013)' """ @@ -649,7 +646,7 @@ def __str__(self) -> str: Datasets : ... Synced : ... URL : https://zenodo.org/communities/\ -colour-science-datasets-tests/ +colour-science-datasets-tests """ datasets = "\n".join( @@ -673,7 +670,7 @@ def __str__(self) -> str: "", f"Datasets : {len(self)}", f"Synced : {synced}", - f'URL : {self._data["community"]["links"]["html"]}', + f'URL : {self._data["community"]["links"]["self_html"]}', "", "Datasets", "--------", @@ -696,14 +693,11 @@ def __repr__(self) -> str: Examples -------- >>> community = Community.from_id("colour-science-datasets-tests") - - # Doctests skip for Python 2.x compatibility. >>> print("\\n".join(repr(community).splitlines()[:4])) - ... # doctest: +SKIP Community( - {'community': {'created': '2019-06-09T10:45:47.999975+00:00', - 'curation_policy': '', - 'description': '', + {'community': {'access': {'member_policy': 'open', + 'record_policy': 'open', + 'review_policy': 'open', """ data = "\n".join( @@ -737,9 +731,7 @@ def __getitem__(self, item: str | Any) -> Any: Examples -------- >>> community = Community.from_id("colour-science-datasets-tests") - - # Doctests skip for Python 2.x compatibility. - >>> community["3245883"].title # doctest: +SKIP + >>> community["3245883"].title 'Camera Spectral Sensitivity Database - Jiang et al. (2013)' """ @@ -756,7 +748,6 @@ def __iter__(self) -> Generator: Examples -------- - # Doctests skip for Python 2.x compatibility. >>> for record in Community.from_id("colour-science-datasets-tests"): ... print(record) # doctest: +SKIP ... @@ -811,9 +802,7 @@ def from_id( Examples -------- >>> community = Community.from_id("colour-science-datasets-tests") - - # Doctests skip for Python 2.x compatibility. - >>> community["3245883"].title # doctest: +SKIP + >>> community["3245883"].title 'Camera Spectral Sensitivity Database - Jiang et al. (2013)' """ @@ -828,13 +817,6 @@ def from_id( community_url = ( f"{configuration.api_url}/communities/{configuration.community}" ) - # NOTE: Retrieving 512 datasets at most. This should cover needs for - # the foreseeable future. There is likely an undocumented hard limit on - # "Zenodo" server side. - records_url = ( - f"{configuration.api_url}/records/" - f"?q=communities:{configuration.community}&size=512" - ) community_json_filename = os.path.join( configuration.repository, @@ -846,7 +828,9 @@ def from_id( try: community_data = json_open(community_url, retries) - records_data = json_open(records_url, retries) + records_data = json_open( + community_data["links"]["records"], retries + ) for key, value in { community_json_filename: community_data, diff --git a/colour_datasets/utilities/common.py b/colour_datasets/utilities/common.py index d72ea11..2f1a322 100644 --- a/colour_datasets/utilities/common.py +++ b/colour_datasets/utilities/common.py @@ -12,15 +12,15 @@ import hashlib import json import os -import setuptools.archive_util import shutil import sys import urllib.error import urllib.request -from tqdm import tqdm -from cachetools import cached, TTLCache +import setuptools.archive_util +from cachetools import TTLCache, cached from colour.hints import Any, Callable, Dict +from tqdm import tqdm __author__ = "Colour Developers" __copyright__ = "Copyright 2019 Colour Developers" @@ -159,7 +159,7 @@ def url_download( unit="B", unit_scale=True, miniters=1, - desc=f"Downloading \"{url.split('/')[-1]}\" file", + desc=f'Downloading "{url}" url', ) as progress: urllib.request.urlretrieve( # noqa: S310 url, @@ -213,7 +213,6 @@ def json_open(url: str, retries: int = 3) -> Dict: Examples -------- - # Doctests skip for Python 2.x compatibility. >>> json_open("https://zenodo.org/api/records/3245883") ... # doctest: +SKIP '{"conceptdoi":"10.5281/zenodo.3245882"' diff --git a/colour_datasets/utilities/spreadsheet.py b/colour_datasets/utilities/spreadsheet.py index da7237a..7f75f1e 100644 --- a/colour_datasets/utilities/spreadsheet.py +++ b/colour_datasets/utilities/spreadsheet.py @@ -13,8 +13,8 @@ from __future__ import annotations import re -import xlrd +import xlrd from colour.hints import Dict, List from colour.utilities import CanonicalMapping, attest @@ -142,8 +142,7 @@ def index_to_row(index: int) -> str: Examples -------- - # Doctests skip for Python 2.x compatibility. - >>> index_to_row(0) # doctest: +SKIP + >>> index_to_row(0) '1' """ @@ -189,8 +188,7 @@ def index_to_column(index: int) -> str: Examples -------- - # Doctests skip for Python 2.x compatibility. - >>> index_to_column(0) # doctest: +SKIP + >>> index_to_column(0) 'A' """ diff --git a/colour_datasets/utilities/tests/test_common.py b/colour_datasets/utilities/tests/test_common.py index cbebfb4..b5eda02 100644 --- a/colour_datasets/utilities/tests/test_common.py +++ b/colour_datasets/utilities/tests/test_common.py @@ -2,16 +2,16 @@ """Define the unit tests for the :mod:`colour_datasets.utilities.common` module.""" import os -import unittest -import tempfile import shutil +import tempfile +import unittest from colour_datasets.loaders import build_Labsphere2019 from colour_datasets.utilities import ( hash_md5, - url_download, json_open, unpack_gzipfile, + url_download, ) __author__ = "Colour Developers" diff --git a/colour_datasets/utilities/tests/test_spreadsheet.py b/colour_datasets/utilities/tests/test_spreadsheet.py index a1b7c0a..f3ba971 100644 --- a/colour_datasets/utilities/tests/test_spreadsheet.py +++ b/colour_datasets/utilities/tests/test_spreadsheet.py @@ -5,14 +5,15 @@ import os import unittest + import xlrd from colour_datasets.utilities import ( - row_to_index, - index_to_row, + cell_range_values, column_to_index, index_to_column, - cell_range_values, + index_to_row, + row_to_index, ) __author__ = "Colour Developers" diff --git a/docs/colour_datasets.loaders.rst b/docs/colour_datasets.loaders.rst index 1db7c53..095af5a 100644 --- a/docs/colour_datasets.loaders.rst +++ b/docs/colour_datasets.loaders.rst @@ -65,6 +65,20 @@ Agfa IT8.7/2 Set - Marszalec (n.d.) build_AgfaIT872Set +Camera Dataset - Solomatov and Akkaynak (2023) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. autosummary:: + :toctree: generated/ + :template: class.rst + + DatasetLoader_Solomotav2023 + +.. autosummary:: + :toctree: generated/ + + build_Solomotav2023 + Camera Spectral Sensitivity Database - Jiang et al. (2013) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/conf.py b/docs/conf.py index 55c62db..f7823a4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -30,11 +30,12 @@ ] intersphinx_mapping = { - "python": ("https://docs.python.org/3.11", None), + "python": ("https://docs.python.org/3/", None), + "colour-science": ("https://colour.readthedocs.io/en/stable/", None), "matplotlib": ("https://matplotlib.org/stable", None), "numpy": ("https://numpy.org/doc/stable", None), - "pandas": ("https://pandas.pydata.org/pandas-docs/dev", None), - "scipy": ("https://docs.scipy.org/doc/scipy-1.8.0/", None), + "pandas": ("https://pandas.pydata.org/pandas-docs/stable", None), + "scipy": ("https://docs.scipy.org/doc/scipy/", None), } autodoc_member_order = "bysource" diff --git a/docs/requirements.txt b/docs/requirements.txt index a533574..d099ed9 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,46 +1,46 @@ accessible-pygments==0.0.4 ; python_version >= "3.9" and python_version < "3.12" alabaster==0.7.13 ; python_version >= "3.9" and python_version < "3.12" -babel==2.12.1 ; python_version >= "3.9" and python_version < "3.12" +babel==2.13.0 ; python_version >= "3.9" and python_version < "3.12" beautifulsoup4==4.12.2 ; python_version >= "3.9" and python_version < "3.12" biblib-simple==0.1.2 ; python_version >= "3.9" and python_version < "3.12" cachetools==5.3.1 ; python_version >= "3.9" and python_version < "3.12" certifi==2023.7.22 ; python_version >= "3.9" and python_version < "3.12" -charset-normalizer==3.2.0 ; python_version >= "3.9" and python_version < "3.12" +charset-normalizer==3.3.0 ; python_version >= "3.9" and python_version < "3.12" colorama==0.4.6 ; python_version >= "3.9" and python_version < "3.12" and (platform_system == "Windows" or sys_platform == "win32") colour-science==0.4.3 ; python_version >= "3.9" and python_version < "3.12" -docutils==0.17.1 ; python_version >= "3.9" and python_version < "3.12" +docutils==0.20.1 ; python_version >= "3.9" and python_version < "3.12" idna==3.4 ; python_version >= "3.9" and python_version < "3.12" -imageio==2.31.2 ; python_version >= "3.9" and python_version < "3.12" +imageio==2.31.5 ; python_version >= "3.9" and python_version < "3.12" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "3.12" importlib-metadata==6.8.0 ; python_version >= "3.9" and python_version < "3.10" jinja2==3.1.2 ; python_version >= "3.9" and python_version < "3.12" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "3.12" markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "3.12" -numpy==1.25.2 ; python_version >= "3.9" and python_version < "3.12" -opencv-python==4.8.0.76 ; python_version >= "3.9" and python_version < "3.12" -packaging==23.1 ; python_version >= "3.9" and python_version < "3.12" -pillow==10.0.0 ; python_version >= "3.9" and python_version < "3.12" +numpy==1.26.1 ; python_version >= "3.9" and python_version < "3.12" +opencv-python==4.8.1.78 ; python_version >= "3.9" and python_version < "3.12" +packaging==23.2 ; python_version >= "3.9" and python_version < "3.12" +pillow==10.1.0 ; python_version >= "3.9" and python_version < "3.12" pybtex-docutils==1.0.3 ; python_version >= "3.9" and python_version < "3.12" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "3.12" -pydata-sphinx-theme==0.13.3 ; python_version >= "3.9" and python_version < "3.12" +pydata-sphinx-theme==0.14.1 ; python_version >= "3.9" and python_version < "3.12" pygments==2.16.1 ; python_version >= "3.9" and python_version < "3.12" pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "3.12" requests==2.31.0 ; python_version >= "3.9" and python_version < "3.12" restructuredtext-lint==1.4.0 ; python_version >= "3.9" and python_version < "3.12" -scipy==1.11.2 ; python_version >= "3.9" and python_version < "3.12" +scipy==1.11.3 ; python_version >= "3.9" and python_version < "3.12" six==1.16.0 ; python_version >= "3.9" and python_version < "3.12" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "3.12" -soupsieve==2.4.1 ; python_version >= "3.9" and python_version < "3.12" -sphinx==4.5.0 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "3.12" +soupsieve==2.5 ; python_version >= "3.9" and python_version < "3.12" +sphinx==7.2.6 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-applehelp==1.0.7 ; python_version >= "3.9" and python_version < "3.12" sphinxcontrib-bibtex==2.6.1 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-devhelp==1.0.5 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-htmlhelp==2.0.4 ; python_version >= "3.9" and python_version < "3.12" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-qthelp==1.0.6 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-serializinghtml==1.1.9 ; python_version >= "3.9" and python_version < "3.12" tqdm==4.66.1 ; python_version >= "3.9" and python_version < "3.12" -typing-extensions==4.7.1 ; python_version >= "3.9" and python_version < "3.12" -urllib3==2.0.4 ; python_version >= "3.9" and python_version < "3.12" +typing-extensions==4.8.0 ; python_version >= "3.9" and python_version < "3.12" +urllib3==2.0.7 ; python_version >= "3.9" and python_version < "3.12" xlrd==1.2.0 ; python_version >= "3.9" and python_version < "3.12" -zipp==3.16.2 ; python_version >= "3.9" and python_version < "3.10" +zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.10" diff --git a/pyproject.toml b/pyproject.toml index 5b99e80..02241ee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "colour-datasets" -version = "0.2.2" +version = "0.2.3" description = "Colour science datasets for use with Colour" license = "BSD-3-Clause" authors = [ "Colour Developers " ] @@ -75,7 +75,7 @@ twine = "*" biblib-simple = "*" pydata-sphinx-theme = "*" restructuredtext-lint = "*" -sphinx = ">= 4, < 5" +sphinx = "*" sphinxcontrib-bibtex = "*" [tool.black] @@ -91,6 +91,16 @@ exclude = ''' [tool.flynt] line_length=999 +[tool.isort] +ensure_newline_before_comments = true +force_grid_wrap = 0 +include_trailing_comma = true +line_length = 88 +multi_line_output = 3 +skip_glob = ["colour_datasets/**/__init__.py"] +split_on_trailing_comma = true +use_parentheses = true + [tool.pyright] reportMissingImports = false reportMissingModuleSource = false diff --git a/requirements.txt b/requirements.txt index cf5a179..2cac26b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,134 +1,135 @@ accessible-pygments==0.0.4 ; python_version >= "3.9" and python_version < "3.12" alabaster==0.7.13 ; python_version >= "3.9" and python_version < "3.12" -anyio==3.7.1 ; python_version >= "3.9" and python_version < "3.12" +anyio==4.0.0 ; python_version >= "3.9" and python_version < "3.12" appnope==0.1.3 ; python_version >= "3.9" and python_version < "3.12" and (platform_system == "Darwin" or sys_platform == "darwin") argon2-cffi-bindings==21.2.0 ; python_version >= "3.9" and python_version < "3.12" argon2-cffi==23.1.0 ; python_version >= "3.9" and python_version < "3.12" -arrow==1.2.3 ; python_version >= "3.9" and python_version < "3.12" +arrow==1.3.0 ; python_version >= "3.9" and python_version < "3.12" astor==0.8.1 ; python_version >= "3.9" and python_version < "3.12" -asttokens==2.2.1 ; python_version >= "3.9" and python_version < "3.12" +asttokens==2.4.0 ; python_version >= "3.9" and python_version < "3.12" async-lru==2.0.4 ; python_version >= "3.9" and python_version < "3.12" attrs==23.1.0 ; python_version >= "3.9" and python_version < "3.12" -babel==2.12.1 ; python_version >= "3.9" and python_version < "3.12" +babel==2.13.0 ; python_version >= "3.9" and python_version < "3.12" backcall==0.2.0 ; python_version >= "3.9" and python_version < "3.12" beautifulsoup4==4.12.2 ; python_version >= "3.9" and python_version < "3.12" biblib-simple==0.1.2 ; python_version >= "3.9" and python_version < "3.12" -black==23.7.0 ; python_version >= "3.9" and python_version < "3.12" +black==23.10.0 ; python_version >= "3.9" and python_version < "3.12" blackdoc==0.3.8 ; python_version >= "3.9" and python_version < "3.12" -bleach==6.0.0 ; python_version >= "3.9" and python_version < "3.12" +bleach==6.1.0 ; python_version >= "3.9" and python_version < "3.12" cachetools==5.3.1 ; python_version >= "3.9" and python_version < "3.12" certifi==2023.7.22 ; python_version >= "3.9" and python_version < "3.12" -cffi==1.15.1 ; python_version >= "3.9" and python_version < "3.12" +cffi==1.16.0 ; python_version >= "3.9" and python_version < "3.12" cfgv==3.4.0 ; python_version >= "3.9" and python_version < "3.12" -charset-normalizer==3.2.0 ; python_version >= "3.9" and python_version < "3.12" +charset-normalizer==3.3.0 ; python_version >= "3.9" and python_version < "3.12" click==8.1.7 ; python_version >= "3.9" and python_version < "3.12" colorama==0.4.6 ; python_version >= "3.9" and python_version < "3.12" and (platform_system == "Windows" or sys_platform == "win32") colour-science==0.4.3 ; python_version >= "3.9" and python_version < "3.12" comm==0.1.4 ; python_version >= "3.9" and python_version < "3.12" -coverage==6.5.0 ; python_version >= "3.9" and python_version < "3.12" -coverage[toml]==6.5.0 ; python_version >= "3.9" and python_version < "3.12" -coveralls==3.3.1 ; python_version >= "3.9" and python_version < "3.12" -cryptography==41.0.3 ; python_version >= "3.9" and python_version < "3.12" and sys_platform == "linux" -debugpy==1.6.7.post1 ; python_version >= "3.9" and python_version < "3.12" +coverage==7.3.2 ; python_version >= "3.9" and python_version < "3.12" +coverage[toml]==7.3.2 ; python_version >= "3.9" and python_version < "3.12" +coveralls==1.8.0 ; python_version >= "3.9" and python_version < "3.12" +cryptography==41.0.4 ; python_version >= "3.9" and python_version < "3.12" and sys_platform == "linux" +debugpy==1.8.0 ; python_version >= "3.9" and python_version < "3.12" decorator==5.1.1 ; python_version >= "3.9" and python_version < "3.12" defusedxml==0.7.1 ; python_version >= "3.9" and python_version < "3.12" distlib==0.3.7 ; python_version >= "3.9" and python_version < "3.12" docopt==0.6.2 ; python_version >= "3.9" and python_version < "3.12" -docutils==0.17.1 ; python_version >= "3.9" and python_version < "3.12" +docutils==0.20.1 ; python_version >= "3.9" and python_version < "3.12" exceptiongroup==1.1.3 ; python_version >= "3.9" and python_version < "3.11" execnet==2.0.2 ; python_version >= "3.9" and python_version < "3.12" -executing==1.2.0 ; python_version >= "3.9" and python_version < "3.12" -fastjsonschema==2.18.0 ; python_version >= "3.9" and python_version < "3.12" -filelock==3.12.3 ; python_version >= "3.9" and python_version < "3.12" +executing==2.0.0 ; python_version >= "3.9" and python_version < "3.12" +fastjsonschema==2.18.1 ; python_version >= "3.9" and python_version < "3.12" +filelock==3.12.4 ; python_version >= "3.9" and python_version < "3.12" flynt==1.0.1 ; python_version >= "3.9" and python_version < "3.12" fqdn==1.5.1 ; python_version >= "3.9" and python_version < "3.12" -identify==2.5.27 ; python_version >= "3.9" and python_version < "3.12" +identify==2.5.30 ; python_version >= "3.9" and python_version < "3.12" idna==3.4 ; python_version >= "3.9" and python_version < "3.12" -imageio==2.31.2 ; python_version >= "3.9" and python_version < "3.12" +imageio==2.31.5 ; python_version >= "3.9" and python_version < "3.12" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "3.12" importlib-metadata==6.8.0 ; python_version >= "3.9" and python_version < "3.12" iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "3.12" invoke==2.2.0 ; python_version >= "3.9" and python_version < "3.12" -ipykernel==6.25.1 ; python_version >= "3.9" and python_version < "3.12" +ipykernel==6.25.2 ; python_version >= "3.9" and python_version < "3.12" ipython-genutils==0.2.0 ; python_version >= "3.9" and python_version < "3.12" -ipython==8.14.0 ; python_version >= "3.9" and python_version < "3.12" -ipywidgets==8.1.0 ; python_version >= "3.9" and python_version < "3.12" +ipython==8.16.1 ; python_version >= "3.9" and python_version < "3.12" +ipywidgets==8.1.1 ; python_version >= "3.9" and python_version < "3.12" isoduration==20.11.0 ; python_version >= "3.9" and python_version < "3.12" jaraco-classes==3.3.0 ; python_version >= "3.9" and python_version < "3.12" -jedi==0.19.0 ; python_version >= "3.9" and python_version < "3.12" +jedi==0.19.1 ; python_version >= "3.9" and python_version < "3.12" jeepney==0.8.0 ; python_version >= "3.9" and python_version < "3.12" and sys_platform == "linux" jinja2==3.1.2 ; python_version >= "3.9" and python_version < "3.12" json5==0.9.14 ; python_version >= "3.9" and python_version < "3.12" jsonpointer==2.4 ; python_version >= "3.9" and python_version < "3.12" jsonschema-specifications==2023.7.1 ; python_version >= "3.9" and python_version < "3.12" -jsonschema==4.19.0 ; python_version >= "3.9" and python_version < "3.12" -jsonschema[format-nongpl]==4.19.0 ; python_version >= "3.9" and python_version < "3.12" -jupyter-client==8.3.1 ; python_version >= "3.9" and python_version < "3.12" +jsonschema==4.19.1 ; python_version >= "3.9" and python_version < "3.12" +jsonschema[format-nongpl]==4.19.1 ; python_version >= "3.9" and python_version < "3.12" +jupyter-client==8.4.0 ; python_version >= "3.9" and python_version < "3.12" jupyter-console==6.6.3 ; python_version >= "3.9" and python_version < "3.12" -jupyter-core==5.3.1 ; python_version >= "3.9" and python_version < "3.12" -jupyter-events==0.7.0 ; python_version >= "3.9" and python_version < "3.12" +jupyter-core==5.4.0 ; python_version >= "3.9" and python_version < "3.12" +jupyter-events==0.8.0 ; python_version >= "3.9" and python_version < "3.12" jupyter-lsp==2.2.0 ; python_version >= "3.9" and python_version < "3.12" jupyter-server-terminals==0.4.4 ; python_version >= "3.9" and python_version < "3.12" -jupyter-server==2.7.2 ; python_version >= "3.9" and python_version < "3.12" +jupyter-server==2.8.0 ; python_version >= "3.9" and python_version < "3.12" jupyter==1.0.0 ; python_version >= "3.9" and python_version < "3.12" jupyterlab-pygments==0.2.2 ; python_version >= "3.9" and python_version < "3.12" -jupyterlab-server==2.24.0 ; python_version >= "3.9" and python_version < "3.12" -jupyterlab-widgets==3.0.8 ; python_version >= "3.9" and python_version < "3.12" -jupyterlab==4.0.5 ; python_version >= "3.9" and python_version < "3.12" +jupyterlab-server==2.25.0 ; python_version >= "3.9" and python_version < "3.12" +jupyterlab-widgets==3.0.9 ; python_version >= "3.9" and python_version < "3.12" +jupyterlab==4.0.7 ; python_version >= "3.9" and python_version < "3.12" keyring==24.2.0 ; python_version >= "3.9" and python_version < "3.12" latexcodec==2.0.1 ; python_version >= "3.9" and python_version < "3.12" markdown-it-py==3.0.0 ; python_version >= "3.9" and python_version < "3.12" markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "3.12" matplotlib-inline==0.1.6 ; python_version >= "3.9" and python_version < "3.12" mdurl==0.1.2 ; python_version >= "3.9" and python_version < "3.12" -mistune==3.0.1 ; python_version >= "3.9" and python_version < "3.12" +mistune==3.0.2 ; python_version >= "3.9" and python_version < "3.12" more-itertools==10.1.0 ; python_version >= "3.9" and python_version < "3.12" mypy-extensions==1.0.0 ; python_version >= "3.9" and python_version < "3.12" nbclient==0.8.0 ; python_version >= "3.9" and python_version < "3.12" -nbconvert==7.8.0 ; python_version >= "3.9" and python_version < "3.12" +nbconvert==7.9.2 ; python_version >= "3.9" and python_version < "3.12" nbformat==5.9.2 ; python_version >= "3.9" and python_version < "3.12" -nest-asyncio==1.5.7 ; python_version >= "3.9" and python_version < "3.12" +nest-asyncio==1.5.8 ; python_version >= "3.9" and python_version < "3.12" +nh3==0.2.14 ; python_version >= "3.9" and python_version < "3.12" nodeenv==1.8.0 ; python_version >= "3.9" and python_version < "3.12" notebook-shim==0.2.3 ; python_version >= "3.9" and python_version < "3.12" -notebook==7.0.2 ; python_version >= "3.9" and python_version < "3.12" -numpy==1.25.2 ; python_version >= "3.9" and python_version < "3.12" -opencv-python==4.8.0.76 ; python_version >= "3.9" and python_version < "3.12" +notebook==7.0.6 ; python_version >= "3.9" and python_version < "3.12" +numpy==1.26.1 ; python_version >= "3.9" and python_version < "3.12" +opencv-python==4.8.1.78 ; python_version >= "3.9" and python_version < "3.12" overrides==7.4.0 ; python_version >= "3.9" and python_version < "3.12" -packaging==23.1 ; python_version >= "3.9" and python_version < "3.12" +packaging==23.2 ; python_version >= "3.9" and python_version < "3.12" pandocfilters==1.5.0 ; python_version >= "3.9" and python_version < "3.12" parso==0.8.3 ; python_version >= "3.9" and python_version < "3.12" pathspec==0.11.2 ; python_version >= "3.9" and python_version < "3.12" pexpect==4.8.0 ; python_version >= "3.9" and python_version < "3.12" and sys_platform != "win32" pickleshare==0.7.5 ; python_version >= "3.9" and python_version < "3.12" -pillow==10.0.0 ; python_version >= "3.9" and python_version < "3.12" +pillow==10.1.0 ; python_version >= "3.9" and python_version < "3.12" pkginfo==1.9.6 ; python_version >= "3.9" and python_version < "3.12" -platformdirs==3.10.0 ; python_version >= "3.9" and python_version < "3.12" +platformdirs==3.11.0 ; python_version >= "3.9" and python_version < "3.12" pluggy==1.3.0 ; python_version >= "3.9" and python_version < "3.12" -pre-commit==3.3.3 ; python_version >= "3.9" and python_version < "3.12" +pre-commit==3.5.0 ; python_version >= "3.9" and python_version < "3.12" prometheus-client==0.17.1 ; python_version >= "3.9" and python_version < "3.12" prompt-toolkit==3.0.39 ; python_version >= "3.9" and python_version < "3.12" -psutil==5.9.5 ; python_version >= "3.9" and python_version < "3.12" +psutil==5.9.6 ; python_version >= "3.9" and python_version < "3.12" ptyprocess==0.7.0 ; python_version >= "3.9" and python_version < "3.12" and (sys_platform != "win32" or os_name != "nt") pure-eval==0.2.2 ; python_version >= "3.9" and python_version < "3.12" pybtex-docutils==1.0.3 ; python_version >= "3.9" and python_version < "3.12" pybtex==0.24.0 ; python_version >= "3.9" and python_version < "3.12" pycparser==2.21 ; python_version >= "3.9" and python_version < "3.12" -pydata-sphinx-theme==0.13.3 ; python_version >= "3.9" and python_version < "3.12" +pydata-sphinx-theme==0.14.1 ; python_version >= "3.9" and python_version < "3.12" pygments==2.16.1 ; python_version >= "3.9" and python_version < "3.12" -pyright==1.1.324 ; python_version >= "3.9" and python_version < "3.12" +pyright==1.1.332 ; python_version >= "3.9" and python_version < "3.12" pytest-cov==4.1.0 ; python_version >= "3.9" and python_version < "3.12" pytest-xdist==3.3.1 ; python_version >= "3.9" and python_version < "3.12" -pytest==7.4.0 ; python_version >= "3.9" and python_version < "3.12" +pytest==7.4.2 ; python_version >= "3.9" and python_version < "3.12" python-dateutil==2.8.2 ; python_version >= "3.9" and python_version < "3.12" python-json-logger==2.0.7 ; python_version >= "3.9" and python_version < "3.12" pywin32-ctypes==0.2.2 ; python_version >= "3.9" and python_version < "3.12" and sys_platform == "win32" pywin32==306 ; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.9" and python_version < "3.12" -pywinpty==2.0.11 ; python_version >= "3.9" and python_version < "3.12" and os_name == "nt" +pywinpty==2.0.12 ; python_version >= "3.9" and python_version < "3.12" and os_name == "nt" pyyaml==6.0.1 ; python_version >= "3.9" and python_version < "3.12" pyzmq==25.1.1 ; python_version >= "3.9" and python_version < "3.12" -qtconsole==5.4.3 ; python_version >= "3.9" and python_version < "3.12" +qtconsole==5.4.4 ; python_version >= "3.9" and python_version < "3.12" qtpy==2.4.0 ; python_version >= "3.9" and python_version < "3.12" -readme-renderer==41.0 ; python_version >= "3.9" and python_version < "3.12" +readme-renderer==42.0 ; python_version >= "3.9" and python_version < "3.12" referencing==0.30.2 ; python_version >= "3.9" and python_version < "3.12" requests-toolbelt==1.0.0 ; python_version >= "3.9" and python_version < "3.12" requests==2.31.0 ; python_version >= "3.9" and python_version < "3.12" @@ -136,42 +137,43 @@ restructuredtext-lint==1.4.0 ; python_version >= "3.9" and python_version < "3.1 rfc3339-validator==0.1.4 ; python_version >= "3.9" and python_version < "3.12" rfc3986-validator==0.1.1 ; python_version >= "3.9" and python_version < "3.12" rfc3986==2.0.0 ; python_version >= "3.9" and python_version < "3.12" -rich==13.5.2 ; python_version >= "3.9" and python_version < "3.12" -rpds-py==0.10.0 ; python_version >= "3.9" and python_version < "3.12" -ruff==0.0.286 ; python_version >= "3.9" and python_version < "3.12" -scipy==1.11.2 ; python_version >= "3.9" and python_version < "3.12" +rich==13.6.0 ; python_version >= "3.9" and python_version < "3.12" +rpds-py==0.10.6 ; python_version >= "3.9" and python_version < "3.12" +ruff==0.1.1 ; python_version >= "3.9" and python_version < "3.12" +scipy==1.11.3 ; python_version >= "3.9" and python_version < "3.12" secretstorage==3.3.3 ; python_version >= "3.9" and python_version < "3.12" and sys_platform == "linux" send2trash==1.8.2 ; python_version >= "3.9" and python_version < "3.12" -setuptools==68.1.2 ; python_version >= "3.9" and python_version < "3.12" +setuptools==68.2.2 ; python_version >= "3.9" and python_version < "3.12" six==1.16.0 ; python_version >= "3.9" and python_version < "3.12" sniffio==1.3.0 ; python_version >= "3.9" and python_version < "3.12" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "3.12" -soupsieve==2.4.1 ; python_version >= "3.9" and python_version < "3.12" -sphinx==4.5.0 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.9" and python_version < "3.12" +soupsieve==2.5 ; python_version >= "3.9" and python_version < "3.12" +sphinx==7.2.6 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-applehelp==1.0.7 ; python_version >= "3.9" and python_version < "3.12" sphinxcontrib-bibtex==2.6.1 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-devhelp==1.0.5 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-htmlhelp==2.0.4 ; python_version >= "3.9" and python_version < "3.12" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.9" and python_version < "3.12" -sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.9" and python_version < "3.12" -stack-data==0.6.2 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-qthelp==1.0.6 ; python_version >= "3.9" and python_version < "3.12" +sphinxcontrib-serializinghtml==1.1.9 ; python_version >= "3.9" and python_version < "3.12" +stack-data==0.6.3 ; python_version >= "3.9" and python_version < "3.12" terminado==0.17.1 ; python_version >= "3.9" and python_version < "3.12" tinycss2==1.2.1 ; python_version >= "3.9" and python_version < "3.12" toml==0.10.2 ; python_version >= "3.9" and python_version < "3.12" tomli==2.0.1 ; python_version >= "3.9" and python_version < "3.12" tornado==6.3.3 ; python_version >= "3.9" and python_version < "3.12" tqdm==4.66.1 ; python_version >= "3.9" and python_version < "3.12" -traitlets==5.9.0 ; python_version >= "3.9" and python_version < "3.12" +traitlets==5.11.2 ; python_version >= "3.9" and python_version < "3.12" twine==4.0.2 ; python_version >= "3.9" and python_version < "3.12" -typing-extensions==4.7.1 ; python_version >= "3.9" and python_version < "3.12" +types-python-dateutil==2.8.19.14 ; python_version >= "3.9" and python_version < "3.12" +typing-extensions==4.8.0 ; python_version >= "3.9" and python_version < "3.12" uri-template==1.3.0 ; python_version >= "3.9" and python_version < "3.12" -urllib3==2.0.4 ; python_version >= "3.9" and python_version < "3.12" -virtualenv==20.24.3 ; python_version >= "3.9" and python_version < "3.12" -wcwidth==0.2.6 ; python_version >= "3.9" and python_version < "3.12" +urllib3==2.0.7 ; python_version >= "3.9" and python_version < "3.12" +virtualenv==20.24.5 ; python_version >= "3.9" and python_version < "3.12" +wcwidth==0.2.8 ; python_version >= "3.9" and python_version < "3.12" webcolors==1.13 ; python_version >= "3.9" and python_version < "3.12" webencodings==0.5.1 ; python_version >= "3.9" and python_version < "3.12" -websocket-client==1.6.2 ; python_version >= "3.9" and python_version < "3.12" -widgetsnbextension==4.0.8 ; python_version >= "3.9" and python_version < "3.12" +websocket-client==1.6.4 ; python_version >= "3.9" and python_version < "3.12" +widgetsnbextension==4.0.9 ; python_version >= "3.9" and python_version < "3.12" xlrd==1.2.0 ; python_version >= "3.9" and python_version < "3.12" -zipp==3.16.2 ; python_version >= "3.9" and python_version < "3.12" +zipp==3.17.0 ; python_version >= "3.9" and python_version < "3.12" diff --git a/tasks.py b/tasks.py index 9073053..2443121 100644 --- a/tasks.py +++ b/tasks.py @@ -5,23 +5,23 @@ from __future__ import annotations -import biblib.bib import contextlib import fnmatch +import inspect import os import re import uuid -import colour_datasets +import biblib.bib from colour.utilities import message_box -import inspect +import colour_datasets if not hasattr(inspect, "getargspec"): inspect.getargspec = inspect.getfullargspec # pyright: ignore -from invoke.tasks import task from invoke.context import Context +from invoke.tasks import task __author__ = "Colour Developers" __copyright__ = "Copyright 2019 Colour Developers"