From cd342fd203492fd6e981f705e237a1691b6101fd Mon Sep 17 00:00:00 2001 From: Andrea Albino Date: Mon, 19 Aug 2024 15:45:37 +0200 Subject: [PATCH 01/93] updated plugin structure --- MANIFEST.in | 1 + src/nomad_measurements/general/__init__.py | 15 +++++++++++++++ .../{__init__.py => general/schema.py} | 0 3 files changed, 16 insertions(+) create mode 100644 src/nomad_measurements/general/__init__.py rename src/nomad_measurements/{__init__.py => general/schema.py} (100%) diff --git a/MANIFEST.in b/MANIFEST.in index e69de29b..b5ccc2d3 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -0,0 +1 @@ +recursive-include * nomad_plugin.yaml diff --git a/src/nomad_measurements/general/__init__.py b/src/nomad_measurements/general/__init__.py new file mode 100644 index 00000000..7e990a5d --- /dev/null +++ b/src/nomad_measurements/general/__init__.py @@ -0,0 +1,15 @@ + +from nomad.config.models.plugins import SchemaPackageEntryPoint + +class GeneralSchemaPackageEntryPoint(SchemaPackageEntryPoint): + + def load(self): + from nomad_measurements.general.schema import m_package + + return m_package + + +general_schema = GeneralSchemaPackageEntryPoint( + name='GeneralSchema', + description='Schema package defined using the new plugin mechanism.', +) diff --git a/src/nomad_measurements/__init__.py b/src/nomad_measurements/general/schema.py similarity index 100% rename from src/nomad_measurements/__init__.py rename to src/nomad_measurements/general/schema.py From df6219bcb43337c2e6b43e78f2ed10017e7bbab6 Mon Sep 17 00:00:00 2001 From: Andrea Albino Date: Mon, 19 Aug 2024 16:01:02 +0200 Subject: [PATCH 02/93] added pynxtools dependency --- testing_hdf5.py | 0 tests/data/XRD-918-16_10.xrdml.h5 | Bin 0 -> 54716 bytes tests/xrd/TwoTheta_scan_powder.rasx | Bin 0 -> 34557 bytes tests/xrd/test_hdf5.py | 17 + uv.lock | 2460 +++++++++++++++++++++++++++ 5 files changed, 2477 insertions(+) create mode 100644 testing_hdf5.py create mode 100644 tests/data/XRD-918-16_10.xrdml.h5 create mode 100644 tests/xrd/TwoTheta_scan_powder.rasx create mode 100644 tests/xrd/test_hdf5.py create mode 100644 uv.lock diff --git a/testing_hdf5.py b/testing_hdf5.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/data/XRD-918-16_10.xrdml.h5 b/tests/data/XRD-918-16_10.xrdml.h5 new file mode 100644 index 0000000000000000000000000000000000000000..2ea9fa3ecf8b0fce24a9d678e061d4c88e31f9e8 GIT binary patch literal 54716 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 literal 0 HcmV?d00001 diff --git a/tests/xrd/TwoTheta_scan_powder.rasx b/tests/xrd/TwoTheta_scan_powder.rasx new file mode 100644 index 0000000000000000000000000000000000000000..1d94899691a391da031e4a1f40ab5ed698319a24 GIT binary patch literal 34557 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 literal 0 HcmV?d00001 diff --git a/tests/xrd/test_hdf5.py b/tests/xrd/test_hdf5.py new file mode 100644 index 00000000..807f9049 --- /dev/null +++ b/tests/xrd/test_hdf5.py @@ -0,0 +1,17 @@ +from fairmat_readers_xrd import read_rigaku_rasx +from nomad_measurements.utils import AttrDict + + +def test_hdf5_file_generation(): + # read the example file + data_dict = read_rigaku_rasx('./tests/xrd/TwoTheta_scan_powder.rasx') + data_obj = AttrDict(lambda: None, data_dict) + + print(data_obj.metadata.sds) + print(data_obj.metadat.sds) + print(data_obj['metadata']['sds']) + print(data_obj['metadat']['sds']) + + +if __name__ == '__main__': + test_hdf5_file_generation() diff --git a/uv.lock b/uv.lock new file mode 100644 index 00000000..5091de34 --- /dev/null +++ b/uv.lock @@ -0,0 +1,2460 @@ +version = 1 +requires-python = ">=3.9" +resolution-markers = [ + "python_full_version < '3.11' and platform_system == 'Windows'", + "python_full_version < '3.11' and platform_system != 'Windows'", + "python_full_version == '3.11.*'", + "python_full_version >= '3.12'", +] + +[[package]] +name = "aniso8601" +version = "9.0.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/72/be3db445b03944bfbb2b02b82d00cb2a2bcf96275c4543f14bf60fa79e12/aniso8601-9.0.1.tar.gz", hash = "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973", size = 47345 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/04/e97c12dc034791d7b504860acfcdd2963fa21ae61eaca1c9d31245f812c3/aniso8601-9.0.1-py2.py3-none-any.whl", hash = "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f", size = 52754 }, +] + +[[package]] +name = "anyio" +version = "4.6.2.post1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/09/45b9b7a6d4e45c6bcb5bf61d19e3ab87df68e0601fa8c5293de3542546cc/anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c", size = 173422 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d", size = 90377 }, +] + +[[package]] +name = "anytree" +version = "2.12.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f9/44/2dd9c5d0c3befe899738b930aa056e003b1441bfbf34aab8fce90b2b7dea/anytree-2.12.1.tar.gz", hash = "sha256:244def434ccf31b668ed282954e5d315b4e066c4940b94aff4a7962d85947830", size = 31110 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/fb/ff946843e6b55ae9fda84df3964d6c233cd2261dface789f5be02ab79bc5/anytree-2.12.1-py3-none-any.whl", hash = "sha256:5ea9e61caf96db1e5b3d0a914378d2cd83c269dfce1fb8242ce96589fa3382f0", size = 44914 }, +] + +[[package]] +name = "ase" +version = "3.22.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "scipy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/64/096410b2e0b58aee082b40a37cdd61e708ed722a7471d7cf0e2dcb01cade/ase-3.22.1.tar.gz", hash = "sha256:004df6b0ea04b1114c790fadfe45d4125eb0e53125c66a93425af853d82ab432", size = 2807134 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/b0/3c0a7afaf66274588216c251376ac2bea0269eb7a5e1da77521811060553/ase-3.22.1-py3-none-any.whl", hash = "sha256:66cc481e3d82bea8931d5fe677119932ea0bd1bc08b901fd84f36b37fa681c9e", size = 2192122 }, +] + +[[package]] +name = "async-property" +version = "0.2.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/12/900eb34b3af75c11b69d6b78b74ec0fd1ba489376eceb3785f787d1a0a1d/async_property-0.2.2.tar.gz", hash = "sha256:17d9bd6ca67e27915a75d92549df64b5c7174e9dc806b30a3934dc4ff0506380", size = 16523 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/80/9f608d13b4b3afcebd1dd13baf9551c95fc424d6390e4b1cfd7b1810cd06/async_property-0.2.2-py2.py3-none-any.whl", hash = "sha256:8924d792b5843994537f8ed411165700b27b2bd966cefc4daeefc1253442a9d7", size = 9546 }, +] + +[[package]] +name = "bitarray" +version = "3.0.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/62/dcfac53d22ef7e904ed10a8e710a36391d2d6753c34c869b51bfc5e4ad54/bitarray-3.0.0.tar.gz", hash = "sha256:a2083dc20f0d828a7cdf7a16b20dae56aab0f43dc4f347a3b3039f6577992b03", size = 126627 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/f7/2cd02557fa9f177d54b51e6d668696266bdc1af978b5c27179449cbf5870/bitarray-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ddbf71a97ad1d6252e6e93d2d703b624d0a5b77c153b12f9ea87d83e1250e0c", size = 172224 }, + { url = "https://files.pythonhosted.org/packages/49/0a/0362089c127f2639041171803f6bf193a9e1deba72df637ebd36cb510f46/bitarray-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0e7f24a0b01e6e6a0191c50b06ca8edfdec1988d9d2b264d669d2487f4f4680", size = 123359 }, + { url = "https://files.pythonhosted.org/packages/c7/ab/a0982708b5ad92d6ec40833846ac954b57b16d9f90551a9da59e4bce79e1/bitarray-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:150b7b29c36d9f1a24779aea723fdfc73d1c1c161dc0ea14990da27d4e947092", size = 121267 }, + { url = "https://files.pythonhosted.org/packages/10/23/134ad08b9e7be3b80575fd4a50c33c79b3b360794dfc2716b6a18bf4dd60/bitarray-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8330912be6cb8e2fbfe8eb69f82dee139d605730cadf8d50882103af9ac83bb4", size = 278114 }, + { url = "https://files.pythonhosted.org/packages/c1/a1/df7d0b415207de7c6210403865a5d8a9c920209d542f552a09a02749038a/bitarray-3.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e56ba8be5f17dee0ffa6d6ce85251e062ded2faa3cbd2558659c671e6c3bf96d", size = 292725 }, + { url = "https://files.pythonhosted.org/packages/ec/06/03a636ac237c1860e63f037ccff35f0fec45188c94e55d9df526ee80adc3/bitarray-3.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffd94b4803811c738e504a4b499fb2f848b2f7412d71e6b517508217c1d7929d", size = 294722 }, + { url = "https://files.pythonhosted.org/packages/17/33/c2a7cb6f0030ea94408c84c4f80f4065b54b2bf1d4080e36fcd0b4c587a2/bitarray-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0255bd05ec7165e512c115423a5255a3f301417973d20a80fc5bfc3f3640bcb", size = 278304 }, + { url = "https://files.pythonhosted.org/packages/2c/a3/a06f76dd55d5337ff55585059058761c148da6d1e9e2bc0469d881ba5eb8/bitarray-3.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe606e728842389943a939258809dc5db2de831b1d2e0118515059e87f7bbc1a", size = 268807 }, + { url = "https://files.pythonhosted.org/packages/29/48/e8157c422542c308d6a0f5b213b21fef5779c80c00e673e2e4d7b3854d60/bitarray-3.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e89ea59a3ed86a6eb150d016ed28b1bedf892802d0ed32b5659d3199440f3ced", size = 272791 }, + { url = "https://files.pythonhosted.org/packages/ad/53/219d82592b150b580fbc479a718a7c31086627ed4599c9930408f43b6de4/bitarray-3.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cf0cc2e91dd38122dec2e6541efa99aafb0a62e118179218181eff720b4b8153", size = 264821 }, + { url = "https://files.pythonhosted.org/packages/95/08/c47b24fbb34a305531d8d0d7c15f5ab9788478384583a2614b07c2449cf8/bitarray-3.0.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:2d9fe3ee51afeb909b68f97e14c6539ace3f4faa99b21012e610bbe7315c388d", size = 287871 }, + { url = "https://files.pythonhosted.org/packages/77/31/5cdf3dcf407e8fcc5ca07a06f45aaf6b0adb15f38fe6fddd03d5d1fbaf9f/bitarray-3.0.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:37be5482b9df3105bad00fdf7dc65244e449b130867c3879c9db1db7d72e508b", size = 299459 }, + { url = "https://files.pythonhosted.org/packages/b5/26/15b3630dc9bed79fc0e4a5dc92f4b1d30a872ff92f20a8b7acbb7a484bfd/bitarray-3.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0027b8f3bb2bba914c79115e96a59b9924aafa1a578223a7c4f0a7242d349842", size = 271131 }, + { url = "https://files.pythonhosted.org/packages/45/4b/1c8ba97a015d9cf44b54d4488a0005c2e9fb33ff1df38fdcf68d1cb76785/bitarray-3.0.0-cp310-cp310-win32.whl", hash = "sha256:628f93e9c2c23930bd1cfe21c634d6c84ec30f45f23e69aefe1fcd262186d7bb", size = 114230 }, + { url = "https://files.pythonhosted.org/packages/84/54/d883073137d5c245555f66c48f9518c855704b4c619aa92ddd74d6eb2c98/bitarray-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:0b655c3110e315219e266b2732609fddb0857bc69593de29f3c2ba74b7d3f51a", size = 121439 }, + { url = "https://files.pythonhosted.org/packages/61/41/321edc0fbf7e8c88552d5ff9ee07777d58e2078f2706c6478bc6651b1945/bitarray-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:44c3e78b60070389b824d5a654afa1c893df723153c81904088d4922c3cfb6ac", size = 172452 }, + { url = "https://files.pythonhosted.org/packages/48/92/4c312d6d55ac30dae96749830c9f5007a914efcb591ee0828914078eec9f/bitarray-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:545d36332de81e4742a845a80df89530ff193213a50b4cbef937ed5a44c0e5e5", size = 123502 }, + { url = "https://files.pythonhosted.org/packages/75/2c/9f3ed70ffac8e6d2b0880e132d9e5024e4ef9404a24220deca8dbd702f15/bitarray-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8a9eb510cde3fa78c2e302bece510bf5ed494ec40e6b082dec753d6e22d5d1b1", size = 121363 }, + { url = "https://files.pythonhosted.org/packages/48/e0/8ec59416aaa7ca1461a0268c0fe2fbdc8d574ac41e307980f555b773d5f6/bitarray-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e3727ab63dfb6bde00b281934e2212bb7529ea3006c0031a556a84d2268bea5", size = 285792 }, + { url = "https://files.pythonhosted.org/packages/b9/8a/fb9d76ecb44a79f02188240278574376e851d0ca81437f433c9e6481d2e5/bitarray-3.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2055206ed653bee0b56628f6a4d248d53e5660228d355bbec0014bdfa27050ae", size = 300848 }, + { url = "https://files.pythonhosted.org/packages/63/c5/067b688553b23e99d61ecf930abf1ad5cb5f80c2ebe6f0e2fe8ecab00b3f/bitarray-3.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:147542299f458bdb177f798726e5f7d39ab8491de4182c3c6d9885ed275a3c2b", size = 303027 }, + { url = "https://files.pythonhosted.org/packages/dc/46/25ebc667907736b2c5c84f4bd8260d9bece8b69719a33db5c3f3dcb281a5/bitarray-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f761184b93092077c7f6b7dad7bd4e671c1620404a76620da7872ceb576a94", size = 286125 }, + { url = "https://files.pythonhosted.org/packages/16/dd/f9a1d84965a992ff42cae5b61536e68fc944f3e31a349b690347d98fc5e0/bitarray-3.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e008b7b4ce6c7f7a54b250c45c28d4243cc2a3bbfd5298fa7dac92afda229842", size = 277111 }, + { url = "https://files.pythonhosted.org/packages/16/5b/44f298586a09beb62ec553f9efa06c8a5356d2e230e4080c72cb2800a48f/bitarray-3.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dfea514e665af278b2e1d4deb542de1cd4f77413bee83dd15ae16175976ea8d5", size = 280941 }, + { url = "https://files.pythonhosted.org/packages/28/7c/c6e157332227862727959057ba2987e6710985992b196a81f61995f21e19/bitarray-3.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:66d6134b7bb737b88f1d16478ad0927c571387f6054f4afa5557825a4c1b78e2", size = 272817 }, + { url = "https://files.pythonhosted.org/packages/b7/5d/9f7aaaaf85b5247b4a69b93af60ac7dcfff5545bf544a35517618c4244a0/bitarray-3.0.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3cd565253889940b4ec4768d24f101d9fe111cad4606fdb203ea16f9797cf9ed", size = 295830 }, + { url = "https://files.pythonhosted.org/packages/14/1b/86dd50edd2e0612b092fe4caec3001a24298c9acab5e89a503f002ed3bef/bitarray-3.0.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:4800c91a14656789d2e67d9513359e23e8a534c8ee1482bb9b517a4cfc845200", size = 307592 }, + { url = "https://files.pythonhosted.org/packages/d6/8f/45a1f1bcce5fd88d2f0bb2e1ebe8bbb55247edcb8e7a8ef06e4437e2b5e3/bitarray-3.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c2945e0390d1329c585c584c6b6d78be017d9c6a1288f9c92006fe907f69cc28", size = 278971 }, + { url = "https://files.pythonhosted.org/packages/43/2d/948c5718fe901aa58c98cef52b8898a6bea865bea7528cff6c2bc703f9f3/bitarray-3.0.0-cp311-cp311-win32.whl", hash = "sha256:c23286abba0cb509733c6ce8f4013cd951672c332b2e184dbefbd7331cd234c8", size = 114242 }, + { url = "https://files.pythonhosted.org/packages/8c/75/e921ada57bb0bcece5eb515927c031f0bc828f702b8f213639358d9df396/bitarray-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ca79f02a98cbda1472449d440592a2fe2ad96fe55515a0447fa8864a38017cf8", size = 121524 }, + { url = "https://files.pythonhosted.org/packages/4e/2e/2e4beb2b714dc83a9e90ac0e4bacb1a191c71125734f72962ee2a20b9cfb/bitarray-3.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:184972c96e1c7e691be60c3792ca1a51dd22b7f25d96ebea502fe3c9b554f25d", size = 172152 }, + { url = "https://files.pythonhosted.org/packages/e0/1f/9ec96408c060ffc3df5ba64d2b520fd0484cb3393a96691df8f660a43b17/bitarray-3.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:787db8da5e9e29be712f7a6bce153c7bc8697ccc2c38633e347bb9c82475d5c9", size = 123319 }, + { url = "https://files.pythonhosted.org/packages/80/9f/4dd05086308bfcc84ad88c663460a8ad9f5f638f9f96eb5fa08381054db6/bitarray-3.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2da91ab3633c66999c2a352f0ca9ae064f553e5fc0eca231d28e7e305b83e942", size = 121242 }, + { url = "https://files.pythonhosted.org/packages/55/bb/8865b7380e9d20445bc775079f24f2279a8c0d9ee11d57c49b118d39beaf/bitarray-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7edb83089acbf2c86c8002b96599071931dc4ea5e1513e08306f6f7df879a48b", size = 287463 }, + { url = "https://files.pythonhosted.org/packages/db/8b/779119ee438090a80cbfaa49f96e783651183ab4c25b9760fe360aa7cb31/bitarray-3.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996d1b83eb904589f40974538223eaed1ab0f62be8a5105c280b9bd849e685c4", size = 301599 }, + { url = "https://files.pythonhosted.org/packages/41/25/78f7ba7fa8ab428767dfb722fc1ea9aac4a9813e348023d8047d8fd32253/bitarray-3.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4817d73d995bd2b977d9cde6050be8d407791cf1f84c8047fa0bea88c1b815bc", size = 304837 }, + { url = "https://files.pythonhosted.org/packages/f7/8d/30a448d3157b4239e635c92fc3b3789a5b87784875ca2776f65bd543d136/bitarray-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d47bc4ff9b0e1624d613563c6fa7b80aebe7863c56c3df5ab238bb7134e8755", size = 288588 }, + { url = "https://files.pythonhosted.org/packages/86/e0/c1f1b595682244f55119d55f280b5a996bcd462b702ec220d976a7566d27/bitarray-3.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aca0a9cd376beaccd9f504961de83e776dd209c2de5a4c78dc87a78edf61839b", size = 279002 }, + { url = "https://files.pythonhosted.org/packages/5c/4d/a17626923ad2c9d20ed1625fc5b27a8dfe2d1a3e877083e9422455ec302d/bitarray-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:572a61fba7e3a710a8324771322fba8488d134034d349dcd036a7aef74723a80", size = 281898 }, + { url = "https://files.pythonhosted.org/packages/50/d8/5c410580a510e669d9a28bf17675e58843236c55c60fc6dc8f8747808757/bitarray-3.0.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a817ad70c1aff217530576b4f037dd9b539eb2926603354fcac605d824082ad1", size = 274622 }, + { url = "https://files.pythonhosted.org/packages/e7/21/de2e8eda85c5f6a05bda75a00c22c94aee71ef09db0d5cbf22446de74312/bitarray-3.0.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:2ac67b658fa5426503e9581a3fb44a26a3b346c1abd17105735f07db572195b3", size = 296930 }, + { url = "https://files.pythonhosted.org/packages/13/7b/7cfad12d77db2932fb745fa281693b0031c3dfd7f2ecf5803be688cc3798/bitarray-3.0.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:12f19ede03e685c5c588ab5ed63167999295ffab5e1126c5fe97d12c0718c18f", size = 309836 }, + { url = "https://files.pythonhosted.org/packages/53/e1/5120fbb8438a0d718e063f70168a2975e03f00ce6b86e74b8eec079cb492/bitarray-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fcef31b062f756ba7eebcd7890c5d5de84b9d64ee877325257bcc9782288564a", size = 281535 }, + { url = "https://files.pythonhosted.org/packages/73/75/8acebbbb4f85dcca73b8e91dde5d3e1e3e2317b36fae4f5b133c60720834/bitarray-3.0.0-cp312-cp312-win32.whl", hash = "sha256:656db7bdf1d81ec3b57b3cad7ec7276765964bcfd0eb81c5d1331f385298169c", size = 114423 }, + { url = "https://files.pythonhosted.org/packages/ca/56/dadae4d4351b337de6e0269001fb40f3ebe9f72222190456713d2c1be53d/bitarray-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f785af6b7cb07a9b1e5db0dea9ef9e3e8bb3d74874a0a61303eab9c16acc1999", size = 121680 }, + { url = "https://files.pythonhosted.org/packages/4f/30/07d7be4624981537d32b261dc48a16b03757cc9d88f66012d93acaf11663/bitarray-3.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7cb885c043000924554fe2124d13084c8fdae03aec52c4086915cd4cb87fe8be", size = 172147 }, + { url = "https://files.pythonhosted.org/packages/f0/e9/be1fa2828bad9cb32e1309e6dbd05adcc41679297d9e96bbb372be928e38/bitarray-3.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7814c9924a0b30ecd401f02f082d8697fc5a5be3f8d407efa6e34531ff3c306a", size = 123319 }, + { url = "https://files.pythonhosted.org/packages/22/28/33601d276a6eb76e40fe8a61c61f59cc9ff6d9ecf0b676235c02689475b8/bitarray-3.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bcf524a087b143ba736aebbb054bb399d49e77cf7c04ed24c728e411adc82bfa", size = 121236 }, + { url = "https://files.pythonhosted.org/packages/85/d3/f36b213ffae8f9c8e4c6f12a91e18c06570a04f42d5a1bda4303380f2639/bitarray-3.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1d5abf1d6d910599ac16afdd9a0ed3e24f3b46af57f3070cf2792f236f36e0b", size = 287395 }, + { url = "https://files.pythonhosted.org/packages/b7/1a/2da3b00d876883b05ffd3be9b1311858b48d4a26579f8647860e271c5385/bitarray-3.0.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9929051feeaf8d948cc0b1c9ce57748079a941a1a15c89f6014edf18adaade84", size = 301501 }, + { url = "https://files.pythonhosted.org/packages/88/b9/c1b5af8d1c918f1ee98748f7f7270f932f531c2259dd578c0edcf16ec73e/bitarray-3.0.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96cf0898f8060b2d3ae491762ae871b071212ded97ff9e1e3a5229e9fefe544c", size = 304804 }, + { url = "https://files.pythonhosted.org/packages/92/24/81a10862856419638c0db13e04de7cbf19938353517a67e4848c691f0b7c/bitarray-3.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab37da66a8736ad5a75a58034180e92c41e864da0152b84e71fcc253a2f69cd4", size = 288507 }, + { url = "https://files.pythonhosted.org/packages/da/70/a093af92ef7b207a59087e3b5819e03767fbdda9dd56aada3a4ee25a1fbd/bitarray-3.0.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beeb79e476d19b91fd6a3439853e4e5ba1b3b475920fa40d62bde719c8af786f", size = 278905 }, + { url = "https://files.pythonhosted.org/packages/fb/40/0925c6079c4b282b16eb9085f82df0cdf1f787fb4c67fd4baca3e37acf7f/bitarray-3.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f75fc0198c955d840b836059bd43e0993edbf119923029ca60c4fc017cefa54a", size = 281909 }, + { url = "https://files.pythonhosted.org/packages/61/4b/e11754a5d34cb997250d8019b1fe555d4c06fe2d2a68b0bf7c5580537046/bitarray-3.0.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f12cc7c7638074918cdcc7491aff897df921b092ffd877227892d2686e98f876", size = 274711 }, + { url = "https://files.pythonhosted.org/packages/5b/78/39513f75423959ee2d82a82e10296b6a7bc7d880b16d714980a6752ef33b/bitarray-3.0.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dbe1084935b942fab206e609fa1ed3f46ad1f2612fb4833e177e9b2a5e006c96", size = 297038 }, + { url = "https://files.pythonhosted.org/packages/af/a2/5cb81f8773a479de7c06cc1ada36d5cc5a8ebcd8715013e1c4e01a76e84a/bitarray-3.0.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ac06dd72ee1e1b6e312504d06f75220b5894af1fb58f0c20643698f5122aea76", size = 309814 }, + { url = "https://files.pythonhosted.org/packages/03/3e/795b57c6f6eea61c47d0716e1d60219218028b1f260f7328802eac684964/bitarray-3.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00f9a88c56e373009ac3c73c55205cfbd9683fbd247e2f9a64bae3da78795252", size = 281564 }, + { url = "https://files.pythonhosted.org/packages/f6/31/5914002ae4dd0e0079f8bccfd0647119cff364280d106108a19bd2511933/bitarray-3.0.0-cp313-cp313-win32.whl", hash = "sha256:9c6e52005e91803eb4e08c0a08a481fb55ddce97f926bae1f6fa61b3396b5b61", size = 114404 }, + { url = "https://files.pythonhosted.org/packages/76/0a/184f85a1739db841ae8fbb1d9ec028240d5a351e36abec9cd020de889dab/bitarray-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:cb98d5b6eac4b2cf2a5a69f60a9c499844b8bea207059e9fc45c752436e6bb49", size = 121672 }, + { url = "https://files.pythonhosted.org/packages/d7/88/fb05dc8a03b4a9e0d7588f097fecdeba3023aced2fe52282bccc16eb853b/bitarray-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:39b38a3d45dac39d528c87b700b81dfd5e8dc8e9e1a102503336310ef837c3fd", size = 172211 }, + { url = "https://files.pythonhosted.org/packages/66/0d/6a50463baa8bcc7c48b498282493b6bc5bff65fd5047f8627f7d74a7958d/bitarray-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0e104f9399144fab6a892d379ba1bb4275e56272eb465059beef52a77b4e5ce6", size = 123363 }, + { url = "https://files.pythonhosted.org/packages/4a/f8/5a71f95ba8fa6c90508dbd5c48ae9dd9440ed54e784d8a3b7edb05284641/bitarray-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0879f839ec8f079fa60c3255966c2e1aa7196699a234d4e5b7898fbc321901b5", size = 121261 }, + { url = "https://files.pythonhosted.org/packages/16/d5/f5a6a4ab18fe8030c1c98589129fe0a5cf210bcbcc32cd1c77bfd8741063/bitarray-3.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9502c2230d59a4ace2fddfd770dad8e8b414cbd99517e7e56c55c20997c28b8d", size = 276010 }, + { url = "https://files.pythonhosted.org/packages/ff/7d/0e341f0a30a142fbf259ec9aef2bc5006ed3c0eb74ce9489224843b2d2d8/bitarray-3.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57d5ef854f8ec434f2ffd9ddcefc25a10848393fe2976e2be2c8c773cf5fef42", size = 290616 }, + { url = "https://files.pythonhosted.org/packages/68/75/dccf583065333aa64b54fb153f72b27975485f802769c6202b093574a277/bitarray-3.0.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a3c36b2fcfebe15ad1c10a90c1d52a42bebe960adcbce340fef867203028fbe7", size = 292413 }, + { url = "https://files.pythonhosted.org/packages/95/6f/fa375b76201ee01d6ed06d48c2ecccfff249766e0595a536d3304d6c6c9a/bitarray-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66a33a537e781eac3a352397ce6b07eedf3a8380ef4a804f8844f3f45e335544", size = 276122 }, + { url = "https://files.pythonhosted.org/packages/b0/92/7e32ec2b2e5c9de24ae9ffd422b671567c02aa7ebe8465e855512000e9dc/bitarray-3.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa54c7e1da8cf4be0aab941ea284ec64033ede5d6de3fd47d75e77cafe986e9d", size = 266825 }, + { url = "https://files.pythonhosted.org/packages/05/84/a2610495d55ca420102a850dc0d2a69aafbe165be5f766b9242d9435fe91/bitarray-3.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a667ea05ba1ea81b722682276dbef1d36990f8908cf51e570099fd505a89f931", size = 271330 }, + { url = "https://files.pythonhosted.org/packages/aa/44/effb0a94116c1cb23a5ce779c13e92d2b039242c41671c9bc0b6432dbc90/bitarray-3.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d756bfeb62ca4fe65d2af7a39249d442c05070c047d03729ad6cd4c2e9b0f0bd", size = 263453 }, + { url = "https://files.pythonhosted.org/packages/93/e3/0030e5e88963d918a876dbf510ead96a1161f0aa9f1a3a0ee0eafa826eca/bitarray-3.0.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c9e9fef0754867d88e948ce8351c9fd7e507d8514e0f242fd67c907b9cdf98b3", size = 285787 }, + { url = "https://files.pythonhosted.org/packages/b4/09/e53cf19ec028edcb3990ef07cd50cfeaf2820585fc3cb5ded5a464d9eaf4/bitarray-3.0.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:67a0b56dd02f2713f6f52cacb3f251afd67c94c5f0748026d307d87a81a8e15c", size = 298218 }, + { url = "https://files.pythonhosted.org/packages/65/ab/db0e300651e262da8e0dae1daa305c7c0825b5489be6ac6150125c6d19c0/bitarray-3.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d8c36ddc1923bcc4c11b9994c54eaae25034812a42400b7b8a86fe6d242166a2", size = 269170 }, + { url = "https://files.pythonhosted.org/packages/98/8a/6f49c08a18159206c78e52eaae059e9efaec34f1ae112ffb47bc286f2030/bitarray-3.0.0-cp39-cp39-win32.whl", hash = "sha256:1414a7102a3c4986f241480544f5c99f5d32258fb9b85c9c04e84e48c490ab35", size = 114301 }, + { url = "https://files.pythonhosted.org/packages/5d/e4/df4ec73be0edf600d2c073da295c95e47f653a2e9b646c873ad327c20ce1/bitarray-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:8c9733d2ff9b7838ac04bf1048baea153174753e6a47312be14c83c6a395424b", size = 121560 }, + { url = "https://files.pythonhosted.org/packages/01/6b/405d04ed3d0e46dcc52b9f9ca98b342de5930ed87adcacb86afc830e188b/bitarray-3.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fef4e3b3f2084b4dae3e5316b44cda72587dcc81f68b4eb2dbda1b8d15261b61", size = 119755 }, + { url = "https://files.pythonhosted.org/packages/90/d8/cdfd2d41a836479db66c1d33f2615c37529458427586c8d585fec4c39c5c/bitarray-3.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e9eee03f187cef1e54a4545124109ee0afc84398628b4b32ebb4852b4a66393", size = 124105 }, + { url = "https://files.pythonhosted.org/packages/12/5d/4214bb7103fa9601332b49fc2fcef73005750581aabe7e13163ad66013cc/bitarray-3.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb5702dd667f4bb10fed056ffdc4ddaae8193a52cd74cb2cdb54e71f4ef2dd1", size = 124669 }, + { url = "https://files.pythonhosted.org/packages/fc/9b/ecfe49cf03047c8415d71ee931352b11b747525cbff9bc5db9c3592d21da/bitarray-3.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:666e44b0458bb2894b64264a29f2cc7b5b2cbcc4c5e9cedfe1fdbde37a8e329a", size = 126520 }, + { url = "https://files.pythonhosted.org/packages/e7/79/190bcac2a23fb5f726d0305b372f73e0bf496a43da0ace4e285e9927fcdb/bitarray-3.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c756a92cf1c1abf01e56a4cc40cb89f0ff9147f2a0be5b557ec436a23ff464d8", size = 122035 }, + { url = "https://files.pythonhosted.org/packages/dd/35/e0563c7563381a98685914b87662ea8c4a0816dcb86493214716b9684914/bitarray-3.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ee040ad3b7dfa05e459713099f16373c1f2a6f68b43cb0575a66718e7a5daef4", size = 119861 }, + { url = "https://files.pythonhosted.org/packages/ef/e7/fa1a5a5a5600f17927410d11f281c65a3fa3b9e5b5e44e01e9f0ec6d6294/bitarray-3.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dad7ba2af80f9ec1dd988c3aca7992408ec0d0b4c215b65d353d95ab0070b10", size = 124147 }, + { url = "https://files.pythonhosted.org/packages/98/89/d8b48497c71c129d46713082da3344baf79efbec588ae203cb1f023ff657/bitarray-3.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4839d3b64af51e4b8bb4a602563b98b9faeb34fd6c00ed23d7834e40a9d080fc", size = 124892 }, + { url = "https://files.pythonhosted.org/packages/12/b1/f5103b9864d8cb25f97b510aea3739caed8502854bbe0eb70578801b4a76/bitarray-3.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f71f24b58e75a889b9915e3197865302467f13e7390efdea5b6afc7424b3a2ea", size = 126623 }, + { url = "https://files.pythonhosted.org/packages/6d/bb/e019b29d68fc457eee40ff2ad3be9ea71cfdb0acccf1575ae106395e6148/bitarray-3.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bcf0150ae0bcc4aa97bdfcb231b37bad1a59083c1b5012643b266012bf420e68", size = 122129 }, +] + +[[package]] +name = "cachetools" +version = "5.5.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/38/a0f315319737ecf45b4319a8cd1f3a908e29d9277b46942263292115eee7/cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a", size = 27661 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/07/14f8ad37f2d12a5ce41206c21820d8cb6561b728e51fad4530dff0552a67/cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292", size = 9524 }, +] + +[[package]] +name = "certifi" +version = "2024.8.30" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", size = 168507 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", size = 167321 }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, + { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, + { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, + { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, + { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, + { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 }, + { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 }, + { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, + { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, + { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, + { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, + { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, + { url = "https://files.pythonhosted.org/packages/b9/ea/8bb50596b8ffbc49ddd7a1ad305035daa770202a6b782fc164647c2673ad/cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", size = 182220 }, + { url = "https://files.pythonhosted.org/packages/ae/11/e77c8cd24f58285a82c23af484cf5b124a376b32644e445960d1a4654c3a/cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", size = 178605 }, + { url = "https://files.pythonhosted.org/packages/ed/65/25a8dc32c53bf5b7b6c2686b42ae2ad58743f7ff644844af7cdb29b49361/cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", size = 424910 }, + { url = "https://files.pythonhosted.org/packages/42/7a/9d086fab7c66bd7c4d0f27c57a1b6b068ced810afc498cc8c49e0088661c/cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", size = 447200 }, + { url = "https://files.pythonhosted.org/packages/da/63/1785ced118ce92a993b0ec9e0d0ac8dc3e5dbfbcaa81135be56c69cabbb6/cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", size = 454565 }, + { url = "https://files.pythonhosted.org/packages/74/06/90b8a44abf3556599cdec107f7290277ae8901a58f75e6fe8f970cd72418/cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", size = 435635 }, + { url = "https://files.pythonhosted.org/packages/bd/62/a1f468e5708a70b1d86ead5bab5520861d9c7eacce4a885ded9faa7729c3/cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", size = 445218 }, + { url = "https://files.pythonhosted.org/packages/5b/95/b34462f3ccb09c2594aa782d90a90b045de4ff1f70148ee79c69d37a0a5a/cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", size = 460486 }, + { url = "https://files.pythonhosted.org/packages/fc/fc/a1e4bebd8d680febd29cf6c8a40067182b64f00c7d105f8f26b5bc54317b/cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", size = 437911 }, + { url = "https://files.pythonhosted.org/packages/e6/c3/21cab7a6154b6a5ea330ae80de386e7665254835b9e98ecc1340b3a7de9a/cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", size = 460632 }, + { url = "https://files.pythonhosted.org/packages/cb/b5/fd9f8b5a84010ca169ee49f4e4ad6f8c05f4e3545b72ee041dbbcb159882/cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", size = 171820 }, + { url = "https://files.pythonhosted.org/packages/8c/52/b08750ce0bce45c143e1b5d7357ee8c55341b52bdef4b0f081af1eb248c2/cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", size = 181290 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/8b/825cc84cf13a28bfbcba7c416ec22bf85a9584971be15b21dd8300c65b7f/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", size = 196363 }, + { url = "https://files.pythonhosted.org/packages/23/81/d7eef6a99e42c77f444fdd7bc894b0ceca6c3a95c51239e74a722039521c/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", size = 125639 }, + { url = "https://files.pythonhosted.org/packages/21/67/b4564d81f48042f520c948abac7079356e94b30cb8ffb22e747532cf469d/charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", size = 120451 }, + { url = "https://files.pythonhosted.org/packages/c2/72/12a7f0943dd71fb5b4e7b55c41327ac0a1663046a868ee4d0d8e9c369b85/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", size = 140041 }, + { url = "https://files.pythonhosted.org/packages/67/56/fa28c2c3e31217c4c52158537a2cf5d98a6c1e89d31faf476c89391cd16b/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", size = 150333 }, + { url = "https://files.pythonhosted.org/packages/f9/d2/466a9be1f32d89eb1554cf84073a5ed9262047acee1ab39cbaefc19635d2/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", size = 142921 }, + { url = "https://files.pythonhosted.org/packages/f8/01/344ec40cf5d85c1da3c1f57566c59e0c9b56bcc5566c08804a95a6cc8257/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", size = 144785 }, + { url = "https://files.pythonhosted.org/packages/73/8b/2102692cb6d7e9f03b9a33a710e0164cadfce312872e3efc7cfe22ed26b4/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", size = 146631 }, + { url = "https://files.pythonhosted.org/packages/d8/96/cc2c1b5d994119ce9f088a9a0c3ebd489d360a2eb058e2c8049f27092847/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", size = 140867 }, + { url = "https://files.pythonhosted.org/packages/c9/27/cde291783715b8ec30a61c810d0120411844bc4c23b50189b81188b273db/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", size = 149273 }, + { url = "https://files.pythonhosted.org/packages/3a/a4/8633b0fc1a2d1834d5393dafecce4a1cc56727bfd82b4dc18fc92f0d3cc3/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", size = 152437 }, + { url = "https://files.pythonhosted.org/packages/64/ea/69af161062166b5975ccbb0961fd2384853190c70786f288684490913bf5/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", size = 150087 }, + { url = "https://files.pythonhosted.org/packages/3b/fd/e60a9d9fd967f4ad5a92810138192f825d77b4fa2a557990fd575a47695b/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", size = 145142 }, + { url = "https://files.pythonhosted.org/packages/6d/02/8cb0988a1e49ac9ce2eed1e07b77ff118f2923e9ebd0ede41ba85f2dcb04/charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", size = 94701 }, + { url = "https://files.pythonhosted.org/packages/d6/20/f1d4670a8a723c46be695dff449d86d6092916f9e99c53051954ee33a1bc/charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", size = 102191 }, + { url = "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", size = 193339 }, + { url = "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", size = 124366 }, + { url = "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", size = 118874 }, + { url = "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", size = 138243 }, + { url = "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", size = 148676 }, + { url = "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", size = 141289 }, + { url = "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", size = 142585 }, + { url = "https://files.pythonhosted.org/packages/3b/a0/a68980ab8a1f45a36d9745d35049c1af57d27255eff8c907e3add84cf68f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", size = 144408 }, + { url = "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", size = 139076 }, + { url = "https://files.pythonhosted.org/packages/fb/9d/9c13753a5a6e0db4a0a6edb1cef7aee39859177b64e1a1e748a6e3ba62c2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", size = 146874 }, + { url = "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", size = 150871 }, + { url = "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", size = 148546 }, + { url = "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", size = 143048 }, + { url = "https://files.pythonhosted.org/packages/01/f8/38842422988b795220eb8038745d27a675ce066e2ada79516c118f291f07/charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", size = 94389 }, + { url = "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", size = 101752 }, + { url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 }, + { url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 }, + { url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 }, + { url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 }, + { url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 }, + { url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 }, + { url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 }, + { url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 }, + { url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 }, + { url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 }, + { url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 }, + { url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 }, + { url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 }, + { url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 }, + { url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 }, + { url = "https://files.pythonhosted.org/packages/f3/89/68a4c86f1a0002810a27f12e9a7b22feb198c59b2f05231349fbce5c06f4/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", size = 194617 }, + { url = "https://files.pythonhosted.org/packages/4f/cd/8947fe425e2ab0aa57aceb7807af13a0e4162cd21eee42ef5b053447edf5/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", size = 125310 }, + { url = "https://files.pythonhosted.org/packages/5b/f0/b5263e8668a4ee9becc2b451ed909e9c27058337fda5b8c49588183c267a/charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", size = 119126 }, + { url = "https://files.pythonhosted.org/packages/ff/6e/e445afe4f7fda27a533f3234b627b3e515a1b9429bc981c9a5e2aa5d97b6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", size = 139342 }, + { url = "https://files.pythonhosted.org/packages/a1/b2/4af9993b532d93270538ad4926c8e37dc29f2111c36f9c629840c57cd9b3/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", size = 149383 }, + { url = "https://files.pythonhosted.org/packages/fb/6f/4e78c3b97686b871db9be6f31d64e9264e889f8c9d7ab33c771f847f79b7/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", size = 142214 }, + { url = "https://files.pythonhosted.org/packages/2b/c9/1c8fe3ce05d30c87eff498592c89015b19fade13df42850aafae09e94f35/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", size = 144104 }, + { url = "https://files.pythonhosted.org/packages/ee/68/efad5dcb306bf37db7db338338e7bb8ebd8cf38ee5bbd5ceaaaa46f257e6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", size = 146255 }, + { url = "https://files.pythonhosted.org/packages/0c/75/1ed813c3ffd200b1f3e71121c95da3f79e6d2a96120163443b3ad1057505/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", size = 140251 }, + { url = "https://files.pythonhosted.org/packages/7d/0d/6f32255c1979653b448d3c709583557a4d24ff97ac4f3a5be156b2e6a210/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", size = 148474 }, + { url = "https://files.pythonhosted.org/packages/ac/a0/c1b5298de4670d997101fef95b97ac440e8c8d8b4efa5a4d1ef44af82f0d/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", size = 151849 }, + { url = "https://files.pythonhosted.org/packages/04/4f/b3961ba0c664989ba63e30595a3ed0875d6790ff26671e2aae2fdc28a399/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", size = 149781 }, + { url = "https://files.pythonhosted.org/packages/d8/90/6af4cd042066a4adad58ae25648a12c09c879efa4849c705719ba1b23d8c/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482", size = 144970 }, + { url = "https://files.pythonhosted.org/packages/cc/67/e5e7e0cbfefc4ca79025238b43cdf8a2037854195b37d6417f3d0895c4c2/charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", size = 94973 }, + { url = "https://files.pythonhosted.org/packages/65/97/fc9bbc54ee13d33dc54a7fcf17b26368b18505500fc01e228c27b5222d80/charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", size = 102308 }, + { url = "https://files.pythonhosted.org/packages/54/2f/28659eee7f5d003e0f5a3b572765bf76d6e0fe6601ab1f1b1dd4cba7e4f1/charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", size = 196326 }, + { url = "https://files.pythonhosted.org/packages/d1/18/92869d5c0057baa973a3ee2af71573be7b084b3c3d428fe6463ce71167f8/charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", size = 125614 }, + { url = "https://files.pythonhosted.org/packages/d6/27/327904c5a54a7796bb9f36810ec4173d2df5d88b401d2b95ef53111d214e/charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", size = 120450 }, + { url = "https://files.pythonhosted.org/packages/a4/23/65af317914a0308495133b2d654cf67b11bbd6ca16637c4e8a38f80a5a69/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", size = 140135 }, + { url = "https://files.pythonhosted.org/packages/f2/41/6190102ad521a8aa888519bb014a74251ac4586cde9b38e790901684f9ab/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", size = 150413 }, + { url = "https://files.pythonhosted.org/packages/7b/ab/f47b0159a69eab9bd915591106859f49670c75f9a19082505ff16f50efc0/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", size = 142992 }, + { url = "https://files.pythonhosted.org/packages/28/89/60f51ad71f63aaaa7e51a2a2ad37919985a341a1d267070f212cdf6c2d22/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", size = 144871 }, + { url = "https://files.pythonhosted.org/packages/0c/48/0050550275fea585a6e24460b42465020b53375017d8596c96be57bfabca/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", size = 146756 }, + { url = "https://files.pythonhosted.org/packages/dc/b5/47f8ee91455946f745e6c9ddbb0f8f50314d2416dd922b213e7d5551ad09/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", size = 141034 }, + { url = "https://files.pythonhosted.org/packages/84/79/5c731059ebab43e80bf61fa51666b9b18167974b82004f18c76378ed31a3/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", size = 149434 }, + { url = "https://files.pythonhosted.org/packages/ca/f3/0719cd09fc4dc42066f239cb3c48ced17fc3316afca3e2a30a4756fe49ab/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", size = 152443 }, + { url = "https://files.pythonhosted.org/packages/f7/0e/c6357297f1157c8e8227ff337e93fd0a90e498e3d6ab96b2782204ecae48/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", size = 150294 }, + { url = "https://files.pythonhosted.org/packages/54/9a/acfa96dc4ea8c928040b15822b59d0863d6e1757fba8bd7de3dc4f761c13/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", size = 145314 }, + { url = "https://files.pythonhosted.org/packages/73/1c/b10a63032eaebb8d7bcb8544f12f063f41f5f463778ac61da15d9985e8b6/charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", size = 94724 }, + { url = "https://files.pythonhosted.org/packages/c5/77/3a78bf28bfaa0863f9cfef278dbeadf55efe064eafff8c7c424ae3c4c1bf/charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", size = 102159 }, + { url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446 }, +] + +[[package]] +name = "click" +version = "8.1.7" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "colorama", marker = "platform_system == 'Windows'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 }, +] + +[[package]] +name = "click-default-group" +version = "1.2.4" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/ce/edb087fb53de63dad3b36408ca30368f438738098e668b78c87f93cd41df/click_default_group-1.2.4.tar.gz", hash = "sha256:eb3f3c99ec0d456ca6cd2a7f08f7d4e91771bef51b01bdd9580cc6450fe1251e", size = 3505 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl", hash = "sha256:9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f", size = 4123 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "contourpy" +version = "1.3.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/31a8f28b4a2a4fa0e01085e542f3081ab0588eff8e589d39d775172c9792/contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", size = 13464370 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/e0/be8dcc796cfdd96708933e0e2da99ba4bb8f9b2caa9d560a50f3f09a65f3/contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7", size = 265366 }, + { url = "https://files.pythonhosted.org/packages/50/d6/c953b400219443535d412fcbbc42e7a5e823291236bc0bb88936e3cc9317/contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42", size = 249226 }, + { url = "https://files.pythonhosted.org/packages/6f/b4/6fffdf213ffccc28483c524b9dad46bb78332851133b36ad354b856ddc7c/contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7", size = 308460 }, + { url = "https://files.pythonhosted.org/packages/cf/6c/118fc917b4050f0afe07179a6dcbe4f3f4ec69b94f36c9e128c4af480fb8/contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab", size = 347623 }, + { url = "https://files.pythonhosted.org/packages/f9/a4/30ff110a81bfe3abf7b9673284d21ddce8cc1278f6f77393c91199da4c90/contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589", size = 317761 }, + { url = "https://files.pythonhosted.org/packages/99/e6/d11966962b1aa515f5586d3907ad019f4b812c04e4546cc19ebf62b5178e/contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41", size = 322015 }, + { url = "https://files.pythonhosted.org/packages/4d/e3/182383743751d22b7b59c3c753277b6aee3637049197624f333dac5b4c80/contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d", size = 1262672 }, + { url = "https://files.pythonhosted.org/packages/78/53/974400c815b2e605f252c8fb9297e2204347d1755a5374354ee77b1ea259/contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223", size = 1321688 }, + { url = "https://files.pythonhosted.org/packages/52/29/99f849faed5593b2926a68a31882af98afbeac39c7fdf7de491d9c85ec6a/contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f", size = 171145 }, + { url = "https://files.pythonhosted.org/packages/a9/97/3f89bba79ff6ff2b07a3cbc40aa693c360d5efa90d66e914f0ff03b95ec7/contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b", size = 216019 }, + { url = "https://files.pythonhosted.org/packages/b3/1f/9375917786cb39270b0ee6634536c0e22abf225825602688990d8f5c6c19/contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad", size = 266356 }, + { url = "https://files.pythonhosted.org/packages/05/46/9256dd162ea52790c127cb58cfc3b9e3413a6e3478917d1f811d420772ec/contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49", size = 250915 }, + { url = "https://files.pythonhosted.org/packages/e1/5d/3056c167fa4486900dfbd7e26a2fdc2338dc58eee36d490a0ed3ddda5ded/contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66", size = 310443 }, + { url = "https://files.pythonhosted.org/packages/ca/c2/1a612e475492e07f11c8e267ea5ec1ce0d89971be496c195e27afa97e14a/contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081", size = 348548 }, + { url = "https://files.pythonhosted.org/packages/45/cf/2c2fc6bb5874158277b4faf136847f0689e1b1a1f640a36d76d52e78907c/contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1", size = 319118 }, + { url = "https://files.pythonhosted.org/packages/03/33/003065374f38894cdf1040cef474ad0546368eea7e3a51d48b8a423961f8/contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d", size = 323162 }, + { url = "https://files.pythonhosted.org/packages/42/80/e637326e85e4105a802e42959f56cff2cd39a6b5ef68d5d9aee3ea5f0e4c/contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c", size = 1265396 }, + { url = "https://files.pythonhosted.org/packages/7c/3b/8cbd6416ca1bbc0202b50f9c13b2e0b922b64be888f9d9ee88e6cfabfb51/contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb", size = 1324297 }, + { url = "https://files.pythonhosted.org/packages/4d/2c/021a7afaa52fe891f25535506cc861c30c3c4e5a1c1ce94215e04b293e72/contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c", size = 171808 }, + { url = "https://files.pythonhosted.org/packages/8d/2f/804f02ff30a7fae21f98198828d0857439ec4c91a96e20cf2d6c49372966/contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67", size = 217181 }, + { url = "https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f", size = 267838 }, + { url = "https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6", size = 251549 }, + { url = "https://files.pythonhosted.org/packages/51/3d/aa0fe6ae67e3ef9f178389e4caaaa68daf2f9024092aa3c6032e3d174670/contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639", size = 303177 }, + { url = "https://files.pythonhosted.org/packages/56/c3/c85a7e3e0cab635575d3b657f9535443a6f5d20fac1a1911eaa4bbe1aceb/contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c", size = 341735 }, + { url = "https://files.pythonhosted.org/packages/dd/8d/20f7a211a7be966a53f474bc90b1a8202e9844b3f1ef85f3ae45a77151ee/contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06", size = 314679 }, + { url = "https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09", size = 320549 }, + { url = "https://files.pythonhosted.org/packages/0f/96/fdb2552a172942d888915f3a6663812e9bc3d359d53dafd4289a0fb462f0/contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd", size = 1263068 }, + { url = "https://files.pythonhosted.org/packages/2a/25/632eab595e3140adfa92f1322bf8915f68c932bac468e89eae9974cf1c00/contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35", size = 1322833 }, + { url = "https://files.pythonhosted.org/packages/73/e3/69738782e315a1d26d29d71a550dbbe3eb6c653b028b150f70c1a5f4f229/contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb", size = 172681 }, + { url = "https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b", size = 218283 }, + { url = "https://files.pythonhosted.org/packages/53/a1/d20415febfb2267af2d7f06338e82171824d08614084714fb2c1dac9901f/contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3", size = 267879 }, + { url = "https://files.pythonhosted.org/packages/aa/45/5a28a3570ff6218d8bdfc291a272a20d2648104815f01f0177d103d985e1/contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7", size = 251573 }, + { url = "https://files.pythonhosted.org/packages/39/1c/d3f51540108e3affa84f095c8b04f0aa833bb797bc8baa218a952a98117d/contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84", size = 303184 }, + { url = "https://files.pythonhosted.org/packages/00/56/1348a44fb6c3a558c1a3a0cd23d329d604c99d81bf5a4b58c6b71aab328f/contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0", size = 340262 }, + { url = "https://files.pythonhosted.org/packages/2b/23/00d665ba67e1bb666152131da07e0f24c95c3632d7722caa97fb61470eca/contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b", size = 313806 }, + { url = "https://files.pythonhosted.org/packages/5a/42/3cf40f7040bb8362aea19af9a5fb7b32ce420f645dd1590edcee2c657cd5/contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da", size = 319710 }, + { url = "https://files.pythonhosted.org/packages/05/32/f3bfa3fc083b25e1a7ae09197f897476ee68e7386e10404bdf9aac7391f0/contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14", size = 1264107 }, + { url = "https://files.pythonhosted.org/packages/1c/1e/1019d34473a736664f2439542b890b2dc4c6245f5c0d8cdfc0ccc2cab80c/contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8", size = 1322458 }, + { url = "https://files.pythonhosted.org/packages/22/85/4f8bfd83972cf8909a4d36d16b177f7b8bdd942178ea4bf877d4a380a91c/contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294", size = 172643 }, + { url = "https://files.pythonhosted.org/packages/cc/4a/fb3c83c1baba64ba90443626c228ca14f19a87c51975d3b1de308dd2cf08/contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087", size = 218301 }, + { url = "https://files.pythonhosted.org/packages/76/65/702f4064f397821fea0cb493f7d3bc95a5d703e20954dce7d6d39bacf378/contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8", size = 278972 }, + { url = "https://files.pythonhosted.org/packages/80/85/21f5bba56dba75c10a45ec00ad3b8190dbac7fd9a8a8c46c6116c933e9cf/contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b", size = 263375 }, + { url = "https://files.pythonhosted.org/packages/0a/64/084c86ab71d43149f91ab3a4054ccf18565f0a8af36abfa92b1467813ed6/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973", size = 307188 }, + { url = "https://files.pythonhosted.org/packages/3d/ff/d61a4c288dc42da0084b8d9dc2aa219a850767165d7d9a9c364ff530b509/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18", size = 345644 }, + { url = "https://files.pythonhosted.org/packages/ca/aa/00d2313d35ec03f188e8f0786c2fc61f589306e02fdc158233697546fd58/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8", size = 317141 }, + { url = "https://files.pythonhosted.org/packages/8d/6a/b5242c8cb32d87f6abf4f5e3044ca397cb1a76712e3fa2424772e3ff495f/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6", size = 323469 }, + { url = "https://files.pythonhosted.org/packages/6f/a6/73e929d43028a9079aca4bde107494864d54f0d72d9db508a51ff0878593/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2", size = 1260894 }, + { url = "https://files.pythonhosted.org/packages/2b/1e/1e726ba66eddf21c940821df8cf1a7d15cb165f0682d62161eaa5e93dae1/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927", size = 1314829 }, + { url = "https://files.pythonhosted.org/packages/b3/e3/b9f72758adb6ef7397327ceb8b9c39c75711affb220e4f53c745ea1d5a9a/contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8", size = 265518 }, + { url = "https://files.pythonhosted.org/packages/ec/22/19f5b948367ab5260fb41d842c7a78dae645603881ea6bc39738bcfcabf6/contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c", size = 249350 }, + { url = "https://files.pythonhosted.org/packages/26/76/0c7d43263dd00ae21a91a24381b7e813d286a3294d95d179ef3a7b9fb1d7/contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca", size = 309167 }, + { url = "https://files.pythonhosted.org/packages/96/3b/cadff6773e89f2a5a492c1a8068e21d3fccaf1a1c1df7d65e7c8e3ef60ba/contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f", size = 348279 }, + { url = "https://files.pythonhosted.org/packages/e1/86/158cc43aa549d2081a955ab11c6bdccc7a22caacc2af93186d26f5f48746/contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc", size = 318519 }, + { url = "https://files.pythonhosted.org/packages/05/11/57335544a3027e9b96a05948c32e566328e3a2f84b7b99a325b7a06d2b06/contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2", size = 321922 }, + { url = "https://files.pythonhosted.org/packages/0b/e3/02114f96543f4a1b694333b92a6dcd4f8eebbefcc3a5f3bbb1316634178f/contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e", size = 1258017 }, + { url = "https://files.pythonhosted.org/packages/f3/3b/bfe4c81c6d5881c1c643dde6620be0b42bf8aab155976dd644595cfab95c/contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800", size = 1316773 }, + { url = "https://files.pythonhosted.org/packages/f1/17/c52d2970784383cafb0bd918b6fb036d98d96bbf0bc1befb5d1e31a07a70/contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5", size = 171353 }, + { url = "https://files.pythonhosted.org/packages/53/23/db9f69676308e094d3c45f20cc52e12d10d64f027541c995d89c11ad5c75/contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843", size = 211817 }, + { url = "https://files.pythonhosted.org/packages/d1/09/60e486dc2b64c94ed33e58dcfb6f808192c03dfc5574c016218b9b7680dc/contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c", size = 261886 }, + { url = "https://files.pythonhosted.org/packages/19/20/b57f9f7174fcd439a7789fb47d764974ab646fa34d1790551de386457a8e/contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779", size = 311008 }, + { url = "https://files.pythonhosted.org/packages/74/fc/5040d42623a1845d4f17a418e590fd7a79ae8cb2bad2b2f83de63c3bdca4/contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4", size = 215690 }, + { url = "https://files.pythonhosted.org/packages/2b/24/dc3dcd77ac7460ab7e9d2b01a618cb31406902e50e605a8d6091f0a8f7cc/contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0", size = 261894 }, + { url = "https://files.pythonhosted.org/packages/b1/db/531642a01cfec39d1682e46b5457b07cf805e3c3c584ec27e2a6223f8f6c/contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102", size = 311099 }, + { url = "https://files.pythonhosted.org/packages/38/1e/94bda024d629f254143a134eead69e21c836429a2a6ce82209a00ddcb79a/contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb", size = 215838 }, +] + +[[package]] +name = "cryptography" +version = "44.0.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/09/8cc67f9b84730ad330b3b72cf867150744bf07ff113cda21a15a1c6d2c7c/cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", size = 6541833 }, + { url = "https://files.pythonhosted.org/packages/7e/5b/3759e30a103144e29632e7cb72aec28cedc79e514b2ea8896bb17163c19b/cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", size = 3922710 }, + { url = "https://files.pythonhosted.org/packages/5f/58/3b14bf39f1a0cfd679e753e8647ada56cddbf5acebffe7db90e184c76168/cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", size = 4137546 }, + { url = "https://files.pythonhosted.org/packages/98/65/13d9e76ca19b0ba5603d71ac8424b5694415b348e719db277b5edc985ff5/cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", size = 3915420 }, + { url = "https://files.pythonhosted.org/packages/b1/07/40fe09ce96b91fc9276a9ad272832ead0fddedcba87f1190372af8e3039c/cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", size = 4154498 }, + { url = "https://files.pythonhosted.org/packages/75/ea/af65619c800ec0a7e4034207aec543acdf248d9bffba0533342d1bd435e1/cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", size = 3932569 }, + { url = "https://files.pythonhosted.org/packages/4e/d5/9cc182bf24c86f542129565976c21301d4ac397e74bf5a16e48241aab8a6/cryptography-44.0.0-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:60eb32934076fa07e4316b7b2742fa52cbb190b42c2df2863dbc4230a0a9b385", size = 4164756 }, + { url = "https://files.pythonhosted.org/packages/c7/af/d1deb0c04d59612e3d5e54203159e284d3e7a6921e565bb0eeb6269bdd8a/cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", size = 4016721 }, + { url = "https://files.pythonhosted.org/packages/bd/69/7ca326c55698d0688db867795134bdfac87136b80ef373aaa42b225d6dd5/cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", size = 4240915 }, + { url = "https://files.pythonhosted.org/packages/ef/d4/cae11bf68c0f981e0413906c6dd03ae7fa864347ed5fac40021df1ef467c/cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", size = 2757925 }, + { url = "https://files.pythonhosted.org/packages/64/b1/50d7739254d2002acae64eed4fc43b24ac0cc44bf0a0d388d1ca06ec5bb1/cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", size = 3202055 }, + { url = "https://files.pythonhosted.org/packages/11/18/61e52a3d28fc1514a43b0ac291177acd1b4de00e9301aaf7ef867076ff8a/cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", size = 6542801 }, + { url = "https://files.pythonhosted.org/packages/1a/07/5f165b6c65696ef75601b781a280fc3b33f1e0cd6aa5a92d9fb96c410e97/cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", size = 3922613 }, + { url = "https://files.pythonhosted.org/packages/28/34/6b3ac1d80fc174812486561cf25194338151780f27e438526f9c64e16869/cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", size = 4137925 }, + { url = "https://files.pythonhosted.org/packages/d0/c7/c656eb08fd22255d21bc3129625ed9cd5ee305f33752ef2278711b3fa98b/cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", size = 3915417 }, + { url = "https://files.pythonhosted.org/packages/ef/82/72403624f197af0db6bac4e58153bc9ac0e6020e57234115db9596eee85d/cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", size = 4155160 }, + { url = "https://files.pythonhosted.org/packages/a2/cd/2f3c440913d4329ade49b146d74f2e9766422e1732613f57097fea61f344/cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", size = 3932331 }, + { url = "https://files.pythonhosted.org/packages/31/d9/90409720277f88eb3ab72f9a32bfa54acdd97e94225df699e7713e850bd4/cryptography-44.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9abcc2e083cbe8dde89124a47e5e53ec38751f0d7dfd36801008f316a127d7ba", size = 4165207 }, + { url = "https://files.pythonhosted.org/packages/7f/df/8be88797f0a1cca6e255189a57bb49237402b1880d6e8721690c5603ac23/cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", size = 4017372 }, + { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 }, + { url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 }, + { url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 }, + { url = "https://files.pythonhosted.org/packages/77/d4/fea74422326388bbac0c37b7489a0fcb1681a698c3b875959430ba550daa/cryptography-44.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731", size = 3338857 }, + { url = "https://files.pythonhosted.org/packages/1a/aa/ba8a7467c206cb7b62f09b4168da541b5109838627f582843bbbe0235e8e/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4", size = 3850615 }, + { url = "https://files.pythonhosted.org/packages/89/fa/b160e10a64cc395d090105be14f399b94e617c879efd401188ce0fea39ee/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", size = 4081622 }, + { url = "https://files.pythonhosted.org/packages/47/8f/20ff0656bb0cf7af26ec1d01f780c5cfbaa7666736063378c5f48558b515/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", size = 3867546 }, + { url = "https://files.pythonhosted.org/packages/38/d9/28edf32ee2fcdca587146bcde90102a7319b2f2c690edfa627e46d586050/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa", size = 4090937 }, + { url = "https://files.pythonhosted.org/packages/cc/9d/37e5da7519de7b0b070a3fedd4230fe76d50d2a21403e0f2153d70ac4163/cryptography-44.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", size = 3128774 }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, +] + +[[package]] +name = "deprecation" +version = "2.1.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, +] + +[[package]] +name = "docstring-parser" +version = "0.16" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/08/12/9c22a58c0b1e29271051222d8906257616da84135af9ed167c9e28f85cb3/docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e", size = 26565 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637", size = 36533 }, +] + +[[package]] +name = "elasticsearch" +version = "7.17.12" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "certifi" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/ee/68fdc04a4ef1a5026d6331196109714c8569ee70d072af8a479fa60f33c8/elasticsearch-7.17.12.tar.gz", hash = "sha256:a1f5733ae8cf1dbf0a78593389f2503c87dd97429976099832bf0626cdfaac8b", size = 248018 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/9b/3dbb82aa27b4cbafd2600dcd74c88c4c710cfdacc3249d9c581916cfe359/elasticsearch-7.17.12-py2.py3-none-any.whl", hash = "sha256:468fd5eef703c0d9238e29bcaf3a6fe4d6b092f917959fbf41f48f8fea3df2f8", size = 385970 }, +] + +[[package]] +name = "elasticsearch-dsl" +version = "7.4.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "elasticsearch" }, + { name = "python-dateutil" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/a1/86b304895d346eb5d4c51584f7d3f02ba91131efbe2545e867b62275976b/elasticsearch-dsl-7.4.0.tar.gz", hash = "sha256:c4a7b93882918a413b63bed54018a1685d7410ffd8facbc860ee7fd57f214a6d", size = 56549 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/1e/c59c873cc63643b277e80efec0c5a9714798e4716ca43e97fba35b94e811/elasticsearch_dsl-7.4.0-py2.py3-none-any.whl", hash = "sha256:046ea10820b94c075081b528b4526c5bc776bda4226d702f269a5f203232064b", size = 63701 }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 }, +] + +[[package]] +name = "fairmat-readers-xrd" +version = "0.0.7" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pint" }, + { name = "xmltodict" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/13/e3/ed8e3e752df895429a1082c4b27a303c8efe2caabe5c74b58b6c216a1587/fairmat_readers_xrd-0.0.7.tar.gz", hash = "sha256:046249b27a52dd4d81a798040bedb37fc20697bfb82e467cafb8abf1e2922f88", size = 6856326 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/b6/f178c199628cfb55799401d5e98f63040ba12f79521eecddb177956ea1ce/fairmat_readers_xrd-0.0.7-py3-none-any.whl", hash = "sha256:d33699a9a086cf34341d057ac224835940cb40d32a65495d6f26f05b79b51428", size = 22308 }, +] + +[[package]] +name = "fonttools" +version = "4.55.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4e/053fe1b5c0ce346c0a9d0557492c654362bafb14f026eae0d3ee98009152/fonttools-4.55.0.tar.gz", hash = "sha256:7636acc6ab733572d5e7eec922b254ead611f1cdad17be3f0be7418e8bfaca71", size = 3490431 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/8c/57600ebff0b2119b725bc11eeea32b17b0220f3fae71b5fff082a1891270/fonttools-4.55.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:51c029d4c0608a21a3d3d169dfc3fb776fde38f00b35ca11fdab63ba10a16f61", size = 2770301 }, + { url = "https://files.pythonhosted.org/packages/02/94/dff7e57a751918b133a303418202b4f43e3dc3c887e2a648089e0463b1a7/fonttools-4.55.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bca35b4e411362feab28e576ea10f11268b1aeed883b9f22ed05675b1e06ac69", size = 2295806 }, + { url = "https://files.pythonhosted.org/packages/09/31/ff18d79d449510850fe4a96c0ba50ee6d0b9b815a6b5a2489d809e9a8db5/fonttools-4.55.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ce4ba6981e10f7e0ccff6348e9775ce25ffadbee70c9fd1a3737e3e9f5fa74f", size = 4577709 }, + { url = "https://files.pythonhosted.org/packages/c4/03/8136887d1b0b7a9831c7e8e2598c0e5851e31cc2231295769350349a236b/fonttools-4.55.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31d00f9852a6051dac23294a4cf2df80ced85d1d173a61ba90a3d8f5abc63c60", size = 4633411 }, + { url = "https://files.pythonhosted.org/packages/a7/37/86ac06a7505e57de2daaf0a1cc885b7767c74d376ef2cf82933e8ef79399/fonttools-4.55.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e198e494ca6e11f254bac37a680473a311a88cd40e58f9cc4dc4911dfb686ec6", size = 4572887 }, + { url = "https://files.pythonhosted.org/packages/0d/85/1e429359d1842a104b638433587ff62d9dc8339a8c467787087962502a53/fonttools-4.55.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7208856f61770895e79732e1dcbe49d77bd5783adf73ae35f87fcc267df9db81", size = 4745036 }, + { url = "https://files.pythonhosted.org/packages/81/65/763ac1fe2a3e52220f7a7fd2a5de0c784045e773aa9d299450019ac66f9e/fonttools-4.55.0-cp310-cp310-win32.whl", hash = "sha256:e7e6a352ff9e46e8ef8a3b1fe2c4478f8a553e1b5a479f2e899f9dc5f2055880", size = 2170126 }, + { url = "https://files.pythonhosted.org/packages/3e/67/93939482715e629c4bd6fd1f3d154c1bf45b81ee383f50e44d31fa542f83/fonttools-4.55.0-cp310-cp310-win_amd64.whl", hash = "sha256:636caaeefe586d7c84b5ee0734c1a5ab2dae619dc21c5cf336f304ddb8f6001b", size = 2213882 }, + { url = "https://files.pythonhosted.org/packages/17/50/75461e050ded02b9eaa8097df52c2a8752cf4c24db8b44b150755b76c8f1/fonttools-4.55.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fa34aa175c91477485c44ddfbb51827d470011e558dfd5c7309eb31bef19ec51", size = 2771444 }, + { url = "https://files.pythonhosted.org/packages/de/5e/98130db3770e8d12f70aa61f2555c32284d4e9c592862469d32b7ee48626/fonttools-4.55.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:37dbb3fdc2ef7302d3199fb12468481cbebaee849e4b04bc55b77c24e3c49189", size = 2296439 }, + { url = "https://files.pythonhosted.org/packages/17/35/36fe271296fe7624811f5261a0662155e075b43b79ffacea85a03f36593d/fonttools-4.55.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5263d8e7ef3c0ae87fbce7f3ec2f546dc898d44a337e95695af2cd5ea21a967", size = 4883141 }, + { url = "https://files.pythonhosted.org/packages/47/2b/9bf7527260d265281dd812951aa22f3d1c331bcc91e86e7038dc6b9737cb/fonttools-4.55.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f307f6b5bf9e86891213b293e538d292cd1677e06d9faaa4bf9c086ad5f132f6", size = 4931050 }, + { url = "https://files.pythonhosted.org/packages/0b/7b/7324d3aa8424c71b63ba2e76eb4a46d6947e23065996e755c1682e666f42/fonttools-4.55.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f0a4b52238e7b54f998d6a56b46a2c56b59c74d4f8a6747fb9d4042190f37cd3", size = 4894154 }, + { url = "https://files.pythonhosted.org/packages/2c/53/a54926be69e43d277877106a6cbfab467cb02f9c756258c7c9932e8eb382/fonttools-4.55.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3e569711464f777a5d4ef522e781dc33f8095ab5efd7548958b36079a9f2f88c", size = 5064715 }, + { url = "https://files.pythonhosted.org/packages/0c/f7/9602868af9a2dfc4659637a752da8691655e81a2d6138231dcaa1efe8840/fonttools-4.55.0-cp311-cp311-win32.whl", hash = "sha256:2b3ab90ec0f7b76c983950ac601b58949f47aca14c3f21eed858b38d7ec42b05", size = 2169536 }, + { url = "https://files.pythonhosted.org/packages/30/57/9e2ddd16ad84ab26616ae4346b3b15e9a50669ca1b442cbe760af073807c/fonttools-4.55.0-cp311-cp311-win_amd64.whl", hash = "sha256:aa046f6a63bb2ad521004b2769095d4c9480c02c1efa7d7796b37826508980b6", size = 2215265 }, + { url = "https://files.pythonhosted.org/packages/ec/79/38209f8f6235021b6209147ec7b2f748afde65c59c6274ac96fef3912094/fonttools-4.55.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:838d2d8870f84fc785528a692e724f2379d5abd3fc9dad4d32f91cf99b41e4a7", size = 2765205 }, + { url = "https://files.pythonhosted.org/packages/e3/07/434a21eab80524613c9753db2ff21d6bc3cf264412d8833a85022fd39088/fonttools-4.55.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f46b863d74bab7bb0d395f3b68d3f52a03444964e67ce5c43ce43a75efce9246", size = 2293908 }, + { url = "https://files.pythonhosted.org/packages/c8/63/aa3274d9be36aaaef8c087e413cbc1dd682ff94776a82c111bad88482947/fonttools-4.55.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33b52a9cfe4e658e21b1f669f7309b4067910321757fec53802ca8f6eae96a5a", size = 4795901 }, + { url = "https://files.pythonhosted.org/packages/fc/0b/dbe13f2c8d745ffdf5c2bc25391263927d4ec2b927e44d5d5f70cd372873/fonttools-4.55.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:732a9a63d6ea4a81b1b25a1f2e5e143761b40c2e1b79bb2b68e4893f45139a40", size = 4879252 }, + { url = "https://files.pythonhosted.org/packages/46/85/eefb400ec66e9e7c159d13c72aba473d9c2a0c556d812b0916418aa9019e/fonttools-4.55.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7dd91ac3fcb4c491bb4763b820bcab6c41c784111c24172616f02f4bc227c17d", size = 4773177 }, + { url = "https://files.pythonhosted.org/packages/93/75/f06d175df4d7dbad97061c8698210ce4231cce9aa56cc263f3b6b5340540/fonttools-4.55.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1f0e115281a32ff532118aa851ef497a1b7cda617f4621c1cdf81ace3e36fb0c", size = 5032809 }, + { url = "https://files.pythonhosted.org/packages/78/eb/f3520ba63b5e4a034f2bfd34d8ab32eb95a1bf37a1f792ea48461fba08f6/fonttools-4.55.0-cp312-cp312-win32.whl", hash = "sha256:6c99b5205844f48a05cb58d4a8110a44d3038c67ed1d79eb733c4953c628b0f6", size = 2157762 }, + { url = "https://files.pythonhosted.org/packages/aa/d1/5f007861cab890f2a35a19a1d2a2815655ec10b0ea7fd881b1d3aaab0076/fonttools-4.55.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8c8c76037d05652510ae45be1cd8fb5dd2fd9afec92a25374ac82255993d57c", size = 2203746 }, + { url = "https://files.pythonhosted.org/packages/c3/87/a669ac26c6077e37ffb06abf29c5571789eefe518d06c52df392181ee694/fonttools-4.55.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8118dc571921dc9e4b288d9cb423ceaf886d195a2e5329cc427df82bba872cd9", size = 2752519 }, + { url = "https://files.pythonhosted.org/packages/0c/e9/4822ad238fe215133c7df20f1cdb1a58cfb634a31523e77ff0fb2033970a/fonttools-4.55.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01124f2ca6c29fad4132d930da69158d3f49b2350e4a779e1efbe0e82bd63f6c", size = 2286819 }, + { url = "https://files.pythonhosted.org/packages/3e/a4/d7941c3897129e60fe68d20e4819fda4d0c4858d77badae0e80ca6440b36/fonttools-4.55.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ffd58d2691f11f7c8438796e9f21c374828805d33e83ff4b76e4635633674c", size = 4770382 }, + { url = "https://files.pythonhosted.org/packages/31/cf/c51ea1348f9fba9c627439afad9dee0090040809ab431f4422b5bfdda34c/fonttools-4.55.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5435e5f1eb893c35c2bc2b9cd3c9596b0fcb0a59e7a14121562986dd4c47b8dd", size = 4858336 }, + { url = "https://files.pythonhosted.org/packages/73/be/36c1fe0e5c9a96b068ddd7e82001243bbe7fe12549c8d14e1bd025bf40c9/fonttools-4.55.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d12081729280c39d001edd0f4f06d696014c26e6e9a0a55488fabc37c28945e4", size = 4756072 }, + { url = "https://files.pythonhosted.org/packages/5c/18/6dd381c29f215a017f79aa9fea0722424a0046b47991c4390a78ff87ce0c/fonttools-4.55.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7ad1f1b98ab6cb927ab924a38a8649f1ffd7525c75fe5b594f5dab17af70e18", size = 5008668 }, + { url = "https://files.pythonhosted.org/packages/b8/95/316f20092b389b927dba1d1dccd3f541853f96e707e210f1b9f4e7bacdd5/fonttools-4.55.0-cp313-cp313-win32.whl", hash = "sha256:abe62987c37630dca69a104266277216de1023cf570c1643bb3a19a9509e7a1b", size = 2155841 }, + { url = "https://files.pythonhosted.org/packages/35/ca/b4638aa3e446184892e2f9cc8ef44bb506f47fea04580df7fb84f5a4363d/fonttools-4.55.0-cp313-cp313-win_amd64.whl", hash = "sha256:2863555ba90b573e4201feaf87a7e71ca3b97c05aa4d63548a4b69ea16c9e998", size = 2200587 }, + { url = "https://files.pythonhosted.org/packages/ca/83/12c26ce25df9de2d247c31f27cddd1acd08078ad18631032db6ce946f01e/fonttools-4.55.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f901cef813f7c318b77d1c5c14cf7403bae5cb977cede023e22ba4316f0a8f6", size = 2773168 }, + { url = "https://files.pythonhosted.org/packages/db/19/03e7de9889c668e19c34bfb6c261252294b6ddeb06cd5f9864bf01f162a1/fonttools-4.55.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c9679fc0dd7e8a5351d321d8d29a498255e69387590a86b596a45659a39eb0d", size = 2297131 }, + { url = "https://files.pythonhosted.org/packages/e3/9d/5f981c69f99d07e59a7f2f58efa91e87ffc3bbd548a2979704a3382f53df/fonttools-4.55.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2820a8b632f3307ebb0bf57948511c2208e34a4939cf978333bc0a3f11f838", size = 4582322 }, + { url = "https://files.pythonhosted.org/packages/1d/3e/0841e7bf38ad317c960992dd03bac041899a1c21396013e6ddcfd2bc48c5/fonttools-4.55.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23bbbb49bec613a32ed1b43df0f2b172313cee690c2509f1af8fdedcf0a17438", size = 4640834 }, + { url = "https://files.pythonhosted.org/packages/3a/0f/39e95369fae73e06b5110fdc245f71c82f2d6870a2cef96440045a2a3b23/fonttools-4.55.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a656652e1f5d55b9728937a7e7d509b73d23109cddd4e89ee4f49bde03b736c6", size = 4575466 }, + { url = "https://files.pythonhosted.org/packages/5e/e6/fed351dec03c335eeaf3d276c1b3995c33c59bde0ed7911bc8d55661a41b/fonttools-4.55.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f50a1f455902208486fbca47ce33054208a4e437b38da49d6721ce2fef732fcf", size = 4748309 }, + { url = "https://files.pythonhosted.org/packages/c2/8c/6295c8b395f26b7c6be42ac55308b704b4c0709a2e7770c54d64810150c1/fonttools-4.55.0-cp39-cp39-win32.whl", hash = "sha256:161d1ac54c73d82a3cded44202d0218ab007fde8cf194a23d3dd83f7177a2f03", size = 2170761 }, + { url = "https://files.pythonhosted.org/packages/9b/fa/0bd359e011f71afb11f33d8f7adc9cd81213a42c8e62d05ba75befd228ad/fonttools-4.55.0-cp39-cp39-win_amd64.whl", hash = "sha256:ca7fd6987c68414fece41c96836e945e1f320cda56fc96ffdc16e54a44ec57a2", size = 2214479 }, + { url = "https://files.pythonhosted.org/packages/b4/4a/786589606d4989cb34d8bc766cd687d955aaf3039c367fe7104bcf82dc98/fonttools-4.55.0-py3-none-any.whl", hash = "sha256:12db5888cd4dd3fcc9f0ee60c6edd3c7e1fd44b7dd0f31381ea03df68f8a153f", size = 1100249 }, +] + +[[package]] +name = "h11" +version = "0.14.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, +] + +[[package]] +name = "h5py" +version = "3.12.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/0c/5c2b0a88158682aeafb10c1c2b735df5bc31f165bfe192f2ee9f2a23b5f1/h5py-3.12.1.tar.gz", hash = "sha256:326d70b53d31baa61f00b8aa5f95c2fcb9621a3ee8365d770c551a13dbbcbfdf", size = 411457 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/7d/b21045fbb004ad8bb6fb3be4e6ca903841722706f7130b9bba31ef2f88e3/h5py-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f0f1a382cbf494679c07b4371f90c70391dedb027d517ac94fa2c05299dacda", size = 3402133 }, + { url = "https://files.pythonhosted.org/packages/29/a7/3c2a33fba1da64a0846744726fd067a92fb8abb887875a0dd8e3bac8b45d/h5py-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb65f619dfbdd15e662423e8d257780f9a66677eae5b4b3fc9dca70b5fd2d2a3", size = 2866436 }, + { url = "https://files.pythonhosted.org/packages/1e/d0/4bf67c3937a2437c20844165766ddd1a1817ae6b9544c3743050d8e0f403/h5py-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b15d8dbd912c97541312c0e07438864d27dbca857c5ad634de68110c6beb1c2", size = 5168596 }, + { url = "https://files.pythonhosted.org/packages/85/bc/e76f4b2096e0859225f5441d1b7f5e2041fffa19fc2c16756c67078417aa/h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59685fe40d8c1fbbee088c88cd4da415a2f8bee5c270337dc5a1c4aa634e3307", size = 5341537 }, + { url = "https://files.pythonhosted.org/packages/99/bd/fb8ed45308bb97e04c02bd7aed324ba11e6a4bf9ed73967ca2a168e9cf92/h5py-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:577d618d6b6dea3da07d13cc903ef9634cde5596b13e832476dd861aaf651f3e", size = 2990575 }, + { url = "https://files.pythonhosted.org/packages/33/61/c463dc5fc02fbe019566d067a9d18746cd3c664f29c9b8b3c3f9ed025365/h5py-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccd9006d92232727d23f784795191bfd02294a4f2ba68708825cb1da39511a93", size = 3410828 }, + { url = "https://files.pythonhosted.org/packages/95/9d/eb91a9076aa998bb2179d6b1788055ea09cdf9d6619cd967f1d3321ed056/h5py-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad8a76557880aed5234cfe7279805f4ab5ce16b17954606cca90d578d3e713ef", size = 2872586 }, + { url = "https://files.pythonhosted.org/packages/b0/62/e2b1f9723ff713e3bd3c16dfeceec7017eadc21ef063d8b7080c0fcdc58a/h5py-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1473348139b885393125126258ae2d70753ef7e9cec8e7848434f385ae72069e", size = 5273038 }, + { url = "https://files.pythonhosted.org/packages/e1/89/118c3255d6ff2db33b062ec996a762d99ae50c21f54a8a6047ae8eda1b9f/h5py-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:018a4597f35092ae3fb28ee851fdc756d2b88c96336b8480e124ce1ac6fb9166", size = 5452688 }, + { url = "https://files.pythonhosted.org/packages/1d/4d/cbd3014eb78d1e449b29beba1f3293a841aa8086c6f7968c383c2c7ff076/h5py-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fdf95092d60e8130ba6ae0ef7a9bd4ade8edbe3569c13ebbaf39baefffc5ba4", size = 3006095 }, + { url = "https://files.pythonhosted.org/packages/d4/e1/ea9bfe18a3075cdc873f0588ff26ce394726047653557876d7101bf0c74e/h5py-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06a903a4e4e9e3ebbc8b548959c3c2552ca2d70dac14fcfa650d9261c66939ed", size = 3372538 }, + { url = "https://files.pythonhosted.org/packages/0d/74/1009b663387c025e8fa5f3ee3cf3cd0d99b1ad5c72eeb70e75366b1ce878/h5py-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b3b8f3b48717e46c6a790e3128d39c61ab595ae0a7237f06dfad6a3b51d5351", size = 2868104 }, + { url = "https://files.pythonhosted.org/packages/af/52/c604adc06280c15a29037d4aa79a24fe54d8d0b51085e81ed24b2fa995f7/h5py-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:050a4f2c9126054515169c49cb900949814987f0c7ae74c341b0c9f9b5056834", size = 5194606 }, + { url = "https://files.pythonhosted.org/packages/fa/63/eeaacff417b393491beebabb8a3dc5342950409eb6d7b39d437289abdbae/h5py-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c4b41d1019322a5afc5082864dfd6359f8935ecd37c11ac0029be78c5d112c9", size = 5413256 }, + { url = "https://files.pythonhosted.org/packages/86/f7/bb465dcb92ca3521a15cbe1031f6d18234dbf1fb52a6796a00bfaa846ebf/h5py-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc", size = 2993055 }, + { url = "https://files.pythonhosted.org/packages/23/1c/ecdd0efab52c24f2a9bf2324289828b860e8dd1e3c5ada3cf0889e14fdc1/h5py-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:513171e90ed92236fc2ca363ce7a2fc6f2827375efcbb0cc7fbdd7fe11fecafc", size = 3346239 }, + { url = "https://files.pythonhosted.org/packages/93/cd/5b6f574bf3e318bbe305bc93ba45181676550eb44ba35e006d2e98004eaa/h5py-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:59400f88343b79655a242068a9c900001a34b63e3afb040bd7cdf717e440f653", size = 2843416 }, + { url = "https://files.pythonhosted.org/packages/8a/4f/b74332f313bfbe94ba03fff784219b9db385e6139708e55b11490149f90a/h5py-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e465aee0ec353949f0f46bf6c6f9790a2006af896cee7c178a8c3e5090aa32", size = 5154390 }, + { url = "https://files.pythonhosted.org/packages/1a/57/93ea9e10a6457ea8d3b867207deb29a527e966a08a84c57ffd954e32152a/h5py-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba51c0c5e029bb5420a343586ff79d56e7455d496d18a30309616fdbeed1068f", size = 5378244 }, + { url = "https://files.pythonhosted.org/packages/50/51/0bbf3663062b2eeee78aa51da71e065f8a0a6e3cb950cc7020b4444999e6/h5py-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8", size = 2979760 }, + { url = "https://files.pythonhosted.org/packages/f4/dc/28d7a5fd0d1c80df3f35c0db7080d51a10b6fa20efe4c3ba8e776fc53728/h5py-3.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2b8dd64f127d8b324f5d2cd1c0fd6f68af69084e9e47d27efeb9e28e685af3e", size = 3413578 }, + { url = "https://files.pythonhosted.org/packages/a5/3f/d273b41bc1b67d2f5a7d707d24d9e04c7e3809a83ca8d9e03d6abb673637/h5py-3.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4532c7e97fbef3d029735db8b6f5bf01222d9ece41e309b20d63cfaae2fb5c4d", size = 2877611 }, + { url = "https://files.pythonhosted.org/packages/7b/f9/e597b5fef05f161c67a18e8c61bf105209fd242f2612b0ad1aff7ecb0b9c/h5py-3.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdf6d7936fa824acfa27305fe2d9f39968e539d831c5bae0e0d83ed521ad1ac", size = 5190324 }, + { url = "https://files.pythonhosted.org/packages/8e/1d/631c200e6d5d067035c58028f305cf7f29c494ddfb9b9484a907a367c8bd/h5py-3.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84342bffd1f82d4f036433e7039e241a243531a1d3acd7341b35ae58cdab05bf", size = 5361780 }, + { url = "https://files.pythonhosted.org/packages/b2/ab/4db20b08a70c3cd88aab63f46c62a97eaf978bd000eb10e303d3b3ceb38e/h5py-3.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:62be1fc0ef195891949b2c627ec06bc8e837ff62d5b911b6e42e38e0f20a897d", size = 3000291 }, +] + +[[package]] +name = "hjson" +version = "3.1.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/e5/0b56d723a76ca67abadbf7fb71609fb0ea7e6926e94fcca6c65a85b36a0e/hjson-3.1.0.tar.gz", hash = "sha256:55af475a27cf83a7969c808399d7bccdec8fb836a07ddbd574587593b9cdcf75", size = 40541 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/7f/13cd798d180af4bf4c0ceddeefba2b864a63c71645abc0308b768d67bb81/hjson-3.1.0-py3-none-any.whl", hash = "sha256:65713cdcf13214fb554eb8b4ef803419733f4f5e551047c9b711098ab7186b89", size = 54018 }, +] + +[[package]] +name = "httpcore" +version = "1.0.7" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 }, +] + +[[package]] +name = "httpx" +version = "0.27.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, + { name = "sniffio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/82/08f8c936781f67d9e6b9eeb8a0c8b4e406136ea4c3d1f89a5db71d42e0e6/httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2", size = 144189 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0", size = 76395 }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "importlib-metadata" +version = "7.1.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a0/fc/c4e6078d21fc4fa56300a241b87eae76766aa380a23fc450fc85bb7bf547/importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2", size = 52120 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/0a/679461c511447ffaf176567d5c496d1de27cbe34a87df6677d7171b2fbd4/importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", size = 24409 }, +] + +[[package]] +name = "importlib-resources" +version = "6.4.5" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "zipp", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/be/f3e8c6081b684f176b761e6a2fef02a0be939740ed6f54109a2951d806f3/importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065", size = 43372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717", size = 36115 }, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 }, +] + +[[package]] +name = "jmespath" +version = "1.0.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256 }, +] + +[[package]] +name = "joblib" +version = "1.4.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 }, +] + +[[package]] +name = "jwcrypto" +version = "1.5.6" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/db/870e5d5fb311b0bcf049630b5ba3abca2d339fd5e13ba175b4c13b456d08/jwcrypto-1.5.6.tar.gz", hash = "sha256:771a87762a0c081ae6166958a954f80848820b2ab066937dc8b8379d65b1b039", size = 87168 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/58/4a1880ea64032185e9ae9f63940c9327c6952d5584ea544a8f66972f2fda/jwcrypto-1.5.6-py3-none-any.whl", hash = "sha256:150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789", size = 92520 }, +] + +[[package]] +name = "kaleido" +version = "0.2.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f7/0ccaa596ec341963adbb4f839774c36d5659e75a0812d946732b927d480e/kaleido-0.2.1-py2.py3-none-macosx_10_11_x86_64.whl", hash = "sha256:ca6f73e7ff00aaebf2843f73f1d3bacde1930ef5041093fe76b83a15785049a7", size = 85153681 }, + { url = "https://files.pythonhosted.org/packages/45/8e/4297556be5a07b713bb42dde0f748354de9a6918dee251c0e6bdcda341e7/kaleido-0.2.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:bb9a5d1f710357d5d432ee240ef6658a6d124c3e610935817b4b42da9c787c05", size = 85808197 }, + { url = "https://files.pythonhosted.org/packages/ae/b3/a0f0f4faac229b0011d8c4a7ee6da7c2dca0b6fd08039c95920846f23ca4/kaleido-0.2.1-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:aa21cf1bf1c78f8fa50a9f7d45e1003c387bd3d6fe0a767cfbbf344b95bdc3a8", size = 79902476 }, + { url = "https://files.pythonhosted.org/packages/a1/2b/680662678a57afab1685f0c431c2aba7783ce4344f06ec162074d485d469/kaleido-0.2.1-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:845819844c8082c9469d9c17e42621fbf85c2b237ef8a86ec8a8527f98b6512a", size = 83711746 }, + { url = "https://files.pythonhosted.org/packages/88/89/4b6f8bb3f9ab036fd4ad1cb2d628ab5c81db32ac9aa0641d7b180073ba43/kaleido-0.2.1-py2.py3-none-win32.whl", hash = "sha256:ecc72635860be616c6b7161807a65c0dbd9b90c6437ac96965831e2e24066552", size = 62312480 }, + { url = "https://files.pythonhosted.org/packages/f7/9a/0408b02a4bcb3cf8b338a2b074ac7d1b2099e2b092b42473def22f7b625f/kaleido-0.2.1-py2.py3-none-win_amd64.whl", hash = "sha256:4670985f28913c2d063c5734d125ecc28e40810141bdb0a46f15b76c1d45f23c", size = 65945521 }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.7" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/14/fc943dd65268a96347472b4fbe5dcc2f6f55034516f80576cd0dd3a8930f/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6", size = 122440 }, + { url = "https://files.pythonhosted.org/packages/1e/46/e68fed66236b69dd02fcdb506218c05ac0e39745d696d22709498896875d/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17", size = 65758 }, + { url = "https://files.pythonhosted.org/packages/ef/fa/65de49c85838681fc9cb05de2a68067a683717321e01ddafb5b8024286f0/kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9", size = 64311 }, + { url = "https://files.pythonhosted.org/packages/42/9c/cc8d90f6ef550f65443bad5872ffa68f3dee36de4974768628bea7c14979/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", size = 1637109 }, + { url = "https://files.pythonhosted.org/packages/55/91/0a57ce324caf2ff5403edab71c508dd8f648094b18cfbb4c8cc0fde4a6ac/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", size = 1617814 }, + { url = "https://files.pythonhosted.org/packages/12/5d/c36140313f2510e20207708adf36ae4919416d697ee0236b0ddfb6fd1050/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", size = 1400881 }, + { url = "https://files.pythonhosted.org/packages/56/d0/786e524f9ed648324a466ca8df86298780ef2b29c25313d9a4f16992d3cf/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", size = 1512972 }, + { url = "https://files.pythonhosted.org/packages/67/5a/77851f2f201e6141d63c10a0708e996a1363efaf9e1609ad0441b343763b/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", size = 1444787 }, + { url = "https://files.pythonhosted.org/packages/06/5f/1f5eaab84355885e224a6fc8d73089e8713dc7e91c121f00b9a1c58a2195/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", size = 2199212 }, + { url = "https://files.pythonhosted.org/packages/b5/28/9152a3bfe976a0ae21d445415defc9d1cd8614b2910b7614b30b27a47270/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", size = 2346399 }, + { url = "https://files.pythonhosted.org/packages/26/f6/453d1904c52ac3b400f4d5e240ac5fec25263716723e44be65f4d7149d13/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", size = 2308688 }, + { url = "https://files.pythonhosted.org/packages/5a/9a/d4968499441b9ae187e81745e3277a8b4d7c60840a52dc9d535a7909fac3/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", size = 2445493 }, + { url = "https://files.pythonhosted.org/packages/07/c9/032267192e7828520dacb64dfdb1d74f292765f179e467c1cba97687f17d/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", size = 2262191 }, + { url = "https://files.pythonhosted.org/packages/6c/ad/db0aedb638a58b2951da46ddaeecf204be8b4f5454df020d850c7fa8dca8/kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", size = 46644 }, + { url = "https://files.pythonhosted.org/packages/12/ca/d0f7b7ffbb0be1e7c2258b53554efec1fd652921f10d7d85045aff93ab61/kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", size = 55877 }, + { url = "https://files.pythonhosted.org/packages/97/6c/cfcc128672f47a3e3c0d918ecb67830600078b025bfc32d858f2e2d5c6a4/kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", size = 48347 }, + { url = "https://files.pythonhosted.org/packages/e9/44/77429fa0a58f941d6e1c58da9efe08597d2e86bf2b2cce6626834f49d07b/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54", size = 122442 }, + { url = "https://files.pythonhosted.org/packages/e5/20/8c75caed8f2462d63c7fd65e16c832b8f76cda331ac9e615e914ee80bac9/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95", size = 65762 }, + { url = "https://files.pythonhosted.org/packages/f4/98/fe010f15dc7230f45bc4cf367b012d651367fd203caaa992fd1f5963560e/kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935", size = 64319 }, + { url = "https://files.pythonhosted.org/packages/8b/1b/b5d618f4e58c0675654c1e5051bcf42c776703edb21c02b8c74135541f60/kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", size = 1334260 }, + { url = "https://files.pythonhosted.org/packages/b8/01/946852b13057a162a8c32c4c8d2e9ed79f0bb5d86569a40c0b5fb103e373/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", size = 1426589 }, + { url = "https://files.pythonhosted.org/packages/70/d1/c9f96df26b459e15cf8a965304e6e6f4eb291e0f7a9460b4ad97b047561e/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", size = 1541080 }, + { url = "https://files.pythonhosted.org/packages/d3/73/2686990eb8b02d05f3de759d6a23a4ee7d491e659007dd4c075fede4b5d0/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052", size = 1470049 }, + { url = "https://files.pythonhosted.org/packages/a7/4b/2db7af3ed3af7c35f388d5f53c28e155cd402a55432d800c543dc6deb731/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", size = 1426376 }, + { url = "https://files.pythonhosted.org/packages/05/83/2857317d04ea46dc5d115f0df7e676997bbd968ced8e2bd6f7f19cfc8d7f/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", size = 2222231 }, + { url = "https://files.pythonhosted.org/packages/0d/b5/866f86f5897cd4ab6d25d22e403404766a123f138bd6a02ecb2cdde52c18/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", size = 2368634 }, + { url = "https://files.pythonhosted.org/packages/c1/ee/73de8385403faba55f782a41260210528fe3273d0cddcf6d51648202d6d0/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", size = 2329024 }, + { url = "https://files.pythonhosted.org/packages/a1/e7/cd101d8cd2cdfaa42dc06c433df17c8303d31129c9fdd16c0ea37672af91/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", size = 2468484 }, + { url = "https://files.pythonhosted.org/packages/e1/72/84f09d45a10bc57a40bb58b81b99d8f22b58b2040c912b7eb97ebf625bf2/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", size = 2284078 }, + { url = "https://files.pythonhosted.org/packages/d2/d4/71828f32b956612dc36efd7be1788980cb1e66bfb3706e6dec9acad9b4f9/kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", size = 46645 }, + { url = "https://files.pythonhosted.org/packages/a1/65/d43e9a20aabcf2e798ad1aff6c143ae3a42cf506754bcb6a7ed8259c8425/kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", size = 56022 }, + { url = "https://files.pythonhosted.org/packages/35/b3/9f75a2e06f1b4ca00b2b192bc2b739334127d27f1d0625627ff8479302ba/kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", size = 48536 }, + { url = "https://files.pythonhosted.org/packages/97/9c/0a11c714cf8b6ef91001c8212c4ef207f772dd84540104952c45c1f0a249/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2", size = 121808 }, + { url = "https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a", size = 65531 }, + { url = "https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee", size = 63894 }, + { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296 }, + { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450 }, + { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168 }, + { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308 }, + { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186 }, + { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877 }, + { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204 }, + { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461 }, + { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358 }, + { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119 }, + { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367 }, + { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884 }, + { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528 }, + { url = "https://files.pythonhosted.org/packages/c4/06/7da99b04259b0f18b557a4effd1b9c901a747f7fdd84cf834ccf520cb0b2/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e", size = 121913 }, + { url = "https://files.pythonhosted.org/packages/97/f5/b8a370d1aa593c17882af0a6f6755aaecd643640c0ed72dcfd2eafc388b9/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6", size = 65627 }, + { url = "https://files.pythonhosted.org/packages/2a/fc/6c0374f7503522539e2d4d1b497f5ebad3f8ed07ab51aed2af988dd0fb65/kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750", size = 63888 }, + { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145 }, + { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448 }, + { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750 }, + { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175 }, + { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963 }, + { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220 }, + { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463 }, + { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842 }, + { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635 }, + { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556 }, + { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364 }, + { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887 }, + { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530 }, + { url = "https://files.pythonhosted.org/packages/11/88/37ea0ea64512997b13d69772db8dcdc3bfca5442cda3a5e4bb943652ee3e/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd", size = 122449 }, + { url = "https://files.pythonhosted.org/packages/4e/45/5a5c46078362cb3882dcacad687c503089263c017ca1241e0483857791eb/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583", size = 65757 }, + { url = "https://files.pythonhosted.org/packages/8a/be/a6ae58978772f685d48dd2e84460937761c53c4bbd84e42b0336473d9775/kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417", size = 64312 }, + { url = "https://files.pythonhosted.org/packages/f4/04/18ef6f452d311e1e1eb180c9bf5589187fa1f042db877e6fe443ef10099c/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904", size = 1626966 }, + { url = "https://files.pythonhosted.org/packages/21/b1/40655f6c3fa11ce740e8a964fa8e4c0479c87d6a7944b95af799c7a55dfe/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a", size = 1607044 }, + { url = "https://files.pythonhosted.org/packages/fd/93/af67dbcfb9b3323bbd2c2db1385a7139d8f77630e4a37bb945b57188eb2d/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8", size = 1391879 }, + { url = "https://files.pythonhosted.org/packages/40/6f/d60770ef98e77b365d96061d090c0cd9e23418121c55fff188fa4bdf0b54/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2", size = 1504751 }, + { url = "https://files.pythonhosted.org/packages/fa/3a/5f38667d313e983c432f3fcd86932177519ed8790c724e07d77d1de0188a/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88", size = 1436990 }, + { url = "https://files.pythonhosted.org/packages/cb/3b/1520301a47326e6a6043b502647e42892be33b3f051e9791cc8bb43f1a32/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde", size = 2191122 }, + { url = "https://files.pythonhosted.org/packages/cf/c4/eb52da300c166239a2233f1f9c4a1b767dfab98fae27681bfb7ea4873cb6/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c", size = 2338126 }, + { url = "https://files.pythonhosted.org/packages/1a/cb/42b92fd5eadd708dd9107c089e817945500685f3437ce1fd387efebc6d6e/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2", size = 2298313 }, + { url = "https://files.pythonhosted.org/packages/4f/eb/be25aa791fe5fc75a8b1e0c965e00f942496bc04635c9aae8035f6b76dcd/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb", size = 2437784 }, + { url = "https://files.pythonhosted.org/packages/c5/22/30a66be7f3368d76ff95689e1c2e28d382383952964ab15330a15d8bfd03/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327", size = 2253988 }, + { url = "https://files.pythonhosted.org/packages/35/d3/5f2ecb94b5211c8a04f218a76133cc8d6d153b0f9cd0b45fad79907f0689/kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644", size = 46980 }, + { url = "https://files.pythonhosted.org/packages/ef/17/cd10d020578764ea91740204edc6b3236ed8106228a46f568d716b11feb2/kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4", size = 55847 }, + { url = "https://files.pythonhosted.org/packages/91/84/32232502020bd78d1d12be7afde15811c64a95ed1f606c10456db4e4c3ac/kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f", size = 48494 }, + { url = "https://files.pythonhosted.org/packages/ac/59/741b79775d67ab67ced9bb38552da688c0305c16e7ee24bba7a2be253fb7/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643", size = 59491 }, + { url = "https://files.pythonhosted.org/packages/58/cc/fb239294c29a5656e99e3527f7369b174dd9cc7c3ef2dea7cb3c54a8737b/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706", size = 57648 }, + { url = "https://files.pythonhosted.org/packages/3b/ef/2f009ac1f7aab9f81efb2d837301d255279d618d27b6015780115ac64bdd/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", size = 84257 }, + { url = "https://files.pythonhosted.org/packages/81/e1/c64f50987f85b68b1c52b464bb5bf73e71570c0f7782d626d1eb283ad620/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", size = 80906 }, + { url = "https://files.pythonhosted.org/packages/fd/71/1687c5c0a0be2cee39a5c9c389e546f9c6e215e46b691d00d9f646892083/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", size = 79951 }, + { url = "https://files.pythonhosted.org/packages/ea/8b/d7497df4a1cae9367adf21665dd1f896c2a7aeb8769ad77b662c5e2bcce7/kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", size = 55715 }, + { url = "https://files.pythonhosted.org/packages/d5/df/ce37d9b26f07ab90880923c94d12a6ff4d27447096b4c849bfc4339ccfdf/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39", size = 58666 }, + { url = "https://files.pythonhosted.org/packages/b0/d3/e4b04f43bc629ac8e186b77b2b1a251cdfa5b7610fa189dc0db622672ce6/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e", size = 57088 }, + { url = "https://files.pythonhosted.org/packages/30/1c/752df58e2d339e670a535514d2db4fe8c842ce459776b8080fbe08ebb98e/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608", size = 84321 }, + { url = "https://files.pythonhosted.org/packages/f0/f8/fe6484e847bc6e238ec9f9828089fb2c0bb53f2f5f3a79351fde5b565e4f/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674", size = 80776 }, + { url = "https://files.pythonhosted.org/packages/9b/57/d7163c0379f250ef763aba85330a19feefb5ce6cb541ade853aaba881524/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225", size = 79984 }, + { url = "https://files.pythonhosted.org/packages/8c/95/4a103776c265d13b3d2cd24fb0494d4e04ea435a8ef97e1b2c026d43250b/kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0", size = 55811 }, +] + +[[package]] +name = "latexcodec" +version = "3.0.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/e7/ed339caf3662976949e4fdbfdf4a6db818b8d2aa1cf2b5f73af89e936bba/latexcodec-3.0.0.tar.gz", hash = "sha256:917dc5fe242762cc19d963e6548b42d63a118028cdd3361d62397e3b638b6bc5", size = 31023 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/bf/ea8887e9f31a8f93ca306699d11909c6140151393a4216f0d9f85a004077/latexcodec-3.0.0-py3-none-any.whl", hash = "sha256:6f3477ad5e61a0a99bd31a6a370c34e88733a6bad9c921a3ffcfacada12f41a7", size = 18150 }, +] + +[[package]] +name = "lxml" +version = "5.3.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/6b/20c3a4b24751377aaa6307eb230b66701024012c29dd374999cc92983269/lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f", size = 3679318 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/ce/2789e39eddf2b13fac29878bfa465f0910eb6b0096e29090e5176bc8cf43/lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656", size = 8124570 }, + { url = "https://files.pythonhosted.org/packages/24/a8/f4010166a25d41715527129af2675981a50d3bbf7df09c5d9ab8ca24fbf9/lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d", size = 4413042 }, + { url = "https://files.pythonhosted.org/packages/41/a4/7e45756cecdd7577ddf67a68b69c1db0f5ddbf0c9f65021ee769165ffc5a/lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a", size = 5139213 }, + { url = "https://files.pythonhosted.org/packages/02/e2/ecf845b12323c92748077e1818b64e8b4dba509a4cb12920b3762ebe7552/lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8", size = 4838814 }, + { url = "https://files.pythonhosted.org/packages/12/91/619f9fb72cf75e9ceb8700706f7276f23995f6ad757e6d400fbe35ca4990/lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330", size = 5425084 }, + { url = "https://files.pythonhosted.org/packages/25/3b/162a85a8f0fd2a3032ec3f936636911c6e9523a8e263fffcfd581ce98b54/lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965", size = 4875993 }, + { url = "https://files.pythonhosted.org/packages/43/af/dd3f58cc7d946da6ae42909629a2b1d5dd2d1b583334d4af9396697d6863/lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22", size = 5012462 }, + { url = "https://files.pythonhosted.org/packages/69/c1/5ea46b2d4c98f5bf5c83fffab8a0ad293c9bc74df9ecfbafef10f77f7201/lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b", size = 4815288 }, + { url = "https://files.pythonhosted.org/packages/1d/51/a0acca077ad35da458f4d3f729ef98effd2b90f003440d35fc36323f8ae6/lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7", size = 5472435 }, + { url = "https://files.pythonhosted.org/packages/4d/6b/0989c9368986961a6b0f55b46c80404c4b758417acdb6d87bfc3bd5f4967/lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8", size = 4976354 }, + { url = "https://files.pythonhosted.org/packages/05/9e/87492d03ff604fbf656ed2bf3e2e8d28f5d58ea1f00ff27ac27b06509079/lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32", size = 5029973 }, + { url = "https://files.pythonhosted.org/packages/f9/cc/9ae1baf5472af88e19e2c454b3710c1be9ecafb20eb474eeabcd88a055d2/lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86", size = 4888837 }, + { url = "https://files.pythonhosted.org/packages/d2/10/5594ffaec8c120d75b17e3ad23439b740a51549a9b5fd7484b2179adfe8f/lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5", size = 5530555 }, + { url = "https://files.pythonhosted.org/packages/ea/9b/de17f05377c8833343b629905571fb06cff2028f15a6f58ae2267662e341/lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03", size = 5405314 }, + { url = "https://files.pythonhosted.org/packages/8a/b4/227be0f1f3cca8255925985164c3838b8b36e441ff0cc10c1d3c6bdba031/lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7", size = 5079303 }, + { url = "https://files.pythonhosted.org/packages/5c/ee/19abcebb7fc40319bb71cd6adefa1ad94d09b5660228715854d6cc420713/lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80", size = 3475126 }, + { url = "https://files.pythonhosted.org/packages/a1/35/183d32551447e280032b2331738cd850da435a42f850b71ebeaab42c1313/lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3", size = 3805065 }, + { url = "https://files.pythonhosted.org/packages/5c/a8/449faa2a3cbe6a99f8d38dcd51a3ee8844c17862841a6f769ea7c2a9cd0f/lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b", size = 8141056 }, + { url = "https://files.pythonhosted.org/packages/ac/8a/ae6325e994e2052de92f894363b038351c50ee38749d30cc6b6d96aaf90f/lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18", size = 4425238 }, + { url = "https://files.pythonhosted.org/packages/f8/fb/128dddb7f9086236bce0eeae2bfb316d138b49b159f50bc681d56c1bdd19/lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442", size = 5095197 }, + { url = "https://files.pythonhosted.org/packages/b4/f9/a181a8ef106e41e3086629c8bdb2d21a942f14c84a0e77452c22d6b22091/lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4", size = 4809809 }, + { url = "https://files.pythonhosted.org/packages/25/2f/b20565e808f7f6868aacea48ddcdd7e9e9fb4c799287f21f1a6c7c2e8b71/lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f", size = 5407593 }, + { url = "https://files.pythonhosted.org/packages/23/0e/caac672ec246d3189a16c4d364ed4f7d6bf856c080215382c06764058c08/lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e", size = 4866657 }, + { url = "https://files.pythonhosted.org/packages/67/a4/1f5fbd3f58d4069000522196b0b776a014f3feec1796da03e495cf23532d/lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c", size = 4967017 }, + { url = "https://files.pythonhosted.org/packages/ee/73/623ecea6ca3c530dd0a4ed0d00d9702e0e85cd5624e2d5b93b005fe00abd/lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16", size = 4810730 }, + { url = "https://files.pythonhosted.org/packages/1d/ce/fb84fb8e3c298f3a245ae3ea6221c2426f1bbaa82d10a88787412a498145/lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79", size = 5455154 }, + { url = "https://files.pythonhosted.org/packages/b1/72/4d1ad363748a72c7c0411c28be2b0dc7150d91e823eadad3b91a4514cbea/lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080", size = 4969416 }, + { url = "https://files.pythonhosted.org/packages/42/07/b29571a58a3a80681722ea8ed0ba569211d9bb8531ad49b5cacf6d409185/lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654", size = 5013672 }, + { url = "https://files.pythonhosted.org/packages/b9/93/bde740d5a58cf04cbd38e3dd93ad1e36c2f95553bbf7d57807bc6815d926/lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d", size = 4878644 }, + { url = "https://files.pythonhosted.org/packages/56/b5/645c8c02721d49927c93181de4017164ec0e141413577687c3df8ff0800f/lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763", size = 5511531 }, + { url = "https://files.pythonhosted.org/packages/85/3f/6a99a12d9438316f4fc86ef88c5d4c8fb674247b17f3173ecadd8346b671/lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec", size = 5402065 }, + { url = "https://files.pythonhosted.org/packages/80/8a/df47bff6ad5ac57335bf552babfb2408f9eb680c074ec1ba412a1a6af2c5/lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be", size = 5069775 }, + { url = "https://files.pythonhosted.org/packages/08/ae/e7ad0f0fbe4b6368c5ee1e3ef0c3365098d806d42379c46c1ba2802a52f7/lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9", size = 3474226 }, + { url = "https://files.pythonhosted.org/packages/c3/b5/91c2249bfac02ee514ab135e9304b89d55967be7e53e94a879b74eec7a5c/lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1", size = 3814971 }, + { url = "https://files.pythonhosted.org/packages/eb/6d/d1f1c5e40c64bf62afd7a3f9b34ce18a586a1cccbf71e783cd0a6d8e8971/lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859", size = 8171753 }, + { url = "https://files.pythonhosted.org/packages/bd/83/26b1864921869784355459f374896dcf8b44d4af3b15d7697e9156cb2de9/lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e", size = 4441955 }, + { url = "https://files.pythonhosted.org/packages/e0/d2/e9bff9fb359226c25cda3538f664f54f2804f4b37b0d7c944639e1a51f69/lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f", size = 5050778 }, + { url = "https://files.pythonhosted.org/packages/88/69/6972bfafa8cd3ddc8562b126dd607011e218e17be313a8b1b9cc5a0ee876/lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e", size = 4748628 }, + { url = "https://files.pythonhosted.org/packages/5d/ea/a6523c7c7f6dc755a6eed3d2f6d6646617cad4d3d6d8ce4ed71bfd2362c8/lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179", size = 5322215 }, + { url = "https://files.pythonhosted.org/packages/99/37/396fbd24a70f62b31d988e4500f2068c7f3fd399d2fd45257d13eab51a6f/lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a", size = 4813963 }, + { url = "https://files.pythonhosted.org/packages/09/91/e6136f17459a11ce1757df864b213efbeab7adcb2efa63efb1b846ab6723/lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3", size = 4923353 }, + { url = "https://files.pythonhosted.org/packages/1d/7c/2eeecf87c9a1fca4f84f991067c693e67340f2b7127fc3eca8fa29d75ee3/lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1", size = 4740541 }, + { url = "https://files.pythonhosted.org/packages/3b/ed/4c38ba58defca84f5f0d0ac2480fdcd99fc7ae4b28fc417c93640a6949ae/lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d", size = 5346504 }, + { url = "https://files.pythonhosted.org/packages/a5/22/bbd3995437e5745cb4c2b5d89088d70ab19d4feabf8a27a24cecb9745464/lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c", size = 4898077 }, + { url = "https://files.pythonhosted.org/packages/0a/6e/94537acfb5b8f18235d13186d247bca478fea5e87d224644e0fe907df976/lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99", size = 4946543 }, + { url = "https://files.pythonhosted.org/packages/8d/e8/4b15df533fe8e8d53363b23a41df9be907330e1fa28c7ca36893fad338ee/lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff", size = 4816841 }, + { url = "https://files.pythonhosted.org/packages/1a/e7/03f390ea37d1acda50bc538feb5b2bda6745b25731e4e76ab48fae7106bf/lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a", size = 5417341 }, + { url = "https://files.pythonhosted.org/packages/ea/99/d1133ab4c250da85a883c3b60249d3d3e7c64f24faff494cf0fd23f91e80/lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8", size = 5327539 }, + { url = "https://files.pythonhosted.org/packages/7d/ed/e6276c8d9668028213df01f598f385b05b55a4e1b4662ee12ef05dab35aa/lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d", size = 5012542 }, + { url = "https://files.pythonhosted.org/packages/36/88/684d4e800f5aa28df2a991a6a622783fb73cf0e46235cfa690f9776f032e/lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30", size = 3486454 }, + { url = "https://files.pythonhosted.org/packages/fc/82/ace5a5676051e60355bd8fb945df7b1ba4f4fb8447f2010fb816bfd57724/lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f", size = 3816857 }, + { url = "https://files.pythonhosted.org/packages/94/6a/42141e4d373903bfea6f8e94b2f554d05506dfda522ada5343c651410dc8/lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a", size = 8156284 }, + { url = "https://files.pythonhosted.org/packages/91/5e/fa097f0f7d8b3d113fb7312c6308af702f2667f22644441715be961f2c7e/lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd", size = 4432407 }, + { url = "https://files.pythonhosted.org/packages/2d/a1/b901988aa6d4ff937f2e5cfc114e4ec561901ff00660c3e56713642728da/lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51", size = 5048331 }, + { url = "https://files.pythonhosted.org/packages/30/0f/b2a54f48e52de578b71bbe2a2f8160672a8a5e103df3a78da53907e8c7ed/lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b", size = 4744835 }, + { url = "https://files.pythonhosted.org/packages/82/9d/b000c15538b60934589e83826ecbc437a1586488d7c13f8ee5ff1f79a9b8/lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002", size = 5316649 }, + { url = "https://files.pythonhosted.org/packages/e3/ee/ffbb9eaff5e541922611d2c56b175c45893d1c0b8b11e5a497708a6a3b3b/lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4", size = 4812046 }, + { url = "https://files.pythonhosted.org/packages/15/ff/7ff89d567485c7b943cdac316087f16b2399a8b997007ed352a1248397e5/lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492", size = 4918597 }, + { url = "https://files.pythonhosted.org/packages/c6/a3/535b6ed8c048412ff51268bdf4bf1cf052a37aa7e31d2e6518038a883b29/lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3", size = 4738071 }, + { url = "https://files.pythonhosted.org/packages/7a/8f/cbbfa59cb4d4fd677fe183725a76d8c956495d7a3c7f111ab8f5e13d2e83/lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4", size = 5342213 }, + { url = "https://files.pythonhosted.org/packages/5c/fb/db4c10dd9958d4b52e34d1d1f7c1f434422aeaf6ae2bbaaff2264351d944/lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367", size = 4893749 }, + { url = "https://files.pythonhosted.org/packages/f2/38/bb4581c143957c47740de18a3281a0cab7722390a77cc6e610e8ebf2d736/lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832", size = 4945901 }, + { url = "https://files.pythonhosted.org/packages/fc/d5/18b7de4960c731e98037bd48fa9f8e6e8f2558e6fbca4303d9b14d21ef3b/lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff", size = 4815447 }, + { url = "https://files.pythonhosted.org/packages/97/a8/cd51ceaad6eb849246559a8ef60ae55065a3df550fc5fcd27014361c1bab/lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd", size = 5411186 }, + { url = "https://files.pythonhosted.org/packages/89/c3/1e3dabab519481ed7b1fdcba21dcfb8832f57000733ef0e71cf6d09a5e03/lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb", size = 5324481 }, + { url = "https://files.pythonhosted.org/packages/b6/17/71e9984cf0570cd202ac0a1c9ed5c1b8889b0fc8dc736f5ef0ffb181c284/lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b", size = 5011053 }, + { url = "https://files.pythonhosted.org/packages/69/68/9f7e6d3312a91e30829368c2b3217e750adef12a6f8eb10498249f4e8d72/lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957", size = 3485634 }, + { url = "https://files.pythonhosted.org/packages/7d/db/214290d58ad68c587bd5d6af3d34e56830438733d0d0856c0275fde43652/lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d", size = 3814417 }, + { url = "https://files.pythonhosted.org/packages/89/a9/63af38c7f42baff8251d937be91c6decfe9e4725fe16283dcee428e08d5c/lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de", size = 8129239 }, + { url = "https://files.pythonhosted.org/packages/23/b2/45e12a5b8508ee9de0af432d0dc5fcc786cd78037d692a3de7571c2db04c/lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc", size = 4415821 }, + { url = "https://files.pythonhosted.org/packages/88/88/a01dc8055d431c39859ec3806dbe4df6cf7a80b0431227a52de8428d2cf6/lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be", size = 5139927 }, + { url = "https://files.pythonhosted.org/packages/13/d9/c0f3fd5582a26ea887122feb9cfe84215642ecf10886dcb50a603a6ef448/lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a", size = 4839659 }, + { url = "https://files.pythonhosted.org/packages/64/06/290728f6fde1761c323db28ece9601018db72ecafa21b182cfea99e7cb2e/lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540", size = 5427269 }, + { url = "https://files.pythonhosted.org/packages/52/43/af104743bb733e85efc0be0e32c140e3e7be6050aca52b1e8a0b2867c382/lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70", size = 4876667 }, + { url = "https://files.pythonhosted.org/packages/d8/5f/9dea130ae3ba77848f4b93d11dfd365085620fb34c5c9d22746227b86952/lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa", size = 5013541 }, + { url = "https://files.pythonhosted.org/packages/e8/87/a089806f0327ad7f7268c3f4d22f1d76215a923bf33ea808bb665bdeacfa/lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf", size = 4818394 }, + { url = "https://files.pythonhosted.org/packages/87/63/b36ddd4a829a5de681bde7e9be4008a8b53c392dea4c8b1492c35727e150/lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229", size = 5472977 }, + { url = "https://files.pythonhosted.org/packages/99/1f/677226f48e2d1ea590c24f3ead1799584517a62a394a338b96f62d3c732e/lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe", size = 4978803 }, + { url = "https://files.pythonhosted.org/packages/9d/f8/1b96af1396f237de488b14f70b2c6ced5079b792770e6a0f7153f912124d/lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2", size = 5026166 }, + { url = "https://files.pythonhosted.org/packages/a9/42/86a09a2cabb7bed04d904e38cc09ac65e4916fc1b7eadf94bb924893988b/lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71", size = 4890234 }, + { url = "https://files.pythonhosted.org/packages/c9/0a/bf0edfe5635ed05ed69a8ae9c1e06dc28cf8becc4ea72f39d3624f20b3d9/lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3", size = 5533730 }, + { url = "https://files.pythonhosted.org/packages/00/cd/dfd8fd56415508751caac07c7ddb3b0a40aff346c11fabdd9d8aa2bfb329/lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727", size = 5406452 }, + { url = "https://files.pythonhosted.org/packages/3f/35/fcc233c86f4e59f9498cde8ad6131e1ca41dc7aa084ec982d2cccca91cd7/lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a", size = 5078114 }, + { url = "https://files.pythonhosted.org/packages/9b/55/94c9bc55ec20744a21c949138649442298cff4189067b7e0844dd0a111d0/lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff", size = 3478072 }, + { url = "https://files.pythonhosted.org/packages/bb/ab/68821837e454c4c34f40cbea8806637ec4d814b76d3d017a24a39c651a79/lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2", size = 3806100 }, + { url = "https://files.pythonhosted.org/packages/99/f7/b73a431c8500565aa500e99e60b448d305eaf7c0b4c893c7c5a8a69cc595/lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c", size = 3925431 }, + { url = "https://files.pythonhosted.org/packages/db/48/4a206623c0d093d0e3b15f415ffb4345b0bdf661a3d0b15a112948c033c7/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a", size = 4216683 }, + { url = "https://files.pythonhosted.org/packages/54/47/577820c45dd954523ae8453b632d91e76da94ca6d9ee40d8c98dd86f916b/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005", size = 4326732 }, + { url = "https://files.pythonhosted.org/packages/68/de/96cb6d3269bc994b4f5ede8ca7bf0840f5de0a278bc6e50cb317ff71cafa/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce", size = 4218377 }, + { url = "https://files.pythonhosted.org/packages/a5/43/19b1ef6cbffa4244a217f95cc5f41a6cb4720fed33510a49670b03c5f1a0/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83", size = 4351237 }, + { url = "https://files.pythonhosted.org/packages/ba/b2/6a22fb5c0885da3b00e116aee81f0b829ec9ac8f736cd414b4a09413fc7d/lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba", size = 3487557 }, + { url = "https://files.pythonhosted.org/packages/c9/ac/e8ec7b6f7d76f8b88dfe78dd547b0d8915350160a5a01cca7aceba91e87f/lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21", size = 3923032 }, + { url = "https://files.pythonhosted.org/packages/f7/b6/d94041c11aa294a09ffac7caa633114941935938eaaba159a93985283c07/lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2", size = 4214557 }, + { url = "https://files.pythonhosted.org/packages/dd/0d/ccb5e4e7a4188a9c881a3c07ee7eaf21772ae847ca5e9a3b140341f2668a/lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f", size = 4325217 }, + { url = "https://files.pythonhosted.org/packages/7a/17/9d3b43b63b0ddd77f1a680edf00de3c8c2441e8d379be17d2b712b67688b/lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab", size = 4216018 }, + { url = "https://files.pythonhosted.org/packages/19/4f/f71029b3f37f43e846b6ec0d6baaa1791c65f8c3356cc78d18076f4c5422/lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9", size = 4347893 }, + { url = "https://files.pythonhosted.org/packages/17/45/0fe53cb16a704b35b5ec93af305f77a14ec65830fc399e6634a81f17a1ea/lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c", size = 3486287 }, +] + +[[package]] +name = "lxml-html-clean" +version = "0.4.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "lxml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/f2/fe319e3c5cb505a361b95d1e0d0d793fe28d4dcc2fc39d3cae9324dc4233/lxml_html_clean-0.4.1.tar.gz", hash = "sha256:40c838bbcf1fc72ba4ce811fbb3135913017b27820d7c16e8bc412ae1d8bc00b", size = 21378 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ba/2af7a60b45bf21375e111c1e2d5d721108d06c80e3d9a3cc1d767afe1731/lxml_html_clean-0.4.1-py3-none-any.whl", hash = "sha256:b704f2757e61d793b1c08bf5ad69e4c0b68d6696f4c3c1429982caf90050bcaf", size = 14114 }, +] + +[[package]] +name = "matid" +version = "2.1.4" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "ase" }, + { name = "networkx" }, + { name = "numpy" }, + { name = "scikit-learn" }, + { name = "spglib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/13/e5/70781431fd4c0c5e0b7b4faedb13de61bb20159642dfbb2f41a8f93cd2cb/matid-2.1.4.tar.gz", hash = "sha256:7b6c8e023bd91b1f5eba3bae7a1aec7526ed621fc4a585406d69226146cf5f9d", size = 148539 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/c2/ca36c2f01adac6c0dd3285eb4d30f1b9a235379d1477fc7a9495bf41bbdb/matid-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9dca8797279ad23b5a12031e4ea1c81cee30fb5a975f0784b3d4cee7ca055de0", size = 285624 }, + { url = "https://files.pythonhosted.org/packages/6f/96/6cac03613100731c6c1103277c842f181ea9027b1d3dc0217970ff3af512/matid-2.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05e20d2278ed814c5b26fba4b03bbe13effc3bf4de54eb9ed00be7fcb855cda6", size = 278335 }, + { url = "https://files.pythonhosted.org/packages/57/fc/17c74ba0c2913400aa7a29f4497cc3080d905280702b04d33ad0ac2a1eb9/matid-2.1.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b4719a6d3a888429ea4af88a85e0a53888093f985ecfbe8e0d2de8a5fcaea73", size = 2739837 }, + { url = "https://files.pythonhosted.org/packages/08/b0/9cac607f019d7d0e01dd7e1eef682cd542f15efb8df5e27ae49bc020aa30/matid-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:382ce7f7a08d8fb3f825a07760f58660e18ce99663d6b746627d9054b0eb68e9", size = 2793301 }, + { url = "https://files.pythonhosted.org/packages/86/b9/52a6ae199f3d2ebc088190ce9261522284925f8bf0b8ceab272499c75b4d/matid-2.1.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:acb79894a54f1425fd066e274e87fa61f50dfa85e0ccf108668fc33f25593540", size = 3717259 }, + { url = "https://files.pythonhosted.org/packages/60/27/8b15689eddc4805bc1e3ebd22731dc93cde0266086abde46f56ee9a20224/matid-2.1.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a87685154c7d0482a115c617eec72bd7e20d67d20fef6514dc7c2887e45272f9", size = 3673885 }, + { url = "https://files.pythonhosted.org/packages/63/d0/51c283736ee26d20e975aa29f8b8c78c3c9adcd12bf1a6851904827cf99e/matid-2.1.4-cp310-cp310-win32.whl", hash = "sha256:4cb417b1cd89351ea4944a6283cd423069cf12a8ab6ca09c2d5e102e8f069afe", size = 251079 }, + { url = "https://files.pythonhosted.org/packages/31/8c/4f4903d9a563714221458d3340bd0a497a852eaf097049cc9305c14fc545/matid-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:13f8ba440865068fa1846606a02ba983f9129e20516edcfed9b8c9fa565fdc62", size = 261050 }, + { url = "https://files.pythonhosted.org/packages/c1/0d/14532dd9beac07d44ed52b8ac80ba009f34d5496c139ef667f3ebba06abe/matid-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de06b9bdbb71b849a2382be9f2fdd8407c48c7ff0d533dfedd1e5e46353391fa", size = 286919 }, + { url = "https://files.pythonhosted.org/packages/63/93/6654405067851d6dceca9efb8b89bc1326bd6d26e682007dbd424f7cf360/matid-2.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9cba802bf34642c687209e1c9897a67dadebe3ced28d29b160b26e7087db491f", size = 279879 }, + { url = "https://files.pythonhosted.org/packages/47/fb/c7db19ccf399fde948d9844736b6e6b5ce7617e6b90f9fb26124ac9ac2b1/matid-2.1.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:448121b80d78aa41d1a96a5cca93e95e8a8a778922e2d63ddd72f8a1f30b5db4", size = 2764965 }, + { url = "https://files.pythonhosted.org/packages/d5/5a/bf3dc7d4ba12736f08bbf4d913b4b2ffb2783272dc452c3d514d112c733d/matid-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:096f8b09236ed364c8ec9cd6a0e2ddd1deaf758fb13e0566e166d9feb796d25f", size = 2835669 }, + { url = "https://files.pythonhosted.org/packages/b3/cc/ddc2a0a9c6d36fdccb502d9048b002c74f091887ac60c084e7ee081ae437/matid-2.1.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:10eaac8a6b53d9dd3a3dab2a04e504ae65f7c1ade6d747eec7bcd9fd70eb8c1a", size = 3749611 }, + { url = "https://files.pythonhosted.org/packages/17/c5/b000e7524e067db2ec15f35a04702a4a7519fe778db75f851178df1bb09d/matid-2.1.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bc265458be82ffc71a7a8a2c945be60483b64f59163457198e891d499582a52", size = 3706055 }, + { url = "https://files.pythonhosted.org/packages/d5/3d/b6d71f69c5f8afe0e9381486e2228915b4989bc41da76801b490dba4574b/matid-2.1.4-cp311-cp311-win32.whl", hash = "sha256:fe903d04f0960f33c5025392f1443ff8fe1a51f7667b24975b9dec7ee5ade333", size = 252235 }, + { url = "https://files.pythonhosted.org/packages/53/2e/05324212561d1b0bbc5e503a5ba7c08da5fcf21a7b49a5220477bb35c883/matid-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:fb7d223104a2c99b74bc7c4eeb5a239252500219c980ab7bb77d9da941ecb626", size = 262056 }, + { url = "https://files.pythonhosted.org/packages/b9/13/d9391b22f61b3aaad701528c62426f983b680ac6ebd2bd5b5f5bdd387273/matid-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:66cc6ef175ce317591046b984952384e6bc4a71acd26114051ddd6b20b7dcf1a", size = 286487 }, + { url = "https://files.pythonhosted.org/packages/c7/bf/8b7eac5f2d2df758905cb6a308c38e1e6d8f69f170dd574c47cd286bd04c/matid-2.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55cc00921daac066cabd4201e7705d8286c36b9f32d1db6312a72dd7ec4f01b1", size = 278589 }, + { url = "https://files.pythonhosted.org/packages/5e/10/9fd836e8ee9143f22f6549772a1e0961c3fab8911be65d089e6f2c4d11d1/matid-2.1.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a74e4e64907051b36fb4441151eaaf21e8f8604bda210abc2e72b49efaff57", size = 2773209 }, + { url = "https://files.pythonhosted.org/packages/7f/5a/6eeb8b2e3ab98738ca345384bcbc6a1d0913fc439e7d17de6b7e5a3508fa/matid-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0fc07472f1bc9a4b8587f046140a2f30e0d18ee3f3ecfa8acdfb101fe37b000", size = 2847882 }, + { url = "https://files.pythonhosted.org/packages/80/e8/f4a46e258603e43f57f8c5ace8a97964132c311e107870d4e92474bb7106/matid-2.1.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e504ad452b9df866a75632f0aa2517417729fc19517e9b96c7961ec80e6ff750", size = 3754216 }, + { url = "https://files.pythonhosted.org/packages/92/48/18a1e91028481937fbf3b0ef8ac75471fc922d5a70f5d421735dd1ca067a/matid-2.1.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:38f449b6a83b0c3e0b77a6518a828e5cdad13fea50d29f022d134d782d513cd3", size = 3706317 }, + { url = "https://files.pythonhosted.org/packages/69/66/439ce709c9650fd23e0a64783fddcdf691ca8e5fb4c96a12123286952443/matid-2.1.4-cp312-cp312-win32.whl", hash = "sha256:ca9951ffac607e91455a117f2ba2339ba5c0ee45a8242a783da3342d0df7770e", size = 251402 }, + { url = "https://files.pythonhosted.org/packages/15/c6/08064b68f1a10348ff54d645911984cef297173dd2cd962bff6952f4b7c7/matid-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:84b5ea300c7364d11225f220a7836f38e20d33df4db37c59022697d2e8b28c4a", size = 261722 }, + { url = "https://files.pythonhosted.org/packages/6f/97/0249715b205d354a0223c943c583b57c0c15955f69f8ec5ba4c79d53bb8e/matid-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27960221c5e33b05ac5bb62c5e4ceef4c471ccbe802f88f3b41bd895d4e85b2c", size = 285733 }, + { url = "https://files.pythonhosted.org/packages/08/26/faa61e492df418135a3ef79cbb2d3323df35fc2b1a8a5a4ab447e6abbf35/matid-2.1.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0827b2bcd880a884888d153e448d19f44da42bba4609bfd722a32c8cdf9e6665", size = 278472 }, + { url = "https://files.pythonhosted.org/packages/68/73/e80b076cd2b71bcfe9e3f32a6096d07bed8df1e564db66f54732ea1a8fcb/matid-2.1.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a064dfbb6bce7e2bd268e3668ecab0325ec5f89fc91aa4593346063c32ad74ac", size = 2728445 }, + { url = "https://files.pythonhosted.org/packages/ab/c2/921017394bdb26b03c9164b8f7ca85ef5479bf4d66d6e9a9cc394988b061/matid-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6366ddbb0f638767326190666f1b69ddd3f42708090365b07d0fe6541583231", size = 2800401 }, + { url = "https://files.pythonhosted.org/packages/2c/63/3457a305856387b20e61a5d5745f7dc3d6418293b5bb4e86060d1bc22772/matid-2.1.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9e1be705e5b06f2355ba589d0503de389c516aa332c7ae015b6110e5743a85e9", size = 3702774 }, + { url = "https://files.pythonhosted.org/packages/cb/b6/21acdca4dbd4a061f724c74688d27cbd002e141ba6f7acca9bde9d7bd37e/matid-2.1.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bb6cfd9d3474fb2a2bfabb624dd93ff9776d335f23658f5be5e293eb4b66d64a", size = 3665802 }, + { url = "https://files.pythonhosted.org/packages/3b/2b/5655eba81e8798053d11aaa73e7f89d7ab94f7dbca5f7564c8a043249742/matid-2.1.4-cp39-cp39-win32.whl", hash = "sha256:f4e08e9da51b00eb0d7000bb02c6e50647e53b72fc31c2acee88da1f70a8e434", size = 251334 }, + { url = "https://files.pythonhosted.org/packages/41/3a/888fb6b802060cca415a17fd6d189bb858c9c9d2e27ea3808d9e8aa1aed4/matid-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:918edddb87fc6a635f6a084a495d0a11865cadb24e55259bec7373312e0d677d", size = 261043 }, +] + +[[package]] +name = "matplotlib" +version = "3.9.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "importlib-resources", marker = "python_full_version < '3.10'" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/d8/3d7f706c69e024d4287c1110d74f7dabac91d9843b99eadc90de9efc8869/matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92", size = 36088381 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/9d/84eeb82ecdd3ba71b12dd6ab5c820c5cc1e868003ecb3717d41b589ec02a/matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb", size = 7893310 }, + { url = "https://files.pythonhosted.org/packages/36/98/cbacbd30241369d099f9c13a2b6bc3b7068d85214f5b5795e583ac3d8aba/matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4", size = 7764089 }, + { url = "https://files.pythonhosted.org/packages/a8/a0/917f3c6d3a8774a3a1502d9f3dfc1456e07c1fa0c211a23b75a69e154180/matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64", size = 8192377 }, + { url = "https://files.pythonhosted.org/packages/8d/9d/d06860390f9d154fa884f1740a5456378fb153ff57443c91a4a32bab7092/matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66", size = 8303983 }, + { url = "https://files.pythonhosted.org/packages/9e/a7/c0e848ed7de0766c605af62d8097472a37f1a81d93e9afe94faa5890f24d/matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a", size = 9083318 }, + { url = "https://files.pythonhosted.org/packages/09/6c/0fa50c001340a45cde44853c116d6551aea741e59a7261c38f473b53553b/matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae", size = 7819628 }, + { url = "https://files.pythonhosted.org/packages/77/c2/f9d7fe80a8fcce9bb128d1381c6fe41a8d286d7e18395e273002e8e0fa34/matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772", size = 7902925 }, + { url = "https://files.pythonhosted.org/packages/28/ba/8be09886eb56ac04a218a1dc3fa728a5c4cac60b019b4f1687885166da00/matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41", size = 7773193 }, + { url = "https://files.pythonhosted.org/packages/e6/9a/5991972a560db3ab621312a7ca5efec339ae2122f25901c0846865c4b72f/matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f", size = 8202378 }, + { url = "https://files.pythonhosted.org/packages/01/75/6c7ce560e95714a10fcbb3367d1304975a1a3e620f72af28921b796403f3/matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447", size = 8314361 }, + { url = "https://files.pythonhosted.org/packages/6e/49/dc7384c6c092958e0b75e754efbd9e52500154939c3d715789cee9fb8a53/matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e", size = 9091428 }, + { url = "https://files.pythonhosted.org/packages/8b/ce/15b0bb2fb29b3d46211d8ca740b96b5232499fc49200b58b8d571292c9a6/matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7", size = 7829377 }, + { url = "https://files.pythonhosted.org/packages/82/de/54f7f38ce6de79cb77d513bb3eaa4e0b1031e9fd6022214f47943fa53a88/matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9", size = 7892511 }, + { url = "https://files.pythonhosted.org/packages/35/3e/5713b84a02b24b2a4bd4d6673bfc03017e6654e1d8793ece783b7ed4d484/matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d", size = 7769370 }, + { url = "https://files.pythonhosted.org/packages/5b/bd/c404502aa1824456d2862dd6b9b0c1917761a51a32f7f83ff8cf94b6d117/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7", size = 8193260 }, + { url = "https://files.pythonhosted.org/packages/27/75/de5b9cd67648051cae40039da0c8cbc497a0d99acb1a1f3d087cd66d27b7/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c", size = 8306310 }, + { url = "https://files.pythonhosted.org/packages/de/e3/2976e4e54d7ee76eaf54b7639fdc10a223d05c2bdded7045233e9871e469/matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e", size = 9086717 }, + { url = "https://files.pythonhosted.org/packages/d2/92/c2b9464a0562feb6ae780bdc152364810862e07ef5e6affa2b7686028db2/matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3", size = 7832805 }, + { url = "https://files.pythonhosted.org/packages/5c/7f/8932eac316b32f464b8f9069f151294dcd892c8fbde61fe8bcd7ba7f7f7e/matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9", size = 7893012 }, + { url = "https://files.pythonhosted.org/packages/90/89/9db9db3dd0ff3e2c49e452236dfe29e60b5586a88f8928ca1d153d0da8b5/matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa", size = 7769810 }, + { url = "https://files.pythonhosted.org/packages/67/26/d2661cdc2e1410b8929c5f12dfd521e4528abfed1b3c3d5a28ac48258b43/matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b", size = 8193779 }, + { url = "https://files.pythonhosted.org/packages/95/70/4839eaa672bf4eacc98ebc8d23633e02b6daf39e294e7433c4ab11a689be/matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413", size = 8306260 }, + { url = "https://files.pythonhosted.org/packages/88/62/7b263b2cb2724b45d3a4f9c8c6137696cc3ef037d44383fb01ac2a9555c2/matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b", size = 9086073 }, + { url = "https://files.pythonhosted.org/packages/b0/6d/3572fe243c74112fef120f0bc86f5edd21f49b60e8322fc7f6a01fe945dd/matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49", size = 7833041 }, + { url = "https://files.pythonhosted.org/packages/03/8f/9d505be3eb2f40ec731674fb6b47d10cc3147bbd6a9ea7a08c8da55415c6/matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03", size = 7933657 }, + { url = "https://files.pythonhosted.org/packages/5d/68/44b458b9794bcff2a66921f8c9a8110a50a0bb099bd5f7cabb428a1dc765/matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30", size = 7799276 }, + { url = "https://files.pythonhosted.org/packages/47/79/8486d4ddcaaf676314b5fb58e8fe19d1a6210a443a7c31fa72d4215fcb87/matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51", size = 8221027 }, + { url = "https://files.pythonhosted.org/packages/56/62/72a472181578c3d035dcda0d0fa2e259ba2c4cb91132588a348bb705b70d/matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c", size = 8329097 }, + { url = "https://files.pythonhosted.org/packages/01/8a/760f7fce66b39f447ad160800619d0bd5d0936d2b4633587116534a4afe0/matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e", size = 9093770 }, + { url = "https://files.pythonhosted.org/packages/33/d8/87456eed8fa93db0d32b429dca067d798617698a5d6c2b6f8b2b898fd61f/matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2", size = 7894246 }, + { url = "https://files.pythonhosted.org/packages/46/87/5f567fda78130a8394f9dcf3accb1b7b0c9baf0384307ef59032f5b1d17c/matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a", size = 7764962 }, + { url = "https://files.pythonhosted.org/packages/9e/ee/cfbfd294d33ad19f7bbf8188d26f2f7705283b750df80bf54b7be9a04cf2/matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5", size = 8194080 }, + { url = "https://files.pythonhosted.org/packages/5a/20/f56d5b88450593ccde3f283e338f3f976b2e479bddd9a147f14f66ee1ca7/matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca", size = 8306293 }, + { url = "https://files.pythonhosted.org/packages/3d/db/332effcb9779231017e45cc581b280979c717a84202a638f9301da86ab29/matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea", size = 9085520 }, + { url = "https://files.pythonhosted.org/packages/71/a8/9b18bd1fef16f71821c890b4db3697be5102f2b839765d9608479cd33874/matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2", size = 7813909 }, + { url = "https://files.pythonhosted.org/packages/54/c1/3fc6cad8a7caa05f4b24fb52372de87a736afeccaa9c576e4748df44067b/matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556", size = 7885311 }, + { url = "https://files.pythonhosted.org/packages/1c/6f/4e59c032b6f28cc7344f34e14ff247ebf6c975d91784bca22b9512bf43d1/matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21", size = 7762487 }, + { url = "https://files.pythonhosted.org/packages/72/b0/194c61ab2f40a4a685ef01a91c891cd44298871da4e79654494dc00bd56f/matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc", size = 8305689 }, + { url = "https://files.pythonhosted.org/packages/c0/e8/a69f4ad5b544f509ec3718dfa003187a94a37d79bf2e175180668c0ff8ec/matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697", size = 7845515 }, +] + +[[package]] +name = "mda-xdrlib" +version = "0.2.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/4d/9c6a179e91b793fb9e5475b9876499855ff6c20097650871f15976fc95a0/mda_xdrlib-0.2.0.tar.gz", hash = "sha256:f26f7158a83c32b96d15b530fce2cbc1190c4b7024e41faa4ab3e3db74e272af", size = 35142 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/4b/5fe3a00833a9f9775b3c237624a6212798167278ffe10fe0de04f58612d0/mda_xdrlib-0.2.0-py3-none-any.whl", hash = "sha256:0d1757b339f5db2d017a89ddaae06a82cd7a2cce26b8063df9f52b64e933fb47", size = 14587 }, +] + +[[package]] +name = "mergedeep" +version = "1.3.4" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354 }, +] + +[[package]] +name = "monty" +version = "2024.10.21" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "numpy" }, + { name = "ruamel-yaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/01/d32964d6196ed09e1c99d3dcaa3b9c181f5f833108306ba2d4c752084c13/monty-2024.10.21.tar.gz", hash = "sha256:da69daf11075144c4e4fca1038413cf6ef0fafd3398954b5867de6b43ae5de1f", size = 82496 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/4c/213fcf3429991ce542bb6f4e106ab6b8a35518e741f3d1e68b391d80e4cf/monty-2024.10.21-py3-none-any.whl", hash = "sha256:47411cbc77ec827d23b6f2ac0d1b03c55eba7419d66d6df56168d925be31b0a4", size = 68521 }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, +] + +[[package]] +name = "networkx" +version = "3.2.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/80/a84676339aaae2f1cfdf9f418701dd634aef9cc76f708ef55c36ff39c3ca/networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6", size = 2073928 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/f0/8fbc882ca80cf077f1b246c0e3c3465f7f415439bdea6b899f6b19f61f70/networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2", size = 1647772 }, +] + +[[package]] +name = "nomad-lab" +version = "1.3.12.dev11+gbabaaccd2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "aniso8601" }, + { name = "ase" }, + { name = "bitarray" }, + { name = "cachetools" }, + { name = "click" }, + { name = "docstring-parser" }, + { name = "elasticsearch-dsl" }, + { name = "h5py" }, + { name = "hjson" }, + { name = "httpx" }, + { name = "importlib-metadata" }, + { name = "jmespath" }, + { name = "kaleido" }, + { name = "lxml" }, + { name = "lxml-html-clean" }, + { name = "matid" }, + { name = "nptyping" }, + { name = "numpy" }, + { name = "openpyxl" }, + { name = "orjson" }, + { name = "pandas" }, + { name = "panedr" }, + { name = "parmed" }, + { name = "pint" }, + { name = "py-spy" }, + { name = "pydantic" }, + { name = "pyinstrument" }, + { name = "pymatgen" }, + { name = "python-keycloak" }, + { name = "python-magic" }, + { name = "pytz" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "rfc3161ng" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "toposort" }, + { name = "typing-extensions" }, + { name = "unidecode" }, + { name = "wrapt" }, + { name = "xarray" }, +] +sdist = { url = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/files/a677a9ad4fddeb58109405a2326eb5414ae04980610d2a1a1970c40a5f77df56/nomad-lab-1.3.12.dev11+gbabaaccd2.tar.gz", hash = "sha256:a677a9ad4fddeb58109405a2326eb5414ae04980610d2a1a1970c40a5f77df56" } + +[[package]] +name = "nomad-measurements" +version = "0.1.1.dev24+g3fd8474.d20241203" +source = { editable = "." } +dependencies = [ + { name = "fairmat-readers-xrd" }, + { name = "nomad-lab" }, + { name = "pynxtools" }, + { name = "xmltodict" }, +] + +[package.optional-dependencies] +dev = [ + { name = "pytest" }, + { name = "ruff" }, + { name = "structlog" }, +] + +[package.metadata] +requires-dist = [ + { name = "fairmat-readers-xrd", specifier = "~=0.0.3" }, + { name = "nomad-lab", specifier = ">=1.3.4.dev0" }, + { name = "pynxtools", specifier = ">=0.6.1" }, + { name = "pytest", marker = "extra == 'dev'" }, + { name = "ruff", marker = "extra == 'dev'" }, + { name = "structlog", marker = "extra == 'dev'" }, + { name = "xmltodict", specifier = "==0.13.0" }, +] + +[[package]] +name = "nptyping" +version = "1.4.4" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "numpy" }, + { name = "typish" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/d9/0514384fbad1c269d861f1dfe8ef8adc9d8ccaac1fdaad9f007063b9d92f/nptyping-1.4.4-py3-none-any.whl", hash = "sha256:8128473b8ba0e65f3d6edc727cd99024e162edcf7e8a0ea8f9dfa6b070934d14", size = 31918 }, +] + +[[package]] +name = "numpy" +version = "1.26.4" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/94/ace0fdea5241a27d13543ee117cbc65868e82213fb31a8eb7fe9ff23f313/numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", size = 20631468 }, + { url = "https://files.pythonhosted.org/packages/20/f7/b24208eba89f9d1b58c1668bc6c8c4fd472b20c45573cb767f59d49fb0f6/numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", size = 13966411 }, + { url = "https://files.pythonhosted.org/packages/fc/a5/4beee6488160798683eed5bdb7eead455892c3b4e1f78d79d8d3f3b084ac/numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", size = 14219016 }, + { url = "https://files.pythonhosted.org/packages/4b/d7/ecf66c1cd12dc28b4040b15ab4d17b773b87fa9d29ca16125de01adb36cd/numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f", size = 18240889 }, + { url = "https://files.pythonhosted.org/packages/24/03/6f229fe3187546435c4f6f89f6d26c129d4f5bed40552899fcf1f0bf9e50/numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", size = 13876746 }, + { url = "https://files.pythonhosted.org/packages/39/fe/39ada9b094f01f5a35486577c848fe274e374bbf8d8f472e1423a0bbd26d/numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", size = 18078620 }, + { url = "https://files.pythonhosted.org/packages/d5/ef/6ad11d51197aad206a9ad2286dc1aac6a378059e06e8cf22cd08ed4f20dc/numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", size = 5972659 }, + { url = "https://files.pythonhosted.org/packages/19/77/538f202862b9183f54108557bfda67e17603fc560c384559e769321c9d92/numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", size = 15808905 }, + { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554 }, + { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127 }, + { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994 }, + { url = "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", size = 18252005 }, + { url = "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", size = 13885297 }, + { url = "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", size = 18093567 }, + { url = "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", size = 5968812 }, + { url = "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", size = 15811913 }, + { url = "https://files.pythonhosted.org/packages/95/12/8f2020a8e8b8383ac0177dc9570aad031a3beb12e38847f7129bacd96228/numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", size = 20335901 }, + { url = "https://files.pythonhosted.org/packages/75/5b/ca6c8bd14007e5ca171c7c03102d17b4f4e0ceb53957e8c44343a9546dcc/numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", size = 13685868 }, + { url = "https://files.pythonhosted.org/packages/79/f8/97f10e6755e2a7d027ca783f63044d5b1bc1ae7acb12afe6a9b4286eac17/numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", size = 13925109 }, + { url = "https://files.pythonhosted.org/packages/0f/50/de23fde84e45f5c4fda2488c759b69990fd4512387a8632860f3ac9cd225/numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", size = 17950613 }, + { url = "https://files.pythonhosted.org/packages/4c/0c/9c603826b6465e82591e05ca230dfc13376da512b25ccd0894709b054ed0/numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", size = 13572172 }, + { url = "https://files.pythonhosted.org/packages/76/8c/2ba3902e1a0fc1c74962ea9bb33a534bb05984ad7ff9515bf8d07527cadd/numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", size = 17786643 }, + { url = "https://files.pythonhosted.org/packages/28/4a/46d9e65106879492374999e76eb85f87b15328e06bd1550668f79f7b18c6/numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", size = 5677803 }, + { url = "https://files.pythonhosted.org/packages/16/2e/86f24451c2d530c88daf997cb8d6ac622c1d40d19f5a031ed68a4b73a374/numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", size = 15517754 }, + { url = "https://files.pythonhosted.org/packages/7d/24/ce71dc08f06534269f66e73c04f5709ee024a1afe92a7b6e1d73f158e1f8/numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c", size = 20636301 }, + { url = "https://files.pythonhosted.org/packages/ae/8c/ab03a7c25741f9ebc92684a20125fbc9fc1b8e1e700beb9197d750fdff88/numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be", size = 13971216 }, + { url = "https://files.pythonhosted.org/packages/6d/64/c3bcdf822269421d85fe0d64ba972003f9bb4aa9a419da64b86856c9961f/numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764", size = 14226281 }, + { url = "https://files.pythonhosted.org/packages/54/30/c2a907b9443cf42b90c17ad10c1e8fa801975f01cb9764f3f8eb8aea638b/numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", size = 18249516 }, + { url = "https://files.pythonhosted.org/packages/43/12/01a563fc44c07095996d0129b8899daf89e4742146f7044cdbdb3101c57f/numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd", size = 13882132 }, + { url = "https://files.pythonhosted.org/packages/16/ee/9df80b06680aaa23fc6c31211387e0db349e0e36d6a63ba3bd78c5acdf11/numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c", size = 18084181 }, + { url = "https://files.pythonhosted.org/packages/28/7d/4b92e2fe20b214ffca36107f1a3e75ef4c488430e64de2d9af5db3a4637d/numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6", size = 5976360 }, + { url = "https://files.pythonhosted.org/packages/b5/42/054082bd8220bbf6f297f982f0a8f5479fcbc55c8b511d928df07b965869/numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea", size = 15814633 }, + { url = "https://files.pythonhosted.org/packages/3f/72/3df6c1c06fc83d9cfe381cccb4be2532bbd38bf93fbc9fad087b6687f1c0/numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30", size = 20455961 }, + { url = "https://files.pythonhosted.org/packages/8e/02/570545bac308b58ffb21adda0f4e220ba716fb658a63c151daecc3293350/numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c", size = 18061071 }, + { url = "https://files.pythonhosted.org/packages/f4/5f/fafd8c51235f60d49f7a88e2275e13971e90555b67da52dd6416caec32fe/numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", size = 15709730 }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 }, +] + +[[package]] +name = "orjson" +version = "3.10.12" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/04/bb9f72987e7f62fb591d6c880c0caaa16238e4e530cbc3bdc84a7372d75f/orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff", size = 5438647 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/d2/78652b67f86d093dca984ce3fa5bf819ee1462627da83e7d0b784a9a7c45/orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d", size = 248688 }, + { url = "https://files.pythonhosted.org/packages/70/cb/f8b6a52f3bc724edf8a62d8d1d8ee17cf19d6ae1cac89f077f0e7c30f396/orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7", size = 136952 }, + { url = "https://files.pythonhosted.org/packages/a6/43/c55700df9814545bc8c35d87395ec4b9ee473a3c1f5ed72f8d3ad0298ee9/orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e", size = 149089 }, + { url = "https://files.pythonhosted.org/packages/07/da/e7e7d73bd971710b736fbd8330b8830c5fa4fc0ac003b31af61f03b26dfc/orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced", size = 140479 }, + { url = "https://files.pythonhosted.org/packages/08/49/c9dfddba56ff24eecfacf2f01a76cae4d249ac2995b1359bf63a74b1b318/orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56", size = 156564 }, + { url = "https://files.pythonhosted.org/packages/96/df/174d2eff227dc23b4540a0c2efa6ec8fe406c442c4b7f0f556242f026d1f/orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2", size = 131282 }, + { url = "https://files.pythonhosted.org/packages/6a/96/8628c53a52e2a0a1ee861d809092df72aabbd312c71de9ad6d49e2c039ab/orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13", size = 139764 }, + { url = "https://files.pythonhosted.org/packages/38/17/08becb49e59e7bb7b29dc1dad19bc0c48635e627ee27e60eb5b64efcf7b1/orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05", size = 131913 }, + { url = "https://files.pythonhosted.org/packages/2a/05/f32acc2500e3fafee9445eb8b2a6ff19c4641035e6059c6c8d7bdb3abc9e/orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85", size = 415782 }, + { url = "https://files.pythonhosted.org/packages/06/03/6cc740d998d8bb60e75d4b7e228d18964475239ac842cc1865d49d092545/orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885", size = 142383 }, + { url = "https://files.pythonhosted.org/packages/f8/30/39cac82547fe021615376245c558b216d3ae8c99bd6b2274f312e49f1c94/orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2", size = 130661 }, + { url = "https://files.pythonhosted.org/packages/95/29/c6837f4fc1eaa742eaf5abcd767ab6805493f44fe1f72b37c1743706c1d8/orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3", size = 143625 }, + { url = "https://files.pythonhosted.org/packages/f6/62/c6b955f2144421108fa441b5471e1d5f8654a7df9840b261106e04d5d15c/orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509", size = 135075 }, + { url = "https://files.pythonhosted.org/packages/d3/48/7c3cd094488f5a3bc58488555244609a8c4d105bc02f2b77e509debf0450/orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74", size = 248687 }, + { url = "https://files.pythonhosted.org/packages/ff/90/e55f0e25c7fdd1f82551fe787f85df6f378170caca863c04c810cd8f2730/orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23", size = 136953 }, + { url = "https://files.pythonhosted.org/packages/2a/b3/109c020cf7fee747d400de53b43b183ca9d3ebda3906ad0b858eb5479718/orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252", size = 149090 }, + { url = "https://files.pythonhosted.org/packages/96/d4/35c0275dc1350707d182a1b5da16d1184b9439848060af541285407f18f9/orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef", size = 140480 }, + { url = "https://files.pythonhosted.org/packages/3b/79/f863ff460c291ad2d882cc3b580cc444bd4ec60c9df55f6901e6c9a3f519/orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252", size = 156564 }, + { url = "https://files.pythonhosted.org/packages/98/7e/8d5835449ddd873424ee7b1c4ba73a0369c1055750990d824081652874d6/orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4", size = 131279 }, + { url = "https://files.pythonhosted.org/packages/46/f5/d34595b6d7f4f984c6fef289269a7f98abcdc2445ebdf90e9273487dda6b/orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae", size = 139764 }, + { url = "https://files.pythonhosted.org/packages/b3/5b/ee6e9ddeab54a7b7806768151c2090a2d36025bc346a944f51cf172ef7f7/orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b", size = 131915 }, + { url = "https://files.pythonhosted.org/packages/c4/45/febee5951aef6db5cd8cdb260548101d7ece0ca9d4ddadadf1766306b7a4/orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da", size = 415783 }, + { url = "https://files.pythonhosted.org/packages/27/a5/5a8569e49f3a6c093bee954a3de95062a231196f59e59df13a48e2420081/orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07", size = 142387 }, + { url = "https://files.pythonhosted.org/packages/6e/05/02550fb38c5bf758f3994f55401233a2ef304e175f473f2ac6dbf464cc8b/orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd", size = 130664 }, + { url = "https://files.pythonhosted.org/packages/8c/f4/ba31019d0646ce51f7ac75af6dabf98fd89dbf8ad87a9086da34710738e7/orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79", size = 143623 }, + { url = "https://files.pythonhosted.org/packages/83/fe/babf08842b989acf4c46103fefbd7301f026423fab47e6f3ba07b54d7837/orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8", size = 135074 }, + { url = "https://files.pythonhosted.org/packages/a1/2f/989adcafad49afb535da56b95d8f87d82e748548b2a86003ac129314079c/orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d", size = 248678 }, + { url = "https://files.pythonhosted.org/packages/69/b9/8c075e21a50c387649db262b618ebb7e4d40f4197b949c146fc225dd23da/orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f", size = 136763 }, + { url = "https://files.pythonhosted.org/packages/87/d3/78edf10b4ab14c19f6d918cf46a145818f4aca2b5a1773c894c5490d3a4c/orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70", size = 149137 }, + { url = "https://files.pythonhosted.org/packages/16/81/5db8852bdf990a0ddc997fa8f16b80895b8cc77c0fe3701569ed2b4b9e78/orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69", size = 140567 }, + { url = "https://files.pythonhosted.org/packages/fa/a6/9ce1e3e3db918512efadad489630c25841eb148513d21dab96f6b4157fa1/orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9", size = 156620 }, + { url = "https://files.pythonhosted.org/packages/47/d4/05133d6bea24e292d2f7628b1e19986554f7d97b6412b3e51d812e38db2d/orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192", size = 131555 }, + { url = "https://files.pythonhosted.org/packages/b9/7a/b3fbffda8743135c7811e95dc2ab7cdbc5f04999b83c2957d046f1b3fac9/orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559", size = 139743 }, + { url = "https://files.pythonhosted.org/packages/b5/13/95bbcc9a6584aa083da5ce5004ce3d59ea362a542a0b0938d884fd8790b6/orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc", size = 131733 }, + { url = "https://files.pythonhosted.org/packages/e8/29/dddbb2ea6e7af426fcc3da65a370618a88141de75c6603313d70768d1df1/orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f", size = 415788 }, + { url = "https://files.pythonhosted.org/packages/53/df/4aea59324ac539975919b4705ee086aced38e351a6eb3eea0f5071dd5661/orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be", size = 142347 }, + { url = "https://files.pythonhosted.org/packages/55/55/a52d83d7c49f8ff44e0daab10554490447d6c658771569e1c662aa7057fe/orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c", size = 130829 }, + { url = "https://files.pythonhosted.org/packages/a1/8b/b1beb1624dd4adf7d72e2d9b73c4b529e7851c0c754f17858ea13e368b33/orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708", size = 143659 }, + { url = "https://files.pythonhosted.org/packages/13/91/634c9cd0bfc6a857fc8fab9bf1a1bd9f7f3345e0d6ca5c3d4569ceb6dcfa/orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb", size = 135221 }, + { url = "https://files.pythonhosted.org/packages/1b/bb/3f560735f46fa6f875a9d7c4c2171a58cfb19f56a633d5ad5037a924f35f/orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543", size = 248662 }, + { url = "https://files.pythonhosted.org/packages/a3/df/54817902350636cc9270db20486442ab0e4db33b38555300a1159b439d16/orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296", size = 126055 }, + { url = "https://files.pythonhosted.org/packages/2e/77/55835914894e00332601a74540840f7665e81f20b3e2b9a97614af8565ed/orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e", size = 131507 }, + { url = "https://files.pythonhosted.org/packages/33/9e/b91288361898e3158062a876b5013c519a5d13e692ac7686e3486c4133ab/orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f", size = 131686 }, + { url = "https://files.pythonhosted.org/packages/b2/15/08ce117d60a4d2d3fd24e6b21db463139a658e9f52d22c9c30af279b4187/orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e", size = 415710 }, + { url = "https://files.pythonhosted.org/packages/71/af/c09da5ed58f9c002cf83adff7a4cdf3e6cee742aa9723395f8dcdb397233/orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6", size = 142305 }, + { url = "https://files.pythonhosted.org/packages/17/d1/8612038d44f33fae231e9ba480d273bac2b0383ce9e77cb06bede1224ae3/orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e", size = 130815 }, + { url = "https://files.pythonhosted.org/packages/67/2c/d5f87834be3591555cfaf9aecdf28f480a6f0b4afeaac53bad534bf9518f/orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc", size = 143664 }, + { url = "https://files.pythonhosted.org/packages/6a/05/7d768fa3ca23c9b3e1e09117abeded1501119f1d8de0ab722938c91ab25d/orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825", size = 134944 }, + { url = "https://files.pythonhosted.org/packages/01/50/5a52cfe65fc70e7b843cbe143b850313095d4e45f99aeb278b4b3691f3cf/orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d", size = 249130 }, + { url = "https://files.pythonhosted.org/packages/af/42/adb00fc60890e57ee6022257d70d9a20dfd28bfd955401e2d02a60192226/orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967", size = 136784 }, + { url = "https://files.pythonhosted.org/packages/f5/f6/5ef130a2e28a0c633c82da67224212fa84b17f93d9d768c255f389d66641/orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c", size = 148936 }, + { url = "https://files.pythonhosted.org/packages/54/80/f40805bb094d3470bcfca8d30ae9f4606bb90c809190fee18c17a4653956/orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36", size = 140291 }, + { url = "https://files.pythonhosted.org/packages/b4/0a/c91265a075af28fcb118a9a690dccc0f31c52dd7f486f5cc73aa6f9a69b4/orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8", size = 156335 }, + { url = "https://files.pythonhosted.org/packages/6f/1f/c8fc64b25e2e4a5fa0fb514a0325719e99461c088a3b659954a57b8c1f3c/orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566", size = 131118 }, + { url = "https://files.pythonhosted.org/packages/b3/f7/f5dba457bbc6aaf8ebd0131a17eb672835d2ea31f763d1462c191902bc10/orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755", size = 139573 }, + { url = "https://files.pythonhosted.org/packages/85/03/87091a1c831076e8d6ed0be19d30bd837d3c27e29f43b6b2dc23efee3d29/orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e", size = 131760 }, + { url = "https://files.pythonhosted.org/packages/53/70/956ca7999fe43b5e2ca51248f732850acaaf00f8fa5b8f7924bc504157bb/orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6", size = 415605 }, + { url = "https://files.pythonhosted.org/packages/ca/7f/4f49c1a9da03e383198c0fa418cc4262d01d70931742dfc504c2a495ed7b/orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80", size = 142208 }, + { url = "https://files.pythonhosted.org/packages/81/d9/0216c950e295b1c493510ef546b80328dc06e2ae4a82bc693386e4cdebeb/orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69", size = 130495 }, + { url = "https://files.pythonhosted.org/packages/1a/d0/70d97b583d628a307d4bc1f96f7ab6cf137e32849c06ea03d4337ad19e14/orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b", size = 143467 }, + { url = "https://files.pythonhosted.org/packages/ec/a3/725e4cac70d2a88f5fc4f9eed451e12d594063823feb931c30ac1394d26f/orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548", size = 134927 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "palettable" +version = "3.3.3" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/3d/a5854d60850485bff12f28abfe0e17f503e866763bed61aed4990b604530/palettable-3.3.3.tar.gz", hash = "sha256:094dd7d9a5fc1cca4854773e5c1fc6a315b33bd5b3a8f47064928facaf0490a8", size = 106639 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/f7/3367feadd4ab56783b0971c9b7edfbdd68e0c70ce877949a5dd2117ed4a0/palettable-3.3.3-py2.py3-none-any.whl", hash = "sha256:74e9e7d7fe5a9be065e02397558ed1777b2df0b793a6f4ce1a5ee74f74fb0caa", size = 332251 }, +] + +[[package]] +name = "pandas" +version = "2.2.3" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827 }, + { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897 }, + { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908 }, + { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210 }, + { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292 }, + { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379 }, + { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471 }, + { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222 }, + { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274 }, + { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836 }, + { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505 }, + { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420 }, + { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457 }, + { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166 }, + { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, + { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, + { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, + { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, + { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, + { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, + { url = "https://files.pythonhosted.org/packages/ca/8c/8848a4c9b8fdf5a534fe2077af948bf53cd713d77ffbcd7bd15710348fd7/pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39", size = 12595535 }, + { url = "https://files.pythonhosted.org/packages/9c/b9/5cead4f63b6d31bdefeb21a679bc5a7f4aaf262ca7e07e2bc1c341b68470/pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30", size = 11319822 }, + { url = "https://files.pythonhosted.org/packages/31/af/89e35619fb573366fa68dc26dad6ad2c08c17b8004aad6d98f1a31ce4bb3/pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c", size = 15625439 }, + { url = "https://files.pythonhosted.org/packages/3d/dd/bed19c2974296661493d7acc4407b1d2db4e2a482197df100f8f965b6225/pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c", size = 13068928 }, + { url = "https://files.pythonhosted.org/packages/31/a3/18508e10a31ea108d746c848b5a05c0711e0278fa0d6f1c52a8ec52b80a5/pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea", size = 16783266 }, + { url = "https://files.pythonhosted.org/packages/c4/a5/3429bd13d82bebc78f4d78c3945efedef63a7cd0c15c17b2eeb838d1121f/pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761", size = 14450871 }, + { url = "https://files.pythonhosted.org/packages/2f/49/5c30646e96c684570925b772eac4eb0a8cb0ca590fa978f56c5d3ae73ea1/pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e", size = 11618011 }, +] + +[[package]] +name = "panedr" +version = "0.8.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "pandas" }, + { name = "pyedr" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/f9/af3e6f5627a9c92f5577eda9e670992e35806b31155b4b371ee44b249436/panedr-0.8.0.tar.gz", hash = "sha256:50ecac36810d12db77903048b4972a234b6e3b2c122ffa2a158eba0ff69effc4", size = 17004 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/8d/9ecc9ccd64365c75be17ca7fe15234359c19f97220a29df68acc07e6c9dc/panedr-0.8.0-py3-none-any.whl", hash = "sha256:e988c60ae02d9212692eaa03554d0c8c5042fcff7173082f0afa685117797634", size = 16079 }, +] + +[[package]] +name = "parmed" +version = "4.3.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/29/80bc4fa049e166e0b8eda2a7220c5473809f2f96bb15f1f117abfb8dad7c/parmed-4.3.0.tar.gz", hash = "sha256:3d0208f56507649b5af91bbb128f650a6f86de1b5a9af780e6479145e5362ea3", size = 20197299 } + +[[package]] +name = "pillow" +version = "11.0.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/26/0d95c04c868f6bdb0c447e3ee2de5564411845e36a858cfd63766bc7b563/pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739", size = 46737780 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/fb/a6ce6836bd7fd93fbf9144bf54789e02babc27403b50a9e1583ee877d6da/pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947", size = 3154708 }, + { url = "https://files.pythonhosted.org/packages/6a/1d/1f51e6e912d8ff316bb3935a8cda617c801783e0b998bf7a894e91d3bd4c/pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba", size = 2979223 }, + { url = "https://files.pythonhosted.org/packages/90/83/e2077b0192ca8a9ef794dbb74700c7e48384706467067976c2a95a0f40a1/pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086", size = 4183167 }, + { url = "https://files.pythonhosted.org/packages/0e/74/467af0146970a98349cdf39e9b79a6cc8a2e7558f2c01c28a7b6b85c5bda/pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9", size = 4283912 }, + { url = "https://files.pythonhosted.org/packages/85/b1/d95d4f7ca3a6c1ae120959605875a31a3c209c4e50f0029dc1a87566cf46/pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488", size = 4195815 }, + { url = "https://files.pythonhosted.org/packages/41/c3/94f33af0762ed76b5a237c5797e088aa57f2b7fa8ee7932d399087be66a8/pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f", size = 4366117 }, + { url = "https://files.pythonhosted.org/packages/ba/3c/443e7ef01f597497268899e1cca95c0de947c9bbf77a8f18b3c126681e5d/pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb", size = 4278607 }, + { url = "https://files.pythonhosted.org/packages/26/95/1495304448b0081e60c0c5d63f928ef48bb290acee7385804426fa395a21/pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97", size = 4410685 }, + { url = "https://files.pythonhosted.org/packages/45/da/861e1df971ef0de9870720cb309ca4d553b26a9483ec9be3a7bf1de4a095/pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50", size = 2249185 }, + { url = "https://files.pythonhosted.org/packages/d5/4e/78f7c5202ea2a772a5ab05069c1b82503e6353cd79c7e474d4945f4b82c3/pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c", size = 2566726 }, + { url = "https://files.pythonhosted.org/packages/77/e4/6e84eada35cbcc646fc1870f72ccfd4afacb0fae0c37ffbffe7f5dc24bf1/pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1", size = 2254585 }, + { url = "https://files.pythonhosted.org/packages/f0/eb/f7e21b113dd48a9c97d364e0915b3988c6a0b6207652f5a92372871b7aa4/pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc", size = 3154705 }, + { url = "https://files.pythonhosted.org/packages/25/b3/2b54a1d541accebe6bd8b1358b34ceb2c509f51cb7dcda8687362490da5b/pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a", size = 2979222 }, + { url = "https://files.pythonhosted.org/packages/20/12/1a41eddad8265c5c19dda8fb6c269ce15ee25e0b9f8f26286e6202df6693/pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3", size = 4190220 }, + { url = "https://files.pythonhosted.org/packages/a9/9b/8a8c4d07d77447b7457164b861d18f5a31ae6418ef5c07f6f878fa09039a/pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5", size = 4291399 }, + { url = "https://files.pythonhosted.org/packages/fc/e4/130c5fab4a54d3991129800dd2801feeb4b118d7630148cd67f0e6269d4c/pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b", size = 4202709 }, + { url = "https://files.pythonhosted.org/packages/39/63/b3fc299528d7df1f678b0666002b37affe6b8751225c3d9c12cf530e73ed/pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa", size = 4372556 }, + { url = "https://files.pythonhosted.org/packages/c6/a6/694122c55b855b586c26c694937d36bb8d3b09c735ff41b2f315c6e66a10/pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306", size = 4287187 }, + { url = "https://files.pythonhosted.org/packages/ba/a9/f9d763e2671a8acd53d29b1e284ca298bc10a595527f6be30233cdb9659d/pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9", size = 4418468 }, + { url = "https://files.pythonhosted.org/packages/6e/0e/b5cbad2621377f11313a94aeb44ca55a9639adabcaaa073597a1925f8c26/pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5", size = 2249249 }, + { url = "https://files.pythonhosted.org/packages/dc/83/1470c220a4ff06cd75fc609068f6605e567ea51df70557555c2ab6516b2c/pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291", size = 2566769 }, + { url = "https://files.pythonhosted.org/packages/52/98/def78c3a23acee2bcdb2e52005fb2810ed54305602ec1bfcfab2bda6f49f/pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9", size = 2254611 }, + { url = "https://files.pythonhosted.org/packages/1c/a3/26e606ff0b2daaf120543e537311fa3ae2eb6bf061490e4fea51771540be/pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923", size = 3147642 }, + { url = "https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903", size = 2978999 }, + { url = "https://files.pythonhosted.org/packages/d9/ff/5a45000826a1aa1ac6874b3ec5a856474821a1b59d838c4f6ce2ee518fe9/pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4", size = 4196794 }, + { url = "https://files.pythonhosted.org/packages/9d/21/84c9f287d17180f26263b5f5c8fb201de0f88b1afddf8a2597a5c9fe787f/pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f", size = 4300762 }, + { url = "https://files.pythonhosted.org/packages/84/39/63fb87cd07cc541438b448b1fed467c4d687ad18aa786a7f8e67b255d1aa/pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9", size = 4210468 }, + { url = "https://files.pythonhosted.org/packages/7f/42/6e0f2c2d5c60f499aa29be14f860dd4539de322cd8fb84ee01553493fb4d/pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7", size = 4381824 }, + { url = "https://files.pythonhosted.org/packages/31/69/1ef0fb9d2f8d2d114db982b78ca4eeb9db9a29f7477821e160b8c1253f67/pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6", size = 4296436 }, + { url = "https://files.pythonhosted.org/packages/44/ea/dad2818c675c44f6012289a7c4f46068c548768bc6c7f4e8c4ae5bbbc811/pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc", size = 4429714 }, + { url = "https://files.pythonhosted.org/packages/af/3a/da80224a6eb15bba7a0dcb2346e2b686bb9bf98378c0b4353cd88e62b171/pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6", size = 2249631 }, + { url = "https://files.pythonhosted.org/packages/57/97/73f756c338c1d86bb802ee88c3cab015ad7ce4b838f8a24f16b676b1ac7c/pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47", size = 2567533 }, + { url = "https://files.pythonhosted.org/packages/0b/30/2b61876e2722374558b871dfbfcbe4e406626d63f4f6ed92e9c8e24cac37/pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25", size = 2254890 }, + { url = "https://files.pythonhosted.org/packages/63/24/e2e15e392d00fcf4215907465d8ec2a2f23bcec1481a8ebe4ae760459995/pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699", size = 3147300 }, + { url = "https://files.pythonhosted.org/packages/43/72/92ad4afaa2afc233dc44184adff289c2e77e8cd916b3ddb72ac69495bda3/pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38", size = 2978742 }, + { url = "https://files.pythonhosted.org/packages/9e/da/c8d69c5bc85d72a8523fe862f05ababdc52c0a755cfe3d362656bb86552b/pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2", size = 4194349 }, + { url = "https://files.pythonhosted.org/packages/cd/e8/686d0caeed6b998351d57796496a70185376ed9c8ec7d99e1d19ad591fc6/pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2", size = 4298714 }, + { url = "https://files.pythonhosted.org/packages/ec/da/430015cec620d622f06854be67fd2f6721f52fc17fca8ac34b32e2d60739/pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527", size = 4208514 }, + { url = "https://files.pythonhosted.org/packages/44/ae/7e4f6662a9b1cb5f92b9cc9cab8321c381ffbee309210940e57432a4063a/pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa", size = 4380055 }, + { url = "https://files.pythonhosted.org/packages/74/d5/1a807779ac8a0eeed57f2b92a3c32ea1b696e6140c15bd42eaf908a261cd/pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f", size = 4296751 }, + { url = "https://files.pythonhosted.org/packages/38/8c/5fa3385163ee7080bc13026d59656267daaaaf3c728c233d530e2c2757c8/pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb", size = 4430378 }, + { url = "https://files.pythonhosted.org/packages/ca/1d/ad9c14811133977ff87035bf426875b93097fb50af747793f013979facdb/pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798", size = 2249588 }, + { url = "https://files.pythonhosted.org/packages/fb/01/3755ba287dac715e6afdb333cb1f6d69740a7475220b4637b5ce3d78cec2/pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de", size = 2567509 }, + { url = "https://files.pythonhosted.org/packages/c0/98/2c7d727079b6be1aba82d195767d35fcc2d32204c7a5820f822df5330152/pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84", size = 2254791 }, + { url = "https://files.pythonhosted.org/packages/eb/38/998b04cc6f474e78b563716b20eecf42a2fa16a84589d23c8898e64b0ffd/pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b", size = 3150854 }, + { url = "https://files.pythonhosted.org/packages/13/8e/be23a96292113c6cb26b2aa3c8b3681ec62b44ed5c2bd0b258bd59503d3c/pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003", size = 2982369 }, + { url = "https://files.pythonhosted.org/packages/97/8a/3db4eaabb7a2ae8203cd3a332a005e4aba00067fc514aaaf3e9721be31f1/pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2", size = 4333703 }, + { url = "https://files.pythonhosted.org/packages/28/ac/629ffc84ff67b9228fe87a97272ab125bbd4dc462745f35f192d37b822f1/pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a", size = 4412550 }, + { url = "https://files.pythonhosted.org/packages/d6/07/a505921d36bb2df6868806eaf56ef58699c16c388e378b0dcdb6e5b2fb36/pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8", size = 4461038 }, + { url = "https://files.pythonhosted.org/packages/d6/b9/fb620dd47fc7cc9678af8f8bd8c772034ca4977237049287e99dda360b66/pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8", size = 2253197 }, + { url = "https://files.pythonhosted.org/packages/df/86/25dde85c06c89d7fc5db17940f07aae0a56ac69aa9ccb5eb0f09798862a8/pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904", size = 2572169 }, + { url = "https://files.pythonhosted.org/packages/51/85/9c33f2517add612e17f3381aee7c4072779130c634921a756c97bc29fb49/pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3", size = 2256828 }, + { url = "https://files.pythonhosted.org/packages/f3/8b/01849a820686bf309b7d79a935d57bcafbfd016f1d78fc3d37ed2ba00f96/pillow-11.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba", size = 3154738 }, + { url = "https://files.pythonhosted.org/packages/35/e8/ff71a40ca8e24cfd6bb333cc4ca8cc24ebecb6942bb4ad1e5ec61f33d1b8/pillow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a", size = 2979272 }, + { url = "https://files.pythonhosted.org/packages/09/4f/2280ad43f5639174a0227920a59664fb78c5096a0b3fd865fee5184d4526/pillow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916", size = 4179756 }, + { url = "https://files.pythonhosted.org/packages/14/b1/c8f428bae932a27ce9c87e7b21aba8ea3e820aa11413c5a795868c37e039/pillow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d", size = 4280488 }, + { url = "https://files.pythonhosted.org/packages/78/66/7c5e44ab2c0123710a5d4692a4ee5931ac438efd7730ac395e305902346e/pillow-11.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7", size = 4192772 }, + { url = "https://files.pythonhosted.org/packages/36/5d/a9a00f8251ce93144f0250c0f0aece31b83ff33ffc243cdf987a8d584818/pillow-11.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e", size = 4363533 }, + { url = "https://files.pythonhosted.org/packages/fd/21/d8182fc1f3233078eb744f9f2950992f537655174febb8b3f7bdc61847b1/pillow-11.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f", size = 4275415 }, + { url = "https://files.pythonhosted.org/packages/c9/ee/93e02e8c29210ba7383843405b8b39bd19a164770f14d8569096dd123781/pillow-11.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae", size = 4407081 }, + { url = "https://files.pythonhosted.org/packages/6e/77/8cda03af2b5177a18d645ad4a7446cda6c1292d1a2fb6e772a06fa9fc86b/pillow-11.0.0-cp39-cp39-win32.whl", hash = "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4", size = 2249213 }, + { url = "https://files.pythonhosted.org/packages/9f/e4/c90bf7889489f3a14803bd00d3645945dd476020ab67579985af8233ab30/pillow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd", size = 2566862 }, + { url = "https://files.pythonhosted.org/packages/27/a6/77d2ed085055237581d6276ac1e85f562f1b1848614647d8427e49d83c03/pillow-11.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd", size = 2254605 }, + { url = "https://files.pythonhosted.org/packages/36/57/42a4dd825eab762ba9e690d696d894ba366e06791936056e26e099398cda/pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2", size = 3119239 }, + { url = "https://files.pythonhosted.org/packages/98/f7/25f9f9e368226a1d6cf3507081a1a7944eddd3ca7821023377043f5a83c8/pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2", size = 2950803 }, + { url = "https://files.pythonhosted.org/packages/59/01/98ead48a6c2e31e6185d4c16c978a67fe3ccb5da5c2ff2ba8475379bb693/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b", size = 3281098 }, + { url = "https://files.pythonhosted.org/packages/51/c0/570255b2866a0e4d500a14f950803a2ec273bac7badc43320120b9262450/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2", size = 3323665 }, + { url = "https://files.pythonhosted.org/packages/0e/75/689b4ec0483c42bfc7d1aacd32ade7a226db4f4fac57c6fdcdf90c0731e3/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830", size = 3310533 }, + { url = "https://files.pythonhosted.org/packages/3d/30/38bd6149cf53da1db4bad304c543ade775d225961c4310f30425995cb9ec/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734", size = 3414886 }, + { url = "https://files.pythonhosted.org/packages/ec/3d/c32a51d848401bd94cabb8767a39621496491ee7cd5199856b77da9b18ad/pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316", size = 2567508 }, + { url = "https://files.pythonhosted.org/packages/67/21/fbb4222399f72d6e9c828818ff4ef8391c1e8e71623368295c8dbc789bd1/pillow-11.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06", size = 2950706 }, + { url = "https://files.pythonhosted.org/packages/a2/b6/6aeb6e018b705ea4076db50aac078c9db8715a901f4c65698edc31375d0f/pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273", size = 3323524 }, + { url = "https://files.pythonhosted.org/packages/48/26/36cc90e9932c5fe7c8876c32d6091ef5a09e8137e8e0633045bd35085fdd/pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790", size = 3414787 }, + { url = "https://files.pythonhosted.org/packages/44/5c/089154029fcca7729ae142ac820057f74ca4b0b59617734276c31281af15/pillow-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944", size = 2567664 }, +] + +[[package]] +name = "pint" +version = "0.17" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8d/ac/3ec9b2692e17db4d99d1b9af8c68a45a2c37aab714c1c0320a3a6f1601e0/Pint-0.17.tar.gz", hash = "sha256:f4d0caa713239e6847a7c6eefe2427358566451fe56497d533f21fb590a3f313", size = 265661 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/de/53a77b82553579affab7438d299f850acbc1c4dd741c5ce52594513cb0ef/Pint-0.17-py2.py3-none-any.whl", hash = "sha256:6593c5dfaf2f701c54f17453191dff05e90ec9ebc3d1901468a59cfcb3289a4c", size = 204982 }, +] + +[[package]] +name = "plotly" +version = "5.24.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "packaging" }, + { name = "tenacity" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/4f/428f6d959818d7425a94c190a6b26fbc58035cbef40bf249be0b62a9aedd/plotly-5.24.1.tar.gz", hash = "sha256:dbc8ac8339d248a4bcc36e08a5659bacfe1b079390b8953533f4eb22169b4bae", size = 9479398 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/ae/580600f441f6fc05218bd6c9d5794f4aef072a7d9093b291f1c50a9db8bc/plotly-5.24.1-py3-none-any.whl", hash = "sha256:f67073a1e637eb0dc3e46324d9d51e2fe76e9727c892dde64ddf1e1b51f29089", size = 19054220 }, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, +] + +[[package]] +name = "py-spy" +version = "0.4.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/cd/9dacc04604dc4398ce5bed77ed59918ad0940f15165954d4aaa651cc640c/py_spy-0.4.0.tar.gz", hash = "sha256:806602ce7972782cc9c1e383f339bfc27bfb822d42485e6a3e0530ae5040e1f0", size = 253236 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/7e/02ca3ee68507db47afce769504060d71b4dc1455f0f9faa8d32fc7762221/py_spy-0.4.0-py2.py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:f2cf3f7130e7d780471faa5957441d3b4e0ec39a79b2c00f4c33d494f7728428", size = 3617847 }, + { url = "https://files.pythonhosted.org/packages/65/7c/d9e26cc4c8e91f96a3a65de04d2e2e4131fbcaf6830d10917d4fab9d6788/py_spy-0.4.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:47cdda4c34d9b6cb01f3aaeceb2e88faf57da880207fe72ff6ff97e9bb6cc8a9", size = 1761955 }, + { url = "https://files.pythonhosted.org/packages/d2/e4/8fbfd219b7f282b80e6b2e74c9197850d2c51db8555705567bb65507b060/py_spy-0.4.0-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eee3d0bde85ca5cf4f01f012d461180ca76c24835a96f7b5c4ded64eb6a008ab", size = 2059471 }, + { url = "https://files.pythonhosted.org/packages/a7/1d/79a94a5ace810c13b730ce96765ca465c171b4952034f1be7402d8accbc1/py_spy-0.4.0-py2.py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c5f06ffce4c9c98b7fc9f5e67e5e7db591173f1351837633f3f23d9378b1d18a", size = 2067486 }, + { url = "https://files.pythonhosted.org/packages/6d/90/fbbb038f826a83ed15ebc4ae606815d6cad6c5c6399c86c7ab96f6c60817/py_spy-0.4.0-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87573e64dbfdfc89ba2e0f5e2f525aa84e0299c7eb6454b47ea335fde583a7a0", size = 2141433 }, + { url = "https://files.pythonhosted.org/packages/c9/c1/5e012669ebb687e546dc99fcfc4861ebfcf3a337b7a41af945df23140bb5/py_spy-0.4.0-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8bf2f3702cef367a489faa45177b41a6c31b2a3e5bd78c978d44e29340152f5a", size = 2732951 }, + { url = "https://files.pythonhosted.org/packages/74/8b/dd8490660019a6b0be28d9ffd2bf1db967604b19f3f2719c0e283a16ac7f/py_spy-0.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:77d8f637ade38367d944874776f45b703b7ac5938b1f7be8891f3a5876ddbb96", size = 1810770 }, +] + +[[package]] +name = "pyasn1" +version = "0.6.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135 }, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "pyasn1" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/67/6afbf0d507f73c32d21084a79946bfcfca5fbc62a72057e9c23797a737c9/pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c", size = 310028 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd", size = 181537 }, +] + +[[package]] +name = "pybtex" +version = "0.24.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "latexcodec" }, + { name = "pyyaml" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/9b/fd39836a6397fb363446d83075a7b9c2cc562f4c449292e039ed36084376/pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755", size = 402879 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/5f/40d8e90f985a05133a8895fc454c6127ecec3de8b095dd35bba91382f803/pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f", size = 561354 }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[package]] +name = "pydantic" +version = "1.10.19" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/2d/df30554721cdad26b241b7a92e726dd1c3716d90c92915731eb00e17a9f7/pydantic-1.10.19.tar.gz", hash = "sha256:fea36c2065b7a1d28c6819cc2e93387b43dd5d3cf5a1e82d8132ee23f36d1f10", size = 355208 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/ba/c94b9cc035ffdc8e445600be0fc53718adda7e537c62c5ef965a319aa13b/pydantic-1.10.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a415b9e95fa602b10808113967f72b2da8722061265d6af69268c111c254832d", size = 2608044 }, + { url = "https://files.pythonhosted.org/packages/6e/8d/dad8f46d1287dadef2fdf8b387881ad5391170449447272f64cb91cfcc04/pydantic-1.10.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:11965f421f7eb026439d4eb7464e9182fe6d69c3d4d416e464a4485d1ba61ab6", size = 2298308 }, + { url = "https://files.pythonhosted.org/packages/fc/6c/a91074909c7f3dfacee3faa199e5642f428fc5b70ab405e1b5347f7f7d3d/pydantic-1.10.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5bb81fcfc6d5bff62cd786cbd87480a11d23f16d5376ad2e057c02b3b44df96", size = 3123771 }, + { url = "https://files.pythonhosted.org/packages/63/df/345d250339c712b4e25914a7438897de0b055246c19cc0d83e7e7f8889ff/pydantic-1.10.19-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83ee8c9916689f8e6e7d90161e6663ac876be2efd32f61fdcfa3a15e87d4e413", size = 3151934 }, + { url = "https://files.pythonhosted.org/packages/24/5a/ab448a23cffc3081d99581c65a7bd6d1944327c07723f50e3919b003f34e/pydantic-1.10.19-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0399094464ae7f28482de22383e667625e38e1516d6b213176df1acdd0c477ea", size = 3183816 }, + { url = "https://files.pythonhosted.org/packages/03/92/a16d5e374a44b37837c3a677737f15dc8dcb30739d84653c24cd4d9d1f70/pydantic-1.10.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8b2cf5e26da84f2d2dee3f60a3f1782adedcee785567a19b68d0af7e1534bd1f", size = 3142492 }, + { url = "https://files.pythonhosted.org/packages/51/de/f6a33ffa2f8f117fa3f5499d0b1cdc99180d8d5a3a10707803069189e146/pydantic-1.10.19-cp310-cp310-win_amd64.whl", hash = "sha256:1fc8cc264afaf47ae6a9bcbd36c018d0c6b89293835d7fb0e5e1a95898062d59", size = 2141320 }, + { url = "https://files.pythonhosted.org/packages/d9/e7/c3276090605233eeda49e3f290ef6e8dc59962f883fa7934455996986d67/pydantic-1.10.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d7a8a1dd68bac29f08f0a3147de1885f4dccec35d4ea926e6e637fac03cdb4b3", size = 2582314 }, + { url = "https://files.pythonhosted.org/packages/79/4c/fea1176272425a1b972db48b5b2582165095f22d88d4a249f02439dcd3e5/pydantic-1.10.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07d00ca5ef0de65dd274005433ce2bb623730271d495a7d190a91c19c5679d34", size = 2269582 }, + { url = "https://files.pythonhosted.org/packages/85/e5/34b62732fa683d1171be07fb40f0bab3fb35bc52e56bfcae1629aee236c4/pydantic-1.10.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad57004e5d73aee36f1e25e4e73a4bc853b473a1c30f652dc8d86b0a987ffce3", size = 3088988 }, + { url = "https://files.pythonhosted.org/packages/f5/23/be131d6162cd2c4f7f29cf0a881c0e9bdbf7c37010803f8a85010bf016bf/pydantic-1.10.19-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dce355fe7ae53e3090f7f5fa242423c3a7b53260747aa398b4b3aaf8b25f41c3", size = 3120098 }, + { url = "https://files.pythonhosted.org/packages/f1/72/7cf7dfc8e68098751a5cee8969a967dad2acf9ce460963d071296bdeee81/pydantic-1.10.19-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0d32227ea9a3bf537a2273fd2fdb6d64ab4d9b83acd9e4e09310a777baaabb98", size = 3164823 }, + { url = "https://files.pythonhosted.org/packages/43/09/c7eb4c39faf7f01ebaed3fae8bf0b31388f2f7ffcefb07b2e5b9ea0f0617/pydantic-1.10.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e351df83d1c9cffa53d4e779009a093be70f1d5c6bb7068584086f6a19042526", size = 3115412 }, + { url = "https://files.pythonhosted.org/packages/80/a7/f9ecaaf940193a68d9566e2e61edce5f57d75591e59ff07a6af5fa7fb56f/pydantic-1.10.19-cp311-cp311-win_amd64.whl", hash = "sha256:d8d72553d2f3f57ce547de4fa7dc8e3859927784ab2c88343f1fc1360ff17a08", size = 2119019 }, + { url = "https://files.pythonhosted.org/packages/dc/bb/4883d3957b10b814b3bd7b7e8d51274f756e243e5eebd2f1cda36d933a32/pydantic-1.10.19-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d5b5b7c6bafaef90cbb7dafcb225b763edd71d9e22489647ee7df49d6d341890", size = 2410108 }, + { url = "https://files.pythonhosted.org/packages/86/80/752f888be6b068727fb893d4d875ef1cc6bb3ed3dc382f33a019fc26598a/pydantic-1.10.19-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:570ad0aeaf98b5e33ff41af75aba2ef6604ee25ce0431ecd734a28e74a208555", size = 2166105 }, + { url = "https://files.pythonhosted.org/packages/af/d4/346e56049cbc5ca429a1590bd0ab47cc154b1dec9e85fc920f7d5e50c889/pydantic-1.10.19-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0890fbd7fec9e151c7512941243d830b2d6076d5df159a2030952d480ab80a4e", size = 2800443 }, + { url = "https://files.pythonhosted.org/packages/c5/73/e1934973bf8bf436f1e1e365ed48dc51da5d7ba8b88dcd2239c962a267e0/pydantic-1.10.19-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec5c44e6e9eac5128a9bfd21610df3b8c6b17343285cc185105686888dc81206", size = 2830897 }, + { url = "https://files.pythonhosted.org/packages/87/5e/90e3e3c8bd70012986c22aa5f291aab948bdf419ca694833872594ff99ea/pydantic-1.10.19-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6eb56074b11a696e0b66c7181da682e88c00e5cebe6570af8013fcae5e63e186", size = 2863147 }, + { url = "https://files.pythonhosted.org/packages/50/c2/95be3fdfafdaf49d09369a46bbcf1f22494765479b44436e954837b818cc/pydantic-1.10.19-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9d7d48fbc5289efd23982a0d68e973a1f37d49064ccd36d86de4543aff21e086", size = 2823662 }, + { url = "https://files.pythonhosted.org/packages/00/ba/8b1c91cc27428b5e9d340abf99f82c01987eb638937ff64ae0166354bff0/pydantic-1.10.19-cp312-cp312-win_amd64.whl", hash = "sha256:fd34012691fbd4e67bdf4accb1f0682342101015b78327eaae3543583fcd451e", size = 1950372 }, + { url = "https://files.pythonhosted.org/packages/c9/ac/47074c2d50a27808e30d1a9734abbdf348ea81ac417d88bcafceb0f5a432/pydantic-1.10.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:573254d844f3e64093f72fcd922561d9c5696821ff0900a0db989d8c06ab0c25", size = 2600036 }, + { url = "https://files.pythonhosted.org/packages/8c/8f/72f3de72075daf7b22ff8c749ec0f89a6f51650b6a1bb16260951c9e1c23/pydantic-1.10.19-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff09600cebe957ecbb4a27496fe34c1d449e7957ed20a202d5029a71a8af2e35", size = 2291520 }, + { url = "https://files.pythonhosted.org/packages/e5/39/3c2abc14f0d2bc0d92d984399768f7d8485d94e3da30ca155f04be8a2bd1/pydantic-1.10.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4739c206bfb6bb2bdc78dcd40bfcebb2361add4ceac6d170e741bb914e9eff0f", size = 3218258 }, + { url = "https://files.pythonhosted.org/packages/86/0e/d94d9d1ebb8189b4a6162deb4a706963243d6f1615f43688e948271be2e7/pydantic-1.10.19-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bfb5b378b78229119d66ced6adac2e933c67a0aa1d0a7adffbe432f3ec14ce4", size = 3230746 }, + { url = "https://files.pythonhosted.org/packages/96/ce/e627333cb205af1b0a12959a3c31b5fca0015ce95d9c6cdaadb10ef38695/pydantic-1.10.19-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f31742c95e3f9443b8c6fa07c119623e61d76603be9c0d390bcf7e888acabcb", size = 3262567 }, + { url = "https://files.pythonhosted.org/packages/f7/86/c907b7e4171843439a23bd4ddaa31d385a6d407805abc0a8b1a08409b167/pydantic-1.10.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6444368b651a14c2ce2fb22145e1496f7ab23cbdb978590d47c8d34a7bc0289", size = 3235065 }, + { url = "https://files.pythonhosted.org/packages/e6/69/d98b269ac5414cd6a7fe4bc1a3dfd1fd726203e49f6821133a7f2c9217bb/pydantic-1.10.19-cp39-cp39-win_amd64.whl", hash = "sha256:945407f4d08cd12485757a281fca0e5b41408606228612f421aa4ea1b63a095d", size = 2211319 }, + { url = "https://files.pythonhosted.org/packages/a4/68/99ebf43b6b0321175cff0a05f0ce7fa51a8de67d390ccb8ab0d534be86a9/pydantic-1.10.19-py3-none-any.whl", hash = "sha256:2206a1752d9fac011e95ca83926a269fb0ef5536f7e053966d058316e24d929f", size = 165863 }, +] + +[[package]] +name = "pyedr" +version = "0.8.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "mda-xdrlib" }, + { name = "numpy" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/57/c6bc9d7c68f53dbed1562ea102f9c0ed531c72e988ed57eb2e50c0dea7a1/pyedr-0.8.0.tar.gz", hash = "sha256:2d119dc32cd0b0b2a14584626c2349b9dbad132a6bfed32723fe841ed5857fd0", size = 392817 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/77/33237d2e9f19e32774704555f8efbd4c336d82b1bcf4dab712d5a8c2a9d5/pyedr-0.8.0-py3-none-any.whl", hash = "sha256:3e61705d4460bae9fd1f4245a11bdd433ac7fc6084ebd0ab8b8f5b6bcfeb5ad0", size = 396975 }, +] + +[[package]] +name = "pyinstrument" +version = "5.0.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3c/14/726f2e2553aca08f25b7166197d22a4426053d5fb423c53417342ac584b1/pyinstrument-5.0.0.tar.gz", hash = "sha256:144f98eb3086667ece461f66324bf1cc1ee0475b399ab3f9ded8449cc76b7c90", size = 262211 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/df/4a63d58387a27d1cd50362988156d5004655e11bc08df78f2b982b9b5b4b/pyinstrument-5.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6a83cf18f5594e1b1899b12b46df7aabca556eef895846ccdaaa3a46a37d1274", size = 128590 }, + { url = "https://files.pythonhosted.org/packages/da/f0/86bb6db85548eedb4cf915aa30536d7dbf74916b35b5186eceed53b12187/pyinstrument-5.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1cc236313272d0222261be8e2b2a08e42d7ccbe54db9059babf4d77040da1880", size = 120444 }, + { url = "https://files.pythonhosted.org/packages/2e/f6/e0eb363c77d8d04f4b95fa4f16cf0432811e262b525bc9378a2d911f2743/pyinstrument-5.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd685d68a31f3715ca61f82c37c1c2f8b75f45646bd9840e04681d91862bd85", size = 144328 }, + { url = "https://files.pythonhosted.org/packages/d3/46/cc9acf4c58e5731063b6adb20f0ef9be60b6c6910b03425949d31af0eaff/pyinstrument-5.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cecd0f6558f13fba74a9f036b2b168956206e9525dcb84c6add2d73ab61dc22", size = 143124 }, + { url = "https://files.pythonhosted.org/packages/d6/80/9c47db683863f560de741ddd644fb7b7cbeda320530d23b38fbd418d780a/pyinstrument-5.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40a8485c2e41082a20822001a6651667bb5327f6f5f6759987198593e45bb376", size = 144445 }, + { url = "https://files.pythonhosted.org/packages/d0/70/db68425795301764b517028afe223c7b8ccfa96089789b9c2eb17b7676a8/pyinstrument-5.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a6294b7111348765ba4c311fc91821ed8b59c6690c4dab23aa7165a67da9e972", size = 144019 }, + { url = "https://files.pythonhosted.org/packages/08/80/96c956991cb92ffb42ab4dcff1960f5fdd5eee9326250ca85348844ef167/pyinstrument-5.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a164f3dae5c7db2faa501639659d64034cde8db62a4d6744712593a369bc8629", size = 143491 }, + { url = "https://files.pythonhosted.org/packages/2c/ee/05397012dfceb7d852199da7615d03aa94910508d24f5d5336d64472e065/pyinstrument-5.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f6bac8a434407de6f2ebddbcdecdb19b324c9315cbb8b8c2352714f7ced8181", size = 143868 }, + { url = "https://files.pythonhosted.org/packages/8f/d7/b37093cee6cdd76b777484b7482eaa82503fad499d9162ba290ec4a54555/pyinstrument-5.0.0-cp310-cp310-win32.whl", hash = "sha256:7e8dc887e535f5c5e5a2a64a0729496f11ddcef0c23b0a555d5ab6fa19759445", size = 121904 }, + { url = "https://files.pythonhosted.org/packages/32/bd/caf681abaf2cef4dac6acaab5ce075694a9fd57ba4300d9c43ff21d40d3d/pyinstrument-5.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c337190a1818841732643ba93065411591df526bc9de44b97ba8f56b581d2ef", size = 122776 }, + { url = "https://files.pythonhosted.org/packages/b2/f8/08b44141c6ab73e79b3642c6f09e98e2178b4df982d807661b506f8a1c23/pyinstrument-5.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c9052f548ec5ccecc50676fbf1a1d0b60bdbd3cd67630c5253099af049d1f0ad", size = 128326 }, + { url = "https://files.pythonhosted.org/packages/9c/eb/80d5a87fd16af9ad34653196b53a53bca6ee6ffdf11e0b140a9c7e079219/pyinstrument-5.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:197d25487f52da3f8ec26d46db7202bc5d703cc73c1503371166417eb7cea14e", size = 120309 }, + { url = "https://files.pythonhosted.org/packages/cb/84/e5005be5e453cf9ddb3249d6af9dc2767fa6ac8345406c8a0632360273c4/pyinstrument-5.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a072d928dc16a32e0f3d1e51726f4472a69d66d838ee1d1bf248737fd70b9415", size = 142651 }, + { url = "https://files.pythonhosted.org/packages/4b/96/6a0fb47df5b3f0652417dc66c9a9331ea66ef77ad8932a38d095d2802fb6/pyinstrument-5.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2c7ae2c984879a645fce583bf3053b7e57495f60c1e158bb71ad7dfced1fbf1", size = 141581 }, + { url = "https://files.pythonhosted.org/packages/5b/57/4b865f0d8d3026cf35e6cef21b0a7a3eadb580812d75847aa549b41a3316/pyinstrument-5.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8284bf8847629c9a5054702b9306eab3ab14c2474959e01e606369ffbcf938bc", size = 142723 }, + { url = "https://files.pythonhosted.org/packages/45/78/99d176fad5c90c8179411e96d40408ef8447814d15161433845cef887bf1/pyinstrument-5.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4fd94cc725efb1dd41ae8e20a5f06a6a5363dec959e8a9dacbac3f4d12d28f03", size = 142712 }, + { url = "https://files.pythonhosted.org/packages/cd/db/ce4147eb930d9aa27e20c3a1458dcd847eddee25453d58a654d236cb11b2/pyinstrument-5.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e0fdb9fe6f9c694940410dcc82e23a3fe2928114328efd35047fc0bb8a6c959f", size = 142224 }, + { url = "https://files.pythonhosted.org/packages/c4/ba/2cfdcf3483bdd4d7eae0885eef7960cf080a84cdc2ab9d855d9eb212ee00/pyinstrument-5.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9ffe938e63173ceb8ce7b6b309ce26c9d44d16f53c0162d89d6e706eb9e69802", size = 142460 }, + { url = "https://files.pythonhosted.org/packages/3d/a1/6c8530fae99cfcb9eb9b452f98859e9eca8601c8674f00e3d09ea3cfe3d0/pyinstrument-5.0.0-cp311-cp311-win32.whl", hash = "sha256:80d2a248516f372a89e0fe9ddf4a9d6388a4c6481b6ebd3dfe01b3cd028c0275", size = 121878 }, + { url = "https://files.pythonhosted.org/packages/15/0f/105690613ce7351ee8e876dcd172cdacb9379c2b1b4093819b53dff7486c/pyinstrument-5.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:7ccf4267aff62de0e1d976e8f5da25dcb69737ae86e38d3cfffa24877837e7d1", size = 122681 }, + { url = "https://files.pythonhosted.org/packages/02/ec/fb3a3df90d561d5e0c6682627d2fb3d582af92c311d116633fb83f399ba9/pyinstrument-5.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:dec3529a5351ea160baeef1ef2a6e28b1a7a7b3fb5e9863fae8de6da73d0f69a", size = 128364 }, + { url = "https://files.pythonhosted.org/packages/73/fa/4b079dba81995a968b84ebcea0335dfe6e273b5ec9f079aee5a662e574c1/pyinstrument-5.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5a39e3ef84c56183f8274dfd584b8c2fae4783c6204f880513e70ab2440b9137", size = 120380 }, + { url = "https://files.pythonhosted.org/packages/2b/37/e51aa7a30f622e811d1d771c80f86eefdd98ca0ad7ed8f9d8cdfcdc9572f/pyinstrument-5.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3938f063ee065e05826628dadf1fb32c7d26b22df4a945c22f7fe25ea1ba6a2", size = 143834 }, + { url = "https://files.pythonhosted.org/packages/25/eb/8711a084acb173dc2d5df1034348a99968c1b0f9a4dc4d487d0ec04428ff/pyinstrument-5.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f18990cc16b2e23b54738aa2f222863e1d36daaaec8f67b1613ddfa41f5b24db", size = 142765 }, + { url = "https://files.pythonhosted.org/packages/67/a1/30ed993fe10921f25e69f67125685f708178311f531aa3b791c1424db877/pyinstrument-5.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3731412b5bfdcef8014518f145140c69384793e218863a33a39ccfe5fb42045", size = 144121 }, + { url = "https://files.pythonhosted.org/packages/21/35/bb28bde4803713ab2e7da2c9764eab25c6f28a1d52677c19eb159f666a6a/pyinstrument-5.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02b2eaf38460b14eea646d6bb7f373eb5bb5691d13f788e80bdcb3a4eaa2519e", size = 143816 }, + { url = "https://files.pythonhosted.org/packages/68/dd/3c0bc95901b9b92a8751b45236cff4493ec0f2061827b142cd25e6a08bf2/pyinstrument-5.0.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e57db06590f13657b2bce8c4d9cf8e9e2bd90bb729bcbbe421c531ba67ad7add", size = 143555 }, + { url = "https://files.pythonhosted.org/packages/52/bd/ac2f907152605b18cb7143de4dbbf825e79497273c940277d59e89832982/pyinstrument-5.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ddaa3001c1b798ec9bf1266ef476bbc0834b74d547d531f5ed99e7d05ac5d81b", size = 143989 }, + { url = "https://files.pythonhosted.org/packages/98/dd/07d1a3c9c0abf4518ff3881c0da81f1064383dddb094f56f8c1f78748c8f/pyinstrument-5.0.0-cp312-cp312-win32.whl", hash = "sha256:b69ff982acf5ef2f4e0f32ce9b4b598f256faf88438f233ea3a72f1042707e5b", size = 121974 }, + { url = "https://files.pythonhosted.org/packages/a1/ed/2503309f485bf4c8893b76d585323505f422c5fa1e1885ee9d4a2bb57aa5/pyinstrument-5.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bf4ef061d60befe72366ce0ed4c75dee5be089644de38f9936d2df0bcf44af0", size = 122759 }, + { url = "https://files.pythonhosted.org/packages/49/c9/b2ed3db062bca45decb7fdcab2ed2cba6b1afb32b21bbde7166aafe5ecd3/pyinstrument-5.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:79a54def2d4aa83a4ed37c6cffc5494ae5de140f0453169eb4f7c744cc249d3a", size = 128268 }, + { url = "https://files.pythonhosted.org/packages/0f/14/456f51598c2e8401b248c38591488c3815f38a4c0bca6babb3f81ab93a71/pyinstrument-5.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9538f746f166a40c8802ebe5c3e905d50f3faa189869cd71c083b8a639e574bb", size = 120299 }, + { url = "https://files.pythonhosted.org/packages/11/e8/abeecedfa5dc6e6651e569c8876f0a55b973c906ebeb90185504a792ddb2/pyinstrument-5.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bbab65cae1483ad8a18429511d1eac9e3efec9f7961f2fd1bf90e1e2d69ef15", size = 143953 }, + { url = "https://files.pythonhosted.org/packages/80/03/107d3889ea42a777b0231bf3b8e5da8f8370b5bed5a55d79bcf7607d2393/pyinstrument-5.0.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4351ad041d208c597e296a0e9c2e6e21cc96804608bcafa40cfa168f3c2b8f79", size = 142858 }, + { url = "https://files.pythonhosted.org/packages/72/6c/0f4af16e529d0ea290cbc72f97e0403a118692f954b2abdaf5547e05e026/pyinstrument-5.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ceee5252f4580abec29bcc5c965453c217b0d387c412a5ffb8afdcda4e648feb", size = 144259 }, + { url = "https://files.pythonhosted.org/packages/18/c7/1a8100197b67c03a8a733d0ffbc881c35f23ccbaf0f0e470c03b0e639da5/pyinstrument-5.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b3050a4e7033103a13cfff9802680e2070a9173e1a258fa3f15a80b4eb9ee278", size = 143951 }, + { url = "https://files.pythonhosted.org/packages/87/bb/9826f6a62f2fee88a54059e1ca36a9766dab6220f826c8745dc453c31e99/pyinstrument-5.0.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3b1f44a34da7810938df615fb7cbc43cd879b42ca6b5cd72e655aee92149d012", size = 143722 }, + { url = "https://files.pythonhosted.org/packages/42/2c/9a5b0cc42296637e23f50881e36add73edde2e668d34095e3ddbd899a1e6/pyinstrument-5.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fde075196c8a3b2be191b8da05b92ff909c78d308f82df56d01a8cfdd6da07b9", size = 144138 }, + { url = "https://files.pythonhosted.org/packages/66/96/85044622fae98feaabaf26dbee39a7151d9a7c8d020a870033cd90f326ca/pyinstrument-5.0.0-cp313-cp313-win32.whl", hash = "sha256:1a9b62a8b54e05e7723eb8b9595fadc43559b73290c87b3b1cb2dc5944559790", size = 121977 }, + { url = "https://files.pythonhosted.org/packages/dd/36/a6a44b5162a9d102b085ef7107299be766868679ab2c974a4888823c8a0f/pyinstrument-5.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:2478d2c55f77ad8e281e67b0dfe7c2176304bb824c307e86e11890f5e68d7feb", size = 122766 }, + { url = "https://files.pythonhosted.org/packages/87/5e/49ce41c584fe557449b08a593be8bf89d7381266aa5510d13c119eca583b/pyinstrument-5.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bd953163616bc29c2ccb1e4c0e48ccdd11e0a97fc849da26bc362bba372019ba", size = 128588 }, + { url = "https://files.pythonhosted.org/packages/63/bf/a62b51002e02cb19684cf40dbb9157779149561bdf3d587b7d72f7cd491c/pyinstrument-5.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8d2a7279ed9b6d7cdae247bc2e57095a32f35dfe32182c334ab0ac3eb02e0eac", size = 120444 }, + { url = "https://files.pythonhosted.org/packages/b9/38/28e51389cf8be6fa0645a1ccf120386ea80946978aafc2e403a38115e146/pyinstrument-5.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68001dfcb8a37b624a1c3de5d2ee7d634f63eac7a6dd1357b7370a5cdbdcf567", size = 143939 }, + { url = "https://files.pythonhosted.org/packages/92/d2/e569c8385b8df647b1d166e0219285efd32a2d5f59d7e111c9c69bd6f154/pyinstrument-5.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5c4c3cc6410ad5afe0e352a7fb09fb1ab85eb5676ec5ec8522123759d9cc68f", size = 142800 }, + { url = "https://files.pythonhosted.org/packages/a2/24/ef3026ae402bbb41144b276453c74b5eeeee0d7f3181a4b250317e28cb6e/pyinstrument-5.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d87ddab66b1b3525ad3abc49a88aaa51efcaf83578e9d2a702c03a1cea39f28", size = 144050 }, + { url = "https://files.pythonhosted.org/packages/ad/e3/bef30a129b2c14d8ec58661d7556d96b1d8916398b5eb2f2acd6a5fd351a/pyinstrument-5.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:03182ffaa9c91687cbaba80dc0c5a47015c5ea170fe642f632d88e885cf07356", size = 143717 }, + { url = "https://files.pythonhosted.org/packages/bf/7b/e17a3fefdc829b15dbc8d8a71aa8721c959b4f1404ee2aa3d6a2f0ad00d3/pyinstrument-5.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:39b60417c9c12eed04e1886644e92aa0b281d72e5d0b097b16253cade43110f7", size = 143161 }, + { url = "https://files.pythonhosted.org/packages/b0/bd/e5410866d218bc7083dd49fbcc2a093445484fb6ca8048f0d839a490bc0b/pyinstrument-5.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7bb389b6d1573361bd1367b296133c5c69184e35fc18db22e29e8cdf56f158f9", size = 143574 }, + { url = "https://files.pythonhosted.org/packages/9d/8a/2f9fb919c9428b8c6ff02b1d742ef35b44f4564b4609c5331e485adcd4af/pyinstrument-5.0.0-cp39-cp39-win32.whl", hash = "sha256:ae69478815edb3c63e7ebf82e1e13e38c3fb2bab833b1c013643c3475b1b8cf5", size = 121907 }, + { url = "https://files.pythonhosted.org/packages/77/26/592b947ee3d9ad5368f322e95f73b985e2f7d4b16ae5dd1248d3612f2758/pyinstrument-5.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:83caeb4150c0334e9e290c0f9bb164ff6bdc199065ecb62016268e8a88589a51", size = 122787 }, +] + +[[package]] +name = "pymatgen" +version = "2024.5.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "joblib" }, + { name = "matplotlib" }, + { name = "monty" }, + { name = "networkx" }, + { name = "numpy" }, + { name = "palettable" }, + { name = "pandas" }, + { name = "plotly" }, + { name = "pybtex" }, + { name = "requests" }, + { name = "ruamel-yaml" }, + { name = "scipy" }, + { name = "spglib" }, + { name = "sympy" }, + { name = "tabulate" }, + { name = "tqdm" }, + { name = "uncertainties" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/96/baf171ee518886112ceab2a1b566ff585dd336146ddac2b12e3448592bc3/pymatgen-2024.5.1.tar.gz", hash = "sha256:dc5c1e342e7013e70cc5ef3d857fd67147c09c44af42e25c4fddaa4d89979c49", size = 3008278 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/2b/8a422c7b843ba82c886660b10f539dd72f281b2001beaa6b5002a90cb390/pymatgen-2024.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6dfa468492308044c2bc8b60fbc5e4b3e1c58476b588833dbb84eaaa1fb5c6ce", size = 3521632 }, + { url = "https://files.pythonhosted.org/packages/fb/fb/9b8f915ea8e6d69b6c2c86d4abb9036ba802c90b68d6110f48d11fa8ddc4/pymatgen-2024.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7214e7cc65374cd9eb69e1c2f6f144df77b3d714b033b144f62e8fd6978bd6d8", size = 4820989 }, + { url = "https://files.pythonhosted.org/packages/fc/23/0039ae994a24f3ace24ae77796645723e23e6ac540372466f5a8a9fd94c2/pymatgen-2024.5.1-cp310-cp310-win32.whl", hash = "sha256:dd3869629428087aafc4873aec9f69e13ba715bc0fc9b5f77cd98be3ddb0d90f", size = 3471924 }, + { url = "https://files.pythonhosted.org/packages/62/58/114df86b2f0956ac5bb2c182ba9d24fdfd389fb3c49594db411d5c350884/pymatgen-2024.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:29a104b7e5b5de9641ec7602d3cba26f6f36953cc62df9b8e611c06e3d5da169", size = 3515823 }, + { url = "https://files.pythonhosted.org/packages/f7/c1/b384c1c37dd107487bfdb6dcdf7620c8cb6f720d12f7e08451c1bf3e79b6/pymatgen-2024.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcbf5ec720b40dc0d6e51a2ad11d401d4e2f050c05cb5faa14a45d63887c35de", size = 3521417 }, + { url = "https://files.pythonhosted.org/packages/66/46/79cca363d142d779ebd10d100dc11770a1d175694affdd13193709bf85b4/pymatgen-2024.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d77cc72459b54f1f6aaeca9b95fe536adb7b8d12b0d72c2f81a159a61b09fdda", size = 4941164 }, + { url = "https://files.pythonhosted.org/packages/40/54/35cfe9b376d97037b204b7454571bdbadaf11753fe47c9bcb3506503c923/pymatgen-2024.5.1-cp311-cp311-win32.whl", hash = "sha256:5d6156a5fff6f09577cc68da151246993ee32dd45191c0c27fd390558d40f56c", size = 3471528 }, + { url = "https://files.pythonhosted.org/packages/52/01/e0be2b3f4f42b5ca6e40568a67ddb625f6af0a46130ce75b7c167ff65e6b/pymatgen-2024.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:6597af65a7f0482b4213e0cc9027aafca213adcda362ff76e32c1edefd6fa1df", size = 3516034 }, + { url = "https://files.pythonhosted.org/packages/7d/18/66803e632c585f26b0b8839783dd8a0674b7d663e791f4ae2938b57705bb/pymatgen-2024.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ef3bb3712bda019099849046da9675050b9a9442b799aa076563376e41b460b2", size = 3523125 }, + { url = "https://files.pythonhosted.org/packages/93/05/4ba91c3de937dd010126d8b1c2b2b2900fd1e8053dcbc20ec32048815d0f/pymatgen-2024.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beb8a49e397e550e34d2bd1a04dfa776430d81e4f5aab9ce2abb1d63f657ba62", size = 4936013 }, + { url = "https://files.pythonhosted.org/packages/68/48/fc46115f9a71af47fea2ca134da95927c860a8fd4b3ef5be0914d4e3c992/pymatgen-2024.5.1-cp312-cp312-win32.whl", hash = "sha256:ae40bc1e54213b06824be8ce3a1cdcc0562acb2f64e36a1cb9c666cf36c65a4e", size = 3472171 }, + { url = "https://files.pythonhosted.org/packages/eb/91/b7ed9f49bd76f236eb6511a526f1bb690830ac20f89c6ff9932c87e52827/pymatgen-2024.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:209b9ae5e61f77be5c9ea7013af893d3606b5b028dc7b2fd0c0d12087a50c01d", size = 3516548 }, + { url = "https://files.pythonhosted.org/packages/0a/c6/54c45ddd1099545cefc2eccb34cbf3d8b77cc5ae8dcd7ba576a513b6224c/pymatgen-2024.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12683c3064d3808b8dfebb0843a6e5b12fb3f1cabb24128123105920fdb24168", size = 3523384 }, + { url = "https://files.pythonhosted.org/packages/a8/ac/86509622cae04a5dd525858c7aa1224fb8b4311a57948f4cd86adfbffd7c/pymatgen-2024.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d713794f73231b459c3da55d36fc655bb84fe6fe8175a1e1679e11241806d631", size = 4829984 }, + { url = "https://files.pythonhosted.org/packages/1c/c0/dddd645829d6e6507da97ce3a6f5b586c3941e13fb2687ffa987602b392c/pymatgen-2024.5.1-cp39-cp39-win32.whl", hash = "sha256:bcf6ff0ee688633b83370d32a627a34da0fee40d1a718d2e9341908d7deae910", size = 3473498 }, + { url = "https://files.pythonhosted.org/packages/5c/1b/ec4e6d1d197de663db404acb93187afbb3ff1d343a7aa2051f9d5eb7271b/pymatgen-2024.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:836fbb08c69816288593a9b0e8d9f05b398f9d1be919cdd810ec575d0c8946f7", size = 3516518 }, +] + +[[package]] +name = "pynxtools" +version = "0.8.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "anytree" }, + { name = "ase" }, + { name = "click" }, + { name = "click-default-group" }, + { name = "h5py" }, + { name = "importlib-metadata" }, + { name = "lxml" }, + { name = "mergedeep" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "pyyaml" }, + { name = "xarray" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b6/83/8b0ba6b44a6bd527a1ca669d41a37ade789f7e60140b68d6b330cc00c2ae/pynxtools-0.8.2.tar.gz", hash = "sha256:6b9e07877fdc00322cf97eee8a85715e4755f15c6ab0caf42f788fec2febdbfa", size = 5291880 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/2b/cb60a07f08dcf83c9b4467d13856a41add38c22107dfaae7fe6013e76833/pynxtools-0.8.2-py3-none-any.whl", hash = "sha256:b722d5a511ef0a3e6a8541b494256934a765de07458b967ecce1f16fd98e046e", size = 5706511 }, +] + +[[package]] +name = "pyparsing" +version = "3.2.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/d5/e5aeee5387091148a19e1145f63606619cb5f20b83fccb63efae6474e7b2/pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c", size = 920984 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", size = 106921 }, +] + +[[package]] +name = "pytest" +version = "8.3.3" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/6c/62bbd536103af674e227c41a8f3dcd022d591f6eed5facb5a0f31ee33bbc/pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", size = 1442487 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2", size = 342341 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "python-keycloak" +version = "4.7.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "async-property" }, + { name = "deprecation" }, + { name = "httpx" }, + { name = "jwcrypto" }, + { name = "requests" }, + { name = "requests-toolbelt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8c/8c/b5c99ebfab988745ea1480ba99bf4f1c9fd159f7beff3d346b272f43f460/python_keycloak-4.7.2.tar.gz", hash = "sha256:9a7fbef6df7b6ad1978ab65d340cc5048e547df1e11771ace661a198932cc4e4", size = 64005 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/8c/42d3e67e2093ba936fe6a240f6b278afd951ed4fb1c80361a7b897edef48/python_keycloak-4.7.2-py3-none-any.whl", hash = "sha256:c2751a1ddda7362b6922b0093b553343dcae0f6e39e47be489116ae66d8a9bbb", size = 77828 }, +] + +[[package]] +name = "python-magic" +version = "0.4.24" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/70/76b185393fecf78f81c12f9dc7b1df814df785f6acb545fc92b016e75a7e/python-magic-0.4.24.tar.gz", hash = "sha256:de800df9fb50f8ec5974761054a708af6e4246b03b4bdaee993f948947b0ebcf", size = 17295 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/99/c89223c6547df268596899334ee77b3051f606077317023617b1c43162fb/python_magic-0.4.24-py2.py3-none-any.whl", hash = "sha256:4fec8ee805fea30c07afccd1592c0f17977089895bdfaae5fec870a84e997626", size = 12785 }, +] + +[[package]] +name = "pytz" +version = "2024.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", size = 319692 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 }, + { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 }, + { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 }, + { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 }, + { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 }, + { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 }, + { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 }, + { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 }, + { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 }, + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, + { url = "https://files.pythonhosted.org/packages/65/d8/b7a1db13636d7fb7d4ff431593c510c8b8fca920ade06ca8ef20015493c5/PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", size = 184777 }, + { url = "https://files.pythonhosted.org/packages/0a/02/6ec546cd45143fdf9840b2c6be8d875116a64076218b61d68e12548e5839/PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", size = 172318 }, + { url = "https://files.pythonhosted.org/packages/0e/9a/8cc68be846c972bda34f6c2a93abb644fb2476f4dcc924d52175786932c9/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", size = 720891 }, + { url = "https://files.pythonhosted.org/packages/e9/6c/6e1b7f40181bc4805e2e07f4abc10a88ce4648e7e95ff1abe4ae4014a9b2/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", size = 722614 }, + { url = "https://files.pythonhosted.org/packages/3d/32/e7bd8535d22ea2874cef6a81021ba019474ace0d13a4819c2a4bce79bd6a/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", size = 737360 }, + { url = "https://files.pythonhosted.org/packages/d7/12/7322c1e30b9be969670b672573d45479edef72c9a0deac3bb2868f5d7469/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", size = 699006 }, + { url = "https://files.pythonhosted.org/packages/82/72/04fcad41ca56491995076630c3ec1e834be241664c0c09a64c9a2589b507/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", size = 723577 }, + { url = "https://files.pythonhosted.org/packages/ed/5e/46168b1f2757f1fcd442bc3029cd8767d88a98c9c05770d8b420948743bb/PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", size = 144593 }, + { url = "https://files.pythonhosted.org/packages/19/87/5124b1c1f2412bb95c59ec481eaf936cd32f0fe2a7b16b97b81c4c017a6a/PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", size = 162312 }, +] + +[[package]] +name = "requests" +version = "2.31.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/be/10918a2eac4ae9f02f6cfe6414b7a155ccd8f7f9d4380d62fd5b955065c3/requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1", size = 110794 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", size = 62574 }, +] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481 }, +] + +[[package]] +name = "rfc3161ng" +version = "2.1.3" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "pyasn1" }, + { name = "pyasn1-modules" }, + { name = "python-dateutil" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/ab/7b1cc11019fb63d9420093ed9ff339ea544d0158141ac0daf33961a200cf/rfc3161ng-2.1.3.tar.gz", hash = "sha256:1e88614da61b22abd591577f9dd39d3a030335f9e8a12d8bc001149c17d0a01e", size = 22418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/66/cf13725b4ad06527ca482c99202a683ca3b35586eec9bad5f9e19efb43b9/rfc3161ng-2.1.3-py2.py3-none-any.whl", hash = "sha256:81fe7e4488f523c758b1206bf5e72ba2066b78f2812107b1b7bb16a7596e524b", size = 9949 }, +] + +[[package]] +name = "ruamel-yaml" +version = "0.18.6" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "ruamel-yaml-clib", marker = "python_full_version < '3.13' and platform_python_implementation == 'CPython'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/81/4dfc17eb6ebb1aac314a3eb863c1325b907863a1b8b1382cdffcb6ac0ed9/ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b", size = 143362 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/67/8ece580cc363331d9a53055130f86b096bf16e38156e33b1d3014fffda6b/ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636", size = 117761 }, +] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.12" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/57/40a958e863e299f0c74ef32a3bde9f2d1ea8d69669368c0c502a0997f57f/ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5", size = 131301 }, + { url = "https://files.pythonhosted.org/packages/98/a8/29a3eb437b12b95f50a6bcc3d7d7214301c6c529d8fdc227247fa84162b5/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969", size = 633728 }, + { url = "https://files.pythonhosted.org/packages/35/6d/ae05a87a3ad540259c3ad88d71275cbd1c0f2d30ae04c65dcbfb6dcd4b9f/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df", size = 722230 }, + { url = "https://files.pythonhosted.org/packages/7f/b7/20c6f3c0b656fe609675d69bc135c03aac9e3865912444be6339207b6648/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76", size = 686712 }, + { url = "https://files.pythonhosted.org/packages/cd/11/d12dbf683471f888d354dac59593873c2b45feb193c5e3e0f2ebf85e68b9/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6", size = 663936 }, + { url = "https://files.pythonhosted.org/packages/72/14/4c268f5077db5c83f743ee1daeb236269fa8577133a5cfa49f8b382baf13/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd", size = 696580 }, + { url = "https://files.pythonhosted.org/packages/80/29/c0a017b704aaf3cbf704989785cd9c5d5b8ccec2dae6ac0c53833c84e677/ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da", size = 100326 }, + { url = "https://files.pythonhosted.org/packages/3a/65/fa39d74db4e2d0cd252355732d966a460a41cd01c6353b820a0952432839/ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28", size = 118079 }, + { url = "https://files.pythonhosted.org/packages/fb/8f/683c6ad562f558cbc4f7c029abcd9599148c51c54b5ef0f24f2638da9fbb/ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6", size = 132224 }, + { url = "https://files.pythonhosted.org/packages/3c/d2/b79b7d695e2f21da020bd44c782490578f300dd44f0a4c57a92575758a76/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e", size = 641480 }, + { url = "https://files.pythonhosted.org/packages/68/6e/264c50ce2a31473a9fdbf4fa66ca9b2b17c7455b31ef585462343818bd6c/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e", size = 739068 }, + { url = "https://files.pythonhosted.org/packages/86/29/88c2567bc893c84d88b4c48027367c3562ae69121d568e8a3f3a8d363f4d/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52", size = 703012 }, + { url = "https://files.pythonhosted.org/packages/11/46/879763c619b5470820f0cd6ca97d134771e502776bc2b844d2adb6e37753/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642", size = 704352 }, + { url = "https://files.pythonhosted.org/packages/02/80/ece7e6034256a4186bbe50dee28cd032d816974941a6abf6a9d65e4228a7/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2", size = 737344 }, + { url = "https://files.pythonhosted.org/packages/67/58/b1f60a1d591b771298ffa0428237afb092c7f29ae23bad93420b1eb10703/ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4", size = 100205 }, + { url = "https://files.pythonhosted.org/packages/b4/4f/b52f634c9548a9291a70dfce26ca7ebce388235c93588a1068028ea23fcc/ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb", size = 118185 }, + { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433 }, + { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362 }, + { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118 }, + { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497 }, + { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042 }, + { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831 }, + { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777 }, + { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523 }, + { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011 }, + { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488 }, + { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066 }, + { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785 }, + { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017 }, + { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270 }, + { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583 }, + { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190 }, + { url = "https://files.pythonhosted.org/packages/e5/46/ccdef7a84ad745c37cb3d9a81790f28fbc9adf9c237dba682017b123294e/ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987", size = 131834 }, + { url = "https://files.pythonhosted.org/packages/29/09/932360f30ad1b7b79f08757e0a6fb8c5392a52cdcc182779158fe66d25ac/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45", size = 636120 }, + { url = "https://files.pythonhosted.org/packages/a2/2a/5b27602e7a4344c1334e26bf4739746206b7a60a8acdba33a61473468b73/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519", size = 724914 }, + { url = "https://files.pythonhosted.org/packages/da/1c/23497017c554fc06ff5701b29355522cff850f626337fff35d9ab352cb18/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7", size = 689072 }, + { url = "https://files.pythonhosted.org/packages/68/e6/f3d4ff3223f9ea49c3b7169ec0268e42bd49f87c70c0e3e853895e4a7ae2/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285", size = 667091 }, + { url = "https://files.pythonhosted.org/packages/84/62/ead07043527642491e5011b143f44b81ef80f1025a96069b7210e0f2f0f3/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed", size = 699111 }, + { url = "https://files.pythonhosted.org/packages/6e/b3/7feb99a00bfaa5c6868617bb7651308afde85e5a0b23cd187fe5de65feeb/ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12", size = 100863 }, + { url = "https://files.pythonhosted.org/packages/93/07/de635108684b7a5bb06e432b0930c5a04b6c59efe73bd966d8db3cc208f2/ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b", size = 118653 }, +] + +[[package]] +name = "ruff" +version = "0.8.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/d6/a2373f3ba7180ddb44420d2a9d1f1510e1a4d162b3d27282bedcb09c8da9/ruff-0.8.0.tar.gz", hash = "sha256:a7ccfe6331bf8c8dad715753e157457faf7351c2b69f62f32c165c2dbcbacd44", size = 3276537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/77/e889ee3ce7fd8baa3ed1b77a03b9fb8ec1be68be1418261522fd6a5405e0/ruff-0.8.0-py3-none-linux_armv6l.whl", hash = "sha256:fcb1bf2cc6706adae9d79c8d86478677e3bbd4ced796ccad106fd4776d395fea", size = 10518283 }, + { url = "https://files.pythonhosted.org/packages/da/c8/0a47de01edf19fb22f5f9b7964f46a68d0bdff20144d134556ffd1ba9154/ruff-0.8.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:295bb4c02d58ff2ef4378a1870c20af30723013f441c9d1637a008baaf928c8b", size = 10317691 }, + { url = "https://files.pythonhosted.org/packages/41/17/9885e4a0eeae07abd2a4ebabc3246f556719f24efa477ba2739146c4635a/ruff-0.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7b1f1c76b47c18fa92ee78b60d2d20d7e866c55ee603e7d19c1e991fad933a9a", size = 9940999 }, + { url = "https://files.pythonhosted.org/packages/3e/cd/46b6f7043597eb318b5f5482c8ae8f5491cccce771e85f59d23106f2d179/ruff-0.8.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb0d4f250a7711b67ad513fde67e8870109e5ce590a801c3722580fe98c33a99", size = 10772437 }, + { url = "https://files.pythonhosted.org/packages/5d/87/afc95aeb8bc78b1d8a3461717a4419c05aa8aa943d4c9cbd441630f85584/ruff-0.8.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e55cce9aa93c5d0d4e3937e47b169035c7e91c8655b0974e61bb79cf398d49c", size = 10299156 }, + { url = "https://files.pythonhosted.org/packages/65/fa/04c647bb809c4d65e8eae1ed1c654d9481b21dd942e743cd33511687b9f9/ruff-0.8.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f4cd64916d8e732ce6b87f3f5296a8942d285bbbc161acee7fe561134af64f9", size = 11325819 }, + { url = "https://files.pythonhosted.org/packages/90/26/7dad6e7d833d391a8a1afe4ee70ca6f36c4a297d3cca83ef10e83e9aacf3/ruff-0.8.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c5c1466be2a2ebdf7c5450dd5d980cc87c8ba6976fb82582fea18823da6fa362", size = 12023927 }, + { url = "https://files.pythonhosted.org/packages/24/a0/be5296dda6428ba8a13bda8d09fbc0e14c810b485478733886e61597ae2b/ruff-0.8.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2dabfd05b96b7b8f2da00d53c514eea842bff83e41e1cceb08ae1966254a51df", size = 11589702 }, + { url = "https://files.pythonhosted.org/packages/26/3f/7602eb11d2886db545834182a9dbe500b8211fcbc9b4064bf9d358bbbbb4/ruff-0.8.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:facebdfe5a5af6b1588a1d26d170635ead6892d0e314477e80256ef4a8470cf3", size = 12782936 }, + { url = "https://files.pythonhosted.org/packages/4c/5d/083181bdec4ec92a431c1291d3fff65eef3ded630a4b55eb735000ef5f3b/ruff-0.8.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a8e86bae0dbd749c815211ca11e3a7bd559b9710746c559ed63106d382bd9c", size = 11138488 }, + { url = "https://files.pythonhosted.org/packages/b7/23/c12cdef58413cee2436d6a177aa06f7a366ebbca916cf10820706f632459/ruff-0.8.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:85e654f0ded7befe2d61eeaf3d3b1e4ef3894469cd664ffa85006c7720f1e4a2", size = 10744474 }, + { url = "https://files.pythonhosted.org/packages/29/61/a12f3b81520083cd7c5caa24ba61bb99fd1060256482eff0ef04cc5ccd1b/ruff-0.8.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:83a55679c4cb449fa527b8497cadf54f076603cc36779b2170b24f704171ce70", size = 10369029 }, + { url = "https://files.pythonhosted.org/packages/08/2a/c013f4f3e4a54596c369cee74c24870ed1d534f31a35504908b1fc97017a/ruff-0.8.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:812e2052121634cf13cd6fddf0c1871d0ead1aad40a1a258753c04c18bb71bbd", size = 10867481 }, + { url = "https://files.pythonhosted.org/packages/d5/f7/685b1e1d42a3e94ceb25eab23c70bdd8c0ab66a43121ef83fe6db5a58756/ruff-0.8.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:780d5d8523c04202184405e60c98d7595bdb498c3c6abba3b6d4cdf2ca2af426", size = 11237117 }, + { url = "https://files.pythonhosted.org/packages/03/20/401132c0908e8837625e3b7e32df9962e7cd681a4df1e16a10e2a5b4ecda/ruff-0.8.0-py3-none-win32.whl", hash = "sha256:5fdb6efecc3eb60bba5819679466471fd7d13c53487df7248d6e27146e985468", size = 8783511 }, + { url = "https://files.pythonhosted.org/packages/1d/5c/4d800fca7854f62ad77f2c0d99b4b585f03e2d87a6ec1ecea85543a14a3c/ruff-0.8.0-py3-none-win_amd64.whl", hash = "sha256:582891c57b96228d146725975fbb942e1f30a0c4ba19722e692ca3eb25cc9b4f", size = 9559876 }, + { url = "https://files.pythonhosted.org/packages/5b/bc/cc8a6a5ca4960b226dc15dd8fb511dd11f2014ff89d325c0b9b9faa9871f/ruff-0.8.0-py3-none-win_arm64.whl", hash = "sha256:ba93e6294e9a737cd726b74b09a6972e36bb511f9a102f1d9a7e1ce94dd206a6", size = 8939733 }, +] + +[[package]] +name = "scikit-learn" +version = "1.5.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/37/59/44985a2bdc95c74e34fef3d10cb5d93ce13b0e2a7baefffe1b53853b502d/scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d", size = 7001680 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/89/be41419b4bec629a4691183a5eb1796f91252a13a5ffa243fd958cad7e91/scikit_learn-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:299406827fb9a4f862626d0fe6c122f5f87f8910b86fe5daa4c32dcd742139b6", size = 12106070 }, + { url = "https://files.pythonhosted.org/packages/bf/e0/3b6d777d375f3b685f433c93384cdb724fb078e1dc8f8ff0950467e56c30/scikit_learn-1.5.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d4cad1119c77930b235579ad0dc25e65c917e756fe80cab96aa3b9428bd3fb0", size = 10971758 }, + { url = "https://files.pythonhosted.org/packages/7b/31/eb7dd56c371640753953277de11356c46a3149bfeebb3d7dcd90b993715a/scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c412ccc2ad9bf3755915e3908e677b367ebc8d010acbb3f182814524f2e5540", size = 12500080 }, + { url = "https://files.pythonhosted.org/packages/4c/1e/a7c7357e704459c7d56a18df4a0bf08669442d1f8878cc0864beccd6306a/scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a686885a4b3818d9e62904d91b57fa757fc2bed3e465c8b177be652f4dd37c8", size = 13347241 }, + { url = "https://files.pythonhosted.org/packages/48/76/154ebda6794faf0b0f3ccb1b5cd9a19f0a63cb9e1f3d2c61b6114002677b/scikit_learn-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:c15b1ca23d7c5f33cc2cb0a0d6aaacf893792271cddff0edbd6a40e8319bc113", size = 11000477 }, + { url = "https://files.pythonhosted.org/packages/ff/91/609961972f694cb9520c4c3d201e377a26583e1eb83bc5a334c893729214/scikit_learn-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03b6158efa3faaf1feea3faa884c840ebd61b6484167c711548fce208ea09445", size = 12088580 }, + { url = "https://files.pythonhosted.org/packages/cd/7a/19fe32c810c5ceddafcfda16276d98df299c8649e24e84d4f00df4a91e01/scikit_learn-1.5.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1ff45e26928d3b4eb767a8f14a9a6efbf1cbff7c05d1fb0f95f211a89fd4f5de", size = 10975994 }, + { url = "https://files.pythonhosted.org/packages/4c/75/62e49f8a62bf3c60b0e64d0fce540578ee4f0e752765beb2e1dc7c6d6098/scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f763897fe92d0e903aa4847b0aec0e68cadfff77e8a0687cabd946c89d17e675", size = 12465782 }, + { url = "https://files.pythonhosted.org/packages/49/21/3723de321531c9745e40f1badafd821e029d346155b6c79704e0b7197552/scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8b0ccd4a902836493e026c03256e8b206656f91fbcc4fde28c57a5b752561f1", size = 13322034 }, + { url = "https://files.pythonhosted.org/packages/17/1c/ccdd103cfcc9435a18819856fbbe0c20b8fa60bfc3343580de4be13f0668/scikit_learn-1.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:6c16d84a0d45e4894832b3c4d0bf73050939e21b99b01b6fd59cbb0cf39163b6", size = 11015224 }, + { url = "https://files.pythonhosted.org/packages/a4/db/b485c1ac54ff3bd9e7e6b39d3cc6609c4c76a65f52ab0a7b22b6c3ab0e9d/scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a", size = 12110344 }, + { url = "https://files.pythonhosted.org/packages/54/1a/7deb52fa23aebb855431ad659b3c6a2e1709ece582cb3a63d66905e735fe/scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1", size = 11033502 }, + { url = "https://files.pythonhosted.org/packages/a1/32/4a7a205b14c11225609b75b28402c196e4396ac754dab6a81971b811781c/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd", size = 12085794 }, + { url = "https://files.pythonhosted.org/packages/c6/29/044048c5e911373827c0e1d3051321b9183b2a4f8d4e2f11c08fcff83f13/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6", size = 12945797 }, + { url = "https://files.pythonhosted.org/packages/aa/ce/c0b912f2f31aeb1b756a6ba56bcd84dd1f8a148470526a48515a3f4d48cd/scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1", size = 10985467 }, + { url = "https://files.pythonhosted.org/packages/a4/50/8891028437858cc510e13578fe7046574a60c2aaaa92b02d64aac5b1b412/scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5", size = 12025584 }, + { url = "https://files.pythonhosted.org/packages/d2/79/17feef8a1c14149436083bec0e61d7befb4812e272d5b20f9d79ea3e9ab1/scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908", size = 10959795 }, + { url = "https://files.pythonhosted.org/packages/b1/c8/f08313f9e2e656bd0905930ae8bf99a573ea21c34666a813b749c338202f/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3", size = 12077302 }, + { url = "https://files.pythonhosted.org/packages/a7/48/fbfb4dc72bed0fe31fe045fb30e924909ad03f717c36694351612973b1a9/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12", size = 13002811 }, + { url = "https://files.pythonhosted.org/packages/a5/e7/0c869f9e60d225a77af90d2aefa7a4a4c0e745b149325d1450f0f0ce5399/scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f", size = 10951354 }, + { url = "https://files.pythonhosted.org/packages/db/a0/e92af06a9fddd1fafbbf39cd32cbed5929b63cf99e03a438f838987e265d/scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9", size = 12142022 }, + { url = "https://files.pythonhosted.org/packages/1b/be/386ef63d9d5e2ddf8308f6a164e4b388d5c5aecc0504d25acc6b33d8b09e/scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1", size = 11002839 }, + { url = "https://files.pythonhosted.org/packages/12/0d/94a03c006b01c1de27518d393f52ad3639705cd70184e106d24ffb3f28f6/scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8", size = 12546017 }, + { url = "https://files.pythonhosted.org/packages/2a/9d/d332ec76e2cc442fce98bc43a44e69d3c281e6b4ede6b6db2616dc6fbec6/scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca64b3089a6d9b9363cd3546f8978229dcbb737aceb2c12144ee3f70f95684b7", size = 13369870 }, + { url = "https://files.pythonhosted.org/packages/45/05/74e453853c0b1b0773f46027848a17467f5dc9c5f15d096d911163d27550/scikit_learn-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:3bed4909ba187aca80580fe2ef370d9180dcf18e621a27c4cf2ef10d279a7efe", size = 11031380 }, +] + +[[package]] +name = "scipy" +version = "1.13.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076 }, + { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232 }, + { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202 }, + { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335 }, + { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728 }, + { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588 }, + { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805 }, + { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687 }, + { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638 }, + { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931 }, + { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145 }, + { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227 }, + { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301 }, + { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348 }, + { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062 }, + { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311 }, + { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493 }, + { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955 }, + { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927 }, + { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538 }, + { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190 }, + { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244 }, + { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637 }, + { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440 }, +] + +[[package]] +name = "six" +version = "1.16.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, +] + +[[package]] +name = "spglib" +version = "2.5.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "importlib-resources", marker = "python_full_version < '3.10'" }, + { name = "numpy" }, + { name = "typing-extensions", marker = "python_full_version < '3.10'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/8e/2c53fa9027543c3624cdd8b7ac9f6d611464dfc86eb786465e422a8c024c/spglib-2.5.0.tar.gz", hash = "sha256:f8bb638897be91b9dbd4c085d9fde1f69048f5949e20f3832cb9438e57418d4b", size = 2822241 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/ab/f9436120f1282b5bc6af7d63c5b1c3296f86acdc09927069631b092c051b/spglib-2.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:993f4b2d2f0a133d22fcf2d6f3fad9beeee3527c5453d5619e6518d7af253c85", size = 1064068 }, + { url = "https://files.pythonhosted.org/packages/99/9f/e6465a4e0856e35576d0cef7e44e10bdf8aa010dea0969c1ad3c50112c7c/spglib-2.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b0b070ddbaad0e97ec18efef602af57caf0045c7187180b1eaea843cb5877c8b", size = 1052798 }, + { url = "https://files.pythonhosted.org/packages/67/2f/330e67f98932ac1433472ba224e5f5319efdacf3fde149f09ccae4ee82f8/spglib-2.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12c3eb5d302dd74d07d35ad53180f7f91c69b58473e48b510aae90567f2bb90f", size = 1069986 }, + { url = "https://files.pythonhosted.org/packages/c7/70/68c4d51809a558784b822d7d6e2469696d3efd6039f76e6a7b1b4f7a3422/spglib-2.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8cf1f4082d8685686d7b3cf8d6ade4182ba09f13cc49eb2481201c0aa4579c9", size = 1075722 }, + { url = "https://files.pythonhosted.org/packages/d6/43/941c82f6d0665cd6f2af29a4547b24e5e06367bec2e2b73ab903c62674b7/spglib-2.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:b16ffc3497736263a53b629768ec8aae707d595bbd702deac3a6dd39e045537b", size = 300736 }, + { url = "https://files.pythonhosted.org/packages/c9/06/c52cc06a44b265d49bf8e006c45de82de1aa6fbad113e9b84bb6e7f4e8b6/spglib-2.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d9d812eea06e09a1f725755f21efa7451c48636cd24abb64ffa2cd82b8003dd", size = 1064065 }, + { url = "https://files.pythonhosted.org/packages/ca/41/0ea6f102558c70e8d86a7127a8cc6b1a5cd765931b2baba8b82d66a4df93/spglib-2.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c36c549442d6e422c932f528dff13af5eb766a5d1985d1d14d65777b1d69f136", size = 1052797 }, + { url = "https://files.pythonhosted.org/packages/22/9b/66891820345f06de8bd0723f9ea075ed62be40eda8d7a0a56b93d9dbf978/spglib-2.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67c67a3457dcafd8c533b2c3bebd2f25dcdbef3d7b6ec122f1e983218e0cdeee", size = 1069984 }, + { url = "https://files.pythonhosted.org/packages/b6/61/f301b774e5cdbc9b618d9946eaa269d8e563ccad06a34c0bd33f276be8db/spglib-2.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b2f6085d5f7d8fff63055fdea2955e9667f07934263f23f8db12d667228c2a2", size = 1075722 }, + { url = "https://files.pythonhosted.org/packages/b6/27/4412242308119edef9f525afdc17af91560e64945af299676538576b4848/spglib-2.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:d5bc51265dc3a4ca77026f668a1884427d1c7f5f32669948336105a71bde745b", size = 300719 }, + { url = "https://files.pythonhosted.org/packages/cd/62/b0147f156841fc361657393b644c096e4daa4ecd92b0c28d7026e102e977/spglib-2.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2fe0014743694bed8fad0c21df0083086dc8aa9a6f61106fc1831edb9e67d260", size = 1064057 }, + { url = "https://files.pythonhosted.org/packages/a6/f6/6eb33d67df543eca3038adb26f59b6309ee42b1cbf9365acc1b5ca587fad/spglib-2.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:80fc33a21df2097d5f2182550719f761b3c3230e60bfa5f91dcf5683dc44d6b0", size = 1052792 }, + { url = "https://files.pythonhosted.org/packages/63/d4/411dc94bba3e1ccff68c23b3a6b858aa75991f4d8af4e9a81fa6fe2719b8/spglib-2.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cb174c6e0d3e2f824a5b4c0f46c2460ce9052c5ef88909058fe982885e47939", size = 1069956 }, + { url = "https://files.pythonhosted.org/packages/14/c3/e90b94178e01e3af7b54c245216bcc3910f01dc2ec5ca7579c43ad3acdf9/spglib-2.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7b0b73ad5a352cd1e0544631b3ab98980a366e2b1bd7c804ab8c3f6ea45a6d8", size = 1075752 }, + { url = "https://files.pythonhosted.org/packages/95/5a/a4854a97c7e5e693bd6fd31212a5b3e66386847c89f984947f2113253fd3/spglib-2.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f3bd027c40b74cc5297de3898d4badee32f8e90d24ac0449cd4266ee5111ba3", size = 300721 }, + { url = "https://files.pythonhosted.org/packages/4c/40/7f9e92e08835a9e3fd61ab8b0fb46a86725bf57064516d9e8ca82e208322/spglib-2.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d419819ee66e1359fac9fd661de9a416842c764ceb4d0ab851c7307cc46ebabe", size = 1064061 }, + { url = "https://files.pythonhosted.org/packages/1d/b1/89a98bbec3afab600c3533630587306cee9decbe754ea8a9844ada93633f/spglib-2.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ebedc8fb06d1cc43f2c2a267a728116736b701c3458e3b8d87fec9b9d884d49", size = 1052798 }, + { url = "https://files.pythonhosted.org/packages/45/5e/7bc170c3786d89623aa10e3128bd5eab831f48b7681424c62dab068acc62/spglib-2.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bde949ed51f975dcc78b00ace7bcb693b9f1fa8ae66f2e2d7ed344d6929eaaf", size = 1069980 }, + { url = "https://files.pythonhosted.org/packages/54/d0/6e1d4bf22ac47a8d780f60bb8c7b59861df9ae7cec7dd539ec8e68c23b9d/spglib-2.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b1482f6bc4cc73bff84d1a7eb7a7823b2c4d7b0245f8c694efa88bd3f6bddd5", size = 1075724 }, + { url = "https://files.pythonhosted.org/packages/63/ae/6f1301b566d3b04b379434c5c00397ef86be362c1bcd5b96267e88178a29/spglib-2.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:af3e2f58a1b16cba25838e844829e3f94a7ddff8297690837c9b875f50458690", size = 300772 }, +] + +[[package]] +name = "structlog" +version = "24.4.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/78/a3/e811a94ac3853826805253c906faa99219b79951c7d58605e89c79e65768/structlog-24.4.0.tar.gz", hash = "sha256:b27bfecede327a6d2da5fbc96bd859f114ecc398a6389d664f62085ee7ae6fc4", size = 1348634 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/65/813fc133609ebcb1299be6a42e5aea99d6344afb35ccb43f67e7daaa3b92/structlog-24.4.0-py3-none-any.whl", hash = "sha256:597f61e80a91cc0749a9fd2a098ed76715a1c8a01f73e336b746504d1aad7610", size = 67180 }, +] + +[[package]] +name = "sympy" +version = "1.13.3" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/11/8a/5a7fd6284fa8caac23a26c9ddf9c30485a48169344b4bd3b0f02fef1890f/sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9", size = 7533196 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/ff/c87e0622b1dadea79d2fb0b25ade9ed98954c9033722eb707053d310d4f3/sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73", size = 6189483 }, +] + +[[package]] +name = "tabulate" +version = "0.9.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, +] + +[[package]] +name = "tenacity" +version = "9.0.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/94/91fccdb4b8110642462e653d5dcb27e7b674742ad68efd146367da7bdb10/tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b", size = 47421 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/cb/b86984bed139586d01532a587464b5805f12e397594f19f931c4c2fbfa61/tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539", size = 28169 }, +] + +[[package]] +name = "threadpoolctl" +version = "3.5.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/55/b5148dcbf72f5cde221f8bfe3b6a540da7aa1842f6b491ad979a6c8b84af/threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107", size = 41936 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/2c/ffbf7a134b9ab11a67b0cf0726453cedd9c5043a4fe7a35d1cefa9a1bcfb/threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467", size = 18414 }, +] + +[[package]] +name = "tomli" +version = "2.2.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, +] + +[[package]] +name = "toposort" +version = "1.10" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/69/19/8e955d90985ecbd3b9adb2a759753a6840da2dff3c569d412b2c9217678b/toposort-1.10.tar.gz", hash = "sha256:bfbb479c53d0a696ea7402601f4e693c97b0367837c8898bc6471adfca37a6bd", size = 11132 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/17/57b444fd314d5e1593350b9a31d000e7411ba8e17ce12dc7ad54ca76b810/toposort-1.10-py3-none-any.whl", hash = "sha256:cbdbc0d0bee4d2695ab2ceec97fe0679e9c10eab4b2a87a9372b929e70563a87", size = 8500 }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "colorama", marker = "platform_system == 'Windows'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, +] + +[[package]] +name = "typish" +version = "1.9.3" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/d6/3f56c9c0c12adf61dfcf4ed5c8ffd2c431db8dd85592067a57e8e1968565/typish-1.9.3-py3-none-any.whl", hash = "sha256:03cfee5e6eb856dbf90244e18f4e4c41044c8790d5779f4e775f63f982e2f896", size = 45063 }, +] + +[[package]] +name = "tzdata" +version = "2024.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a86a98e9896bae89c7aa15078ec29f490fef2f1e5384/tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", size = 193282 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 }, +] + +[[package]] +name = "uncertainties" +version = "3.2.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a0/b0/f926a3faf468b9784bdecb8d9328b531743937ead284b2e8d406d96e8b0f/uncertainties-3.2.2.tar.gz", hash = "sha256:e62c86fdc64429828229de6ab4e11466f114907e6bd343c077858994cc12e00b", size = 143865 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/fc/97711d2a502881d871e3cf2d2645e21e7f8e4d4fd9a56937557790cade6a/uncertainties-3.2.2-py3-none-any.whl", hash = "sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7", size = 58266 }, +] + +[[package]] +name = "unidecode" +version = "1.3.2" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/a6/93288318cfae2fa0ca978dfe6bb94b22b7e9a9e98b6149a4af00b1e76ee8/Unidecode-1.3.2.tar.gz", hash = "sha256:669898c1528912bcf07f9819dc60df18d057f7528271e31f8ec28cc88ef27504", size = 191917 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/3a/3c35e04ea05724f29c77bf5c7a27cf0c80310483655bfdc2c1c5d1ab36b6/Unidecode-1.3.2-py3-none-any.whl", hash = "sha256:215fe33c9d1c889fa823ccb66df91b02524eb8cc8c9c80f9c5b8129754d27829", size = 235682 }, +] + +[[package]] +name = "urllib3" +version = "1.26.20" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/e8/6ff5e6bc22095cfc59b6ea711b687e2b7ed4bdb373f7eeec370a97d7392f/urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32", size = 307380 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/cf/8435d5a7159e2a9c83a95896ed596f68cf798005fe107cc655b5c5c14704/urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e", size = 144225 }, +] + +[[package]] +name = "wrapt" +version = "1.17.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/a1/fc03dca9b0432725c2e8cdbf91a349d2194cf03d8523c124faebe581de09/wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801", size = 55542 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/f9/85220321e9bb1a5f72ccce6604395ae75fcb463d87dad0014dc1010bd1f1/wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8", size = 38766 }, + { url = "https://files.pythonhosted.org/packages/ff/71/ff624ff3bde91ceb65db6952cdf8947bc0111d91bd2359343bc2fa7c57fd/wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d", size = 83262 }, + { url = "https://files.pythonhosted.org/packages/9f/0a/814d4a121a643af99cfe55a43e9e6dd08f4a47cdac8e8f0912c018794715/wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df", size = 74990 }, + { url = "https://files.pythonhosted.org/packages/cd/c7/b8c89bf5ca5c4e6a2d0565d149d549cdb4cffb8916d1d1b546b62fb79281/wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d", size = 82712 }, + { url = "https://files.pythonhosted.org/packages/19/7c/5977aefa8460906c1ff914fd42b11cf6c09ded5388e46e1cc6cea4ab15e9/wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea", size = 81705 }, + { url = "https://files.pythonhosted.org/packages/ae/e7/233402d7bd805096bb4a8ec471f5a141421a01de3c8c957cce569772c056/wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb", size = 74636 }, + { url = "https://files.pythonhosted.org/packages/93/81/b6c32d8387d9cfbc0134f01585dee7583315c3b46dfd3ae64d47693cd078/wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301", size = 81299 }, + { url = "https://files.pythonhosted.org/packages/d1/c3/1fae15d453468c98f09519076f8d401b476d18d8d94379e839eed14c4c8b/wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22", size = 36425 }, + { url = "https://files.pythonhosted.org/packages/c6/f4/77e0886c95556f2b4caa8908ea8eb85f713fc68296a2113f8c63d50fe0fb/wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575", size = 38748 }, + { url = "https://files.pythonhosted.org/packages/0e/40/def56538acddc2f764c157d565b9f989072a1d2f2a8e384324e2e104fc7d/wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a", size = 38766 }, + { url = "https://files.pythonhosted.org/packages/89/e2/8c299f384ae4364193724e2adad99f9504599d02a73ec9199bf3f406549d/wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed", size = 83730 }, + { url = "https://files.pythonhosted.org/packages/29/ef/fcdb776b12df5ea7180d065b28fa6bb27ac785dddcd7202a0b6962bbdb47/wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489", size = 75470 }, + { url = "https://files.pythonhosted.org/packages/55/b5/698bd0bf9fbb3ddb3a2feefbb7ad0dea1205f5d7d05b9cbab54f5db731aa/wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9", size = 83168 }, + { url = "https://files.pythonhosted.org/packages/ce/07/701a5cee28cb4d5df030d4b2649319e36f3d9fdd8000ef1d84eb06b9860d/wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339", size = 82307 }, + { url = "https://files.pythonhosted.org/packages/42/92/c48ba92cda6f74cb914dc3c5bba9650dc80b790e121c4b987f3a46b028f5/wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d", size = 75101 }, + { url = "https://files.pythonhosted.org/packages/8a/0a/9276d3269334138b88a2947efaaf6335f61d547698e50dff672ade24f2c6/wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b", size = 81835 }, + { url = "https://files.pythonhosted.org/packages/b9/4c/39595e692753ef656ea94b51382cc9aea662fef59d7910128f5906486f0e/wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346", size = 36412 }, + { url = "https://files.pythonhosted.org/packages/63/bb/c293a67fb765a2ada48f48cd0f2bb957da8161439da4c03ea123b9894c02/wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a", size = 38744 }, + { url = "https://files.pythonhosted.org/packages/85/82/518605474beafff11f1a34759f6410ab429abff9f7881858a447e0d20712/wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569", size = 38904 }, + { url = "https://files.pythonhosted.org/packages/80/6c/17c3b2fed28edfd96d8417c865ef0b4c955dc52c4e375d86f459f14340f1/wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504", size = 88622 }, + { url = "https://files.pythonhosted.org/packages/4a/11/60ecdf3b0fd3dca18978d89acb5d095a05f23299216e925fcd2717c81d93/wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451", size = 80920 }, + { url = "https://files.pythonhosted.org/packages/d2/50/dbef1a651578a3520d4534c1e434989e3620380c1ad97e309576b47f0ada/wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1", size = 89170 }, + { url = "https://files.pythonhosted.org/packages/44/a2/78c5956bf39955288c9e0dd62e807b308c3aa15a0f611fbff52aa8d6b5ea/wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106", size = 86748 }, + { url = "https://files.pythonhosted.org/packages/99/49/2ee413c78fc0bdfebe5bee590bf3becdc1fab0096a7a9c3b5c9666b2415f/wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada", size = 79734 }, + { url = "https://files.pythonhosted.org/packages/c0/8c/4221b7b270e36be90f0930fe15a4755a6ea24093f90b510166e9ed7861ea/wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4", size = 87552 }, + { url = "https://files.pythonhosted.org/packages/4c/6b/1aaccf3efe58eb95e10ce8e77c8909b7a6b0da93449a92c4e6d6d10b3a3d/wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635", size = 36647 }, + { url = "https://files.pythonhosted.org/packages/b3/4f/243f88ac49df005b9129194c6511b3642818b3e6271ddea47a15e2ee4934/wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7", size = 38830 }, + { url = "https://files.pythonhosted.org/packages/67/9c/38294e1bb92b055222d1b8b6591604ca4468b77b1250f59c15256437644f/wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181", size = 38904 }, + { url = "https://files.pythonhosted.org/packages/78/b6/76597fb362cbf8913a481d41b14b049a8813cd402a5d2f84e57957c813ae/wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393", size = 88608 }, + { url = "https://files.pythonhosted.org/packages/bc/69/b500884e45b3881926b5f69188dc542fb5880019d15c8a0df1ab1dfda1f7/wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4", size = 80879 }, + { url = "https://files.pythonhosted.org/packages/52/31/f4cc58afe29eab8a50ac5969963010c8b60987e719c478a5024bce39bc42/wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b", size = 89119 }, + { url = "https://files.pythonhosted.org/packages/aa/9c/05ab6bf75dbae7a9d34975fb6ee577e086c1c26cde3b6cf6051726d33c7c/wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721", size = 86778 }, + { url = "https://files.pythonhosted.org/packages/0e/6c/4b8d42e3db355603d35fe5c9db79c28f2472a6fd1ccf4dc25ae46739672a/wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90", size = 79793 }, + { url = "https://files.pythonhosted.org/packages/69/23/90e3a2ee210c0843b2c2a49b3b97ffcf9cad1387cb18cbeef9218631ed5a/wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a", size = 87606 }, + { url = "https://files.pythonhosted.org/packages/5f/06/3683126491ca787d8d71d8d340e775d40767c5efedb35039d987203393b7/wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045", size = 36651 }, + { url = "https://files.pythonhosted.org/packages/f1/bc/3bf6d2ca0d2c030d324ef9272bea0a8fdaff68f3d1fa7be7a61da88e51f7/wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838", size = 38835 }, + { url = "https://files.pythonhosted.org/packages/ce/b5/251165c232d87197a81cd362eeb5104d661a2dd3aa1f0b33e4bf61dda8b8/wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b", size = 40146 }, + { url = "https://files.pythonhosted.org/packages/89/33/1e1bdd3e866eeb73d8c4755db1ceb8a80d5bd51ee4648b3f2247adec4e67/wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379", size = 113444 }, + { url = "https://files.pythonhosted.org/packages/9f/7c/94f53b065a43f5dc1fbdd8b80fd8f41284315b543805c956619c0b8d92f0/wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d", size = 101246 }, + { url = "https://files.pythonhosted.org/packages/62/5d/640360baac6ea6018ed5e34e6e80e33cfbae2aefde24f117587cd5efd4b7/wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f", size = 109320 }, + { url = "https://files.pythonhosted.org/packages/e3/cf/6c7a00ae86a2e9482c91170aefe93f4ccda06c1ac86c4de637c69133da59/wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c", size = 110193 }, + { url = "https://files.pythonhosted.org/packages/cd/cc/aa718df0d20287e8f953ce0e2f70c0af0fba1d3c367db7ee8bdc46ea7003/wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b", size = 100460 }, + { url = "https://files.pythonhosted.org/packages/f7/16/9f3ac99fe1f6caaa789d67b4e3c562898b532c250769f5255fa8b8b93983/wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab", size = 106347 }, + { url = "https://files.pythonhosted.org/packages/64/85/c77a331b2c06af49a687f8b926fc2d111047a51e6f0b0a4baa01ff3a673a/wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf", size = 37971 }, + { url = "https://files.pythonhosted.org/packages/05/9b/b2469f8be9efed24283fd7b9eeb8e913e9bc0715cf919ea8645e428ab7af/wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a", size = 40755 }, + { url = "https://files.pythonhosted.org/packages/89/03/518069f0708573c02cbba3a3e452be3642dc7d984d0a03a47e0850e2fb05/wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1", size = 38765 }, + { url = "https://files.pythonhosted.org/packages/60/01/12dd81522f8c1c953e98e2cbf356ff44fbb06ef0f7523cd622ac06ad7f03/wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c", size = 83012 }, + { url = "https://files.pythonhosted.org/packages/c4/2d/9853fe0009271b2841f839eb0e707c6b4307d169375f26c58812ecf4fd71/wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578", size = 74759 }, + { url = "https://files.pythonhosted.org/packages/94/5c/03c911442b01b50e364572581430e12f82c3f5ea74d302907c1449d7ba36/wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33", size = 82540 }, + { url = "https://files.pythonhosted.org/packages/52/e0/ef637448514295a6b3a01cf1dff417e081e7b8cf1eb712839962459af1f6/wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad", size = 81461 }, + { url = "https://files.pythonhosted.org/packages/7f/44/8b7d417c3aae3a35ccfe361375ee3e452901c91062e5462e1aeef98255e8/wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9", size = 74380 }, + { url = "https://files.pythonhosted.org/packages/af/a9/e65406a9c3a99162055efcb6bf5e0261924381228c0a7608066805da03df/wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0", size = 81057 }, + { url = "https://files.pythonhosted.org/packages/55/0c/111d42fb658a2f9ed7024cd5e57c08521d61646a256a3946db7d500c1551/wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88", size = 36415 }, + { url = "https://files.pythonhosted.org/packages/00/33/e7b14a7c06cedfaae064f34e95c95350de7cc10187ac173743e30a956b30/wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977", size = 38742 }, + { url = "https://files.pythonhosted.org/packages/4b/d9/a8ba5e9507a9af1917285d118388c5eb7a81834873f45df213a6fe923774/wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371", size = 23592 }, +] + +[[package]] +name = "xarray" +version = "2024.7.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/84/e8/8ee12706df0d34ad04b3737621a73432458d47bc8abfbd6f049e51ca89c3/xarray-2024.7.0.tar.gz", hash = "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638", size = 3728663 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/95/233e1f9c939f5ba314297315df709e6a5e823bf3cade7211991b15aa65d2/xarray-2024.7.0-py3-none-any.whl", hash = "sha256:1b0fd51ec408474aa1f4a355d75c00cc1c02bd425d97b2c2e551fd21810e7f64", size = 1176466 }, +] + +[[package]] +name = "xmltodict" +version = "0.13.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/39/0d/40df5be1e684bbaecdb9d1e0e40d5d482465de6b00cbb92b84ee5d243c7f/xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56", size = 33813 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/db/fd0326e331726f07ff7f40675cd86aa804bfd2e5016c727fa761c934990e/xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852", size = 9971 }, +] + +[[package]] +name = "zipp" +version = "3.21.0" +source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 }, +] From ce1e60bfe53feb68f1768269ab9f3dc2e96e9c33 Mon Sep 17 00:00:00 2001 From: Andrea Albino <95371554+aalbino2@users.noreply.github.com> Date: Tue, 20 Aug 2024 19:07:30 +0200 Subject: [PATCH 03/93] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sarthak Kapoor <57119427+ka-sarthak@users.noreply.github.com> Co-authored-by: Hampus Näsström --- src/nomad_measurements/general/__init__.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/nomad_measurements/general/__init__.py b/src/nomad_measurements/general/__init__.py index 7e990a5d..fbd6e4b9 100644 --- a/src/nomad_measurements/general/__init__.py +++ b/src/nomad_measurements/general/__init__.py @@ -1,15 +1,14 @@ - from nomad.config.models.plugins import SchemaPackageEntryPoint -class GeneralSchemaPackageEntryPoint(SchemaPackageEntryPoint): +class GeneralSchemaPackageEntryPoint(SchemaPackageEntryPoint): def load(self): from nomad_measurements.general.schema import m_package return m_package -general_schema = GeneralSchemaPackageEntryPoint( - name='GeneralSchema', - description='Schema package defined using the new plugin mechanism.', +schema = GeneralSchemaPackageEntryPoint( + name="General Schema", + description="Schema package defined using the new plugin mechanism.", ) From de7b48e56863335ab94932252423a709ebe0b118 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Sep 2024 17:54:27 +0200 Subject: [PATCH 04/93] Add sections for RSM and 1D which uses HDF5 references --- src/nomad_measurements/xrd/schema.py | 62 ++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index fcb91a27..0b280d25 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -738,6 +738,68 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): break +class XRDResult1D_HDF5(XRDResult1D): + intensity = Quantity( + type=HDF5Reference, + description='The count at each 2-theta value, dimensionless', + ) + two_theta = Quantity( + type=HDF5Reference, + description='The 2-theta range of the diffractogram', + ) + q_norm = Quantity( + type=HDF5Reference, + description='The norm of scattering vector *Q* of the diffractogram', + ) + omega = Quantity( + type=HDF5Reference, + description='The omega range of the diffractogram', + ) + phi = Quantity( + type=HDF5Reference, + description='The phi range of the diffractogram', + ) + chi = Quantity( + type=HDF5Reference, + description='The chi range of the diffractogram', + ) + + +class XRDResultRSM_HDF5(XRDResultRSM): + intensity = Quantity( + type=HDF5Reference, + description='The count at each 2-theta value, dimensionless', + ) + two_theta = Quantity( + type=HDF5Reference, + description='The 2-theta range of the diffractogram', + ) + q_norm = Quantity( + type=HDF5Reference, + description='The norm of scattering vector *Q* of the diffractogram', + ) + omega = Quantity( + type=HDF5Reference, + description='The omega range of the diffractogram', + ) + phi = Quantity( + type=HDF5Reference, + description='The phi range of the diffractogram', + ) + chi = Quantity( + type=HDF5Reference, + description='The chi range of the diffractogram', + ) + q_parallel = Quantity( + type=HDF5Reference, + description='The scattering vector *Q_parallel* of the diffractogram', + ) + q_perpendicular = Quantity( + type=HDF5Reference, + description='The scattering vector *Q_perpendicular* of the diffractogram', + ) + + class XRayDiffraction(Measurement): """ Generic X-ray diffraction measurement. From 47198b99f37dddac825dc14418f8f9a82e1f19fc Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Sep 2024 17:59:28 +0200 Subject: [PATCH 05/93] Abstract out data interaction using setter and getter; allows to use same methods for classes with hdf5 refs --- src/nomad_measurements/utils.py | 32 +++++++++++++++ src/nomad_measurements/xrd/schema.py | 58 ++++++++++++++++++---------- 2 files changed, 70 insertions(+), 20 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 58389fca..4f7dcc94 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -18,6 +18,7 @@ import os.path from typing import ( TYPE_CHECKING, + Any, ) import numpy as np @@ -153,3 +154,34 @@ def get_bounding_range_2d(ax1, ax2): ] return ax1_range, ax2_range + + +def get_data(obj, key: str) -> Any: + """ + Get the data for the quantity. If the quantity is a HDF5Reference, read the dataset + and corresponding units if available, and return a pint.Quantity. + + Args: + obj (Any): The object to get the data from. + key (str): The key of the quantity. + + Returns: + Any: The data for the quantity. + """ + return getattr(obj, key, None) + + +def set_data(obj, **kwargs): + """ + Set the data for the quantity. If the quantity is a HDF5Reference, the new value is + set in the HDF5 file at the corresponding path. + + Args: + obj (Any): The object to set the data for. + """ + if not kwargs: + raise ValueError('At least one keyword argument must be provided.') + + for key, value in kwargs.items(): + if hasattr(obj, key): + setattr(obj, key, value) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 0b280d25..744dbba0 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -67,8 +67,12 @@ from nomad_measurements.general import ( NOMADMeasurementsCategory, ) -from nomad_measurements.utils import get_bounding_range_2d, merge_sections -from nomad_measurements.xrd.nx import write_nx_section_and_create_file +from nomad_measurements.utils import ( + get_bounding_range_2d, + get_data, + merge_sections, + set_data, +) if TYPE_CHECKING: import pint @@ -358,12 +362,13 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): (dict, dict): line_linear, line_log """ plots = [] - if self.two_theta is None or self.intensity is None: + two_theta = get_data(self, 'two_theta') + intensity = get_data(self, 'intensity') + if any([two_theta, intensity] == [None, None]): return plots - x = self.two_theta.to('degree').magnitude - y = self.intensity.magnitude - + x = two_theta.to('degree').magnitude + y = intensity.magnitude fig_line_linear = px.line( x=x, y=y, @@ -515,12 +520,15 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): self.name = f'{self.scan_axis} Scan Result' else: self.name = 'XRD Scan Result' + q_norm = get_data(self, 'q_norm') + two_theta = get_data(self, 'two_theta') if self.source_peak_wavelength is not None: - self.q_norm, self.two_theta = calculate_two_theta_or_q( + q_norm, two_theta = calculate_two_theta_or_q( wavelength=self.source_peak_wavelength, - two_theta=self.two_theta, - q=self.q_norm, + two_theta=two_theta, + q=q_norm, ) + set_data(self, q_norm=q_norm, two_theta=two_theta) class XRDResultRSM(XRDResult): @@ -561,14 +569,17 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): (dict, dict): json_2theta_omega, json_q_vector """ plots = [] - if self.two_theta is None or self.intensity is None or self.omega is None: + two_theta = get_data(self, 'two_theta') + intensity = get_data(self, 'intensity') + omega = get_data(self, 'omega') + if two_theta is None or intensity is None or omega is None: return plots # Plot for 2theta-omega RSM # Zero values in intensity become -inf in log scale and are not plotted - x = self.omega.to('degree').magnitude - y = self.two_theta.to('degree').magnitude - z = self.intensity.magnitude + x = omega.to('degree').magnitude + y = two_theta.to('degree').magnitude + z = intensity.magnitude log_z = np.log10(z) x_range, y_range = get_bounding_range_2d(x, y) @@ -637,8 +648,8 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): # Plot for RSM in Q-vectors if self.q_parallel is not None and self.q_perpendicular is not None: - x = self.q_parallel.to('1/angstrom').magnitude.flatten() - y = self.q_perpendicular.to('1/angstrom').magnitude.flatten() + x = get_data(self, 'q_parallel').to('1/angstrom').magnitude.flatten() + y = get_data(self, 'q_perpendicular').to('1/angstrom').magnitude.flatten() # q_vectors lead to irregular grid # generate a regular grid using interpolation x_regular = np.linspace(x.min(), x.max(), z.shape[0]) @@ -721,19 +732,26 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): super().normalize(archive, logger) + if self.name is None: self.name = 'RSM Scan Result' - var_axis = 'omega' + if self.source_peak_wavelength is not None: for var_axis in ['omega', 'chi', 'phi']: + var_axis_value = get_data(self, var_axis) if ( - self[var_axis] is not None - and len(np.unique(self[var_axis].magnitude)) > 1 + var_axis_value is not None + and len(np.unique(var_axis_value.magnitude)) > 1 ): - self.q_parallel, self.q_perpendicular = calculate_q_vectors_RSM( + q_parallel, q_perpendicular = calculate_q_vectors_RSM( wavelength=self.source_peak_wavelength, two_theta=self.two_theta * np.ones_like(self.intensity), - omega=self[var_axis], + omega=var_axis_value, + ) + set_data( + self, + q_parallel=q_parallel, + q_perpendicular=q_perpendicular, ) break From 44ea11f01a2dd970e8c476311ea0a04d838a1400 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Sep 2024 18:00:40 +0200 Subject: [PATCH 06/93] Use arrays, not references, in the `archive.results` section --- src/nomad_measurements/xrd/schema.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 744dbba0..3aa21f6b 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -885,13 +885,14 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): if not archive.results.properties.structural: diffraction_patterns = [] for result in self.results: - if len(result.intensity.shape) == 1: + intensity = get_data(result, 'intensity') + if len(intensity.shape) == 1: diffraction_patterns.append( DiffractionPattern( incident_beam_wavelength=result.source_peak_wavelength, - two_theta_angles=result.two_theta, + two_theta_angles=get_data(result, 'two_theta'), intensity=result.intensity, - q_vector=result.q_norm, + q_vector=get_data(result, 'q_norm'), ) ) archive.results.properties.structural = StructuralProperties( From 6b66448828c88ee3feccf17c085dcde67da27437 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Sep 2024 18:25:13 +0200 Subject: [PATCH 07/93] Lock the state for using nexus file and corresponding references --- src/nomad_measurements/xrd/schema.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 3aa21f6b..5f3a7bad 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -937,15 +937,19 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): diffraction_method_name.m_annotations['eln'] = ELNAnnotation( component=ELNComponentEnum.EnumEditQuantity, ) - generate_nexus_file = Quantity( + use_nexus_file = Quantity( type=bool, - description='Whether or not to generate a NeXus output file (if possible).', - default=True, + description=""" + Whether or not to generate a NeXus output file and use it to store array data. + Once set to True, it cannot be set back to False. + """, + default=False, a_eln=ELNAnnotation( component=ELNComponentEnum.BoolEditQuantity, label='Generate NeXus file', ), ) + state_use_nexus_file = False def get_read_write_functions(self) -> tuple[Callable, Callable]: """ @@ -1045,6 +1049,12 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): normalized. logger (BoundLogger): A structlog logger. """ + # lock the decision of using nexus file references once it is set True + if self.state_use_nexus_file: + self.use_nexus_file = True + if self.use_nexus_file: + self.state_use_nexus_file = True + if self.data_file is not None: read_function, write_function = self.get_read_write_functions() if read_function is None or write_function is None: From 8d736b6e27d6c547175c2ce6e8e40d7329f6a97f Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Sep 2024 18:53:20 +0200 Subject: [PATCH 08/93] Populate results without references --- src/nomad_measurements/xrd/schema.py | 46 +++++++++++++--------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 5f3a7bad..fd34ecea 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -985,31 +985,29 @@ def write_xrd_data( source_dict: dict = metadata_dict.get('source', {}) scan_type = metadata_dict.get('scan_type', None) - if scan_type == 'line': - result = XRDResult1D( - intensity=xrd_dict.get('intensity', None), - two_theta=xrd_dict.get('2Theta', None), - omega=xrd_dict.get('Omega', None), - chi=xrd_dict.get('Chi', None), - phi=xrd_dict.get('Phi', None), - scan_axis=metadata_dict.get('scan_axis', None), - integration_time=xrd_dict.get('countTime', None), - ) - result.normalize(archive, logger) - - elif scan_type == 'rsm': - result = XRDResultRSM( - intensity=xrd_dict.get('intensity', None), - two_theta=xrd_dict.get('2Theta', None), - omega=xrd_dict.get('Omega', None), - chi=xrd_dict.get('Chi', None), - phi=xrd_dict.get('Phi', None), - scan_axis=metadata_dict.get('scan_axis', None), - integration_time=xrd_dict.get('countTime', None), - ) - result.normalize(archive, logger) - else: + if scan_type not in ['line', 'rsm']: raise NotImplementedError(f'Scan type `{scan_type}` is not supported.') + if self.state_use_nexus_file: + # Create a new result section + if self.results: + self.results = [] + if scan_type == 'line': + result = XRDResult1D_HDF5() + elif scan_type == 'rsm': + result = XRDResultRSM_HDF5() + result.scan_axis = metadata_dict.get('scan_axis', None) + result.integration_time = xrd_dict.get('countTime', None) + if not self.state_use_nexus_file: + if scan_type == 'line': + result = XRDResult1D() + elif scan_type == 'rsm': + result = XRDResultRSM() + result.intensity = xrd_dict.get('intensity', None) + result.two_theta = xrd_dict.get('2Theta', None) + result.omega = xrd_dict.get('Omega', None) + result.chi = xrd_dict.get('Chi', None) + result.phi = xrd_dict.get('Phi', None) + result.normalize(archive, logger) source = XRayTubeSource( xray_tube_material=source_dict.get('anode_material', None), From cd36d153f70844d37eb673b0a729ef8265f779b5 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 20 Nov 2024 17:12:05 +0100 Subject: [PATCH 09/93] Make a general reader for raw files --- src/nomad_measurements/xrd/schema.py | 32 +++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index fd34ecea..5a315384 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -20,7 +20,7 @@ Any, Callable, ) - +import collections import numpy as np import plotly.express as px from fairmat_readers_xrd import ( @@ -959,13 +959,35 @@ def get_read_write_functions(self) -> tuple[Callable, Callable]: Returns: tuple[Callable, Callable]: The read, write functions. """ + if self.data_file.endswith(('.rasx', '.xrdml', '.brml')): + return self.read_raw_file, self.write_xrd_data + return None, None + + def read_raw_file(self) -> dict[str, Any]: + """ + Read method for reading the raw data from the data file. + + Returns: + Dict[str, Any]: A dictionary with the raw data. + """ + data_dict = collections.defaultdict(dict, None) if self.data_file.endswith('.rasx'): - return read_rigaku_rasx, self.write_xrd_data + data_dict.update(read_rigaku_rasx(self.data_file)) if self.data_file.endswith('.xrdml'): - return read_panalytical_xrdml, self.write_xrd_data + data_dict.update(read_panalytical_xrdml(self.data_file)) if self.data_file.endswith('.brml'): - return read_bruker_brml, self.write_xrd_data - return None, None + data_dict.update(read_bruker_brml(self.data_file)) + + # create a nexus file and populate it with the data + # if that fails, create a HDF5 file instead + # update the results to have paths to the nexus file sections + # add a reference to nexus file entry + + # scan_type = xrd_dict.get('metadata', {}).get('scan_type', None) + # if self.generate_nexus_file and self.data_file is not None: + # write_nx_section_and_create_file(archive, logger, scan_type=scan_type) + + return data_dict def write_xrd_data( self, From 1d612f1ee19bb5868f47367a7cf37a3835123ad2 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 20 Nov 2024 17:13:16 +0100 Subject: [PATCH 10/93] Remove nexus flags --- src/nomad_measurements/xrd/schema.py | 59 ++++++++-------------------- 1 file changed, 16 insertions(+), 43 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 5a315384..c312e03f 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -937,19 +937,6 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): diffraction_method_name.m_annotations['eln'] = ELNAnnotation( component=ELNComponentEnum.EnumEditQuantity, ) - use_nexus_file = Quantity( - type=bool, - description=""" - Whether or not to generate a NeXus output file and use it to store array data. - Once set to True, it cannot be set back to False. - """, - default=False, - a_eln=ELNAnnotation( - component=ELNComponentEnum.BoolEditQuantity, - label='Generate NeXus file', - ), - ) - state_use_nexus_file = False def get_read_write_functions(self) -> tuple[Callable, Callable]: """ @@ -1009,26 +996,22 @@ def write_xrd_data( scan_type = metadata_dict.get('scan_type', None) if scan_type not in ['line', 'rsm']: raise NotImplementedError(f'Scan type `{scan_type}` is not supported.') - if self.state_use_nexus_file: - # Create a new result section - if self.results: - self.results = [] - if scan_type == 'line': - result = XRDResult1D_HDF5() - elif scan_type == 'rsm': - result = XRDResultRSM_HDF5() - result.scan_axis = metadata_dict.get('scan_axis', None) - result.integration_time = xrd_dict.get('countTime', None) - if not self.state_use_nexus_file: - if scan_type == 'line': - result = XRDResult1D() - elif scan_type == 'rsm': - result = XRDResultRSM() - result.intensity = xrd_dict.get('intensity', None) - result.two_theta = xrd_dict.get('2Theta', None) - result.omega = xrd_dict.get('Omega', None) - result.chi = xrd_dict.get('Chi', None) - result.phi = xrd_dict.get('Phi', None) + + # removing exisiting results for backwards compatibility + if self.results: + self.results = [] + # Create a new result section + if scan_type == 'line': + result = XRDResult1D_HDF5() + elif scan_type == 'rsm': + result = XRDResultRSM_HDF5() + result.scan_axis = metadata_dict.get('scan_axis', None) + result.integration_time = xrd_dict.get('countTime', None) + result.intensity = xrd_dict.get('intensity', None) + result.two_theta = xrd_dict.get('2Theta', None) + result.omega = xrd_dict.get('Omega', None) + result.chi = xrd_dict.get('Chi', None) + result.phi = xrd_dict.get('Phi', None) result.normalize(archive, logger) source = XRayTubeSource( @@ -1069,12 +1052,6 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): normalized. logger (BoundLogger): A structlog logger. """ - # lock the decision of using nexus file references once it is set True - if self.state_use_nexus_file: - self.use_nexus_file = True - if self.use_nexus_file: - self.state_use_nexus_file = True - if self.data_file is not None: read_function, write_function = self.get_read_write_functions() if read_function is None or write_function is None: @@ -1089,10 +1066,6 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): if not self.results: return - scan_type = xrd_dict.get('metadata', {}).get('scan_type', None) - if self.generate_nexus_file and self.data_file is not None: - write_nx_section_and_create_file(archive, logger, scan_type=scan_type) - self.figures = self.results[0].generate_plots(archive, logger) From f796a79a9046e112968be3d99f660cb47aa91213 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 20 Nov 2024 17:13:45 +0100 Subject: [PATCH 11/93] Add quantity for auxialiary file --- src/nomad_measurements/xrd/schema.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index c312e03f..d43af39b 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -930,6 +930,13 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): component=ELNComponentEnum.FileEditQuantity, ), ) + auxiliary_hdf5_file = Quantity( + type=str, + description='Auxiliary HDF5 file containing the raw data', + a_eln=ELNAnnotation( + component=ELNComponentEnum.FileEditQuantity, + ), + ) measurement_identifiers = SubSection( section_def=ReadableIdentifiers, ) From 6c59dad83bac982f24106b0722a67a455684b15a Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 3 Dec 2024 16:13:37 +0100 Subject: [PATCH 12/93] Fix rebase --- MANIFEST.in | 1 - .../{general/schema.py => __init__.py} | 0 src/nomad_measurements/general/__init__.py | 14 - testing_hdf5.py | 0 tests/data/XRD-918-16_10.xrdml.h5 | Bin 54716 -> 0 bytes tests/xrd/TwoTheta_scan_powder.rasx | Bin 34557 -> 0 bytes tests/xrd/test_hdf5.py | 17 - uv.lock | 2460 ----------------- 8 files changed, 2492 deletions(-) rename src/nomad_measurements/{general/schema.py => __init__.py} (100%) delete mode 100644 src/nomad_measurements/general/__init__.py delete mode 100644 testing_hdf5.py delete mode 100644 tests/data/XRD-918-16_10.xrdml.h5 delete mode 100644 tests/xrd/TwoTheta_scan_powder.rasx delete mode 100644 tests/xrd/test_hdf5.py delete mode 100644 uv.lock diff --git a/MANIFEST.in b/MANIFEST.in index b5ccc2d3..e69de29b 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +0,0 @@ -recursive-include * nomad_plugin.yaml diff --git a/src/nomad_measurements/general/schema.py b/src/nomad_measurements/__init__.py similarity index 100% rename from src/nomad_measurements/general/schema.py rename to src/nomad_measurements/__init__.py diff --git a/src/nomad_measurements/general/__init__.py b/src/nomad_measurements/general/__init__.py deleted file mode 100644 index fbd6e4b9..00000000 --- a/src/nomad_measurements/general/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -from nomad.config.models.plugins import SchemaPackageEntryPoint - - -class GeneralSchemaPackageEntryPoint(SchemaPackageEntryPoint): - def load(self): - from nomad_measurements.general.schema import m_package - - return m_package - - -schema = GeneralSchemaPackageEntryPoint( - name="General Schema", - description="Schema package defined using the new plugin mechanism.", -) diff --git a/testing_hdf5.py b/testing_hdf5.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/data/XRD-918-16_10.xrdml.h5 b/tests/data/XRD-918-16_10.xrdml.h5 deleted file mode 100644 index 2ea9fa3ecf8b0fce24a9d678e061d4c88e31f9e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54716 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 diff --git a/tests/xrd/TwoTheta_scan_powder.rasx b/tests/xrd/TwoTheta_scan_powder.rasx deleted file mode 100644 index 1d94899691a391da031e4a1f40ab5ed698319a24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34557 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 diff --git a/tests/xrd/test_hdf5.py b/tests/xrd/test_hdf5.py deleted file mode 100644 index 807f9049..00000000 --- a/tests/xrd/test_hdf5.py +++ /dev/null @@ -1,17 +0,0 @@ -from fairmat_readers_xrd import read_rigaku_rasx -from nomad_measurements.utils import AttrDict - - -def test_hdf5_file_generation(): - # read the example file - data_dict = read_rigaku_rasx('./tests/xrd/TwoTheta_scan_powder.rasx') - data_obj = AttrDict(lambda: None, data_dict) - - print(data_obj.metadata.sds) - print(data_obj.metadat.sds) - print(data_obj['metadata']['sds']) - print(data_obj['metadat']['sds']) - - -if __name__ == '__main__': - test_hdf5_file_generation() diff --git a/uv.lock b/uv.lock deleted file mode 100644 index 5091de34..00000000 --- a/uv.lock +++ /dev/null @@ -1,2460 +0,0 @@ -version = 1 -requires-python = ">=3.9" -resolution-markers = [ - "python_full_version < '3.11' and platform_system == 'Windows'", - "python_full_version < '3.11' and platform_system != 'Windows'", - "python_full_version == '3.11.*'", - "python_full_version >= '3.12'", -] - -[[package]] -name = "aniso8601" -version = "9.0.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cb/72/be3db445b03944bfbb2b02b82d00cb2a2bcf96275c4543f14bf60fa79e12/aniso8601-9.0.1.tar.gz", hash = "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973", size = 47345 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/04/e97c12dc034791d7b504860acfcdd2963fa21ae61eaca1c9d31245f812c3/aniso8601-9.0.1-py2.py3-none-any.whl", hash = "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f", size = 52754 }, -] - -[[package]] -name = "anyio" -version = "4.6.2.post1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "idna" }, - { name = "sniffio" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9f/09/45b9b7a6d4e45c6bcb5bf61d19e3ab87df68e0601fa8c5293de3542546cc/anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c", size = 173422 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d", size = 90377 }, -] - -[[package]] -name = "anytree" -version = "2.12.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f9/44/2dd9c5d0c3befe899738b930aa056e003b1441bfbf34aab8fce90b2b7dea/anytree-2.12.1.tar.gz", hash = "sha256:244def434ccf31b668ed282954e5d315b4e066c4940b94aff4a7962d85947830", size = 31110 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/fb/ff946843e6b55ae9fda84df3964d6c233cd2261dface789f5be02ab79bc5/anytree-2.12.1-py3-none-any.whl", hash = "sha256:5ea9e61caf96db1e5b3d0a914378d2cd83c269dfce1fb8242ce96589fa3382f0", size = 44914 }, -] - -[[package]] -name = "ase" -version = "3.22.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "matplotlib" }, - { name = "numpy" }, - { name = "scipy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/69/64/096410b2e0b58aee082b40a37cdd61e708ed722a7471d7cf0e2dcb01cade/ase-3.22.1.tar.gz", hash = "sha256:004df6b0ea04b1114c790fadfe45d4125eb0e53125c66a93425af853d82ab432", size = 2807134 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/b0/3c0a7afaf66274588216c251376ac2bea0269eb7a5e1da77521811060553/ase-3.22.1-py3-none-any.whl", hash = "sha256:66cc481e3d82bea8931d5fe677119932ea0bd1bc08b901fd84f36b37fa681c9e", size = 2192122 }, -] - -[[package]] -name = "async-property" -version = "0.2.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/12/900eb34b3af75c11b69d6b78b74ec0fd1ba489376eceb3785f787d1a0a1d/async_property-0.2.2.tar.gz", hash = "sha256:17d9bd6ca67e27915a75d92549df64b5c7174e9dc806b30a3934dc4ff0506380", size = 16523 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/80/9f608d13b4b3afcebd1dd13baf9551c95fc424d6390e4b1cfd7b1810cd06/async_property-0.2.2-py2.py3-none-any.whl", hash = "sha256:8924d792b5843994537f8ed411165700b27b2bd966cefc4daeefc1253442a9d7", size = 9546 }, -] - -[[package]] -name = "bitarray" -version = "3.0.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/62/dcfac53d22ef7e904ed10a8e710a36391d2d6753c34c869b51bfc5e4ad54/bitarray-3.0.0.tar.gz", hash = "sha256:a2083dc20f0d828a7cdf7a16b20dae56aab0f43dc4f347a3b3039f6577992b03", size = 126627 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/f7/2cd02557fa9f177d54b51e6d668696266bdc1af978b5c27179449cbf5870/bitarray-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ddbf71a97ad1d6252e6e93d2d703b624d0a5b77c153b12f9ea87d83e1250e0c", size = 172224 }, - { url = "https://files.pythonhosted.org/packages/49/0a/0362089c127f2639041171803f6bf193a9e1deba72df637ebd36cb510f46/bitarray-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0e7f24a0b01e6e6a0191c50b06ca8edfdec1988d9d2b264d669d2487f4f4680", size = 123359 }, - { url = "https://files.pythonhosted.org/packages/c7/ab/a0982708b5ad92d6ec40833846ac954b57b16d9f90551a9da59e4bce79e1/bitarray-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:150b7b29c36d9f1a24779aea723fdfc73d1c1c161dc0ea14990da27d4e947092", size = 121267 }, - { url = "https://files.pythonhosted.org/packages/10/23/134ad08b9e7be3b80575fd4a50c33c79b3b360794dfc2716b6a18bf4dd60/bitarray-3.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8330912be6cb8e2fbfe8eb69f82dee139d605730cadf8d50882103af9ac83bb4", size = 278114 }, - { url = "https://files.pythonhosted.org/packages/c1/a1/df7d0b415207de7c6210403865a5d8a9c920209d542f552a09a02749038a/bitarray-3.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e56ba8be5f17dee0ffa6d6ce85251e062ded2faa3cbd2558659c671e6c3bf96d", size = 292725 }, - { url = "https://files.pythonhosted.org/packages/ec/06/03a636ac237c1860e63f037ccff35f0fec45188c94e55d9df526ee80adc3/bitarray-3.0.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffd94b4803811c738e504a4b499fb2f848b2f7412d71e6b517508217c1d7929d", size = 294722 }, - { url = "https://files.pythonhosted.org/packages/17/33/c2a7cb6f0030ea94408c84c4f80f4065b54b2bf1d4080e36fcd0b4c587a2/bitarray-3.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0255bd05ec7165e512c115423a5255a3f301417973d20a80fc5bfc3f3640bcb", size = 278304 }, - { url = "https://files.pythonhosted.org/packages/2c/a3/a06f76dd55d5337ff55585059058761c148da6d1e9e2bc0469d881ba5eb8/bitarray-3.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe606e728842389943a939258809dc5db2de831b1d2e0118515059e87f7bbc1a", size = 268807 }, - { url = "https://files.pythonhosted.org/packages/29/48/e8157c422542c308d6a0f5b213b21fef5779c80c00e673e2e4d7b3854d60/bitarray-3.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e89ea59a3ed86a6eb150d016ed28b1bedf892802d0ed32b5659d3199440f3ced", size = 272791 }, - { url = "https://files.pythonhosted.org/packages/ad/53/219d82592b150b580fbc479a718a7c31086627ed4599c9930408f43b6de4/bitarray-3.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cf0cc2e91dd38122dec2e6541efa99aafb0a62e118179218181eff720b4b8153", size = 264821 }, - { url = "https://files.pythonhosted.org/packages/95/08/c47b24fbb34a305531d8d0d7c15f5ab9788478384583a2614b07c2449cf8/bitarray-3.0.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:2d9fe3ee51afeb909b68f97e14c6539ace3f4faa99b21012e610bbe7315c388d", size = 287871 }, - { url = "https://files.pythonhosted.org/packages/77/31/5cdf3dcf407e8fcc5ca07a06f45aaf6b0adb15f38fe6fddd03d5d1fbaf9f/bitarray-3.0.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:37be5482b9df3105bad00fdf7dc65244e449b130867c3879c9db1db7d72e508b", size = 299459 }, - { url = "https://files.pythonhosted.org/packages/b5/26/15b3630dc9bed79fc0e4a5dc92f4b1d30a872ff92f20a8b7acbb7a484bfd/bitarray-3.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0027b8f3bb2bba914c79115e96a59b9924aafa1a578223a7c4f0a7242d349842", size = 271131 }, - { url = "https://files.pythonhosted.org/packages/45/4b/1c8ba97a015d9cf44b54d4488a0005c2e9fb33ff1df38fdcf68d1cb76785/bitarray-3.0.0-cp310-cp310-win32.whl", hash = "sha256:628f93e9c2c23930bd1cfe21c634d6c84ec30f45f23e69aefe1fcd262186d7bb", size = 114230 }, - { url = "https://files.pythonhosted.org/packages/84/54/d883073137d5c245555f66c48f9518c855704b4c619aa92ddd74d6eb2c98/bitarray-3.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:0b655c3110e315219e266b2732609fddb0857bc69593de29f3c2ba74b7d3f51a", size = 121439 }, - { url = "https://files.pythonhosted.org/packages/61/41/321edc0fbf7e8c88552d5ff9ee07777d58e2078f2706c6478bc6651b1945/bitarray-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:44c3e78b60070389b824d5a654afa1c893df723153c81904088d4922c3cfb6ac", size = 172452 }, - { url = "https://files.pythonhosted.org/packages/48/92/4c312d6d55ac30dae96749830c9f5007a914efcb591ee0828914078eec9f/bitarray-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:545d36332de81e4742a845a80df89530ff193213a50b4cbef937ed5a44c0e5e5", size = 123502 }, - { url = "https://files.pythonhosted.org/packages/75/2c/9f3ed70ffac8e6d2b0880e132d9e5024e4ef9404a24220deca8dbd702f15/bitarray-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8a9eb510cde3fa78c2e302bece510bf5ed494ec40e6b082dec753d6e22d5d1b1", size = 121363 }, - { url = "https://files.pythonhosted.org/packages/48/e0/8ec59416aaa7ca1461a0268c0fe2fbdc8d574ac41e307980f555b773d5f6/bitarray-3.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e3727ab63dfb6bde00b281934e2212bb7529ea3006c0031a556a84d2268bea5", size = 285792 }, - { url = "https://files.pythonhosted.org/packages/b9/8a/fb9d76ecb44a79f02188240278574376e851d0ca81437f433c9e6481d2e5/bitarray-3.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2055206ed653bee0b56628f6a4d248d53e5660228d355bbec0014bdfa27050ae", size = 300848 }, - { url = "https://files.pythonhosted.org/packages/63/c5/067b688553b23e99d61ecf930abf1ad5cb5f80c2ebe6f0e2fe8ecab00b3f/bitarray-3.0.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:147542299f458bdb177f798726e5f7d39ab8491de4182c3c6d9885ed275a3c2b", size = 303027 }, - { url = "https://files.pythonhosted.org/packages/dc/46/25ebc667907736b2c5c84f4bd8260d9bece8b69719a33db5c3f3dcb281a5/bitarray-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f761184b93092077c7f6b7dad7bd4e671c1620404a76620da7872ceb576a94", size = 286125 }, - { url = "https://files.pythonhosted.org/packages/16/dd/f9a1d84965a992ff42cae5b61536e68fc944f3e31a349b690347d98fc5e0/bitarray-3.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e008b7b4ce6c7f7a54b250c45c28d4243cc2a3bbfd5298fa7dac92afda229842", size = 277111 }, - { url = "https://files.pythonhosted.org/packages/16/5b/44f298586a09beb62ec553f9efa06c8a5356d2e230e4080c72cb2800a48f/bitarray-3.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dfea514e665af278b2e1d4deb542de1cd4f77413bee83dd15ae16175976ea8d5", size = 280941 }, - { url = "https://files.pythonhosted.org/packages/28/7c/c6e157332227862727959057ba2987e6710985992b196a81f61995f21e19/bitarray-3.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:66d6134b7bb737b88f1d16478ad0927c571387f6054f4afa5557825a4c1b78e2", size = 272817 }, - { url = "https://files.pythonhosted.org/packages/b7/5d/9f7aaaaf85b5247b4a69b93af60ac7dcfff5545bf544a35517618c4244a0/bitarray-3.0.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3cd565253889940b4ec4768d24f101d9fe111cad4606fdb203ea16f9797cf9ed", size = 295830 }, - { url = "https://files.pythonhosted.org/packages/14/1b/86dd50edd2e0612b092fe4caec3001a24298c9acab5e89a503f002ed3bef/bitarray-3.0.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:4800c91a14656789d2e67d9513359e23e8a534c8ee1482bb9b517a4cfc845200", size = 307592 }, - { url = "https://files.pythonhosted.org/packages/d6/8f/45a1f1bcce5fd88d2f0bb2e1ebe8bbb55247edcb8e7a8ef06e4437e2b5e3/bitarray-3.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c2945e0390d1329c585c584c6b6d78be017d9c6a1288f9c92006fe907f69cc28", size = 278971 }, - { url = "https://files.pythonhosted.org/packages/43/2d/948c5718fe901aa58c98cef52b8898a6bea865bea7528cff6c2bc703f9f3/bitarray-3.0.0-cp311-cp311-win32.whl", hash = "sha256:c23286abba0cb509733c6ce8f4013cd951672c332b2e184dbefbd7331cd234c8", size = 114242 }, - { url = "https://files.pythonhosted.org/packages/8c/75/e921ada57bb0bcece5eb515927c031f0bc828f702b8f213639358d9df396/bitarray-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ca79f02a98cbda1472449d440592a2fe2ad96fe55515a0447fa8864a38017cf8", size = 121524 }, - { url = "https://files.pythonhosted.org/packages/4e/2e/2e4beb2b714dc83a9e90ac0e4bacb1a191c71125734f72962ee2a20b9cfb/bitarray-3.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:184972c96e1c7e691be60c3792ca1a51dd22b7f25d96ebea502fe3c9b554f25d", size = 172152 }, - { url = "https://files.pythonhosted.org/packages/e0/1f/9ec96408c060ffc3df5ba64d2b520fd0484cb3393a96691df8f660a43b17/bitarray-3.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:787db8da5e9e29be712f7a6bce153c7bc8697ccc2c38633e347bb9c82475d5c9", size = 123319 }, - { url = "https://files.pythonhosted.org/packages/80/9f/4dd05086308bfcc84ad88c663460a8ad9f5f638f9f96eb5fa08381054db6/bitarray-3.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2da91ab3633c66999c2a352f0ca9ae064f553e5fc0eca231d28e7e305b83e942", size = 121242 }, - { url = "https://files.pythonhosted.org/packages/55/bb/8865b7380e9d20445bc775079f24f2279a8c0d9ee11d57c49b118d39beaf/bitarray-3.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7edb83089acbf2c86c8002b96599071931dc4ea5e1513e08306f6f7df879a48b", size = 287463 }, - { url = "https://files.pythonhosted.org/packages/db/8b/779119ee438090a80cbfaa49f96e783651183ab4c25b9760fe360aa7cb31/bitarray-3.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996d1b83eb904589f40974538223eaed1ab0f62be8a5105c280b9bd849e685c4", size = 301599 }, - { url = "https://files.pythonhosted.org/packages/41/25/78f7ba7fa8ab428767dfb722fc1ea9aac4a9813e348023d8047d8fd32253/bitarray-3.0.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4817d73d995bd2b977d9cde6050be8d407791cf1f84c8047fa0bea88c1b815bc", size = 304837 }, - { url = "https://files.pythonhosted.org/packages/f7/8d/30a448d3157b4239e635c92fc3b3789a5b87784875ca2776f65bd543d136/bitarray-3.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d47bc4ff9b0e1624d613563c6fa7b80aebe7863c56c3df5ab238bb7134e8755", size = 288588 }, - { url = "https://files.pythonhosted.org/packages/86/e0/c1f1b595682244f55119d55f280b5a996bcd462b702ec220d976a7566d27/bitarray-3.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aca0a9cd376beaccd9f504961de83e776dd209c2de5a4c78dc87a78edf61839b", size = 279002 }, - { url = "https://files.pythonhosted.org/packages/5c/4d/a17626923ad2c9d20ed1625fc5b27a8dfe2d1a3e877083e9422455ec302d/bitarray-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:572a61fba7e3a710a8324771322fba8488d134034d349dcd036a7aef74723a80", size = 281898 }, - { url = "https://files.pythonhosted.org/packages/50/d8/5c410580a510e669d9a28bf17675e58843236c55c60fc6dc8f8747808757/bitarray-3.0.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a817ad70c1aff217530576b4f037dd9b539eb2926603354fcac605d824082ad1", size = 274622 }, - { url = "https://files.pythonhosted.org/packages/e7/21/de2e8eda85c5f6a05bda75a00c22c94aee71ef09db0d5cbf22446de74312/bitarray-3.0.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:2ac67b658fa5426503e9581a3fb44a26a3b346c1abd17105735f07db572195b3", size = 296930 }, - { url = "https://files.pythonhosted.org/packages/13/7b/7cfad12d77db2932fb745fa281693b0031c3dfd7f2ecf5803be688cc3798/bitarray-3.0.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:12f19ede03e685c5c588ab5ed63167999295ffab5e1126c5fe97d12c0718c18f", size = 309836 }, - { url = "https://files.pythonhosted.org/packages/53/e1/5120fbb8438a0d718e063f70168a2975e03f00ce6b86e74b8eec079cb492/bitarray-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fcef31b062f756ba7eebcd7890c5d5de84b9d64ee877325257bcc9782288564a", size = 281535 }, - { url = "https://files.pythonhosted.org/packages/73/75/8acebbbb4f85dcca73b8e91dde5d3e1e3e2317b36fae4f5b133c60720834/bitarray-3.0.0-cp312-cp312-win32.whl", hash = "sha256:656db7bdf1d81ec3b57b3cad7ec7276765964bcfd0eb81c5d1331f385298169c", size = 114423 }, - { url = "https://files.pythonhosted.org/packages/ca/56/dadae4d4351b337de6e0269001fb40f3ebe9f72222190456713d2c1be53d/bitarray-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f785af6b7cb07a9b1e5db0dea9ef9e3e8bb3d74874a0a61303eab9c16acc1999", size = 121680 }, - { url = "https://files.pythonhosted.org/packages/4f/30/07d7be4624981537d32b261dc48a16b03757cc9d88f66012d93acaf11663/bitarray-3.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7cb885c043000924554fe2124d13084c8fdae03aec52c4086915cd4cb87fe8be", size = 172147 }, - { url = "https://files.pythonhosted.org/packages/f0/e9/be1fa2828bad9cb32e1309e6dbd05adcc41679297d9e96bbb372be928e38/bitarray-3.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7814c9924a0b30ecd401f02f082d8697fc5a5be3f8d407efa6e34531ff3c306a", size = 123319 }, - { url = "https://files.pythonhosted.org/packages/22/28/33601d276a6eb76e40fe8a61c61f59cc9ff6d9ecf0b676235c02689475b8/bitarray-3.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bcf524a087b143ba736aebbb054bb399d49e77cf7c04ed24c728e411adc82bfa", size = 121236 }, - { url = "https://files.pythonhosted.org/packages/85/d3/f36b213ffae8f9c8e4c6f12a91e18c06570a04f42d5a1bda4303380f2639/bitarray-3.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1d5abf1d6d910599ac16afdd9a0ed3e24f3b46af57f3070cf2792f236f36e0b", size = 287395 }, - { url = "https://files.pythonhosted.org/packages/b7/1a/2da3b00d876883b05ffd3be9b1311858b48d4a26579f8647860e271c5385/bitarray-3.0.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9929051feeaf8d948cc0b1c9ce57748079a941a1a15c89f6014edf18adaade84", size = 301501 }, - { url = "https://files.pythonhosted.org/packages/88/b9/c1b5af8d1c918f1ee98748f7f7270f932f531c2259dd578c0edcf16ec73e/bitarray-3.0.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96cf0898f8060b2d3ae491762ae871b071212ded97ff9e1e3a5229e9fefe544c", size = 304804 }, - { url = "https://files.pythonhosted.org/packages/92/24/81a10862856419638c0db13e04de7cbf19938353517a67e4848c691f0b7c/bitarray-3.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab37da66a8736ad5a75a58034180e92c41e864da0152b84e71fcc253a2f69cd4", size = 288507 }, - { url = "https://files.pythonhosted.org/packages/da/70/a093af92ef7b207a59087e3b5819e03767fbdda9dd56aada3a4ee25a1fbd/bitarray-3.0.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beeb79e476d19b91fd6a3439853e4e5ba1b3b475920fa40d62bde719c8af786f", size = 278905 }, - { url = "https://files.pythonhosted.org/packages/fb/40/0925c6079c4b282b16eb9085f82df0cdf1f787fb4c67fd4baca3e37acf7f/bitarray-3.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f75fc0198c955d840b836059bd43e0993edbf119923029ca60c4fc017cefa54a", size = 281909 }, - { url = "https://files.pythonhosted.org/packages/61/4b/e11754a5d34cb997250d8019b1fe555d4c06fe2d2a68b0bf7c5580537046/bitarray-3.0.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f12cc7c7638074918cdcc7491aff897df921b092ffd877227892d2686e98f876", size = 274711 }, - { url = "https://files.pythonhosted.org/packages/5b/78/39513f75423959ee2d82a82e10296b6a7bc7d880b16d714980a6752ef33b/bitarray-3.0.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dbe1084935b942fab206e609fa1ed3f46ad1f2612fb4833e177e9b2a5e006c96", size = 297038 }, - { url = "https://files.pythonhosted.org/packages/af/a2/5cb81f8773a479de7c06cc1ada36d5cc5a8ebcd8715013e1c4e01a76e84a/bitarray-3.0.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ac06dd72ee1e1b6e312504d06f75220b5894af1fb58f0c20643698f5122aea76", size = 309814 }, - { url = "https://files.pythonhosted.org/packages/03/3e/795b57c6f6eea61c47d0716e1d60219218028b1f260f7328802eac684964/bitarray-3.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:00f9a88c56e373009ac3c73c55205cfbd9683fbd247e2f9a64bae3da78795252", size = 281564 }, - { url = "https://files.pythonhosted.org/packages/f6/31/5914002ae4dd0e0079f8bccfd0647119cff364280d106108a19bd2511933/bitarray-3.0.0-cp313-cp313-win32.whl", hash = "sha256:9c6e52005e91803eb4e08c0a08a481fb55ddce97f926bae1f6fa61b3396b5b61", size = 114404 }, - { url = "https://files.pythonhosted.org/packages/76/0a/184f85a1739db841ae8fbb1d9ec028240d5a351e36abec9cd020de889dab/bitarray-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:cb98d5b6eac4b2cf2a5a69f60a9c499844b8bea207059e9fc45c752436e6bb49", size = 121672 }, - { url = "https://files.pythonhosted.org/packages/d7/88/fb05dc8a03b4a9e0d7588f097fecdeba3023aced2fe52282bccc16eb853b/bitarray-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:39b38a3d45dac39d528c87b700b81dfd5e8dc8e9e1a102503336310ef837c3fd", size = 172211 }, - { url = "https://files.pythonhosted.org/packages/66/0d/6a50463baa8bcc7c48b498282493b6bc5bff65fd5047f8627f7d74a7958d/bitarray-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0e104f9399144fab6a892d379ba1bb4275e56272eb465059beef52a77b4e5ce6", size = 123363 }, - { url = "https://files.pythonhosted.org/packages/4a/f8/5a71f95ba8fa6c90508dbd5c48ae9dd9440ed54e784d8a3b7edb05284641/bitarray-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0879f839ec8f079fa60c3255966c2e1aa7196699a234d4e5b7898fbc321901b5", size = 121261 }, - { url = "https://files.pythonhosted.org/packages/16/d5/f5a6a4ab18fe8030c1c98589129fe0a5cf210bcbcc32cd1c77bfd8741063/bitarray-3.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9502c2230d59a4ace2fddfd770dad8e8b414cbd99517e7e56c55c20997c28b8d", size = 276010 }, - { url = "https://files.pythonhosted.org/packages/ff/7d/0e341f0a30a142fbf259ec9aef2bc5006ed3c0eb74ce9489224843b2d2d8/bitarray-3.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57d5ef854f8ec434f2ffd9ddcefc25a10848393fe2976e2be2c8c773cf5fef42", size = 290616 }, - { url = "https://files.pythonhosted.org/packages/68/75/dccf583065333aa64b54fb153f72b27975485f802769c6202b093574a277/bitarray-3.0.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a3c36b2fcfebe15ad1c10a90c1d52a42bebe960adcbce340fef867203028fbe7", size = 292413 }, - { url = "https://files.pythonhosted.org/packages/95/6f/fa375b76201ee01d6ed06d48c2ecccfff249766e0595a536d3304d6c6c9a/bitarray-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66a33a537e781eac3a352397ce6b07eedf3a8380ef4a804f8844f3f45e335544", size = 276122 }, - { url = "https://files.pythonhosted.org/packages/b0/92/7e32ec2b2e5c9de24ae9ffd422b671567c02aa7ebe8465e855512000e9dc/bitarray-3.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa54c7e1da8cf4be0aab941ea284ec64033ede5d6de3fd47d75e77cafe986e9d", size = 266825 }, - { url = "https://files.pythonhosted.org/packages/05/84/a2610495d55ca420102a850dc0d2a69aafbe165be5f766b9242d9435fe91/bitarray-3.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a667ea05ba1ea81b722682276dbef1d36990f8908cf51e570099fd505a89f931", size = 271330 }, - { url = "https://files.pythonhosted.org/packages/aa/44/effb0a94116c1cb23a5ce779c13e92d2b039242c41671c9bc0b6432dbc90/bitarray-3.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d756bfeb62ca4fe65d2af7a39249d442c05070c047d03729ad6cd4c2e9b0f0bd", size = 263453 }, - { url = "https://files.pythonhosted.org/packages/93/e3/0030e5e88963d918a876dbf510ead96a1161f0aa9f1a3a0ee0eafa826eca/bitarray-3.0.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c9e9fef0754867d88e948ce8351c9fd7e507d8514e0f242fd67c907b9cdf98b3", size = 285787 }, - { url = "https://files.pythonhosted.org/packages/b4/09/e53cf19ec028edcb3990ef07cd50cfeaf2820585fc3cb5ded5a464d9eaf4/bitarray-3.0.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:67a0b56dd02f2713f6f52cacb3f251afd67c94c5f0748026d307d87a81a8e15c", size = 298218 }, - { url = "https://files.pythonhosted.org/packages/65/ab/db0e300651e262da8e0dae1daa305c7c0825b5489be6ac6150125c6d19c0/bitarray-3.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d8c36ddc1923bcc4c11b9994c54eaae25034812a42400b7b8a86fe6d242166a2", size = 269170 }, - { url = "https://files.pythonhosted.org/packages/98/8a/6f49c08a18159206c78e52eaae059e9efaec34f1ae112ffb47bc286f2030/bitarray-3.0.0-cp39-cp39-win32.whl", hash = "sha256:1414a7102a3c4986f241480544f5c99f5d32258fb9b85c9c04e84e48c490ab35", size = 114301 }, - { url = "https://files.pythonhosted.org/packages/5d/e4/df4ec73be0edf600d2c073da295c95e47f653a2e9b646c873ad327c20ce1/bitarray-3.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:8c9733d2ff9b7838ac04bf1048baea153174753e6a47312be14c83c6a395424b", size = 121560 }, - { url = "https://files.pythonhosted.org/packages/01/6b/405d04ed3d0e46dcc52b9f9ca98b342de5930ed87adcacb86afc830e188b/bitarray-3.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fef4e3b3f2084b4dae3e5316b44cda72587dcc81f68b4eb2dbda1b8d15261b61", size = 119755 }, - { url = "https://files.pythonhosted.org/packages/90/d8/cdfd2d41a836479db66c1d33f2615c37529458427586c8d585fec4c39c5c/bitarray-3.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e9eee03f187cef1e54a4545124109ee0afc84398628b4b32ebb4852b4a66393", size = 124105 }, - { url = "https://files.pythonhosted.org/packages/12/5d/4214bb7103fa9601332b49fc2fcef73005750581aabe7e13163ad66013cc/bitarray-3.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb5702dd667f4bb10fed056ffdc4ddaae8193a52cd74cb2cdb54e71f4ef2dd1", size = 124669 }, - { url = "https://files.pythonhosted.org/packages/fc/9b/ecfe49cf03047c8415d71ee931352b11b747525cbff9bc5db9c3592d21da/bitarray-3.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:666e44b0458bb2894b64264a29f2cc7b5b2cbcc4c5e9cedfe1fdbde37a8e329a", size = 126520 }, - { url = "https://files.pythonhosted.org/packages/e7/79/190bcac2a23fb5f726d0305b372f73e0bf496a43da0ace4e285e9927fcdb/bitarray-3.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c756a92cf1c1abf01e56a4cc40cb89f0ff9147f2a0be5b557ec436a23ff464d8", size = 122035 }, - { url = "https://files.pythonhosted.org/packages/dd/35/e0563c7563381a98685914b87662ea8c4a0816dcb86493214716b9684914/bitarray-3.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ee040ad3b7dfa05e459713099f16373c1f2a6f68b43cb0575a66718e7a5daef4", size = 119861 }, - { url = "https://files.pythonhosted.org/packages/ef/e7/fa1a5a5a5600f17927410d11f281c65a3fa3b9e5b5e44e01e9f0ec6d6294/bitarray-3.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dad7ba2af80f9ec1dd988c3aca7992408ec0d0b4c215b65d353d95ab0070b10", size = 124147 }, - { url = "https://files.pythonhosted.org/packages/98/89/d8b48497c71c129d46713082da3344baf79efbec588ae203cb1f023ff657/bitarray-3.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4839d3b64af51e4b8bb4a602563b98b9faeb34fd6c00ed23d7834e40a9d080fc", size = 124892 }, - { url = "https://files.pythonhosted.org/packages/12/b1/f5103b9864d8cb25f97b510aea3739caed8502854bbe0eb70578801b4a76/bitarray-3.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f71f24b58e75a889b9915e3197865302467f13e7390efdea5b6afc7424b3a2ea", size = 126623 }, - { url = "https://files.pythonhosted.org/packages/6d/bb/e019b29d68fc457eee40ff2ad3be9ea71cfdb0acccf1575ae106395e6148/bitarray-3.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bcf0150ae0bcc4aa97bdfcb231b37bad1a59083c1b5012643b266012bf420e68", size = 122129 }, -] - -[[package]] -name = "cachetools" -version = "5.5.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/38/a0f315319737ecf45b4319a8cd1f3a908e29d9277b46942263292115eee7/cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a", size = 27661 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/07/14f8ad37f2d12a5ce41206c21820d8cb6561b728e51fad4530dff0552a67/cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292", size = 9524 }, -] - -[[package]] -name = "certifi" -version = "2024.8.30" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", size = 168507 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", size = 167321 }, -] - -[[package]] -name = "cffi" -version = "1.17.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "pycparser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, - { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, - { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, - { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, - { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, - { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687 }, - { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211 }, - { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, - { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, - { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, - { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, - { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, - { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, - { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, - { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, - { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, - { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, - { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, - { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, - { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, - { url = "https://files.pythonhosted.org/packages/b9/ea/8bb50596b8ffbc49ddd7a1ad305035daa770202a6b782fc164647c2673ad/cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16", size = 182220 }, - { url = "https://files.pythonhosted.org/packages/ae/11/e77c8cd24f58285a82c23af484cf5b124a376b32644e445960d1a4654c3a/cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36", size = 178605 }, - { url = "https://files.pythonhosted.org/packages/ed/65/25a8dc32c53bf5b7b6c2686b42ae2ad58743f7ff644844af7cdb29b49361/cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8", size = 424910 }, - { url = "https://files.pythonhosted.org/packages/42/7a/9d086fab7c66bd7c4d0f27c57a1b6b068ced810afc498cc8c49e0088661c/cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576", size = 447200 }, - { url = "https://files.pythonhosted.org/packages/da/63/1785ced118ce92a993b0ec9e0d0ac8dc3e5dbfbcaa81135be56c69cabbb6/cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", size = 454565 }, - { url = "https://files.pythonhosted.org/packages/74/06/90b8a44abf3556599cdec107f7290277ae8901a58f75e6fe8f970cd72418/cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0", size = 435635 }, - { url = "https://files.pythonhosted.org/packages/bd/62/a1f468e5708a70b1d86ead5bab5520861d9c7eacce4a885ded9faa7729c3/cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3", size = 445218 }, - { url = "https://files.pythonhosted.org/packages/5b/95/b34462f3ccb09c2594aa782d90a90b045de4ff1f70148ee79c69d37a0a5a/cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595", size = 460486 }, - { url = "https://files.pythonhosted.org/packages/fc/fc/a1e4bebd8d680febd29cf6c8a40067182b64f00c7d105f8f26b5bc54317b/cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a", size = 437911 }, - { url = "https://files.pythonhosted.org/packages/e6/c3/21cab7a6154b6a5ea330ae80de386e7665254835b9e98ecc1340b3a7de9a/cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e", size = 460632 }, - { url = "https://files.pythonhosted.org/packages/cb/b5/fd9f8b5a84010ca169ee49f4e4ad6f8c05f4e3545b72ee041dbbcb159882/cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7", size = 171820 }, - { url = "https://files.pythonhosted.org/packages/8c/52/b08750ce0bce45c143e1b5d7357ee8c55341b52bdef4b0f081af1eb248c2/cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662", size = 181290 }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", size = 106620 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/8b/825cc84cf13a28bfbcba7c416ec22bf85a9584971be15b21dd8300c65b7f/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", size = 196363 }, - { url = "https://files.pythonhosted.org/packages/23/81/d7eef6a99e42c77f444fdd7bc894b0ceca6c3a95c51239e74a722039521c/charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", size = 125639 }, - { url = "https://files.pythonhosted.org/packages/21/67/b4564d81f48042f520c948abac7079356e94b30cb8ffb22e747532cf469d/charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", size = 120451 }, - { url = "https://files.pythonhosted.org/packages/c2/72/12a7f0943dd71fb5b4e7b55c41327ac0a1663046a868ee4d0d8e9c369b85/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", size = 140041 }, - { url = "https://files.pythonhosted.org/packages/67/56/fa28c2c3e31217c4c52158537a2cf5d98a6c1e89d31faf476c89391cd16b/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", size = 150333 }, - { url = "https://files.pythonhosted.org/packages/f9/d2/466a9be1f32d89eb1554cf84073a5ed9262047acee1ab39cbaefc19635d2/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", size = 142921 }, - { url = "https://files.pythonhosted.org/packages/f8/01/344ec40cf5d85c1da3c1f57566c59e0c9b56bcc5566c08804a95a6cc8257/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", size = 144785 }, - { url = "https://files.pythonhosted.org/packages/73/8b/2102692cb6d7e9f03b9a33a710e0164cadfce312872e3efc7cfe22ed26b4/charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", size = 146631 }, - { url = "https://files.pythonhosted.org/packages/d8/96/cc2c1b5d994119ce9f088a9a0c3ebd489d360a2eb058e2c8049f27092847/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", size = 140867 }, - { url = "https://files.pythonhosted.org/packages/c9/27/cde291783715b8ec30a61c810d0120411844bc4c23b50189b81188b273db/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", size = 149273 }, - { url = "https://files.pythonhosted.org/packages/3a/a4/8633b0fc1a2d1834d5393dafecce4a1cc56727bfd82b4dc18fc92f0d3cc3/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", size = 152437 }, - { url = "https://files.pythonhosted.org/packages/64/ea/69af161062166b5975ccbb0961fd2384853190c70786f288684490913bf5/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", size = 150087 }, - { url = "https://files.pythonhosted.org/packages/3b/fd/e60a9d9fd967f4ad5a92810138192f825d77b4fa2a557990fd575a47695b/charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", size = 145142 }, - { url = "https://files.pythonhosted.org/packages/6d/02/8cb0988a1e49ac9ce2eed1e07b77ff118f2923e9ebd0ede41ba85f2dcb04/charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", size = 94701 }, - { url = "https://files.pythonhosted.org/packages/d6/20/f1d4670a8a723c46be695dff449d86d6092916f9e99c53051954ee33a1bc/charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", size = 102191 }, - { url = "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", size = 193339 }, - { url = "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", size = 124366 }, - { url = "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", size = 118874 }, - { url = "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", size = 138243 }, - { url = "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", size = 148676 }, - { url = "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", size = 141289 }, - { url = "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", size = 142585 }, - { url = "https://files.pythonhosted.org/packages/3b/a0/a68980ab8a1f45a36d9745d35049c1af57d27255eff8c907e3add84cf68f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", size = 144408 }, - { url = "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", size = 139076 }, - { url = "https://files.pythonhosted.org/packages/fb/9d/9c13753a5a6e0db4a0a6edb1cef7aee39859177b64e1a1e748a6e3ba62c2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", size = 146874 }, - { url = "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", size = 150871 }, - { url = "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", size = 148546 }, - { url = "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", size = 143048 }, - { url = "https://files.pythonhosted.org/packages/01/f8/38842422988b795220eb8038745d27a675ce066e2ada79516c118f291f07/charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", size = 94389 }, - { url = "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", size = 101752 }, - { url = "https://files.pythonhosted.org/packages/d3/0b/4b7a70987abf9b8196845806198975b6aab4ce016632f817ad758a5aa056/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", size = 194445 }, - { url = "https://files.pythonhosted.org/packages/50/89/354cc56cf4dd2449715bc9a0f54f3aef3dc700d2d62d1fa5bbea53b13426/charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", size = 125275 }, - { url = "https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", size = 119020 }, - { url = "https://files.pythonhosted.org/packages/9d/e4/9263b8240ed9472a2ae7ddc3e516e71ef46617fe40eaa51221ccd4ad9a27/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", size = 139128 }, - { url = "https://files.pythonhosted.org/packages/6b/e3/9f73e779315a54334240353eaea75854a9a690f3f580e4bd85d977cb2204/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", size = 149277 }, - { url = "https://files.pythonhosted.org/packages/1a/cf/f1f50c2f295312edb8a548d3fa56a5c923b146cd3f24114d5adb7e7be558/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", size = 142174 }, - { url = "https://files.pythonhosted.org/packages/16/92/92a76dc2ff3a12e69ba94e7e05168d37d0345fa08c87e1fe24d0c2a42223/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", size = 143838 }, - { url = "https://files.pythonhosted.org/packages/a4/01/2117ff2b1dfc61695daf2babe4a874bca328489afa85952440b59819e9d7/charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", size = 146149 }, - { url = "https://files.pythonhosted.org/packages/f6/9b/93a332b8d25b347f6839ca0a61b7f0287b0930216994e8bf67a75d050255/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", size = 140043 }, - { url = "https://files.pythonhosted.org/packages/ab/f6/7ac4a01adcdecbc7a7587767c776d53d369b8b971382b91211489535acf0/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", size = 148229 }, - { url = "https://files.pythonhosted.org/packages/9d/be/5708ad18161dee7dc6a0f7e6cf3a88ea6279c3e8484844c0590e50e803ef/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", size = 151556 }, - { url = "https://files.pythonhosted.org/packages/5a/bb/3d8bc22bacb9eb89785e83e6723f9888265f3a0de3b9ce724d66bd49884e/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", size = 149772 }, - { url = "https://files.pythonhosted.org/packages/f7/fa/d3fc622de05a86f30beea5fc4e9ac46aead4731e73fd9055496732bcc0a4/charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", size = 144800 }, - { url = "https://files.pythonhosted.org/packages/9a/65/bdb9bc496d7d190d725e96816e20e2ae3a6fa42a5cac99c3c3d6ff884118/charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", size = 94836 }, - { url = "https://files.pythonhosted.org/packages/3e/67/7b72b69d25b89c0b3cea583ee372c43aa24df15f0e0f8d3982c57804984b/charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", size = 102187 }, - { url = "https://files.pythonhosted.org/packages/f3/89/68a4c86f1a0002810a27f12e9a7b22feb198c59b2f05231349fbce5c06f4/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", size = 194617 }, - { url = "https://files.pythonhosted.org/packages/4f/cd/8947fe425e2ab0aa57aceb7807af13a0e4162cd21eee42ef5b053447edf5/charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", size = 125310 }, - { url = "https://files.pythonhosted.org/packages/5b/f0/b5263e8668a4ee9becc2b451ed909e9c27058337fda5b8c49588183c267a/charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", size = 119126 }, - { url = "https://files.pythonhosted.org/packages/ff/6e/e445afe4f7fda27a533f3234b627b3e515a1b9429bc981c9a5e2aa5d97b6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", size = 139342 }, - { url = "https://files.pythonhosted.org/packages/a1/b2/4af9993b532d93270538ad4926c8e37dc29f2111c36f9c629840c57cd9b3/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", size = 149383 }, - { url = "https://files.pythonhosted.org/packages/fb/6f/4e78c3b97686b871db9be6f31d64e9264e889f8c9d7ab33c771f847f79b7/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", size = 142214 }, - { url = "https://files.pythonhosted.org/packages/2b/c9/1c8fe3ce05d30c87eff498592c89015b19fade13df42850aafae09e94f35/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", size = 144104 }, - { url = "https://files.pythonhosted.org/packages/ee/68/efad5dcb306bf37db7db338338e7bb8ebd8cf38ee5bbd5ceaaaa46f257e6/charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", size = 146255 }, - { url = "https://files.pythonhosted.org/packages/0c/75/1ed813c3ffd200b1f3e71121c95da3f79e6d2a96120163443b3ad1057505/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", size = 140251 }, - { url = "https://files.pythonhosted.org/packages/7d/0d/6f32255c1979653b448d3c709583557a4d24ff97ac4f3a5be156b2e6a210/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", size = 148474 }, - { url = "https://files.pythonhosted.org/packages/ac/a0/c1b5298de4670d997101fef95b97ac440e8c8d8b4efa5a4d1ef44af82f0d/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", size = 151849 }, - { url = "https://files.pythonhosted.org/packages/04/4f/b3961ba0c664989ba63e30595a3ed0875d6790ff26671e2aae2fdc28a399/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", size = 149781 }, - { url = "https://files.pythonhosted.org/packages/d8/90/6af4cd042066a4adad58ae25648a12c09c879efa4849c705719ba1b23d8c/charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482", size = 144970 }, - { url = "https://files.pythonhosted.org/packages/cc/67/e5e7e0cbfefc4ca79025238b43cdf8a2037854195b37d6417f3d0895c4c2/charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", size = 94973 }, - { url = "https://files.pythonhosted.org/packages/65/97/fc9bbc54ee13d33dc54a7fcf17b26368b18505500fc01e228c27b5222d80/charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", size = 102308 }, - { url = "https://files.pythonhosted.org/packages/54/2f/28659eee7f5d003e0f5a3b572765bf76d6e0fe6601ab1f1b1dd4cba7e4f1/charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", size = 196326 }, - { url = "https://files.pythonhosted.org/packages/d1/18/92869d5c0057baa973a3ee2af71573be7b084b3c3d428fe6463ce71167f8/charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", size = 125614 }, - { url = "https://files.pythonhosted.org/packages/d6/27/327904c5a54a7796bb9f36810ec4173d2df5d88b401d2b95ef53111d214e/charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", size = 120450 }, - { url = "https://files.pythonhosted.org/packages/a4/23/65af317914a0308495133b2d654cf67b11bbd6ca16637c4e8a38f80a5a69/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", size = 140135 }, - { url = "https://files.pythonhosted.org/packages/f2/41/6190102ad521a8aa888519bb014a74251ac4586cde9b38e790901684f9ab/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", size = 150413 }, - { url = "https://files.pythonhosted.org/packages/7b/ab/f47b0159a69eab9bd915591106859f49670c75f9a19082505ff16f50efc0/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", size = 142992 }, - { url = "https://files.pythonhosted.org/packages/28/89/60f51ad71f63aaaa7e51a2a2ad37919985a341a1d267070f212cdf6c2d22/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", size = 144871 }, - { url = "https://files.pythonhosted.org/packages/0c/48/0050550275fea585a6e24460b42465020b53375017d8596c96be57bfabca/charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", size = 146756 }, - { url = "https://files.pythonhosted.org/packages/dc/b5/47f8ee91455946f745e6c9ddbb0f8f50314d2416dd922b213e7d5551ad09/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", size = 141034 }, - { url = "https://files.pythonhosted.org/packages/84/79/5c731059ebab43e80bf61fa51666b9b18167974b82004f18c76378ed31a3/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", size = 149434 }, - { url = "https://files.pythonhosted.org/packages/ca/f3/0719cd09fc4dc42066f239cb3c48ced17fc3316afca3e2a30a4756fe49ab/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", size = 152443 }, - { url = "https://files.pythonhosted.org/packages/f7/0e/c6357297f1157c8e8227ff337e93fd0a90e498e3d6ab96b2782204ecae48/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", size = 150294 }, - { url = "https://files.pythonhosted.org/packages/54/9a/acfa96dc4ea8c928040b15822b59d0863d6e1757fba8bd7de3dc4f761c13/charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", size = 145314 }, - { url = "https://files.pythonhosted.org/packages/73/1c/b10a63032eaebb8d7bcb8544f12f063f41f5f463778ac61da15d9985e8b6/charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", size = 94724 }, - { url = "https://files.pythonhosted.org/packages/c5/77/3a78bf28bfaa0863f9cfef278dbeadf55efe064eafff8c7c424ae3c4c1bf/charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", size = 102159 }, - { url = "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", size = 49446 }, -] - -[[package]] -name = "click" -version = "8.1.7" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "colorama", marker = "platform_system == 'Windows'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 }, -] - -[[package]] -name = "click-default-group" -version = "1.2.4" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "click" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1d/ce/edb087fb53de63dad3b36408ca30368f438738098e668b78c87f93cd41df/click_default_group-1.2.4.tar.gz", hash = "sha256:eb3f3c99ec0d456ca6cd2a7f08f7d4e91771bef51b01bdd9580cc6450fe1251e", size = 3505 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/1a/aff8bb287a4b1400f69e09a53bd65de96aa5cee5691925b38731c67fc695/click_default_group-1.2.4-py2.py3-none-any.whl", hash = "sha256:9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f", size = 4123 }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, -] - -[[package]] -name = "contourpy" -version = "1.3.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/31a8f28b4a2a4fa0e01085e542f3081ab0588eff8e589d39d775172c9792/contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", size = 13464370 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/e0/be8dcc796cfdd96708933e0e2da99ba4bb8f9b2caa9d560a50f3f09a65f3/contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7", size = 265366 }, - { url = "https://files.pythonhosted.org/packages/50/d6/c953b400219443535d412fcbbc42e7a5e823291236bc0bb88936e3cc9317/contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42", size = 249226 }, - { url = "https://files.pythonhosted.org/packages/6f/b4/6fffdf213ffccc28483c524b9dad46bb78332851133b36ad354b856ddc7c/contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7", size = 308460 }, - { url = "https://files.pythonhosted.org/packages/cf/6c/118fc917b4050f0afe07179a6dcbe4f3f4ec69b94f36c9e128c4af480fb8/contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab", size = 347623 }, - { url = "https://files.pythonhosted.org/packages/f9/a4/30ff110a81bfe3abf7b9673284d21ddce8cc1278f6f77393c91199da4c90/contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589", size = 317761 }, - { url = "https://files.pythonhosted.org/packages/99/e6/d11966962b1aa515f5586d3907ad019f4b812c04e4546cc19ebf62b5178e/contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41", size = 322015 }, - { url = "https://files.pythonhosted.org/packages/4d/e3/182383743751d22b7b59c3c753277b6aee3637049197624f333dac5b4c80/contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d", size = 1262672 }, - { url = "https://files.pythonhosted.org/packages/78/53/974400c815b2e605f252c8fb9297e2204347d1755a5374354ee77b1ea259/contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223", size = 1321688 }, - { url = "https://files.pythonhosted.org/packages/52/29/99f849faed5593b2926a68a31882af98afbeac39c7fdf7de491d9c85ec6a/contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f", size = 171145 }, - { url = "https://files.pythonhosted.org/packages/a9/97/3f89bba79ff6ff2b07a3cbc40aa693c360d5efa90d66e914f0ff03b95ec7/contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b", size = 216019 }, - { url = "https://files.pythonhosted.org/packages/b3/1f/9375917786cb39270b0ee6634536c0e22abf225825602688990d8f5c6c19/contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad", size = 266356 }, - { url = "https://files.pythonhosted.org/packages/05/46/9256dd162ea52790c127cb58cfc3b9e3413a6e3478917d1f811d420772ec/contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49", size = 250915 }, - { url = "https://files.pythonhosted.org/packages/e1/5d/3056c167fa4486900dfbd7e26a2fdc2338dc58eee36d490a0ed3ddda5ded/contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66", size = 310443 }, - { url = "https://files.pythonhosted.org/packages/ca/c2/1a612e475492e07f11c8e267ea5ec1ce0d89971be496c195e27afa97e14a/contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081", size = 348548 }, - { url = "https://files.pythonhosted.org/packages/45/cf/2c2fc6bb5874158277b4faf136847f0689e1b1a1f640a36d76d52e78907c/contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1", size = 319118 }, - { url = "https://files.pythonhosted.org/packages/03/33/003065374f38894cdf1040cef474ad0546368eea7e3a51d48b8a423961f8/contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d", size = 323162 }, - { url = "https://files.pythonhosted.org/packages/42/80/e637326e85e4105a802e42959f56cff2cd39a6b5ef68d5d9aee3ea5f0e4c/contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c", size = 1265396 }, - { url = "https://files.pythonhosted.org/packages/7c/3b/8cbd6416ca1bbc0202b50f9c13b2e0b922b64be888f9d9ee88e6cfabfb51/contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb", size = 1324297 }, - { url = "https://files.pythonhosted.org/packages/4d/2c/021a7afaa52fe891f25535506cc861c30c3c4e5a1c1ce94215e04b293e72/contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c", size = 171808 }, - { url = "https://files.pythonhosted.org/packages/8d/2f/804f02ff30a7fae21f98198828d0857439ec4c91a96e20cf2d6c49372966/contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67", size = 217181 }, - { url = "https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f", size = 267838 }, - { url = "https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6", size = 251549 }, - { url = "https://files.pythonhosted.org/packages/51/3d/aa0fe6ae67e3ef9f178389e4caaaa68daf2f9024092aa3c6032e3d174670/contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639", size = 303177 }, - { url = "https://files.pythonhosted.org/packages/56/c3/c85a7e3e0cab635575d3b657f9535443a6f5d20fac1a1911eaa4bbe1aceb/contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c", size = 341735 }, - { url = "https://files.pythonhosted.org/packages/dd/8d/20f7a211a7be966a53f474bc90b1a8202e9844b3f1ef85f3ae45a77151ee/contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06", size = 314679 }, - { url = "https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09", size = 320549 }, - { url = "https://files.pythonhosted.org/packages/0f/96/fdb2552a172942d888915f3a6663812e9bc3d359d53dafd4289a0fb462f0/contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd", size = 1263068 }, - { url = "https://files.pythonhosted.org/packages/2a/25/632eab595e3140adfa92f1322bf8915f68c932bac468e89eae9974cf1c00/contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35", size = 1322833 }, - { url = "https://files.pythonhosted.org/packages/73/e3/69738782e315a1d26d29d71a550dbbe3eb6c653b028b150f70c1a5f4f229/contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb", size = 172681 }, - { url = "https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b", size = 218283 }, - { url = "https://files.pythonhosted.org/packages/53/a1/d20415febfb2267af2d7f06338e82171824d08614084714fb2c1dac9901f/contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3", size = 267879 }, - { url = "https://files.pythonhosted.org/packages/aa/45/5a28a3570ff6218d8bdfc291a272a20d2648104815f01f0177d103d985e1/contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7", size = 251573 }, - { url = "https://files.pythonhosted.org/packages/39/1c/d3f51540108e3affa84f095c8b04f0aa833bb797bc8baa218a952a98117d/contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84", size = 303184 }, - { url = "https://files.pythonhosted.org/packages/00/56/1348a44fb6c3a558c1a3a0cd23d329d604c99d81bf5a4b58c6b71aab328f/contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0", size = 340262 }, - { url = "https://files.pythonhosted.org/packages/2b/23/00d665ba67e1bb666152131da07e0f24c95c3632d7722caa97fb61470eca/contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b", size = 313806 }, - { url = "https://files.pythonhosted.org/packages/5a/42/3cf40f7040bb8362aea19af9a5fb7b32ce420f645dd1590edcee2c657cd5/contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da", size = 319710 }, - { url = "https://files.pythonhosted.org/packages/05/32/f3bfa3fc083b25e1a7ae09197f897476ee68e7386e10404bdf9aac7391f0/contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14", size = 1264107 }, - { url = "https://files.pythonhosted.org/packages/1c/1e/1019d34473a736664f2439542b890b2dc4c6245f5c0d8cdfc0ccc2cab80c/contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8", size = 1322458 }, - { url = "https://files.pythonhosted.org/packages/22/85/4f8bfd83972cf8909a4d36d16b177f7b8bdd942178ea4bf877d4a380a91c/contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294", size = 172643 }, - { url = "https://files.pythonhosted.org/packages/cc/4a/fb3c83c1baba64ba90443626c228ca14f19a87c51975d3b1de308dd2cf08/contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087", size = 218301 }, - { url = "https://files.pythonhosted.org/packages/76/65/702f4064f397821fea0cb493f7d3bc95a5d703e20954dce7d6d39bacf378/contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8", size = 278972 }, - { url = "https://files.pythonhosted.org/packages/80/85/21f5bba56dba75c10a45ec00ad3b8190dbac7fd9a8a8c46c6116c933e9cf/contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b", size = 263375 }, - { url = "https://files.pythonhosted.org/packages/0a/64/084c86ab71d43149f91ab3a4054ccf18565f0a8af36abfa92b1467813ed6/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973", size = 307188 }, - { url = "https://files.pythonhosted.org/packages/3d/ff/d61a4c288dc42da0084b8d9dc2aa219a850767165d7d9a9c364ff530b509/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18", size = 345644 }, - { url = "https://files.pythonhosted.org/packages/ca/aa/00d2313d35ec03f188e8f0786c2fc61f589306e02fdc158233697546fd58/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8", size = 317141 }, - { url = "https://files.pythonhosted.org/packages/8d/6a/b5242c8cb32d87f6abf4f5e3044ca397cb1a76712e3fa2424772e3ff495f/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6", size = 323469 }, - { url = "https://files.pythonhosted.org/packages/6f/a6/73e929d43028a9079aca4bde107494864d54f0d72d9db508a51ff0878593/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2", size = 1260894 }, - { url = "https://files.pythonhosted.org/packages/2b/1e/1e726ba66eddf21c940821df8cf1a7d15cb165f0682d62161eaa5e93dae1/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927", size = 1314829 }, - { url = "https://files.pythonhosted.org/packages/b3/e3/b9f72758adb6ef7397327ceb8b9c39c75711affb220e4f53c745ea1d5a9a/contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8", size = 265518 }, - { url = "https://files.pythonhosted.org/packages/ec/22/19f5b948367ab5260fb41d842c7a78dae645603881ea6bc39738bcfcabf6/contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c", size = 249350 }, - { url = "https://files.pythonhosted.org/packages/26/76/0c7d43263dd00ae21a91a24381b7e813d286a3294d95d179ef3a7b9fb1d7/contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca", size = 309167 }, - { url = "https://files.pythonhosted.org/packages/96/3b/cadff6773e89f2a5a492c1a8068e21d3fccaf1a1c1df7d65e7c8e3ef60ba/contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f", size = 348279 }, - { url = "https://files.pythonhosted.org/packages/e1/86/158cc43aa549d2081a955ab11c6bdccc7a22caacc2af93186d26f5f48746/contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc", size = 318519 }, - { url = "https://files.pythonhosted.org/packages/05/11/57335544a3027e9b96a05948c32e566328e3a2f84b7b99a325b7a06d2b06/contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2", size = 321922 }, - { url = "https://files.pythonhosted.org/packages/0b/e3/02114f96543f4a1b694333b92a6dcd4f8eebbefcc3a5f3bbb1316634178f/contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e", size = 1258017 }, - { url = "https://files.pythonhosted.org/packages/f3/3b/bfe4c81c6d5881c1c643dde6620be0b42bf8aab155976dd644595cfab95c/contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800", size = 1316773 }, - { url = "https://files.pythonhosted.org/packages/f1/17/c52d2970784383cafb0bd918b6fb036d98d96bbf0bc1befb5d1e31a07a70/contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5", size = 171353 }, - { url = "https://files.pythonhosted.org/packages/53/23/db9f69676308e094d3c45f20cc52e12d10d64f027541c995d89c11ad5c75/contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843", size = 211817 }, - { url = "https://files.pythonhosted.org/packages/d1/09/60e486dc2b64c94ed33e58dcfb6f808192c03dfc5574c016218b9b7680dc/contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c", size = 261886 }, - { url = "https://files.pythonhosted.org/packages/19/20/b57f9f7174fcd439a7789fb47d764974ab646fa34d1790551de386457a8e/contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779", size = 311008 }, - { url = "https://files.pythonhosted.org/packages/74/fc/5040d42623a1845d4f17a418e590fd7a79ae8cb2bad2b2f83de63c3bdca4/contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4", size = 215690 }, - { url = "https://files.pythonhosted.org/packages/2b/24/dc3dcd77ac7460ab7e9d2b01a618cb31406902e50e605a8d6091f0a8f7cc/contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0", size = 261894 }, - { url = "https://files.pythonhosted.org/packages/b1/db/531642a01cfec39d1682e46b5457b07cf805e3c3c584ec27e2a6223f8f6c/contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102", size = 311099 }, - { url = "https://files.pythonhosted.org/packages/38/1e/94bda024d629f254143a134eead69e21c836429a2a6ce82209a00ddcb79a/contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb", size = 215838 }, -] - -[[package]] -name = "cryptography" -version = "44.0.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/09/8cc67f9b84730ad330b3b72cf867150744bf07ff113cda21a15a1c6d2c7c/cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", size = 6541833 }, - { url = "https://files.pythonhosted.org/packages/7e/5b/3759e30a103144e29632e7cb72aec28cedc79e514b2ea8896bb17163c19b/cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", size = 3922710 }, - { url = "https://files.pythonhosted.org/packages/5f/58/3b14bf39f1a0cfd679e753e8647ada56cddbf5acebffe7db90e184c76168/cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", size = 4137546 }, - { url = "https://files.pythonhosted.org/packages/98/65/13d9e76ca19b0ba5603d71ac8424b5694415b348e719db277b5edc985ff5/cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", size = 3915420 }, - { url = "https://files.pythonhosted.org/packages/b1/07/40fe09ce96b91fc9276a9ad272832ead0fddedcba87f1190372af8e3039c/cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", size = 4154498 }, - { url = "https://files.pythonhosted.org/packages/75/ea/af65619c800ec0a7e4034207aec543acdf248d9bffba0533342d1bd435e1/cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", size = 3932569 }, - { url = "https://files.pythonhosted.org/packages/4e/d5/9cc182bf24c86f542129565976c21301d4ac397e74bf5a16e48241aab8a6/cryptography-44.0.0-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:60eb32934076fa07e4316b7b2742fa52cbb190b42c2df2863dbc4230a0a9b385", size = 4164756 }, - { url = "https://files.pythonhosted.org/packages/c7/af/d1deb0c04d59612e3d5e54203159e284d3e7a6921e565bb0eeb6269bdd8a/cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", size = 4016721 }, - { url = "https://files.pythonhosted.org/packages/bd/69/7ca326c55698d0688db867795134bdfac87136b80ef373aaa42b225d6dd5/cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", size = 4240915 }, - { url = "https://files.pythonhosted.org/packages/ef/d4/cae11bf68c0f981e0413906c6dd03ae7fa864347ed5fac40021df1ef467c/cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", size = 2757925 }, - { url = "https://files.pythonhosted.org/packages/64/b1/50d7739254d2002acae64eed4fc43b24ac0cc44bf0a0d388d1ca06ec5bb1/cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", size = 3202055 }, - { url = "https://files.pythonhosted.org/packages/11/18/61e52a3d28fc1514a43b0ac291177acd1b4de00e9301aaf7ef867076ff8a/cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", size = 6542801 }, - { url = "https://files.pythonhosted.org/packages/1a/07/5f165b6c65696ef75601b781a280fc3b33f1e0cd6aa5a92d9fb96c410e97/cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", size = 3922613 }, - { url = "https://files.pythonhosted.org/packages/28/34/6b3ac1d80fc174812486561cf25194338151780f27e438526f9c64e16869/cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", size = 4137925 }, - { url = "https://files.pythonhosted.org/packages/d0/c7/c656eb08fd22255d21bc3129625ed9cd5ee305f33752ef2278711b3fa98b/cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", size = 3915417 }, - { url = "https://files.pythonhosted.org/packages/ef/82/72403624f197af0db6bac4e58153bc9ac0e6020e57234115db9596eee85d/cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", size = 4155160 }, - { url = "https://files.pythonhosted.org/packages/a2/cd/2f3c440913d4329ade49b146d74f2e9766422e1732613f57097fea61f344/cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", size = 3932331 }, - { url = "https://files.pythonhosted.org/packages/31/d9/90409720277f88eb3ab72f9a32bfa54acdd97e94225df699e7713e850bd4/cryptography-44.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9abcc2e083cbe8dde89124a47e5e53ec38751f0d7dfd36801008f316a127d7ba", size = 4165207 }, - { url = "https://files.pythonhosted.org/packages/7f/df/8be88797f0a1cca6e255189a57bb49237402b1880d6e8721690c5603ac23/cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", size = 4017372 }, - { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 }, - { url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 }, - { url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 }, - { url = "https://files.pythonhosted.org/packages/77/d4/fea74422326388bbac0c37b7489a0fcb1681a698c3b875959430ba550daa/cryptography-44.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37d76e6863da3774cd9db5b409a9ecfd2c71c981c38788d3fcfaf177f447b731", size = 3338857 }, - { url = "https://files.pythonhosted.org/packages/1a/aa/ba8a7467c206cb7b62f09b4168da541b5109838627f582843bbbe0235e8e/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f677e1268c4e23420c3acade68fac427fffcb8d19d7df95ed7ad17cdef8404f4", size = 3850615 }, - { url = "https://files.pythonhosted.org/packages/89/fa/b160e10a64cc395d090105be14f399b94e617c879efd401188ce0fea39ee/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f5e7cb1e5e56ca0933b4873c0220a78b773b24d40d186b6738080b73d3d0a756", size = 4081622 }, - { url = "https://files.pythonhosted.org/packages/47/8f/20ff0656bb0cf7af26ec1d01f780c5cfbaa7666736063378c5f48558b515/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:8b3e6eae66cf54701ee7d9c83c30ac0a1e3fa17be486033000f2a73a12ab507c", size = 3867546 }, - { url = "https://files.pythonhosted.org/packages/38/d9/28edf32ee2fcdca587146bcde90102a7319b2f2c690edfa627e46d586050/cryptography-44.0.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:be4ce505894d15d5c5037167ffb7f0ae90b7be6f2a98f9a5c3442395501c32fa", size = 4090937 }, - { url = "https://files.pythonhosted.org/packages/cc/9d/37e5da7519de7b0b070a3fedd4230fe76d50d2a21403e0f2153d70ac4163/cryptography-44.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", size = 3128774 }, -] - -[[package]] -name = "cycler" -version = "0.12.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, -] - -[[package]] -name = "deprecation" -version = "2.1.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "packaging" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, -] - -[[package]] -name = "docstring-parser" -version = "0.16" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/08/12/9c22a58c0b1e29271051222d8906257616da84135af9ed167c9e28f85cb3/docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e", size = 26565 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637", size = 36533 }, -] - -[[package]] -name = "elasticsearch" -version = "7.17.12" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "certifi" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/07/ee/68fdc04a4ef1a5026d6331196109714c8569ee70d072af8a479fa60f33c8/elasticsearch-7.17.12.tar.gz", hash = "sha256:a1f5733ae8cf1dbf0a78593389f2503c87dd97429976099832bf0626cdfaac8b", size = 248018 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/9b/3dbb82aa27b4cbafd2600dcd74c88c4c710cfdacc3249d9c581916cfe359/elasticsearch-7.17.12-py2.py3-none-any.whl", hash = "sha256:468fd5eef703c0d9238e29bcaf3a6fe4d6b092f917959fbf41f48f8fea3df2f8", size = 385970 }, -] - -[[package]] -name = "elasticsearch-dsl" -version = "7.4.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "elasticsearch" }, - { name = "python-dateutil" }, - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ea/a1/86b304895d346eb5d4c51584f7d3f02ba91131efbe2545e867b62275976b/elasticsearch-dsl-7.4.0.tar.gz", hash = "sha256:c4a7b93882918a413b63bed54018a1685d7410ffd8facbc860ee7fd57f214a6d", size = 56549 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/1e/c59c873cc63643b277e80efec0c5a9714798e4716ca43e97fba35b94e811/elasticsearch_dsl-7.4.0-py2.py3-none-any.whl", hash = "sha256:046ea10820b94c075081b528b4526c5bc776bda4226d702f269a5f203232064b", size = 63701 }, -] - -[[package]] -name = "et-xmlfile" -version = "2.0.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, -] - -[[package]] -name = "exceptiongroup" -version = "1.2.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 }, -] - -[[package]] -name = "fairmat-readers-xrd" -version = "0.0.7" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "numpy" }, - { name = "pint" }, - { name = "xmltodict" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/13/e3/ed8e3e752df895429a1082c4b27a303c8efe2caabe5c74b58b6c216a1587/fairmat_readers_xrd-0.0.7.tar.gz", hash = "sha256:046249b27a52dd4d81a798040bedb37fc20697bfb82e467cafb8abf1e2922f88", size = 6856326 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/72/b6/f178c199628cfb55799401d5e98f63040ba12f79521eecddb177956ea1ce/fairmat_readers_xrd-0.0.7-py3-none-any.whl", hash = "sha256:d33699a9a086cf34341d057ac224835940cb40d32a65495d6f26f05b79b51428", size = 22308 }, -] - -[[package]] -name = "fonttools" -version = "4.55.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/4e/053fe1b5c0ce346c0a9d0557492c654362bafb14f026eae0d3ee98009152/fonttools-4.55.0.tar.gz", hash = "sha256:7636acc6ab733572d5e7eec922b254ead611f1cdad17be3f0be7418e8bfaca71", size = 3490431 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/8c/57600ebff0b2119b725bc11eeea32b17b0220f3fae71b5fff082a1891270/fonttools-4.55.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:51c029d4c0608a21a3d3d169dfc3fb776fde38f00b35ca11fdab63ba10a16f61", size = 2770301 }, - { url = "https://files.pythonhosted.org/packages/02/94/dff7e57a751918b133a303418202b4f43e3dc3c887e2a648089e0463b1a7/fonttools-4.55.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bca35b4e411362feab28e576ea10f11268b1aeed883b9f22ed05675b1e06ac69", size = 2295806 }, - { url = "https://files.pythonhosted.org/packages/09/31/ff18d79d449510850fe4a96c0ba50ee6d0b9b815a6b5a2489d809e9a8db5/fonttools-4.55.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ce4ba6981e10f7e0ccff6348e9775ce25ffadbee70c9fd1a3737e3e9f5fa74f", size = 4577709 }, - { url = "https://files.pythonhosted.org/packages/c4/03/8136887d1b0b7a9831c7e8e2598c0e5851e31cc2231295769350349a236b/fonttools-4.55.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31d00f9852a6051dac23294a4cf2df80ced85d1d173a61ba90a3d8f5abc63c60", size = 4633411 }, - { url = "https://files.pythonhosted.org/packages/a7/37/86ac06a7505e57de2daaf0a1cc885b7767c74d376ef2cf82933e8ef79399/fonttools-4.55.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e198e494ca6e11f254bac37a680473a311a88cd40e58f9cc4dc4911dfb686ec6", size = 4572887 }, - { url = "https://files.pythonhosted.org/packages/0d/85/1e429359d1842a104b638433587ff62d9dc8339a8c467787087962502a53/fonttools-4.55.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7208856f61770895e79732e1dcbe49d77bd5783adf73ae35f87fcc267df9db81", size = 4745036 }, - { url = "https://files.pythonhosted.org/packages/81/65/763ac1fe2a3e52220f7a7fd2a5de0c784045e773aa9d299450019ac66f9e/fonttools-4.55.0-cp310-cp310-win32.whl", hash = "sha256:e7e6a352ff9e46e8ef8a3b1fe2c4478f8a553e1b5a479f2e899f9dc5f2055880", size = 2170126 }, - { url = "https://files.pythonhosted.org/packages/3e/67/93939482715e629c4bd6fd1f3d154c1bf45b81ee383f50e44d31fa542f83/fonttools-4.55.0-cp310-cp310-win_amd64.whl", hash = "sha256:636caaeefe586d7c84b5ee0734c1a5ab2dae619dc21c5cf336f304ddb8f6001b", size = 2213882 }, - { url = "https://files.pythonhosted.org/packages/17/50/75461e050ded02b9eaa8097df52c2a8752cf4c24db8b44b150755b76c8f1/fonttools-4.55.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fa34aa175c91477485c44ddfbb51827d470011e558dfd5c7309eb31bef19ec51", size = 2771444 }, - { url = "https://files.pythonhosted.org/packages/de/5e/98130db3770e8d12f70aa61f2555c32284d4e9c592862469d32b7ee48626/fonttools-4.55.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:37dbb3fdc2ef7302d3199fb12468481cbebaee849e4b04bc55b77c24e3c49189", size = 2296439 }, - { url = "https://files.pythonhosted.org/packages/17/35/36fe271296fe7624811f5261a0662155e075b43b79ffacea85a03f36593d/fonttools-4.55.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5263d8e7ef3c0ae87fbce7f3ec2f546dc898d44a337e95695af2cd5ea21a967", size = 4883141 }, - { url = "https://files.pythonhosted.org/packages/47/2b/9bf7527260d265281dd812951aa22f3d1c331bcc91e86e7038dc6b9737cb/fonttools-4.55.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f307f6b5bf9e86891213b293e538d292cd1677e06d9faaa4bf9c086ad5f132f6", size = 4931050 }, - { url = "https://files.pythonhosted.org/packages/0b/7b/7324d3aa8424c71b63ba2e76eb4a46d6947e23065996e755c1682e666f42/fonttools-4.55.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f0a4b52238e7b54f998d6a56b46a2c56b59c74d4f8a6747fb9d4042190f37cd3", size = 4894154 }, - { url = "https://files.pythonhosted.org/packages/2c/53/a54926be69e43d277877106a6cbfab467cb02f9c756258c7c9932e8eb382/fonttools-4.55.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3e569711464f777a5d4ef522e781dc33f8095ab5efd7548958b36079a9f2f88c", size = 5064715 }, - { url = "https://files.pythonhosted.org/packages/0c/f7/9602868af9a2dfc4659637a752da8691655e81a2d6138231dcaa1efe8840/fonttools-4.55.0-cp311-cp311-win32.whl", hash = "sha256:2b3ab90ec0f7b76c983950ac601b58949f47aca14c3f21eed858b38d7ec42b05", size = 2169536 }, - { url = "https://files.pythonhosted.org/packages/30/57/9e2ddd16ad84ab26616ae4346b3b15e9a50669ca1b442cbe760af073807c/fonttools-4.55.0-cp311-cp311-win_amd64.whl", hash = "sha256:aa046f6a63bb2ad521004b2769095d4c9480c02c1efa7d7796b37826508980b6", size = 2215265 }, - { url = "https://files.pythonhosted.org/packages/ec/79/38209f8f6235021b6209147ec7b2f748afde65c59c6274ac96fef3912094/fonttools-4.55.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:838d2d8870f84fc785528a692e724f2379d5abd3fc9dad4d32f91cf99b41e4a7", size = 2765205 }, - { url = "https://files.pythonhosted.org/packages/e3/07/434a21eab80524613c9753db2ff21d6bc3cf264412d8833a85022fd39088/fonttools-4.55.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f46b863d74bab7bb0d395f3b68d3f52a03444964e67ce5c43ce43a75efce9246", size = 2293908 }, - { url = "https://files.pythonhosted.org/packages/c8/63/aa3274d9be36aaaef8c087e413cbc1dd682ff94776a82c111bad88482947/fonttools-4.55.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33b52a9cfe4e658e21b1f669f7309b4067910321757fec53802ca8f6eae96a5a", size = 4795901 }, - { url = "https://files.pythonhosted.org/packages/fc/0b/dbe13f2c8d745ffdf5c2bc25391263927d4ec2b927e44d5d5f70cd372873/fonttools-4.55.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:732a9a63d6ea4a81b1b25a1f2e5e143761b40c2e1b79bb2b68e4893f45139a40", size = 4879252 }, - { url = "https://files.pythonhosted.org/packages/46/85/eefb400ec66e9e7c159d13c72aba473d9c2a0c556d812b0916418aa9019e/fonttools-4.55.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7dd91ac3fcb4c491bb4763b820bcab6c41c784111c24172616f02f4bc227c17d", size = 4773177 }, - { url = "https://files.pythonhosted.org/packages/93/75/f06d175df4d7dbad97061c8698210ce4231cce9aa56cc263f3b6b5340540/fonttools-4.55.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1f0e115281a32ff532118aa851ef497a1b7cda617f4621c1cdf81ace3e36fb0c", size = 5032809 }, - { url = "https://files.pythonhosted.org/packages/78/eb/f3520ba63b5e4a034f2bfd34d8ab32eb95a1bf37a1f792ea48461fba08f6/fonttools-4.55.0-cp312-cp312-win32.whl", hash = "sha256:6c99b5205844f48a05cb58d4a8110a44d3038c67ed1d79eb733c4953c628b0f6", size = 2157762 }, - { url = "https://files.pythonhosted.org/packages/aa/d1/5f007861cab890f2a35a19a1d2a2815655ec10b0ea7fd881b1d3aaab0076/fonttools-4.55.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8c8c76037d05652510ae45be1cd8fb5dd2fd9afec92a25374ac82255993d57c", size = 2203746 }, - { url = "https://files.pythonhosted.org/packages/c3/87/a669ac26c6077e37ffb06abf29c5571789eefe518d06c52df392181ee694/fonttools-4.55.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8118dc571921dc9e4b288d9cb423ceaf886d195a2e5329cc427df82bba872cd9", size = 2752519 }, - { url = "https://files.pythonhosted.org/packages/0c/e9/4822ad238fe215133c7df20f1cdb1a58cfb634a31523e77ff0fb2033970a/fonttools-4.55.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01124f2ca6c29fad4132d930da69158d3f49b2350e4a779e1efbe0e82bd63f6c", size = 2286819 }, - { url = "https://files.pythonhosted.org/packages/3e/a4/d7941c3897129e60fe68d20e4819fda4d0c4858d77badae0e80ca6440b36/fonttools-4.55.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ffd58d2691f11f7c8438796e9f21c374828805d33e83ff4b76e4635633674c", size = 4770382 }, - { url = "https://files.pythonhosted.org/packages/31/cf/c51ea1348f9fba9c627439afad9dee0090040809ab431f4422b5bfdda34c/fonttools-4.55.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5435e5f1eb893c35c2bc2b9cd3c9596b0fcb0a59e7a14121562986dd4c47b8dd", size = 4858336 }, - { url = "https://files.pythonhosted.org/packages/73/be/36c1fe0e5c9a96b068ddd7e82001243bbe7fe12549c8d14e1bd025bf40c9/fonttools-4.55.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d12081729280c39d001edd0f4f06d696014c26e6e9a0a55488fabc37c28945e4", size = 4756072 }, - { url = "https://files.pythonhosted.org/packages/5c/18/6dd381c29f215a017f79aa9fea0722424a0046b47991c4390a78ff87ce0c/fonttools-4.55.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7ad1f1b98ab6cb927ab924a38a8649f1ffd7525c75fe5b594f5dab17af70e18", size = 5008668 }, - { url = "https://files.pythonhosted.org/packages/b8/95/316f20092b389b927dba1d1dccd3f541853f96e707e210f1b9f4e7bacdd5/fonttools-4.55.0-cp313-cp313-win32.whl", hash = "sha256:abe62987c37630dca69a104266277216de1023cf570c1643bb3a19a9509e7a1b", size = 2155841 }, - { url = "https://files.pythonhosted.org/packages/35/ca/b4638aa3e446184892e2f9cc8ef44bb506f47fea04580df7fb84f5a4363d/fonttools-4.55.0-cp313-cp313-win_amd64.whl", hash = "sha256:2863555ba90b573e4201feaf87a7e71ca3b97c05aa4d63548a4b69ea16c9e998", size = 2200587 }, - { url = "https://files.pythonhosted.org/packages/ca/83/12c26ce25df9de2d247c31f27cddd1acd08078ad18631032db6ce946f01e/fonttools-4.55.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f901cef813f7c318b77d1c5c14cf7403bae5cb977cede023e22ba4316f0a8f6", size = 2773168 }, - { url = "https://files.pythonhosted.org/packages/db/19/03e7de9889c668e19c34bfb6c261252294b6ddeb06cd5f9864bf01f162a1/fonttools-4.55.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c9679fc0dd7e8a5351d321d8d29a498255e69387590a86b596a45659a39eb0d", size = 2297131 }, - { url = "https://files.pythonhosted.org/packages/e3/9d/5f981c69f99d07e59a7f2f58efa91e87ffc3bbd548a2979704a3382f53df/fonttools-4.55.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2820a8b632f3307ebb0bf57948511c2208e34a4939cf978333bc0a3f11f838", size = 4582322 }, - { url = "https://files.pythonhosted.org/packages/1d/3e/0841e7bf38ad317c960992dd03bac041899a1c21396013e6ddcfd2bc48c5/fonttools-4.55.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23bbbb49bec613a32ed1b43df0f2b172313cee690c2509f1af8fdedcf0a17438", size = 4640834 }, - { url = "https://files.pythonhosted.org/packages/3a/0f/39e95369fae73e06b5110fdc245f71c82f2d6870a2cef96440045a2a3b23/fonttools-4.55.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a656652e1f5d55b9728937a7e7d509b73d23109cddd4e89ee4f49bde03b736c6", size = 4575466 }, - { url = "https://files.pythonhosted.org/packages/5e/e6/fed351dec03c335eeaf3d276c1b3995c33c59bde0ed7911bc8d55661a41b/fonttools-4.55.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f50a1f455902208486fbca47ce33054208a4e437b38da49d6721ce2fef732fcf", size = 4748309 }, - { url = "https://files.pythonhosted.org/packages/c2/8c/6295c8b395f26b7c6be42ac55308b704b4c0709a2e7770c54d64810150c1/fonttools-4.55.0-cp39-cp39-win32.whl", hash = "sha256:161d1ac54c73d82a3cded44202d0218ab007fde8cf194a23d3dd83f7177a2f03", size = 2170761 }, - { url = "https://files.pythonhosted.org/packages/9b/fa/0bd359e011f71afb11f33d8f7adc9cd81213a42c8e62d05ba75befd228ad/fonttools-4.55.0-cp39-cp39-win_amd64.whl", hash = "sha256:ca7fd6987c68414fece41c96836e945e1f320cda56fc96ffdc16e54a44ec57a2", size = 2214479 }, - { url = "https://files.pythonhosted.org/packages/b4/4a/786589606d4989cb34d8bc766cd687d955aaf3039c367fe7104bcf82dc98/fonttools-4.55.0-py3-none-any.whl", hash = "sha256:12db5888cd4dd3fcc9f0ee60c6edd3c7e1fd44b7dd0f31381ea03df68f8a153f", size = 1100249 }, -] - -[[package]] -name = "h11" -version = "0.14.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", size = 100418 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, -] - -[[package]] -name = "h5py" -version = "3.12.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cc/0c/5c2b0a88158682aeafb10c1c2b735df5bc31f165bfe192f2ee9f2a23b5f1/h5py-3.12.1.tar.gz", hash = "sha256:326d70b53d31baa61f00b8aa5f95c2fcb9621a3ee8365d770c551a13dbbcbfdf", size = 411457 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/7d/b21045fbb004ad8bb6fb3be4e6ca903841722706f7130b9bba31ef2f88e3/h5py-3.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f0f1a382cbf494679c07b4371f90c70391dedb027d517ac94fa2c05299dacda", size = 3402133 }, - { url = "https://files.pythonhosted.org/packages/29/a7/3c2a33fba1da64a0846744726fd067a92fb8abb887875a0dd8e3bac8b45d/h5py-3.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb65f619dfbdd15e662423e8d257780f9a66677eae5b4b3fc9dca70b5fd2d2a3", size = 2866436 }, - { url = "https://files.pythonhosted.org/packages/1e/d0/4bf67c3937a2437c20844165766ddd1a1817ae6b9544c3743050d8e0f403/h5py-3.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b15d8dbd912c97541312c0e07438864d27dbca857c5ad634de68110c6beb1c2", size = 5168596 }, - { url = "https://files.pythonhosted.org/packages/85/bc/e76f4b2096e0859225f5441d1b7f5e2041fffa19fc2c16756c67078417aa/h5py-3.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59685fe40d8c1fbbee088c88cd4da415a2f8bee5c270337dc5a1c4aa634e3307", size = 5341537 }, - { url = "https://files.pythonhosted.org/packages/99/bd/fb8ed45308bb97e04c02bd7aed324ba11e6a4bf9ed73967ca2a168e9cf92/h5py-3.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:577d618d6b6dea3da07d13cc903ef9634cde5596b13e832476dd861aaf651f3e", size = 2990575 }, - { url = "https://files.pythonhosted.org/packages/33/61/c463dc5fc02fbe019566d067a9d18746cd3c664f29c9b8b3c3f9ed025365/h5py-3.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ccd9006d92232727d23f784795191bfd02294a4f2ba68708825cb1da39511a93", size = 3410828 }, - { url = "https://files.pythonhosted.org/packages/95/9d/eb91a9076aa998bb2179d6b1788055ea09cdf9d6619cd967f1d3321ed056/h5py-3.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad8a76557880aed5234cfe7279805f4ab5ce16b17954606cca90d578d3e713ef", size = 2872586 }, - { url = "https://files.pythonhosted.org/packages/b0/62/e2b1f9723ff713e3bd3c16dfeceec7017eadc21ef063d8b7080c0fcdc58a/h5py-3.12.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1473348139b885393125126258ae2d70753ef7e9cec8e7848434f385ae72069e", size = 5273038 }, - { url = "https://files.pythonhosted.org/packages/e1/89/118c3255d6ff2db33b062ec996a762d99ae50c21f54a8a6047ae8eda1b9f/h5py-3.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:018a4597f35092ae3fb28ee851fdc756d2b88c96336b8480e124ce1ac6fb9166", size = 5452688 }, - { url = "https://files.pythonhosted.org/packages/1d/4d/cbd3014eb78d1e449b29beba1f3293a841aa8086c6f7968c383c2c7ff076/h5py-3.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:3fdf95092d60e8130ba6ae0ef7a9bd4ade8edbe3569c13ebbaf39baefffc5ba4", size = 3006095 }, - { url = "https://files.pythonhosted.org/packages/d4/e1/ea9bfe18a3075cdc873f0588ff26ce394726047653557876d7101bf0c74e/h5py-3.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06a903a4e4e9e3ebbc8b548959c3c2552ca2d70dac14fcfa650d9261c66939ed", size = 3372538 }, - { url = "https://files.pythonhosted.org/packages/0d/74/1009b663387c025e8fa5f3ee3cf3cd0d99b1ad5c72eeb70e75366b1ce878/h5py-3.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b3b8f3b48717e46c6a790e3128d39c61ab595ae0a7237f06dfad6a3b51d5351", size = 2868104 }, - { url = "https://files.pythonhosted.org/packages/af/52/c604adc06280c15a29037d4aa79a24fe54d8d0b51085e81ed24b2fa995f7/h5py-3.12.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:050a4f2c9126054515169c49cb900949814987f0c7ae74c341b0c9f9b5056834", size = 5194606 }, - { url = "https://files.pythonhosted.org/packages/fa/63/eeaacff417b393491beebabb8a3dc5342950409eb6d7b39d437289abdbae/h5py-3.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c4b41d1019322a5afc5082864dfd6359f8935ecd37c11ac0029be78c5d112c9", size = 5413256 }, - { url = "https://files.pythonhosted.org/packages/86/f7/bb465dcb92ca3521a15cbe1031f6d18234dbf1fb52a6796a00bfaa846ebf/h5py-3.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4d51919110a030913201422fb07987db4338eba5ec8c5a15d6fab8e03d443fc", size = 2993055 }, - { url = "https://files.pythonhosted.org/packages/23/1c/ecdd0efab52c24f2a9bf2324289828b860e8dd1e3c5ada3cf0889e14fdc1/h5py-3.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:513171e90ed92236fc2ca363ce7a2fc6f2827375efcbb0cc7fbdd7fe11fecafc", size = 3346239 }, - { url = "https://files.pythonhosted.org/packages/93/cd/5b6f574bf3e318bbe305bc93ba45181676550eb44ba35e006d2e98004eaa/h5py-3.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:59400f88343b79655a242068a9c900001a34b63e3afb040bd7cdf717e440f653", size = 2843416 }, - { url = "https://files.pythonhosted.org/packages/8a/4f/b74332f313bfbe94ba03fff784219b9db385e6139708e55b11490149f90a/h5py-3.12.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e465aee0ec353949f0f46bf6c6f9790a2006af896cee7c178a8c3e5090aa32", size = 5154390 }, - { url = "https://files.pythonhosted.org/packages/1a/57/93ea9e10a6457ea8d3b867207deb29a527e966a08a84c57ffd954e32152a/h5py-3.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba51c0c5e029bb5420a343586ff79d56e7455d496d18a30309616fdbeed1068f", size = 5378244 }, - { url = "https://files.pythonhosted.org/packages/50/51/0bbf3663062b2eeee78aa51da71e065f8a0a6e3cb950cc7020b4444999e6/h5py-3.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:52ab036c6c97055b85b2a242cb540ff9590bacfda0c03dd0cf0661b311f522f8", size = 2979760 }, - { url = "https://files.pythonhosted.org/packages/f4/dc/28d7a5fd0d1c80df3f35c0db7080d51a10b6fa20efe4c3ba8e776fc53728/h5py-3.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2b8dd64f127d8b324f5d2cd1c0fd6f68af69084e9e47d27efeb9e28e685af3e", size = 3413578 }, - { url = "https://files.pythonhosted.org/packages/a5/3f/d273b41bc1b67d2f5a7d707d24d9e04c7e3809a83ca8d9e03d6abb673637/h5py-3.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4532c7e97fbef3d029735db8b6f5bf01222d9ece41e309b20d63cfaae2fb5c4d", size = 2877611 }, - { url = "https://files.pythonhosted.org/packages/7b/f9/e597b5fef05f161c67a18e8c61bf105209fd242f2612b0ad1aff7ecb0b9c/h5py-3.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdf6d7936fa824acfa27305fe2d9f39968e539d831c5bae0e0d83ed521ad1ac", size = 5190324 }, - { url = "https://files.pythonhosted.org/packages/8e/1d/631c200e6d5d067035c58028f305cf7f29c494ddfb9b9484a907a367c8bd/h5py-3.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84342bffd1f82d4f036433e7039e241a243531a1d3acd7341b35ae58cdab05bf", size = 5361780 }, - { url = "https://files.pythonhosted.org/packages/b2/ab/4db20b08a70c3cd88aab63f46c62a97eaf978bd000eb10e303d3b3ceb38e/h5py-3.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:62be1fc0ef195891949b2c627ec06bc8e837ff62d5b911b6e42e38e0f20a897d", size = 3000291 }, -] - -[[package]] -name = "hjson" -version = "3.1.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/e5/0b56d723a76ca67abadbf7fb71609fb0ea7e6926e94fcca6c65a85b36a0e/hjson-3.1.0.tar.gz", hash = "sha256:55af475a27cf83a7969c808399d7bccdec8fb836a07ddbd574587593b9cdcf75", size = 40541 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/7f/13cd798d180af4bf4c0ceddeefba2b864a63c71645abc0308b768d67bb81/hjson-3.1.0-py3-none-any.whl", hash = "sha256:65713cdcf13214fb554eb8b4ef803419733f4f5e551047c9b711098ab7186b89", size = 54018 }, -] - -[[package]] -name = "httpcore" -version = "1.0.7" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6a/41/d7d0a89eb493922c37d343b607bc1b5da7f5be7e383740b4753ad8943e90/httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c", size = 85196 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/f5/72347bc88306acb359581ac4d52f23c0ef445b57157adedb9aee0cd689d2/httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd", size = 78551 }, -] - -[[package]] -name = "httpx" -version = "0.27.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, - { name = "sniffio" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/78/82/08f8c936781f67d9e6b9eeb8a0c8b4e406136ea4c3d1f89a5db71d42e0e6/httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2", size = 144189 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0", size = 76395 }, -] - -[[package]] -name = "idna" -version = "3.10" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, -] - -[[package]] -name = "importlib-metadata" -version = "7.1.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "zipp" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a0/fc/c4e6078d21fc4fa56300a241b87eae76766aa380a23fc450fc85bb7bf547/importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2", size = 52120 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/0a/679461c511447ffaf176567d5c496d1de27cbe34a87df6677d7171b2fbd4/importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", size = 24409 }, -] - -[[package]] -name = "importlib-resources" -version = "6.4.5" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "zipp", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/98/be/f3e8c6081b684f176b761e6a2fef02a0be939740ed6f54109a2951d806f3/importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065", size = 43372 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717", size = 36115 }, -] - -[[package]] -name = "iniconfig" -version = "2.0.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 }, -] - -[[package]] -name = "jmespath" -version = "1.0.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256 }, -] - -[[package]] -name = "joblib" -version = "1.4.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 }, -] - -[[package]] -name = "jwcrypto" -version = "1.5.6" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "cryptography" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e1/db/870e5d5fb311b0bcf049630b5ba3abca2d339fd5e13ba175b4c13b456d08/jwcrypto-1.5.6.tar.gz", hash = "sha256:771a87762a0c081ae6166958a954f80848820b2ab066937dc8b8379d65b1b039", size = 87168 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/58/4a1880ea64032185e9ae9f63940c9327c6952d5584ea544a8f66972f2fda/jwcrypto-1.5.6-py3-none-any.whl", hash = "sha256:150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789", size = 92520 }, -] - -[[package]] -name = "kaleido" -version = "0.2.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f7/0ccaa596ec341963adbb4f839774c36d5659e75a0812d946732b927d480e/kaleido-0.2.1-py2.py3-none-macosx_10_11_x86_64.whl", hash = "sha256:ca6f73e7ff00aaebf2843f73f1d3bacde1930ef5041093fe76b83a15785049a7", size = 85153681 }, - { url = "https://files.pythonhosted.org/packages/45/8e/4297556be5a07b713bb42dde0f748354de9a6918dee251c0e6bdcda341e7/kaleido-0.2.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:bb9a5d1f710357d5d432ee240ef6658a6d124c3e610935817b4b42da9c787c05", size = 85808197 }, - { url = "https://files.pythonhosted.org/packages/ae/b3/a0f0f4faac229b0011d8c4a7ee6da7c2dca0b6fd08039c95920846f23ca4/kaleido-0.2.1-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:aa21cf1bf1c78f8fa50a9f7d45e1003c387bd3d6fe0a767cfbbf344b95bdc3a8", size = 79902476 }, - { url = "https://files.pythonhosted.org/packages/a1/2b/680662678a57afab1685f0c431c2aba7783ce4344f06ec162074d485d469/kaleido-0.2.1-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:845819844c8082c9469d9c17e42621fbf85c2b237ef8a86ec8a8527f98b6512a", size = 83711746 }, - { url = "https://files.pythonhosted.org/packages/88/89/4b6f8bb3f9ab036fd4ad1cb2d628ab5c81db32ac9aa0641d7b180073ba43/kaleido-0.2.1-py2.py3-none-win32.whl", hash = "sha256:ecc72635860be616c6b7161807a65c0dbd9b90c6437ac96965831e2e24066552", size = 62312480 }, - { url = "https://files.pythonhosted.org/packages/f7/9a/0408b02a4bcb3cf8b338a2b074ac7d1b2099e2b092b42473def22f7b625f/kaleido-0.2.1-py2.py3-none-win_amd64.whl", hash = "sha256:4670985f28913c2d063c5734d125ecc28e40810141bdb0a46f15b76c1d45f23c", size = 65945521 }, -] - -[[package]] -name = "kiwisolver" -version = "1.4.7" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/97/14/fc943dd65268a96347472b4fbe5dcc2f6f55034516f80576cd0dd3a8930f/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6", size = 122440 }, - { url = "https://files.pythonhosted.org/packages/1e/46/e68fed66236b69dd02fcdb506218c05ac0e39745d696d22709498896875d/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17", size = 65758 }, - { url = "https://files.pythonhosted.org/packages/ef/fa/65de49c85838681fc9cb05de2a68067a683717321e01ddafb5b8024286f0/kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9", size = 64311 }, - { url = "https://files.pythonhosted.org/packages/42/9c/cc8d90f6ef550f65443bad5872ffa68f3dee36de4974768628bea7c14979/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", size = 1637109 }, - { url = "https://files.pythonhosted.org/packages/55/91/0a57ce324caf2ff5403edab71c508dd8f648094b18cfbb4c8cc0fde4a6ac/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", size = 1617814 }, - { url = "https://files.pythonhosted.org/packages/12/5d/c36140313f2510e20207708adf36ae4919416d697ee0236b0ddfb6fd1050/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", size = 1400881 }, - { url = "https://files.pythonhosted.org/packages/56/d0/786e524f9ed648324a466ca8df86298780ef2b29c25313d9a4f16992d3cf/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", size = 1512972 }, - { url = "https://files.pythonhosted.org/packages/67/5a/77851f2f201e6141d63c10a0708e996a1363efaf9e1609ad0441b343763b/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", size = 1444787 }, - { url = "https://files.pythonhosted.org/packages/06/5f/1f5eaab84355885e224a6fc8d73089e8713dc7e91c121f00b9a1c58a2195/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", size = 2199212 }, - { url = "https://files.pythonhosted.org/packages/b5/28/9152a3bfe976a0ae21d445415defc9d1cd8614b2910b7614b30b27a47270/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", size = 2346399 }, - { url = "https://files.pythonhosted.org/packages/26/f6/453d1904c52ac3b400f4d5e240ac5fec25263716723e44be65f4d7149d13/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", size = 2308688 }, - { url = "https://files.pythonhosted.org/packages/5a/9a/d4968499441b9ae187e81745e3277a8b4d7c60840a52dc9d535a7909fac3/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", size = 2445493 }, - { url = "https://files.pythonhosted.org/packages/07/c9/032267192e7828520dacb64dfdb1d74f292765f179e467c1cba97687f17d/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", size = 2262191 }, - { url = "https://files.pythonhosted.org/packages/6c/ad/db0aedb638a58b2951da46ddaeecf204be8b4f5454df020d850c7fa8dca8/kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", size = 46644 }, - { url = "https://files.pythonhosted.org/packages/12/ca/d0f7b7ffbb0be1e7c2258b53554efec1fd652921f10d7d85045aff93ab61/kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", size = 55877 }, - { url = "https://files.pythonhosted.org/packages/97/6c/cfcc128672f47a3e3c0d918ecb67830600078b025bfc32d858f2e2d5c6a4/kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", size = 48347 }, - { url = "https://files.pythonhosted.org/packages/e9/44/77429fa0a58f941d6e1c58da9efe08597d2e86bf2b2cce6626834f49d07b/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54", size = 122442 }, - { url = "https://files.pythonhosted.org/packages/e5/20/8c75caed8f2462d63c7fd65e16c832b8f76cda331ac9e615e914ee80bac9/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95", size = 65762 }, - { url = "https://files.pythonhosted.org/packages/f4/98/fe010f15dc7230f45bc4cf367b012d651367fd203caaa992fd1f5963560e/kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935", size = 64319 }, - { url = "https://files.pythonhosted.org/packages/8b/1b/b5d618f4e58c0675654c1e5051bcf42c776703edb21c02b8c74135541f60/kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", size = 1334260 }, - { url = "https://files.pythonhosted.org/packages/b8/01/946852b13057a162a8c32c4c8d2e9ed79f0bb5d86569a40c0b5fb103e373/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", size = 1426589 }, - { url = "https://files.pythonhosted.org/packages/70/d1/c9f96df26b459e15cf8a965304e6e6f4eb291e0f7a9460b4ad97b047561e/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", size = 1541080 }, - { url = "https://files.pythonhosted.org/packages/d3/73/2686990eb8b02d05f3de759d6a23a4ee7d491e659007dd4c075fede4b5d0/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052", size = 1470049 }, - { url = "https://files.pythonhosted.org/packages/a7/4b/2db7af3ed3af7c35f388d5f53c28e155cd402a55432d800c543dc6deb731/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", size = 1426376 }, - { url = "https://files.pythonhosted.org/packages/05/83/2857317d04ea46dc5d115f0df7e676997bbd968ced8e2bd6f7f19cfc8d7f/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", size = 2222231 }, - { url = "https://files.pythonhosted.org/packages/0d/b5/866f86f5897cd4ab6d25d22e403404766a123f138bd6a02ecb2cdde52c18/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", size = 2368634 }, - { url = "https://files.pythonhosted.org/packages/c1/ee/73de8385403faba55f782a41260210528fe3273d0cddcf6d51648202d6d0/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", size = 2329024 }, - { url = "https://files.pythonhosted.org/packages/a1/e7/cd101d8cd2cdfaa42dc06c433df17c8303d31129c9fdd16c0ea37672af91/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", size = 2468484 }, - { url = "https://files.pythonhosted.org/packages/e1/72/84f09d45a10bc57a40bb58b81b99d8f22b58b2040c912b7eb97ebf625bf2/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", size = 2284078 }, - { url = "https://files.pythonhosted.org/packages/d2/d4/71828f32b956612dc36efd7be1788980cb1e66bfb3706e6dec9acad9b4f9/kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", size = 46645 }, - { url = "https://files.pythonhosted.org/packages/a1/65/d43e9a20aabcf2e798ad1aff6c143ae3a42cf506754bcb6a7ed8259c8425/kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", size = 56022 }, - { url = "https://files.pythonhosted.org/packages/35/b3/9f75a2e06f1b4ca00b2b192bc2b739334127d27f1d0625627ff8479302ba/kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", size = 48536 }, - { url = "https://files.pythonhosted.org/packages/97/9c/0a11c714cf8b6ef91001c8212c4ef207f772dd84540104952c45c1f0a249/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2", size = 121808 }, - { url = "https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a", size = 65531 }, - { url = "https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee", size = 63894 }, - { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296 }, - { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450 }, - { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168 }, - { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308 }, - { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186 }, - { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877 }, - { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204 }, - { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461 }, - { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358 }, - { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119 }, - { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367 }, - { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884 }, - { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528 }, - { url = "https://files.pythonhosted.org/packages/c4/06/7da99b04259b0f18b557a4effd1b9c901a747f7fdd84cf834ccf520cb0b2/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e", size = 121913 }, - { url = "https://files.pythonhosted.org/packages/97/f5/b8a370d1aa593c17882af0a6f6755aaecd643640c0ed72dcfd2eafc388b9/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6", size = 65627 }, - { url = "https://files.pythonhosted.org/packages/2a/fc/6c0374f7503522539e2d4d1b497f5ebad3f8ed07ab51aed2af988dd0fb65/kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750", size = 63888 }, - { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145 }, - { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448 }, - { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750 }, - { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175 }, - { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963 }, - { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220 }, - { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463 }, - { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842 }, - { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635 }, - { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556 }, - { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364 }, - { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887 }, - { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530 }, - { url = "https://files.pythonhosted.org/packages/11/88/37ea0ea64512997b13d69772db8dcdc3bfca5442cda3a5e4bb943652ee3e/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd", size = 122449 }, - { url = "https://files.pythonhosted.org/packages/4e/45/5a5c46078362cb3882dcacad687c503089263c017ca1241e0483857791eb/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583", size = 65757 }, - { url = "https://files.pythonhosted.org/packages/8a/be/a6ae58978772f685d48dd2e84460937761c53c4bbd84e42b0336473d9775/kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417", size = 64312 }, - { url = "https://files.pythonhosted.org/packages/f4/04/18ef6f452d311e1e1eb180c9bf5589187fa1f042db877e6fe443ef10099c/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904", size = 1626966 }, - { url = "https://files.pythonhosted.org/packages/21/b1/40655f6c3fa11ce740e8a964fa8e4c0479c87d6a7944b95af799c7a55dfe/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a", size = 1607044 }, - { url = "https://files.pythonhosted.org/packages/fd/93/af67dbcfb9b3323bbd2c2db1385a7139d8f77630e4a37bb945b57188eb2d/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8", size = 1391879 }, - { url = "https://files.pythonhosted.org/packages/40/6f/d60770ef98e77b365d96061d090c0cd9e23418121c55fff188fa4bdf0b54/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2", size = 1504751 }, - { url = "https://files.pythonhosted.org/packages/fa/3a/5f38667d313e983c432f3fcd86932177519ed8790c724e07d77d1de0188a/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88", size = 1436990 }, - { url = "https://files.pythonhosted.org/packages/cb/3b/1520301a47326e6a6043b502647e42892be33b3f051e9791cc8bb43f1a32/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde", size = 2191122 }, - { url = "https://files.pythonhosted.org/packages/cf/c4/eb52da300c166239a2233f1f9c4a1b767dfab98fae27681bfb7ea4873cb6/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c", size = 2338126 }, - { url = "https://files.pythonhosted.org/packages/1a/cb/42b92fd5eadd708dd9107c089e817945500685f3437ce1fd387efebc6d6e/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2", size = 2298313 }, - { url = "https://files.pythonhosted.org/packages/4f/eb/be25aa791fe5fc75a8b1e0c965e00f942496bc04635c9aae8035f6b76dcd/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb", size = 2437784 }, - { url = "https://files.pythonhosted.org/packages/c5/22/30a66be7f3368d76ff95689e1c2e28d382383952964ab15330a15d8bfd03/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327", size = 2253988 }, - { url = "https://files.pythonhosted.org/packages/35/d3/5f2ecb94b5211c8a04f218a76133cc8d6d153b0f9cd0b45fad79907f0689/kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644", size = 46980 }, - { url = "https://files.pythonhosted.org/packages/ef/17/cd10d020578764ea91740204edc6b3236ed8106228a46f568d716b11feb2/kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4", size = 55847 }, - { url = "https://files.pythonhosted.org/packages/91/84/32232502020bd78d1d12be7afde15811c64a95ed1f606c10456db4e4c3ac/kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f", size = 48494 }, - { url = "https://files.pythonhosted.org/packages/ac/59/741b79775d67ab67ced9bb38552da688c0305c16e7ee24bba7a2be253fb7/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643", size = 59491 }, - { url = "https://files.pythonhosted.org/packages/58/cc/fb239294c29a5656e99e3527f7369b174dd9cc7c3ef2dea7cb3c54a8737b/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706", size = 57648 }, - { url = "https://files.pythonhosted.org/packages/3b/ef/2f009ac1f7aab9f81efb2d837301d255279d618d27b6015780115ac64bdd/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", size = 84257 }, - { url = "https://files.pythonhosted.org/packages/81/e1/c64f50987f85b68b1c52b464bb5bf73e71570c0f7782d626d1eb283ad620/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", size = 80906 }, - { url = "https://files.pythonhosted.org/packages/fd/71/1687c5c0a0be2cee39a5c9c389e546f9c6e215e46b691d00d9f646892083/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", size = 79951 }, - { url = "https://files.pythonhosted.org/packages/ea/8b/d7497df4a1cae9367adf21665dd1f896c2a7aeb8769ad77b662c5e2bcce7/kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", size = 55715 }, - { url = "https://files.pythonhosted.org/packages/d5/df/ce37d9b26f07ab90880923c94d12a6ff4d27447096b4c849bfc4339ccfdf/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39", size = 58666 }, - { url = "https://files.pythonhosted.org/packages/b0/d3/e4b04f43bc629ac8e186b77b2b1a251cdfa5b7610fa189dc0db622672ce6/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e", size = 57088 }, - { url = "https://files.pythonhosted.org/packages/30/1c/752df58e2d339e670a535514d2db4fe8c842ce459776b8080fbe08ebb98e/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608", size = 84321 }, - { url = "https://files.pythonhosted.org/packages/f0/f8/fe6484e847bc6e238ec9f9828089fb2c0bb53f2f5f3a79351fde5b565e4f/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674", size = 80776 }, - { url = "https://files.pythonhosted.org/packages/9b/57/d7163c0379f250ef763aba85330a19feefb5ce6cb541ade853aaba881524/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225", size = 79984 }, - { url = "https://files.pythonhosted.org/packages/8c/95/4a103776c265d13b3d2cd24fb0494d4e04ea435a8ef97e1b2c026d43250b/kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0", size = 55811 }, -] - -[[package]] -name = "latexcodec" -version = "3.0.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/e7/ed339caf3662976949e4fdbfdf4a6db818b8d2aa1cf2b5f73af89e936bba/latexcodec-3.0.0.tar.gz", hash = "sha256:917dc5fe242762cc19d963e6548b42d63a118028cdd3361d62397e3b638b6bc5", size = 31023 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/bf/ea8887e9f31a8f93ca306699d11909c6140151393a4216f0d9f85a004077/latexcodec-3.0.0-py3-none-any.whl", hash = "sha256:6f3477ad5e61a0a99bd31a6a370c34e88733a6bad9c921a3ffcfacada12f41a7", size = 18150 }, -] - -[[package]] -name = "lxml" -version = "5.3.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/6b/20c3a4b24751377aaa6307eb230b66701024012c29dd374999cc92983269/lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f", size = 3679318 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/ce/2789e39eddf2b13fac29878bfa465f0910eb6b0096e29090e5176bc8cf43/lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656", size = 8124570 }, - { url = "https://files.pythonhosted.org/packages/24/a8/f4010166a25d41715527129af2675981a50d3bbf7df09c5d9ab8ca24fbf9/lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d", size = 4413042 }, - { url = "https://files.pythonhosted.org/packages/41/a4/7e45756cecdd7577ddf67a68b69c1db0f5ddbf0c9f65021ee769165ffc5a/lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a", size = 5139213 }, - { url = "https://files.pythonhosted.org/packages/02/e2/ecf845b12323c92748077e1818b64e8b4dba509a4cb12920b3762ebe7552/lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8", size = 4838814 }, - { url = "https://files.pythonhosted.org/packages/12/91/619f9fb72cf75e9ceb8700706f7276f23995f6ad757e6d400fbe35ca4990/lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330", size = 5425084 }, - { url = "https://files.pythonhosted.org/packages/25/3b/162a85a8f0fd2a3032ec3f936636911c6e9523a8e263fffcfd581ce98b54/lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965", size = 4875993 }, - { url = "https://files.pythonhosted.org/packages/43/af/dd3f58cc7d946da6ae42909629a2b1d5dd2d1b583334d4af9396697d6863/lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22", size = 5012462 }, - { url = "https://files.pythonhosted.org/packages/69/c1/5ea46b2d4c98f5bf5c83fffab8a0ad293c9bc74df9ecfbafef10f77f7201/lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b", size = 4815288 }, - { url = "https://files.pythonhosted.org/packages/1d/51/a0acca077ad35da458f4d3f729ef98effd2b90f003440d35fc36323f8ae6/lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7", size = 5472435 }, - { url = "https://files.pythonhosted.org/packages/4d/6b/0989c9368986961a6b0f55b46c80404c4b758417acdb6d87bfc3bd5f4967/lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8", size = 4976354 }, - { url = "https://files.pythonhosted.org/packages/05/9e/87492d03ff604fbf656ed2bf3e2e8d28f5d58ea1f00ff27ac27b06509079/lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32", size = 5029973 }, - { url = "https://files.pythonhosted.org/packages/f9/cc/9ae1baf5472af88e19e2c454b3710c1be9ecafb20eb474eeabcd88a055d2/lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86", size = 4888837 }, - { url = "https://files.pythonhosted.org/packages/d2/10/5594ffaec8c120d75b17e3ad23439b740a51549a9b5fd7484b2179adfe8f/lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5", size = 5530555 }, - { url = "https://files.pythonhosted.org/packages/ea/9b/de17f05377c8833343b629905571fb06cff2028f15a6f58ae2267662e341/lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03", size = 5405314 }, - { url = "https://files.pythonhosted.org/packages/8a/b4/227be0f1f3cca8255925985164c3838b8b36e441ff0cc10c1d3c6bdba031/lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7", size = 5079303 }, - { url = "https://files.pythonhosted.org/packages/5c/ee/19abcebb7fc40319bb71cd6adefa1ad94d09b5660228715854d6cc420713/lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80", size = 3475126 }, - { url = "https://files.pythonhosted.org/packages/a1/35/183d32551447e280032b2331738cd850da435a42f850b71ebeaab42c1313/lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3", size = 3805065 }, - { url = "https://files.pythonhosted.org/packages/5c/a8/449faa2a3cbe6a99f8d38dcd51a3ee8844c17862841a6f769ea7c2a9cd0f/lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b", size = 8141056 }, - { url = "https://files.pythonhosted.org/packages/ac/8a/ae6325e994e2052de92f894363b038351c50ee38749d30cc6b6d96aaf90f/lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18", size = 4425238 }, - { url = "https://files.pythonhosted.org/packages/f8/fb/128dddb7f9086236bce0eeae2bfb316d138b49b159f50bc681d56c1bdd19/lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442", size = 5095197 }, - { url = "https://files.pythonhosted.org/packages/b4/f9/a181a8ef106e41e3086629c8bdb2d21a942f14c84a0e77452c22d6b22091/lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4", size = 4809809 }, - { url = "https://files.pythonhosted.org/packages/25/2f/b20565e808f7f6868aacea48ddcdd7e9e9fb4c799287f21f1a6c7c2e8b71/lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f", size = 5407593 }, - { url = "https://files.pythonhosted.org/packages/23/0e/caac672ec246d3189a16c4d364ed4f7d6bf856c080215382c06764058c08/lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e", size = 4866657 }, - { url = "https://files.pythonhosted.org/packages/67/a4/1f5fbd3f58d4069000522196b0b776a014f3feec1796da03e495cf23532d/lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c", size = 4967017 }, - { url = "https://files.pythonhosted.org/packages/ee/73/623ecea6ca3c530dd0a4ed0d00d9702e0e85cd5624e2d5b93b005fe00abd/lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16", size = 4810730 }, - { url = "https://files.pythonhosted.org/packages/1d/ce/fb84fb8e3c298f3a245ae3ea6221c2426f1bbaa82d10a88787412a498145/lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79", size = 5455154 }, - { url = "https://files.pythonhosted.org/packages/b1/72/4d1ad363748a72c7c0411c28be2b0dc7150d91e823eadad3b91a4514cbea/lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080", size = 4969416 }, - { url = "https://files.pythonhosted.org/packages/42/07/b29571a58a3a80681722ea8ed0ba569211d9bb8531ad49b5cacf6d409185/lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654", size = 5013672 }, - { url = "https://files.pythonhosted.org/packages/b9/93/bde740d5a58cf04cbd38e3dd93ad1e36c2f95553bbf7d57807bc6815d926/lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d", size = 4878644 }, - { url = "https://files.pythonhosted.org/packages/56/b5/645c8c02721d49927c93181de4017164ec0e141413577687c3df8ff0800f/lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763", size = 5511531 }, - { url = "https://files.pythonhosted.org/packages/85/3f/6a99a12d9438316f4fc86ef88c5d4c8fb674247b17f3173ecadd8346b671/lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec", size = 5402065 }, - { url = "https://files.pythonhosted.org/packages/80/8a/df47bff6ad5ac57335bf552babfb2408f9eb680c074ec1ba412a1a6af2c5/lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be", size = 5069775 }, - { url = "https://files.pythonhosted.org/packages/08/ae/e7ad0f0fbe4b6368c5ee1e3ef0c3365098d806d42379c46c1ba2802a52f7/lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9", size = 3474226 }, - { url = "https://files.pythonhosted.org/packages/c3/b5/91c2249bfac02ee514ab135e9304b89d55967be7e53e94a879b74eec7a5c/lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1", size = 3814971 }, - { url = "https://files.pythonhosted.org/packages/eb/6d/d1f1c5e40c64bf62afd7a3f9b34ce18a586a1cccbf71e783cd0a6d8e8971/lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859", size = 8171753 }, - { url = "https://files.pythonhosted.org/packages/bd/83/26b1864921869784355459f374896dcf8b44d4af3b15d7697e9156cb2de9/lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e", size = 4441955 }, - { url = "https://files.pythonhosted.org/packages/e0/d2/e9bff9fb359226c25cda3538f664f54f2804f4b37b0d7c944639e1a51f69/lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f", size = 5050778 }, - { url = "https://files.pythonhosted.org/packages/88/69/6972bfafa8cd3ddc8562b126dd607011e218e17be313a8b1b9cc5a0ee876/lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e", size = 4748628 }, - { url = "https://files.pythonhosted.org/packages/5d/ea/a6523c7c7f6dc755a6eed3d2f6d6646617cad4d3d6d8ce4ed71bfd2362c8/lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179", size = 5322215 }, - { url = "https://files.pythonhosted.org/packages/99/37/396fbd24a70f62b31d988e4500f2068c7f3fd399d2fd45257d13eab51a6f/lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a", size = 4813963 }, - { url = "https://files.pythonhosted.org/packages/09/91/e6136f17459a11ce1757df864b213efbeab7adcb2efa63efb1b846ab6723/lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3", size = 4923353 }, - { url = "https://files.pythonhosted.org/packages/1d/7c/2eeecf87c9a1fca4f84f991067c693e67340f2b7127fc3eca8fa29d75ee3/lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1", size = 4740541 }, - { url = "https://files.pythonhosted.org/packages/3b/ed/4c38ba58defca84f5f0d0ac2480fdcd99fc7ae4b28fc417c93640a6949ae/lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d", size = 5346504 }, - { url = "https://files.pythonhosted.org/packages/a5/22/bbd3995437e5745cb4c2b5d89088d70ab19d4feabf8a27a24cecb9745464/lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c", size = 4898077 }, - { url = "https://files.pythonhosted.org/packages/0a/6e/94537acfb5b8f18235d13186d247bca478fea5e87d224644e0fe907df976/lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99", size = 4946543 }, - { url = "https://files.pythonhosted.org/packages/8d/e8/4b15df533fe8e8d53363b23a41df9be907330e1fa28c7ca36893fad338ee/lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff", size = 4816841 }, - { url = "https://files.pythonhosted.org/packages/1a/e7/03f390ea37d1acda50bc538feb5b2bda6745b25731e4e76ab48fae7106bf/lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a", size = 5417341 }, - { url = "https://files.pythonhosted.org/packages/ea/99/d1133ab4c250da85a883c3b60249d3d3e7c64f24faff494cf0fd23f91e80/lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8", size = 5327539 }, - { url = "https://files.pythonhosted.org/packages/7d/ed/e6276c8d9668028213df01f598f385b05b55a4e1b4662ee12ef05dab35aa/lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d", size = 5012542 }, - { url = "https://files.pythonhosted.org/packages/36/88/684d4e800f5aa28df2a991a6a622783fb73cf0e46235cfa690f9776f032e/lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30", size = 3486454 }, - { url = "https://files.pythonhosted.org/packages/fc/82/ace5a5676051e60355bd8fb945df7b1ba4f4fb8447f2010fb816bfd57724/lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f", size = 3816857 }, - { url = "https://files.pythonhosted.org/packages/94/6a/42141e4d373903bfea6f8e94b2f554d05506dfda522ada5343c651410dc8/lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a", size = 8156284 }, - { url = "https://files.pythonhosted.org/packages/91/5e/fa097f0f7d8b3d113fb7312c6308af702f2667f22644441715be961f2c7e/lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd", size = 4432407 }, - { url = "https://files.pythonhosted.org/packages/2d/a1/b901988aa6d4ff937f2e5cfc114e4ec561901ff00660c3e56713642728da/lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51", size = 5048331 }, - { url = "https://files.pythonhosted.org/packages/30/0f/b2a54f48e52de578b71bbe2a2f8160672a8a5e103df3a78da53907e8c7ed/lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b", size = 4744835 }, - { url = "https://files.pythonhosted.org/packages/82/9d/b000c15538b60934589e83826ecbc437a1586488d7c13f8ee5ff1f79a9b8/lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002", size = 5316649 }, - { url = "https://files.pythonhosted.org/packages/e3/ee/ffbb9eaff5e541922611d2c56b175c45893d1c0b8b11e5a497708a6a3b3b/lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4", size = 4812046 }, - { url = "https://files.pythonhosted.org/packages/15/ff/7ff89d567485c7b943cdac316087f16b2399a8b997007ed352a1248397e5/lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492", size = 4918597 }, - { url = "https://files.pythonhosted.org/packages/c6/a3/535b6ed8c048412ff51268bdf4bf1cf052a37aa7e31d2e6518038a883b29/lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3", size = 4738071 }, - { url = "https://files.pythonhosted.org/packages/7a/8f/cbbfa59cb4d4fd677fe183725a76d8c956495d7a3c7f111ab8f5e13d2e83/lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4", size = 5342213 }, - { url = "https://files.pythonhosted.org/packages/5c/fb/db4c10dd9958d4b52e34d1d1f7c1f434422aeaf6ae2bbaaff2264351d944/lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367", size = 4893749 }, - { url = "https://files.pythonhosted.org/packages/f2/38/bb4581c143957c47740de18a3281a0cab7722390a77cc6e610e8ebf2d736/lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832", size = 4945901 }, - { url = "https://files.pythonhosted.org/packages/fc/d5/18b7de4960c731e98037bd48fa9f8e6e8f2558e6fbca4303d9b14d21ef3b/lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff", size = 4815447 }, - { url = "https://files.pythonhosted.org/packages/97/a8/cd51ceaad6eb849246559a8ef60ae55065a3df550fc5fcd27014361c1bab/lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd", size = 5411186 }, - { url = "https://files.pythonhosted.org/packages/89/c3/1e3dabab519481ed7b1fdcba21dcfb8832f57000733ef0e71cf6d09a5e03/lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb", size = 5324481 }, - { url = "https://files.pythonhosted.org/packages/b6/17/71e9984cf0570cd202ac0a1c9ed5c1b8889b0fc8dc736f5ef0ffb181c284/lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b", size = 5011053 }, - { url = "https://files.pythonhosted.org/packages/69/68/9f7e6d3312a91e30829368c2b3217e750adef12a6f8eb10498249f4e8d72/lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957", size = 3485634 }, - { url = "https://files.pythonhosted.org/packages/7d/db/214290d58ad68c587bd5d6af3d34e56830438733d0d0856c0275fde43652/lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d", size = 3814417 }, - { url = "https://files.pythonhosted.org/packages/89/a9/63af38c7f42baff8251d937be91c6decfe9e4725fe16283dcee428e08d5c/lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de", size = 8129239 }, - { url = "https://files.pythonhosted.org/packages/23/b2/45e12a5b8508ee9de0af432d0dc5fcc786cd78037d692a3de7571c2db04c/lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc", size = 4415821 }, - { url = "https://files.pythonhosted.org/packages/88/88/a01dc8055d431c39859ec3806dbe4df6cf7a80b0431227a52de8428d2cf6/lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be", size = 5139927 }, - { url = "https://files.pythonhosted.org/packages/13/d9/c0f3fd5582a26ea887122feb9cfe84215642ecf10886dcb50a603a6ef448/lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a", size = 4839659 }, - { url = "https://files.pythonhosted.org/packages/64/06/290728f6fde1761c323db28ece9601018db72ecafa21b182cfea99e7cb2e/lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540", size = 5427269 }, - { url = "https://files.pythonhosted.org/packages/52/43/af104743bb733e85efc0be0e32c140e3e7be6050aca52b1e8a0b2867c382/lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70", size = 4876667 }, - { url = "https://files.pythonhosted.org/packages/d8/5f/9dea130ae3ba77848f4b93d11dfd365085620fb34c5c9d22746227b86952/lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa", size = 5013541 }, - { url = "https://files.pythonhosted.org/packages/e8/87/a089806f0327ad7f7268c3f4d22f1d76215a923bf33ea808bb665bdeacfa/lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf", size = 4818394 }, - { url = "https://files.pythonhosted.org/packages/87/63/b36ddd4a829a5de681bde7e9be4008a8b53c392dea4c8b1492c35727e150/lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229", size = 5472977 }, - { url = "https://files.pythonhosted.org/packages/99/1f/677226f48e2d1ea590c24f3ead1799584517a62a394a338b96f62d3c732e/lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe", size = 4978803 }, - { url = "https://files.pythonhosted.org/packages/9d/f8/1b96af1396f237de488b14f70b2c6ced5079b792770e6a0f7153f912124d/lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2", size = 5026166 }, - { url = "https://files.pythonhosted.org/packages/a9/42/86a09a2cabb7bed04d904e38cc09ac65e4916fc1b7eadf94bb924893988b/lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71", size = 4890234 }, - { url = "https://files.pythonhosted.org/packages/c9/0a/bf0edfe5635ed05ed69a8ae9c1e06dc28cf8becc4ea72f39d3624f20b3d9/lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3", size = 5533730 }, - { url = "https://files.pythonhosted.org/packages/00/cd/dfd8fd56415508751caac07c7ddb3b0a40aff346c11fabdd9d8aa2bfb329/lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727", size = 5406452 }, - { url = "https://files.pythonhosted.org/packages/3f/35/fcc233c86f4e59f9498cde8ad6131e1ca41dc7aa084ec982d2cccca91cd7/lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a", size = 5078114 }, - { url = "https://files.pythonhosted.org/packages/9b/55/94c9bc55ec20744a21c949138649442298cff4189067b7e0844dd0a111d0/lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff", size = 3478072 }, - { url = "https://files.pythonhosted.org/packages/bb/ab/68821837e454c4c34f40cbea8806637ec4d814b76d3d017a24a39c651a79/lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2", size = 3806100 }, - { url = "https://files.pythonhosted.org/packages/99/f7/b73a431c8500565aa500e99e60b448d305eaf7c0b4c893c7c5a8a69cc595/lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c", size = 3925431 }, - { url = "https://files.pythonhosted.org/packages/db/48/4a206623c0d093d0e3b15f415ffb4345b0bdf661a3d0b15a112948c033c7/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a", size = 4216683 }, - { url = "https://files.pythonhosted.org/packages/54/47/577820c45dd954523ae8453b632d91e76da94ca6d9ee40d8c98dd86f916b/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005", size = 4326732 }, - { url = "https://files.pythonhosted.org/packages/68/de/96cb6d3269bc994b4f5ede8ca7bf0840f5de0a278bc6e50cb317ff71cafa/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce", size = 4218377 }, - { url = "https://files.pythonhosted.org/packages/a5/43/19b1ef6cbffa4244a217f95cc5f41a6cb4720fed33510a49670b03c5f1a0/lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83", size = 4351237 }, - { url = "https://files.pythonhosted.org/packages/ba/b2/6a22fb5c0885da3b00e116aee81f0b829ec9ac8f736cd414b4a09413fc7d/lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba", size = 3487557 }, - { url = "https://files.pythonhosted.org/packages/c9/ac/e8ec7b6f7d76f8b88dfe78dd547b0d8915350160a5a01cca7aceba91e87f/lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21", size = 3923032 }, - { url = "https://files.pythonhosted.org/packages/f7/b6/d94041c11aa294a09ffac7caa633114941935938eaaba159a93985283c07/lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2", size = 4214557 }, - { url = "https://files.pythonhosted.org/packages/dd/0d/ccb5e4e7a4188a9c881a3c07ee7eaf21772ae847ca5e9a3b140341f2668a/lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f", size = 4325217 }, - { url = "https://files.pythonhosted.org/packages/7a/17/9d3b43b63b0ddd77f1a680edf00de3c8c2441e8d379be17d2b712b67688b/lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab", size = 4216018 }, - { url = "https://files.pythonhosted.org/packages/19/4f/f71029b3f37f43e846b6ec0d6baaa1791c65f8c3356cc78d18076f4c5422/lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9", size = 4347893 }, - { url = "https://files.pythonhosted.org/packages/17/45/0fe53cb16a704b35b5ec93af305f77a14ec65830fc399e6634a81f17a1ea/lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c", size = 3486287 }, -] - -[[package]] -name = "lxml-html-clean" -version = "0.4.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "lxml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/81/f2/fe319e3c5cb505a361b95d1e0d0d793fe28d4dcc2fc39d3cae9324dc4233/lxml_html_clean-0.4.1.tar.gz", hash = "sha256:40c838bbcf1fc72ba4ce811fbb3135913017b27820d7c16e8bc412ae1d8bc00b", size = 21378 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/ba/2af7a60b45bf21375e111c1e2d5d721108d06c80e3d9a3cc1d767afe1731/lxml_html_clean-0.4.1-py3-none-any.whl", hash = "sha256:b704f2757e61d793b1c08bf5ad69e4c0b68d6696f4c3c1429982caf90050bcaf", size = 14114 }, -] - -[[package]] -name = "matid" -version = "2.1.4" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "ase" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "scikit-learn" }, - { name = "spglib" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/13/e5/70781431fd4c0c5e0b7b4faedb13de61bb20159642dfbb2f41a8f93cd2cb/matid-2.1.4.tar.gz", hash = "sha256:7b6c8e023bd91b1f5eba3bae7a1aec7526ed621fc4a585406d69226146cf5f9d", size = 148539 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/c2/ca36c2f01adac6c0dd3285eb4d30f1b9a235379d1477fc7a9495bf41bbdb/matid-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9dca8797279ad23b5a12031e4ea1c81cee30fb5a975f0784b3d4cee7ca055de0", size = 285624 }, - { url = "https://files.pythonhosted.org/packages/6f/96/6cac03613100731c6c1103277c842f181ea9027b1d3dc0217970ff3af512/matid-2.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05e20d2278ed814c5b26fba4b03bbe13effc3bf4de54eb9ed00be7fcb855cda6", size = 278335 }, - { url = "https://files.pythonhosted.org/packages/57/fc/17c74ba0c2913400aa7a29f4497cc3080d905280702b04d33ad0ac2a1eb9/matid-2.1.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b4719a6d3a888429ea4af88a85e0a53888093f985ecfbe8e0d2de8a5fcaea73", size = 2739837 }, - { url = "https://files.pythonhosted.org/packages/08/b0/9cac607f019d7d0e01dd7e1eef682cd542f15efb8df5e27ae49bc020aa30/matid-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:382ce7f7a08d8fb3f825a07760f58660e18ce99663d6b746627d9054b0eb68e9", size = 2793301 }, - { url = "https://files.pythonhosted.org/packages/86/b9/52a6ae199f3d2ebc088190ce9261522284925f8bf0b8ceab272499c75b4d/matid-2.1.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:acb79894a54f1425fd066e274e87fa61f50dfa85e0ccf108668fc33f25593540", size = 3717259 }, - { url = "https://files.pythonhosted.org/packages/60/27/8b15689eddc4805bc1e3ebd22731dc93cde0266086abde46f56ee9a20224/matid-2.1.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a87685154c7d0482a115c617eec72bd7e20d67d20fef6514dc7c2887e45272f9", size = 3673885 }, - { url = "https://files.pythonhosted.org/packages/63/d0/51c283736ee26d20e975aa29f8b8c78c3c9adcd12bf1a6851904827cf99e/matid-2.1.4-cp310-cp310-win32.whl", hash = "sha256:4cb417b1cd89351ea4944a6283cd423069cf12a8ab6ca09c2d5e102e8f069afe", size = 251079 }, - { url = "https://files.pythonhosted.org/packages/31/8c/4f4903d9a563714221458d3340bd0a497a852eaf097049cc9305c14fc545/matid-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:13f8ba440865068fa1846606a02ba983f9129e20516edcfed9b8c9fa565fdc62", size = 261050 }, - { url = "https://files.pythonhosted.org/packages/c1/0d/14532dd9beac07d44ed52b8ac80ba009f34d5496c139ef667f3ebba06abe/matid-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de06b9bdbb71b849a2382be9f2fdd8407c48c7ff0d533dfedd1e5e46353391fa", size = 286919 }, - { url = "https://files.pythonhosted.org/packages/63/93/6654405067851d6dceca9efb8b89bc1326bd6d26e682007dbd424f7cf360/matid-2.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9cba802bf34642c687209e1c9897a67dadebe3ced28d29b160b26e7087db491f", size = 279879 }, - { url = "https://files.pythonhosted.org/packages/47/fb/c7db19ccf399fde948d9844736b6e6b5ce7617e6b90f9fb26124ac9ac2b1/matid-2.1.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:448121b80d78aa41d1a96a5cca93e95e8a8a778922e2d63ddd72f8a1f30b5db4", size = 2764965 }, - { url = "https://files.pythonhosted.org/packages/d5/5a/bf3dc7d4ba12736f08bbf4d913b4b2ffb2783272dc452c3d514d112c733d/matid-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:096f8b09236ed364c8ec9cd6a0e2ddd1deaf758fb13e0566e166d9feb796d25f", size = 2835669 }, - { url = "https://files.pythonhosted.org/packages/b3/cc/ddc2a0a9c6d36fdccb502d9048b002c74f091887ac60c084e7ee081ae437/matid-2.1.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:10eaac8a6b53d9dd3a3dab2a04e504ae65f7c1ade6d747eec7bcd9fd70eb8c1a", size = 3749611 }, - { url = "https://files.pythonhosted.org/packages/17/c5/b000e7524e067db2ec15f35a04702a4a7519fe778db75f851178df1bb09d/matid-2.1.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7bc265458be82ffc71a7a8a2c945be60483b64f59163457198e891d499582a52", size = 3706055 }, - { url = "https://files.pythonhosted.org/packages/d5/3d/b6d71f69c5f8afe0e9381486e2228915b4989bc41da76801b490dba4574b/matid-2.1.4-cp311-cp311-win32.whl", hash = "sha256:fe903d04f0960f33c5025392f1443ff8fe1a51f7667b24975b9dec7ee5ade333", size = 252235 }, - { url = "https://files.pythonhosted.org/packages/53/2e/05324212561d1b0bbc5e503a5ba7c08da5fcf21a7b49a5220477bb35c883/matid-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:fb7d223104a2c99b74bc7c4eeb5a239252500219c980ab7bb77d9da941ecb626", size = 262056 }, - { url = "https://files.pythonhosted.org/packages/b9/13/d9391b22f61b3aaad701528c62426f983b680ac6ebd2bd5b5f5bdd387273/matid-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:66cc6ef175ce317591046b984952384e6bc4a71acd26114051ddd6b20b7dcf1a", size = 286487 }, - { url = "https://files.pythonhosted.org/packages/c7/bf/8b7eac5f2d2df758905cb6a308c38e1e6d8f69f170dd574c47cd286bd04c/matid-2.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55cc00921daac066cabd4201e7705d8286c36b9f32d1db6312a72dd7ec4f01b1", size = 278589 }, - { url = "https://files.pythonhosted.org/packages/5e/10/9fd836e8ee9143f22f6549772a1e0961c3fab8911be65d089e6f2c4d11d1/matid-2.1.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a74e4e64907051b36fb4441151eaaf21e8f8604bda210abc2e72b49efaff57", size = 2773209 }, - { url = "https://files.pythonhosted.org/packages/7f/5a/6eeb8b2e3ab98738ca345384bcbc6a1d0913fc439e7d17de6b7e5a3508fa/matid-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0fc07472f1bc9a4b8587f046140a2f30e0d18ee3f3ecfa8acdfb101fe37b000", size = 2847882 }, - { url = "https://files.pythonhosted.org/packages/80/e8/f4a46e258603e43f57f8c5ace8a97964132c311e107870d4e92474bb7106/matid-2.1.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e504ad452b9df866a75632f0aa2517417729fc19517e9b96c7961ec80e6ff750", size = 3754216 }, - { url = "https://files.pythonhosted.org/packages/92/48/18a1e91028481937fbf3b0ef8ac75471fc922d5a70f5d421735dd1ca067a/matid-2.1.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:38f449b6a83b0c3e0b77a6518a828e5cdad13fea50d29f022d134d782d513cd3", size = 3706317 }, - { url = "https://files.pythonhosted.org/packages/69/66/439ce709c9650fd23e0a64783fddcdf691ca8e5fb4c96a12123286952443/matid-2.1.4-cp312-cp312-win32.whl", hash = "sha256:ca9951ffac607e91455a117f2ba2339ba5c0ee45a8242a783da3342d0df7770e", size = 251402 }, - { url = "https://files.pythonhosted.org/packages/15/c6/08064b68f1a10348ff54d645911984cef297173dd2cd962bff6952f4b7c7/matid-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:84b5ea300c7364d11225f220a7836f38e20d33df4db37c59022697d2e8b28c4a", size = 261722 }, - { url = "https://files.pythonhosted.org/packages/6f/97/0249715b205d354a0223c943c583b57c0c15955f69f8ec5ba4c79d53bb8e/matid-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27960221c5e33b05ac5bb62c5e4ceef4c471ccbe802f88f3b41bd895d4e85b2c", size = 285733 }, - { url = "https://files.pythonhosted.org/packages/08/26/faa61e492df418135a3ef79cbb2d3323df35fc2b1a8a5a4ab447e6abbf35/matid-2.1.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0827b2bcd880a884888d153e448d19f44da42bba4609bfd722a32c8cdf9e6665", size = 278472 }, - { url = "https://files.pythonhosted.org/packages/68/73/e80b076cd2b71bcfe9e3f32a6096d07bed8df1e564db66f54732ea1a8fcb/matid-2.1.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a064dfbb6bce7e2bd268e3668ecab0325ec5f89fc91aa4593346063c32ad74ac", size = 2728445 }, - { url = "https://files.pythonhosted.org/packages/ab/c2/921017394bdb26b03c9164b8f7ca85ef5479bf4d66d6e9a9cc394988b061/matid-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6366ddbb0f638767326190666f1b69ddd3f42708090365b07d0fe6541583231", size = 2800401 }, - { url = "https://files.pythonhosted.org/packages/2c/63/3457a305856387b20e61a5d5745f7dc3d6418293b5bb4e86060d1bc22772/matid-2.1.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9e1be705e5b06f2355ba589d0503de389c516aa332c7ae015b6110e5743a85e9", size = 3702774 }, - { url = "https://files.pythonhosted.org/packages/cb/b6/21acdca4dbd4a061f724c74688d27cbd002e141ba6f7acca9bde9d7bd37e/matid-2.1.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bb6cfd9d3474fb2a2bfabb624dd93ff9776d335f23658f5be5e293eb4b66d64a", size = 3665802 }, - { url = "https://files.pythonhosted.org/packages/3b/2b/5655eba81e8798053d11aaa73e7f89d7ab94f7dbca5f7564c8a043249742/matid-2.1.4-cp39-cp39-win32.whl", hash = "sha256:f4e08e9da51b00eb0d7000bb02c6e50647e53b72fc31c2acee88da1f70a8e434", size = 251334 }, - { url = "https://files.pythonhosted.org/packages/41/3a/888fb6b802060cca415a17fd6d189bb858c9c9d2e27ea3808d9e8aa1aed4/matid-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:918edddb87fc6a635f6a084a495d0a11865cadb24e55259bec7373312e0d677d", size = 261043 }, -] - -[[package]] -name = "matplotlib" -version = "3.9.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "contourpy" }, - { name = "cycler" }, - { name = "fonttools" }, - { name = "importlib-resources", marker = "python_full_version < '3.10'" }, - { name = "kiwisolver" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pillow" }, - { name = "pyparsing" }, - { name = "python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9e/d8/3d7f706c69e024d4287c1110d74f7dabac91d9843b99eadc90de9efc8869/matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92", size = 36088381 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/9d/84eeb82ecdd3ba71b12dd6ab5c820c5cc1e868003ecb3717d41b589ec02a/matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb", size = 7893310 }, - { url = "https://files.pythonhosted.org/packages/36/98/cbacbd30241369d099f9c13a2b6bc3b7068d85214f5b5795e583ac3d8aba/matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4", size = 7764089 }, - { url = "https://files.pythonhosted.org/packages/a8/a0/917f3c6d3a8774a3a1502d9f3dfc1456e07c1fa0c211a23b75a69e154180/matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64", size = 8192377 }, - { url = "https://files.pythonhosted.org/packages/8d/9d/d06860390f9d154fa884f1740a5456378fb153ff57443c91a4a32bab7092/matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66", size = 8303983 }, - { url = "https://files.pythonhosted.org/packages/9e/a7/c0e848ed7de0766c605af62d8097472a37f1a81d93e9afe94faa5890f24d/matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a", size = 9083318 }, - { url = "https://files.pythonhosted.org/packages/09/6c/0fa50c001340a45cde44853c116d6551aea741e59a7261c38f473b53553b/matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae", size = 7819628 }, - { url = "https://files.pythonhosted.org/packages/77/c2/f9d7fe80a8fcce9bb128d1381c6fe41a8d286d7e18395e273002e8e0fa34/matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772", size = 7902925 }, - { url = "https://files.pythonhosted.org/packages/28/ba/8be09886eb56ac04a218a1dc3fa728a5c4cac60b019b4f1687885166da00/matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41", size = 7773193 }, - { url = "https://files.pythonhosted.org/packages/e6/9a/5991972a560db3ab621312a7ca5efec339ae2122f25901c0846865c4b72f/matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f", size = 8202378 }, - { url = "https://files.pythonhosted.org/packages/01/75/6c7ce560e95714a10fcbb3367d1304975a1a3e620f72af28921b796403f3/matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447", size = 8314361 }, - { url = "https://files.pythonhosted.org/packages/6e/49/dc7384c6c092958e0b75e754efbd9e52500154939c3d715789cee9fb8a53/matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e", size = 9091428 }, - { url = "https://files.pythonhosted.org/packages/8b/ce/15b0bb2fb29b3d46211d8ca740b96b5232499fc49200b58b8d571292c9a6/matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7", size = 7829377 }, - { url = "https://files.pythonhosted.org/packages/82/de/54f7f38ce6de79cb77d513bb3eaa4e0b1031e9fd6022214f47943fa53a88/matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9", size = 7892511 }, - { url = "https://files.pythonhosted.org/packages/35/3e/5713b84a02b24b2a4bd4d6673bfc03017e6654e1d8793ece783b7ed4d484/matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d", size = 7769370 }, - { url = "https://files.pythonhosted.org/packages/5b/bd/c404502aa1824456d2862dd6b9b0c1917761a51a32f7f83ff8cf94b6d117/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7", size = 8193260 }, - { url = "https://files.pythonhosted.org/packages/27/75/de5b9cd67648051cae40039da0c8cbc497a0d99acb1a1f3d087cd66d27b7/matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c", size = 8306310 }, - { url = "https://files.pythonhosted.org/packages/de/e3/2976e4e54d7ee76eaf54b7639fdc10a223d05c2bdded7045233e9871e469/matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e", size = 9086717 }, - { url = "https://files.pythonhosted.org/packages/d2/92/c2b9464a0562feb6ae780bdc152364810862e07ef5e6affa2b7686028db2/matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3", size = 7832805 }, - { url = "https://files.pythonhosted.org/packages/5c/7f/8932eac316b32f464b8f9069f151294dcd892c8fbde61fe8bcd7ba7f7f7e/matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9", size = 7893012 }, - { url = "https://files.pythonhosted.org/packages/90/89/9db9db3dd0ff3e2c49e452236dfe29e60b5586a88f8928ca1d153d0da8b5/matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa", size = 7769810 }, - { url = "https://files.pythonhosted.org/packages/67/26/d2661cdc2e1410b8929c5f12dfd521e4528abfed1b3c3d5a28ac48258b43/matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b", size = 8193779 }, - { url = "https://files.pythonhosted.org/packages/95/70/4839eaa672bf4eacc98ebc8d23633e02b6daf39e294e7433c4ab11a689be/matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413", size = 8306260 }, - { url = "https://files.pythonhosted.org/packages/88/62/7b263b2cb2724b45d3a4f9c8c6137696cc3ef037d44383fb01ac2a9555c2/matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b", size = 9086073 }, - { url = "https://files.pythonhosted.org/packages/b0/6d/3572fe243c74112fef120f0bc86f5edd21f49b60e8322fc7f6a01fe945dd/matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49", size = 7833041 }, - { url = "https://files.pythonhosted.org/packages/03/8f/9d505be3eb2f40ec731674fb6b47d10cc3147bbd6a9ea7a08c8da55415c6/matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03", size = 7933657 }, - { url = "https://files.pythonhosted.org/packages/5d/68/44b458b9794bcff2a66921f8c9a8110a50a0bb099bd5f7cabb428a1dc765/matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30", size = 7799276 }, - { url = "https://files.pythonhosted.org/packages/47/79/8486d4ddcaaf676314b5fb58e8fe19d1a6210a443a7c31fa72d4215fcb87/matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51", size = 8221027 }, - { url = "https://files.pythonhosted.org/packages/56/62/72a472181578c3d035dcda0d0fa2e259ba2c4cb91132588a348bb705b70d/matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c", size = 8329097 }, - { url = "https://files.pythonhosted.org/packages/01/8a/760f7fce66b39f447ad160800619d0bd5d0936d2b4633587116534a4afe0/matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e", size = 9093770 }, - { url = "https://files.pythonhosted.org/packages/33/d8/87456eed8fa93db0d32b429dca067d798617698a5d6c2b6f8b2b898fd61f/matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2", size = 7894246 }, - { url = "https://files.pythonhosted.org/packages/46/87/5f567fda78130a8394f9dcf3accb1b7b0c9baf0384307ef59032f5b1d17c/matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a", size = 7764962 }, - { url = "https://files.pythonhosted.org/packages/9e/ee/cfbfd294d33ad19f7bbf8188d26f2f7705283b750df80bf54b7be9a04cf2/matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5", size = 8194080 }, - { url = "https://files.pythonhosted.org/packages/5a/20/f56d5b88450593ccde3f283e338f3f976b2e479bddd9a147f14f66ee1ca7/matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca", size = 8306293 }, - { url = "https://files.pythonhosted.org/packages/3d/db/332effcb9779231017e45cc581b280979c717a84202a638f9301da86ab29/matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea", size = 9085520 }, - { url = "https://files.pythonhosted.org/packages/71/a8/9b18bd1fef16f71821c890b4db3697be5102f2b839765d9608479cd33874/matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2", size = 7813909 }, - { url = "https://files.pythonhosted.org/packages/54/c1/3fc6cad8a7caa05f4b24fb52372de87a736afeccaa9c576e4748df44067b/matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556", size = 7885311 }, - { url = "https://files.pythonhosted.org/packages/1c/6f/4e59c032b6f28cc7344f34e14ff247ebf6c975d91784bca22b9512bf43d1/matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21", size = 7762487 }, - { url = "https://files.pythonhosted.org/packages/72/b0/194c61ab2f40a4a685ef01a91c891cd44298871da4e79654494dc00bd56f/matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc", size = 8305689 }, - { url = "https://files.pythonhosted.org/packages/c0/e8/a69f4ad5b544f509ec3718dfa003187a94a37d79bf2e175180668c0ff8ec/matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697", size = 7845515 }, -] - -[[package]] -name = "mda-xdrlib" -version = "0.2.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bc/4d/9c6a179e91b793fb9e5475b9876499855ff6c20097650871f15976fc95a0/mda_xdrlib-0.2.0.tar.gz", hash = "sha256:f26f7158a83c32b96d15b530fce2cbc1190c4b7024e41faa4ab3e3db74e272af", size = 35142 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/4b/5fe3a00833a9f9775b3c237624a6212798167278ffe10fe0de04f58612d0/mda_xdrlib-0.2.0-py3-none-any.whl", hash = "sha256:0d1757b339f5db2d017a89ddaae06a82cd7a2cce26b8063df9f52b64e933fb47", size = 14587 }, -] - -[[package]] -name = "mergedeep" -version = "1.3.4" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354 }, -] - -[[package]] -name = "monty" -version = "2024.10.21" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "numpy" }, - { name = "ruamel-yaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5f/01/d32964d6196ed09e1c99d3dcaa3b9c181f5f833108306ba2d4c752084c13/monty-2024.10.21.tar.gz", hash = "sha256:da69daf11075144c4e4fca1038413cf6ef0fafd3398954b5867de6b43ae5de1f", size = 82496 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/99/4c/213fcf3429991ce542bb6f4e106ab6b8a35518e741f3d1e68b391d80e4cf/monty-2024.10.21-py3-none-any.whl", hash = "sha256:47411cbc77ec827d23b6f2ac0d1b03c55eba7419d66d6df56168d925be31b0a4", size = 68521 }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198 }, -] - -[[package]] -name = "networkx" -version = "3.2.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/80/a84676339aaae2f1cfdf9f418701dd634aef9cc76f708ef55c36ff39c3ca/networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6", size = 2073928 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/f0/8fbc882ca80cf077f1b246c0e3c3465f7f415439bdea6b899f6b19f61f70/networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2", size = 1647772 }, -] - -[[package]] -name = "nomad-lab" -version = "1.3.12.dev11+gbabaaccd2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "aniso8601" }, - { name = "ase" }, - { name = "bitarray" }, - { name = "cachetools" }, - { name = "click" }, - { name = "docstring-parser" }, - { name = "elasticsearch-dsl" }, - { name = "h5py" }, - { name = "hjson" }, - { name = "httpx" }, - { name = "importlib-metadata" }, - { name = "jmespath" }, - { name = "kaleido" }, - { name = "lxml" }, - { name = "lxml-html-clean" }, - { name = "matid" }, - { name = "nptyping" }, - { name = "numpy" }, - { name = "openpyxl" }, - { name = "orjson" }, - { name = "pandas" }, - { name = "panedr" }, - { name = "parmed" }, - { name = "pint" }, - { name = "py-spy" }, - { name = "pydantic" }, - { name = "pyinstrument" }, - { name = "pymatgen" }, - { name = "python-keycloak" }, - { name = "python-magic" }, - { name = "pytz" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "rfc3161ng" }, - { name = "scikit-learn" }, - { name = "scipy" }, - { name = "toposort" }, - { name = "typing-extensions" }, - { name = "unidecode" }, - { name = "wrapt" }, - { name = "xarray" }, -] -sdist = { url = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/files/a677a9ad4fddeb58109405a2326eb5414ae04980610d2a1a1970c40a5f77df56/nomad-lab-1.3.12.dev11+gbabaaccd2.tar.gz", hash = "sha256:a677a9ad4fddeb58109405a2326eb5414ae04980610d2a1a1970c40a5f77df56" } - -[[package]] -name = "nomad-measurements" -version = "0.1.1.dev24+g3fd8474.d20241203" -source = { editable = "." } -dependencies = [ - { name = "fairmat-readers-xrd" }, - { name = "nomad-lab" }, - { name = "pynxtools" }, - { name = "xmltodict" }, -] - -[package.optional-dependencies] -dev = [ - { name = "pytest" }, - { name = "ruff" }, - { name = "structlog" }, -] - -[package.metadata] -requires-dist = [ - { name = "fairmat-readers-xrd", specifier = "~=0.0.3" }, - { name = "nomad-lab", specifier = ">=1.3.4.dev0" }, - { name = "pynxtools", specifier = ">=0.6.1" }, - { name = "pytest", marker = "extra == 'dev'" }, - { name = "ruff", marker = "extra == 'dev'" }, - { name = "structlog", marker = "extra == 'dev'" }, - { name = "xmltodict", specifier = "==0.13.0" }, -] - -[[package]] -name = "nptyping" -version = "1.4.4" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "numpy" }, - { name = "typish" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/d9/0514384fbad1c269d861f1dfe8ef8adc9d8ccaac1fdaad9f007063b9d92f/nptyping-1.4.4-py3-none-any.whl", hash = "sha256:8128473b8ba0e65f3d6edc727cd99024e162edcf7e8a0ea8f9dfa6b070934d14", size = 31918 }, -] - -[[package]] -name = "numpy" -version = "1.26.4" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010", size = 15786129 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/94/ace0fdea5241a27d13543ee117cbc65868e82213fb31a8eb7fe9ff23f313/numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0", size = 20631468 }, - { url = "https://files.pythonhosted.org/packages/20/f7/b24208eba89f9d1b58c1668bc6c8c4fd472b20c45573cb767f59d49fb0f6/numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a", size = 13966411 }, - { url = "https://files.pythonhosted.org/packages/fc/a5/4beee6488160798683eed5bdb7eead455892c3b4e1f78d79d8d3f3b084ac/numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4", size = 14219016 }, - { url = "https://files.pythonhosted.org/packages/4b/d7/ecf66c1cd12dc28b4040b15ab4d17b773b87fa9d29ca16125de01adb36cd/numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f", size = 18240889 }, - { url = "https://files.pythonhosted.org/packages/24/03/6f229fe3187546435c4f6f89f6d26c129d4f5bed40552899fcf1f0bf9e50/numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a", size = 13876746 }, - { url = "https://files.pythonhosted.org/packages/39/fe/39ada9b094f01f5a35486577c848fe274e374bbf8d8f472e1423a0bbd26d/numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2", size = 18078620 }, - { url = "https://files.pythonhosted.org/packages/d5/ef/6ad11d51197aad206a9ad2286dc1aac6a378059e06e8cf22cd08ed4f20dc/numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07", size = 5972659 }, - { url = "https://files.pythonhosted.org/packages/19/77/538f202862b9183f54108557bfda67e17603fc560c384559e769321c9d92/numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5", size = 15808905 }, - { url = "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71", size = 20630554 }, - { url = "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef", size = 13997127 }, - { url = "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e", size = 14222994 }, - { url = "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5", size = 18252005 }, - { url = "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a", size = 13885297 }, - { url = "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a", size = 18093567 }, - { url = "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20", size = 5968812 }, - { url = "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2", size = 15811913 }, - { url = "https://files.pythonhosted.org/packages/95/12/8f2020a8e8b8383ac0177dc9570aad031a3beb12e38847f7129bacd96228/numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218", size = 20335901 }, - { url = "https://files.pythonhosted.org/packages/75/5b/ca6c8bd14007e5ca171c7c03102d17b4f4e0ceb53957e8c44343a9546dcc/numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b", size = 13685868 }, - { url = "https://files.pythonhosted.org/packages/79/f8/97f10e6755e2a7d027ca783f63044d5b1bc1ae7acb12afe6a9b4286eac17/numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b", size = 13925109 }, - { url = "https://files.pythonhosted.org/packages/0f/50/de23fde84e45f5c4fda2488c759b69990fd4512387a8632860f3ac9cd225/numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed", size = 17950613 }, - { url = "https://files.pythonhosted.org/packages/4c/0c/9c603826b6465e82591e05ca230dfc13376da512b25ccd0894709b054ed0/numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a", size = 13572172 }, - { url = "https://files.pythonhosted.org/packages/76/8c/2ba3902e1a0fc1c74962ea9bb33a534bb05984ad7ff9515bf8d07527cadd/numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0", size = 17786643 }, - { url = "https://files.pythonhosted.org/packages/28/4a/46d9e65106879492374999e76eb85f87b15328e06bd1550668f79f7b18c6/numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110", size = 5677803 }, - { url = "https://files.pythonhosted.org/packages/16/2e/86f24451c2d530c88daf997cb8d6ac622c1d40d19f5a031ed68a4b73a374/numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818", size = 15517754 }, - { url = "https://files.pythonhosted.org/packages/7d/24/ce71dc08f06534269f66e73c04f5709ee024a1afe92a7b6e1d73f158e1f8/numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c", size = 20636301 }, - { url = "https://files.pythonhosted.org/packages/ae/8c/ab03a7c25741f9ebc92684a20125fbc9fc1b8e1e700beb9197d750fdff88/numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be", size = 13971216 }, - { url = "https://files.pythonhosted.org/packages/6d/64/c3bcdf822269421d85fe0d64ba972003f9bb4aa9a419da64b86856c9961f/numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764", size = 14226281 }, - { url = "https://files.pythonhosted.org/packages/54/30/c2a907b9443cf42b90c17ad10c1e8fa801975f01cb9764f3f8eb8aea638b/numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3", size = 18249516 }, - { url = "https://files.pythonhosted.org/packages/43/12/01a563fc44c07095996d0129b8899daf89e4742146f7044cdbdb3101c57f/numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd", size = 13882132 }, - { url = "https://files.pythonhosted.org/packages/16/ee/9df80b06680aaa23fc6c31211387e0db349e0e36d6a63ba3bd78c5acdf11/numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c", size = 18084181 }, - { url = "https://files.pythonhosted.org/packages/28/7d/4b92e2fe20b214ffca36107f1a3e75ef4c488430e64de2d9af5db3a4637d/numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6", size = 5976360 }, - { url = "https://files.pythonhosted.org/packages/b5/42/054082bd8220bbf6f297f982f0a8f5479fcbc55c8b511d928df07b965869/numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea", size = 15814633 }, - { url = "https://files.pythonhosted.org/packages/3f/72/3df6c1c06fc83d9cfe381cccb4be2532bbd38bf93fbc9fad087b6687f1c0/numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30", size = 20455961 }, - { url = "https://files.pythonhosted.org/packages/8e/02/570545bac308b58ffb21adda0f4e220ba716fb658a63c151daecc3293350/numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c", size = 18061071 }, - { url = "https://files.pythonhosted.org/packages/f4/5f/fafd8c51235f60d49f7a88e2275e13971e90555b67da52dd6416caec32fe/numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0", size = 15709730 }, -] - -[[package]] -name = "openpyxl" -version = "3.1.5" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "et-xmlfile" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 }, -] - -[[package]] -name = "orjson" -version = "3.10.12" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/04/bb9f72987e7f62fb591d6c880c0caaa16238e4e530cbc3bdc84a7372d75f/orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff", size = 5438647 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/72/d2/78652b67f86d093dca984ce3fa5bf819ee1462627da83e7d0b784a9a7c45/orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d", size = 248688 }, - { url = "https://files.pythonhosted.org/packages/70/cb/f8b6a52f3bc724edf8a62d8d1d8ee17cf19d6ae1cac89f077f0e7c30f396/orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7", size = 136952 }, - { url = "https://files.pythonhosted.org/packages/a6/43/c55700df9814545bc8c35d87395ec4b9ee473a3c1f5ed72f8d3ad0298ee9/orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e", size = 149089 }, - { url = "https://files.pythonhosted.org/packages/07/da/e7e7d73bd971710b736fbd8330b8830c5fa4fc0ac003b31af61f03b26dfc/orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced", size = 140479 }, - { url = "https://files.pythonhosted.org/packages/08/49/c9dfddba56ff24eecfacf2f01a76cae4d249ac2995b1359bf63a74b1b318/orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56", size = 156564 }, - { url = "https://files.pythonhosted.org/packages/96/df/174d2eff227dc23b4540a0c2efa6ec8fe406c442c4b7f0f556242f026d1f/orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2", size = 131282 }, - { url = "https://files.pythonhosted.org/packages/6a/96/8628c53a52e2a0a1ee861d809092df72aabbd312c71de9ad6d49e2c039ab/orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13", size = 139764 }, - { url = "https://files.pythonhosted.org/packages/38/17/08becb49e59e7bb7b29dc1dad19bc0c48635e627ee27e60eb5b64efcf7b1/orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05", size = 131913 }, - { url = "https://files.pythonhosted.org/packages/2a/05/f32acc2500e3fafee9445eb8b2a6ff19c4641035e6059c6c8d7bdb3abc9e/orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85", size = 415782 }, - { url = "https://files.pythonhosted.org/packages/06/03/6cc740d998d8bb60e75d4b7e228d18964475239ac842cc1865d49d092545/orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885", size = 142383 }, - { url = "https://files.pythonhosted.org/packages/f8/30/39cac82547fe021615376245c558b216d3ae8c99bd6b2274f312e49f1c94/orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2", size = 130661 }, - { url = "https://files.pythonhosted.org/packages/95/29/c6837f4fc1eaa742eaf5abcd767ab6805493f44fe1f72b37c1743706c1d8/orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3", size = 143625 }, - { url = "https://files.pythonhosted.org/packages/f6/62/c6b955f2144421108fa441b5471e1d5f8654a7df9840b261106e04d5d15c/orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509", size = 135075 }, - { url = "https://files.pythonhosted.org/packages/d3/48/7c3cd094488f5a3bc58488555244609a8c4d105bc02f2b77e509debf0450/orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74", size = 248687 }, - { url = "https://files.pythonhosted.org/packages/ff/90/e55f0e25c7fdd1f82551fe787f85df6f378170caca863c04c810cd8f2730/orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23", size = 136953 }, - { url = "https://files.pythonhosted.org/packages/2a/b3/109c020cf7fee747d400de53b43b183ca9d3ebda3906ad0b858eb5479718/orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252", size = 149090 }, - { url = "https://files.pythonhosted.org/packages/96/d4/35c0275dc1350707d182a1b5da16d1184b9439848060af541285407f18f9/orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef", size = 140480 }, - { url = "https://files.pythonhosted.org/packages/3b/79/f863ff460c291ad2d882cc3b580cc444bd4ec60c9df55f6901e6c9a3f519/orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252", size = 156564 }, - { url = "https://files.pythonhosted.org/packages/98/7e/8d5835449ddd873424ee7b1c4ba73a0369c1055750990d824081652874d6/orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4", size = 131279 }, - { url = "https://files.pythonhosted.org/packages/46/f5/d34595b6d7f4f984c6fef289269a7f98abcdc2445ebdf90e9273487dda6b/orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae", size = 139764 }, - { url = "https://files.pythonhosted.org/packages/b3/5b/ee6e9ddeab54a7b7806768151c2090a2d36025bc346a944f51cf172ef7f7/orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b", size = 131915 }, - { url = "https://files.pythonhosted.org/packages/c4/45/febee5951aef6db5cd8cdb260548101d7ece0ca9d4ddadadf1766306b7a4/orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da", size = 415783 }, - { url = "https://files.pythonhosted.org/packages/27/a5/5a8569e49f3a6c093bee954a3de95062a231196f59e59df13a48e2420081/orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07", size = 142387 }, - { url = "https://files.pythonhosted.org/packages/6e/05/02550fb38c5bf758f3994f55401233a2ef304e175f473f2ac6dbf464cc8b/orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd", size = 130664 }, - { url = "https://files.pythonhosted.org/packages/8c/f4/ba31019d0646ce51f7ac75af6dabf98fd89dbf8ad87a9086da34710738e7/orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79", size = 143623 }, - { url = "https://files.pythonhosted.org/packages/83/fe/babf08842b989acf4c46103fefbd7301f026423fab47e6f3ba07b54d7837/orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8", size = 135074 }, - { url = "https://files.pythonhosted.org/packages/a1/2f/989adcafad49afb535da56b95d8f87d82e748548b2a86003ac129314079c/orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d", size = 248678 }, - { url = "https://files.pythonhosted.org/packages/69/b9/8c075e21a50c387649db262b618ebb7e4d40f4197b949c146fc225dd23da/orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f", size = 136763 }, - { url = "https://files.pythonhosted.org/packages/87/d3/78edf10b4ab14c19f6d918cf46a145818f4aca2b5a1773c894c5490d3a4c/orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70", size = 149137 }, - { url = "https://files.pythonhosted.org/packages/16/81/5db8852bdf990a0ddc997fa8f16b80895b8cc77c0fe3701569ed2b4b9e78/orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69", size = 140567 }, - { url = "https://files.pythonhosted.org/packages/fa/a6/9ce1e3e3db918512efadad489630c25841eb148513d21dab96f6b4157fa1/orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9", size = 156620 }, - { url = "https://files.pythonhosted.org/packages/47/d4/05133d6bea24e292d2f7628b1e19986554f7d97b6412b3e51d812e38db2d/orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192", size = 131555 }, - { url = "https://files.pythonhosted.org/packages/b9/7a/b3fbffda8743135c7811e95dc2ab7cdbc5f04999b83c2957d046f1b3fac9/orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559", size = 139743 }, - { url = "https://files.pythonhosted.org/packages/b5/13/95bbcc9a6584aa083da5ce5004ce3d59ea362a542a0b0938d884fd8790b6/orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc", size = 131733 }, - { url = "https://files.pythonhosted.org/packages/e8/29/dddbb2ea6e7af426fcc3da65a370618a88141de75c6603313d70768d1df1/orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f", size = 415788 }, - { url = "https://files.pythonhosted.org/packages/53/df/4aea59324ac539975919b4705ee086aced38e351a6eb3eea0f5071dd5661/orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be", size = 142347 }, - { url = "https://files.pythonhosted.org/packages/55/55/a52d83d7c49f8ff44e0daab10554490447d6c658771569e1c662aa7057fe/orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c", size = 130829 }, - { url = "https://files.pythonhosted.org/packages/a1/8b/b1beb1624dd4adf7d72e2d9b73c4b529e7851c0c754f17858ea13e368b33/orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708", size = 143659 }, - { url = "https://files.pythonhosted.org/packages/13/91/634c9cd0bfc6a857fc8fab9bf1a1bd9f7f3345e0d6ca5c3d4569ceb6dcfa/orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb", size = 135221 }, - { url = "https://files.pythonhosted.org/packages/1b/bb/3f560735f46fa6f875a9d7c4c2171a58cfb19f56a633d5ad5037a924f35f/orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543", size = 248662 }, - { url = "https://files.pythonhosted.org/packages/a3/df/54817902350636cc9270db20486442ab0e4db33b38555300a1159b439d16/orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296", size = 126055 }, - { url = "https://files.pythonhosted.org/packages/2e/77/55835914894e00332601a74540840f7665e81f20b3e2b9a97614af8565ed/orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e", size = 131507 }, - { url = "https://files.pythonhosted.org/packages/33/9e/b91288361898e3158062a876b5013c519a5d13e692ac7686e3486c4133ab/orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f", size = 131686 }, - { url = "https://files.pythonhosted.org/packages/b2/15/08ce117d60a4d2d3fd24e6b21db463139a658e9f52d22c9c30af279b4187/orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e", size = 415710 }, - { url = "https://files.pythonhosted.org/packages/71/af/c09da5ed58f9c002cf83adff7a4cdf3e6cee742aa9723395f8dcdb397233/orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6", size = 142305 }, - { url = "https://files.pythonhosted.org/packages/17/d1/8612038d44f33fae231e9ba480d273bac2b0383ce9e77cb06bede1224ae3/orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e", size = 130815 }, - { url = "https://files.pythonhosted.org/packages/67/2c/d5f87834be3591555cfaf9aecdf28f480a6f0b4afeaac53bad534bf9518f/orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc", size = 143664 }, - { url = "https://files.pythonhosted.org/packages/6a/05/7d768fa3ca23c9b3e1e09117abeded1501119f1d8de0ab722938c91ab25d/orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825", size = 134944 }, - { url = "https://files.pythonhosted.org/packages/01/50/5a52cfe65fc70e7b843cbe143b850313095d4e45f99aeb278b4b3691f3cf/orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d", size = 249130 }, - { url = "https://files.pythonhosted.org/packages/af/42/adb00fc60890e57ee6022257d70d9a20dfd28bfd955401e2d02a60192226/orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967", size = 136784 }, - { url = "https://files.pythonhosted.org/packages/f5/f6/5ef130a2e28a0c633c82da67224212fa84b17f93d9d768c255f389d66641/orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c", size = 148936 }, - { url = "https://files.pythonhosted.org/packages/54/80/f40805bb094d3470bcfca8d30ae9f4606bb90c809190fee18c17a4653956/orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36", size = 140291 }, - { url = "https://files.pythonhosted.org/packages/b4/0a/c91265a075af28fcb118a9a690dccc0f31c52dd7f486f5cc73aa6f9a69b4/orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8", size = 156335 }, - { url = "https://files.pythonhosted.org/packages/6f/1f/c8fc64b25e2e4a5fa0fb514a0325719e99461c088a3b659954a57b8c1f3c/orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566", size = 131118 }, - { url = "https://files.pythonhosted.org/packages/b3/f7/f5dba457bbc6aaf8ebd0131a17eb672835d2ea31f763d1462c191902bc10/orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755", size = 139573 }, - { url = "https://files.pythonhosted.org/packages/85/03/87091a1c831076e8d6ed0be19d30bd837d3c27e29f43b6b2dc23efee3d29/orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e", size = 131760 }, - { url = "https://files.pythonhosted.org/packages/53/70/956ca7999fe43b5e2ca51248f732850acaaf00f8fa5b8f7924bc504157bb/orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6", size = 415605 }, - { url = "https://files.pythonhosted.org/packages/ca/7f/4f49c1a9da03e383198c0fa418cc4262d01d70931742dfc504c2a495ed7b/orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80", size = 142208 }, - { url = "https://files.pythonhosted.org/packages/81/d9/0216c950e295b1c493510ef546b80328dc06e2ae4a82bc693386e4cdebeb/orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69", size = 130495 }, - { url = "https://files.pythonhosted.org/packages/1a/d0/70d97b583d628a307d4bc1f96f7ab6cf137e32849c06ea03d4337ad19e14/orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b", size = 143467 }, - { url = "https://files.pythonhosted.org/packages/ec/a3/725e4cac70d2a88f5fc4f9eed451e12d594063823feb931c30ac1394d26f/orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548", size = 134927 }, -] - -[[package]] -name = "packaging" -version = "24.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, -] - -[[package]] -name = "palettable" -version = "3.3.3" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/3d/a5854d60850485bff12f28abfe0e17f503e866763bed61aed4990b604530/palettable-3.3.3.tar.gz", hash = "sha256:094dd7d9a5fc1cca4854773e5c1fc6a315b33bd5b3a8f47064928facaf0490a8", size = 106639 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/f7/3367feadd4ab56783b0971c9b7edfbdd68e0c70ce877949a5dd2117ed4a0/palettable-3.3.3-py2.py3-none-any.whl", hash = "sha256:74e9e7d7fe5a9be065e02397558ed1777b2df0b793a6f4ce1a5ee74f74fb0caa", size = 332251 }, -] - -[[package]] -name = "pandas" -version = "2.2.3" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/70/c853aec59839bceed032d52010ff5f1b8d87dc3114b762e4ba2727661a3b/pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5", size = 12580827 }, - { url = "https://files.pythonhosted.org/packages/99/f2/c4527768739ffa4469b2b4fff05aa3768a478aed89a2f271a79a40eee984/pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348", size = 11303897 }, - { url = "https://files.pythonhosted.org/packages/ed/12/86c1747ea27989d7a4064f806ce2bae2c6d575b950be087837bdfcabacc9/pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed", size = 66480908 }, - { url = "https://files.pythonhosted.org/packages/44/50/7db2cd5e6373ae796f0ddad3675268c8d59fb6076e66f0c339d61cea886b/pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57", size = 13064210 }, - { url = "https://files.pythonhosted.org/packages/61/61/a89015a6d5536cb0d6c3ba02cebed51a95538cf83472975275e28ebf7d0c/pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42", size = 16754292 }, - { url = "https://files.pythonhosted.org/packages/ce/0d/4cc7b69ce37fac07645a94e1d4b0880b15999494372c1523508511b09e40/pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f", size = 14416379 }, - { url = "https://files.pythonhosted.org/packages/31/9e/6ebb433de864a6cd45716af52a4d7a8c3c9aaf3a98368e61db9e69e69a9c/pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645", size = 11598471 }, - { url = "https://files.pythonhosted.org/packages/a8/44/d9502bf0ed197ba9bf1103c9867d5904ddcaf869e52329787fc54ed70cc8/pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039", size = 12602222 }, - { url = "https://files.pythonhosted.org/packages/52/11/9eac327a38834f162b8250aab32a6781339c69afe7574368fffe46387edf/pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd", size = 11321274 }, - { url = "https://files.pythonhosted.org/packages/45/fb/c4beeb084718598ba19aa9f5abbc8aed8b42f90930da861fcb1acdb54c3a/pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698", size = 15579836 }, - { url = "https://files.pythonhosted.org/packages/cd/5f/4dba1d39bb9c38d574a9a22548c540177f78ea47b32f99c0ff2ec499fac5/pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc", size = 13058505 }, - { url = "https://files.pythonhosted.org/packages/b9/57/708135b90391995361636634df1f1130d03ba456e95bcf576fada459115a/pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3", size = 16744420 }, - { url = "https://files.pythonhosted.org/packages/86/4a/03ed6b7ee323cf30404265c284cee9c65c56a212e0a08d9ee06984ba2240/pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32", size = 14440457 }, - { url = "https://files.pythonhosted.org/packages/ed/8c/87ddf1fcb55d11f9f847e3c69bb1c6f8e46e2f40ab1a2d2abadb2401b007/pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5", size = 11617166 }, - { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, - { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, - { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, - { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, - { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, - { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, - { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, - { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, - { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, - { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, - { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, - { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, - { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, - { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, - { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, - { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, - { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, - { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, - { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, - { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, - { url = "https://files.pythonhosted.org/packages/ca/8c/8848a4c9b8fdf5a534fe2077af948bf53cd713d77ffbcd7bd15710348fd7/pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39", size = 12595535 }, - { url = "https://files.pythonhosted.org/packages/9c/b9/5cead4f63b6d31bdefeb21a679bc5a7f4aaf262ca7e07e2bc1c341b68470/pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30", size = 11319822 }, - { url = "https://files.pythonhosted.org/packages/31/af/89e35619fb573366fa68dc26dad6ad2c08c17b8004aad6d98f1a31ce4bb3/pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c", size = 15625439 }, - { url = "https://files.pythonhosted.org/packages/3d/dd/bed19c2974296661493d7acc4407b1d2db4e2a482197df100f8f965b6225/pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c", size = 13068928 }, - { url = "https://files.pythonhosted.org/packages/31/a3/18508e10a31ea108d746c848b5a05c0711e0278fa0d6f1c52a8ec52b80a5/pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea", size = 16783266 }, - { url = "https://files.pythonhosted.org/packages/c4/a5/3429bd13d82bebc78f4d78c3945efedef63a7cd0c15c17b2eeb838d1121f/pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761", size = 14450871 }, - { url = "https://files.pythonhosted.org/packages/2f/49/5c30646e96c684570925b772eac4eb0a8cb0ca590fa978f56c5d3ae73ea1/pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e", size = 11618011 }, -] - -[[package]] -name = "panedr" -version = "0.8.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "pandas" }, - { name = "pyedr" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8e/f9/af3e6f5627a9c92f5577eda9e670992e35806b31155b4b371ee44b249436/panedr-0.8.0.tar.gz", hash = "sha256:50ecac36810d12db77903048b4972a234b6e3b2c122ffa2a158eba0ff69effc4", size = 17004 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/63/8d/9ecc9ccd64365c75be17ca7fe15234359c19f97220a29df68acc07e6c9dc/panedr-0.8.0-py3-none-any.whl", hash = "sha256:e988c60ae02d9212692eaa03554d0c8c5042fcff7173082f0afa685117797634", size = 16079 }, -] - -[[package]] -name = "parmed" -version = "4.3.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/29/80bc4fa049e166e0b8eda2a7220c5473809f2f96bb15f1f117abfb8dad7c/parmed-4.3.0.tar.gz", hash = "sha256:3d0208f56507649b5af91bbb128f650a6f86de1b5a9af780e6479145e5362ea3", size = 20197299 } - -[[package]] -name = "pillow" -version = "11.0.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/26/0d95c04c868f6bdb0c447e3ee2de5564411845e36a858cfd63766bc7b563/pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739", size = 46737780 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/98/fb/a6ce6836bd7fd93fbf9144bf54789e02babc27403b50a9e1583ee877d6da/pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947", size = 3154708 }, - { url = "https://files.pythonhosted.org/packages/6a/1d/1f51e6e912d8ff316bb3935a8cda617c801783e0b998bf7a894e91d3bd4c/pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba", size = 2979223 }, - { url = "https://files.pythonhosted.org/packages/90/83/e2077b0192ca8a9ef794dbb74700c7e48384706467067976c2a95a0f40a1/pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086", size = 4183167 }, - { url = "https://files.pythonhosted.org/packages/0e/74/467af0146970a98349cdf39e9b79a6cc8a2e7558f2c01c28a7b6b85c5bda/pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9", size = 4283912 }, - { url = "https://files.pythonhosted.org/packages/85/b1/d95d4f7ca3a6c1ae120959605875a31a3c209c4e50f0029dc1a87566cf46/pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488", size = 4195815 }, - { url = "https://files.pythonhosted.org/packages/41/c3/94f33af0762ed76b5a237c5797e088aa57f2b7fa8ee7932d399087be66a8/pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f", size = 4366117 }, - { url = "https://files.pythonhosted.org/packages/ba/3c/443e7ef01f597497268899e1cca95c0de947c9bbf77a8f18b3c126681e5d/pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb", size = 4278607 }, - { url = "https://files.pythonhosted.org/packages/26/95/1495304448b0081e60c0c5d63f928ef48bb290acee7385804426fa395a21/pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97", size = 4410685 }, - { url = "https://files.pythonhosted.org/packages/45/da/861e1df971ef0de9870720cb309ca4d553b26a9483ec9be3a7bf1de4a095/pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50", size = 2249185 }, - { url = "https://files.pythonhosted.org/packages/d5/4e/78f7c5202ea2a772a5ab05069c1b82503e6353cd79c7e474d4945f4b82c3/pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c", size = 2566726 }, - { url = "https://files.pythonhosted.org/packages/77/e4/6e84eada35cbcc646fc1870f72ccfd4afacb0fae0c37ffbffe7f5dc24bf1/pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1", size = 2254585 }, - { url = "https://files.pythonhosted.org/packages/f0/eb/f7e21b113dd48a9c97d364e0915b3988c6a0b6207652f5a92372871b7aa4/pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc", size = 3154705 }, - { url = "https://files.pythonhosted.org/packages/25/b3/2b54a1d541accebe6bd8b1358b34ceb2c509f51cb7dcda8687362490da5b/pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a", size = 2979222 }, - { url = "https://files.pythonhosted.org/packages/20/12/1a41eddad8265c5c19dda8fb6c269ce15ee25e0b9f8f26286e6202df6693/pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3", size = 4190220 }, - { url = "https://files.pythonhosted.org/packages/a9/9b/8a8c4d07d77447b7457164b861d18f5a31ae6418ef5c07f6f878fa09039a/pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5", size = 4291399 }, - { url = "https://files.pythonhosted.org/packages/fc/e4/130c5fab4a54d3991129800dd2801feeb4b118d7630148cd67f0e6269d4c/pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b", size = 4202709 }, - { url = "https://files.pythonhosted.org/packages/39/63/b3fc299528d7df1f678b0666002b37affe6b8751225c3d9c12cf530e73ed/pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa", size = 4372556 }, - { url = "https://files.pythonhosted.org/packages/c6/a6/694122c55b855b586c26c694937d36bb8d3b09c735ff41b2f315c6e66a10/pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306", size = 4287187 }, - { url = "https://files.pythonhosted.org/packages/ba/a9/f9d763e2671a8acd53d29b1e284ca298bc10a595527f6be30233cdb9659d/pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9", size = 4418468 }, - { url = "https://files.pythonhosted.org/packages/6e/0e/b5cbad2621377f11313a94aeb44ca55a9639adabcaaa073597a1925f8c26/pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5", size = 2249249 }, - { url = "https://files.pythonhosted.org/packages/dc/83/1470c220a4ff06cd75fc609068f6605e567ea51df70557555c2ab6516b2c/pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291", size = 2566769 }, - { url = "https://files.pythonhosted.org/packages/52/98/def78c3a23acee2bcdb2e52005fb2810ed54305602ec1bfcfab2bda6f49f/pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9", size = 2254611 }, - { url = "https://files.pythonhosted.org/packages/1c/a3/26e606ff0b2daaf120543e537311fa3ae2eb6bf061490e4fea51771540be/pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923", size = 3147642 }, - { url = "https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903", size = 2978999 }, - { url = "https://files.pythonhosted.org/packages/d9/ff/5a45000826a1aa1ac6874b3ec5a856474821a1b59d838c4f6ce2ee518fe9/pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4", size = 4196794 }, - { url = "https://files.pythonhosted.org/packages/9d/21/84c9f287d17180f26263b5f5c8fb201de0f88b1afddf8a2597a5c9fe787f/pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f", size = 4300762 }, - { url = "https://files.pythonhosted.org/packages/84/39/63fb87cd07cc541438b448b1fed467c4d687ad18aa786a7f8e67b255d1aa/pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9", size = 4210468 }, - { url = "https://files.pythonhosted.org/packages/7f/42/6e0f2c2d5c60f499aa29be14f860dd4539de322cd8fb84ee01553493fb4d/pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7", size = 4381824 }, - { url = "https://files.pythonhosted.org/packages/31/69/1ef0fb9d2f8d2d114db982b78ca4eeb9db9a29f7477821e160b8c1253f67/pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6", size = 4296436 }, - { url = "https://files.pythonhosted.org/packages/44/ea/dad2818c675c44f6012289a7c4f46068c548768bc6c7f4e8c4ae5bbbc811/pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc", size = 4429714 }, - { url = "https://files.pythonhosted.org/packages/af/3a/da80224a6eb15bba7a0dcb2346e2b686bb9bf98378c0b4353cd88e62b171/pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6", size = 2249631 }, - { url = "https://files.pythonhosted.org/packages/57/97/73f756c338c1d86bb802ee88c3cab015ad7ce4b838f8a24f16b676b1ac7c/pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47", size = 2567533 }, - { url = "https://files.pythonhosted.org/packages/0b/30/2b61876e2722374558b871dfbfcbe4e406626d63f4f6ed92e9c8e24cac37/pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25", size = 2254890 }, - { url = "https://files.pythonhosted.org/packages/63/24/e2e15e392d00fcf4215907465d8ec2a2f23bcec1481a8ebe4ae760459995/pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699", size = 3147300 }, - { url = "https://files.pythonhosted.org/packages/43/72/92ad4afaa2afc233dc44184adff289c2e77e8cd916b3ddb72ac69495bda3/pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38", size = 2978742 }, - { url = "https://files.pythonhosted.org/packages/9e/da/c8d69c5bc85d72a8523fe862f05ababdc52c0a755cfe3d362656bb86552b/pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2", size = 4194349 }, - { url = "https://files.pythonhosted.org/packages/cd/e8/686d0caeed6b998351d57796496a70185376ed9c8ec7d99e1d19ad591fc6/pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2", size = 4298714 }, - { url = "https://files.pythonhosted.org/packages/ec/da/430015cec620d622f06854be67fd2f6721f52fc17fca8ac34b32e2d60739/pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527", size = 4208514 }, - { url = "https://files.pythonhosted.org/packages/44/ae/7e4f6662a9b1cb5f92b9cc9cab8321c381ffbee309210940e57432a4063a/pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa", size = 4380055 }, - { url = "https://files.pythonhosted.org/packages/74/d5/1a807779ac8a0eeed57f2b92a3c32ea1b696e6140c15bd42eaf908a261cd/pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f", size = 4296751 }, - { url = "https://files.pythonhosted.org/packages/38/8c/5fa3385163ee7080bc13026d59656267daaaaf3c728c233d530e2c2757c8/pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb", size = 4430378 }, - { url = "https://files.pythonhosted.org/packages/ca/1d/ad9c14811133977ff87035bf426875b93097fb50af747793f013979facdb/pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798", size = 2249588 }, - { url = "https://files.pythonhosted.org/packages/fb/01/3755ba287dac715e6afdb333cb1f6d69740a7475220b4637b5ce3d78cec2/pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de", size = 2567509 }, - { url = "https://files.pythonhosted.org/packages/c0/98/2c7d727079b6be1aba82d195767d35fcc2d32204c7a5820f822df5330152/pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84", size = 2254791 }, - { url = "https://files.pythonhosted.org/packages/eb/38/998b04cc6f474e78b563716b20eecf42a2fa16a84589d23c8898e64b0ffd/pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b", size = 3150854 }, - { url = "https://files.pythonhosted.org/packages/13/8e/be23a96292113c6cb26b2aa3c8b3681ec62b44ed5c2bd0b258bd59503d3c/pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003", size = 2982369 }, - { url = "https://files.pythonhosted.org/packages/97/8a/3db4eaabb7a2ae8203cd3a332a005e4aba00067fc514aaaf3e9721be31f1/pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2", size = 4333703 }, - { url = "https://files.pythonhosted.org/packages/28/ac/629ffc84ff67b9228fe87a97272ab125bbd4dc462745f35f192d37b822f1/pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a", size = 4412550 }, - { url = "https://files.pythonhosted.org/packages/d6/07/a505921d36bb2df6868806eaf56ef58699c16c388e378b0dcdb6e5b2fb36/pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8", size = 4461038 }, - { url = "https://files.pythonhosted.org/packages/d6/b9/fb620dd47fc7cc9678af8f8bd8c772034ca4977237049287e99dda360b66/pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8", size = 2253197 }, - { url = "https://files.pythonhosted.org/packages/df/86/25dde85c06c89d7fc5db17940f07aae0a56ac69aa9ccb5eb0f09798862a8/pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904", size = 2572169 }, - { url = "https://files.pythonhosted.org/packages/51/85/9c33f2517add612e17f3381aee7c4072779130c634921a756c97bc29fb49/pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3", size = 2256828 }, - { url = "https://files.pythonhosted.org/packages/f3/8b/01849a820686bf309b7d79a935d57bcafbfd016f1d78fc3d37ed2ba00f96/pillow-11.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba", size = 3154738 }, - { url = "https://files.pythonhosted.org/packages/35/e8/ff71a40ca8e24cfd6bb333cc4ca8cc24ebecb6942bb4ad1e5ec61f33d1b8/pillow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a", size = 2979272 }, - { url = "https://files.pythonhosted.org/packages/09/4f/2280ad43f5639174a0227920a59664fb78c5096a0b3fd865fee5184d4526/pillow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916", size = 4179756 }, - { url = "https://files.pythonhosted.org/packages/14/b1/c8f428bae932a27ce9c87e7b21aba8ea3e820aa11413c5a795868c37e039/pillow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d", size = 4280488 }, - { url = "https://files.pythonhosted.org/packages/78/66/7c5e44ab2c0123710a5d4692a4ee5931ac438efd7730ac395e305902346e/pillow-11.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7", size = 4192772 }, - { url = "https://files.pythonhosted.org/packages/36/5d/a9a00f8251ce93144f0250c0f0aece31b83ff33ffc243cdf987a8d584818/pillow-11.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e", size = 4363533 }, - { url = "https://files.pythonhosted.org/packages/fd/21/d8182fc1f3233078eb744f9f2950992f537655174febb8b3f7bdc61847b1/pillow-11.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f", size = 4275415 }, - { url = "https://files.pythonhosted.org/packages/c9/ee/93e02e8c29210ba7383843405b8b39bd19a164770f14d8569096dd123781/pillow-11.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae", size = 4407081 }, - { url = "https://files.pythonhosted.org/packages/6e/77/8cda03af2b5177a18d645ad4a7446cda6c1292d1a2fb6e772a06fa9fc86b/pillow-11.0.0-cp39-cp39-win32.whl", hash = "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4", size = 2249213 }, - { url = "https://files.pythonhosted.org/packages/9f/e4/c90bf7889489f3a14803bd00d3645945dd476020ab67579985af8233ab30/pillow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd", size = 2566862 }, - { url = "https://files.pythonhosted.org/packages/27/a6/77d2ed085055237581d6276ac1e85f562f1b1848614647d8427e49d83c03/pillow-11.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd", size = 2254605 }, - { url = "https://files.pythonhosted.org/packages/36/57/42a4dd825eab762ba9e690d696d894ba366e06791936056e26e099398cda/pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2", size = 3119239 }, - { url = "https://files.pythonhosted.org/packages/98/f7/25f9f9e368226a1d6cf3507081a1a7944eddd3ca7821023377043f5a83c8/pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2", size = 2950803 }, - { url = "https://files.pythonhosted.org/packages/59/01/98ead48a6c2e31e6185d4c16c978a67fe3ccb5da5c2ff2ba8475379bb693/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b", size = 3281098 }, - { url = "https://files.pythonhosted.org/packages/51/c0/570255b2866a0e4d500a14f950803a2ec273bac7badc43320120b9262450/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2", size = 3323665 }, - { url = "https://files.pythonhosted.org/packages/0e/75/689b4ec0483c42bfc7d1aacd32ade7a226db4f4fac57c6fdcdf90c0731e3/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830", size = 3310533 }, - { url = "https://files.pythonhosted.org/packages/3d/30/38bd6149cf53da1db4bad304c543ade775d225961c4310f30425995cb9ec/pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734", size = 3414886 }, - { url = "https://files.pythonhosted.org/packages/ec/3d/c32a51d848401bd94cabb8767a39621496491ee7cd5199856b77da9b18ad/pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316", size = 2567508 }, - { url = "https://files.pythonhosted.org/packages/67/21/fbb4222399f72d6e9c828818ff4ef8391c1e8e71623368295c8dbc789bd1/pillow-11.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06", size = 2950706 }, - { url = "https://files.pythonhosted.org/packages/a2/b6/6aeb6e018b705ea4076db50aac078c9db8715a901f4c65698edc31375d0f/pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273", size = 3323524 }, - { url = "https://files.pythonhosted.org/packages/48/26/36cc90e9932c5fe7c8876c32d6091ef5a09e8137e8e0633045bd35085fdd/pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790", size = 3414787 }, - { url = "https://files.pythonhosted.org/packages/44/5c/089154029fcca7729ae142ac820057f74ca4b0b59617734276c31281af15/pillow-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944", size = 2567664 }, -] - -[[package]] -name = "pint" -version = "0.17" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "packaging" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8d/ac/3ec9b2692e17db4d99d1b9af8c68a45a2c37aab714c1c0320a3a6f1601e0/Pint-0.17.tar.gz", hash = "sha256:f4d0caa713239e6847a7c6eefe2427358566451fe56497d533f21fb590a3f313", size = 265661 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/de/53a77b82553579affab7438d299f850acbc1c4dd741c5ce52594513cb0ef/Pint-0.17-py2.py3-none-any.whl", hash = "sha256:6593c5dfaf2f701c54f17453191dff05e90ec9ebc3d1901468a59cfcb3289a4c", size = 204982 }, -] - -[[package]] -name = "plotly" -version = "5.24.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "packaging" }, - { name = "tenacity" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/79/4f/428f6d959818d7425a94c190a6b26fbc58035cbef40bf249be0b62a9aedd/plotly-5.24.1.tar.gz", hash = "sha256:dbc8ac8339d248a4bcc36e08a5659bacfe1b079390b8953533f4eb22169b4bae", size = 9479398 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/ae/580600f441f6fc05218bd6c9d5794f4aef072a7d9093b291f1c50a9db8bc/plotly-5.24.1-py3-none-any.whl", hash = "sha256:f67073a1e637eb0dc3e46324d9d51e2fe76e9727c892dde64ddf1e1b51f29089", size = 19054220 }, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, -] - -[[package]] -name = "py-spy" -version = "0.4.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/cd/9dacc04604dc4398ce5bed77ed59918ad0940f15165954d4aaa651cc640c/py_spy-0.4.0.tar.gz", hash = "sha256:806602ce7972782cc9c1e383f339bfc27bfb822d42485e6a3e0530ae5040e1f0", size = 253236 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/7e/02ca3ee68507db47afce769504060d71b4dc1455f0f9faa8d32fc7762221/py_spy-0.4.0-py2.py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:f2cf3f7130e7d780471faa5957441d3b4e0ec39a79b2c00f4c33d494f7728428", size = 3617847 }, - { url = "https://files.pythonhosted.org/packages/65/7c/d9e26cc4c8e91f96a3a65de04d2e2e4131fbcaf6830d10917d4fab9d6788/py_spy-0.4.0-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:47cdda4c34d9b6cb01f3aaeceb2e88faf57da880207fe72ff6ff97e9bb6cc8a9", size = 1761955 }, - { url = "https://files.pythonhosted.org/packages/d2/e4/8fbfd219b7f282b80e6b2e74c9197850d2c51db8555705567bb65507b060/py_spy-0.4.0-py2.py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eee3d0bde85ca5cf4f01f012d461180ca76c24835a96f7b5c4ded64eb6a008ab", size = 2059471 }, - { url = "https://files.pythonhosted.org/packages/a7/1d/79a94a5ace810c13b730ce96765ca465c171b4952034f1be7402d8accbc1/py_spy-0.4.0-py2.py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c5f06ffce4c9c98b7fc9f5e67e5e7db591173f1351837633f3f23d9378b1d18a", size = 2067486 }, - { url = "https://files.pythonhosted.org/packages/6d/90/fbbb038f826a83ed15ebc4ae606815d6cad6c5c6399c86c7ab96f6c60817/py_spy-0.4.0-py2.py3-none-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87573e64dbfdfc89ba2e0f5e2f525aa84e0299c7eb6454b47ea335fde583a7a0", size = 2141433 }, - { url = "https://files.pythonhosted.org/packages/c9/c1/5e012669ebb687e546dc99fcfc4861ebfcf3a337b7a41af945df23140bb5/py_spy-0.4.0-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8bf2f3702cef367a489faa45177b41a6c31b2a3e5bd78c978d44e29340152f5a", size = 2732951 }, - { url = "https://files.pythonhosted.org/packages/74/8b/dd8490660019a6b0be28d9ffd2bf1db967604b19f3f2719c0e283a16ac7f/py_spy-0.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:77d8f637ade38367d944874776f45b703b7ac5938b1f7be8891f3a5876ddbb96", size = 1810770 }, -] - -[[package]] -name = "pyasn1" -version = "0.6.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135 }, -] - -[[package]] -name = "pyasn1-modules" -version = "0.4.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "pyasn1" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1d/67/6afbf0d507f73c32d21084a79946bfcfca5fbc62a72057e9c23797a737c9/pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c", size = 310028 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd", size = 181537 }, -] - -[[package]] -name = "pybtex" -version = "0.24.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "latexcodec" }, - { name = "pyyaml" }, - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/46/9b/fd39836a6397fb363446d83075a7b9c2cc562f4c449292e039ed36084376/pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755", size = 402879 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/5f/40d8e90f985a05133a8895fc454c6127ecec3de8b095dd35bba91382f803/pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f", size = 561354 }, -] - -[[package]] -name = "pycparser" -version = "2.22" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, -] - -[[package]] -name = "pydantic" -version = "1.10.19" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a1/2d/df30554721cdad26b241b7a92e726dd1c3716d90c92915731eb00e17a9f7/pydantic-1.10.19.tar.gz", hash = "sha256:fea36c2065b7a1d28c6819cc2e93387b43dd5d3cf5a1e82d8132ee23f36d1f10", size = 355208 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/ba/c94b9cc035ffdc8e445600be0fc53718adda7e537c62c5ef965a319aa13b/pydantic-1.10.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a415b9e95fa602b10808113967f72b2da8722061265d6af69268c111c254832d", size = 2608044 }, - { url = "https://files.pythonhosted.org/packages/6e/8d/dad8f46d1287dadef2fdf8b387881ad5391170449447272f64cb91cfcc04/pydantic-1.10.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:11965f421f7eb026439d4eb7464e9182fe6d69c3d4d416e464a4485d1ba61ab6", size = 2298308 }, - { url = "https://files.pythonhosted.org/packages/fc/6c/a91074909c7f3dfacee3faa199e5642f428fc5b70ab405e1b5347f7f7d3d/pydantic-1.10.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5bb81fcfc6d5bff62cd786cbd87480a11d23f16d5376ad2e057c02b3b44df96", size = 3123771 }, - { url = "https://files.pythonhosted.org/packages/63/df/345d250339c712b4e25914a7438897de0b055246c19cc0d83e7e7f8889ff/pydantic-1.10.19-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83ee8c9916689f8e6e7d90161e6663ac876be2efd32f61fdcfa3a15e87d4e413", size = 3151934 }, - { url = "https://files.pythonhosted.org/packages/24/5a/ab448a23cffc3081d99581c65a7bd6d1944327c07723f50e3919b003f34e/pydantic-1.10.19-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0399094464ae7f28482de22383e667625e38e1516d6b213176df1acdd0c477ea", size = 3183816 }, - { url = "https://files.pythonhosted.org/packages/03/92/a16d5e374a44b37837c3a677737f15dc8dcb30739d84653c24cd4d9d1f70/pydantic-1.10.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8b2cf5e26da84f2d2dee3f60a3f1782adedcee785567a19b68d0af7e1534bd1f", size = 3142492 }, - { url = "https://files.pythonhosted.org/packages/51/de/f6a33ffa2f8f117fa3f5499d0b1cdc99180d8d5a3a10707803069189e146/pydantic-1.10.19-cp310-cp310-win_amd64.whl", hash = "sha256:1fc8cc264afaf47ae6a9bcbd36c018d0c6b89293835d7fb0e5e1a95898062d59", size = 2141320 }, - { url = "https://files.pythonhosted.org/packages/d9/e7/c3276090605233eeda49e3f290ef6e8dc59962f883fa7934455996986d67/pydantic-1.10.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d7a8a1dd68bac29f08f0a3147de1885f4dccec35d4ea926e6e637fac03cdb4b3", size = 2582314 }, - { url = "https://files.pythonhosted.org/packages/79/4c/fea1176272425a1b972db48b5b2582165095f22d88d4a249f02439dcd3e5/pydantic-1.10.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07d00ca5ef0de65dd274005433ce2bb623730271d495a7d190a91c19c5679d34", size = 2269582 }, - { url = "https://files.pythonhosted.org/packages/85/e5/34b62732fa683d1171be07fb40f0bab3fb35bc52e56bfcae1629aee236c4/pydantic-1.10.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad57004e5d73aee36f1e25e4e73a4bc853b473a1c30f652dc8d86b0a987ffce3", size = 3088988 }, - { url = "https://files.pythonhosted.org/packages/f5/23/be131d6162cd2c4f7f29cf0a881c0e9bdbf7c37010803f8a85010bf016bf/pydantic-1.10.19-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dce355fe7ae53e3090f7f5fa242423c3a7b53260747aa398b4b3aaf8b25f41c3", size = 3120098 }, - { url = "https://files.pythonhosted.org/packages/f1/72/7cf7dfc8e68098751a5cee8969a967dad2acf9ce460963d071296bdeee81/pydantic-1.10.19-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0d32227ea9a3bf537a2273fd2fdb6d64ab4d9b83acd9e4e09310a777baaabb98", size = 3164823 }, - { url = "https://files.pythonhosted.org/packages/43/09/c7eb4c39faf7f01ebaed3fae8bf0b31388f2f7ffcefb07b2e5b9ea0f0617/pydantic-1.10.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e351df83d1c9cffa53d4e779009a093be70f1d5c6bb7068584086f6a19042526", size = 3115412 }, - { url = "https://files.pythonhosted.org/packages/80/a7/f9ecaaf940193a68d9566e2e61edce5f57d75591e59ff07a6af5fa7fb56f/pydantic-1.10.19-cp311-cp311-win_amd64.whl", hash = "sha256:d8d72553d2f3f57ce547de4fa7dc8e3859927784ab2c88343f1fc1360ff17a08", size = 2119019 }, - { url = "https://files.pythonhosted.org/packages/dc/bb/4883d3957b10b814b3bd7b7e8d51274f756e243e5eebd2f1cda36d933a32/pydantic-1.10.19-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d5b5b7c6bafaef90cbb7dafcb225b763edd71d9e22489647ee7df49d6d341890", size = 2410108 }, - { url = "https://files.pythonhosted.org/packages/86/80/752f888be6b068727fb893d4d875ef1cc6bb3ed3dc382f33a019fc26598a/pydantic-1.10.19-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:570ad0aeaf98b5e33ff41af75aba2ef6604ee25ce0431ecd734a28e74a208555", size = 2166105 }, - { url = "https://files.pythonhosted.org/packages/af/d4/346e56049cbc5ca429a1590bd0ab47cc154b1dec9e85fc920f7d5e50c889/pydantic-1.10.19-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0890fbd7fec9e151c7512941243d830b2d6076d5df159a2030952d480ab80a4e", size = 2800443 }, - { url = "https://files.pythonhosted.org/packages/c5/73/e1934973bf8bf436f1e1e365ed48dc51da5d7ba8b88dcd2239c962a267e0/pydantic-1.10.19-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec5c44e6e9eac5128a9bfd21610df3b8c6b17343285cc185105686888dc81206", size = 2830897 }, - { url = "https://files.pythonhosted.org/packages/87/5e/90e3e3c8bd70012986c22aa5f291aab948bdf419ca694833872594ff99ea/pydantic-1.10.19-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6eb56074b11a696e0b66c7181da682e88c00e5cebe6570af8013fcae5e63e186", size = 2863147 }, - { url = "https://files.pythonhosted.org/packages/50/c2/95be3fdfafdaf49d09369a46bbcf1f22494765479b44436e954837b818cc/pydantic-1.10.19-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9d7d48fbc5289efd23982a0d68e973a1f37d49064ccd36d86de4543aff21e086", size = 2823662 }, - { url = "https://files.pythonhosted.org/packages/00/ba/8b1c91cc27428b5e9d340abf99f82c01987eb638937ff64ae0166354bff0/pydantic-1.10.19-cp312-cp312-win_amd64.whl", hash = "sha256:fd34012691fbd4e67bdf4accb1f0682342101015b78327eaae3543583fcd451e", size = 1950372 }, - { url = "https://files.pythonhosted.org/packages/c9/ac/47074c2d50a27808e30d1a9734abbdf348ea81ac417d88bcafceb0f5a432/pydantic-1.10.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:573254d844f3e64093f72fcd922561d9c5696821ff0900a0db989d8c06ab0c25", size = 2600036 }, - { url = "https://files.pythonhosted.org/packages/8c/8f/72f3de72075daf7b22ff8c749ec0f89a6f51650b6a1bb16260951c9e1c23/pydantic-1.10.19-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff09600cebe957ecbb4a27496fe34c1d449e7957ed20a202d5029a71a8af2e35", size = 2291520 }, - { url = "https://files.pythonhosted.org/packages/e5/39/3c2abc14f0d2bc0d92d984399768f7d8485d94e3da30ca155f04be8a2bd1/pydantic-1.10.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4739c206bfb6bb2bdc78dcd40bfcebb2361add4ceac6d170e741bb914e9eff0f", size = 3218258 }, - { url = "https://files.pythonhosted.org/packages/86/0e/d94d9d1ebb8189b4a6162deb4a706963243d6f1615f43688e948271be2e7/pydantic-1.10.19-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bfb5b378b78229119d66ced6adac2e933c67a0aa1d0a7adffbe432f3ec14ce4", size = 3230746 }, - { url = "https://files.pythonhosted.org/packages/96/ce/e627333cb205af1b0a12959a3c31b5fca0015ce95d9c6cdaadb10ef38695/pydantic-1.10.19-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f31742c95e3f9443b8c6fa07c119623e61d76603be9c0d390bcf7e888acabcb", size = 3262567 }, - { url = "https://files.pythonhosted.org/packages/f7/86/c907b7e4171843439a23bd4ddaa31d385a6d407805abc0a8b1a08409b167/pydantic-1.10.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6444368b651a14c2ce2fb22145e1496f7ab23cbdb978590d47c8d34a7bc0289", size = 3235065 }, - { url = "https://files.pythonhosted.org/packages/e6/69/d98b269ac5414cd6a7fe4bc1a3dfd1fd726203e49f6821133a7f2c9217bb/pydantic-1.10.19-cp39-cp39-win_amd64.whl", hash = "sha256:945407f4d08cd12485757a281fca0e5b41408606228612f421aa4ea1b63a095d", size = 2211319 }, - { url = "https://files.pythonhosted.org/packages/a4/68/99ebf43b6b0321175cff0a05f0ce7fa51a8de67d390ccb8ab0d534be86a9/pydantic-1.10.19-py3-none-any.whl", hash = "sha256:2206a1752d9fac011e95ca83926a269fb0ef5536f7e053966d058316e24d929f", size = 165863 }, -] - -[[package]] -name = "pyedr" -version = "0.8.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "mda-xdrlib" }, - { name = "numpy" }, - { name = "tqdm" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/05/57/c6bc9d7c68f53dbed1562ea102f9c0ed531c72e988ed57eb2e50c0dea7a1/pyedr-0.8.0.tar.gz", hash = "sha256:2d119dc32cd0b0b2a14584626c2349b9dbad132a6bfed32723fe841ed5857fd0", size = 392817 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/77/33237d2e9f19e32774704555f8efbd4c336d82b1bcf4dab712d5a8c2a9d5/pyedr-0.8.0-py3-none-any.whl", hash = "sha256:3e61705d4460bae9fd1f4245a11bdd433ac7fc6084ebd0ab8b8f5b6bcfeb5ad0", size = 396975 }, -] - -[[package]] -name = "pyinstrument" -version = "5.0.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3c/14/726f2e2553aca08f25b7166197d22a4426053d5fb423c53417342ac584b1/pyinstrument-5.0.0.tar.gz", hash = "sha256:144f98eb3086667ece461f66324bf1cc1ee0475b399ab3f9ded8449cc76b7c90", size = 262211 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/df/4a63d58387a27d1cd50362988156d5004655e11bc08df78f2b982b9b5b4b/pyinstrument-5.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6a83cf18f5594e1b1899b12b46df7aabca556eef895846ccdaaa3a46a37d1274", size = 128590 }, - { url = "https://files.pythonhosted.org/packages/da/f0/86bb6db85548eedb4cf915aa30536d7dbf74916b35b5186eceed53b12187/pyinstrument-5.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1cc236313272d0222261be8e2b2a08e42d7ccbe54db9059babf4d77040da1880", size = 120444 }, - { url = "https://files.pythonhosted.org/packages/2e/f6/e0eb363c77d8d04f4b95fa4f16cf0432811e262b525bc9378a2d911f2743/pyinstrument-5.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd685d68a31f3715ca61f82c37c1c2f8b75f45646bd9840e04681d91862bd85", size = 144328 }, - { url = "https://files.pythonhosted.org/packages/d3/46/cc9acf4c58e5731063b6adb20f0ef9be60b6c6910b03425949d31af0eaff/pyinstrument-5.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cecd0f6558f13fba74a9f036b2b168956206e9525dcb84c6add2d73ab61dc22", size = 143124 }, - { url = "https://files.pythonhosted.org/packages/d6/80/9c47db683863f560de741ddd644fb7b7cbeda320530d23b38fbd418d780a/pyinstrument-5.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40a8485c2e41082a20822001a6651667bb5327f6f5f6759987198593e45bb376", size = 144445 }, - { url = "https://files.pythonhosted.org/packages/d0/70/db68425795301764b517028afe223c7b8ccfa96089789b9c2eb17b7676a8/pyinstrument-5.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a6294b7111348765ba4c311fc91821ed8b59c6690c4dab23aa7165a67da9e972", size = 144019 }, - { url = "https://files.pythonhosted.org/packages/08/80/96c956991cb92ffb42ab4dcff1960f5fdd5eee9326250ca85348844ef167/pyinstrument-5.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a164f3dae5c7db2faa501639659d64034cde8db62a4d6744712593a369bc8629", size = 143491 }, - { url = "https://files.pythonhosted.org/packages/2c/ee/05397012dfceb7d852199da7615d03aa94910508d24f5d5336d64472e065/pyinstrument-5.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f6bac8a434407de6f2ebddbcdecdb19b324c9315cbb8b8c2352714f7ced8181", size = 143868 }, - { url = "https://files.pythonhosted.org/packages/8f/d7/b37093cee6cdd76b777484b7482eaa82503fad499d9162ba290ec4a54555/pyinstrument-5.0.0-cp310-cp310-win32.whl", hash = "sha256:7e8dc887e535f5c5e5a2a64a0729496f11ddcef0c23b0a555d5ab6fa19759445", size = 121904 }, - { url = "https://files.pythonhosted.org/packages/32/bd/caf681abaf2cef4dac6acaab5ce075694a9fd57ba4300d9c43ff21d40d3d/pyinstrument-5.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c337190a1818841732643ba93065411591df526bc9de44b97ba8f56b581d2ef", size = 122776 }, - { url = "https://files.pythonhosted.org/packages/b2/f8/08b44141c6ab73e79b3642c6f09e98e2178b4df982d807661b506f8a1c23/pyinstrument-5.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c9052f548ec5ccecc50676fbf1a1d0b60bdbd3cd67630c5253099af049d1f0ad", size = 128326 }, - { url = "https://files.pythonhosted.org/packages/9c/eb/80d5a87fd16af9ad34653196b53a53bca6ee6ffdf11e0b140a9c7e079219/pyinstrument-5.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:197d25487f52da3f8ec26d46db7202bc5d703cc73c1503371166417eb7cea14e", size = 120309 }, - { url = "https://files.pythonhosted.org/packages/cb/84/e5005be5e453cf9ddb3249d6af9dc2767fa6ac8345406c8a0632360273c4/pyinstrument-5.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a072d928dc16a32e0f3d1e51726f4472a69d66d838ee1d1bf248737fd70b9415", size = 142651 }, - { url = "https://files.pythonhosted.org/packages/4b/96/6a0fb47df5b3f0652417dc66c9a9331ea66ef77ad8932a38d095d2802fb6/pyinstrument-5.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2c7ae2c984879a645fce583bf3053b7e57495f60c1e158bb71ad7dfced1fbf1", size = 141581 }, - { url = "https://files.pythonhosted.org/packages/5b/57/4b865f0d8d3026cf35e6cef21b0a7a3eadb580812d75847aa549b41a3316/pyinstrument-5.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8284bf8847629c9a5054702b9306eab3ab14c2474959e01e606369ffbcf938bc", size = 142723 }, - { url = "https://files.pythonhosted.org/packages/45/78/99d176fad5c90c8179411e96d40408ef8447814d15161433845cef887bf1/pyinstrument-5.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4fd94cc725efb1dd41ae8e20a5f06a6a5363dec959e8a9dacbac3f4d12d28f03", size = 142712 }, - { url = "https://files.pythonhosted.org/packages/cd/db/ce4147eb930d9aa27e20c3a1458dcd847eddee25453d58a654d236cb11b2/pyinstrument-5.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e0fdb9fe6f9c694940410dcc82e23a3fe2928114328efd35047fc0bb8a6c959f", size = 142224 }, - { url = "https://files.pythonhosted.org/packages/c4/ba/2cfdcf3483bdd4d7eae0885eef7960cf080a84cdc2ab9d855d9eb212ee00/pyinstrument-5.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9ffe938e63173ceb8ce7b6b309ce26c9d44d16f53c0162d89d6e706eb9e69802", size = 142460 }, - { url = "https://files.pythonhosted.org/packages/3d/a1/6c8530fae99cfcb9eb9b452f98859e9eca8601c8674f00e3d09ea3cfe3d0/pyinstrument-5.0.0-cp311-cp311-win32.whl", hash = "sha256:80d2a248516f372a89e0fe9ddf4a9d6388a4c6481b6ebd3dfe01b3cd028c0275", size = 121878 }, - { url = "https://files.pythonhosted.org/packages/15/0f/105690613ce7351ee8e876dcd172cdacb9379c2b1b4093819b53dff7486c/pyinstrument-5.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:7ccf4267aff62de0e1d976e8f5da25dcb69737ae86e38d3cfffa24877837e7d1", size = 122681 }, - { url = "https://files.pythonhosted.org/packages/02/ec/fb3a3df90d561d5e0c6682627d2fb3d582af92c311d116633fb83f399ba9/pyinstrument-5.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:dec3529a5351ea160baeef1ef2a6e28b1a7a7b3fb5e9863fae8de6da73d0f69a", size = 128364 }, - { url = "https://files.pythonhosted.org/packages/73/fa/4b079dba81995a968b84ebcea0335dfe6e273b5ec9f079aee5a662e574c1/pyinstrument-5.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5a39e3ef84c56183f8274dfd584b8c2fae4783c6204f880513e70ab2440b9137", size = 120380 }, - { url = "https://files.pythonhosted.org/packages/2b/37/e51aa7a30f622e811d1d771c80f86eefdd98ca0ad7ed8f9d8cdfcdc9572f/pyinstrument-5.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3938f063ee065e05826628dadf1fb32c7d26b22df4a945c22f7fe25ea1ba6a2", size = 143834 }, - { url = "https://files.pythonhosted.org/packages/25/eb/8711a084acb173dc2d5df1034348a99968c1b0f9a4dc4d487d0ec04428ff/pyinstrument-5.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f18990cc16b2e23b54738aa2f222863e1d36daaaec8f67b1613ddfa41f5b24db", size = 142765 }, - { url = "https://files.pythonhosted.org/packages/67/a1/30ed993fe10921f25e69f67125685f708178311f531aa3b791c1424db877/pyinstrument-5.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3731412b5bfdcef8014518f145140c69384793e218863a33a39ccfe5fb42045", size = 144121 }, - { url = "https://files.pythonhosted.org/packages/21/35/bb28bde4803713ab2e7da2c9764eab25c6f28a1d52677c19eb159f666a6a/pyinstrument-5.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02b2eaf38460b14eea646d6bb7f373eb5bb5691d13f788e80bdcb3a4eaa2519e", size = 143816 }, - { url = "https://files.pythonhosted.org/packages/68/dd/3c0bc95901b9b92a8751b45236cff4493ec0f2061827b142cd25e6a08bf2/pyinstrument-5.0.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e57db06590f13657b2bce8c4d9cf8e9e2bd90bb729bcbbe421c531ba67ad7add", size = 143555 }, - { url = "https://files.pythonhosted.org/packages/52/bd/ac2f907152605b18cb7143de4dbbf825e79497273c940277d59e89832982/pyinstrument-5.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ddaa3001c1b798ec9bf1266ef476bbc0834b74d547d531f5ed99e7d05ac5d81b", size = 143989 }, - { url = "https://files.pythonhosted.org/packages/98/dd/07d1a3c9c0abf4518ff3881c0da81f1064383dddb094f56f8c1f78748c8f/pyinstrument-5.0.0-cp312-cp312-win32.whl", hash = "sha256:b69ff982acf5ef2f4e0f32ce9b4b598f256faf88438f233ea3a72f1042707e5b", size = 121974 }, - { url = "https://files.pythonhosted.org/packages/a1/ed/2503309f485bf4c8893b76d585323505f422c5fa1e1885ee9d4a2bb57aa5/pyinstrument-5.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bf4ef061d60befe72366ce0ed4c75dee5be089644de38f9936d2df0bcf44af0", size = 122759 }, - { url = "https://files.pythonhosted.org/packages/49/c9/b2ed3db062bca45decb7fdcab2ed2cba6b1afb32b21bbde7166aafe5ecd3/pyinstrument-5.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:79a54def2d4aa83a4ed37c6cffc5494ae5de140f0453169eb4f7c744cc249d3a", size = 128268 }, - { url = "https://files.pythonhosted.org/packages/0f/14/456f51598c2e8401b248c38591488c3815f38a4c0bca6babb3f81ab93a71/pyinstrument-5.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9538f746f166a40c8802ebe5c3e905d50f3faa189869cd71c083b8a639e574bb", size = 120299 }, - { url = "https://files.pythonhosted.org/packages/11/e8/abeecedfa5dc6e6651e569c8876f0a55b973c906ebeb90185504a792ddb2/pyinstrument-5.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bbab65cae1483ad8a18429511d1eac9e3efec9f7961f2fd1bf90e1e2d69ef15", size = 143953 }, - { url = "https://files.pythonhosted.org/packages/80/03/107d3889ea42a777b0231bf3b8e5da8f8370b5bed5a55d79bcf7607d2393/pyinstrument-5.0.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4351ad041d208c597e296a0e9c2e6e21cc96804608bcafa40cfa168f3c2b8f79", size = 142858 }, - { url = "https://files.pythonhosted.org/packages/72/6c/0f4af16e529d0ea290cbc72f97e0403a118692f954b2abdaf5547e05e026/pyinstrument-5.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ceee5252f4580abec29bcc5c965453c217b0d387c412a5ffb8afdcda4e648feb", size = 144259 }, - { url = "https://files.pythonhosted.org/packages/18/c7/1a8100197b67c03a8a733d0ffbc881c35f23ccbaf0f0e470c03b0e639da5/pyinstrument-5.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b3050a4e7033103a13cfff9802680e2070a9173e1a258fa3f15a80b4eb9ee278", size = 143951 }, - { url = "https://files.pythonhosted.org/packages/87/bb/9826f6a62f2fee88a54059e1ca36a9766dab6220f826c8745dc453c31e99/pyinstrument-5.0.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3b1f44a34da7810938df615fb7cbc43cd879b42ca6b5cd72e655aee92149d012", size = 143722 }, - { url = "https://files.pythonhosted.org/packages/42/2c/9a5b0cc42296637e23f50881e36add73edde2e668d34095e3ddbd899a1e6/pyinstrument-5.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fde075196c8a3b2be191b8da05b92ff909c78d308f82df56d01a8cfdd6da07b9", size = 144138 }, - { url = "https://files.pythonhosted.org/packages/66/96/85044622fae98feaabaf26dbee39a7151d9a7c8d020a870033cd90f326ca/pyinstrument-5.0.0-cp313-cp313-win32.whl", hash = "sha256:1a9b62a8b54e05e7723eb8b9595fadc43559b73290c87b3b1cb2dc5944559790", size = 121977 }, - { url = "https://files.pythonhosted.org/packages/dd/36/a6a44b5162a9d102b085ef7107299be766868679ab2c974a4888823c8a0f/pyinstrument-5.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:2478d2c55f77ad8e281e67b0dfe7c2176304bb824c307e86e11890f5e68d7feb", size = 122766 }, - { url = "https://files.pythonhosted.org/packages/87/5e/49ce41c584fe557449b08a593be8bf89d7381266aa5510d13c119eca583b/pyinstrument-5.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bd953163616bc29c2ccb1e4c0e48ccdd11e0a97fc849da26bc362bba372019ba", size = 128588 }, - { url = "https://files.pythonhosted.org/packages/63/bf/a62b51002e02cb19684cf40dbb9157779149561bdf3d587b7d72f7cd491c/pyinstrument-5.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8d2a7279ed9b6d7cdae247bc2e57095a32f35dfe32182c334ab0ac3eb02e0eac", size = 120444 }, - { url = "https://files.pythonhosted.org/packages/b9/38/28e51389cf8be6fa0645a1ccf120386ea80946978aafc2e403a38115e146/pyinstrument-5.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68001dfcb8a37b624a1c3de5d2ee7d634f63eac7a6dd1357b7370a5cdbdcf567", size = 143939 }, - { url = "https://files.pythonhosted.org/packages/92/d2/e569c8385b8df647b1d166e0219285efd32a2d5f59d7e111c9c69bd6f154/pyinstrument-5.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5c4c3cc6410ad5afe0e352a7fb09fb1ab85eb5676ec5ec8522123759d9cc68f", size = 142800 }, - { url = "https://files.pythonhosted.org/packages/a2/24/ef3026ae402bbb41144b276453c74b5eeeee0d7f3181a4b250317e28cb6e/pyinstrument-5.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d87ddab66b1b3525ad3abc49a88aaa51efcaf83578e9d2a702c03a1cea39f28", size = 144050 }, - { url = "https://files.pythonhosted.org/packages/ad/e3/bef30a129b2c14d8ec58661d7556d96b1d8916398b5eb2f2acd6a5fd351a/pyinstrument-5.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:03182ffaa9c91687cbaba80dc0c5a47015c5ea170fe642f632d88e885cf07356", size = 143717 }, - { url = "https://files.pythonhosted.org/packages/bf/7b/e17a3fefdc829b15dbc8d8a71aa8721c959b4f1404ee2aa3d6a2f0ad00d3/pyinstrument-5.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:39b60417c9c12eed04e1886644e92aa0b281d72e5d0b097b16253cade43110f7", size = 143161 }, - { url = "https://files.pythonhosted.org/packages/b0/bd/e5410866d218bc7083dd49fbcc2a093445484fb6ca8048f0d839a490bc0b/pyinstrument-5.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7bb389b6d1573361bd1367b296133c5c69184e35fc18db22e29e8cdf56f158f9", size = 143574 }, - { url = "https://files.pythonhosted.org/packages/9d/8a/2f9fb919c9428b8c6ff02b1d742ef35b44f4564b4609c5331e485adcd4af/pyinstrument-5.0.0-cp39-cp39-win32.whl", hash = "sha256:ae69478815edb3c63e7ebf82e1e13e38c3fb2bab833b1c013643c3475b1b8cf5", size = 121907 }, - { url = "https://files.pythonhosted.org/packages/77/26/592b947ee3d9ad5368f322e95f73b985e2f7d4b16ae5dd1248d3612f2758/pyinstrument-5.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:83caeb4150c0334e9e290c0f9bb164ff6bdc199065ecb62016268e8a88589a51", size = 122787 }, -] - -[[package]] -name = "pymatgen" -version = "2024.5.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "joblib" }, - { name = "matplotlib" }, - { name = "monty" }, - { name = "networkx" }, - { name = "numpy" }, - { name = "palettable" }, - { name = "pandas" }, - { name = "plotly" }, - { name = "pybtex" }, - { name = "requests" }, - { name = "ruamel-yaml" }, - { name = "scipy" }, - { name = "spglib" }, - { name = "sympy" }, - { name = "tabulate" }, - { name = "tqdm" }, - { name = "uncertainties" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5d/96/baf171ee518886112ceab2a1b566ff585dd336146ddac2b12e3448592bc3/pymatgen-2024.5.1.tar.gz", hash = "sha256:dc5c1e342e7013e70cc5ef3d857fd67147c09c44af42e25c4fddaa4d89979c49", size = 3008278 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/2b/8a422c7b843ba82c886660b10f539dd72f281b2001beaa6b5002a90cb390/pymatgen-2024.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6dfa468492308044c2bc8b60fbc5e4b3e1c58476b588833dbb84eaaa1fb5c6ce", size = 3521632 }, - { url = "https://files.pythonhosted.org/packages/fb/fb/9b8f915ea8e6d69b6c2c86d4abb9036ba802c90b68d6110f48d11fa8ddc4/pymatgen-2024.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7214e7cc65374cd9eb69e1c2f6f144df77b3d714b033b144f62e8fd6978bd6d8", size = 4820989 }, - { url = "https://files.pythonhosted.org/packages/fc/23/0039ae994a24f3ace24ae77796645723e23e6ac540372466f5a8a9fd94c2/pymatgen-2024.5.1-cp310-cp310-win32.whl", hash = "sha256:dd3869629428087aafc4873aec9f69e13ba715bc0fc9b5f77cd98be3ddb0d90f", size = 3471924 }, - { url = "https://files.pythonhosted.org/packages/62/58/114df86b2f0956ac5bb2c182ba9d24fdfd389fb3c49594db411d5c350884/pymatgen-2024.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:29a104b7e5b5de9641ec7602d3cba26f6f36953cc62df9b8e611c06e3d5da169", size = 3515823 }, - { url = "https://files.pythonhosted.org/packages/f7/c1/b384c1c37dd107487bfdb6dcdf7620c8cb6f720d12f7e08451c1bf3e79b6/pymatgen-2024.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcbf5ec720b40dc0d6e51a2ad11d401d4e2f050c05cb5faa14a45d63887c35de", size = 3521417 }, - { url = "https://files.pythonhosted.org/packages/66/46/79cca363d142d779ebd10d100dc11770a1d175694affdd13193709bf85b4/pymatgen-2024.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d77cc72459b54f1f6aaeca9b95fe536adb7b8d12b0d72c2f81a159a61b09fdda", size = 4941164 }, - { url = "https://files.pythonhosted.org/packages/40/54/35cfe9b376d97037b204b7454571bdbadaf11753fe47c9bcb3506503c923/pymatgen-2024.5.1-cp311-cp311-win32.whl", hash = "sha256:5d6156a5fff6f09577cc68da151246993ee32dd45191c0c27fd390558d40f56c", size = 3471528 }, - { url = "https://files.pythonhosted.org/packages/52/01/e0be2b3f4f42b5ca6e40568a67ddb625f6af0a46130ce75b7c167ff65e6b/pymatgen-2024.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:6597af65a7f0482b4213e0cc9027aafca213adcda362ff76e32c1edefd6fa1df", size = 3516034 }, - { url = "https://files.pythonhosted.org/packages/7d/18/66803e632c585f26b0b8839783dd8a0674b7d663e791f4ae2938b57705bb/pymatgen-2024.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ef3bb3712bda019099849046da9675050b9a9442b799aa076563376e41b460b2", size = 3523125 }, - { url = "https://files.pythonhosted.org/packages/93/05/4ba91c3de937dd010126d8b1c2b2b2900fd1e8053dcbc20ec32048815d0f/pymatgen-2024.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beb8a49e397e550e34d2bd1a04dfa776430d81e4f5aab9ce2abb1d63f657ba62", size = 4936013 }, - { url = "https://files.pythonhosted.org/packages/68/48/fc46115f9a71af47fea2ca134da95927c860a8fd4b3ef5be0914d4e3c992/pymatgen-2024.5.1-cp312-cp312-win32.whl", hash = "sha256:ae40bc1e54213b06824be8ce3a1cdcc0562acb2f64e36a1cb9c666cf36c65a4e", size = 3472171 }, - { url = "https://files.pythonhosted.org/packages/eb/91/b7ed9f49bd76f236eb6511a526f1bb690830ac20f89c6ff9932c87e52827/pymatgen-2024.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:209b9ae5e61f77be5c9ea7013af893d3606b5b028dc7b2fd0c0d12087a50c01d", size = 3516548 }, - { url = "https://files.pythonhosted.org/packages/0a/c6/54c45ddd1099545cefc2eccb34cbf3d8b77cc5ae8dcd7ba576a513b6224c/pymatgen-2024.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12683c3064d3808b8dfebb0843a6e5b12fb3f1cabb24128123105920fdb24168", size = 3523384 }, - { url = "https://files.pythonhosted.org/packages/a8/ac/86509622cae04a5dd525858c7aa1224fb8b4311a57948f4cd86adfbffd7c/pymatgen-2024.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d713794f73231b459c3da55d36fc655bb84fe6fe8175a1e1679e11241806d631", size = 4829984 }, - { url = "https://files.pythonhosted.org/packages/1c/c0/dddd645829d6e6507da97ce3a6f5b586c3941e13fb2687ffa987602b392c/pymatgen-2024.5.1-cp39-cp39-win32.whl", hash = "sha256:bcf6ff0ee688633b83370d32a627a34da0fee40d1a718d2e9341908d7deae910", size = 3473498 }, - { url = "https://files.pythonhosted.org/packages/5c/1b/ec4e6d1d197de663db404acb93187afbb3ff1d343a7aa2051f9d5eb7271b/pymatgen-2024.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:836fbb08c69816288593a9b0e8d9f05b398f9d1be919cdd810ec575d0c8946f7", size = 3516518 }, -] - -[[package]] -name = "pynxtools" -version = "0.8.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "anytree" }, - { name = "ase" }, - { name = "click" }, - { name = "click-default-group" }, - { name = "h5py" }, - { name = "importlib-metadata" }, - { name = "lxml" }, - { name = "mergedeep" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "pyyaml" }, - { name = "xarray" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b6/83/8b0ba6b44a6bd527a1ca669d41a37ade789f7e60140b68d6b330cc00c2ae/pynxtools-0.8.2.tar.gz", hash = "sha256:6b9e07877fdc00322cf97eee8a85715e4755f15c6ab0caf42f788fec2febdbfa", size = 5291880 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/47/2b/cb60a07f08dcf83c9b4467d13856a41add38c22107dfaae7fe6013e76833/pynxtools-0.8.2-py3-none-any.whl", hash = "sha256:b722d5a511ef0a3e6a8541b494256934a765de07458b967ecce1f16fd98e046e", size = 5706511 }, -] - -[[package]] -name = "pyparsing" -version = "3.2.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/d5/e5aeee5387091148a19e1145f63606619cb5f20b83fccb63efae6474e7b2/pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c", size = 920984 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84", size = 106921 }, -] - -[[package]] -name = "pytest" -version = "8.3.3" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8b/6c/62bbd536103af674e227c41a8f3dcd022d591f6eed5facb5a0f31ee33bbc/pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", size = 1442487 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2", size = 342341 }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, -] - -[[package]] -name = "python-keycloak" -version = "4.7.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "async-property" }, - { name = "deprecation" }, - { name = "httpx" }, - { name = "jwcrypto" }, - { name = "requests" }, - { name = "requests-toolbelt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8c/8c/b5c99ebfab988745ea1480ba99bf4f1c9fd159f7beff3d346b272f43f460/python_keycloak-4.7.2.tar.gz", hash = "sha256:9a7fbef6df7b6ad1978ab65d340cc5048e547df1e11771ace661a198932cc4e4", size = 64005 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/15/8c/42d3e67e2093ba936fe6a240f6b278afd951ed4fb1c80361a7b897edef48/python_keycloak-4.7.2-py3-none-any.whl", hash = "sha256:c2751a1ddda7362b6922b0093b553343dcae0f6e39e47be489116ae66d8a9bbb", size = 77828 }, -] - -[[package]] -name = "python-magic" -version = "0.4.24" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/70/76b185393fecf78f81c12f9dc7b1df814df785f6acb545fc92b016e75a7e/python-magic-0.4.24.tar.gz", hash = "sha256:de800df9fb50f8ec5974761054a708af6e4246b03b4bdaee993f948947b0ebcf", size = 17295 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/99/c89223c6547df268596899334ee77b3051f606077317023617b1c43162fb/python_magic-0.4.24-py2.py3-none-any.whl", hash = "sha256:4fec8ee805fea30c07afccd1592c0f17977089895bdfaae5fec870a84e997626", size = 12785 }, -] - -[[package]] -name = "pytz" -version = "2024.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/31/3c70bf7603cc2dca0f19bdc53b4537a797747a58875b552c8c413d963a3f/pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", size = 319692 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 }, -] - -[[package]] -name = "pyyaml" -version = "6.0.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199 }, - { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758 }, - { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463 }, - { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280 }, - { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239 }, - { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802 }, - { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527 }, - { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052 }, - { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774 }, - { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, - { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, - { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, - { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, - { url = "https://files.pythonhosted.org/packages/65/d8/b7a1db13636d7fb7d4ff431593c510c8b8fca920ade06ca8ef20015493c5/PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", size = 184777 }, - { url = "https://files.pythonhosted.org/packages/0a/02/6ec546cd45143fdf9840b2c6be8d875116a64076218b61d68e12548e5839/PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", size = 172318 }, - { url = "https://files.pythonhosted.org/packages/0e/9a/8cc68be846c972bda34f6c2a93abb644fb2476f4dcc924d52175786932c9/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", size = 720891 }, - { url = "https://files.pythonhosted.org/packages/e9/6c/6e1b7f40181bc4805e2e07f4abc10a88ce4648e7e95ff1abe4ae4014a9b2/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", size = 722614 }, - { url = "https://files.pythonhosted.org/packages/3d/32/e7bd8535d22ea2874cef6a81021ba019474ace0d13a4819c2a4bce79bd6a/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", size = 737360 }, - { url = "https://files.pythonhosted.org/packages/d7/12/7322c1e30b9be969670b672573d45479edef72c9a0deac3bb2868f5d7469/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", size = 699006 }, - { url = "https://files.pythonhosted.org/packages/82/72/04fcad41ca56491995076630c3ec1e834be241664c0c09a64c9a2589b507/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", size = 723577 }, - { url = "https://files.pythonhosted.org/packages/ed/5e/46168b1f2757f1fcd442bc3029cd8767d88a98c9c05770d8b420948743bb/PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", size = 144593 }, - { url = "https://files.pythonhosted.org/packages/19/87/5124b1c1f2412bb95c59ec481eaf936cd32f0fe2a7b16b97b81c4c017a6a/PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", size = 162312 }, -] - -[[package]] -name = "requests" -version = "2.31.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9d/be/10918a2eac4ae9f02f6cfe6414b7a155ccd8f7f9d4380d62fd5b955065c3/requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1", size = 110794 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", size = 62574 }, -] - -[[package]] -name = "requests-toolbelt" -version = "1.0.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481 }, -] - -[[package]] -name = "rfc3161ng" -version = "2.1.3" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "cryptography" }, - { name = "pyasn1" }, - { name = "pyasn1-modules" }, - { name = "python-dateutil" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/87/ab/7b1cc11019fb63d9420093ed9ff339ea544d0158141ac0daf33961a200cf/rfc3161ng-2.1.3.tar.gz", hash = "sha256:1e88614da61b22abd591577f9dd39d3a030335f9e8a12d8bc001149c17d0a01e", size = 22418 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/66/cf13725b4ad06527ca482c99202a683ca3b35586eec9bad5f9e19efb43b9/rfc3161ng-2.1.3-py2.py3-none-any.whl", hash = "sha256:81fe7e4488f523c758b1206bf5e72ba2066b78f2812107b1b7bb16a7596e524b", size = 9949 }, -] - -[[package]] -name = "ruamel-yaml" -version = "0.18.6" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "ruamel-yaml-clib", marker = "python_full_version < '3.13' and platform_python_implementation == 'CPython'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/29/81/4dfc17eb6ebb1aac314a3eb863c1325b907863a1b8b1382cdffcb6ac0ed9/ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b", size = 143362 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/73/67/8ece580cc363331d9a53055130f86b096bf16e38156e33b1d3014fffda6b/ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636", size = 117761 }, -] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.12" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/84/80203abff8ea4993a87d823a5f632e4d92831ef75d404c9fc78d0176d2b5/ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f", size = 225315 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/70/57/40a958e863e299f0c74ef32a3bde9f2d1ea8d69669368c0c502a0997f57f/ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5", size = 131301 }, - { url = "https://files.pythonhosted.org/packages/98/a8/29a3eb437b12b95f50a6bcc3d7d7214301c6c529d8fdc227247fa84162b5/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969", size = 633728 }, - { url = "https://files.pythonhosted.org/packages/35/6d/ae05a87a3ad540259c3ad88d71275cbd1c0f2d30ae04c65dcbfb6dcd4b9f/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df", size = 722230 }, - { url = "https://files.pythonhosted.org/packages/7f/b7/20c6f3c0b656fe609675d69bc135c03aac9e3865912444be6339207b6648/ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76", size = 686712 }, - { url = "https://files.pythonhosted.org/packages/cd/11/d12dbf683471f888d354dac59593873c2b45feb193c5e3e0f2ebf85e68b9/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6", size = 663936 }, - { url = "https://files.pythonhosted.org/packages/72/14/4c268f5077db5c83f743ee1daeb236269fa8577133a5cfa49f8b382baf13/ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd", size = 696580 }, - { url = "https://files.pythonhosted.org/packages/80/29/c0a017b704aaf3cbf704989785cd9c5d5b8ccec2dae6ac0c53833c84e677/ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da", size = 100326 }, - { url = "https://files.pythonhosted.org/packages/3a/65/fa39d74db4e2d0cd252355732d966a460a41cd01c6353b820a0952432839/ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28", size = 118079 }, - { url = "https://files.pythonhosted.org/packages/fb/8f/683c6ad562f558cbc4f7c029abcd9599148c51c54b5ef0f24f2638da9fbb/ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6", size = 132224 }, - { url = "https://files.pythonhosted.org/packages/3c/d2/b79b7d695e2f21da020bd44c782490578f300dd44f0a4c57a92575758a76/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e", size = 641480 }, - { url = "https://files.pythonhosted.org/packages/68/6e/264c50ce2a31473a9fdbf4fa66ca9b2b17c7455b31ef585462343818bd6c/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e", size = 739068 }, - { url = "https://files.pythonhosted.org/packages/86/29/88c2567bc893c84d88b4c48027367c3562ae69121d568e8a3f3a8d363f4d/ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52", size = 703012 }, - { url = "https://files.pythonhosted.org/packages/11/46/879763c619b5470820f0cd6ca97d134771e502776bc2b844d2adb6e37753/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642", size = 704352 }, - { url = "https://files.pythonhosted.org/packages/02/80/ece7e6034256a4186bbe50dee28cd032d816974941a6abf6a9d65e4228a7/ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2", size = 737344 }, - { url = "https://files.pythonhosted.org/packages/67/58/b1f60a1d591b771298ffa0428237afb092c7f29ae23bad93420b1eb10703/ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4", size = 100205 }, - { url = "https://files.pythonhosted.org/packages/b4/4f/b52f634c9548a9291a70dfce26ca7ebce388235c93588a1068028ea23fcc/ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb", size = 118185 }, - { url = "https://files.pythonhosted.org/packages/48/41/e7a405afbdc26af961678474a55373e1b323605a4f5e2ddd4a80ea80f628/ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632", size = 133433 }, - { url = "https://files.pythonhosted.org/packages/ec/b0/b850385604334c2ce90e3ee1013bd911aedf058a934905863a6ea95e9eb4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d", size = 647362 }, - { url = "https://files.pythonhosted.org/packages/44/d0/3f68a86e006448fb6c005aee66565b9eb89014a70c491d70c08de597f8e4/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c", size = 754118 }, - { url = "https://files.pythonhosted.org/packages/52/a9/d39f3c5ada0a3bb2870d7db41901125dbe2434fa4f12ca8c5b83a42d7c53/ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd", size = 706497 }, - { url = "https://files.pythonhosted.org/packages/b0/fa/097e38135dadd9ac25aecf2a54be17ddf6e4c23e43d538492a90ab3d71c6/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31", size = 698042 }, - { url = "https://files.pythonhosted.org/packages/ec/d5/a659ca6f503b9379b930f13bc6b130c9f176469b73b9834296822a83a132/ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680", size = 745831 }, - { url = "https://files.pythonhosted.org/packages/b1/82/85cb92f15a4231c89b95dfe08b09eb6adca929ef7df7e17ab59902b6f589/ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5", size = 98777 }, - { url = "https://files.pythonhosted.org/packages/d7/8f/c3654f6f1ddb75daf3922c3d8fc6005b1ab56671ad56ffb874d908bfa668/ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4", size = 115523 }, - { url = "https://files.pythonhosted.org/packages/29/00/4864119668d71a5fa45678f380b5923ff410701565821925c69780356ffa/ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a", size = 132011 }, - { url = "https://files.pythonhosted.org/packages/7f/5e/212f473a93ae78c669ffa0cb051e3fee1139cb2d385d2ae1653d64281507/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475", size = 642488 }, - { url = "https://files.pythonhosted.org/packages/1f/8f/ecfbe2123ade605c49ef769788f79c38ddb1c8fa81e01f4dbf5cf1a44b16/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef", size = 745066 }, - { url = "https://files.pythonhosted.org/packages/e2/a9/28f60726d29dfc01b8decdb385de4ced2ced9faeb37a847bd5cf26836815/ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6", size = 701785 }, - { url = "https://files.pythonhosted.org/packages/84/7e/8e7ec45920daa7f76046578e4f677a3215fe8f18ee30a9cb7627a19d9b4c/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf", size = 693017 }, - { url = "https://files.pythonhosted.org/packages/c5/b3/d650eaade4ca225f02a648321e1ab835b9d361c60d51150bac49063b83fa/ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1", size = 741270 }, - { url = "https://files.pythonhosted.org/packages/30/8c/ed73f047a73638257aa9377ad356bea4d96125b305c34a28766f4445cc0f/ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6", size = 98583 }, - { url = "https://files.pythonhosted.org/packages/b0/85/e8e751d8791564dd333d5d9a4eab0a7a115f7e349595417fd50ecae3395c/ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3", size = 115190 }, - { url = "https://files.pythonhosted.org/packages/e5/46/ccdef7a84ad745c37cb3d9a81790f28fbc9adf9c237dba682017b123294e/ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987", size = 131834 }, - { url = "https://files.pythonhosted.org/packages/29/09/932360f30ad1b7b79f08757e0a6fb8c5392a52cdcc182779158fe66d25ac/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45", size = 636120 }, - { url = "https://files.pythonhosted.org/packages/a2/2a/5b27602e7a4344c1334e26bf4739746206b7a60a8acdba33a61473468b73/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519", size = 724914 }, - { url = "https://files.pythonhosted.org/packages/da/1c/23497017c554fc06ff5701b29355522cff850f626337fff35d9ab352cb18/ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7", size = 689072 }, - { url = "https://files.pythonhosted.org/packages/68/e6/f3d4ff3223f9ea49c3b7169ec0268e42bd49f87c70c0e3e853895e4a7ae2/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285", size = 667091 }, - { url = "https://files.pythonhosted.org/packages/84/62/ead07043527642491e5011b143f44b81ef80f1025a96069b7210e0f2f0f3/ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed", size = 699111 }, - { url = "https://files.pythonhosted.org/packages/6e/b3/7feb99a00bfaa5c6868617bb7651308afde85e5a0b23cd187fe5de65feeb/ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12", size = 100863 }, - { url = "https://files.pythonhosted.org/packages/93/07/de635108684b7a5bb06e432b0930c5a04b6c59efe73bd966d8db3cc208f2/ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b", size = 118653 }, -] - -[[package]] -name = "ruff" -version = "0.8.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/d6/a2373f3ba7180ddb44420d2a9d1f1510e1a4d162b3d27282bedcb09c8da9/ruff-0.8.0.tar.gz", hash = "sha256:a7ccfe6331bf8c8dad715753e157457faf7351c2b69f62f32c165c2dbcbacd44", size = 3276537 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/77/e889ee3ce7fd8baa3ed1b77a03b9fb8ec1be68be1418261522fd6a5405e0/ruff-0.8.0-py3-none-linux_armv6l.whl", hash = "sha256:fcb1bf2cc6706adae9d79c8d86478677e3bbd4ced796ccad106fd4776d395fea", size = 10518283 }, - { url = "https://files.pythonhosted.org/packages/da/c8/0a47de01edf19fb22f5f9b7964f46a68d0bdff20144d134556ffd1ba9154/ruff-0.8.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:295bb4c02d58ff2ef4378a1870c20af30723013f441c9d1637a008baaf928c8b", size = 10317691 }, - { url = "https://files.pythonhosted.org/packages/41/17/9885e4a0eeae07abd2a4ebabc3246f556719f24efa477ba2739146c4635a/ruff-0.8.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7b1f1c76b47c18fa92ee78b60d2d20d7e866c55ee603e7d19c1e991fad933a9a", size = 9940999 }, - { url = "https://files.pythonhosted.org/packages/3e/cd/46b6f7043597eb318b5f5482c8ae8f5491cccce771e85f59d23106f2d179/ruff-0.8.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb0d4f250a7711b67ad513fde67e8870109e5ce590a801c3722580fe98c33a99", size = 10772437 }, - { url = "https://files.pythonhosted.org/packages/5d/87/afc95aeb8bc78b1d8a3461717a4419c05aa8aa943d4c9cbd441630f85584/ruff-0.8.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e55cce9aa93c5d0d4e3937e47b169035c7e91c8655b0974e61bb79cf398d49c", size = 10299156 }, - { url = "https://files.pythonhosted.org/packages/65/fa/04c647bb809c4d65e8eae1ed1c654d9481b21dd942e743cd33511687b9f9/ruff-0.8.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f4cd64916d8e732ce6b87f3f5296a8942d285bbbc161acee7fe561134af64f9", size = 11325819 }, - { url = "https://files.pythonhosted.org/packages/90/26/7dad6e7d833d391a8a1afe4ee70ca6f36c4a297d3cca83ef10e83e9aacf3/ruff-0.8.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c5c1466be2a2ebdf7c5450dd5d980cc87c8ba6976fb82582fea18823da6fa362", size = 12023927 }, - { url = "https://files.pythonhosted.org/packages/24/a0/be5296dda6428ba8a13bda8d09fbc0e14c810b485478733886e61597ae2b/ruff-0.8.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2dabfd05b96b7b8f2da00d53c514eea842bff83e41e1cceb08ae1966254a51df", size = 11589702 }, - { url = "https://files.pythonhosted.org/packages/26/3f/7602eb11d2886db545834182a9dbe500b8211fcbc9b4064bf9d358bbbbb4/ruff-0.8.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:facebdfe5a5af6b1588a1d26d170635ead6892d0e314477e80256ef4a8470cf3", size = 12782936 }, - { url = "https://files.pythonhosted.org/packages/4c/5d/083181bdec4ec92a431c1291d3fff65eef3ded630a4b55eb735000ef5f3b/ruff-0.8.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a8e86bae0dbd749c815211ca11e3a7bd559b9710746c559ed63106d382bd9c", size = 11138488 }, - { url = "https://files.pythonhosted.org/packages/b7/23/c12cdef58413cee2436d6a177aa06f7a366ebbca916cf10820706f632459/ruff-0.8.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:85e654f0ded7befe2d61eeaf3d3b1e4ef3894469cd664ffa85006c7720f1e4a2", size = 10744474 }, - { url = "https://files.pythonhosted.org/packages/29/61/a12f3b81520083cd7c5caa24ba61bb99fd1060256482eff0ef04cc5ccd1b/ruff-0.8.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:83a55679c4cb449fa527b8497cadf54f076603cc36779b2170b24f704171ce70", size = 10369029 }, - { url = "https://files.pythonhosted.org/packages/08/2a/c013f4f3e4a54596c369cee74c24870ed1d534f31a35504908b1fc97017a/ruff-0.8.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:812e2052121634cf13cd6fddf0c1871d0ead1aad40a1a258753c04c18bb71bbd", size = 10867481 }, - { url = "https://files.pythonhosted.org/packages/d5/f7/685b1e1d42a3e94ceb25eab23c70bdd8c0ab66a43121ef83fe6db5a58756/ruff-0.8.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:780d5d8523c04202184405e60c98d7595bdb498c3c6abba3b6d4cdf2ca2af426", size = 11237117 }, - { url = "https://files.pythonhosted.org/packages/03/20/401132c0908e8837625e3b7e32df9962e7cd681a4df1e16a10e2a5b4ecda/ruff-0.8.0-py3-none-win32.whl", hash = "sha256:5fdb6efecc3eb60bba5819679466471fd7d13c53487df7248d6e27146e985468", size = 8783511 }, - { url = "https://files.pythonhosted.org/packages/1d/5c/4d800fca7854f62ad77f2c0d99b4b585f03e2d87a6ec1ecea85543a14a3c/ruff-0.8.0-py3-none-win_amd64.whl", hash = "sha256:582891c57b96228d146725975fbb942e1f30a0c4ba19722e692ca3eb25cc9b4f", size = 9559876 }, - { url = "https://files.pythonhosted.org/packages/5b/bc/cc8a6a5ca4960b226dc15dd8fb511dd11f2014ff89d325c0b9b9faa9871f/ruff-0.8.0-py3-none-win_arm64.whl", hash = "sha256:ba93e6294e9a737cd726b74b09a6972e36bb511f9a102f1d9a7e1ce94dd206a6", size = 8939733 }, -] - -[[package]] -name = "scikit-learn" -version = "1.5.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "joblib" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "threadpoolctl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/37/59/44985a2bdc95c74e34fef3d10cb5d93ce13b0e2a7baefffe1b53853b502d/scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d", size = 7001680 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/98/89/be41419b4bec629a4691183a5eb1796f91252a13a5ffa243fd958cad7e91/scikit_learn-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:299406827fb9a4f862626d0fe6c122f5f87f8910b86fe5daa4c32dcd742139b6", size = 12106070 }, - { url = "https://files.pythonhosted.org/packages/bf/e0/3b6d777d375f3b685f433c93384cdb724fb078e1dc8f8ff0950467e56c30/scikit_learn-1.5.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d4cad1119c77930b235579ad0dc25e65c917e756fe80cab96aa3b9428bd3fb0", size = 10971758 }, - { url = "https://files.pythonhosted.org/packages/7b/31/eb7dd56c371640753953277de11356c46a3149bfeebb3d7dcd90b993715a/scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c412ccc2ad9bf3755915e3908e677b367ebc8d010acbb3f182814524f2e5540", size = 12500080 }, - { url = "https://files.pythonhosted.org/packages/4c/1e/a7c7357e704459c7d56a18df4a0bf08669442d1f8878cc0864beccd6306a/scikit_learn-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a686885a4b3818d9e62904d91b57fa757fc2bed3e465c8b177be652f4dd37c8", size = 13347241 }, - { url = "https://files.pythonhosted.org/packages/48/76/154ebda6794faf0b0f3ccb1b5cd9a19f0a63cb9e1f3d2c61b6114002677b/scikit_learn-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:c15b1ca23d7c5f33cc2cb0a0d6aaacf893792271cddff0edbd6a40e8319bc113", size = 11000477 }, - { url = "https://files.pythonhosted.org/packages/ff/91/609961972f694cb9520c4c3d201e377a26583e1eb83bc5a334c893729214/scikit_learn-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:03b6158efa3faaf1feea3faa884c840ebd61b6484167c711548fce208ea09445", size = 12088580 }, - { url = "https://files.pythonhosted.org/packages/cd/7a/19fe32c810c5ceddafcfda16276d98df299c8649e24e84d4f00df4a91e01/scikit_learn-1.5.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1ff45e26928d3b4eb767a8f14a9a6efbf1cbff7c05d1fb0f95f211a89fd4f5de", size = 10975994 }, - { url = "https://files.pythonhosted.org/packages/4c/75/62e49f8a62bf3c60b0e64d0fce540578ee4f0e752765beb2e1dc7c6d6098/scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f763897fe92d0e903aa4847b0aec0e68cadfff77e8a0687cabd946c89d17e675", size = 12465782 }, - { url = "https://files.pythonhosted.org/packages/49/21/3723de321531c9745e40f1badafd821e029d346155b6c79704e0b7197552/scikit_learn-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8b0ccd4a902836493e026c03256e8b206656f91fbcc4fde28c57a5b752561f1", size = 13322034 }, - { url = "https://files.pythonhosted.org/packages/17/1c/ccdd103cfcc9435a18819856fbbe0c20b8fa60bfc3343580de4be13f0668/scikit_learn-1.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:6c16d84a0d45e4894832b3c4d0bf73050939e21b99b01b6fd59cbb0cf39163b6", size = 11015224 }, - { url = "https://files.pythonhosted.org/packages/a4/db/b485c1ac54ff3bd9e7e6b39d3cc6609c4c76a65f52ab0a7b22b6c3ab0e9d/scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a", size = 12110344 }, - { url = "https://files.pythonhosted.org/packages/54/1a/7deb52fa23aebb855431ad659b3c6a2e1709ece582cb3a63d66905e735fe/scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1", size = 11033502 }, - { url = "https://files.pythonhosted.org/packages/a1/32/4a7a205b14c11225609b75b28402c196e4396ac754dab6a81971b811781c/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd", size = 12085794 }, - { url = "https://files.pythonhosted.org/packages/c6/29/044048c5e911373827c0e1d3051321b9183b2a4f8d4e2f11c08fcff83f13/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6", size = 12945797 }, - { url = "https://files.pythonhosted.org/packages/aa/ce/c0b912f2f31aeb1b756a6ba56bcd84dd1f8a148470526a48515a3f4d48cd/scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1", size = 10985467 }, - { url = "https://files.pythonhosted.org/packages/a4/50/8891028437858cc510e13578fe7046574a60c2aaaa92b02d64aac5b1b412/scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5", size = 12025584 }, - { url = "https://files.pythonhosted.org/packages/d2/79/17feef8a1c14149436083bec0e61d7befb4812e272d5b20f9d79ea3e9ab1/scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908", size = 10959795 }, - { url = "https://files.pythonhosted.org/packages/b1/c8/f08313f9e2e656bd0905930ae8bf99a573ea21c34666a813b749c338202f/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3", size = 12077302 }, - { url = "https://files.pythonhosted.org/packages/a7/48/fbfb4dc72bed0fe31fe045fb30e924909ad03f717c36694351612973b1a9/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12", size = 13002811 }, - { url = "https://files.pythonhosted.org/packages/a5/e7/0c869f9e60d225a77af90d2aefa7a4a4c0e745b149325d1450f0f0ce5399/scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f", size = 10951354 }, - { url = "https://files.pythonhosted.org/packages/db/a0/e92af06a9fddd1fafbbf39cd32cbed5929b63cf99e03a438f838987e265d/scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9", size = 12142022 }, - { url = "https://files.pythonhosted.org/packages/1b/be/386ef63d9d5e2ddf8308f6a164e4b388d5c5aecc0504d25acc6b33d8b09e/scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1", size = 11002839 }, - { url = "https://files.pythonhosted.org/packages/12/0d/94a03c006b01c1de27518d393f52ad3639705cd70184e106d24ffb3f28f6/scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8", size = 12546017 }, - { url = "https://files.pythonhosted.org/packages/2a/9d/d332ec76e2cc442fce98bc43a44e69d3c281e6b4ede6b6db2616dc6fbec6/scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca64b3089a6d9b9363cd3546f8978229dcbb737aceb2c12144ee3f70f95684b7", size = 13369870 }, - { url = "https://files.pythonhosted.org/packages/45/05/74e453853c0b1b0773f46027848a17467f5dc9c5f15d096d911163d27550/scikit_learn-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:3bed4909ba187aca80580fe2ef370d9180dcf18e621a27c4cf2ef10d279a7efe", size = 11031380 }, -] - -[[package]] -name = "scipy" -version = "1.13.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076 }, - { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232 }, - { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202 }, - { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335 }, - { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728 }, - { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588 }, - { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805 }, - { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687 }, - { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638 }, - { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931 }, - { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145 }, - { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227 }, - { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301 }, - { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348 }, - { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062 }, - { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311 }, - { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493 }, - { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955 }, - { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927 }, - { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538 }, - { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190 }, - { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244 }, - { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637 }, - { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440 }, -] - -[[package]] -name = "six" -version = "1.16.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, -] - -[[package]] -name = "spglib" -version = "2.5.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "importlib-resources", marker = "python_full_version < '3.10'" }, - { name = "numpy" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/10/8e/2c53fa9027543c3624cdd8b7ac9f6d611464dfc86eb786465e422a8c024c/spglib-2.5.0.tar.gz", hash = "sha256:f8bb638897be91b9dbd4c085d9fde1f69048f5949e20f3832cb9438e57418d4b", size = 2822241 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/ab/f9436120f1282b5bc6af7d63c5b1c3296f86acdc09927069631b092c051b/spglib-2.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:993f4b2d2f0a133d22fcf2d6f3fad9beeee3527c5453d5619e6518d7af253c85", size = 1064068 }, - { url = "https://files.pythonhosted.org/packages/99/9f/e6465a4e0856e35576d0cef7e44e10bdf8aa010dea0969c1ad3c50112c7c/spglib-2.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b0b070ddbaad0e97ec18efef602af57caf0045c7187180b1eaea843cb5877c8b", size = 1052798 }, - { url = "https://files.pythonhosted.org/packages/67/2f/330e67f98932ac1433472ba224e5f5319efdacf3fde149f09ccae4ee82f8/spglib-2.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12c3eb5d302dd74d07d35ad53180f7f91c69b58473e48b510aae90567f2bb90f", size = 1069986 }, - { url = "https://files.pythonhosted.org/packages/c7/70/68c4d51809a558784b822d7d6e2469696d3efd6039f76e6a7b1b4f7a3422/spglib-2.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8cf1f4082d8685686d7b3cf8d6ade4182ba09f13cc49eb2481201c0aa4579c9", size = 1075722 }, - { url = "https://files.pythonhosted.org/packages/d6/43/941c82f6d0665cd6f2af29a4547b24e5e06367bec2e2b73ab903c62674b7/spglib-2.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:b16ffc3497736263a53b629768ec8aae707d595bbd702deac3a6dd39e045537b", size = 300736 }, - { url = "https://files.pythonhosted.org/packages/c9/06/c52cc06a44b265d49bf8e006c45de82de1aa6fbad113e9b84bb6e7f4e8b6/spglib-2.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d9d812eea06e09a1f725755f21efa7451c48636cd24abb64ffa2cd82b8003dd", size = 1064065 }, - { url = "https://files.pythonhosted.org/packages/ca/41/0ea6f102558c70e8d86a7127a8cc6b1a5cd765931b2baba8b82d66a4df93/spglib-2.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c36c549442d6e422c932f528dff13af5eb766a5d1985d1d14d65777b1d69f136", size = 1052797 }, - { url = "https://files.pythonhosted.org/packages/22/9b/66891820345f06de8bd0723f9ea075ed62be40eda8d7a0a56b93d9dbf978/spglib-2.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67c67a3457dcafd8c533b2c3bebd2f25dcdbef3d7b6ec122f1e983218e0cdeee", size = 1069984 }, - { url = "https://files.pythonhosted.org/packages/b6/61/f301b774e5cdbc9b618d9946eaa269d8e563ccad06a34c0bd33f276be8db/spglib-2.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b2f6085d5f7d8fff63055fdea2955e9667f07934263f23f8db12d667228c2a2", size = 1075722 }, - { url = "https://files.pythonhosted.org/packages/b6/27/4412242308119edef9f525afdc17af91560e64945af299676538576b4848/spglib-2.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:d5bc51265dc3a4ca77026f668a1884427d1c7f5f32669948336105a71bde745b", size = 300719 }, - { url = "https://files.pythonhosted.org/packages/cd/62/b0147f156841fc361657393b644c096e4daa4ecd92b0c28d7026e102e977/spglib-2.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2fe0014743694bed8fad0c21df0083086dc8aa9a6f61106fc1831edb9e67d260", size = 1064057 }, - { url = "https://files.pythonhosted.org/packages/a6/f6/6eb33d67df543eca3038adb26f59b6309ee42b1cbf9365acc1b5ca587fad/spglib-2.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:80fc33a21df2097d5f2182550719f761b3c3230e60bfa5f91dcf5683dc44d6b0", size = 1052792 }, - { url = "https://files.pythonhosted.org/packages/63/d4/411dc94bba3e1ccff68c23b3a6b858aa75991f4d8af4e9a81fa6fe2719b8/spglib-2.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cb174c6e0d3e2f824a5b4c0f46c2460ce9052c5ef88909058fe982885e47939", size = 1069956 }, - { url = "https://files.pythonhosted.org/packages/14/c3/e90b94178e01e3af7b54c245216bcc3910f01dc2ec5ca7579c43ad3acdf9/spglib-2.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7b0b73ad5a352cd1e0544631b3ab98980a366e2b1bd7c804ab8c3f6ea45a6d8", size = 1075752 }, - { url = "https://files.pythonhosted.org/packages/95/5a/a4854a97c7e5e693bd6fd31212a5b3e66386847c89f984947f2113253fd3/spglib-2.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f3bd027c40b74cc5297de3898d4badee32f8e90d24ac0449cd4266ee5111ba3", size = 300721 }, - { url = "https://files.pythonhosted.org/packages/4c/40/7f9e92e08835a9e3fd61ab8b0fb46a86725bf57064516d9e8ca82e208322/spglib-2.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d419819ee66e1359fac9fd661de9a416842c764ceb4d0ab851c7307cc46ebabe", size = 1064061 }, - { url = "https://files.pythonhosted.org/packages/1d/b1/89a98bbec3afab600c3533630587306cee9decbe754ea8a9844ada93633f/spglib-2.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ebedc8fb06d1cc43f2c2a267a728116736b701c3458e3b8d87fec9b9d884d49", size = 1052798 }, - { url = "https://files.pythonhosted.org/packages/45/5e/7bc170c3786d89623aa10e3128bd5eab831f48b7681424c62dab068acc62/spglib-2.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bde949ed51f975dcc78b00ace7bcb693b9f1fa8ae66f2e2d7ed344d6929eaaf", size = 1069980 }, - { url = "https://files.pythonhosted.org/packages/54/d0/6e1d4bf22ac47a8d780f60bb8c7b59861df9ae7cec7dd539ec8e68c23b9d/spglib-2.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b1482f6bc4cc73bff84d1a7eb7a7823b2c4d7b0245f8c694efa88bd3f6bddd5", size = 1075724 }, - { url = "https://files.pythonhosted.org/packages/63/ae/6f1301b566d3b04b379434c5c00397ef86be362c1bcd5b96267e88178a29/spglib-2.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:af3e2f58a1b16cba25838e844829e3f94a7ddff8297690837c9b875f50458690", size = 300772 }, -] - -[[package]] -name = "structlog" -version = "24.4.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/78/a3/e811a94ac3853826805253c906faa99219b79951c7d58605e89c79e65768/structlog-24.4.0.tar.gz", hash = "sha256:b27bfecede327a6d2da5fbc96bd859f114ecc398a6389d664f62085ee7ae6fc4", size = 1348634 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/65/813fc133609ebcb1299be6a42e5aea99d6344afb35ccb43f67e7daaa3b92/structlog-24.4.0-py3-none-any.whl", hash = "sha256:597f61e80a91cc0749a9fd2a098ed76715a1c8a01f73e336b746504d1aad7610", size = 67180 }, -] - -[[package]] -name = "sympy" -version = "1.13.3" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "mpmath" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/11/8a/5a7fd6284fa8caac23a26c9ddf9c30485a48169344b4bd3b0f02fef1890f/sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9", size = 7533196 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/99/ff/c87e0622b1dadea79d2fb0b25ade9ed98954c9033722eb707053d310d4f3/sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73", size = 6189483 }, -] - -[[package]] -name = "tabulate" -version = "0.9.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 }, -] - -[[package]] -name = "tenacity" -version = "9.0.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/94/91fccdb4b8110642462e653d5dcb27e7b674742ad68efd146367da7bdb10/tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b", size = 47421 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/cb/b86984bed139586d01532a587464b5805f12e397594f19f931c4c2fbfa61/tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539", size = 28169 }, -] - -[[package]] -name = "threadpoolctl" -version = "3.5.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bd/55/b5148dcbf72f5cde221f8bfe3b6a540da7aa1842f6b491ad979a6c8b84af/threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107", size = 41936 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/2c/ffbf7a134b9ab11a67b0cf0726453cedd9c5043a4fe7a35d1cefa9a1bcfb/threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467", size = 18414 }, -] - -[[package]] -name = "tomli" -version = "2.2.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, - { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, - { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, - { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, - { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, - { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, - { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, - { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, - { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, - { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, - { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, - { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, - { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, - { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, - { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, - { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, - { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, - { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, - { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, - { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, - { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, - { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, - { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, - { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, - { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, - { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, - { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, - { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, - { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, - { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, -] - -[[package]] -name = "toposort" -version = "1.10" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/69/19/8e955d90985ecbd3b9adb2a759753a6840da2dff3c569d412b2c9217678b/toposort-1.10.tar.gz", hash = "sha256:bfbb479c53d0a696ea7402601f4e693c97b0367837c8898bc6471adfca37a6bd", size = 11132 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/17/57b444fd314d5e1593350b9a31d000e7411ba8e17ce12dc7ad54ca76b810/toposort-1.10-py3-none-any.whl", hash = "sha256:cbdbc0d0bee4d2695ab2ceec97fe0679e9c10eab4b2a87a9372b929e70563a87", size = 8500 }, -] - -[[package]] -name = "tqdm" -version = "4.67.1" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "colorama", marker = "platform_system == 'Windows'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, -] - -[[package]] -name = "typish" -version = "1.9.3" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/d6/3f56c9c0c12adf61dfcf4ed5c8ffd2c431db8dd85592067a57e8e1968565/typish-1.9.3-py3-none-any.whl", hash = "sha256:03cfee5e6eb856dbf90244e18f4e4c41044c8790d5779f4e775f63f982e2f896", size = 45063 }, -] - -[[package]] -name = "tzdata" -version = "2024.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/34/943888654477a574a86a98e9896bae89c7aa15078ec29f490fef2f1e5384/tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", size = 193282 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 }, -] - -[[package]] -name = "uncertainties" -version = "3.2.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a0/b0/f926a3faf468b9784bdecb8d9328b531743937ead284b2e8d406d96e8b0f/uncertainties-3.2.2.tar.gz", hash = "sha256:e62c86fdc64429828229de6ab4e11466f114907e6bd343c077858994cc12e00b", size = 143865 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/fc/97711d2a502881d871e3cf2d2645e21e7f8e4d4fd9a56937557790cade6a/uncertainties-3.2.2-py3-none-any.whl", hash = "sha256:fd8543355952f4052786ed4150acaf12e23117bd0f5bd03ea07de466bce646e7", size = 58266 }, -] - -[[package]] -name = "unidecode" -version = "1.3.2" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/a6/93288318cfae2fa0ca978dfe6bb94b22b7e9a9e98b6149a4af00b1e76ee8/Unidecode-1.3.2.tar.gz", hash = "sha256:669898c1528912bcf07f9819dc60df18d057f7528271e31f8ec28cc88ef27504", size = 191917 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/3a/3c35e04ea05724f29c77bf5c7a27cf0c80310483655bfdc2c1c5d1ab36b6/Unidecode-1.3.2-py3-none-any.whl", hash = "sha256:215fe33c9d1c889fa823ccb66df91b02524eb8cc8c9c80f9c5b8129754d27829", size = 235682 }, -] - -[[package]] -name = "urllib3" -version = "1.26.20" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/e8/6ff5e6bc22095cfc59b6ea711b687e2b7ed4bdb373f7eeec370a97d7392f/urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32", size = 307380 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/cf/8435d5a7159e2a9c83a95896ed596f68cf798005fe107cc655b5c5c14704/urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e", size = 144225 }, -] - -[[package]] -name = "wrapt" -version = "1.17.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/a1/fc03dca9b0432725c2e8cdbf91a349d2194cf03d8523c124faebe581de09/wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801", size = 55542 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/99/f9/85220321e9bb1a5f72ccce6604395ae75fcb463d87dad0014dc1010bd1f1/wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8", size = 38766 }, - { url = "https://files.pythonhosted.org/packages/ff/71/ff624ff3bde91ceb65db6952cdf8947bc0111d91bd2359343bc2fa7c57fd/wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d", size = 83262 }, - { url = "https://files.pythonhosted.org/packages/9f/0a/814d4a121a643af99cfe55a43e9e6dd08f4a47cdac8e8f0912c018794715/wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df", size = 74990 }, - { url = "https://files.pythonhosted.org/packages/cd/c7/b8c89bf5ca5c4e6a2d0565d149d549cdb4cffb8916d1d1b546b62fb79281/wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d", size = 82712 }, - { url = "https://files.pythonhosted.org/packages/19/7c/5977aefa8460906c1ff914fd42b11cf6c09ded5388e46e1cc6cea4ab15e9/wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea", size = 81705 }, - { url = "https://files.pythonhosted.org/packages/ae/e7/233402d7bd805096bb4a8ec471f5a141421a01de3c8c957cce569772c056/wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb", size = 74636 }, - { url = "https://files.pythonhosted.org/packages/93/81/b6c32d8387d9cfbc0134f01585dee7583315c3b46dfd3ae64d47693cd078/wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301", size = 81299 }, - { url = "https://files.pythonhosted.org/packages/d1/c3/1fae15d453468c98f09519076f8d401b476d18d8d94379e839eed14c4c8b/wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22", size = 36425 }, - { url = "https://files.pythonhosted.org/packages/c6/f4/77e0886c95556f2b4caa8908ea8eb85f713fc68296a2113f8c63d50fe0fb/wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575", size = 38748 }, - { url = "https://files.pythonhosted.org/packages/0e/40/def56538acddc2f764c157d565b9f989072a1d2f2a8e384324e2e104fc7d/wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a", size = 38766 }, - { url = "https://files.pythonhosted.org/packages/89/e2/8c299f384ae4364193724e2adad99f9504599d02a73ec9199bf3f406549d/wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed", size = 83730 }, - { url = "https://files.pythonhosted.org/packages/29/ef/fcdb776b12df5ea7180d065b28fa6bb27ac785dddcd7202a0b6962bbdb47/wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489", size = 75470 }, - { url = "https://files.pythonhosted.org/packages/55/b5/698bd0bf9fbb3ddb3a2feefbb7ad0dea1205f5d7d05b9cbab54f5db731aa/wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9", size = 83168 }, - { url = "https://files.pythonhosted.org/packages/ce/07/701a5cee28cb4d5df030d4b2649319e36f3d9fdd8000ef1d84eb06b9860d/wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339", size = 82307 }, - { url = "https://files.pythonhosted.org/packages/42/92/c48ba92cda6f74cb914dc3c5bba9650dc80b790e121c4b987f3a46b028f5/wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d", size = 75101 }, - { url = "https://files.pythonhosted.org/packages/8a/0a/9276d3269334138b88a2947efaaf6335f61d547698e50dff672ade24f2c6/wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b", size = 81835 }, - { url = "https://files.pythonhosted.org/packages/b9/4c/39595e692753ef656ea94b51382cc9aea662fef59d7910128f5906486f0e/wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346", size = 36412 }, - { url = "https://files.pythonhosted.org/packages/63/bb/c293a67fb765a2ada48f48cd0f2bb957da8161439da4c03ea123b9894c02/wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a", size = 38744 }, - { url = "https://files.pythonhosted.org/packages/85/82/518605474beafff11f1a34759f6410ab429abff9f7881858a447e0d20712/wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569", size = 38904 }, - { url = "https://files.pythonhosted.org/packages/80/6c/17c3b2fed28edfd96d8417c865ef0b4c955dc52c4e375d86f459f14340f1/wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504", size = 88622 }, - { url = "https://files.pythonhosted.org/packages/4a/11/60ecdf3b0fd3dca18978d89acb5d095a05f23299216e925fcd2717c81d93/wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451", size = 80920 }, - { url = "https://files.pythonhosted.org/packages/d2/50/dbef1a651578a3520d4534c1e434989e3620380c1ad97e309576b47f0ada/wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1", size = 89170 }, - { url = "https://files.pythonhosted.org/packages/44/a2/78c5956bf39955288c9e0dd62e807b308c3aa15a0f611fbff52aa8d6b5ea/wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106", size = 86748 }, - { url = "https://files.pythonhosted.org/packages/99/49/2ee413c78fc0bdfebe5bee590bf3becdc1fab0096a7a9c3b5c9666b2415f/wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada", size = 79734 }, - { url = "https://files.pythonhosted.org/packages/c0/8c/4221b7b270e36be90f0930fe15a4755a6ea24093f90b510166e9ed7861ea/wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4", size = 87552 }, - { url = "https://files.pythonhosted.org/packages/4c/6b/1aaccf3efe58eb95e10ce8e77c8909b7a6b0da93449a92c4e6d6d10b3a3d/wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635", size = 36647 }, - { url = "https://files.pythonhosted.org/packages/b3/4f/243f88ac49df005b9129194c6511b3642818b3e6271ddea47a15e2ee4934/wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7", size = 38830 }, - { url = "https://files.pythonhosted.org/packages/67/9c/38294e1bb92b055222d1b8b6591604ca4468b77b1250f59c15256437644f/wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181", size = 38904 }, - { url = "https://files.pythonhosted.org/packages/78/b6/76597fb362cbf8913a481d41b14b049a8813cd402a5d2f84e57957c813ae/wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393", size = 88608 }, - { url = "https://files.pythonhosted.org/packages/bc/69/b500884e45b3881926b5f69188dc542fb5880019d15c8a0df1ab1dfda1f7/wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4", size = 80879 }, - { url = "https://files.pythonhosted.org/packages/52/31/f4cc58afe29eab8a50ac5969963010c8b60987e719c478a5024bce39bc42/wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b", size = 89119 }, - { url = "https://files.pythonhosted.org/packages/aa/9c/05ab6bf75dbae7a9d34975fb6ee577e086c1c26cde3b6cf6051726d33c7c/wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721", size = 86778 }, - { url = "https://files.pythonhosted.org/packages/0e/6c/4b8d42e3db355603d35fe5c9db79c28f2472a6fd1ccf4dc25ae46739672a/wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90", size = 79793 }, - { url = "https://files.pythonhosted.org/packages/69/23/90e3a2ee210c0843b2c2a49b3b97ffcf9cad1387cb18cbeef9218631ed5a/wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a", size = 87606 }, - { url = "https://files.pythonhosted.org/packages/5f/06/3683126491ca787d8d71d8d340e775d40767c5efedb35039d987203393b7/wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045", size = 36651 }, - { url = "https://files.pythonhosted.org/packages/f1/bc/3bf6d2ca0d2c030d324ef9272bea0a8fdaff68f3d1fa7be7a61da88e51f7/wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838", size = 38835 }, - { url = "https://files.pythonhosted.org/packages/ce/b5/251165c232d87197a81cd362eeb5104d661a2dd3aa1f0b33e4bf61dda8b8/wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b", size = 40146 }, - { url = "https://files.pythonhosted.org/packages/89/33/1e1bdd3e866eeb73d8c4755db1ceb8a80d5bd51ee4648b3f2247adec4e67/wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379", size = 113444 }, - { url = "https://files.pythonhosted.org/packages/9f/7c/94f53b065a43f5dc1fbdd8b80fd8f41284315b543805c956619c0b8d92f0/wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d", size = 101246 }, - { url = "https://files.pythonhosted.org/packages/62/5d/640360baac6ea6018ed5e34e6e80e33cfbae2aefde24f117587cd5efd4b7/wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f", size = 109320 }, - { url = "https://files.pythonhosted.org/packages/e3/cf/6c7a00ae86a2e9482c91170aefe93f4ccda06c1ac86c4de637c69133da59/wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c", size = 110193 }, - { url = "https://files.pythonhosted.org/packages/cd/cc/aa718df0d20287e8f953ce0e2f70c0af0fba1d3c367db7ee8bdc46ea7003/wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b", size = 100460 }, - { url = "https://files.pythonhosted.org/packages/f7/16/9f3ac99fe1f6caaa789d67b4e3c562898b532c250769f5255fa8b8b93983/wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab", size = 106347 }, - { url = "https://files.pythonhosted.org/packages/64/85/c77a331b2c06af49a687f8b926fc2d111047a51e6f0b0a4baa01ff3a673a/wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf", size = 37971 }, - { url = "https://files.pythonhosted.org/packages/05/9b/b2469f8be9efed24283fd7b9eeb8e913e9bc0715cf919ea8645e428ab7af/wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a", size = 40755 }, - { url = "https://files.pythonhosted.org/packages/89/03/518069f0708573c02cbba3a3e452be3642dc7d984d0a03a47e0850e2fb05/wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1", size = 38765 }, - { url = "https://files.pythonhosted.org/packages/60/01/12dd81522f8c1c953e98e2cbf356ff44fbb06ef0f7523cd622ac06ad7f03/wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c", size = 83012 }, - { url = "https://files.pythonhosted.org/packages/c4/2d/9853fe0009271b2841f839eb0e707c6b4307d169375f26c58812ecf4fd71/wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578", size = 74759 }, - { url = "https://files.pythonhosted.org/packages/94/5c/03c911442b01b50e364572581430e12f82c3f5ea74d302907c1449d7ba36/wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33", size = 82540 }, - { url = "https://files.pythonhosted.org/packages/52/e0/ef637448514295a6b3a01cf1dff417e081e7b8cf1eb712839962459af1f6/wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad", size = 81461 }, - { url = "https://files.pythonhosted.org/packages/7f/44/8b7d417c3aae3a35ccfe361375ee3e452901c91062e5462e1aeef98255e8/wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9", size = 74380 }, - { url = "https://files.pythonhosted.org/packages/af/a9/e65406a9c3a99162055efcb6bf5e0261924381228c0a7608066805da03df/wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0", size = 81057 }, - { url = "https://files.pythonhosted.org/packages/55/0c/111d42fb658a2f9ed7024cd5e57c08521d61646a256a3946db7d500c1551/wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88", size = 36415 }, - { url = "https://files.pythonhosted.org/packages/00/33/e7b14a7c06cedfaae064f34e95c95350de7cc10187ac173743e30a956b30/wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977", size = 38742 }, - { url = "https://files.pythonhosted.org/packages/4b/d9/a8ba5e9507a9af1917285d118388c5eb7a81834873f45df213a6fe923774/wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371", size = 23592 }, -] - -[[package]] -name = "xarray" -version = "2024.7.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -dependencies = [ - { name = "numpy" }, - { name = "packaging" }, - { name = "pandas" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/84/e8/8ee12706df0d34ad04b3737621a73432458d47bc8abfbd6f049e51ca89c3/xarray-2024.7.0.tar.gz", hash = "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638", size = 3728663 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/45/95/233e1f9c939f5ba314297315df709e6a5e823bf3cade7211991b15aa65d2/xarray-2024.7.0-py3-none-any.whl", hash = "sha256:1b0fd51ec408474aa1f4a355d75c00cc1c02bd425d97b2c2e551fd21810e7f64", size = 1176466 }, -] - -[[package]] -name = "xmltodict" -version = "0.13.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/39/0d/40df5be1e684bbaecdb9d1e0e40d5d482465de6b00cbb92b84ee5d243c7f/xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56", size = 33813 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/94/db/fd0326e331726f07ff7f40675cd86aa804bfd2e5016c727fa761c934990e/xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852", size = 9971 }, -] - -[[package]] -name = "zipp" -version = "3.21.0" -source = { registry = "https://gitlab.mpcdf.mpg.de/api/v4/projects/2187/packages/pypi/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/50/bad581df71744867e9468ebd0bcd6505de3b275e06f202c2cb016e3ff56f/zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4", size = 24545 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931", size = 9630 }, -] From ad98a3870a88f838e3a7cd312c055092d598960d Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:15:02 +0100 Subject: [PATCH 13/93] Make integration_time as hdf5reference --- src/nomad_measurements/xrd/schema.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index d43af39b..bd20e2d2 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -781,6 +781,10 @@ class XRDResult1D_HDF5(XRDResult1D): type=HDF5Reference, description='The chi range of the diffractogram', ) + integration_time = Quantity( + type=HDF5Reference, + description='Integration time per channel', + ) class XRDResultRSM_HDF5(XRDResultRSM): From 1072dc043b143d8ea67efe78c817f65a77522af5 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:17:00 +0100 Subject: [PATCH 14/93] Reset results (refactor) --- src/nomad_measurements/xrd/schema.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index bd20e2d2..59cd4029 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1008,22 +1008,24 @@ def write_xrd_data( if scan_type not in ['line', 'rsm']: raise NotImplementedError(f'Scan type `{scan_type}` is not supported.') - # removing exisiting results for backwards compatibility - if self.results: - self.results = [] # Create a new result section + results = [] + result = None if scan_type == 'line': result = XRDResult1D_HDF5() elif scan_type == 'rsm': result = XRDResultRSM_HDF5() - result.scan_axis = metadata_dict.get('scan_axis', None) - result.integration_time = xrd_dict.get('countTime', None) - result.intensity = xrd_dict.get('intensity', None) - result.two_theta = xrd_dict.get('2Theta', None) - result.omega = xrd_dict.get('Omega', None) - result.chi = xrd_dict.get('Chi', None) - result.phi = xrd_dict.get('Phi', None) - result.normalize(archive, logger) + + if result is not None: + result.intensity = xrd_dict.get('intensity', None) + result.two_theta = xrd_dict.get('2Theta', None) + result.omega = xrd_dict.get('Omega', None) + result.chi = xrd_dict.get('Chi', None) + result.phi = xrd_dict.get('Phi', None) + result.scan_axis = metadata_dict.get('scan_axis', None) + result.integration_time = xrd_dict.get('countTime', None) + result.normalize(archive, logger) + results.append(result) source = XRayTubeSource( xray_tube_material=source_dict.get('anode_material', None), @@ -1035,7 +1037,6 @@ def write_xrd_data( xray_tube_current=source_dict.get('current', None), ) source.normalize(archive, logger) - xrd_settings = XRDSettings(source=source) xrd_settings.normalize(archive, logger) @@ -1048,10 +1049,11 @@ def write_xrd_data( samples.append(sample) xrd = ELNXRayDiffraction( - results=[result], + results=results, xrd_settings=xrd_settings, samples=samples, ) + merge_sections(self, xrd, logger) def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): From 65c8659cbd29797b201d7dca6eb7e4ff14eb8b99 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:17:21 +0100 Subject: [PATCH 15/93] Add backward compatibility --- src/nomad_measurements/xrd/schema.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 59cd4029..3025dca6 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1056,6 +1056,14 @@ def write_xrd_data( merge_sections(self, xrd, logger) + def backward_compatibility(self): + """ + Method for backward compatibility. + """ + # Migration to using HFD5References: removing exisiting results + if self.results: + self.results = [] + def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ The normalize function of the `ELNXRayDiffraction` section. @@ -1065,6 +1073,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): normalized. logger (BoundLogger): A structlog logger. """ + self.backward_compatibility() if self.data_file is not None: read_function, write_function = self.get_read_write_functions() if read_function is None or write_function is None: From d5445ff85e517c804ab3359680a4cd794ea51438 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:20:56 +0100 Subject: [PATCH 16/93] Refactor reader --- src/nomad_measurements/xrd/schema.py | 39 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 3025dca6..03f3d886 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -961,31 +961,30 @@ def get_read_write_functions(self) -> tuple[Callable, Callable]: return self.read_raw_file, self.write_xrd_data return None, None - def read_raw_file(self) -> dict[str, Any]: + def read_raw_file(self, file_name, archive, logger) -> dict[str, Any]: """ Read method for reading the raw data from the data file. Returns: Dict[str, Any]: A dictionary with the raw data. """ - data_dict = collections.defaultdict(dict, None) - if self.data_file.endswith('.rasx'): - data_dict.update(read_rigaku_rasx(self.data_file)) - if self.data_file.endswith('.xrdml'): - data_dict.update(read_panalytical_xrdml(self.data_file)) - if self.data_file.endswith('.brml'): - data_dict.update(read_bruker_brml(self.data_file)) - - # create a nexus file and populate it with the data - # if that fails, create a HDF5 file instead - # update the results to have paths to the nexus file sections - # add a reference to nexus file entry - - # scan_type = xrd_dict.get('metadata', {}).get('scan_type', None) - # if self.generate_nexus_file and self.data_file is not None: - # write_nx_section_and_create_file(archive, logger, scan_type=scan_type) - - return data_dict + xrd_dict = AttrDict(lambda: None) + if file_name.endswith('.rasx'): + xrd_dict.update(read_rigaku_rasx(file_name)) + if file_name.endswith('.xrdml'): + xrd_dict.update(read_panalytical_xrdml(file_name)) + if file_name.endswith('.brml'): + xrd_dict.update(read_bruker_brml(file_name)) + + try: + raise NotImplementedError('Creating a nexus file is not yet implemented.') + except Exception as e: + logger.warning( + f'Error creating nexus file: {e}.\n Creating h5 file instead.' + ) + # TODO + + return xrd_dict def write_xrd_data( self, @@ -1082,7 +1081,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) else: with archive.m_context.raw_file(self.data_file) as file: - xrd_dict = read_function(file.name, logger) + xrd_dict = read_function(file.name, archive, logger) write_function(xrd_dict, archive, logger) super().normalize(archive, logger) if not self.results: From 6f16f44681ba1df73e121769eaf73434e39f2478 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:21:33 +0100 Subject: [PATCH 17/93] add missing imports --- src/nomad_measurements/xrd/schema.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 03f3d886..7a260e03 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -15,12 +15,14 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import collections from typing import ( TYPE_CHECKING, Any, Callable, ) -import collections + +import h5py import numpy as np import plotly.express as px from fairmat_readers_xrd import ( @@ -32,6 +34,9 @@ ArchiveSection, EntryData, ) +from nomad.datamodel.hdf5 import ( + HDF5Reference, +) from nomad.datamodel.metainfo.annotations import ( ELNAnnotation, ELNComponentEnum, From d170d303c260d2823d282fc057d5f2aa5254a800 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:22:38 +0100 Subject: [PATCH 18/93] AttrDict class --- src/nomad_measurements/utils.py | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 4f7dcc94..2d7b1b2d 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -15,6 +15,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import collections import os.path from typing import ( TYPE_CHECKING, @@ -185,3 +186,36 @@ def set_data(obj, **kwargs): for key, value in kwargs.items(): if hasattr(obj, key): setattr(obj, key, value) + + +class AttrDict(collections.defaultdict): + """ + A dictionary subclass that allows attribute-style access to dictionary keys, + including nested dictionaries. It uses defaultdict as the base class, so it can be + initialized with a default factory function. + """ + + # TODO Add a + def __init__(self, default_factory=None, *args, **kwargs): + super().__init__(default_factory, *args, **kwargs) + for key, value in self.items(): + if isinstance(value, dict): + self[key] = AttrDict(default_factory, value) + self.default_factory = default_factory + + def __getattr__(self, item): + try: + return self[item] + except KeyError as e: + raise AttributeError(f"'AttrDict' object has no attribute '{item}'") from e + + def __setattr__(self, key, value): + if isinstance(value, dict): + value = AttrDict(self.default_factory, value) + self[key] = value + + def __delattr__(self, item): + try: + del self[item] + except KeyError as e: + raise AttributeError(f"'AttrDict' object has no attribute '{item}'") from e From 4f7bc837185ea3221166de9c28728298b346910c Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:24:17 +0100 Subject: [PATCH 19/93] Make concept map global --- src/nomad_measurements/xrd/nx.py | 90 +++++++++++++++++--------------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/src/nomad_measurements/xrd/nx.py b/src/nomad_measurements/xrd/nx.py index e1b41fcf..ef231532 100644 --- a/src/nomad_measurements/xrd/nx.py +++ b/src/nomad_measurements/xrd/nx.py @@ -27,6 +27,54 @@ ) +CONCEPT_MAP = OrderedDict( + { + # Mapping data in raw_data: data in the raw file from the instrument + # Make sure to defines the mapping for magnitude before the mapping for units + '/ENTRY[entry]/experiment_result/intensity': 'raw_data.intensity.magnitude', + '/ENTRY[entry]/experiment_result/two_theta': 'raw_data.2Theta.magnitude', + '/ENTRY[entry]/experiment_result/two_theta/@units': 'raw_data.2Theta.units', + '/ENTRY[entry]/experiment_result/omega': 'raw_data.Omega.magnitude', + '/ENTRY[entry]/experiment_result/omega/@units': 'raw_data.Omega.units', + '/ENTRY[entry]/experiment_result/chi': 'raw_data.Chi.magnitude', + '/ENTRY[entry]/experiment_result/chi/@units': 'raw_data.Chi.units', + '/ENTRY[entry]/experiment_result/phi': 'raw_data.Phi.magnitude', + '/ENTRY[entry]/experiment_result/phi/@units': 'raw_data.Phi.units', + '/ENTRY[entry]/experiment_config/count_time': 'raw_data.countTime.magnitude', + '/ENTRY[entry]/experiment_config/count_time/@units': 'raw_data.countTime.units', + 'line': { + '/ENTRY[entry]/experiment_result/q_norm': 'raw_data.q_norm.magnitude', + '/ENTRY[entry]/experiment_result/q_norm/@units': 'raw_data.q_norm.units', + }, + 'rsm': { + '/ENTRY[entry]/experiment_result/q_parallel': 'raw_data.q_parallel', + '/ENTRY[entry]/experiment_result/q_parallel/@units': 'raw_data.q_parallel.units', + '/ENTRY[entry]/experiment_result/q_perpendicular': 'raw_data.q_perpendicular.magnitude', + '/ENTRY[entry]/experiment_result/q_perpendicular/@units': 'raw_data.q_perpendicular.units', + }, + # Mapping data in NOMAD archive + '/ENTRY[entry]/method': 'archive.data.method', + '/ENTRY[entry]/measurement_type': 'archive.data.diffraction_method_name', + '/ENTRY[entry]/INSTRUMENT[instrument]/DETECTOR[detector]/scan_axis': ( + 'archive.data.results[0].scan_axis' + ), + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_material': 'archive.data.xrd_settings.source.xray_tube_material', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_current': 'archive.data.xrd_settings.source.xray_tube_current.magnitude', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_current/@units': 'archive.data.xrd_settings.source.xray_tube_current.units', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_voltage': 'archive.data.xrd_settings.source.xray_tube_voltage.magnitude', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_voltage/@units': 'archive.data.xrd_settings.source.xray_tube_voltage.units', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_one': 'archive.data.xrd_settings.source.kalpha_one.magnitude', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_one/@units': 'archive.data.xrd_settings.source.kalpha_one.units', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_two': 'archive.data.xrd_settings.source.kalpha_two.magnitude', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_two/@units': 'archive.data.xrd_settings.source.kalpha_two.units', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/ratio_k_alphatwo_k_alphaone': 'archive.data.xrd_settings.source.ratio_kalphatwo_kalphaone', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/kbeta': 'archive.data.xrd_settings.source.kbeta.magnitude', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/kbeta/@units': 'archive.data.xrd_settings.source.kbeta.units', + } +) + + + def walk_through_object(parent_obj, attr_chain, default=None): """ Walk though the object until reach the leaf. @@ -64,47 +112,7 @@ def connect_concepts(template, archive: 'EntryArchive', scan_type: str): # noqa scan_type (str): Name of the scan type such as line and RSM. """ - # General concepts - # ruff: noqa: E501 - concept_map = { - '/ENTRY[entry]/method': 'archive.data.method', - '/ENTRY[entry]/measurement_type': 'archive.data.diffraction_method_name', - '/ENTRY[entry]/experiment_result/intensity': 'archive.data.results[0].intensity.magnitude', - '/ENTRY[entry]/experiment_result/two_theta': 'archive.data.results[0].two_theta.magnitude', - '/ENTRY[entry]/experiment_result/two_theta/@units': 'archive.data.results[0].two_theta.units', - '/ENTRY[entry]/experiment_result/omega': 'archive.data.results[0].omega.magnitude', - '/ENTRY[entry]/experiment_result/omega/@units': 'archive.data.results[0].omega.units', - '/ENTRY[entry]/experiment_result/chi': 'archive.data.results[0].chi.magnitude', - '/ENTRY[entry]/experiment_result/chi/@units': 'archive.data.results[0].chi.units', - '/ENTRY[entry]/experiment_result/phi': 'archive.data.results[0].phi.magnitude', - '/ENTRY[entry]/experiment_result/phi/@units': 'archive.data.results[0].phi.units', - '/ENTRY[entry]/INSTRUMENT[instrument]/DETECTOR[detector]/scan_axis': 'archive.data.results[0].scan_axis', - '/ENTRY[entry]/experiment_config/count_time': 'archive.data.results[0].count_time.magnitude', - 'line': '', # For future implementation - 'rsm': { - '/ENTRY[entry]/experiment_result/q_parallel': 'archive.data.results[0].q_parallel', - '/ENTRY[entry]/experiment_result/q_parallel/@units': 'archive.data.results[0].q_parallel.units', - '/ENTRY[entry]/experiment_result/q_perpendicular': 'archive.data.results[0].q_perpendicular.magnitude', - '/ENTRY[entry]/experiment_result/q_perpendicular/@units': 'archive.data.results[0].q_perpendicular.units', - '/ENTRY[entry]/experiment_result/q_norm': 'archive.data.results[0].q_norm.magnitude', - '/ENTRY[entry]/experiment_result/q_norm/@units': 'archive.data.results[0].q_norm.units', - }, - # Source - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_material': 'archive.data.xrd_settings.source.xray_tube_material', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_current': 'archive.data.xrd_settings.source.xray_tube_current.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_current/@units': 'archive.data.xrd_settings.source.xray_tube_current.units', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_voltage': 'archive.data.xrd_settings.source.xray_tube_voltage.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_voltage/@units': 'archive.data.xrd_settings.source.xray_tube_voltage.units', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_one': 'archive.data.xrd_settings.source.kalpha_one.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_one/@units': 'archive.data.xrd_settings.source.kalpha_one.units', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_two': 'archive.data.xrd_settings.source.kalpha_two.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_two/@units': 'archive.data.xrd_settings.source.kalpha_two.units', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/ratio_k_alphatwo_k_alphaone': 'archive.data.xrd_settings.source.ratio_kalphatwo_kalphaone', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/kbeta': 'archive.data.xrd_settings.source.kbeta.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/kbeta/@units': 'archive.data.xrd_settings.source.kbeta.units', - } - - for key, archive_concept in concept_map.items(): + for key, archive_concept in CONCEPT_MAP.items(): if isinstance(archive_concept, dict): if key == scan_type: for sub_key, sub_archive_concept in archive_concept.items(): From a3295b7ef69c23b4d8ffe1154e757ea7443e6b41 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:24:38 +0100 Subject: [PATCH 20/93] Add function to remove nexus annotations in concept map --- src/nomad_measurements/xrd/nx.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/nomad_measurements/xrd/nx.py b/src/nomad_measurements/xrd/nx.py index ef231532..41f12942 100644 --- a/src/nomad_measurements/xrd/nx.py +++ b/src/nomad_measurements/xrd/nx.py @@ -74,6 +74,35 @@ ) +def remove_nexus_annotations(mapping: dict) -> dict: + """ + Remove the nexus related annotations from a keys of concept mapping. + For example: + '/ENTRY[entry]/experiment_result/intensity': 'raw_data.intensity.magnitude' + will be converted to + '/entry/experiment_result/intensity': 'raw_data.intensity.magnitude' + + Args: + mapping: A mapping for the NeXus templates. + + Returns: + dict: A new mapping with the nexus annotations removed. + """ + pattern = r'.*\[.*\]' + new_mapping = OrderedDict() + for key, value in mapping.items(): + if isinstance(value, dict): + new_mapping[key] = remove_nexus_annotations(value) + elif isinstance(value, str): + new_key = '' + for part in key.split('/')[1:]: + if re.match(pattern, part): + new_key += '/' + part.split('[')[0].strip().lower() + else: + new_key += '/' + part + new_mapping[new_key] = value + return new_mapping + def walk_through_object(parent_obj, attr_chain, default=None): """ From 89cdbc9479399d2d9358e5d6e334de7f5dc11dfb Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:26:52 +0100 Subject: [PATCH 21/93] Move try block inside walk_through_object --- src/nomad_measurements/xrd/nx.py | 57 ++++++++++++++------------------ 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/src/nomad_measurements/xrd/nx.py b/src/nomad_measurements/xrd/nx.py index 41f12942..16bc247f 100644 --- a/src/nomad_measurements/xrd/nx.py +++ b/src/nomad_measurements/xrd/nx.py @@ -113,21 +113,24 @@ def walk_through_object(parent_obj, attr_chain, default=None): attr_chain: Dot separated obj chain. default: A value to be returned by default, if not data is found. """ - expected_parts = 2 - if isinstance(attr_chain, str): - parts = attr_chain.split('.', 1) - - if len(parts) == expected_parts: - child_nm, rest_part = parts - if '[' in child_nm: - child_nm, index = child_nm.split('[') - index = int(index[:-1]) - child_obj = getattr(parent_obj, child_nm)[index] + try: + expected_parts = 2 + if isinstance(attr_chain, str): + parts = attr_chain.split('.', 1) + + if len(parts) == expected_parts: + child_nm, rest_part = parts + if '[' in child_nm: + child_nm, index = child_nm.split('[') + index = int(index[:-1]) + child_obj = getattr(parent_obj, child_nm)[index] + else: + child_obj = getattr(parent_obj, child_nm) + return walk_through_object(child_obj, rest_part, default=default) else: - child_obj = getattr(parent_obj, child_nm) - return walk_through_object(child_obj, rest_part, default=default) - else: - return getattr(parent_obj, attr_chain, default) + return getattr(parent_obj, attr_chain, default) + except (AttributeError, IndexError, KeyError, ValueError): + return None def connect_concepts(template, archive: 'EntryArchive', scan_type: str): # noqa: PLR0912 @@ -146,29 +149,19 @@ def connect_concepts(template, archive: 'EntryArchive', scan_type: str): # noqa if key == scan_type: for sub_key, sub_archive_concept in archive_concept.items(): _, arch_attr = sub_archive_concept.split('.', 1) - value = None - try: - value = walk_through_object(archive, arch_attr) - except (AttributeError, IndexError, KeyError, ValueError): - pass - finally: - if value is not None: - template[sub_key] = ( - str(value) if sub_key.endswith('units') else value - ) + value = walk_through_object(archive, arch_attr) + if value is not None: + template[sub_key] = ( + str(value) if sub_key.endswith('units') else value + ) else: continue elif archive_concept: _, arch_attr = archive_concept.split('.', 1) - value = None - try: - value = walk_through_object(archive, arch_attr) + value = walk_through_object(archive, arch_attr) # Use multiple excepts to avoid catching all exceptions - except (AttributeError, IndexError, KeyError, ValueError): - pass - finally: - if value is not None: - template[key] = str(value) if key.endswith('units') else value + if value is not None: + template[key] = str(value) if key.endswith('units') else value template['/ENTRY[entry]/definition'] = 'NXxrd_pan' From 54902f866397962c52a2d744eb521c2715d204fe Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:27:45 +0100 Subject: [PATCH 22/93] Fix imports --- src/nomad_measurements/xrd/nx.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/nomad_measurements/xrd/nx.py b/src/nomad_measurements/xrd/nx.py index 16bc247f..efcd189f 100644 --- a/src/nomad_measurements/xrd/nx.py +++ b/src/nomad_measurements/xrd/nx.py @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import re +from collections import OrderedDict from typing import TYPE_CHECKING from pynxtools import dataconverter From 393c572c8d907348d2efaed749643d204d97d247 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 10:28:52 +0100 Subject: [PATCH 23/93] Add methods for generating hdf5 file --- src/nomad_measurements/xrd/schema.py | 112 +++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 7a260e03..0c39b490 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -73,11 +73,17 @@ NOMADMeasurementsCategory, ) from nomad_measurements.utils import ( + AttrDict, get_bounding_range_2d, get_data, merge_sections, set_data, ) +from nomad_measurements.xrd.nx import ( + CONCEPT_MAP, + remove_nexus_annotations, + walk_through_object, +) if TYPE_CHECKING: import pint @@ -954,6 +960,112 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): component=ELNComponentEnum.EnumEditQuantity, ) + def prepare_hdf5_data( + self, + raw_data: 'AttrDict' = AttrDict(), + archive: 'EntryArchive' = None, + logger: 'BoundLogger' = None, + ): + """ + Prepares data for the HDF5 file. Based on the concept map, the data is extracted + either from the `raw_data` or the `archive`. + + If the data extracted from the raw data is an array, the data is stored in the HDF5 file and the path to the data is + overwritten in the `raw_data` (in-place modification). For example, + {'intensity': array([1, 2, 3])} becomes + {'intensity': '{file_path}{file_name}.h5#intensity'} + and the array [1, 2, 3] is stored in the HDF5 file. + + Args: + raw_data (AttrDict, optional): A dictionary with the raw data from + the instrument. + archive (EntryArchive, optional): A NOMAD archive. + logger (BoundLogger, optional): A structlog logger. + """ + concept_map = remove_nexus_annotations(CONCEPT_MAP) + h5_data_dict = collections.defaultdict(lambda: None) + h5_data_paths = collections.defaultdict(lambda: None) + for h5_key, data_key in concept_map.items(): + if isinstance(data_key, dict): + if h5_key == raw_data.get('metadata', {}).get('scan_type', ''): + h5_data_dict.update( + self.prepare_hdf5_data(data_key, archive, logger) + ) + else: + data_source_type, data_source_path = data_key.split('.', maxsplit=1) + if data_source_type == 'raw_data': + data_source = raw_data + elif data_source_type == 'archive': + data_source = archive + else: + continue + + value = walk_through_object(data_source, data_source_path) + + if value is not None: + h5_data_dict[h5_key] = value + if isinstance(value, np.ndarray) and data_source_type == 'raw_data': + # edit raw_data to contain the path to the data + if data_source_path.endswith('.magnitude'): + data_source_path = data_source_path.rsplit('.', 1)[0] + h5_data_paths[data_source_path] = ( + f'/uploads/{archive.m_context.upload_id}/raw/' + f'{self.auxiliary_hdf5_file}#{h5_key}' + ) + + raw_data.update(h5_data_paths) + + return h5_data_dict + + def update_hdf5_file( + self, + xrd_dict: 'AttrDict', + archive: 'EntryArchive' = None, + logger: 'BoundLogger' = None, + ) -> dict: + """ + TODO make it independent of prepare_hdf5_data + + Args: + xrd_dict (AttrDict): A dictionary with the raw data from the instrument. + archive (EntryArchive, optional): A NOMAD archive. + logger (BoundLogger, optional): A structlog logger. + + Returns: + dict: A dictionary with the raw data. + """ + # create a h5 file if it does not exist + if not self.auxiliary_hdf5_file: + self.auxiliary_hdf5_file = f'{self.data_file}.h5' + + h5_data_dict = self.prepare_hdf5_data(xrd_dict, archive, logger) + + with archive.m_context.raw_file(self.auxiliary_hdf5_file, 'w') as h5file: + with h5py.File(h5file.name, 'w') as h5: + for key, value in h5_data_dict.items(): + value_is_unit = False + if key.endswith('@units'): + value_is_unit = True + key = key.rsplit('/', 1)[0] + group_name, dataset_name = key.rsplit('/', 1) + group = h5.require_group(group_name) + + if value_is_unit: + try: + h5[f'{group_name}/{dataset_name}'].attrs['units'] = str( + value + ) + except KeyError: + logger.error( + f'Could not set units for "{group_name}/{dataset_name}"' + 'as the dataset does not exist.' + ) + else: + group.create_dataset(dataset_name, data=value) + # group.attrs['axes'] = 'time' + # group.attrs['signal'] = 'value' + # group.attrs['NX_class'] = 'NXdata' + def get_read_write_functions(self) -> tuple[Callable, Callable]: """ Method for getting the correct read and write functions for the current data From d2d1d1e7625ed89a6a42c8845dd4d2ad6b1584f1 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 14:50:31 +0100 Subject: [PATCH 24/93] Rename auxiliary file --- src/nomad_measurements/xrd/schema.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 0c39b490..749951d2 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -945,9 +945,9 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): component=ELNComponentEnum.FileEditQuantity, ), ) - auxiliary_hdf5_file = Quantity( + auxiliary_file = Quantity( type=str, - description='Auxiliary HDF5 file containing the raw data', + description='Auxiliary file (like .h5 or .nxs) containing the entry data.', a_eln=ELNAnnotation( component=ELNComponentEnum.FileEditQuantity, ), @@ -1010,7 +1010,7 @@ def prepare_hdf5_data( data_source_path = data_source_path.rsplit('.', 1)[0] h5_data_paths[data_source_path] = ( f'/uploads/{archive.m_context.upload_id}/raw/' - f'{self.auxiliary_hdf5_file}#{h5_key}' + f'{self.auxiliary_file}#{h5_key}' ) raw_data.update(h5_data_paths) @@ -1035,12 +1035,12 @@ def update_hdf5_file( dict: A dictionary with the raw data. """ # create a h5 file if it does not exist - if not self.auxiliary_hdf5_file: - self.auxiliary_hdf5_file = f'{self.data_file}.h5' + if not self.auxiliary_file: + self.auxiliary_file = f'{self.data_file}.h5' h5_data_dict = self.prepare_hdf5_data(xrd_dict, archive, logger) - with archive.m_context.raw_file(self.auxiliary_hdf5_file, 'w') as h5file: + with archive.m_context.raw_file(self.auxiliary_file, 'w') as h5file: with h5py.File(h5file.name, 'w') as h5: for key, value in h5_data_dict.items(): value_is_unit = False From 30caf9990f67be5aeb3068272142a50b3b373e06 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 16:02:09 +0100 Subject: [PATCH 25/93] Expect aux file to be .nxs in the beginning --- src/nomad_measurements/xrd/schema.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 749951d2..b3993888 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1191,6 +1191,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ self.backward_compatibility() if self.data_file is not None: + self.auxiliary_file = f'{self.data_file}.nxs' read_function, write_function = self.get_read_write_functions() if read_function is None or write_function is None: logger.warn( From 2f42f701be7a0a1f7f43063ba5a7c6fb0adabc14 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 16:04:41 +0100 Subject: [PATCH 26/93] Add attributes for hdf5: data_dict, dataset_paths --- src/nomad_measurements/xrd/schema.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index b3993888..411518fb 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -960,6 +960,9 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): component=ELNComponentEnum.EnumEditQuantity, ) + hdf5_data_dict = collections.OrderedDict() + hdf5_dataset_paths = [] + def prepare_hdf5_data( self, raw_data: 'AttrDict' = AttrDict(), From 2fef45756f100c1e3c164339f5dcfae50bbf54ee Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 16:06:35 +0100 Subject: [PATCH 27/93] Method for adding a quantity to hdf5_data_dict --- src/nomad_measurements/xrd/schema.py | 64 +++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 411518fb..48579f4b 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -20,10 +20,12 @@ TYPE_CHECKING, Any, Callable, + Optional, ) import h5py import numpy as np +import pint import plotly.express as px from fairmat_readers_xrd import ( read_bruker_brml, @@ -963,6 +965,44 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): hdf5_data_dict = collections.OrderedDict() hdf5_dataset_paths = [] + def populate_hdf5_data_dict( + self, + key: str, + value: Any, + archive: 'EntryArchive', + ) -> Optional[str]: + """ + Populates the `hdf5_data_dict` with the given key and value. The key used in the + `hd5_data_dict` is picked from the `hdf5_dataset_paths` based on the given key. + + Args: + key (str): The key to be used in the HDF5 file. + value (Any): The value to be stored in the HDF5 file. + archive (EntryArchive): The archive containing the section. + + Returns: + Optional[str]: The path to the dataset in the HDF5 file. + """ + if not self.hdf5_dataset_paths: + return + + # find the corresponding dataset for the given key + for dataset_path in self.hdf5_dataset_paths: + dataset_name = dataset_path.rsplit('/', 1)[1] + if key == dataset_name: + if isinstance(value, pint.Quantity): + self.hdf5_data_dict[dataset_path] = value.magnitude + self.hdf5_data_dict[f'{dataset_path}/@units'] = str(value.units) + else: + self.hdf5_data_dict[dataset_path] = value + + return ( + f'/uploads/{archive.m_context.upload_id}/raw/{self.auxiliary_file}' + '#{dataset_path}' + ) + + return None + def prepare_hdf5_data( self, raw_data: 'AttrDict' = AttrDict(), @@ -1136,13 +1176,25 @@ def write_xrd_data( result = XRDResultRSM_HDF5() if result is not None: - result.intensity = xrd_dict.get('intensity', None) - result.two_theta = xrd_dict.get('2Theta', None) - result.omega = xrd_dict.get('Omega', None) - result.chi = xrd_dict.get('Chi', None) - result.phi = xrd_dict.get('Phi', None) + result.intensity = self.populate_hdf5_data_dict( + 'intensity', xrd_dict.get('intensity', None), archive + ) + result.two_theta = self.populate_hdf5_data_dict( + 'intensity', xrd_dict.get('2Theta', None), archive + ) + result.omega = self.populate_hdf5_data_dict( + 'intensity', xrd_dict.get('Omega', None), archive + ) + result.chi = self.populate_hdf5_data_dict( + 'intensity', xrd_dict.get('Chi', None), archive + ) + result.phi = self.populate_hdf5_data_dict( + 'intensity', xrd_dict.get('Phi', None), archive + ) + result.integration_time = self.populate_hdf5_data_dict( + 'intensity', xrd_dict.get('countTime', None), archive + ) result.scan_axis = metadata_dict.get('scan_axis', None) - result.integration_time = xrd_dict.get('countTime', None) result.normalize(archive, logger) results.append(result) From 893d8190f1c79082f3a7afd2b1690af232bdf84f Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 16:08:42 +0100 Subject: [PATCH 28/93] Abstract out methods for creating files based on hdf5_data_dict --- src/nomad_measurements/xrd/nx.py | 38 +++++------ src/nomad_measurements/xrd/schema.py | 98 ++++++++++++++++++---------- 2 files changed, 81 insertions(+), 55 deletions(-) diff --git a/src/nomad_measurements/xrd/nx.py b/src/nomad_measurements/xrd/nx.py index efcd189f..500ad11a 100644 --- a/src/nomad_measurements/xrd/nx.py +++ b/src/nomad_measurements/xrd/nx.py @@ -76,34 +76,30 @@ ) -def remove_nexus_annotations(mapping: dict) -> dict: +def remove_nexus_annotations(path: str) -> str: """ - Remove the nexus related annotations from a keys of concept mapping. - For example: - '/ENTRY[entry]/experiment_result/intensity': 'raw_data.intensity.magnitude' - will be converted to - '/entry/experiment_result/intensity': 'raw_data.intensity.magnitude' + Remove the nexus related annotations from the dataset path. + For e.g., + '/ENTRY[entry]/experiment_result/intensity' -> '/entry/experiment_result/intensity' Args: - mapping: A mapping for the NeXus templates. + path (str): The dataset path with nexus annotations. Returns: - dict: A new mapping with the nexus annotations removed. + str: The dataset path without nexus annotations. """ + if not path: + return path + pattern = r'.*\[.*\]' - new_mapping = OrderedDict() - for key, value in mapping.items(): - if isinstance(value, dict): - new_mapping[key] = remove_nexus_annotations(value) - elif isinstance(value, str): - new_key = '' - for part in key.split('/')[1:]: - if re.match(pattern, part): - new_key += '/' + part.split('[')[0].strip().lower() - else: - new_key += '/' + part - new_mapping[new_key] = value - return new_mapping + new_path = '' + for part in path.split('/')[1:]: + if re.match(pattern, part): + new_path += '/' + part.split('[')[0].strip().lower() + else: + new_path += '/' + part + new_path = new_path.replace('.nxs', '.h5') + return new_path def walk_through_object(parent_obj, attr_chain, default=None): diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 48579f4b..98cece20 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1060,36 +1060,37 @@ def prepare_hdf5_data( return h5_data_dict - def update_hdf5_file( - self, - xrd_dict: 'AttrDict', - archive: 'EntryArchive' = None, - logger: 'BoundLogger' = None, - ) -> dict: + def create_nx_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ - TODO make it independent of prepare_hdf5_data + Method for creating a NeXus file. Args: - xrd_dict (AttrDict): A dictionary with the raw data from the instrument. - archive (EntryArchive, optional): A NOMAD archive. - logger (BoundLogger, optional): A structlog logger. + archive (EntryArchive): The archive containing the section. + logger (BoundLogger): A structlog logger. + """ + raise NotImplementedError('Method `create_nx_file` is not implemented.') - Returns: - dict: A dictionary with the raw data. + def create_hdf5_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ - # create a h5 file if it does not exist - if not self.auxiliary_file: - self.auxiliary_file = f'{self.data_file}.h5' + TODO make it independent of prepare_hdf5_data - h5_data_dict = self.prepare_hdf5_data(xrd_dict, archive, logger) + Args: + archive (EntryArchive): The archive containing the section. + logger (BoundLogger): A structlog logger. + """ + self.auxiliary_file = f'{self.data_file}.h5' with archive.m_context.raw_file(self.auxiliary_file, 'w') as h5file: with h5py.File(h5file.name, 'w') as h5: - for key, value in h5_data_dict.items(): + for key, value in self.h5_data_dict.items(): + if value is None: + continue + value_is_unit = False if key.endswith('@units'): value_is_unit = True key = key.rsplit('/', 1)[0] + group_name, dataset_name = key.rsplit('/', 1) group = h5.require_group(group_name) @@ -1104,11 +1105,47 @@ def update_hdf5_file( 'as the dataset does not exist.' ) else: - group.create_dataset(dataset_name, data=value) + group.create_dataset( + dataset_name, data=value, compression='gzip' + ) # group.attrs['axes'] = 'time' # group.attrs['signal'] = 'value' # group.attrs['NX_class'] = 'NXdata' + def create_auxiliary_file( + self, + archive: 'EntryArchive', + logger: 'BoundLogger', + ): + """ + Method for creating an auxiliary file. + + Args: + archive (EntryArchive): The archive containing the section. + logger (BoundLogger): A structlog logger. + """ + try: + self.create_nx_file(archive, logger) + except Exception: + logger.warning('Error creating nexus file.\n Creating h5 file instead.') + + # remove nexus related annotations in the dataset paths + for quantity in [ + 'intensity', + 'two_theta', + 'omega', + 'phi', + 'chi', + 'integration_time', + 'q_norm', + 'q_parallel', + 'q_perpendicular', + ]: + if self.get(quantity) is not None: + self[quantity] = remove_nexus_annotations(self.get(quantity)) + + self.create_hdf5_file(archive, logger) + def get_read_write_functions(self) -> tuple[Callable, Callable]: """ Method for getting the correct read and write functions for the current data @@ -1128,23 +1165,15 @@ def read_raw_file(self, file_name, archive, logger) -> dict[str, Any]: Returns: Dict[str, Any]: A dictionary with the raw data. """ - xrd_dict = AttrDict(lambda: None) if file_name.endswith('.rasx'): - xrd_dict.update(read_rigaku_rasx(file_name)) - if file_name.endswith('.xrdml'): - xrd_dict.update(read_panalytical_xrdml(file_name)) - if file_name.endswith('.brml'): - xrd_dict.update(read_bruker_brml(file_name)) - - try: - raise NotImplementedError('Creating a nexus file is not yet implemented.') - except Exception as e: - logger.warning( - f'Error creating nexus file: {e}.\n Creating h5 file instead.' - ) - # TODO - - return xrd_dict + return read_rigaku_rasx(file_name) + elif file_name.endswith('.xrdml'): + return read_panalytical_xrdml(file_name) + elif file_name.endswith('.brml'): + return read_bruker_brml(file_name) + else: + logger.error(f'File type "{file_name}" is not supported.') + return {} def write_xrd_data( self, @@ -1261,6 +1290,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): return self.figures = self.results[0].generate_plots(archive, logger) + self.create_auxiliary_file(archive, logger) class RawFileXRDData(EntryData): From 921a3476d8bc9892c5497d16965b46c18ab0502b Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 16:25:37 +0100 Subject: [PATCH 29/93] Add dataset_paths for nexus --- src/nomad_measurements/xrd/nx.py | 21 +++++++++++++++++++++ src/nomad_measurements/xrd/schema.py | 8 ++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/nomad_measurements/xrd/nx.py b/src/nomad_measurements/xrd/nx.py index 500ad11a..4117bdb9 100644 --- a/src/nomad_measurements/xrd/nx.py +++ b/src/nomad_measurements/xrd/nx.py @@ -28,6 +28,27 @@ BoundLogger, ) +NEXUS_DATASET_PATHS = [ + '/ENTRY[entry]/experiment_result/intensity', + '/ENTRY[entry]/experiment_result/two_theta', + '/ENTRY[entry]/experiment_result/omega', + '/ENTRY[entry]/experiment_result/chi', + '/ENTRY[entry]/experiment_result/phi', + '/ENTRY[entry]/experiment_config/count_time', + '/ENTRY[entry]/experiment_result/q_norm', + '/ENTRY[entry]/experiment_result/q_parallel', + '/ENTRY[entry]/experiment_result/q_perpendicular', + '/ENTRY[entry]/method', + '/ENTRY[entry]/measurement_type', + '/ENTRY[entry]/INSTRUMENT[instrument]/DETECTOR[detector]/scan_axis', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_material', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_current', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_voltage', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_one', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_two', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/ratio_k_alphatwo_k_alphaone', + '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/kbeta', +] CONCEPT_MAP = OrderedDict( { diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 98cece20..4ef8249f 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -83,12 +83,12 @@ ) from nomad_measurements.xrd.nx import ( CONCEPT_MAP, + NEXUS_DATASET_PATHS, remove_nexus_annotations, walk_through_object, ) if TYPE_CHECKING: - import pint from nomad.datamodel.datamodel import ( EntryArchive, ) @@ -1062,12 +1062,15 @@ def prepare_hdf5_data( def create_nx_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ - Method for creating a NeXus file. + Method for creating a NeXus file which contains the array data along with other + archive data in a NeXus view. Args: archive (EntryArchive): The archive containing the section. logger (BoundLogger): A structlog logger. """ + # add archive data to `hdf5_data_dict` before creating the nexus file + # create a NeXus file with the data raise NotImplementedError('Method `create_nx_file` is not implemented.') def create_hdf5_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): @@ -1276,6 +1279,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): self.backward_compatibility() if self.data_file is not None: self.auxiliary_file = f'{self.data_file}.nxs' + self.hdf5_dataset_paths = NEXUS_DATASET_PATHS read_function, write_function = self.get_read_write_functions() if read_function is None or write_function is None: logger.warn( From 9f0cedf134c1f9a6256ae0c55a7502a08bee9a24 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 16:29:34 +0100 Subject: [PATCH 30/93] Some reverting back --- src/nomad_measurements/xrd/schema.py | 34 ++++++++-------------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 4ef8249f..f8098250 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1153,31 +1153,17 @@ def get_read_write_functions(self) -> tuple[Callable, Callable]: """ Method for getting the correct read and write functions for the current data file. - Returns: tuple[Callable, Callable]: The read, write functions. """ - if self.data_file.endswith(('.rasx', '.xrdml', '.brml')): - return self.read_raw_file, self.write_xrd_data + if self.data_file.endswith('.rasx'): + return read_rigaku_rasx, self.write_xrd_data + if self.data_file.endswith('.xrdml'): + return read_panalytical_xrdml, self.write_xrd_data + if self.data_file.endswith('.brml'): + return read_bruker_brml, self.write_xrd_data return None, None - def read_raw_file(self, file_name, archive, logger) -> dict[str, Any]: - """ - Read method for reading the raw data from the data file. - - Returns: - Dict[str, Any]: A dictionary with the raw data. - """ - if file_name.endswith('.rasx'): - return read_rigaku_rasx(file_name) - elif file_name.endswith('.xrdml'): - return read_panalytical_xrdml(file_name) - elif file_name.endswith('.brml'): - return read_bruker_brml(file_name) - else: - logger.error(f'File type "{file_name}" is not supported.') - return {} - def write_xrd_data( self, xrd_dict: dict[str, Any], @@ -1278,8 +1264,6 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ self.backward_compatibility() if self.data_file is not None: - self.auxiliary_file = f'{self.data_file}.nxs' - self.hdf5_dataset_paths = NEXUS_DATASET_PATHS read_function, write_function = self.get_read_write_functions() if read_function is None or write_function is None: logger.warn( @@ -1287,14 +1271,16 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) else: with archive.m_context.raw_file(self.data_file) as file: - xrd_dict = read_function(file.name, archive, logger) + xrd_dict = read_function(file.name, logger) + self.auxiliary_file = f'{self.data_file}.nxs' + self.hdf5_dataset_paths = NEXUS_DATASET_PATHS write_function(xrd_dict, archive, logger) + self.create_auxiliary_file(archive, logger) super().normalize(archive, logger) if not self.results: return self.figures = self.results[0].generate_plots(archive, logger) - self.create_auxiliary_file(archive, logger) class RawFileXRDData(EntryData): From f4fa2bd9c5ac1576b307bc28c8f698969631cd66 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 4 Dec 2024 17:02:51 +0100 Subject: [PATCH 31/93] Minor fixes --- src/nomad_measurements/xrd/schema.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index f8098250..a8d97e1a 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -377,7 +377,7 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): plots = [] two_theta = get_data(self, 'two_theta') intensity = get_data(self, 'intensity') - if any([two_theta, intensity] == [None, None]): + if two_theta is None or intensity is None: return plots x = two_theta.to('degree').magnitude @@ -903,7 +903,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): diffraction_patterns = [] for result in self.results: intensity = get_data(result, 'intensity') - if len(intensity.shape) == 1: + if intensity is None or len(intensity) != 1: diffraction_patterns.append( DiffractionPattern( incident_beam_wavelength=result.source_peak_wavelength, @@ -998,7 +998,7 @@ def populate_hdf5_data_dict( return ( f'/uploads/{archive.m_context.upload_id}/raw/{self.auxiliary_file}' - '#{dataset_path}' + f'#{dataset_path}' ) return None @@ -1085,7 +1085,7 @@ def create_hdf5_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): with archive.m_context.raw_file(self.auxiliary_file, 'w') as h5file: with h5py.File(h5file.name, 'w') as h5: - for key, value in self.h5_data_dict.items(): + for key, value in self.hdf5_data_dict.items(): if value is None: continue @@ -1130,7 +1130,7 @@ def create_auxiliary_file( try: self.create_nx_file(archive, logger) except Exception: - logger.warning('Error creating nexus file.\n Creating h5 file instead.') + logger.warning('Error creating nexus file. Creating h5 file instead') # remove nexus related annotations in the dataset paths for quantity in [ @@ -1183,7 +1183,8 @@ def write_xrd_data( scan_type = metadata_dict.get('scan_type', None) if scan_type not in ['line', 'rsm']: - raise NotImplementedError(f'Scan type `{scan_type}` is not supported.') + logger.error(f'Scan type `{scan_type}` is not supported.') + return # Create a new result section results = [] From 97a4083532fb461766f919ba59849dd9034ba0c7 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Dec 2024 16:38:58 +0100 Subject: [PATCH 32/93] Refactor populate_hdf5_data_dict: store a reference to be made later --- src/nomad_measurements/xrd/schema.py | 98 ++++++++++++++++++---------- 1 file changed, 62 insertions(+), 36 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index a8d97e1a..a60911a4 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -964,44 +964,51 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): hdf5_data_dict = collections.OrderedDict() hdf5_dataset_paths = [] + hdf5_references = dict() def populate_hdf5_data_dict( self, - key: str, + hdf5_path: str, + archive_path: str, value: Any, - archive: 'EntryArchive', - ) -> Optional[str]: + logger: 'BoundLogger', + ): """ - Populates the `hdf5_data_dict` with the given key and value. The key used in the - `hd5_data_dict` is picked from the `hdf5_dataset_paths` based on the given key. + Populates the `hdf5_data_dict` with the given value. The `hdf5_path` is + used to find a valid dataset path from `self.hdf5_dataset_paths`, and if it + exists, the value is added to the corresponding path. Args: - key (str): The key to be used in the HDF5 file. + hdf5_path (str): The dataset path to be used in the HDF5 file. + archive_path (str): The path of the quantity in the archive. value (Any): The value to be stored in the HDF5 file. - archive (EntryArchive): The archive containing the section. - - Returns: - Optional[str]: The path to the dataset in the HDF5 file. """ if not self.hdf5_dataset_paths: + logger.warning( + f'Unable to add "{hdf5_path}" to HDF5 file as no valid ' + 'collection of dataset paths found.' + ) return - # find the corresponding dataset for the given key + # find the corresponding dataset for the given hdf5_path for dataset_path in self.hdf5_dataset_paths: - dataset_name = dataset_path.rsplit('/', 1)[1] - if key == dataset_name: + if hdf5_path == dataset_path: if isinstance(value, pint.Quantity): self.hdf5_data_dict[dataset_path] = value.magnitude self.hdf5_data_dict[f'{dataset_path}/@units'] = str(value.units) else: self.hdf5_data_dict[dataset_path] = value - - return ( - f'/uploads/{archive.m_context.upload_id}/raw/{self.auxiliary_file}' - f'#{dataset_path}' + ref = ( + f'/uploads/{self.m_parent.m_context.upload_id}/raw' + f'/{self.auxiliary_file}#{dataset_path}' ) + self.hdf5_references[archive_path] = ref + return - return None + logger.warning( + f'Unable to add "{hdf5_path}" to HDF5 file no compatible dataset ' + 'path found.' + ) def prepare_hdf5_data( self, @@ -1195,24 +1202,6 @@ def write_xrd_data( result = XRDResultRSM_HDF5() if result is not None: - result.intensity = self.populate_hdf5_data_dict( - 'intensity', xrd_dict.get('intensity', None), archive - ) - result.two_theta = self.populate_hdf5_data_dict( - 'intensity', xrd_dict.get('2Theta', None), archive - ) - result.omega = self.populate_hdf5_data_dict( - 'intensity', xrd_dict.get('Omega', None), archive - ) - result.chi = self.populate_hdf5_data_dict( - 'intensity', xrd_dict.get('Chi', None), archive - ) - result.phi = self.populate_hdf5_data_dict( - 'intensity', xrd_dict.get('Phi', None), archive - ) - result.integration_time = self.populate_hdf5_data_dict( - 'intensity', xrd_dict.get('countTime', None), archive - ) result.scan_axis = metadata_dict.get('scan_axis', None) result.normalize(archive, logger) results.append(result) @@ -1246,6 +1235,43 @@ def write_xrd_data( merge_sections(self, xrd, logger) + self.populate_hdf5_data_dict( + '/ENTRY[entry]/experiment_result/intensity', + 'results[0].intensity', + xrd_dict.get('intensity', None), + logger, + ) + self.populate_hdf5_data_dict( + '/ENTRY[entry]/experiment_result/two_theta', + 'results[0].two_theta', + xrd_dict.get('2Theta', None), + logger, + ) + self.populate_hdf5_data_dict( + '/ENTRY[entry]/experiment_result/omega', + 'results[0].omega', + xrd_dict.get('Omega', None), + logger, + ) + self.populate_hdf5_data_dict( + '/ENTRY[entry]/experiment_result/chi', + 'results[0].chi', + xrd_dict.get('Chi', None), + logger, + ) + self.populate_hdf5_data_dict( + '/ENTRY[entry]/experiment_result/phi', + 'results[0].phi', + xrd_dict.get('Phi', None), + logger, + ) + self.populate_hdf5_data_dict( + '/ENTRY[entry]/experiment_result/integration_time', + 'results[0].integration_time', + xrd_dict.get('countTime', None), + logger, + ) + def backward_compatibility(self): """ Method for backward compatibility. From 191cd9d418014762225355885e36d0c790beea33 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Dec 2024 16:42:54 +0100 Subject: [PATCH 33/93] Handle shift from nxs to hdf5 --- src/nomad_measurements/xrd/schema.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index a60911a4..76ee7e40 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1076,9 +1076,10 @@ def create_nx_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): archive (EntryArchive): The archive containing the section. logger (BoundLogger): A structlog logger. """ - # add archive data to `hdf5_data_dict` before creating the nexus file - # create a NeXus file with the data raise NotImplementedError('Method `create_nx_file` is not implemented.') + # TODO add archive data to `hdf5_data_dict` before creating the nexus file. Use + # `populate_hdf5_data_dict` method for each quantity that is needed in .nxs + # file. Create a NeXus file with the data in `hdf5_data_dict`. def create_hdf5_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ @@ -1088,8 +1089,17 @@ def create_hdf5_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): archive (EntryArchive): The archive containing the section. logger (BoundLogger): A structlog logger. """ - self.auxiliary_file = f'{self.data_file}.h5' + # pivot from .nxs to .h5 + self.auxiliary_file = f'{self.data_file}.h5' + for archive_path, hdf5_path in self.hdf5_references.items(): + self.hdf5_references[archive_path] = remove_nexus_annotations(hdf5_path) + tmp_dict = {} + for key, value in self.hdf5_data_dict.items(): + tmp_dict[remove_nexus_annotations(key)] = value + self.hdf5_data_dict = tmp_dict + + # create the HDF5 file with archive.m_context.raw_file(self.auxiliary_file, 'w') as h5file: with h5py.File(h5file.name, 'w') as h5: for key, value in self.hdf5_data_dict.items(): @@ -1099,6 +1109,7 @@ def create_hdf5_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): value_is_unit = False if key.endswith('@units'): value_is_unit = True + # remove the '@units' suffix key = key.rsplit('/', 1)[0] group_name, dataset_name = key.rsplit('/', 1) From 8f4c4f494e9049ad5c8ca8a9ff9cb92eb3700241 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Dec 2024 16:43:38 +0100 Subject: [PATCH 34/93] Set hdf5 references after aux file is created --- src/nomad_measurements/xrd/schema.py | 49 +++++++++++++++++++--------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 76ee7e40..b0805cda 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -16,6 +16,7 @@ # limitations under the License. # import collections +import re from typing import ( TYPE_CHECKING, Any, @@ -1149,23 +1150,41 @@ def create_auxiliary_file( self.create_nx_file(archive, logger) except Exception: logger.warning('Error creating nexus file. Creating h5 file instead') + self.create_hdf5_file(archive, logger) - # remove nexus related annotations in the dataset paths - for quantity in [ - 'intensity', - 'two_theta', - 'omega', - 'phi', - 'chi', - 'integration_time', - 'q_norm', - 'q_parallel', - 'q_perpendicular', - ]: - if self.get(quantity) is not None: - self[quantity] = remove_nexus_annotations(self.get(quantity)) + # add the references for the HDF5Reference quantities + for archive_path, hdf5_path in self.hdf5_references.items(): + self.set_hdf5_reference(self, archive_path, hdf5_path) - self.create_hdf5_file(archive, logger) + @staticmethod + def set_hdf5_reference(section: 'Section', path: str, ref: str): + """ + Method for setting the HDF5Reference of a quantity in a section. It can handle + nested quantities and repeatable sections, provided that the quantity itself + is of type `HDF5Reference`. + For example, one can set the reference for a quantity path like + `data.results[0].intensity`. + + Args: + section (Section): The NOMAD section containing the quantity. + path (str): The path to the quantity. + ref (str): The reference to the HDF5 dataset. + """ + attr = section + path = path.split('.') + quantity_name = path.pop() + + for subpath in path: + if re.match(r'.*\[.*\]', subpath): + index = int(subpath.split('[')[1].split(']')[0]) + attr = attr.m_get(subpath.split('[')[0], index=index) + else: + attr = attr.m_get(subpath) + + if isinstance( + attr.m_get_quantity_definition(quantity_name).type, HDF5Reference + ): + attr.m_set(quantity_name, ref) def get_read_write_functions(self) -> tuple[Callable, Callable]: """ From 5f378d2ff2bb6f018f643277cdb77df132a9dea2 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Dec 2024 16:45:59 +0100 Subject: [PATCH 35/93] Cleaning --- src/nomad_measurements/utils.py | 33 -------------- src/nomad_measurements/xrd/schema.py | 66 ++-------------------------- 2 files changed, 3 insertions(+), 96 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 2d7b1b2d..afe7089b 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -186,36 +186,3 @@ def set_data(obj, **kwargs): for key, value in kwargs.items(): if hasattr(obj, key): setattr(obj, key, value) - - -class AttrDict(collections.defaultdict): - """ - A dictionary subclass that allows attribute-style access to dictionary keys, - including nested dictionaries. It uses defaultdict as the base class, so it can be - initialized with a default factory function. - """ - - # TODO Add a - def __init__(self, default_factory=None, *args, **kwargs): - super().__init__(default_factory, *args, **kwargs) - for key, value in self.items(): - if isinstance(value, dict): - self[key] = AttrDict(default_factory, value) - self.default_factory = default_factory - - def __getattr__(self, item): - try: - return self[item] - except KeyError as e: - raise AttributeError(f"'AttrDict' object has no attribute '{item}'") from e - - def __setattr__(self, key, value): - if isinstance(value, dict): - value = AttrDict(self.default_factory, value) - self[key] = value - - def __delattr__(self, item): - try: - del self[item] - except KeyError as e: - raise AttributeError(f"'AttrDict' object has no attribute '{item}'") from e diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index b0805cda..1e1b3efa 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -21,7 +21,6 @@ TYPE_CHECKING, Any, Callable, - Optional, ) import h5py @@ -76,17 +75,14 @@ NOMADMeasurementsCategory, ) from nomad_measurements.utils import ( - AttrDict, get_bounding_range_2d, get_data, merge_sections, set_data, ) from nomad_measurements.xrd.nx import ( - CONCEPT_MAP, NEXUS_DATASET_PATHS, remove_nexus_annotations, - walk_through_object, ) if TYPE_CHECKING: @@ -1011,63 +1007,6 @@ def populate_hdf5_data_dict( 'path found.' ) - def prepare_hdf5_data( - self, - raw_data: 'AttrDict' = AttrDict(), - archive: 'EntryArchive' = None, - logger: 'BoundLogger' = None, - ): - """ - Prepares data for the HDF5 file. Based on the concept map, the data is extracted - either from the `raw_data` or the `archive`. - - If the data extracted from the raw data is an array, the data is stored in the HDF5 file and the path to the data is - overwritten in the `raw_data` (in-place modification). For example, - {'intensity': array([1, 2, 3])} becomes - {'intensity': '{file_path}{file_name}.h5#intensity'} - and the array [1, 2, 3] is stored in the HDF5 file. - - Args: - raw_data (AttrDict, optional): A dictionary with the raw data from - the instrument. - archive (EntryArchive, optional): A NOMAD archive. - logger (BoundLogger, optional): A structlog logger. - """ - concept_map = remove_nexus_annotations(CONCEPT_MAP) - h5_data_dict = collections.defaultdict(lambda: None) - h5_data_paths = collections.defaultdict(lambda: None) - for h5_key, data_key in concept_map.items(): - if isinstance(data_key, dict): - if h5_key == raw_data.get('metadata', {}).get('scan_type', ''): - h5_data_dict.update( - self.prepare_hdf5_data(data_key, archive, logger) - ) - else: - data_source_type, data_source_path = data_key.split('.', maxsplit=1) - if data_source_type == 'raw_data': - data_source = raw_data - elif data_source_type == 'archive': - data_source = archive - else: - continue - - value = walk_through_object(data_source, data_source_path) - - if value is not None: - h5_data_dict[h5_key] = value - if isinstance(value, np.ndarray) and data_source_type == 'raw_data': - # edit raw_data to contain the path to the data - if data_source_path.endswith('.magnitude'): - data_source_path = data_source_path.rsplit('.', 1)[0] - h5_data_paths[data_source_path] = ( - f'/uploads/{archive.m_context.upload_id}/raw/' - f'{self.auxiliary_file}#{h5_key}' - ) - - raw_data.update(h5_data_paths) - - return h5_data_dict - def create_nx_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ Method for creating a NeXus file which contains the array data along with other @@ -1084,7 +1023,7 @@ def create_nx_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): def create_hdf5_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ - TODO make it independent of prepare_hdf5_data + Method for creating an HDF5 file which contains the array data. Args: archive (EntryArchive): The archive containing the section. @@ -1140,7 +1079,8 @@ def create_auxiliary_file( logger: 'BoundLogger', ): """ - Method for creating an auxiliary file. + Method for creating an auxiliary file to store big data arrays outside the + main archive file (e.g. HDF5, NeXus). Args: archive (EntryArchive): The archive containing the section. From fdd22221284e4a53ba7d032c6e3d3d0e37d9e40e Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Dec 2024 17:00:36 +0100 Subject: [PATCH 36/93] Fixing --- src/nomad_measurements/xrd/schema.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 1e1b3efa..63688ebb 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -988,16 +988,15 @@ def populate_hdf5_data_dict( return # find the corresponding dataset for the given hdf5_path - for dataset_path in self.hdf5_dataset_paths: - if hdf5_path == dataset_path: - if isinstance(value, pint.Quantity): - self.hdf5_data_dict[dataset_path] = value.magnitude - self.hdf5_data_dict[f'{dataset_path}/@units'] = str(value.units) - else: - self.hdf5_data_dict[dataset_path] = value + if hdf5_path in self.hdf5_dataset_paths: + if isinstance(value, pint.Quantity): + self.hdf5_data_dict[hdf5_path] = value.magnitude + self.hdf5_data_dict[f'{hdf5_path}/@units'] = str(value.units) + else: + self.hdf5_data_dict[hdf5_path] = value ref = ( f'/uploads/{self.m_parent.m_context.upload_id}/raw' - f'/{self.auxiliary_file}#{dataset_path}' + f'/{self.auxiliary_file}#{hdf5_path}' ) self.hdf5_references[archive_path] = ref return @@ -1110,6 +1109,7 @@ def set_hdf5_reference(section: 'Section', path: str, ref: str): path (str): The path to the quantity. ref (str): The reference to the HDF5 dataset. """ + # TODO handle the case when section in the path is not initialized attr = section path = path.split('.') quantity_name = path.pop() From f49e1686e0339210765af274e152e812677326b6 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 5 Dec 2024 17:45:39 +0100 Subject: [PATCH 37/93] Redefine result sections instead of extending --- src/nomad_measurements/xrd/schema.py | 124 +++------------------------ 1 file changed, 11 insertions(+), 113 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 63688ebb..79992fd8 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -286,52 +286,28 @@ class XRDResult(MeasurementResult): m_def = Section() - array_index = Quantity( - type=np.dtype(np.float64), - shape=['*'], - description=( - 'A placeholder for the indices of vectorial quantities. ' - 'Used as x-axis for plots within quantities.' - ), - a_display={'visible': False}, - ) intensity = Quantity( - type=np.dtype(np.float64), - shape=['*'], - unit='dimensionless', + type=HDF5Reference, description='The count at each 2-theta value, dimensionless', - a_plot={'x': 'array_index', 'y': 'intensity'}, ) two_theta = Quantity( - type=np.dtype(np.float64), - shape=['*'], - unit='deg', + type=HDF5Reference, description='The 2-theta range of the diffractogram', - a_plot={'x': 'array_index', 'y': 'two_theta'}, ) q_norm = Quantity( - type=np.dtype(np.float64), - shape=['*'], - unit='meter**(-1)', + type=HDF5Reference, description='The norm of scattering vector *Q* of the diffractogram', - a_plot={'x': 'array_index', 'y': 'q_norm'}, ) omega = Quantity( - type=np.dtype(np.float64), - shape=['*'], - unit='deg', + type=HDF5Reference, description='The omega range of the diffractogram', ) phi = Quantity( - type=np.dtype(np.float64), - shape=['*'], - unit='deg', + type=HDF5Reference, description='The phi range of the diffractogram', ) chi = Quantity( - type=np.dtype(np.float64), - shape=['*'], - unit='deg', + type=HDF5Reference, description='The chi range of the diffractogram', ) source_peak_wavelength = Quantity( @@ -345,9 +321,7 @@ class XRDResult(MeasurementResult): description='Axis scanned', ) integration_time = Quantity( - type=np.dtype(np.float64), - unit='s', - shape=['*'], + type=HDF5Reference, description='Integration time per channel', ) @@ -548,23 +522,13 @@ class XRDResultRSM(XRDResult): m_def = Section() q_parallel = Quantity( - type=np.dtype(np.float64), - shape=['*', '*'], - unit='meter**(-1)', + type=HDF5Reference, description='The scattering vector *Q_parallel* of the diffractogram', ) q_perpendicular = Quantity( - type=np.dtype(np.float64), - shape=['*', '*'], - unit='meter**(-1)', + type=HDF5Reference, description='The scattering vector *Q_perpendicular* of the diffractogram', ) - intensity = Quantity( - type=np.dtype(np.float64), - shape=['*', '*'], - unit='dimensionless', - description='The count at each position, dimensionless', - ) def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ @@ -766,72 +730,6 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): break -class XRDResult1D_HDF5(XRDResult1D): - intensity = Quantity( - type=HDF5Reference, - description='The count at each 2-theta value, dimensionless', - ) - two_theta = Quantity( - type=HDF5Reference, - description='The 2-theta range of the diffractogram', - ) - q_norm = Quantity( - type=HDF5Reference, - description='The norm of scattering vector *Q* of the diffractogram', - ) - omega = Quantity( - type=HDF5Reference, - description='The omega range of the diffractogram', - ) - phi = Quantity( - type=HDF5Reference, - description='The phi range of the diffractogram', - ) - chi = Quantity( - type=HDF5Reference, - description='The chi range of the diffractogram', - ) - integration_time = Quantity( - type=HDF5Reference, - description='Integration time per channel', - ) - - -class XRDResultRSM_HDF5(XRDResultRSM): - intensity = Quantity( - type=HDF5Reference, - description='The count at each 2-theta value, dimensionless', - ) - two_theta = Quantity( - type=HDF5Reference, - description='The 2-theta range of the diffractogram', - ) - q_norm = Quantity( - type=HDF5Reference, - description='The norm of scattering vector *Q* of the diffractogram', - ) - omega = Quantity( - type=HDF5Reference, - description='The omega range of the diffractogram', - ) - phi = Quantity( - type=HDF5Reference, - description='The phi range of the diffractogram', - ) - chi = Quantity( - type=HDF5Reference, - description='The chi range of the diffractogram', - ) - q_parallel = Quantity( - type=HDF5Reference, - description='The scattering vector *Q_parallel* of the diffractogram', - ) - q_perpendicular = Quantity( - type=HDF5Reference, - description='The scattering vector *Q_perpendicular* of the diffractogram', - ) - - class XRayDiffraction(Measurement): """ Generic X-ray diffraction measurement. @@ -1167,9 +1065,9 @@ def write_xrd_data( results = [] result = None if scan_type == 'line': - result = XRDResult1D_HDF5() + result = XRDResult1D() elif scan_type == 'rsm': - result = XRDResultRSM_HDF5() + result = XRDResultRSM() if result is not None: result.scan_axis = metadata_dict.get('scan_axis', None) From f6f351c8d5985ae503cd086e649adc57c9ec03f6 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 10:09:27 +0100 Subject: [PATCH 38/93] Remove plotly plots from ELN --- src/nomad_measurements/xrd/schema.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 79992fd8..971dea67 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -51,7 +51,6 @@ ) from nomad.datamodel.metainfo.plot import ( PlotlyFigure, - PlotSection, ) from nomad.datamodel.results import ( DiffractionPattern, @@ -819,7 +818,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) -class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): +class ELNXRayDiffraction(XRayDiffraction, EntryData): """ Example section for how XRayDiffraction can be implemented with a general reader for common XRD file types. @@ -1147,6 +1146,8 @@ def backward_compatibility(self): # Migration to using HFD5References: removing exisiting results if self.results: self.results = [] + if self.figures: + del self.figures def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ @@ -1175,8 +1176,6 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): if not self.results: return - self.figures = self.results[0].generate_plots(archive, logger) - class RawFileXRDData(EntryData): """ From 7cd535ee68a4e3a4ba9fd21a6f9f4d1aecc9c073 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 14:51:41 +0100 Subject: [PATCH 39/93] Read util for hdf5 ref --- src/nomad_measurements/utils.py | 24 ++++++++++++++++++++- src/nomad_measurements/xrd/schema.py | 31 +++++++++++++++++++++------- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index afe7089b..5090d378 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -15,7 +15,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import collections import os.path from typing import ( TYPE_CHECKING, @@ -23,6 +22,7 @@ ) import numpy as np +from nomad.datamodel.hdf5 import HDF5Reference if TYPE_CHECKING: from nomad.datamodel.data import ( @@ -186,3 +186,25 @@ def set_data(obj, **kwargs): for key, value in kwargs.items(): if hasattr(obj, key): setattr(obj, key, value) + +def read_hdf5_dataset(archive, key: str) -> Any: + """ + Get the data for the quantity. If the quantity is a HDF5Reference, read the dataset + and corresponding units if available, and return a pint.Quantity. + + Args: + obj (Any): The object to get the data from. + key (str): The key of the quantity. + + Returns: + Any: The data for the quantity. + """ + if not key: + return + + try: + value = HDF5Reference.read_dataset(archive, key) + except KeyError: + return None + + return value diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 971dea67..5175021b 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -68,6 +68,7 @@ Section, SubSection, ) +from nomad.units import ureg from scipy.interpolate import griddata from nomad_measurements.general import ( @@ -77,6 +78,7 @@ get_bounding_range_2d, get_data, merge_sections, + read_hdf5_dataset, set_data, ) from nomad_measurements.xrd.nx import ( @@ -503,15 +505,21 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): self.name = f'{self.scan_axis} Scan Result' else: self.name = 'XRD Scan Result' - q_norm = get_data(self, 'q_norm') - two_theta = get_data(self, 'two_theta') + if self.source_peak_wavelength is not None: + q_norm = read_hdf5_dataset(archive, self.q_norm) + if q_norm is not None: + q_norm *= ureg('1/angstrom') + two_theta = read_hdf5_dataset(archive, self.two_theta) + if two_theta is not None: + two_theta *= ureg('degree') q_norm, two_theta = calculate_two_theta_or_q( wavelength=self.source_peak_wavelength, two_theta=two_theta, q=q_norm, ) - set_data(self, q_norm=q_norm, two_theta=two_theta) + + # set_data(self, q_norm=q_norm, two_theta=two_theta) class XRDResultRSM(XRDResult): @@ -796,14 +804,23 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): if not archive.results.properties.structural: diffraction_patterns = [] for result in self.results: - intensity = get_data(result, 'intensity') + intensity = read_hdf5_dataset(archive, result.intensity) + if intensity is not None: + intensity *= ureg('dimensionless') if intensity is None or len(intensity) != 1: + two_theta = read_hdf5_dataset(archive, result.two_theta) + if two_theta is not None: + two_theta *= ureg('degree') + q_norm = read_hdf5_dataset(archive, result.q_norm) + if q_norm is not None: + q_norm *= ureg('1/angstrom') + diffraction_patterns.append( DiffractionPattern( incident_beam_wavelength=result.source_peak_wavelength, - two_theta_angles=get_data(result, 'two_theta'), - intensity=result.intensity, - q_vector=get_data(result, 'q_norm'), + two_theta_angles=two_theta, + intensity=intensity, + q_vector=q_norm, ) ) archive.results.properties.structural = StructuralProperties( From 9d67aa25f44bd992644c4818d054be6392bdbbb9 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 14:52:03 +0100 Subject: [PATCH 40/93] Fixing --- src/nomad_measurements/xrd/schema.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 5175021b..f128c1d7 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -719,7 +719,9 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): if self.source_peak_wavelength is not None: for var_axis in ['omega', 'chi', 'phi']: - var_axis_value = get_data(self, var_axis) + var_axis_value = HDF5Reference.read_dataset( + archive, getattr(self, var_axis) + ) if ( var_axis_value is not None and len(np.unique(var_axis_value.magnitude)) > 1 @@ -1161,9 +1163,9 @@ def backward_compatibility(self): Method for backward compatibility. """ # Migration to using HFD5References: removing exisiting results - if self.results: + if self.get('results'): self.results = [] - if self.figures: + if self.get('figures'): del self.figures def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): From 9ad1efec0598baab7c9358f3981cd1dbaa15a2c0 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 15:48:21 +0100 Subject: [PATCH 41/93] Move hdf5 handling into a util class --- src/nomad_measurements/utils.py | 232 +++++++++++++++++++++++++++ src/nomad_measurements/xrd/schema.py | 181 +-------------------- 2 files changed, 236 insertions(+), 177 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 5090d378..61815704 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -15,12 +15,16 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import collections +import pint +import re import os.path from typing import ( TYPE_CHECKING, Any, ) +import h5py import numpy as np from nomad.datamodel.hdf5 import HDF5Reference @@ -206,5 +210,233 @@ def read_hdf5_dataset(archive, key: str) -> Any: value = HDF5Reference.read_dataset(archive, key) except KeyError: return None + # file_path, dataset_path = key.split('#') + # with archive.m_context.raw_file(file_path, 'r') as h5file: + # with h5py.File(h5file.name, 'r') as h5: + # value = h5[dataset_path] return value + + +class AuxiliaryHDF5Handler: + """ + A class for handling auxiliary files. + - read_dataset: Read data from an auxiliary file. + - write_dataset: Write data to an auxiliary file. + - save: Save the auxiliary file. + """ + + hdf5_data_dict = collections.OrderedDict() + hdf5_references = dict() + + def __init__( + self, + filename: str, + archive: 'EntryArchive', + logger: 'BoundLogger', + valid_dataset_paths: list = [], + ): + """ + Initialize the handler. + + Args: + filename (str): The name of the auxiliary file. + archive (EntryArchive): The NOMAD archive. + logger (BoundLogger): A structlog logger. + valid_dataset_paths (list): The list of valid dataset paths. + """ + assert filename.endswith( + ('.nxs', '.h5') + ), 'Only .h5 or .nxs files are supported.' + self.data_file = filename + self.valid_dataset_paths = valid_dataset_paths + self.archive = archive + self.logger = logger + + @staticmethod + def remove_nexus_annotations(path: str) -> str: + """ + Remove the nexus related annotations from the dataset path. + For e.g., + '/ENTRY[entry]/experiment_result/intensity' -> + '/entry/experiment_result/intensity' + + Args: + path (str): The dataset path with nexus annotations. + + Returns: + str: The dataset path without nexus annotations. + """ + if not path: + return path + + pattern = r'.*\[.*\]' + new_path = '' + for part in path.split('/')[1:]: + if re.match(pattern, part): + new_path += '/' + part.split('[')[0].strip().lower() + else: + new_path += '/' + part + new_path = new_path.replace('.nxs', '.h5') + return new_path + + def _write_nx_file(self): + """ + Method for creating a NeXus file which contains the array data along with other + archive data in a NeXus view. + """ + raise NotImplementedError('Method `write_nx_file` is not implemented.') + # TODO add archive data to `hdf5_data_dict` before creating the nexus file. Use + # `populate_hdf5_data_dict` method for each quantity that is needed in .nxs + # file. Create a NeXus file with the data in `hdf5_data_dict`. + + def _write_hdf5_file(self): + """ + Method for creating an HDF5 file which contains the array data. + """ + + # pivot from .nxs to .h5 + self.auxiliary_file = f'{self.data_file}.h5' + for archive_path, hdf5_path in self.hdf5_references.items(): + self.hdf5_references[archive_path] = self.remove_nexus_annotations( + hdf5_path + ) + tmp_dict = {} + for key, value in self.hdf5_data_dict.items(): + tmp_dict[self.remove_nexus_annotations(key)] = value + self.hdf5_data_dict = tmp_dict + + # create the HDF5 file + with self.archive.m_context.raw_file(self.auxiliary_file, 'a') as h5file: + with h5py.File(h5file.name, 'a') as h5: + for key, value in self.hdf5_data_dict.items(): + if value is None: + continue + + value_is_unit = False + if key.endswith('@units'): + value_is_unit = True + # remove the '@units' suffix + key = key.rsplit('/', 1)[0] + + group_name, dataset_name = key.rsplit('/', 1) + group = h5.require_group(group_name) + + if value_is_unit: + try: + h5[f'{group_name}/{dataset_name}'].attrs['units'] = str( + value + ) + except KeyError: + logger.error( + f'Could not set units for "{group_name}/{dataset_name}"' + 'as the dataset does not exist.' + ) + else: + group.create_dataset( + dataset_name, data=value, compression='gzip' + ) + # group.attrs['axes'] = 'time' + # group.attrs['signal'] = 'value' + # group.attrs['NX_class'] = 'NXdata' + + def write_file(self): + """ + Method for creating an auxiliary file to store big data arrays outside the + main archive file (e.g. HDF5, NeXus). + """ + try: + if self.data_file.endswith('.h5'): + self.data_file = self.data_file.replace('.h5', '.nxs') + self.write_nx_file() + except Exception: + self.logger.warning('Error creating nexus file. Creating h5 file instead') + if self.data_file.endswith('.nxs'): + self.data_file = self.data_file.replace('.nxs', '.h5') + self.write_hdf5_file() + + # add the references for the HDF5Reference quantities + for archive_path, hdf5_path in self.hdf5_references.items(): + self.set_hdf5_reference(self.archive, archive_path, hdf5_path) + + @staticmethod + def set_hdf5_reference(section: 'Section', path: str, ref: str): + """ + Method for setting the HDF5Reference of a quantity in a section. It can handle + nested quantities and repeatable sections, provided that the quantity itself + is of type `HDF5Reference`. + For example, one can set the reference for a quantity path like + `data.results[0].intensity`. + + Args: + section (Section): The NOMAD section containing the quantity. + path (str): The path to the quantity. + ref (str): The reference to the HDF5 dataset. + """ + # TODO handle the case when section in the path is not initialized + attr = section + path = path.split('.') + quantity_name = path.pop() + + for subpath in path: + if re.match(r'.*\[.*\]', subpath): + index = int(subpath.split('[')[1].split(']')[0]) + attr = attr.m_get(subpath.split('[')[0], index=index) + else: + attr = attr.m_get(subpath) + + if isinstance( + attr.m_get_quantity_definition(quantity_name).type, HDF5Reference + ): + attr.m_set(quantity_name, ref) + + def add_dataset( + self, + hdf5_path: str, + archive_path: str, + value: Any, + lazy: bool = True, + validate: bool = False, + ): + """ + Add a dataset to the HDF5 file. The dataset is written lazily (default) when + the `write_file` method is called. If `validate` is True, the `hdf5_path` is + validated against the `valid_dataset_paths` instance variable before adding the + value. + + Args: + hdf5_path (str): The dataset path to be used in the HDF5 file. + archive_path (str): The path of the quantity in the archive. + value (Any): The value to be stored in the HDF5 file. + lazy (bool): If True, the file is not written immediately. + validate (bool): If True, the `hdf5_path` is validated against the + `valid_dataset_paths` instance variable before adding the value. + """ + if validate: + if not self.valid_dataset_paths: + self.logger.warning( + f'Unable to add "{hdf5_path}" to HDF5 file as no valid ' + 'collection of dataset paths found.' + ) + return + if hdf5_path not in self.valid_dataset_paths: + self.logger.warning( + f'Unable to add "{hdf5_path}" to HDF5 file as the dataset path ' + 'is not in the list of valid dataset paths.' + ) + return + + # handle the pint.Quantity and add data + if isinstance(value, pint.Quantity): + self.hdf5_data_dict[hdf5_path] = value.magnitude + self.hdf5_data_dict[f'{hdf5_path}/@units'] = str(value.units) + else: + self.hdf5_data_dict[hdf5_path] = value + ref = ( + f'/uploads/{self.archive.m_context.upload_id}/raw' + f'/{self.auxiliary_file}#{hdf5_path}' + ) + self.hdf5_references[archive_path] = ref + + if not lazy: + self.write_file() diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index f128c1d7..214149a4 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -15,15 +15,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import collections -import re from typing import ( TYPE_CHECKING, Any, Callable, ) -import h5py import numpy as np import pint import plotly.express as px @@ -76,15 +73,10 @@ ) from nomad_measurements.utils import ( get_bounding_range_2d, - get_data, merge_sections, - read_hdf5_dataset, - set_data, -) -from nomad_measurements.xrd.nx import ( - NEXUS_DATASET_PATHS, - remove_nexus_annotations, + AuxiliaryHDF5Handler, ) +from nomad_measurements.xrd.nx import NEXUS_DATASET_PATHS if TYPE_CHECKING: from nomad.datamodel.datamodel import ( @@ -867,6 +859,7 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData): component=ELNComponentEnum.FileEditQuantity, ), ) + auxiliary_file_handler = None measurement_identifiers = SubSection( section_def=ReadableIdentifiers, ) @@ -875,173 +868,6 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData): component=ELNComponentEnum.EnumEditQuantity, ) - hdf5_data_dict = collections.OrderedDict() - hdf5_dataset_paths = [] - hdf5_references = dict() - - def populate_hdf5_data_dict( - self, - hdf5_path: str, - archive_path: str, - value: Any, - logger: 'BoundLogger', - ): - """ - Populates the `hdf5_data_dict` with the given value. The `hdf5_path` is - used to find a valid dataset path from `self.hdf5_dataset_paths`, and if it - exists, the value is added to the corresponding path. - - Args: - hdf5_path (str): The dataset path to be used in the HDF5 file. - archive_path (str): The path of the quantity in the archive. - value (Any): The value to be stored in the HDF5 file. - """ - if not self.hdf5_dataset_paths: - logger.warning( - f'Unable to add "{hdf5_path}" to HDF5 file as no valid ' - 'collection of dataset paths found.' - ) - return - - # find the corresponding dataset for the given hdf5_path - if hdf5_path in self.hdf5_dataset_paths: - if isinstance(value, pint.Quantity): - self.hdf5_data_dict[hdf5_path] = value.magnitude - self.hdf5_data_dict[f'{hdf5_path}/@units'] = str(value.units) - else: - self.hdf5_data_dict[hdf5_path] = value - ref = ( - f'/uploads/{self.m_parent.m_context.upload_id}/raw' - f'/{self.auxiliary_file}#{hdf5_path}' - ) - self.hdf5_references[archive_path] = ref - return - - logger.warning( - f'Unable to add "{hdf5_path}" to HDF5 file no compatible dataset ' - 'path found.' - ) - - def create_nx_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): - """ - Method for creating a NeXus file which contains the array data along with other - archive data in a NeXus view. - - Args: - archive (EntryArchive): The archive containing the section. - logger (BoundLogger): A structlog logger. - """ - raise NotImplementedError('Method `create_nx_file` is not implemented.') - # TODO add archive data to `hdf5_data_dict` before creating the nexus file. Use - # `populate_hdf5_data_dict` method for each quantity that is needed in .nxs - # file. Create a NeXus file with the data in `hdf5_data_dict`. - - def create_hdf5_file(self, archive: 'EntryArchive', logger: 'BoundLogger'): - """ - Method for creating an HDF5 file which contains the array data. - - Args: - archive (EntryArchive): The archive containing the section. - logger (BoundLogger): A structlog logger. - """ - - # pivot from .nxs to .h5 - self.auxiliary_file = f'{self.data_file}.h5' - for archive_path, hdf5_path in self.hdf5_references.items(): - self.hdf5_references[archive_path] = remove_nexus_annotations(hdf5_path) - tmp_dict = {} - for key, value in self.hdf5_data_dict.items(): - tmp_dict[remove_nexus_annotations(key)] = value - self.hdf5_data_dict = tmp_dict - - # create the HDF5 file - with archive.m_context.raw_file(self.auxiliary_file, 'w') as h5file: - with h5py.File(h5file.name, 'w') as h5: - for key, value in self.hdf5_data_dict.items(): - if value is None: - continue - - value_is_unit = False - if key.endswith('@units'): - value_is_unit = True - # remove the '@units' suffix - key = key.rsplit('/', 1)[0] - - group_name, dataset_name = key.rsplit('/', 1) - group = h5.require_group(group_name) - - if value_is_unit: - try: - h5[f'{group_name}/{dataset_name}'].attrs['units'] = str( - value - ) - except KeyError: - logger.error( - f'Could not set units for "{group_name}/{dataset_name}"' - 'as the dataset does not exist.' - ) - else: - group.create_dataset( - dataset_name, data=value, compression='gzip' - ) - # group.attrs['axes'] = 'time' - # group.attrs['signal'] = 'value' - # group.attrs['NX_class'] = 'NXdata' - - def create_auxiliary_file( - self, - archive: 'EntryArchive', - logger: 'BoundLogger', - ): - """ - Method for creating an auxiliary file to store big data arrays outside the - main archive file (e.g. HDF5, NeXus). - - Args: - archive (EntryArchive): The archive containing the section. - logger (BoundLogger): A structlog logger. - """ - try: - self.create_nx_file(archive, logger) - except Exception: - logger.warning('Error creating nexus file. Creating h5 file instead') - self.create_hdf5_file(archive, logger) - - # add the references for the HDF5Reference quantities - for archive_path, hdf5_path in self.hdf5_references.items(): - self.set_hdf5_reference(self, archive_path, hdf5_path) - - @staticmethod - def set_hdf5_reference(section: 'Section', path: str, ref: str): - """ - Method for setting the HDF5Reference of a quantity in a section. It can handle - nested quantities and repeatable sections, provided that the quantity itself - is of type `HDF5Reference`. - For example, one can set the reference for a quantity path like - `data.results[0].intensity`. - - Args: - section (Section): The NOMAD section containing the quantity. - path (str): The path to the quantity. - ref (str): The reference to the HDF5 dataset. - """ - # TODO handle the case when section in the path is not initialized - attr = section - path = path.split('.') - quantity_name = path.pop() - - for subpath in path: - if re.match(r'.*\[.*\]', subpath): - index = int(subpath.split('[')[1].split(']')[0]) - attr = attr.m_get(subpath.split('[')[0], index=index) - else: - attr = attr.m_get(subpath) - - if isinstance( - attr.m_get_quantity_definition(quantity_name).type, HDF5Reference - ): - attr.m_set(quantity_name, ref) - def get_read_write_functions(self) -> tuple[Callable, Callable]: """ Method for getting the correct read and write functions for the current data @@ -1188,6 +1014,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): with archive.m_context.raw_file(self.data_file) as file: xrd_dict = read_function(file.name, logger) self.auxiliary_file = f'{self.data_file}.nxs' + self.auxiliary_file_handler = AuxiliaryHDF5Handler() self.hdf5_dataset_paths = NEXUS_DATASET_PATHS write_function(xrd_dict, archive, logger) self.create_auxiliary_file(archive, logger) From 8b8b9f44c14161665545cf3193ebd47bcea1af5c Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:01:10 +0100 Subject: [PATCH 42/93] Refactor instance variables --- src/nomad_measurements/utils.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 61815704..e91c2336 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -225,10 +225,6 @@ class AuxiliaryHDF5Handler: - write_dataset: Write data to an auxiliary file. - save: Save the auxiliary file. """ - - hdf5_data_dict = collections.OrderedDict() - hdf5_references = dict() - def __init__( self, filename: str, @@ -245,13 +241,16 @@ def __init__( logger (BoundLogger): A structlog logger. valid_dataset_paths (list): The list of valid dataset paths. """ - assert filename.endswith( - ('.nxs', '.h5') - ), 'Only .h5 or .nxs files are supported.' + if not filename.endswith(('.nxs', '.h5')): + raise ValueError('Only .h5 or .nxs files are supported.') + self.data_file = filename - self.valid_dataset_paths = valid_dataset_paths self.archive = archive self.logger = logger + self.valid_dataset_paths = valid_dataset_paths + + self.hdf5_data_dict = collections.OrderedDict() + self.hdf5_references = collections.OrderedDict() @staticmethod def remove_nexus_annotations(path: str) -> str: @@ -307,7 +306,7 @@ def _write_hdf5_file(self): self.hdf5_data_dict = tmp_dict # create the HDF5 file - with self.archive.m_context.raw_file(self.auxiliary_file, 'a') as h5file: + with self.archive.m_context.raw_file(self.data_file, 'a') as h5file: with h5py.File(h5file.name, 'a') as h5: for key, value in self.hdf5_data_dict.items(): if value is None: @@ -434,7 +433,7 @@ def add_dataset( self.hdf5_data_dict[hdf5_path] = value ref = ( f'/uploads/{self.archive.m_context.upload_id}/raw' - f'/{self.auxiliary_file}#{hdf5_path}' + f'/{self.data_file}#{hdf5_path}' ) self.hdf5_references[archive_path] = ref From 382231b5e079a81c0bd6a0567aa67a7b1034fe44 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:01:55 +0100 Subject: [PATCH 43/93] Reset data dicts and reference after each writing --- src/nomad_measurements/utils.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index e91c2336..caeca9a4 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -358,6 +358,10 @@ def write_file(self): for archive_path, hdf5_path in self.hdf5_references.items(): self.set_hdf5_reference(self.archive, archive_path, hdf5_path) + # reset hdf5 data dict and references + self.hdf5_data_dict = collections.OrderedDict() + self.hdf5_references = collections.OrderedDict() + @staticmethod def set_hdf5_reference(section: 'Section', path: str, ref: str): """ From f867a9a38881cd0c5e87edf8a1d0ee969f4d5f4b Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:02:09 +0100 Subject: [PATCH 44/93] Fixing --- src/nomad_measurements/utils.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index caeca9a4..bafb305c 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -220,10 +220,8 @@ def read_hdf5_dataset(archive, key: str) -> Any: class AuxiliaryHDF5Handler: """ - A class for handling auxiliary files. - - read_dataset: Read data from an auxiliary file. - - write_dataset: Write data to an auxiliary file. - - save: Save the auxiliary file. + Class for handling the creation of auxiliary files to store big data arrays outside + the main archive file (e.g. HDF5, NeXus). """ def __init__( self, @@ -295,7 +293,6 @@ def _write_hdf5_file(self): """ # pivot from .nxs to .h5 - self.auxiliary_file = f'{self.data_file}.h5' for archive_path, hdf5_path in self.hdf5_references.items(): self.hdf5_references[archive_path] = self.remove_nexus_annotations( hdf5_path From 2b75a792facc1454da0df0b7a29d7c650c3de646 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:02:35 +0100 Subject: [PATCH 45/93] Overwrite dataset if it already exists --- src/nomad_measurements/utils.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index bafb305c..d7e37be9 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -318,6 +318,9 @@ def _write_hdf5_file(self): group_name, dataset_name = key.rsplit('/', 1) group = h5.require_group(group_name) + if f'{group_name}/{dataset_name}' in h5: + del h5[f'{group_name}/{dataset_name}'] + if value_is_unit: try: h5[f'{group_name}/{dataset_name}'].attrs['units'] = str( From 97f4a3fd1184e23a61a9476b899599ed0e6ba006 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:13:58 +0100 Subject: [PATCH 46/93] Refactor add_dataset --- src/nomad_measurements/utils.py | 35 +++++++++++---------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index d7e37be9..e1e1583e 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -397,44 +397,33 @@ def add_dataset( self, hdf5_path: str, archive_path: str, - value: Any, + data: Any, lazy: bool = True, - validate: bool = False, ): """ Add a dataset to the HDF5 file. The dataset is written lazily (default) when - the `write_file` method is called. If `validate` is True, the `hdf5_path` is - validated against the `valid_dataset_paths` instance variable before adding the - value. + the `write_file` method is called. The `hdf5_path` is validated against the + `valid_dataset_paths` if provided before adding the + data. Args: hdf5_path (str): The dataset path to be used in the HDF5 file. archive_path (str): The path of the quantity in the archive. - value (Any): The value to be stored in the HDF5 file. + data (Any): The data to be stored in the HDF5 file. lazy (bool): If True, the file is not written immediately. - validate (bool): If True, the `hdf5_path` is validated against the - `valid_dataset_paths` instance variable before adding the value. """ - if validate: - if not self.valid_dataset_paths: - self.logger.warning( - f'Unable to add "{hdf5_path}" to HDF5 file as no valid ' - 'collection of dataset paths found.' - ) - return + if self.valid_dataset_paths: if hdf5_path not in self.valid_dataset_paths: - self.logger.warning( - f'Unable to add "{hdf5_path}" to HDF5 file as the dataset path ' - 'is not in the list of valid dataset paths.' + raise ValidationError( + f'Invalid dataset path "{hdf5_path}".' ) - return # handle the pint.Quantity and add data - if isinstance(value, pint.Quantity): - self.hdf5_data_dict[hdf5_path] = value.magnitude - self.hdf5_data_dict[f'{hdf5_path}/@units'] = str(value.units) + if isinstance(data, pint.Quantity): + self.hdf5_data_dict[hdf5_path] = data.magnitude + self.hdf5_data_dict[f'{hdf5_path}/@units'] = str(data.units) else: - self.hdf5_data_dict[hdf5_path] = value + self.hdf5_data_dict[hdf5_path] = data ref = ( f'/uploads/{self.archive.m_context.upload_id}/raw' f'/{self.data_file}#{hdf5_path}' From 10bf72e0bbd9190098116c7d221c565049b7ca4d Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:21:32 +0100 Subject: [PATCH 47/93] Reorganize and doctrings --- src/nomad_measurements/utils.py | 176 ++++++++++++++++---------------- 1 file changed, 88 insertions(+), 88 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index e1e1583e..6d36bbfd 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -191,6 +191,7 @@ def set_data(obj, **kwargs): if hasattr(obj, key): setattr(obj, key, value) + def read_hdf5_dataset(archive, key: str) -> Any: """ Get the data for the quantity. If the quantity is a HDF5Reference, read the dataset @@ -223,6 +224,7 @@ class AuxiliaryHDF5Handler: Class for handling the creation of auxiliary files to store big data arrays outside the main archive file (e.g. HDF5, NeXus). """ + def __init__( self, filename: str, @@ -250,37 +252,72 @@ def __init__( self.hdf5_data_dict = collections.OrderedDict() self.hdf5_references = collections.OrderedDict() - @staticmethod - def remove_nexus_annotations(path: str) -> str: + def add_dataset( + self, + hdf5_path: str, + archive_path: str, + data: Any, + lazy: bool = True, + ): """ - Remove the nexus related annotations from the dataset path. - For e.g., - '/ENTRY[entry]/experiment_result/intensity' -> - '/entry/experiment_result/intensity' + Add a dataset to the HDF5 file. The dataset is written lazily (default) when + the `write_file` method is called. The `hdf5_path` is validated against the + `valid_dataset_paths` if provided before adding the + data. Args: - path (str): The dataset path with nexus annotations. + hdf5_path (str): The dataset path to be used in the HDF5 file. + archive_path (str): The path of the quantity in the archive. + data (Any): The data to be stored in the HDF5 file. + lazy (bool): If True, the file is not written immediately. + """ + if self.valid_dataset_paths: + if hdf5_path not in self.valid_dataset_paths: + raise ValidationError(f'Invalid dataset path "{hdf5_path}".') - Returns: - str: The dataset path without nexus annotations. + # handle the pint.Quantity and add data + if isinstance(data, pint.Quantity): + self.hdf5_data_dict[hdf5_path] = data.magnitude + self.hdf5_data_dict[f'{hdf5_path}/@units'] = str(data.units) + else: + self.hdf5_data_dict[hdf5_path] = data + ref = ( + f'/uploads/{self.archive.m_context.upload_id}/raw' + f'/{self.data_file}#{hdf5_path}' + ) + self.hdf5_references[archive_path] = ref + + if not lazy: + self.write_file() + + def write_file(self): """ - if not path: - return path + Method for creating an auxiliary file to store big data arrays outside the + main archive file (e.g. HDF5, NeXus). + """ + try: + if self.data_file.endswith('.h5'): + self.data_file = self.data_file.replace('.h5', '.nxs') + self.write_nx_file() + except Exception: + self.logger.warning('Error creating nexus file. Creating h5 file instead') + if self.data_file.endswith('.nxs'): + self.data_file = self.data_file.replace('.nxs', '.h5') + self.write_hdf5_file() - pattern = r'.*\[.*\]' - new_path = '' - for part in path.split('/')[1:]: - if re.match(pattern, part): - new_path += '/' + part.split('[')[0].strip().lower() - else: - new_path += '/' + part - new_path = new_path.replace('.nxs', '.h5') - return new_path + # add the references for the HDF5Reference quantities + for archive_path, hdf5_path in self.hdf5_references.items(): + self._set_hdf5_reference(self.archive, archive_path, hdf5_path) + + # reset hdf5 data dict and references + self.hdf5_data_dict = collections.OrderedDict() + self.hdf5_references = collections.OrderedDict() def _write_nx_file(self): """ - Method for creating a NeXus file which contains the array data along with other - archive data in a NeXus view. + Method for creating a NeXus file. Additional data from the archive is added + to the `hdf5_data_dict` before creating the nexus file. This provides a NeXus + view of the data in addition to storing array data. """ raise NotImplementedError('Method `write_nx_file` is not implemented.') # TODO add archive data to `hdf5_data_dict` before creating the nexus file. Use @@ -289,17 +326,16 @@ def _write_nx_file(self): def _write_hdf5_file(self): """ - Method for creating an HDF5 file which contains the array data. + Method for creating an HDF5 file. """ - - # pivot from .nxs to .h5 + # remove the nexus annotations from the dataset paths if any for archive_path, hdf5_path in self.hdf5_references.items(): - self.hdf5_references[archive_path] = self.remove_nexus_annotations( + self.hdf5_references[archive_path] = self._remove_nexus_annotations( hdf5_path ) tmp_dict = {} for key, value in self.hdf5_data_dict.items(): - tmp_dict[self.remove_nexus_annotations(key)] = value + tmp_dict[self._remove_nexus_annotations(key)] = value self.hdf5_data_dict = tmp_dict # create the HDF5 file @@ -339,33 +375,37 @@ def _write_hdf5_file(self): # group.attrs['signal'] = 'value' # group.attrs['NX_class'] = 'NXdata' - def write_file(self): - """ - Method for creating an auxiliary file to store big data arrays outside the - main archive file (e.g. HDF5, NeXus). + @staticmethod + def _remove_nexus_annotations(path: str) -> str: """ - try: - if self.data_file.endswith('.h5'): - self.data_file = self.data_file.replace('.h5', '.nxs') - self.write_nx_file() - except Exception: - self.logger.warning('Error creating nexus file. Creating h5 file instead') - if self.data_file.endswith('.nxs'): - self.data_file = self.data_file.replace('.nxs', '.h5') - self.write_hdf5_file() + Remove the nexus related annotations from the dataset path. + For e.g., + '/ENTRY[entry]/experiment_result/intensity' -> + '/entry/experiment_result/intensity' - # add the references for the HDF5Reference quantities - for archive_path, hdf5_path in self.hdf5_references.items(): - self.set_hdf5_reference(self.archive, archive_path, hdf5_path) + Args: + path (str): The dataset path with nexus annotations. - # reset hdf5 data dict and references - self.hdf5_data_dict = collections.OrderedDict() - self.hdf5_references = collections.OrderedDict() + Returns: + str: The dataset path without nexus annotations. + """ + if not path: + return path + + pattern = r'.*\[.*\]' + new_path = '' + for part in path.split('/')[1:]: + if re.match(pattern, part): + new_path += '/' + part.split('[')[0].strip().lower() + else: + new_path += '/' + part + new_path = new_path.replace('.nxs', '.h5') + return new_path @staticmethod - def set_hdf5_reference(section: 'Section', path: str, ref: str): + def _set_hdf5_reference(section: 'Section', path: str, ref: str): """ - Method for setting the HDF5Reference of a quantity in a section. It can handle + Method for setting a HDF5Reference quantity in a section. It can handle nested quantities and repeatable sections, provided that the quantity itself is of type `HDF5Reference`. For example, one can set the reference for a quantity path like @@ -392,43 +432,3 @@ def set_hdf5_reference(section: 'Section', path: str, ref: str): attr.m_get_quantity_definition(quantity_name).type, HDF5Reference ): attr.m_set(quantity_name, ref) - - def add_dataset( - self, - hdf5_path: str, - archive_path: str, - data: Any, - lazy: bool = True, - ): - """ - Add a dataset to the HDF5 file. The dataset is written lazily (default) when - the `write_file` method is called. The `hdf5_path` is validated against the - `valid_dataset_paths` if provided before adding the - data. - - Args: - hdf5_path (str): The dataset path to be used in the HDF5 file. - archive_path (str): The path of the quantity in the archive. - data (Any): The data to be stored in the HDF5 file. - lazy (bool): If True, the file is not written immediately. - """ - if self.valid_dataset_paths: - if hdf5_path not in self.valid_dataset_paths: - raise ValidationError( - f'Invalid dataset path "{hdf5_path}".' - ) - - # handle the pint.Quantity and add data - if isinstance(data, pint.Quantity): - self.hdf5_data_dict[hdf5_path] = data.magnitude - self.hdf5_data_dict[f'{hdf5_path}/@units'] = str(data.units) - else: - self.hdf5_data_dict[hdf5_path] = data - ref = ( - f'/uploads/{self.archive.m_context.upload_id}/raw' - f'/{self.data_file}#{hdf5_path}' - ) - self.hdf5_references[archive_path] = ref - - if not lazy: - self.write_file() From b5b56665e1a61a3d18e24440f64d10a70dcb56fd Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:28:15 +0100 Subject: [PATCH 48/93] Rename variable --- src/nomad_measurements/utils.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 6d36bbfd..4eb0824b 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -254,36 +254,36 @@ def __init__( def add_dataset( self, - hdf5_path: str, + path: str, archive_path: str, data: Any, lazy: bool = True, ): """ Add a dataset to the HDF5 file. The dataset is written lazily (default) when - the `write_file` method is called. The `hdf5_path` is validated against the + the `write_file` method is called. The `path` is validated against the `valid_dataset_paths` if provided before adding the data. Args: - hdf5_path (str): The dataset path to be used in the HDF5 file. - archive_path (str): The path of the quantity in the archive. + path (str): The dataset path to be used in the HDF5 file. data (Any): The data to be stored in the HDF5 file. + archive_path (str): The path of the quantity in the archive. lazy (bool): If True, the file is not written immediately. """ if self.valid_dataset_paths: - if hdf5_path not in self.valid_dataset_paths: - raise ValidationError(f'Invalid dataset path "{hdf5_path}".') + if path not in self.valid_dataset_paths: + raise ValidationError(f'Invalid dataset path "{path}".') # handle the pint.Quantity and add data if isinstance(data, pint.Quantity): - self.hdf5_data_dict[hdf5_path] = data.magnitude - self.hdf5_data_dict[f'{hdf5_path}/@units'] = str(data.units) + self.hdf5_data_dict[path] = data.magnitude + self.hdf5_data_dict[f'{path}/@units'] = str(data.units) else: - self.hdf5_data_dict[hdf5_path] = data + self.hdf5_data_dict[path] = data ref = ( f'/uploads/{self.archive.m_context.upload_id}/raw' - f'/{self.data_file}#{hdf5_path}' + f'/{self.data_file}#{path}' ) self.hdf5_references[archive_path] = ref From 88a9dde6783b27305305e3a127d80a4a285969f7 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:41:05 +0100 Subject: [PATCH 49/93] Add read_dataset method --- src/nomad_measurements/utils.py | 59 ++++++++++++++++----------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 4eb0824b..ab30dadc 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -192,33 +192,6 @@ def set_data(obj, **kwargs): setattr(obj, key, value) -def read_hdf5_dataset(archive, key: str) -> Any: - """ - Get the data for the quantity. If the quantity is a HDF5Reference, read the dataset - and corresponding units if available, and return a pint.Quantity. - - Args: - obj (Any): The object to get the data from. - key (str): The key of the quantity. - - Returns: - Any: The data for the quantity. - """ - if not key: - return - - try: - value = HDF5Reference.read_dataset(archive, key) - except KeyError: - return None - # file_path, dataset_path = key.split('#') - # with archive.m_context.raw_file(file_path, 'r') as h5file: - # with h5py.File(h5file.name, 'r') as h5: - # value = h5[dataset_path] - - return value - - class AuxiliaryHDF5Handler: """ Class for handling the creation of auxiliary files to store big data arrays outside @@ -255,15 +228,14 @@ def __init__( def add_dataset( self, path: str, - archive_path: str, data: Any, + archive_path: str, lazy: bool = True, ): """ Add a dataset to the HDF5 file. The dataset is written lazily (default) when - the `write_file` method is called. The `path` is validated against the - `valid_dataset_paths` if provided before adding the - data. + either `read_dataset` or `write_file` method is called. The `path` is validated + against the `valid_dataset_paths` if provided before adding the data. Args: path (str): The dataset path to be used in the HDF5 file. @@ -290,6 +262,31 @@ def add_dataset( if not lazy: self.write_file() + def read_dataset(self, path: str): + """ + Returns the dataset at the given path. If the quantity has `units` as an attribute, + tries to returns a `pint.Quantity`. Before returning the dataset, the method + also writes the file with any pending datasets. + + Args: + path (str): The dataset path in the HDF5 file. + """ + # TODO handle the case when dataset is not found + # TODO if units are available, return a pint.Quantity + if self.hdf5_data_dict or self.hdf5_references: + self.write_file() + + try: + value = HDF5Reference.read_dataset(self.archive, path) + except KeyError: + return None + # file_path, dataset_path = path.split('#') + # with archive.m_context.raw_file(file_path, 'r') as h5file: + # with h5py.File(h5file.name, 'r') as h5: + # value = h5[dataset_path] + + return value + def write_file(self): """ Method for creating an auxiliary file to store big data arrays outside the From bbd0a868bff173577e14fb9822df88011cec6d25 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:43:29 +0100 Subject: [PATCH 50/93] Cleaning --- src/nomad_measurements/xrd/nx.py | 192 ------------------------------- 1 file changed, 192 deletions(-) diff --git a/src/nomad_measurements/xrd/nx.py b/src/nomad_measurements/xrd/nx.py index 4117bdb9..db73af2f 100644 --- a/src/nomad_measurements/xrd/nx.py +++ b/src/nomad_measurements/xrd/nx.py @@ -15,18 +15,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import re -from collections import OrderedDict -from typing import TYPE_CHECKING - -from pynxtools import dataconverter -from pynxtools.nomad.dataconverter import populate_nexus_subsection - -if TYPE_CHECKING: - from nomad.datamodel.datamodel import EntryArchive - from structlog.stdlib import ( - BoundLogger, - ) NEXUS_DATASET_PATHS = [ '/ENTRY[entry]/experiment_result/intensity', @@ -49,183 +37,3 @@ '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/ratio_k_alphatwo_k_alphaone', '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/kbeta', ] - -CONCEPT_MAP = OrderedDict( - { - # Mapping data in raw_data: data in the raw file from the instrument - # Make sure to defines the mapping for magnitude before the mapping for units - '/ENTRY[entry]/experiment_result/intensity': 'raw_data.intensity.magnitude', - '/ENTRY[entry]/experiment_result/two_theta': 'raw_data.2Theta.magnitude', - '/ENTRY[entry]/experiment_result/two_theta/@units': 'raw_data.2Theta.units', - '/ENTRY[entry]/experiment_result/omega': 'raw_data.Omega.magnitude', - '/ENTRY[entry]/experiment_result/omega/@units': 'raw_data.Omega.units', - '/ENTRY[entry]/experiment_result/chi': 'raw_data.Chi.magnitude', - '/ENTRY[entry]/experiment_result/chi/@units': 'raw_data.Chi.units', - '/ENTRY[entry]/experiment_result/phi': 'raw_data.Phi.magnitude', - '/ENTRY[entry]/experiment_result/phi/@units': 'raw_data.Phi.units', - '/ENTRY[entry]/experiment_config/count_time': 'raw_data.countTime.magnitude', - '/ENTRY[entry]/experiment_config/count_time/@units': 'raw_data.countTime.units', - 'line': { - '/ENTRY[entry]/experiment_result/q_norm': 'raw_data.q_norm.magnitude', - '/ENTRY[entry]/experiment_result/q_norm/@units': 'raw_data.q_norm.units', - }, - 'rsm': { - '/ENTRY[entry]/experiment_result/q_parallel': 'raw_data.q_parallel', - '/ENTRY[entry]/experiment_result/q_parallel/@units': 'raw_data.q_parallel.units', - '/ENTRY[entry]/experiment_result/q_perpendicular': 'raw_data.q_perpendicular.magnitude', - '/ENTRY[entry]/experiment_result/q_perpendicular/@units': 'raw_data.q_perpendicular.units', - }, - # Mapping data in NOMAD archive - '/ENTRY[entry]/method': 'archive.data.method', - '/ENTRY[entry]/measurement_type': 'archive.data.diffraction_method_name', - '/ENTRY[entry]/INSTRUMENT[instrument]/DETECTOR[detector]/scan_axis': ( - 'archive.data.results[0].scan_axis' - ), - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_material': 'archive.data.xrd_settings.source.xray_tube_material', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_current': 'archive.data.xrd_settings.source.xray_tube_current.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_current/@units': 'archive.data.xrd_settings.source.xray_tube_current.units', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_voltage': 'archive.data.xrd_settings.source.xray_tube_voltage.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/xray_tube_voltage/@units': 'archive.data.xrd_settings.source.xray_tube_voltage.units', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_one': 'archive.data.xrd_settings.source.kalpha_one.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_one/@units': 'archive.data.xrd_settings.source.kalpha_one.units', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_two': 'archive.data.xrd_settings.source.kalpha_two.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/k_alpha_two/@units': 'archive.data.xrd_settings.source.kalpha_two.units', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/ratio_k_alphatwo_k_alphaone': 'archive.data.xrd_settings.source.ratio_kalphatwo_kalphaone', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/kbeta': 'archive.data.xrd_settings.source.kbeta.magnitude', - '/ENTRY[entry]/INSTRUMENT[instrument]/SOURCE[source]/kbeta/@units': 'archive.data.xrd_settings.source.kbeta.units', - } -) - - -def remove_nexus_annotations(path: str) -> str: - """ - Remove the nexus related annotations from the dataset path. - For e.g., - '/ENTRY[entry]/experiment_result/intensity' -> '/entry/experiment_result/intensity' - - Args: - path (str): The dataset path with nexus annotations. - - Returns: - str: The dataset path without nexus annotations. - """ - if not path: - return path - - pattern = r'.*\[.*\]' - new_path = '' - for part in path.split('/')[1:]: - if re.match(pattern, part): - new_path += '/' + part.split('[')[0].strip().lower() - else: - new_path += '/' + part - new_path = new_path.replace('.nxs', '.h5') - return new_path - - -def walk_through_object(parent_obj, attr_chain, default=None): - """ - Walk though the object until reach the leaf. - - Args: - parent_obj: This is a python obj. - attr_chain: Dot separated obj chain. - default: A value to be returned by default, if not data is found. - """ - try: - expected_parts = 2 - if isinstance(attr_chain, str): - parts = attr_chain.split('.', 1) - - if len(parts) == expected_parts: - child_nm, rest_part = parts - if '[' in child_nm: - child_nm, index = child_nm.split('[') - index = int(index[:-1]) - child_obj = getattr(parent_obj, child_nm)[index] - else: - child_obj = getattr(parent_obj, child_nm) - return walk_through_object(child_obj, rest_part, default=default) - else: - return getattr(parent_obj, attr_chain, default) - except (AttributeError, IndexError, KeyError, ValueError): - return None - - -def connect_concepts(template, archive: 'EntryArchive', scan_type: str): # noqa: PLR0912 - """ - Connect the concepts between `ELNXrayDiffraction` and `NXxrd_pan` schema. - - Args: - template (Template): The pynxtools template, a inherited class from python dict. - archive (EntryArchive): Nomad archive contains secttions, subsections and - quantities. - scan_type (str): Name of the scan type such as line and RSM. - """ - - for key, archive_concept in CONCEPT_MAP.items(): - if isinstance(archive_concept, dict): - if key == scan_type: - for sub_key, sub_archive_concept in archive_concept.items(): - _, arch_attr = sub_archive_concept.split('.', 1) - value = walk_through_object(archive, arch_attr) - if value is not None: - template[sub_key] = ( - str(value) if sub_key.endswith('units') else value - ) - else: - continue - elif archive_concept: - _, arch_attr = archive_concept.split('.', 1) - value = walk_through_object(archive, arch_attr) - # Use multiple excepts to avoid catching all exceptions - if value is not None: - template[key] = str(value) if key.endswith('units') else value - - template['/ENTRY[entry]/definition'] = 'NXxrd_pan' - - # Links to the data and concepts - template['/ENTRY[entry]/@default'] = 'experiment_result' - template['/ENTRY[entry]/experiment_result/@signal'] = 'intensity' - template['/ENTRY[entry]/experiment_result/@axes'] = 'two_theta' - template['/ENTRY[entry]/q_data/q'] = { - 'link': '/ENTRY[entry]/experiment_result/q_norm' - } - template['/ENTRY[entry]/q_data/intensity'] = { - 'link': '/ENTRY[entry]/experiment_result/intensity' - } - template['/ENTRY[entry]/q_data/q_parallel'] = { - 'link': '/ENTRY[entry]/experiment_result/q_parallel' - } - template['/ENTRY[entry]/q_data/q_perpendicular'] = { - 'link': '/ENTRY[entry]/experiment_result/q_perpendicular' - } - - -def write_nx_section_and_create_file( - archive: 'EntryArchive', logger: 'BoundLogger', scan_type: str = 'line' -): - """ - Uses the archive to generate the NeXus section and .nxs file. - - Args: - archive (EntryArchive): The archive containing the section. - logger (BoundLogger): A structlog logger. - generate_nexus_file (boolean): If True, the function will generate a .nxs file. - nxs_as_entry (boolean): If True, the function will generate a .nxs file - as a nomad entry. - """ - nxdl_root, _ = dataconverter.helpers.get_nxdl_root_and_path('NXxrd_pan') - template = dataconverter.template.Template() - dataconverter.helpers.generate_template_from_nxdl(nxdl_root, template) - connect_concepts(template, archive, scan_type=scan_type) - archive_name = archive.metadata.mainfile.split('.')[0] - nexus_output = f'{archive_name}.nxs' - - populate_nexus_subsection( - template=template, - app_def='NXxrd_pan', - archive=archive, - logger=logger, - output_file_path=nexus_output, - ) From 94bdde79503b004d5e4e7f79373920d839537c45 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 16:56:44 +0100 Subject: [PATCH 51/93] Adapting schema with hdf5 handler --- src/nomad_measurements/xrd/schema.py | 130 +++++++++++++++------------ 1 file changed, 71 insertions(+), 59 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 214149a4..d2f16d82 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -339,8 +339,8 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): (dict, dict): line_linear, line_log """ plots = [] - two_theta = get_data(self, 'two_theta') - intensity = get_data(self, 'intensity') + two_theta = archive.hdf5_handler.read_dataset(self.two_theta) + intensity = archive.hdf5_handler.read_dataset(self.intensity) if two_theta is None or intensity is None: return plots @@ -431,10 +431,11 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) ) - if self.q_norm is None: + q_norm = archive.hdf5_handler.read_dataset(self.q_norm) + if q_norm is None: return plots - x = self.q_norm.to('1/angstrom').magnitude + x = q_norm.to('1/angstrom').magnitude fig_line_log = px.line( x=x, y=y, @@ -499,10 +500,10 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): self.name = 'XRD Scan Result' if self.source_peak_wavelength is not None: - q_norm = read_hdf5_dataset(archive, self.q_norm) + q_norm = archive.hdf5_handler.read_dataset(self.q_norm) if q_norm is not None: q_norm *= ureg('1/angstrom') - two_theta = read_hdf5_dataset(archive, self.two_theta) + two_theta = archive.hdf5_handler.read_dataset(self.two_theta) if two_theta is not None: two_theta *= ureg('degree') q_norm, two_theta = calculate_two_theta_or_q( @@ -510,8 +511,16 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): two_theta=two_theta, q=q_norm, ) - - # set_data(self, q_norm=q_norm, two_theta=two_theta) + archive.hdf5_handler.add_dataset( + path=self.q_norm, + data=q_norm, + archive_path='results[0].q_norm', + ) + archive.hdf5_handler.add_dataset( + path=self.two_theta, + data=two_theta, + archive_path='results[0].two_theta', + ) class XRDResultRSM(XRDResult): @@ -542,9 +551,9 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): (dict, dict): json_2theta_omega, json_q_vector """ plots = [] - two_theta = get_data(self, 'two_theta') - intensity = get_data(self, 'intensity') - omega = get_data(self, 'omega') + two_theta = archive.hdf5_handler.read_dataset(self.two_theta) + intensity = archive.hdf5_handler.read_dataset(self.intensity) + omega = archive.hdf5_handler.read_dataset(self.omega) if two_theta is None or intensity is None or omega is None: return plots @@ -620,9 +629,11 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) # Plot for RSM in Q-vectors - if self.q_parallel is not None and self.q_perpendicular is not None: - x = get_data(self, 'q_parallel').to('1/angstrom').magnitude.flatten() - y = get_data(self, 'q_perpendicular').to('1/angstrom').magnitude.flatten() + q_parallel = archive.hdf5_handler.read_dataset(self.q_parallel) + q_perpendicular = archive.hdf5_handler.read_dataset(self.q_perpendicular) + if q_parallel is not None and q_perpendicular is not None: + x = q_parallel.to('1/angstrom').magnitude.flatten() + y = q_perpendicular.to('1/angstrom').magnitude.flatten() # q_vectors lead to irregular grid # generate a regular grid using interpolation x_regular = np.linspace(x.min(), x.max(), z.shape[0]) @@ -711,8 +722,8 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): if self.source_peak_wavelength is not None: for var_axis in ['omega', 'chi', 'phi']: - var_axis_value = HDF5Reference.read_dataset( - archive, getattr(self, var_axis) + var_axis_value = archive.hdf5_handler.read_dataset( + getattr(self, var_axis) ) if ( var_axis_value is not None @@ -723,12 +734,17 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): two_theta=self.two_theta * np.ones_like(self.intensity), omega=var_axis_value, ) - set_data( - self, - q_parallel=q_parallel, - q_perpendicular=q_perpendicular, + archive.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/q_parallel', + data=q_parallel, + archive_path='results[0].q_parallel', + ) + archive.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/q_perpendicular', + data=q_perpendicular, + archive_path='results[0].q_perpendicular', ) - break + return class XRayDiffraction(Measurement): @@ -798,14 +814,14 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): if not archive.results.properties.structural: diffraction_patterns = [] for result in self.results: - intensity = read_hdf5_dataset(archive, result.intensity) + intensity = archive.hdf5_handler.read_dataset(result.intensity) if intensity is not None: intensity *= ureg('dimensionless') if intensity is None or len(intensity) != 1: - two_theta = read_hdf5_dataset(archive, result.two_theta) + two_theta = archive.hdf5_handler.read_dataset(result.two_theta) if two_theta is not None: two_theta *= ureg('degree') - q_norm = read_hdf5_dataset(archive, result.q_norm) + q_norm = archive.hdf5_handler.read_dataset(result.q_norm) if q_norm is not None: q_norm *= ureg('1/angstrom') @@ -947,41 +963,35 @@ def write_xrd_data( merge_sections(self, xrd, logger) - self.populate_hdf5_data_dict( - '/ENTRY[entry]/experiment_result/intensity', - 'results[0].intensity', - xrd_dict.get('intensity', None), - logger, + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/intensity', + data=xrd_dict.get('intensity', None), + archive_path='results[0].intensity', ) - self.populate_hdf5_data_dict( - '/ENTRY[entry]/experiment_result/two_theta', - 'results[0].two_theta', - xrd_dict.get('2Theta', None), - logger, + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/two_theta', + data=xrd_dict.get('2Theta', None), + archive_path='results[0].two_theta', ) - self.populate_hdf5_data_dict( - '/ENTRY[entry]/experiment_result/omega', - 'results[0].omega', - xrd_dict.get('Omega', None), - logger, + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/omega', + data=xrd_dict.get('Omega', None), + archive_path='results[0].omega', ) - self.populate_hdf5_data_dict( - '/ENTRY[entry]/experiment_result/chi', - 'results[0].chi', - xrd_dict.get('Chi', None), - logger, + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/chi', + data=xrd_dict.get('Chi', None), + archive_path='results[0].chi', ) - self.populate_hdf5_data_dict( - '/ENTRY[entry]/experiment_result/phi', - 'results[0].phi', - xrd_dict.get('Phi', None), - logger, + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/phi', + data=xrd_dict.get('Phi', None), + archive_path='results[0].phi', ) - self.populate_hdf5_data_dict( - '/ENTRY[entry]/experiment_result/integration_time', - 'results[0].integration_time', - xrd_dict.get('countTime', None), - logger, + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/integration_time', + data=xrd_dict.get('countTime', None), + archive_path='results[0].integration_time', ) def backward_compatibility(self): @@ -1014,13 +1024,15 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): with archive.m_context.raw_file(self.data_file) as file: xrd_dict = read_function(file.name, logger) self.auxiliary_file = f'{self.data_file}.nxs' - self.auxiliary_file_handler = AuxiliaryHDF5Handler() - self.hdf5_dataset_paths = NEXUS_DATASET_PATHS + self.hdf5_handler = AuxiliaryHDF5Handler( + filename=self.auxiliary_file, + archive=archive, + logger=logger, + valid_datasets=NEXUS_DATASET_PATHS, + ) write_function(xrd_dict, archive, logger) - self.create_auxiliary_file(archive, logger) + self.hdf5_handler.write_file() super().normalize(archive, logger) - if not self.results: - return class RawFileXRDData(EntryData): From a859be225e5c0d91000cefa2de1b407e1b5f4acc Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 17:02:01 +0100 Subject: [PATCH 52/93] Cooments, minor refactoring --- src/nomad_measurements/utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index ab30dadc..6ba76fad 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -275,7 +275,8 @@ def read_dataset(self, path: str): # TODO if units are available, return a pint.Quantity if self.hdf5_data_dict or self.hdf5_references: self.write_file() - + if path is None: + return try: value = HDF5Reference.read_dataset(self.archive, path) except KeyError: @@ -320,11 +321,15 @@ def _write_nx_file(self): # TODO add archive data to `hdf5_data_dict` before creating the nexus file. Use # `populate_hdf5_data_dict` method for each quantity that is needed in .nxs # file. Create a NeXus file with the data in `hdf5_data_dict`. + # One issue here is as we populate the `hdf5_data_dict` with the archive data, + # we will always have to over write the nexus file def _write_hdf5_file(self): """ Method for creating an HDF5 file. """ + if not self.hdf5_data_dict and not self.hdf5_references: + return # remove the nexus annotations from the dataset paths if any for archive_path, hdf5_path in self.hdf5_references.items(): self.hdf5_references[archive_path] = self._remove_nexus_annotations( From fea1724dcfee0d910cf203e18c92923856b8b334 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 21:33:48 +0100 Subject: [PATCH 53/93] Fixing; add `hdf5_handler` as an attribute for archive --- src/nomad_measurements/xrd/schema.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index d2f16d82..02afaa26 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -512,14 +512,14 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): q=q_norm, ) archive.hdf5_handler.add_dataset( - path=self.q_norm, + path='/ENTRY[entry]/experiment_result/q_norm', data=q_norm, - archive_path='results[0].q_norm', + archive_path='data.results[0].q_norm', ) archive.hdf5_handler.add_dataset( - path=self.two_theta, + path='/ENTRY[entry]/experiment_result/two_theta', data=two_theta, - archive_path='results[0].two_theta', + archive_path='data.results[0].two_theta', ) @@ -737,12 +737,12 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): archive.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/q_parallel', data=q_parallel, - archive_path='results[0].q_parallel', + archive_path='data.results[0].q_parallel', ) archive.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/q_perpendicular', data=q_perpendicular, - archive_path='results[0].q_perpendicular', + archive_path='data.results[0].q_perpendicular', ) return @@ -875,7 +875,7 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData): component=ELNComponentEnum.FileEditQuantity, ), ) - auxiliary_file_handler = None + hdf5_handler = None measurement_identifiers = SubSection( section_def=ReadableIdentifiers, ) @@ -1028,8 +1028,9 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): filename=self.auxiliary_file, archive=archive, logger=logger, - valid_datasets=NEXUS_DATASET_PATHS, + valid_dataset_paths=NEXUS_DATASET_PATHS, ) + archive.hdf5_handler = self.hdf5_handler write_function(xrd_dict, archive, logger) self.hdf5_handler.write_file() super().normalize(archive, logger) From df6b5714511f07a3b87e0d0763fb7b5db49d8fda Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 21:34:23 +0100 Subject: [PATCH 54/93] Reorganization --- src/nomad_measurements/xrd/schema.py | 63 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 02afaa26..bd367b0b 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -72,9 +72,9 @@ NOMADMeasurementsCategory, ) from nomad_measurements.utils import ( + AuxiliaryHDF5Handler, get_bounding_range_2d, merge_sections, - AuxiliaryHDF5Handler, ) from nomad_measurements.xrd.nx import NEXUS_DATASET_PATHS @@ -931,6 +931,36 @@ def write_xrd_data( if result is not None: result.scan_axis = metadata_dict.get('scan_axis', None) + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/intensity', + data=xrd_dict.get('intensity', None), + archive_path='data.results[0].intensity', + ) + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/two_theta', + data=xrd_dict.get('2Theta', None), + archive_path='data.results[0].two_theta', + ) + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/omega', + data=xrd_dict.get('Omega', None), + archive_path='data.results[0].omega', + ) + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/chi', + data=xrd_dict.get('Chi', None), + archive_path='data.results[0].chi', + ) + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/phi', + data=xrd_dict.get('Phi', None), + archive_path='data.results[0].phi', + ) + self.hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_config/count_time', + data=xrd_dict.get('countTime', None), + archive_path='data.results[0].integration_time', + ) result.normalize(archive, logger) results.append(result) @@ -963,37 +993,6 @@ def write_xrd_data( merge_sections(self, xrd, logger) - self.hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/intensity', - data=xrd_dict.get('intensity', None), - archive_path='results[0].intensity', - ) - self.hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/two_theta', - data=xrd_dict.get('2Theta', None), - archive_path='results[0].two_theta', - ) - self.hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/omega', - data=xrd_dict.get('Omega', None), - archive_path='results[0].omega', - ) - self.hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/chi', - data=xrd_dict.get('Chi', None), - archive_path='results[0].chi', - ) - self.hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/phi', - data=xrd_dict.get('Phi', None), - archive_path='results[0].phi', - ) - self.hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/integration_time', - data=xrd_dict.get('countTime', None), - archive_path='results[0].integration_time', - ) - def backward_compatibility(self): """ Method for backward compatibility. From ae96f5d59d17111379d56acc0f90eaffc580ca73 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 21:36:19 +0100 Subject: [PATCH 55/93] Fixing --- src/nomad_measurements/utils.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 6ba76fad..bbca01db 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -16,9 +16,8 @@ # limitations under the License. # import collections -import pint -import re import os.path +import re from typing import ( TYPE_CHECKING, Any, @@ -26,6 +25,7 @@ import h5py import numpy as np +import pint from nomad.datamodel.hdf5 import HDF5Reference if TYPE_CHECKING: @@ -245,7 +245,7 @@ def add_dataset( """ if self.valid_dataset_paths: if path not in self.valid_dataset_paths: - raise ValidationError(f'Invalid dataset path "{path}".') + self.logger.error(f'Invalid dataset path "{path}".') # handle the pint.Quantity and add data if isinstance(data, pint.Quantity): @@ -293,15 +293,17 @@ def write_file(self): Method for creating an auxiliary file to store big data arrays outside the main archive file (e.g. HDF5, NeXus). """ + # TODO: The selection made in the first instance of using `write_file` should + # be remembered and used for subsequent calls to `write_file`. try: if self.data_file.endswith('.h5'): self.data_file = self.data_file.replace('.h5', '.nxs') - self.write_nx_file() + self._write_nx_file() except Exception: - self.logger.warning('Error creating nexus file. Creating h5 file instead') + self.logger.warning('Error creating nexus file. Creating h5 file instead.') if self.data_file.endswith('.nxs'): self.data_file = self.data_file.replace('.nxs', '.h5') - self.write_hdf5_file() + self._write_hdf5_file() # add the references for the HDF5Reference quantities for archive_path, hdf5_path in self.hdf5_references.items(): @@ -322,7 +324,7 @@ def _write_nx_file(self): # `populate_hdf5_data_dict` method for each quantity that is needed in .nxs # file. Create a NeXus file with the data in `hdf5_data_dict`. # One issue here is as we populate the `hdf5_data_dict` with the archive data, - # we will always have to over write the nexus file + # we will always have to over write the nexus file def _write_hdf5_file(self): """ @@ -345,6 +347,7 @@ def _write_hdf5_file(self): with h5py.File(h5file.name, 'a') as h5: for key, value in self.hdf5_data_dict.items(): if value is None: + self.logger.warning(f'No data found for "{key}". Skipping.') continue value_is_unit = False @@ -405,7 +408,7 @@ def _remove_nexus_annotations(path: str) -> str: return new_path @staticmethod - def _set_hdf5_reference(section: 'Section', path: str, ref: str): + def _set_hdf5_reference(section: 'ArchiveSection', path: str, ref: str): """ Method for setting a HDF5Reference quantity in a section. It can handle nested quantities and repeatable sections, provided that the quantity itself From e6cd6b8c70bfa5fa2a6afc52eaf0eca553bef9aa Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 21:36:57 +0100 Subject: [PATCH 56/93] Refactoring --- src/nomad_measurements/utils.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index bbca01db..f8cfde4d 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -203,7 +203,7 @@ def __init__( filename: str, archive: 'EntryArchive', logger: 'BoundLogger', - valid_dataset_paths: list = [], + valid_dataset_paths: list = None, ): """ Initialize the handler. @@ -220,7 +220,9 @@ def __init__( self.data_file = filename self.archive = archive self.logger = logger - self.valid_dataset_paths = valid_dataset_paths + self.valid_dataset_paths = [] + if valid_dataset_paths: + self.valid_dataset_paths = valid_dataset_paths self.hdf5_data_dict = collections.OrderedDict() self.hdf5_references = collections.OrderedDict() @@ -243,6 +245,10 @@ def add_dataset( archive_path (str): The path of the quantity in the archive. lazy (bool): If True, the file is not written immediately. """ + if not path or not archive_path: + self.logger.warning('Both `path` and `archive_path` must be provided.') + return + if self.valid_dataset_paths: if path not in self.valid_dataset_paths: self.logger.error(f'Invalid dataset path "{path}".') @@ -359,22 +365,16 @@ def _write_hdf5_file(self): group_name, dataset_name = key.rsplit('/', 1) group = h5.require_group(group_name) - if f'{group_name}/{dataset_name}' in h5: - del h5[f'{group_name}/{dataset_name}'] - - if value_is_unit: - try: - h5[f'{group_name}/{dataset_name}'].attrs['units'] = str( - value - ) - except KeyError: - logger.error( - f'Could not set units for "{group_name}/{dataset_name}"' - 'as the dataset does not exist.' - ) + if key in h5: + if value_is_unit: + group[dataset_name].attrs['units'] = str(value) + else: + group[dataset_name][...] = value else: group.create_dataset( - dataset_name, data=value, compression='gzip' + name=dataset_name, + data=value, + compression='gzip', ) # group.attrs['axes'] = 'time' # group.attrs['signal'] = 'value' From 7b7db2b9f52935de6be347e67a89e9436b594f91 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 6 Dec 2024 21:38:40 +0100 Subject: [PATCH 57/93] Cleaning --- src/nomad_measurements/utils.py | 37 +++------------------------------ 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index f8cfde4d..5f9663a3 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -161,37 +161,6 @@ def get_bounding_range_2d(ax1, ax2): return ax1_range, ax2_range -def get_data(obj, key: str) -> Any: - """ - Get the data for the quantity. If the quantity is a HDF5Reference, read the dataset - and corresponding units if available, and return a pint.Quantity. - - Args: - obj (Any): The object to get the data from. - key (str): The key of the quantity. - - Returns: - Any: The data for the quantity. - """ - return getattr(obj, key, None) - - -def set_data(obj, **kwargs): - """ - Set the data for the quantity. If the quantity is a HDF5Reference, the new value is - set in the HDF5 file at the corresponding path. - - Args: - obj (Any): The object to set the data for. - """ - if not kwargs: - raise ValueError('At least one keyword argument must be provided.') - - for key, value in kwargs.items(): - if hasattr(obj, key): - setattr(obj, key, value) - - class AuxiliaryHDF5Handler: """ Class for handling the creation of auxiliary files to store big data arrays outside @@ -270,9 +239,9 @@ def add_dataset( def read_dataset(self, path: str): """ - Returns the dataset at the given path. If the quantity has `units` as an attribute, - tries to returns a `pint.Quantity`. Before returning the dataset, the method - also writes the file with any pending datasets. + Returns the dataset at the given path. If the quantity has `units` as an + attribute, tries to returns a `pint.Quantity`. Before returning the dataset, the + method also writes the file with any pending datasets. Args: path (str): The dataset path in the HDF5 file. From 11e4d389564280cf712256258b332e8c8aabf2c8 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Sat, 7 Dec 2024 02:08:17 +0100 Subject: [PATCH 58/93] Try block for using hdf5 handler: dont fail early, as later normalization steps will have the handler! --- src/nomad_measurements/xrd/schema.py | 98 ++++++++++++++++++---------- 1 file changed, 63 insertions(+), 35 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index bd367b0b..1e334490 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -339,8 +339,15 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): (dict, dict): line_linear, line_log """ plots = [] - two_theta = archive.hdf5_handler.read_dataset(self.two_theta) - intensity = archive.hdf5_handler.read_dataset(self.intensity) + + try: + hdf5_handler = self.m_parent.hdf5_handler + assert isinstance(hdf5_handler, AuxiliaryHDF5Handler) + except (AttributeError, AssertionError): + return plots + + two_theta = hdf5_handler.read_dataset(self.two_theta) + intensity = hdf5_handler.read_dataset(self.intensity) if two_theta is None or intensity is None: return plots @@ -431,7 +438,7 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) ) - q_norm = archive.hdf5_handler.read_dataset(self.q_norm) + q_norm = hdf5_handler.read_dataset(self.q_norm) if q_norm is None: return plots @@ -499,11 +506,17 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): else: self.name = 'XRD Scan Result' + try: + hdf5_handler = self.m_parent.hdf5_handler + assert isinstance(hdf5_handler, AuxiliaryHDF5Handler) + except (AttributeError, AssertionError): + return + if self.source_peak_wavelength is not None: - q_norm = archive.hdf5_handler.read_dataset(self.q_norm) + q_norm = hdf5_handler.read_dataset(self.q_norm) if q_norm is not None: q_norm *= ureg('1/angstrom') - two_theta = archive.hdf5_handler.read_dataset(self.two_theta) + two_theta = hdf5_handler.read_dataset(self.two_theta) if two_theta is not None: two_theta *= ureg('degree') q_norm, two_theta = calculate_two_theta_or_q( @@ -511,12 +524,12 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): two_theta=two_theta, q=q_norm, ) - archive.hdf5_handler.add_dataset( + hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/q_norm', data=q_norm, archive_path='data.results[0].q_norm', ) - archive.hdf5_handler.add_dataset( + hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/two_theta', data=two_theta, archive_path='data.results[0].two_theta', @@ -551,9 +564,16 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): (dict, dict): json_2theta_omega, json_q_vector """ plots = [] - two_theta = archive.hdf5_handler.read_dataset(self.two_theta) - intensity = archive.hdf5_handler.read_dataset(self.intensity) - omega = archive.hdf5_handler.read_dataset(self.omega) + + try: + hdf5_handler = self.m_parent.hdf5_handler + assert isinstance(hdf5_handler, AuxiliaryHDF5Handler) + except (AttributeError, AssertionError): + return plots + + two_theta = hdf5_handler.read_dataset(self.two_theta) + intensity = hdf5_handler.read_dataset(self.intensity) + omega = hdf5_handler.read_dataset(self.omega) if two_theta is None or intensity is None or omega is None: return plots @@ -629,8 +649,8 @@ def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) # Plot for RSM in Q-vectors - q_parallel = archive.hdf5_handler.read_dataset(self.q_parallel) - q_perpendicular = archive.hdf5_handler.read_dataset(self.q_perpendicular) + q_parallel = hdf5_handler.read_dataset(self.q_parallel) + q_perpendicular = hdf5_handler.read_dataset(self.q_perpendicular) if q_parallel is not None and q_perpendicular is not None: x = q_parallel.to('1/angstrom').magnitude.flatten() y = q_perpendicular.to('1/angstrom').magnitude.flatten() @@ -720,11 +740,15 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): if self.name is None: self.name = 'RSM Scan Result' + try: + hdf5_handler = self.m_parent.hdf5_handler + assert isinstance(hdf5_handler, AuxiliaryHDF5Handler) + except (AttributeError, AssertionError): + return + if self.source_peak_wavelength is not None: for var_axis in ['omega', 'chi', 'phi']: - var_axis_value = archive.hdf5_handler.read_dataset( - getattr(self, var_axis) - ) + var_axis_value = hdf5_handler.read_dataset(getattr(self, var_axis)) if ( var_axis_value is not None and len(np.unique(var_axis_value.magnitude)) > 1 @@ -734,12 +758,12 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): two_theta=self.two_theta * np.ones_like(self.intensity), omega=var_axis_value, ) - archive.hdf5_handler.add_dataset( + hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/q_parallel', data=q_parallel, archive_path='data.results[0].q_parallel', ) - archive.hdf5_handler.add_dataset( + hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/q_perpendicular', data=q_perpendicular, archive_path='data.results[0].q_perpendicular', @@ -811,17 +835,29 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): archive.results = Results() if not archive.results.properties: archive.results.properties = Properties() + if not archive.results.method: + archive.results.method = Method( + method_name='XRD', + measurement=MeasurementMethod( + xrd=XRDMethod(diffraction_method_name=self.diffraction_method_name) + ), + ) + + try: + hdf5_handler = self.hdf5_handler + except AttributeError: + return if not archive.results.properties.structural: diffraction_patterns = [] for result in self.results: - intensity = archive.hdf5_handler.read_dataset(result.intensity) + intensity = hdf5_handler.read_dataset(result.intensity) if intensity is not None: intensity *= ureg('dimensionless') if intensity is None or len(intensity) != 1: - two_theta = archive.hdf5_handler.read_dataset(result.two_theta) + two_theta = hdf5_handler.read_dataset(result.two_theta) if two_theta is not None: two_theta *= ureg('degree') - q_norm = archive.hdf5_handler.read_dataset(result.q_norm) + q_norm = hdf5_handler.read_dataset(result.q_norm) if q_norm is not None: q_norm *= ureg('1/angstrom') @@ -836,13 +872,6 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): archive.results.properties.structural = StructuralProperties( diffraction_pattern=diffraction_patterns ) - if not archive.results.method: - archive.results.method = Method( - method_name='XRD', - measurement=MeasurementMethod( - xrd=XRDMethod(diffraction_method_name=self.diffraction_method_name) - ), - ) class ELNXRayDiffraction(XRayDiffraction, EntryData): @@ -1014,6 +1043,13 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ self.backward_compatibility() if self.data_file is not None: + self.auxiliary_file = f'{self.data_file}.nxs' + self.hdf5_handler = AuxiliaryHDF5Handler( + filename=self.auxiliary_file, + archive=archive, + logger=logger, + valid_dataset_paths=NEXUS_DATASET_PATHS, + ) read_function, write_function = self.get_read_write_functions() if read_function is None or write_function is None: logger.warn( @@ -1022,14 +1058,6 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): else: with archive.m_context.raw_file(self.data_file) as file: xrd_dict = read_function(file.name, logger) - self.auxiliary_file = f'{self.data_file}.nxs' - self.hdf5_handler = AuxiliaryHDF5Handler( - filename=self.auxiliary_file, - archive=archive, - logger=logger, - valid_dataset_paths=NEXUS_DATASET_PATHS, - ) - archive.hdf5_handler = self.hdf5_handler write_function(xrd_dict, archive, logger) self.hdf5_handler.write_file() super().normalize(archive, logger) From de4f60555fd465cc7534dcad7609f54d1df8b429 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Sat, 7 Dec 2024 03:54:52 +0100 Subject: [PATCH 59/93] Extract units from dataset attrs when reading --- src/nomad_measurements/utils.py | 83 +++++++++++++++------------- src/nomad_measurements/xrd/schema.py | 13 +---- 2 files changed, 46 insertions(+), 50 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 5f9663a3..4fbd9d53 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -27,6 +27,7 @@ import numpy as np import pint from nomad.datamodel.hdf5 import HDF5Reference +from nomad.units import ureg if TYPE_CHECKING: from nomad.datamodel.data import ( @@ -246,21 +247,25 @@ def read_dataset(self, path: str): Args: path (str): The dataset path in the HDF5 file. """ - # TODO handle the case when dataset is not found - # TODO if units are available, return a pint.Quantity if self.hdf5_data_dict or self.hdf5_references: self.write_file() if path is None: return - try: - value = HDF5Reference.read_dataset(self.archive, path) - except KeyError: - return None - # file_path, dataset_path = path.split('#') - # with archive.m_context.raw_file(file_path, 'r') as h5file: - # with h5py.File(h5file.name, 'r') as h5: - # value = h5[dataset_path] - + file_path, dataset_path = path.split('#') + file_name = file_path.rsplit('/raw/', 1)[1] + with self.archive.m_context.raw_file(file_name, 'r') as h5file: + h5 = h5py.File(h5file.name, 'r') + if dataset_path not in h5: + self.logger.warning(f'Dataset "{dataset_path}" not found.') + h5.close() + return None + value = h5[dataset_path][...] + try: + units = h5[dataset_path].attrs['units'] + value *= ureg(units) + except KeyError: + pass + h5.close() return value def write_file(self): @@ -319,35 +324,35 @@ def _write_hdf5_file(self): # create the HDF5 file with self.archive.m_context.raw_file(self.data_file, 'a') as h5file: - with h5py.File(h5file.name, 'a') as h5: - for key, value in self.hdf5_data_dict.items(): - if value is None: - self.logger.warning(f'No data found for "{key}". Skipping.') - continue - - value_is_unit = False - if key.endswith('@units'): - value_is_unit = True - # remove the '@units' suffix - key = key.rsplit('/', 1)[0] - - group_name, dataset_name = key.rsplit('/', 1) - group = h5.require_group(group_name) - - if key in h5: - if value_is_unit: - group[dataset_name].attrs['units'] = str(value) - else: - group[dataset_name][...] = value + h5 = h5py.File(h5file.name, 'a') + for key, value in self.hdf5_data_dict.items(): + if value is None: + self.logger.warning(f'No data found for "{key}". Skipping.') + continue + + value_is_unit = False + if key.endswith('@units'): + value_is_unit = True + # remove the '@units' suffix + key = key.rsplit('/', 1)[0] + + group_name, dataset_name = key.rsplit('/', 1) + group = h5.require_group(group_name) + + if key in h5: + if value_is_unit: + group[dataset_name].attrs['units'] = str(value) else: - group.create_dataset( - name=dataset_name, - data=value, - compression='gzip', - ) - # group.attrs['axes'] = 'time' - # group.attrs['signal'] = 'value' - # group.attrs['NX_class'] = 'NXdata' + group[dataset_name][...] = value + else: + group.create_dataset( + name=dataset_name, + data=value, + ) + # group.attrs['axes'] = 'time' + # group.attrs['signal'] = 'value' + # group.attrs['NX_class'] = 'NXdata' + h5.close() @staticmethod def _remove_nexus_annotations(path: str) -> str: diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 1e334490..edcc15c5 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -514,11 +514,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): if self.source_peak_wavelength is not None: q_norm = hdf5_handler.read_dataset(self.q_norm) - if q_norm is not None: - q_norm *= ureg('1/angstrom') two_theta = hdf5_handler.read_dataset(self.two_theta) - if two_theta is not None: - two_theta *= ureg('degree') q_norm, two_theta = calculate_two_theta_or_q( wavelength=self.source_peak_wavelength, two_theta=two_theta, @@ -753,6 +749,8 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): var_axis_value is not None and len(np.unique(var_axis_value.magnitude)) > 1 ): + two_theta = hdf5_handler.read_dataset(self.two_theta) + intensity = hdf5_handler.read_dataset(self.intensity) q_parallel, q_perpendicular = calculate_q_vectors_RSM( wavelength=self.source_peak_wavelength, two_theta=self.two_theta * np.ones_like(self.intensity), @@ -851,16 +849,9 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): diffraction_patterns = [] for result in self.results: intensity = hdf5_handler.read_dataset(result.intensity) - if intensity is not None: - intensity *= ureg('dimensionless') if intensity is None or len(intensity) != 1: two_theta = hdf5_handler.read_dataset(result.two_theta) - if two_theta is not None: - two_theta *= ureg('degree') q_norm = hdf5_handler.read_dataset(result.q_norm) - if q_norm is not None: - q_norm *= ureg('1/angstrom') - diffraction_patterns.append( DiffractionPattern( incident_beam_wavelength=result.source_peak_wavelength, From 7f124383db2decdbea3c73fc9e439204d2649ba5 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Sat, 7 Dec 2024 03:55:49 +0100 Subject: [PATCH 60/93] Fixing --- src/nomad_measurements/xrd/schema.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index edcc15c5..b7378144 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -753,7 +753,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): intensity = hdf5_handler.read_dataset(self.intensity) q_parallel, q_perpendicular = calculate_q_vectors_RSM( wavelength=self.source_peak_wavelength, - two_theta=self.two_theta * np.ones_like(self.intensity), + two_theta=two_theta * np.ones_like(intensity), omega=var_axis_value, ) hdf5_handler.add_dataset( @@ -849,7 +849,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): diffraction_patterns = [] for result in self.results: intensity = hdf5_handler.read_dataset(result.intensity) - if intensity is None or len(intensity) != 1: + if len(intensity.shape) == 1: two_theta = hdf5_handler.read_dataset(result.two_theta) q_norm = hdf5_handler.read_dataset(result.q_norm) diffraction_patterns.append( From d7f69f77f9a3da474bca4612ed2d380a0ffe68fd Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Sat, 7 Dec 2024 04:13:21 +0100 Subject: [PATCH 61/93] Linting --- src/nomad_measurements/utils.py | 2 +- src/nomad_measurements/xrd/schema.py | 26 ++++++++++++-------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 4fbd9d53..afe1b354 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -334,7 +334,7 @@ def _write_hdf5_file(self): if key.endswith('@units'): value_is_unit = True # remove the '@units' suffix - key = key.rsplit('/', 1)[0] + key = key.rsplit('/', 1)[0] # noqa: PLW2901 group_name, dataset_name = key.rsplit('/', 1) group = h5.require_group(group_name) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index b7378144..b79b4d12 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -29,6 +29,7 @@ read_panalytical_xrdml, read_rigaku_rasx, ) +from nomad.config import config from nomad.datamodel.data import ( ArchiveSection, EntryData, @@ -65,7 +66,6 @@ Section, SubSection, ) -from nomad.units import ureg from scipy.interpolate import griddata from nomad_measurements.general import ( @@ -87,18 +87,16 @@ ) -from nomad.config import config - configuration = config.get_plugin_entry_point('nomad_measurements.xrd:schema') m_package = SchemaPackage(aliases=['nomad_measurements.xrd.parser.parser']) def calculate_two_theta_or_q( - wavelength: 'pint.Quantity', - q: 'pint.Quantity' = None, - two_theta: 'pint.Quantity' = None, -) -> tuple['pint.Quantity', 'pint.Quantity']: + wavelength: pint.Quantity, + q: pint.Quantity = None, + two_theta: pint.Quantity = None, +) -> tuple[pint.Quantity, pint.Quantity]: """ Calculate the two-theta array from the scattering vector (q) or vice-versa, given the wavelength of the X-ray source. @@ -120,10 +118,10 @@ def calculate_two_theta_or_q( return q, two_theta -def calculate_q_vectors_RSM( - wavelength: 'pint.Quantity', - two_theta: 'pint.Quantity', - omega: 'pint.Quantity', +def calculate_q_vectors_rsm( + wavelength: pint.Quantity, + two_theta: pint.Quantity, + omega: pint.Quantity, ): """ Calculate the q-vectors for RSM scans in coplanar configuration. @@ -326,7 +324,7 @@ class XRDResult1D(XRDResult): m_def = Section() - def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): + def generate_plots(self): """ Plot the 1D diffractogram. @@ -547,7 +545,7 @@ class XRDResultRSM(XRDResult): description='The scattering vector *Q_perpendicular* of the diffractogram', ) - def generate_plots(self, archive: 'EntryArchive', logger: 'BoundLogger'): + def generate_plots(self): """ Plot the 2D RSM diffractogram. @@ -751,7 +749,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): ): two_theta = hdf5_handler.read_dataset(self.two_theta) intensity = hdf5_handler.read_dataset(self.intensity) - q_parallel, q_perpendicular = calculate_q_vectors_RSM( + q_parallel, q_perpendicular = calculate_q_vectors_rsm( wavelength=self.source_peak_wavelength, two_theta=two_theta * np.ones_like(intensity), omega=var_axis_value, From be9dfa840bebddb03fca13d80847c2f3e793d56c Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Mon, 9 Dec 2024 16:00:23 +0100 Subject: [PATCH 62/93] Make archive_path optional in add_dataset --- src/nomad_measurements/utils.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index afe1b354..caa556bb 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -201,7 +201,7 @@ def add_dataset( self, path: str, data: Any, - archive_path: str, + archive_path: str = None, lazy: bool = True, ): """ @@ -215,13 +215,14 @@ def add_dataset( archive_path (str): The path of the quantity in the archive. lazy (bool): If True, the file is not written immediately. """ - if not path or not archive_path: - self.logger.warning('Both `path` and `archive_path` must be provided.') + if not path: + self.logger.warning('HDF5 `path` must be provided.') return if self.valid_dataset_paths: if path not in self.valid_dataset_paths: self.logger.error(f'Invalid dataset path "{path}".') + return # handle the pint.Quantity and add data if isinstance(data, pint.Quantity): @@ -233,7 +234,8 @@ def add_dataset( f'/uploads/{self.archive.m_context.upload_id}/raw' f'/{self.data_file}#{path}' ) - self.hdf5_references[archive_path] = ref + if archive_path: + self.hdf5_references[archive_path] = ref if not lazy: self.write_file() From fb9f1c78284ed6ebc460dcae1a6a966c2f908fa7 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Mon, 9 Dec 2024 16:01:54 +0100 Subject: [PATCH 63/93] Rename class --- src/nomad_measurements/utils.py | 2 +- src/nomad_measurements/xrd/schema.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index caa556bb..905b0155 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -162,7 +162,7 @@ def get_bounding_range_2d(ax1, ax2): return ax1_range, ax2_range -class AuxiliaryHDF5Handler: +class HDF5Handler: """ Class for handling the creation of auxiliary files to store big data arrays outside the main archive file (e.g. HDF5, NeXus). diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index b79b4d12..ab7a9efe 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -72,7 +72,7 @@ NOMADMeasurementsCategory, ) from nomad_measurements.utils import ( - AuxiliaryHDF5Handler, + HDF5Handler, get_bounding_range_2d, merge_sections, ) @@ -340,7 +340,7 @@ def generate_plots(self): try: hdf5_handler = self.m_parent.hdf5_handler - assert isinstance(hdf5_handler, AuxiliaryHDF5Handler) + assert isinstance(hdf5_handler, HDF5Handler) except (AttributeError, AssertionError): return plots @@ -506,7 +506,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): try: hdf5_handler = self.m_parent.hdf5_handler - assert isinstance(hdf5_handler, AuxiliaryHDF5Handler) + assert isinstance(hdf5_handler, HDF5Handler) except (AttributeError, AssertionError): return @@ -561,7 +561,7 @@ def generate_plots(self): try: hdf5_handler = self.m_parent.hdf5_handler - assert isinstance(hdf5_handler, AuxiliaryHDF5Handler) + assert isinstance(hdf5_handler, HDF5Handler) except (AttributeError, AssertionError): return plots @@ -736,7 +736,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): try: hdf5_handler = self.m_parent.hdf5_handler - assert isinstance(hdf5_handler, AuxiliaryHDF5Handler) + assert isinstance(hdf5_handler, HDF5Handler) except (AttributeError, AssertionError): return @@ -1033,7 +1033,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): self.backward_compatibility() if self.data_file is not None: self.auxiliary_file = f'{self.data_file}.nxs' - self.hdf5_handler = AuxiliaryHDF5Handler( + self.hdf5_handler = HDF5Handler( filename=self.auxiliary_file, archive=archive, logger=logger, From 51915c331f3785b66b655b3bc168a23f78360f62 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Mon, 9 Dec 2024 16:50:20 +0100 Subject: [PATCH 64/93] attrs for add_dataset; use it for units --- src/nomad_measurements/utils.py | 40 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 905b0155..fe8beb82 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -202,6 +202,7 @@ def add_dataset( path: str, data: Any, archive_path: str = None, + attrs: dict = None, lazy: bool = True, ): """ @@ -224,18 +225,21 @@ def add_dataset( self.logger.error(f'Invalid dataset path "{path}".') return + dataset = dict( + data=data, + attrs=attrs if attrs else {}, + ) # handle the pint.Quantity and add data if isinstance(data, pint.Quantity): - self.hdf5_data_dict[path] = data.magnitude - self.hdf5_data_dict[f'{path}/@units'] = str(data.units) - else: - self.hdf5_data_dict[path] = data - ref = ( - f'/uploads/{self.archive.m_context.upload_id}/raw' - f'/{self.data_file}#{path}' - ) + dataset['data'] = data.magnitude + dataset['attrs'].update({'units': str(data.units)}) + + self.hdf5_data_dict[path] = dataset if archive_path: - self.hdf5_references[archive_path] = ref + self.hdf5_references[archive_path] = ( + f'/uploads/{self.archive.m_context.upload_id}/raw' + f'/{self.data_file}#{path}' + ) if not lazy: self.write_file() @@ -328,32 +332,26 @@ def _write_hdf5_file(self): with self.archive.m_context.raw_file(self.data_file, 'a') as h5file: h5 = h5py.File(h5file.name, 'a') for key, value in self.hdf5_data_dict.items(): - if value is None: + data, attrs = value['data'], value['attrs'] + if data is None: self.logger.warning(f'No data found for "{key}". Skipping.') continue - value_is_unit = False - if key.endswith('@units'): - value_is_unit = True - # remove the '@units' suffix - key = key.rsplit('/', 1)[0] # noqa: PLW2901 - group_name, dataset_name = key.rsplit('/', 1) group = h5.require_group(group_name) if key in h5: - if value_is_unit: - group[dataset_name].attrs['units'] = str(value) - else: - group[dataset_name][...] = value + group[dataset_name][...] = data else: group.create_dataset( name=dataset_name, - data=value, + data=data, + compression='gzip', ) # group.attrs['axes'] = 'time' # group.attrs['signal'] = 'value' # group.attrs['NX_class'] = 'NXdata' + group[dataset_name].attrs.update(attrs) h5.close() @staticmethod From 090bc182571d842e49f6a07a4015639140097bbc Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Mon, 9 Dec 2024 16:57:35 +0100 Subject: [PATCH 65/93] Add add_attribute method --- src/nomad_measurements/utils.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index fe8beb82..7ef6ebcc 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -244,6 +244,26 @@ def add_dataset( if not lazy: self.write_file() + def add_attribute( + self, + path: str, + attrs: dict, + ): + """ + Add an attribute to the dataset or group at the given path. + Args: + path (str): The dataset or group path in the HDF5 file. + attrs (dict): The attributes to be added. + """ + self.write_file() + with self.archive.m_context.raw_file(self.data_file, 'a') as h5file: + h5 = h5py.File(h5file.name, 'a') + try: + h5[path].attrs.update(attrs) + except KeyError: + self.logger.warning(f'Path "{path}" not found to add attribute.') + h5.close() + def read_dataset(self, path: str): """ Returns the dataset at the given path. If the quantity has `units` as an From 6b2a95e5364efb8373ca559c9f50c91ac82036cf Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Mon, 9 Dec 2024 23:35:22 +0100 Subject: [PATCH 66/93] Refactor add_attribute --- src/nomad_measurements/utils.py | 59 +++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 7ef6ebcc..78cc918f 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -196,6 +196,7 @@ def __init__( self.hdf5_data_dict = collections.OrderedDict() self.hdf5_references = collections.OrderedDict() + self.hdf5_attributes = collections.OrderedDict() def add_dataset( self, @@ -248,21 +249,22 @@ def add_attribute( self, path: str, attrs: dict, + lazy: bool = True, ): """ - Add an attribute to the dataset or group at the given path. + Add an attribute to the dataset or group at the given path. The attribute is + written lazily (default) when either `read_dataset` or `write_file` method is + called. + Args: path (str): The dataset or group path in the HDF5 file. attrs (dict): The attributes to be added. + lazy (bool): If True, the file is not written immediately. """ - self.write_file() - with self.archive.m_context.raw_file(self.data_file, 'a') as h5file: - h5 = h5py.File(h5file.name, 'a') - try: - h5[path].attrs.update(attrs) - except KeyError: - self.logger.warning(f'Path "{path}" not found to add attribute.') - h5.close() + self.hdf5_attributes[path] = attrs + + if not lazy: + self.write_file() def read_dataset(self, path: str): """ @@ -273,7 +275,7 @@ def read_dataset(self, path: str): Args: path (str): The dataset path in the HDF5 file. """ - if self.hdf5_data_dict or self.hdf5_references: + if self.hdf5_data_dict or self.hdf5_references or self.hdf5_attributes: self.write_file() if path is None: return @@ -311,14 +313,6 @@ def write_file(self): self.data_file = self.data_file.replace('.nxs', '.h5') self._write_hdf5_file() - # add the references for the HDF5Reference quantities - for archive_path, hdf5_path in self.hdf5_references.items(): - self._set_hdf5_reference(self.archive, archive_path, hdf5_path) - - # reset hdf5 data dict and references - self.hdf5_data_dict = collections.OrderedDict() - self.hdf5_references = collections.OrderedDict() - def _write_nx_file(self): """ Method for creating a NeXus file. Additional data from the archive is added @@ -336,7 +330,11 @@ def _write_hdf5_file(self): """ Method for creating an HDF5 file. """ - if not self.hdf5_data_dict and not self.hdf5_references: + if ( + not self.hdf5_data_dict + and not self.hdf5_references + and not self.hdf5_attributes + ): return # remove the nexus annotations from the dataset paths if any for archive_path, hdf5_path in self.hdf5_references.items(): @@ -347,6 +345,10 @@ def _write_hdf5_file(self): for key, value in self.hdf5_data_dict.items(): tmp_dict[self._remove_nexus_annotations(key)] = value self.hdf5_data_dict = tmp_dict + tmp_dict = {} + for key, value in self.hdf5_attributes.items(): + tmp_dict[self._remove_nexus_annotations(key)] = value + self.hdf5_attributes = tmp_dict # create the HDF5 file with self.archive.m_context.raw_file(self.data_file, 'a') as h5file: @@ -368,12 +370,25 @@ def _write_hdf5_file(self): data=data, compression='gzip', ) - # group.attrs['axes'] = 'time' - # group.attrs['signal'] = 'value' - # group.attrs['NX_class'] = 'NXdata' + # TODO allow hard link creation for HDF5Reference quantities + # h5[key] = h5[value] group[dataset_name].attrs.update(attrs) + for key, value in self.hdf5_attributes.items(): + if key in h5: + h5[key].attrs.update(value) + else: + self.logger.warning(f'Path "{key}" not found to add attribute.') h5.close() + # add the references for the HDF5Reference quantities + for archive_path, hdf5_path in self.hdf5_references.items(): + self._set_hdf5_reference(self.archive, archive_path, hdf5_path) + + # reset hdf5 data dict, references, atttributes + self.hdf5_data_dict = collections.OrderedDict() + self.hdf5_references = collections.OrderedDict() + self.hdf5_attributes = collections.OrderedDict() + @staticmethod def _remove_nexus_annotations(path: str) -> str: """ From 3207e8e56cabb48699ff073fd012f31867ed6a0c Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Mon, 9 Dec 2024 23:51:37 +0100 Subject: [PATCH 67/93] Add plot attributes: 1D --- src/nomad_measurements/xrd/schema.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index ab7a9efe..dfc0620c 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -40,6 +40,7 @@ from nomad.datamodel.metainfo.annotations import ( ELNAnnotation, ELNComponentEnum, + H5WebAnnotation, ) from nomad.datamodel.metainfo.basesections import ( CompositeSystemReference, @@ -322,7 +323,7 @@ class XRDResult1D(XRDResult): Section containing the result of a 1D X-ray diffraction scan. """ - m_def = Section() + m_def = Section(a_h5web=H5WebAnnotation(axes='two_theta', signal='intensity')) def generate_plots(self): """ @@ -529,6 +530,15 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): archive_path='data.results[0].two_theta', ) + hdf5_handler.add_attribute( + path='/ENTRY[entry]/experiment_result', + attrs=dict( + axes=['two_theta'], + signal='intensity', + NX_class='NXdata', + ), + ) + class XRDResultRSM(XRDResult): """ From dc3781c562061b0aec117dc31f2db94ef65b3640 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 10 Dec 2024 12:59:21 +0100 Subject: [PATCH 68/93] Refactor hdf5 states --- src/nomad_measurements/utils.py | 51 +++++++++++++++------------------ 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 78cc918f..9ff3f8f1 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -194,8 +194,7 @@ def __init__( if valid_dataset_paths: self.valid_dataset_paths = valid_dataset_paths - self.hdf5_data_dict = collections.OrderedDict() - self.hdf5_references = collections.OrderedDict() + self.hdf5_datasets = collections.OrderedDict() self.hdf5_attributes = collections.OrderedDict() def add_dataset( @@ -229,18 +228,18 @@ def add_dataset( dataset = dict( data=data, attrs=attrs if attrs else {}, + hdf5_path=( + f'/uploads/{self.archive.m_context.upload_id}/raw' + f'/{self.data_file}#{path}' + ), + archive_path=archive_path, ) # handle the pint.Quantity and add data if isinstance(data, pint.Quantity): dataset['data'] = data.magnitude dataset['attrs'].update({'units': str(data.units)}) - self.hdf5_data_dict[path] = dataset - if archive_path: - self.hdf5_references[archive_path] = ( - f'/uploads/{self.archive.m_context.upload_id}/raw' - f'/{self.data_file}#{path}' - ) + self.hdf5_datasets[path] = dataset if not lazy: self.write_file() @@ -275,7 +274,7 @@ def read_dataset(self, path: str): Args: path (str): The dataset path in the HDF5 file. """ - if self.hdf5_data_dict or self.hdf5_references or self.hdf5_attributes: + if self.hdf5_datasets or self.hdf5_attributes: self.write_file() if path is None: return @@ -308,6 +307,7 @@ def write_file(self): self.data_file = self.data_file.replace('.h5', '.nxs') self._write_nx_file() except Exception: + # TODO also modify the name of the datafile in the archive. self.logger.warning('Error creating nexus file. Creating h5 file instead.') if self.data_file.endswith('.nxs'): self.data_file = self.data_file.replace('.nxs', '.h5') @@ -330,21 +330,17 @@ def _write_hdf5_file(self): """ Method for creating an HDF5 file. """ - if ( - not self.hdf5_data_dict - and not self.hdf5_references - and not self.hdf5_attributes - ): + if not self.hdf5_datasets and not self.hdf5_attributes: return # remove the nexus annotations from the dataset paths if any - for archive_path, hdf5_path in self.hdf5_references.items(): - self.hdf5_references[archive_path] = self._remove_nexus_annotations( - hdf5_path - ) tmp_dict = {} - for key, value in self.hdf5_data_dict.items(): - tmp_dict[self._remove_nexus_annotations(key)] = value - self.hdf5_data_dict = tmp_dict + for key, value in self.hdf5_datasets.items(): + new_key = self._remove_nexus_annotations(key) + tmp_dict[new_key] = value + tmp_dict[new_key]['hdf5_path'] = self._remove_nexus_annotations( + value['hdf5_path'] + ) + self.hdf5_datasets = tmp_dict tmp_dict = {} for key, value in self.hdf5_attributes.items(): tmp_dict[self._remove_nexus_annotations(key)] = value @@ -353,7 +349,7 @@ def _write_hdf5_file(self): # create the HDF5 file with self.archive.m_context.raw_file(self.data_file, 'a') as h5file: h5 = h5py.File(h5file.name, 'a') - for key, value in self.hdf5_data_dict.items(): + for key, value in self.hdf5_datasets.items(): data, attrs = value['data'], value['attrs'] if data is None: self.logger.warning(f'No data found for "{key}". Skipping.') @@ -373,6 +369,10 @@ def _write_hdf5_file(self): # TODO allow hard link creation for HDF5Reference quantities # h5[key] = h5[value] group[dataset_name].attrs.update(attrs) + if value['archive_path'] is not None: + self._set_hdf5_reference( + self.archive, value['archive_path'], value['hdf5_path'] + ) for key, value in self.hdf5_attributes.items(): if key in h5: h5[key].attrs.update(value) @@ -380,13 +380,8 @@ def _write_hdf5_file(self): self.logger.warning(f'Path "{key}" not found to add attribute.') h5.close() - # add the references for the HDF5Reference quantities - for archive_path, hdf5_path in self.hdf5_references.items(): - self._set_hdf5_reference(self.archive, archive_path, hdf5_path) - # reset hdf5 data dict, references, atttributes - self.hdf5_data_dict = collections.OrderedDict() - self.hdf5_references = collections.OrderedDict() + self.hdf5_datasets = collections.OrderedDict() self.hdf5_attributes = collections.OrderedDict() @staticmethod From 24b4a9eba613e030954f9545fbcd2890075ed4bc Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 10 Dec 2024 14:20:03 +0100 Subject: [PATCH 69/93] Add back plotly figures --- src/nomad_measurements/xrd/schema.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index dfc0620c..b40a557f 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -48,9 +48,7 @@ MeasurementResult, ReadableIdentifiers, ) -from nomad.datamodel.metainfo.plot import ( - PlotlyFigure, -) +from nomad.datamodel.metainfo.plot import PlotlyFigure, PlotSection from nomad.datamodel.results import ( DiffractionPattern, MeasurementMethod, @@ -873,7 +871,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) -class ELNXRayDiffraction(XRayDiffraction, EntryData): +class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): """ Example section for how XRayDiffraction can be implemented with a general reader for common XRD file types. @@ -1028,8 +1026,6 @@ def backward_compatibility(self): # Migration to using HFD5References: removing exisiting results if self.get('results'): self.results = [] - if self.get('figures'): - del self.figures def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ @@ -1061,6 +1057,9 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): self.hdf5_handler.write_file() super().normalize(archive, logger) + if self.results: + self.figures = self.results[0].generate_plots() + class RawFileXRDData(EntryData): """ From 17a00882632c5c838686ba97169b9688bd1f62ac Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 10 Dec 2024 14:20:34 +0100 Subject: [PATCH 70/93] rename auxiliary file name if changed by handler --- src/nomad_measurements/xrd/schema.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index b40a557f..f74d7764 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1055,6 +1055,8 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): xrd_dict = read_function(file.name, logger) write_function(xrd_dict, archive, logger) self.hdf5_handler.write_file() + if self.hdf5_handler.data_file != self.auxiliary_file: + self.auxiliary_file = self.hdf5_handler.data_file super().normalize(archive, logger) if self.results: From c3302c457acdb7191c577f832692a1dc1feb390a Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 10 Dec 2024 14:43:53 +0100 Subject: [PATCH 71/93] Add referenced plots --- src/nomad_measurements/xrd/schema.py | 40 +++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index f74d7764..7bf41816 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -321,7 +321,10 @@ class XRDResult1D(XRDResult): Section containing the result of a 1D X-ray diffraction scan. """ - m_def = Section(a_h5web=H5WebAnnotation(axes='two_theta', signal='intensity')) + m_def = Section( + a_h5web=H5WebAnnotation(axes=['two_theta'], signal='intensity'), + # a_h5web=H5WebAnnotation(axes=['q_norm'], signal='intensity'), + ) def generate_plots(self): """ @@ -536,6 +539,14 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): NX_class='NXdata', ), ) + # hdf5_handler.add_attribute( + # path='/ENTRY[entry]/experiment_result', + # attrs=dict( + # axes=['q_norm'], + # signal='intensity', + # NX_class='NXdata', + # ), + # ) class XRDResultRSM(XRDResult): @@ -543,7 +554,14 @@ class XRDResultRSM(XRDResult): Section containing the result of a Reciprocal Space Map (RSM) scan. """ - m_def = Section() + m_def = Section( + a_h5web=H5WebAnnotation( + axes=['omega', 'chi', 'pi', 'two_theta'], signal='intensity' + ) + # a_h5web=H5WebAnnotation( + # axes=['q_parallel', 'q_perpendicular'], signal='intensity', paths=[] + # ) + ) q_parallel = Quantity( type=HDF5Reference, description='The scattering vector *Q_parallel* of the diffractogram', @@ -772,7 +790,23 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): data=q_perpendicular, archive_path='data.results[0].q_perpendicular', ) - return + break + hdf5_handler.add_attribute( + path='/ENTRY[entry]/experiment_result', + attrs=dict( + axes=[var_axis, 'two_theta'], + signal='intensity', + NX_class='NXdata', + ), + ) + # hdf5_handler.add_attribute( + # path='/ENTRY[entry]/experiment_result', + # attrs=dict( + # axes=['q_parallel', 'q_perpendicular'], + # signal='intensity', + # NX_class='NXdata', + # ), + # ) class XRayDiffraction(Measurement): From e993debda192b3a695b3d99508ecf907bf20ede7 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 10 Dec 2024 17:19:19 +0100 Subject: [PATCH 72/93] Allow hard link using internel reference --- src/nomad_measurements/utils.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 9ff3f8f1..b32dc045 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -203,6 +203,7 @@ def add_dataset( data: Any, archive_path: str = None, attrs: dict = None, + internal_reference: bool = False, lazy: bool = True, ): """ @@ -214,6 +215,8 @@ def add_dataset( path (str): The dataset path to be used in the HDF5 file. data (Any): The data to be stored in the HDF5 file. archive_path (str): The path of the quantity in the archive. + attrs (dict): The attributes to be added to the dataset. + internal_reference (bool): If True, the reference is set to the HDF5 dataset. lazy (bool): If True, the file is not written immediately. """ if not path: @@ -233,6 +236,7 @@ def add_dataset( f'/{self.data_file}#{path}' ), archive_path=archive_path, + internal_reference=internal_reference, ) # handle the pint.Quantity and add data if isinstance(data, pint.Quantity): @@ -350,10 +354,20 @@ def _write_hdf5_file(self): with self.archive.m_context.raw_file(self.data_file, 'a') as h5file: h5 = h5py.File(h5file.name, 'a') for key, value in self.hdf5_datasets.items(): - data, attrs = value['data'], value['attrs'] - if data is None: + if value['data'] is None: self.logger.warning(f'No data found for "{key}". Skipping.') continue + elif value['internal_reference']: + # resolve the internal reference + try: + data = h5[self._remove_nexus_annotations(value['data'])] + except KeyError: + self.logger.warning( + f'Internal reference "{data}" not found. Skipping.' + ) + continue + else: + data = value['data'] group_name, dataset_name = key.rsplit('/', 1) group = h5.require_group(group_name) @@ -366,9 +380,7 @@ def _write_hdf5_file(self): data=data, compression='gzip', ) - # TODO allow hard link creation for HDF5Reference quantities - # h5[key] = h5[value] - group[dataset_name].attrs.update(attrs) + group[dataset_name].attrs.update(value['attrs']) if value['archive_path'] is not None: self._set_hdf5_reference( self.archive, value['archive_path'], value['hdf5_path'] From d753f4acf436e6a0ad9efd37dfcc95bddcc1f1fc Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 10 Dec 2024 17:20:29 +0100 Subject: [PATCH 73/93] Add sections for plots --- src/nomad_measurements/xrd/schema.py | 264 ++++++++++++++++++++------- 1 file changed, 194 insertions(+), 70 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 7bf41816..c4054a05 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -269,6 +269,149 @@ class XRDSettings(ArchiveSection): source = SubSection(section_def=XRayTubeSource) +class XRDResultPlotIntensity(ArchiveSection): + m_def = Section( + a_h5web=H5WebAnnotation( + axes=['two_theta', 'omega', 'phi', 'chi'], signal='intensity' + ) + ) + intensity = Quantity( + type=HDF5Reference, + description='The count at each 2-theta value, dimensionless', + ) + two_theta = Quantity( + type=HDF5Reference, + description='The 2-theta range of the diffractogram', + ) + omega = Quantity( + type=HDF5Reference, + description='The omega range of the diffractogram', + ) + + def normalize(self, archive, logger): + super().normalize(archive, logger) + try: + hdf5_handler = self.m_parent.m_parent.hdf5_handler + assert isinstance(hdf5_handler, HDF5Handler) + except (AttributeError, AssertionError): + return + + if self.intensity is None or self.two_theta is None: + return + + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/plot_intensity/two_theta', + data='/ENTRY[entry]/experiment_result/two_theta', + internal_reference=True, + ) + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/plot_intensity/intensity', + data='/ENTRY[entry]/experiment_result/intensity', + internal_reference=True, + ) + + for var_axis in ['omega', 'phi', 'chi']: + if self.get(var_axis) is not None: + hdf5_handler.add_dataset( + path=f'/ENTRY[entry]/experiment_result/plot_intensity/{var_axis}', + data=f'/ENTRY[entry]/experiment_result/{var_axis}', + internal_reference=True, + ) + hdf5_handler.add_attribute( + path='/ENTRY[entry]/experiment_result/plot_intensity', + attrs=dict( + axes=[var_axis, 'two_theta'], + signal='intensity', + NX_class='NXdata', + ), + ) + return + + hdf5_handler.add_attribute( + path='/ENTRY[entry]/experiment_result/plot_intensity', + attrs=dict( + axes='two_theta', + signal='intensity', + NX_class='NXdata', + ), + ) + + +class XRDResultPlotIntensityScatteringVector(ArchiveSection): + m_def = Section( + a_h5web=H5WebAnnotation( + axes=['q_parallel', 'q_perpendicular', 'q_norm'], signal='intensity' + ) + ) + intensity = Quantity( + type=HDF5Reference, + description='The count at each q value, dimensionless', + ) + q_norm = Quantity( + type=HDF5Reference, + description='The q range of the diffractogram', + ) + q_parallel = Quantity( + type=HDF5Reference, + description='The q_parallel range of the diffractogram', + ) + q_perpendicular = Quantity( + type=HDF5Reference, + description='The q_perpendicular range of the diffractogram', + ) + + def normalize(self, archive, logger): + super().normalize(archive, logger) + + try: + hdf5_handler = self.m_parent.m_parent.hdf5_handler + assert isinstance(hdf5_handler, HDF5Handler) + except (AttributeError, AssertionError): + return + + if self.intensity is None: + return + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/intensity', + data='/ENTRY[entry]/experiment_result/intensity', + internal_reference=True, + ) + + if self.q_norm is not None: + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_norm', + data='/ENTRY[entry]/experiment_result/q_norm', + internal_reference=True, + ) + hdf5_handler.add_attribute( + path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector', + attrs=dict( + axes='q_norm', + signal='intensity', + NX_class='NXdata', + ), + ) + elif self.q_parallel is not None and self.q_perpendicular is not None: + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_parallel', + data='/ENTRY[entry]/experiment_result/q_parallel', + internal_reference=True, + ) + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_perpendicular', + data='/ENTRY[entry]/experiment_result/q_perpendicular', + internal_reference=True, + ) + hdf5_handler.add_attribute( + path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector', + attrs=dict( + axes=['q_parallel', 'q_perpendicular'], + signal='intensity', + NX_class='NXdata', + ), + ) + + class XRDResult(MeasurementResult): """ Section containing the result of an X-ray diffraction scan. @@ -314,6 +457,10 @@ class XRDResult(MeasurementResult): type=HDF5Reference, description='Integration time per channel', ) + plot_intensity = SubSection(section_def=XRDResultPlotIntensity) + plot_intensity_scattering_vector = SubSection( + section_def=XRDResultPlotIntensityScatteringVector + ) class XRDResult1D(XRDResult): @@ -321,11 +468,6 @@ class XRDResult1D(XRDResult): Section containing the result of a 1D X-ray diffraction scan. """ - m_def = Section( - a_h5web=H5WebAnnotation(axes=['two_theta'], signal='intensity'), - # a_h5web=H5WebAnnotation(axes=['q_norm'], signal='intensity'), - ) - def generate_plots(self): """ Plot the 1D diffractogram. @@ -530,23 +672,16 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): data=two_theta, archive_path='data.results[0].two_theta', ) + hdf5_handler.write_file() + self.m_setdefault('plot_intensity_scattering_vector') + self.plot_intensity_scattering_vector.intensity = self.intensity + self.plot_intensity_scattering_vector.q_norm = self.q_norm + self.plot_intensity_scattering_vector.normalize(archive, logger) - hdf5_handler.add_attribute( - path='/ENTRY[entry]/experiment_result', - attrs=dict( - axes=['two_theta'], - signal='intensity', - NX_class='NXdata', - ), - ) - # hdf5_handler.add_attribute( - # path='/ENTRY[entry]/experiment_result', - # attrs=dict( - # axes=['q_norm'], - # signal='intensity', - # NX_class='NXdata', - # ), - # ) + self.m_setdefault('plot_intensity') + self.plot_intensity.intensity = self.intensity + self.plot_intensity.two_theta = self.two_theta + self.plot_intensity.normalize(archive, logger) class XRDResultRSM(XRDResult): @@ -554,14 +689,6 @@ class XRDResultRSM(XRDResult): Section containing the result of a Reciprocal Space Map (RSM) scan. """ - m_def = Section( - a_h5web=H5WebAnnotation( - axes=['omega', 'chi', 'pi', 'two_theta'], signal='intensity' - ) - # a_h5web=H5WebAnnotation( - # axes=['q_parallel', 'q_perpendicular'], signal='intensity', paths=[] - # ) - ) q_parallel = Quantity( type=HDF5Reference, description='The scattering vector *Q_parallel* of the diffractogram', @@ -766,47 +893,44 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): except (AttributeError, AssertionError): return - if self.source_peak_wavelength is not None: - for var_axis in ['omega', 'chi', 'phi']: - var_axis_value = hdf5_handler.read_dataset(getattr(self, var_axis)) - if ( - var_axis_value is not None - and len(np.unique(var_axis_value.magnitude)) > 1 - ): - two_theta = hdf5_handler.read_dataset(self.two_theta) - intensity = hdf5_handler.read_dataset(self.intensity) - q_parallel, q_perpendicular = calculate_q_vectors_rsm( - wavelength=self.source_peak_wavelength, - two_theta=two_theta * np.ones_like(intensity), - omega=var_axis_value, - ) - hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/q_parallel', - data=q_parallel, - archive_path='data.results[0].q_parallel', - ) - hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/q_perpendicular', - data=q_perpendicular, - archive_path='data.results[0].q_perpendicular', - ) - break - hdf5_handler.add_attribute( - path='/ENTRY[entry]/experiment_result', - attrs=dict( - axes=[var_axis, 'two_theta'], - signal='intensity', - NX_class='NXdata', - ), - ) - # hdf5_handler.add_attribute( - # path='/ENTRY[entry]/experiment_result', - # attrs=dict( - # axes=['q_parallel', 'q_perpendicular'], - # signal='intensity', - # NX_class='NXdata', - # ), - # ) + var_axis = None + for axis in ['omega', 'chi', 'phi']: + axis_value = hdf5_handler.read_dataset(getattr(self, axis)) + if axis_value is not None and len(np.unique(axis_value.magnitude)) > 1: + var_axis = axis + break + + if self.source_peak_wavelength is not None and var_axis is not None: + two_theta = hdf5_handler.read_dataset(self.two_theta) + intensity = hdf5_handler.read_dataset(self.intensity) + q_parallel, q_perpendicular = calculate_q_vectors_rsm( + wavelength=self.source_peak_wavelength, + two_theta=two_theta * np.ones_like(intensity), + omega=hdf5_handler.read_dataset(getattr(self, var_axis)), + ) + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/q_parallel', + data=q_parallel, + archive_path='data.results[0].q_parallel', + ) + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/q_perpendicular', + data=q_perpendicular, + archive_path='data.results[0].q_perpendicular', + ) + hdf5_handler.write_file() + self.m_setdefault('plot_intensity_scattering_vector') + self.plot_intensity_scattering_vector.intensity = self.intensity + self.plot_intensity_scattering_vector.q_parallel = self.q_parallel + self.plot_intensity_scattering_vector.q_perpendicular = self.q_perpendicular + self.plot_intensity_scattering_vector.normalize(archive, logger) + + if var_axis is not None: + self.m_setdefault('plot_intensity') + self.plot_intensity.intensity = self.intensity + self.plot_intensity.two_theta = self.two_theta + self.plot_intensity.m_set(var_axis, getattr(self, var_axis)) + self.plot_intensity.normalize(archive, logger) class XRayDiffraction(Measurement): From 762fe86047781f66452166591fb936107e737b4b Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 10 Dec 2024 17:21:42 +0100 Subject: [PATCH 74/93] Comment out validation --- src/nomad_measurements/utils.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index b32dc045..4628385d 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -223,10 +223,11 @@ def add_dataset( self.logger.warning('HDF5 `path` must be provided.') return - if self.valid_dataset_paths: - if path not in self.valid_dataset_paths: - self.logger.error(f'Invalid dataset path "{path}".') - return + # TODO add back validation + # if self.valid_dataset_paths: + # if path not in self.valid_dataset_paths: + # self.logger.error(f'Invalid dataset path "{path}".') + # return dataset = dict( data=data, From 18ed92c6d67e99de7d216d30591bd1b43817aebe Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 11 Dec 2024 15:46:05 +0100 Subject: [PATCH 75/93] Add archive paths for the plot subsections --- src/nomad_measurements/xrd/schema.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index c4054a05..79e79363 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -302,11 +302,13 @@ def normalize(self, archive, logger): hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity/two_theta', data='/ENTRY[entry]/experiment_result/two_theta', + archive_path='data.results[0].plot_intensity.two_theta', internal_reference=True, ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity/intensity', data='/ENTRY[entry]/experiment_result/intensity', + archive_path='data.results[0].plot_intensity.intensity', internal_reference=True, ) @@ -315,6 +317,7 @@ def normalize(self, archive, logger): hdf5_handler.add_dataset( path=f'/ENTRY[entry]/experiment_result/plot_intensity/{var_axis}', data=f'/ENTRY[entry]/experiment_result/{var_axis}', + archive_path=f'data.results[0].plot_intensity.{var_axis}', internal_reference=True, ) hdf5_handler.add_attribute( @@ -374,6 +377,7 @@ def normalize(self, archive, logger): hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/intensity', data='/ENTRY[entry]/experiment_result/intensity', + archive_path='data.results[0].plot_intensity_scattering_vector.intensity', internal_reference=True, ) @@ -381,6 +385,7 @@ def normalize(self, archive, logger): hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_norm', data='/ENTRY[entry]/experiment_result/q_norm', + archive_path='data.results[0].plot_intensity_scattering_vector.q_norm', internal_reference=True, ) hdf5_handler.add_attribute( @@ -395,11 +400,13 @@ def normalize(self, archive, logger): hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_parallel', data='/ENTRY[entry]/experiment_result/q_parallel', + archive_path='data.results[0].plot_intensity_scattering_vector.q_parallel', internal_reference=True, ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_perpendicular', data='/ENTRY[entry]/experiment_result/q_perpendicular', + archive_path='data.results[0].plot_intensity_scattering_vector.q_perpendicular', internal_reference=True, ) hdf5_handler.add_attribute( From ff286c6084b8c32128a228d65585884083460fcb Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 11 Dec 2024 16:30:22 +0100 Subject: [PATCH 76/93] Add back validation with flag --- src/nomad_measurements/utils.py | 13 +++++++------ src/nomad_measurements/xrd/schema.py | 7 +++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 4628385d..c8a43b55 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -204,6 +204,7 @@ def add_dataset( archive_path: str = None, attrs: dict = None, internal_reference: bool = False, + validate_path: bool = True, lazy: bool = True, ): """ @@ -217,17 +218,18 @@ def add_dataset( archive_path (str): The path of the quantity in the archive. attrs (dict): The attributes to be added to the dataset. internal_reference (bool): If True, the reference is set to the HDF5 dataset. + validate_path (bool): If True, the path is validated against the + `valid_dataset_paths`. lazy (bool): If True, the file is not written immediately. """ if not path: self.logger.warning('HDF5 `path` must be provided.') return - # TODO add back validation - # if self.valid_dataset_paths: - # if path not in self.valid_dataset_paths: - # self.logger.error(f'Invalid dataset path "{path}".') - # return + if validate_path and self.valid_dataset_paths: + if path not in self.valid_dataset_paths: + self.logger.warning(f'Invalid dataset path "{path}".') + return dataset = dict( data=data, @@ -379,7 +381,6 @@ def _write_hdf5_file(self): group.create_dataset( name=dataset_name, data=data, - compression='gzip', ) group[dataset_name].attrs.update(value['attrs']) if value['archive_path'] is not None: diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 79e79363..bf638006 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -304,12 +304,14 @@ def normalize(self, archive, logger): data='/ENTRY[entry]/experiment_result/two_theta', archive_path='data.results[0].plot_intensity.two_theta', internal_reference=True, + validate_path=False, ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity/intensity', data='/ENTRY[entry]/experiment_result/intensity', archive_path='data.results[0].plot_intensity.intensity', internal_reference=True, + validate_path=False, ) for var_axis in ['omega', 'phi', 'chi']: @@ -319,6 +321,7 @@ def normalize(self, archive, logger): data=f'/ENTRY[entry]/experiment_result/{var_axis}', archive_path=f'data.results[0].plot_intensity.{var_axis}', internal_reference=True, + validate_path=False, ) hdf5_handler.add_attribute( path='/ENTRY[entry]/experiment_result/plot_intensity', @@ -379,6 +382,7 @@ def normalize(self, archive, logger): data='/ENTRY[entry]/experiment_result/intensity', archive_path='data.results[0].plot_intensity_scattering_vector.intensity', internal_reference=True, + validate_path=False, ) if self.q_norm is not None: @@ -387,6 +391,7 @@ def normalize(self, archive, logger): data='/ENTRY[entry]/experiment_result/q_norm', archive_path='data.results[0].plot_intensity_scattering_vector.q_norm', internal_reference=True, + validate_path=False, ) hdf5_handler.add_attribute( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector', @@ -402,12 +407,14 @@ def normalize(self, archive, logger): data='/ENTRY[entry]/experiment_result/q_parallel', archive_path='data.results[0].plot_intensity_scattering_vector.q_parallel', internal_reference=True, + validate_path=False, ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_perpendicular', data='/ENTRY[entry]/experiment_result/q_perpendicular', archive_path='data.results[0].plot_intensity_scattering_vector.q_perpendicular', internal_reference=True, + validate_path=False, ) hdf5_handler.add_attribute( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector', From 374b6bbe21f6bc5b0dab257801ec33975662c412 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 11 Dec 2024 16:43:43 +0100 Subject: [PATCH 77/93] Use nexus flag --- src/nomad_measurements/utils.py | 31 +++++++++++++++++----------- src/nomad_measurements/xrd/schema.py | 1 + 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index c8a43b55..04a2df24 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -174,6 +174,7 @@ def __init__( archive: 'EntryArchive', logger: 'BoundLogger', valid_dataset_paths: list = None, + nexus: bool = False, ): """ Initialize the handler. @@ -183,6 +184,7 @@ def __init__( archive (EntryArchive): The NOMAD archive. logger (BoundLogger): A structlog logger. valid_dataset_paths (list): The list of valid dataset paths. + nexus (bool): If True, the file is created as a NeXus file. """ if not filename.endswith(('.nxs', '.h5')): raise ValueError('Only .h5 or .nxs files are supported.') @@ -193,6 +195,7 @@ def __init__( self.valid_dataset_paths = [] if valid_dataset_paths: self.valid_dataset_paths = valid_dataset_paths + self.nexus = nexus self.hdf5_datasets = collections.OrderedDict() self.hdf5_attributes = collections.OrderedDict() @@ -307,17 +310,17 @@ def write_file(self): Method for creating an auxiliary file to store big data arrays outside the main archive file (e.g. HDF5, NeXus). """ - # TODO: The selection made in the first instance of using `write_file` should - # be remembered and used for subsequent calls to `write_file`. - try: - if self.data_file.endswith('.h5'): - self.data_file = self.data_file.replace('.h5', '.nxs') - self._write_nx_file() - except Exception: - # TODO also modify the name of the datafile in the archive. - self.logger.warning('Error creating nexus file. Creating h5 file instead.') - if self.data_file.endswith('.nxs'): - self.data_file = self.data_file.replace('.nxs', '.h5') + if self.nexus: + try: + self._write_nx_file() + except Exception as e: + self.nexus = False + self.logger.warning( + f'Encountered "{e}" error while creating nexus file. ' + 'Creating h5 file instead.' + ) + self._write_hdf5_file() + else: self._write_hdf5_file() def _write_nx_file(self): @@ -326,6 +329,8 @@ def _write_nx_file(self): to the `hdf5_data_dict` before creating the nexus file. This provides a NeXus view of the data in addition to storing array data. """ + if self.data_file.endswith('.h5'): + self.data_file = self.data_file.replace('.h5', '.nxs') raise NotImplementedError('Method `write_nx_file` is not implemented.') # TODO add archive data to `hdf5_data_dict` before creating the nexus file. Use # `populate_hdf5_data_dict` method for each quantity that is needed in .nxs @@ -337,6 +342,8 @@ def _write_hdf5_file(self): """ Method for creating an HDF5 file. """ + if self.data_file.endswith('.nxs'): + self.data_file = self.data_file.replace('.nxs', '.h5') if not self.hdf5_datasets and not self.hdf5_attributes: return # remove the nexus annotations from the dataset paths if any @@ -394,7 +401,7 @@ def _write_hdf5_file(self): self.logger.warning(f'Path "{key}" not found to add attribute.') h5.close() - # reset hdf5 data dict, references, atttributes + # reset hdf5 datasets and atttributes self.hdf5_datasets = collections.OrderedDict() self.hdf5_attributes = collections.OrderedDict() diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index bf638006..b1aa435d 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1216,6 +1216,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): archive=archive, logger=logger, valid_dataset_paths=NEXUS_DATASET_PATHS, + nexus=True, ) read_function, write_function = self.get_read_write_functions() if read_function is None or write_function is None: From 9464f117cc692d4fa9e2bb89979a5879bb9d6d12 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 13 Dec 2024 10:54:37 +0100 Subject: [PATCH 78/93] Add interpolated intensity data into h5 for qspace plots --- src/nomad_measurements/xrd/schema.py | 45 ++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index b1aa435d..807b9836 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -377,15 +377,15 @@ def normalize(self, archive, logger): if self.intensity is None: return - hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/intensity', - data='/ENTRY[entry]/experiment_result/intensity', - archive_path='data.results[0].plot_intensity_scattering_vector.intensity', - internal_reference=True, - validate_path=False, - ) if self.q_norm is not None: + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/intensity', + data='/ENTRY[entry]/experiment_result/intensity', + archive_path='data.results[0].plot_intensity_scattering_vector.intensity', + internal_reference=True, + validate_path=False, + ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_norm', data='/ENTRY[entry]/experiment_result/q_norm', @@ -402,24 +402,45 @@ def normalize(self, archive, logger): ), ) elif self.q_parallel is not None and self.q_perpendicular is not None: + intensity = hdf5_handler.read_dataset(self.intensity) + q_parallel = hdf5_handler.read_dataset(self.q_parallel) + q_perpendicular = hdf5_handler.read_dataset(self.q_perpendicular) + # q_vectors lead to irregular grid + # generate a regular grid using interpolation + x = q_parallel.to('1/angstrom').magnitude.flatten() + y = q_perpendicular.to('1/angstrom').magnitude.flatten() + x_regular = np.linspace(x.min(), x.max(), intensity.shape[0]) + y_regular = np.linspace(y.min(), y.max(), intensity.shape[1]) + x_grid, y_grid = np.meshgrid(x_regular, y_regular) + z_interpolated = griddata( + points=(x, y), + values=intensity.flatten(), + xi=(x_grid, y_grid), + method='linear', + fill_value=intensity.min(), + ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_parallel', - data='/ENTRY[entry]/experiment_result/q_parallel', + data=x_grid, archive_path='data.results[0].plot_intensity_scattering_vector.q_parallel', - internal_reference=True, validate_path=False, ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_perpendicular', - data='/ENTRY[entry]/experiment_result/q_perpendicular', + data=y_grid, archive_path='data.results[0].plot_intensity_scattering_vector.q_perpendicular', - internal_reference=True, + validate_path=False, + ) + hdf5_handler.add_dataset( + path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/intensity', + data=z_interpolated, + archive_path='data.results[0].plot_intensity_scattering_vector.intensity', validate_path=False, ) hdf5_handler.add_attribute( path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector', attrs=dict( - axes=['q_parallel', 'q_perpendicular'], + axes=['q_perpendicular', 'q_parallel'], signal='intensity', NX_class='NXdata', ), From baac2da53426172dd5ec63f27ee57ef84abcd315 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 13 Dec 2024 12:45:21 +0100 Subject: [PATCH 79/93] Use prefix to reduce len of string --- src/nomad_measurements/xrd/schema.py | 37 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 807b9836..4baf021a 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -290,6 +290,7 @@ class XRDResultPlotIntensity(ArchiveSection): def normalize(self, archive, logger): super().normalize(archive, logger) + prefix = '/ENTRY[entry]/experiment_result' try: hdf5_handler = self.m_parent.m_parent.hdf5_handler assert isinstance(hdf5_handler, HDF5Handler) @@ -300,15 +301,15 @@ def normalize(self, archive, logger): return hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/plot_intensity/two_theta', - data='/ENTRY[entry]/experiment_result/two_theta', + path=f'{prefix}/plot_intensity/two_theta', + data=f'{prefix}/two_theta', archive_path='data.results[0].plot_intensity.two_theta', internal_reference=True, validate_path=False, ) hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/plot_intensity/intensity', - data='/ENTRY[entry]/experiment_result/intensity', + path=f'{prefix}/plot_intensity/intensity', + data=f'{prefix}/intensity', archive_path='data.results[0].plot_intensity.intensity', internal_reference=True, validate_path=False, @@ -317,14 +318,14 @@ def normalize(self, archive, logger): for var_axis in ['omega', 'phi', 'chi']: if self.get(var_axis) is not None: hdf5_handler.add_dataset( - path=f'/ENTRY[entry]/experiment_result/plot_intensity/{var_axis}', - data=f'/ENTRY[entry]/experiment_result/{var_axis}', + path=f'{prefix}/plot_intensity/{var_axis}', + data=f'{prefix}/{var_axis}', archive_path=f'data.results[0].plot_intensity.{var_axis}', internal_reference=True, validate_path=False, ) hdf5_handler.add_attribute( - path='/ENTRY[entry]/experiment_result/plot_intensity', + path=f'{prefix}/plot_intensity', attrs=dict( axes=[var_axis, 'two_theta'], signal='intensity', @@ -334,7 +335,7 @@ def normalize(self, archive, logger): return hdf5_handler.add_attribute( - path='/ENTRY[entry]/experiment_result/plot_intensity', + path=f'{prefix}/plot_intensity', attrs=dict( axes='two_theta', signal='intensity', @@ -368,7 +369,7 @@ class XRDResultPlotIntensityScatteringVector(ArchiveSection): def normalize(self, archive, logger): super().normalize(archive, logger) - + prefix = '/ENTRY[entry]/experiment_result' try: hdf5_handler = self.m_parent.m_parent.hdf5_handler assert isinstance(hdf5_handler, HDF5Handler) @@ -380,21 +381,21 @@ def normalize(self, archive, logger): if self.q_norm is not None: hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/intensity', - data='/ENTRY[entry]/experiment_result/intensity', + path=f'{prefix}/plot_intensity_scattering_vector/intensity', + data=f'{prefix}/intensity', archive_path='data.results[0].plot_intensity_scattering_vector.intensity', internal_reference=True, validate_path=False, ) hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_norm', - data='/ENTRY[entry]/experiment_result/q_norm', + path=f'{prefix}/plot_intensity_scattering_vector/q_norm', + data=f'{prefix}/q_norm', archive_path='data.results[0].plot_intensity_scattering_vector.q_norm', internal_reference=True, validate_path=False, ) hdf5_handler.add_attribute( - path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector', + path=f'{prefix}/plot_intensity_scattering_vector', attrs=dict( axes='q_norm', signal='intensity', @@ -420,25 +421,25 @@ def normalize(self, archive, logger): fill_value=intensity.min(), ) hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_parallel', + path=f'{prefix}/plot_intensity_scattering_vector/q_parallel', data=x_grid, archive_path='data.results[0].plot_intensity_scattering_vector.q_parallel', validate_path=False, ) hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/q_perpendicular', + path=f'{prefix}/plot_intensity_scattering_vector/q_perpendicular', data=y_grid, archive_path='data.results[0].plot_intensity_scattering_vector.q_perpendicular', validate_path=False, ) hdf5_handler.add_dataset( - path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector/intensity', + path=f'{prefix}/plot_intensity_scattering_vector/intensity', data=z_interpolated, archive_path='data.results[0].plot_intensity_scattering_vector.intensity', validate_path=False, ) hdf5_handler.add_attribute( - path='/ENTRY[entry]/experiment_result/plot_intensity_scattering_vector', + path=f'{prefix}/plot_intensity_scattering_vector', attrs=dict( axes=['q_perpendicular', 'q_parallel'], signal='intensity', From d705957feacb04731b296d15dbd0590a80de6ff1 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 13 Dec 2024 12:46:18 +0100 Subject: [PATCH 80/93] Store regularized linespace of q vectors; revise descriptions --- src/nomad_measurements/xrd/schema.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 4baf021a..bbc3bffa 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -352,7 +352,10 @@ class XRDResultPlotIntensityScatteringVector(ArchiveSection): ) intensity = Quantity( type=HDF5Reference, - description='The count at each q value, dimensionless', + description=""" + The count at each q value. In case of RSM, it contains interpolated values of + `intensity` at regularized grid of `q` vectors. + """, ) q_norm = Quantity( type=HDF5Reference, @@ -360,11 +363,11 @@ class XRDResultPlotIntensityScatteringVector(ArchiveSection): ) q_parallel = Quantity( type=HDF5Reference, - description='The q_parallel range of the diffractogram', + description='The regularized grid of `q_parallel` range for plotting.', ) q_perpendicular = Quantity( type=HDF5Reference, - description='The q_perpendicular range of the diffractogram', + description='The regularized grid of `q_perpendicular` range for plotting.', ) def normalize(self, archive, logger): @@ -422,13 +425,13 @@ def normalize(self, archive, logger): ) hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity_scattering_vector/q_parallel', - data=x_grid, + data=x_regular, archive_path='data.results[0].plot_intensity_scattering_vector.q_parallel', validate_path=False, ) hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity_scattering_vector/q_perpendicular', - data=y_grid, + data=y_regular, archive_path='data.results[0].plot_intensity_scattering_vector.q_perpendicular', validate_path=False, ) From 47df0cc622c31f6bea2d9bf895fa663e8adb5633 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 13 Dec 2024 12:48:12 +0100 Subject: [PATCH 81/93] Remove plotly plots --- src/nomad_measurements/xrd/schema.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index bbc3bffa..036b56eb 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -48,7 +48,7 @@ MeasurementResult, ReadableIdentifiers, ) -from nomad.datamodel.metainfo.plot import PlotlyFigure, PlotSection +from nomad.datamodel.metainfo.plot import PlotlyFigure from nomad.datamodel.results import ( DiffractionPattern, MeasurementMethod, @@ -1068,7 +1068,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) -class ELNXRayDiffraction(XRayDiffraction, EntryData, PlotSection): +class ELNXRayDiffraction(XRayDiffraction, EntryData): """ Example section for how XRayDiffraction can be implemented with a general reader for common XRD file types. @@ -1223,6 +1223,8 @@ def backward_compatibility(self): # Migration to using HFD5References: removing exisiting results if self.get('results'): self.results = [] + if self.get('figures'): + self.figures = [] def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): """ @@ -1257,9 +1259,6 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): self.auxiliary_file = self.hdf5_handler.data_file super().normalize(archive, logger) - if self.results: - self.figures = self.results[0].generate_plots() - class RawFileXRDData(EntryData): """ From fbc87d194f56de748d84f53295781b8e814358b0 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 13 Dec 2024 13:10:35 +0100 Subject: [PATCH 82/93] Bring plots to overview --- src/nomad_measurements/xrd/schema.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 036b56eb..5aca355d 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1083,6 +1083,12 @@ class ELNXRayDiffraction(XRayDiffraction, EntryData): a_template={ 'measurement_identifiers': {}, }, + a_h5web=H5WebAnnotation( + paths=[ + 'results/0/plot_intensity', + 'results/0/plot_intensity_scattering_vector', + ] + ), ) data_file = Quantity( type=str, From c3f2ff3c5d82cdc58f54cf6a9e2a40d9d18580da Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 13 Dec 2024 13:56:08 +0100 Subject: [PATCH 83/93] Fix tests --- tests/test_parser.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_parser.py b/tests/test_parser.py index 2cdd8980..b5d01756 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -20,6 +20,8 @@ import pytest from nomad.client import normalize_all, parse +from nomad_measurements.xrd.schema import XRDResult1D + @pytest.fixture( name='parsed_archive', @@ -48,7 +50,7 @@ def fixture_parsed_archive(request): yield measurement_archive - for file_path in [measurement, measurement.replace('archive.json', 'nxs')]: + for file_path in [measurement, rel_file + '.nxs', rel_file + '.h5']: if os.path.exists(file_path): os.remove(file_path) @@ -72,7 +74,7 @@ def test_normalize_all(parsed_archive, caplog): assert parsed_archive.data.results[ 0 ].source_peak_wavelength.magnitude == pytest.approx(1.540598, 1e-2) - if len(parsed_archive.data.results[0].intensity.shape) == 1: + if isinstance(parsed_archive.data.results[0], XRDResult1D): assert parsed_archive.results.properties.structural.diffraction_pattern[ 0 ].incident_beam_wavelength.magnitude * 1e10 == pytest.approx(1.540598, 1e-2) From 3ba656f17396932fe54438f4e3c09f3a418e8115 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Fri, 13 Dec 2024 15:00:01 +0100 Subject: [PATCH 84/93] Linting; remove attr arg from add_dataset --- src/nomad_measurements/utils.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 04a2df24..710e21a4 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -200,12 +200,11 @@ def __init__( self.hdf5_datasets = collections.OrderedDict() self.hdf5_attributes = collections.OrderedDict() - def add_dataset( + def add_dataset( # noqa: PLR0913 self, path: str, data: Any, archive_path: str = None, - attrs: dict = None, internal_reference: bool = False, validate_path: bool = True, lazy: bool = True, @@ -219,8 +218,8 @@ def add_dataset( path (str): The dataset path to be used in the HDF5 file. data (Any): The data to be stored in the HDF5 file. archive_path (str): The path of the quantity in the archive. - attrs (dict): The attributes to be added to the dataset. - internal_reference (bool): If True, the reference is set to the HDF5 dataset. + internal_reference (bool): If True, an internal reference is set to an + existing HDF5 dataset. validate_path (bool): If True, the path is validated against the `valid_dataset_paths`. lazy (bool): If True, the file is not written immediately. @@ -236,7 +235,7 @@ def add_dataset( dataset = dict( data=data, - attrs=attrs if attrs else {}, + attrs={}, hdf5_path=( f'/uploads/{self.archive.m_context.upload_id}/raw' f'/{self.data_file}#{path}' @@ -338,7 +337,7 @@ def _write_nx_file(self): # One issue here is as we populate the `hdf5_data_dict` with the archive data, # we will always have to over write the nexus file - def _write_hdf5_file(self): + def _write_hdf5_file(self): # noqa: PLR0912 """ Method for creating an HDF5 file. """ From 4a0852c61f478bd60fce4e3fafb0bbd5e00019c3 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Mon, 16 Dec 2024 11:20:05 +0100 Subject: [PATCH 85/93] Review: move none check into method --- src/nomad_measurements/utils.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 710e21a4..854fce51 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -389,10 +389,9 @@ def _write_hdf5_file(self): # noqa: PLR0912 data=data, ) group[dataset_name].attrs.update(value['attrs']) - if value['archive_path'] is not None: - self._set_hdf5_reference( - self.archive, value['archive_path'], value['hdf5_path'] - ) + self._set_hdf5_reference( + self.archive, value['archive_path'], value['hdf5_path'] + ) for key, value in self.hdf5_attributes.items(): if key in h5: h5[key].attrs.update(value) @@ -432,7 +431,9 @@ def _remove_nexus_annotations(path: str) -> str: return new_path @staticmethod - def _set_hdf5_reference(section: 'ArchiveSection', path: str, ref: str): + def _set_hdf5_reference( + section: 'ArchiveSection' = None, path: str = None, ref: str = None + ): """ Method for setting a HDF5Reference quantity in a section. It can handle nested quantities and repeatable sections, provided that the quantity itself @@ -446,6 +447,9 @@ def _set_hdf5_reference(section: 'ArchiveSection', path: str, ref: str): ref (str): The reference to the HDF5 dataset. """ # TODO handle the case when section in the path is not initialized + + if not section or not path or not ref: + return attr = section path = path.split('.') quantity_name = path.pop() From 864d53b70d2fc7cad3c49ae5f6aaa3980ef0df33 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 17 Dec 2024 11:49:50 +0100 Subject: [PATCH 86/93] Review: use 'with' for opening h5 file --- src/nomad_measurements/utils.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 854fce51..2de926f3 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -289,19 +289,17 @@ def read_dataset(self, path: str): return file_path, dataset_path = path.split('#') file_name = file_path.rsplit('/raw/', 1)[1] - with self.archive.m_context.raw_file(file_name, 'r') as h5file: - h5 = h5py.File(h5file.name, 'r') + value = None + with h5py.File(self.archive.m_context.raw_file(file_name, 'rb')) as h5: if dataset_path not in h5: self.logger.warning(f'Dataset "{dataset_path}" not found.') - h5.close() - return None - value = h5[dataset_path][...] - try: - units = h5[dataset_path].attrs['units'] - value *= ureg(units) - except KeyError: - pass - h5.close() + else: + value = h5[dataset_path][...] + try: + units = h5[dataset_path].attrs['units'] + value *= ureg(units) + except KeyError: + pass return value def write_file(self): @@ -360,8 +358,10 @@ def _write_hdf5_file(self): # noqa: PLR0912 self.hdf5_attributes = tmp_dict # create the HDF5 file - with self.archive.m_context.raw_file(self.data_file, 'a') as h5file: - h5 = h5py.File(h5file.name, 'a') + mode = 'r+b' if self.archive.m_context.raw_path_exists(self.data_file) else 'wb' + with h5py.File( + self.archive.m_context.raw_file(self.data_file, mode), 'a' + ) as h5: for key, value in self.hdf5_datasets.items(): if value['data'] is None: self.logger.warning(f'No data found for "{key}". Skipping.') @@ -397,7 +397,6 @@ def _write_hdf5_file(self): # noqa: PLR0912 h5[key].attrs.update(value) else: self.logger.warning(f'Path "{key}" not found to add attribute.') - h5.close() # reset hdf5 datasets and atttributes self.hdf5_datasets = collections.OrderedDict() From 122b65fe7c051e91b4bdd005e01e96247113dd46 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 17 Dec 2024 12:21:14 +0100 Subject: [PATCH 87/93] Review: make internal states as private vars --- src/nomad_measurements/utils.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 2de926f3..7ff4356a 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -197,8 +197,8 @@ def __init__( self.valid_dataset_paths = valid_dataset_paths self.nexus = nexus - self.hdf5_datasets = collections.OrderedDict() - self.hdf5_attributes = collections.OrderedDict() + self._hdf5_datasets = collections.OrderedDict() + self._hdf5_attributes = collections.OrderedDict() def add_dataset( # noqa: PLR0913 self, @@ -248,7 +248,7 @@ def add_dataset( # noqa: PLR0913 dataset['data'] = data.magnitude dataset['attrs'].update({'units': str(data.units)}) - self.hdf5_datasets[path] = dataset + self._hdf5_datasets[path] = dataset if not lazy: self.write_file() @@ -269,7 +269,7 @@ def add_attribute( attrs (dict): The attributes to be added. lazy (bool): If True, the file is not written immediately. """ - self.hdf5_attributes[path] = attrs + self._hdf5_attributes[path] = attrs if not lazy: self.write_file() @@ -283,7 +283,7 @@ def read_dataset(self, path: str): Args: path (str): The dataset path in the HDF5 file. """ - if self.hdf5_datasets or self.hdf5_attributes: + if self._hdf5_datasets or self._hdf5_attributes: self.write_file() if path is None: return @@ -341,28 +341,28 @@ def _write_hdf5_file(self): # noqa: PLR0912 """ if self.data_file.endswith('.nxs'): self.data_file = self.data_file.replace('.nxs', '.h5') - if not self.hdf5_datasets and not self.hdf5_attributes: + if not self._hdf5_datasets and not self._hdf5_attributes: return # remove the nexus annotations from the dataset paths if any tmp_dict = {} - for key, value in self.hdf5_datasets.items(): + for key, value in self._hdf5_datasets.items(): new_key = self._remove_nexus_annotations(key) tmp_dict[new_key] = value tmp_dict[new_key]['hdf5_path'] = self._remove_nexus_annotations( value['hdf5_path'] ) - self.hdf5_datasets = tmp_dict + self._hdf5_datasets = tmp_dict tmp_dict = {} - for key, value in self.hdf5_attributes.items(): + for key, value in self._hdf5_attributes.items(): tmp_dict[self._remove_nexus_annotations(key)] = value - self.hdf5_attributes = tmp_dict + self._hdf5_attributes = tmp_dict # create the HDF5 file mode = 'r+b' if self.archive.m_context.raw_path_exists(self.data_file) else 'wb' with h5py.File( self.archive.m_context.raw_file(self.data_file, mode), 'a' ) as h5: - for key, value in self.hdf5_datasets.items(): + for key, value in self._hdf5_datasets.items(): if value['data'] is None: self.logger.warning(f'No data found for "{key}". Skipping.') continue @@ -392,15 +392,15 @@ def _write_hdf5_file(self): # noqa: PLR0912 self._set_hdf5_reference( self.archive, value['archive_path'], value['hdf5_path'] ) - for key, value in self.hdf5_attributes.items(): + for key, value in self._hdf5_attributes.items(): if key in h5: h5[key].attrs.update(value) else: self.logger.warning(f'Path "{key}" not found to add attribute.') # reset hdf5 datasets and atttributes - self.hdf5_datasets = collections.OrderedDict() - self.hdf5_attributes = collections.OrderedDict() + self._hdf5_datasets = collections.OrderedDict() + self._hdf5_attributes = collections.OrderedDict() @staticmethod def _remove_nexus_annotations(path: str) -> str: From 67ee382e1e1686b8feb474239a445f1064b8d9ba Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 17 Dec 2024 19:14:12 +0100 Subject: [PATCH 88/93] Add pydantic basemodel for dataset --- src/nomad_measurements/utils.py | 97 ++++++++++++--------- src/nomad_measurements/xrd/schema.py | 126 +++++++++++++++++---------- 2 files changed, 139 insertions(+), 84 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 7ff4356a..2805174d 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -21,6 +21,7 @@ from typing import ( TYPE_CHECKING, Any, + Optional, ) import h5py @@ -28,6 +29,7 @@ import pint from nomad.datamodel.hdf5 import HDF5Reference from nomad.units import ureg +from pydantic import BaseModel, Field if TYPE_CHECKING: from nomad.datamodel.data import ( @@ -168,6 +170,21 @@ class HDF5Handler: the main archive file (e.g. HDF5, NeXus). """ + class DatasetModel(BaseModel): + """ + Pydantic model for the dataset to be stored in the HDF5 file. + """ + + data: Any = Field(description='The data to be stored in the HDF5 file.') + archive_path: Optional[str] = Field( + None, description='The path of the quantity in the NOMAD archive.' + ) + internal_reference: Optional[bool] = Field( + False, + description='If True, an internal reference is set to an existing HDF5 ' + 'dataset.', + ) + def __init__( self, filename: str, @@ -200,12 +217,10 @@ def __init__( self._hdf5_datasets = collections.OrderedDict() self._hdf5_attributes = collections.OrderedDict() - def add_dataset( # noqa: PLR0913 + def add_dataset( self, path: str, - data: Any, - archive_path: str = None, - internal_reference: bool = False, + params: dict, validate_path: bool = True, lazy: bool = True, ): @@ -214,39 +229,41 @@ def add_dataset( # noqa: PLR0913 either `read_dataset` or `write_file` method is called. The `path` is validated against the `valid_dataset_paths` if provided before adding the data. + `params` should be a dictionary containing `data`. Optionally, + it can also contain `archive_path` and `internal_reference`: + { + 'data': Any, + 'archive_path': str, + 'internal_reference': bool, + } + Args: path (str): The dataset path to be used in the HDF5 file. - data (Any): The data to be stored in the HDF5 file. - archive_path (str): The path of the quantity in the archive. - internal_reference (bool): If True, an internal reference is set to an - existing HDF5 dataset. - validate_path (bool): If True, the path is validated against the - `valid_dataset_paths`. - lazy (bool): If True, the file is not written immediately. + params (dict): The dataset parameters. + validate_path (bool): If True, the dataset path is validated. + lazy (Optional[bool]): If True, the file is not written immediately. """ - if not path: - self.logger.warning('HDF5 `path` must be provided.') + if not params: + self.logger.warning('Dataset `params` must be provided.') return + dataset = HDF5Handler.DatasetModel( + **params, + ) if validate_path and self.valid_dataset_paths: if path not in self.valid_dataset_paths: self.logger.warning(f'Invalid dataset path "{path}".') return - dataset = dict( - data=data, - attrs={}, - hdf5_path=( - f'/uploads/{self.archive.m_context.upload_id}/raw' - f'/{self.data_file}#{path}' - ), - archive_path=archive_path, - internal_reference=internal_reference, - ) # handle the pint.Quantity and add data - if isinstance(data, pint.Quantity): - dataset['data'] = data.magnitude - dataset['attrs'].update({'units': str(data.units)}) + if isinstance(dataset.data, pint.Quantity): + self.add_attribute( + path=path, + params=dict( + units=str(dataset.data.units), + ), + ) + dataset.data = dataset.data.magnitude self._hdf5_datasets[path] = dataset @@ -256,7 +273,7 @@ def add_dataset( # noqa: PLR0913 def add_attribute( self, path: str, - attrs: dict, + params: dict, lazy: bool = True, ): """ @@ -266,10 +283,13 @@ def add_attribute( Args: path (str): The dataset or group path in the HDF5 file. - attrs (dict): The attributes to be added. + params (dict): The attributes to be added. lazy (bool): If True, the file is not written immediately. """ - self._hdf5_attributes[path] = attrs + if not params: + self.logger.warning('Attribute `params` must be provided.') + return + self._hdf5_attributes[path] = params if not lazy: self.write_file() @@ -348,9 +368,6 @@ def _write_hdf5_file(self): # noqa: PLR0912 for key, value in self._hdf5_datasets.items(): new_key = self._remove_nexus_annotations(key) tmp_dict[new_key] = value - tmp_dict[new_key]['hdf5_path'] = self._remove_nexus_annotations( - value['hdf5_path'] - ) self._hdf5_datasets = tmp_dict tmp_dict = {} for key, value in self._hdf5_attributes.items(): @@ -363,20 +380,20 @@ def _write_hdf5_file(self): # noqa: PLR0912 self.archive.m_context.raw_file(self.data_file, mode), 'a' ) as h5: for key, value in self._hdf5_datasets.items(): - if value['data'] is None: + if value.data is None: self.logger.warning(f'No data found for "{key}". Skipping.') continue - elif value['internal_reference']: + elif value.internal_reference: # resolve the internal reference try: - data = h5[self._remove_nexus_annotations(value['data'])] + data = h5[self._remove_nexus_annotations(value.data)] except KeyError: self.logger.warning( - f'Internal reference "{data}" not found. Skipping.' + f'Internal reference "{value.data}" not found. Skipping.' ) continue else: - data = value['data'] + data = value.data group_name, dataset_name = key.rsplit('/', 1) group = h5.require_group(group_name) @@ -388,9 +405,11 @@ def _write_hdf5_file(self): # noqa: PLR0912 name=dataset_name, data=data, ) - group[dataset_name].attrs.update(value['attrs']) self._set_hdf5_reference( - self.archive, value['archive_path'], value['hdf5_path'] + self.archive, + value.archive_path, + f'/uploads/{self.archive.m_context.upload_id}/raw' + f'/{self.data_file}#{key}', ) for key, value in self._hdf5_attributes.items(): if key in h5: diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index 5aca355d..f98278b2 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -302,16 +302,20 @@ def normalize(self, archive, logger): hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity/two_theta', - data=f'{prefix}/two_theta', - archive_path='data.results[0].plot_intensity.two_theta', - internal_reference=True, + params=dict( + data=f'{prefix}/two_theta', + archive_path='data.results[0].plot_intensity.two_theta', + internal_reference=True, + ), validate_path=False, ) hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity/intensity', - data=f'{prefix}/intensity', - archive_path='data.results[0].plot_intensity.intensity', - internal_reference=True, + params=dict( + data=f'{prefix}/intensity', + archive_path='data.results[0].plot_intensity.intensity', + internal_reference=True, + ), validate_path=False, ) @@ -319,14 +323,16 @@ def normalize(self, archive, logger): if self.get(var_axis) is not None: hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity/{var_axis}', - data=f'{prefix}/{var_axis}', - archive_path=f'data.results[0].plot_intensity.{var_axis}', - internal_reference=True, + params=dict( + data=f'{prefix}/{var_axis}', + archive_path=f'data.results[0].plot_intensity.{var_axis}', + internal_reference=True, + ), validate_path=False, ) hdf5_handler.add_attribute( path=f'{prefix}/plot_intensity', - attrs=dict( + params=dict( axes=[var_axis, 'two_theta'], signal='intensity', NX_class='NXdata', @@ -336,7 +342,7 @@ def normalize(self, archive, logger): hdf5_handler.add_attribute( path=f'{prefix}/plot_intensity', - attrs=dict( + params=dict( axes='two_theta', signal='intensity', NX_class='NXdata', @@ -385,21 +391,25 @@ def normalize(self, archive, logger): if self.q_norm is not None: hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity_scattering_vector/intensity', - data=f'{prefix}/intensity', - archive_path='data.results[0].plot_intensity_scattering_vector.intensity', - internal_reference=True, + params=dict( + data=f'{prefix}/intensity', + archive_path='data.results[0].plot_intensity_scattering_vector.intensity', + internal_reference=True, + ), validate_path=False, ) hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity_scattering_vector/q_norm', - data=f'{prefix}/q_norm', - archive_path='data.results[0].plot_intensity_scattering_vector.q_norm', - internal_reference=True, + params=dict( + data=f'{prefix}/q_norm', + archive_path='data.results[0].plot_intensity_scattering_vector.q_norm', + internal_reference=True, + ), validate_path=False, ) hdf5_handler.add_attribute( path=f'{prefix}/plot_intensity_scattering_vector', - attrs=dict( + params=dict( axes='q_norm', signal='intensity', NX_class='NXdata', @@ -425,25 +435,31 @@ def normalize(self, archive, logger): ) hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity_scattering_vector/q_parallel', - data=x_regular, - archive_path='data.results[0].plot_intensity_scattering_vector.q_parallel', + params=dict( + data=x_regular, + archive_path='data.results[0].plot_intensity_scattering_vector.q_parallel', + ), validate_path=False, ) hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity_scattering_vector/q_perpendicular', - data=y_regular, - archive_path='data.results[0].plot_intensity_scattering_vector.q_perpendicular', + params=dict( + data=y_regular, + archive_path='data.results[0].plot_intensity_scattering_vector.q_perpendicular', + ), validate_path=False, ) hdf5_handler.add_dataset( path=f'{prefix}/plot_intensity_scattering_vector/intensity', - data=z_interpolated, - archive_path='data.results[0].plot_intensity_scattering_vector.intensity', + params=dict( + data=z_interpolated, + archive_path='data.results[0].plot_intensity_scattering_vector.intensity', + ), validate_path=False, ) hdf5_handler.add_attribute( path=f'{prefix}/plot_intensity_scattering_vector', - attrs=dict( + params=dict( axes=['q_perpendicular', 'q_parallel'], signal='intensity', NX_class='NXdata', @@ -703,13 +719,17 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/q_norm', - data=q_norm, - archive_path='data.results[0].q_norm', + params=dict( + data=q_norm, + archive_path='data.results[0].q_norm', + ), ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/two_theta', - data=two_theta, - archive_path='data.results[0].two_theta', + params=dict( + data=two_theta, + archive_path='data.results[0].two_theta', + ), ) hdf5_handler.write_file() self.m_setdefault('plot_intensity_scattering_vector') @@ -949,13 +969,17 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger'): ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/q_parallel', - data=q_parallel, - archive_path='data.results[0].q_parallel', + params=dict( + data=q_parallel, + archive_path='data.results[0].q_parallel', + ), ) hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/q_perpendicular', - data=q_perpendicular, - archive_path='data.results[0].q_perpendicular', + params=dict( + data=q_perpendicular, + archive_path='data.results[0].q_perpendicular', + ), ) hdf5_handler.write_file() self.m_setdefault('plot_intensity_scattering_vector') @@ -1162,33 +1186,45 @@ def write_xrd_data( result.scan_axis = metadata_dict.get('scan_axis', None) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/intensity', - data=xrd_dict.get('intensity', None), - archive_path='data.results[0].intensity', + params=dict( + data=xrd_dict.get('intensity', None), + archive_path='data.results[0].intensity', + ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/two_theta', - data=xrd_dict.get('2Theta', None), - archive_path='data.results[0].two_theta', + params=dict( + data=xrd_dict.get('2Theta', None), + archive_path='data.results[0].two_theta', + ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/omega', - data=xrd_dict.get('Omega', None), - archive_path='data.results[0].omega', + params=dict( + data=xrd_dict.get('Omega', None), + archive_path='data.results[0].omega', + ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/chi', - data=xrd_dict.get('Chi', None), - archive_path='data.results[0].chi', + params=dict( + data=xrd_dict.get('Chi', None), + archive_path='data.results[0].chi', + ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/phi', - data=xrd_dict.get('Phi', None), - archive_path='data.results[0].phi', + params=dict( + data=xrd_dict.get('Phi', None), + archive_path='data.results[0].phi', + ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_config/count_time', - data=xrd_dict.get('countTime', None), - archive_path='data.results[0].integration_time', + params=dict( + data=xrd_dict.get('countTime', None), + archive_path='data.results[0].integration_time', + ), ) result.normalize(archive, logger) results.append(result) From 645348a0fea57fa234cfe544201d11cfea22038e Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Tue, 17 Dec 2024 19:55:04 +0100 Subject: [PATCH 89/93] Use data from variables if available for reading --- src/nomad_measurements/utils.py | 25 ++++++++++++++++--------- src/nomad_measurements/xrd/schema.py | 21 +++++++++++---------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 2805174d..766eaa18 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -226,8 +226,8 @@ def add_dataset( ): """ Add a dataset to the HDF5 file. The dataset is written lazily (default) when - either `read_dataset` or `write_file` method is called. The `path` is validated - against the `valid_dataset_paths` if provided before adding the data. + `write_file` method is called. The `path` is validated against the + `valid_dataset_paths` if provided before adding the data. `params` should be a dictionary containing `data`. Optionally, it can also contain `archive_path` and `internal_reference`: @@ -278,8 +278,7 @@ def add_attribute( ): """ Add an attribute to the dataset or group at the given path. The attribute is - written lazily (default) when either `read_dataset` or `write_file` method is - called. + written lazily (default) when `write_file` method is called. Args: path (str): The dataset or group path in the HDF5 file. @@ -297,19 +296,27 @@ def add_attribute( def read_dataset(self, path: str): """ Returns the dataset at the given path. If the quantity has `units` as an - attribute, tries to returns a `pint.Quantity`. Before returning the dataset, the - method also writes the file with any pending datasets. + attribute, tries to returns a `pint.Quantity`. + If the dataset available in the `self._hdf5_datasets`, it is returned directly. Args: path (str): The dataset path in the HDF5 file. """ - if self._hdf5_datasets or self._hdf5_attributes: - self.write_file() if path is None: return file_path, dataset_path = path.split('#') - file_name = file_path.rsplit('/raw/', 1)[1] + + # find path in the instance variables value = None + if dataset_path in self._hdf5_datasets: + value = self._hdf5_datasets[dataset_path].data + if dataset_path in self._hdf5_attributes: + units = self._hdf5_attributes[dataset_path].get('units', None) + if units: + value *= ureg(units) + return value + + file_name = file_path.rsplit('/raw/', 1)[1] with h5py.File(self.archive.m_context.raw_file(file_name, 'rb')) as h5: if dataset_path not in h5: self.logger.warning(f'Dataset "{dataset_path}" not found.') diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index f98278b2..b1b0ffe4 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -318,7 +318,14 @@ def normalize(self, archive, logger): ), validate_path=False, ) - + hdf5_handler.add_attribute( + path=f'{prefix}/plot_intensity', + params=dict( + axes='two_theta', + signal='intensity', + NX_class='NXdata', + ), + ) for var_axis in ['omega', 'phi', 'chi']: if self.get(var_axis) is not None: hdf5_handler.add_dataset( @@ -338,16 +345,9 @@ def normalize(self, archive, logger): NX_class='NXdata', ), ) - return + break - hdf5_handler.add_attribute( - path=f'{prefix}/plot_intensity', - params=dict( - axes='two_theta', - signal='intensity', - NX_class='NXdata', - ), - ) + hdf5_handler.write_file() class XRDResultPlotIntensityScatteringVector(ArchiveSection): @@ -465,6 +465,7 @@ def normalize(self, archive, logger): NX_class='NXdata', ), ) + hdf5_handler.write_file() class XRDResult(MeasurementResult): From 64eae6cf29bc5b40f177626e3601b6ea03de6651 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 18 Dec 2024 09:54:49 +0100 Subject: [PATCH 90/93] Review: remove lazy arg --- src/nomad_measurements/utils.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 766eaa18..87cac38c 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -222,11 +222,10 @@ def add_dataset( path: str, params: dict, validate_path: bool = True, - lazy: bool = True, ): """ - Add a dataset to the HDF5 file. The dataset is written lazily (default) when - `write_file` method is called. The `path` is validated against the + Add a dataset to the HDF5 file. The dataset is written lazily to the file + when `write_file` method is called. The `path` is validated against the `valid_dataset_paths` if provided before adding the data. `params` should be a dictionary containing `data`. Optionally, @@ -241,7 +240,6 @@ def add_dataset( path (str): The dataset path to be used in the HDF5 file. params (dict): The dataset parameters. validate_path (bool): If True, the dataset path is validated. - lazy (Optional[bool]): If True, the file is not written immediately. """ if not params: self.logger.warning('Dataset `params` must be provided.') @@ -267,32 +265,24 @@ def add_dataset( self._hdf5_datasets[path] = dataset - if not lazy: - self.write_file() - def add_attribute( self, path: str, params: dict, - lazy: bool = True, ): """ Add an attribute to the dataset or group at the given path. The attribute is - written lazily (default) when `write_file` method is called. + written lazily to the file when `write_file` method is called. Args: path (str): The dataset or group path in the HDF5 file. params (dict): The attributes to be added. - lazy (bool): If True, the file is not written immediately. """ if not params: self.logger.warning('Attribute `params` must be provided.') return self._hdf5_attributes[path] = params - if not lazy: - self.write_file() - def read_dataset(self, path: str): """ Returns the dataset at the given path. If the quantity has `units` as an From e3164ffd7efa7060ff5e51dda775284a7af9ec05 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Wed, 18 Dec 2024 12:17:04 +0100 Subject: [PATCH 91/93] Move DatasetModel outside Handler class --- src/nomad_measurements/utils.py | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index 87cac38c..ae08019c 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -164,27 +164,28 @@ def get_bounding_range_2d(ax1, ax2): return ax1_range, ax2_range +class DatasetModel(BaseModel): + """ + Pydantic model for the dataset to be stored in the HDF5 file. + """ + + data: Any = Field(description='The data to be stored in the HDF5 file.') + archive_path: Optional[str] = Field( + None, description='The path of the quantity in the NOMAD archive.' + ) + internal_reference: Optional[bool] = Field( + False, + description='If True, an internal reference is set to an existing HDF5 ' + 'dataset.', + ) + + class HDF5Handler: """ Class for handling the creation of auxiliary files to store big data arrays outside the main archive file (e.g. HDF5, NeXus). """ - class DatasetModel(BaseModel): - """ - Pydantic model for the dataset to be stored in the HDF5 file. - """ - - data: Any = Field(description='The data to be stored in the HDF5 file.') - archive_path: Optional[str] = Field( - None, description='The path of the quantity in the NOMAD archive.' - ) - internal_reference: Optional[bool] = Field( - False, - description='If True, an internal reference is set to an existing HDF5 ' - 'dataset.', - ) - def __init__( self, filename: str, @@ -245,7 +246,7 @@ def add_dataset( self.logger.warning('Dataset `params` must be provided.') return - dataset = HDF5Handler.DatasetModel( + dataset = DatasetModel( **params, ) if validate_path and self.valid_dataset_paths: From ac39a30e4afdf94984f94b5f33c8f14c56407aec Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 19 Dec 2024 15:38:00 +0100 Subject: [PATCH 92/93] Remove None from get, as it is already a default --- src/nomad_measurements/utils.py | 2 +- src/nomad_measurements/xrd/schema.py | 32 ++++++++++++++-------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index ae08019c..ab646105 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -302,7 +302,7 @@ def read_dataset(self, path: str): if dataset_path in self._hdf5_datasets: value = self._hdf5_datasets[dataset_path].data if dataset_path in self._hdf5_attributes: - units = self._hdf5_attributes[dataset_path].get('units', None) + units = self._hdf5_attributes[dataset_path].get('units') if units: value *= ureg(units) return value diff --git a/src/nomad_measurements/xrd/schema.py b/src/nomad_measurements/xrd/schema.py index b1b0ffe4..37ccc65e 100644 --- a/src/nomad_measurements/xrd/schema.py +++ b/src/nomad_measurements/xrd/schema.py @@ -1170,7 +1170,7 @@ def write_xrd_data( metadata_dict: dict = xrd_dict.get('metadata', {}) source_dict: dict = metadata_dict.get('source', {}) - scan_type = metadata_dict.get('scan_type', None) + scan_type = metadata_dict.get('scan_type') if scan_type not in ['line', 'rsm']: logger.error(f'Scan type `{scan_type}` is not supported.') return @@ -1184,46 +1184,46 @@ def write_xrd_data( result = XRDResultRSM() if result is not None: - result.scan_axis = metadata_dict.get('scan_axis', None) + result.scan_axis = metadata_dict.get('scan_axis') self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/intensity', params=dict( - data=xrd_dict.get('intensity', None), + data=xrd_dict.get('intensity'), archive_path='data.results[0].intensity', ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/two_theta', params=dict( - data=xrd_dict.get('2Theta', None), + data=xrd_dict.get('2Theta'), archive_path='data.results[0].two_theta', ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/omega', params=dict( - data=xrd_dict.get('Omega', None), + data=xrd_dict.get('Omega'), archive_path='data.results[0].omega', ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/chi', params=dict( - data=xrd_dict.get('Chi', None), + data=xrd_dict.get('Chi'), archive_path='data.results[0].chi', ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_result/phi', params=dict( - data=xrd_dict.get('Phi', None), + data=xrd_dict.get('Phi'), archive_path='data.results[0].phi', ), ) self.hdf5_handler.add_dataset( path='/ENTRY[entry]/experiment_config/count_time', params=dict( - data=xrd_dict.get('countTime', None), + data=xrd_dict.get('countTime'), archive_path='data.results[0].integration_time', ), ) @@ -1231,20 +1231,20 @@ def write_xrd_data( results.append(result) source = XRayTubeSource( - xray_tube_material=source_dict.get('anode_material', None), - kalpha_one=source_dict.get('kAlpha1', None), - kalpha_two=source_dict.get('kAlpha2', None), - ratio_kalphatwo_kalphaone=source_dict.get('ratioKAlpha2KAlpha1', None), - kbeta=source_dict.get('kBeta', None), - xray_tube_voltage=source_dict.get('voltage', None), - xray_tube_current=source_dict.get('current', None), + xray_tube_material=source_dict.get('anode_material'), + kalpha_one=source_dict.get('kAlpha1'), + kalpha_two=source_dict.get('kAlpha2'), + ratio_kalphatwo_kalphaone=source_dict.get('ratioKAlpha2KAlpha1'), + kbeta=source_dict.get('kBeta'), + xray_tube_voltage=source_dict.get('voltage'), + xray_tube_current=source_dict.get('current'), ) source.normalize(archive, logger) xrd_settings = XRDSettings(source=source) xrd_settings.normalize(archive, logger) samples = [] - if metadata_dict.get('sample_id', None) is not None: + if metadata_dict.get('sample_id') is not None: sample = CompositeSystemReference( lab_id=metadata_dict['sample_id'], ) From 3fa62639539df9e03e87bac9cb8ba3a5e95d8027 Mon Sep 17 00:00:00 2001 From: Sarthak Kapoor Date: Thu, 19 Dec 2024 15:51:38 +0100 Subject: [PATCH 93/93] Merge if conditions --- src/nomad_measurements/utils.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/nomad_measurements/utils.py b/src/nomad_measurements/utils.py index ab646105..17382fbb 100644 --- a/src/nomad_measurements/utils.py +++ b/src/nomad_measurements/utils.py @@ -249,10 +249,13 @@ def add_dataset( dataset = DatasetModel( **params, ) - if validate_path and self.valid_dataset_paths: - if path not in self.valid_dataset_paths: - self.logger.warning(f'Invalid dataset path "{path}".') - return + if ( + validate_path + and self.valid_dataset_paths + and path not in self.valid_dataset_paths + ): + self.logger.warning(f'Invalid dataset path "{path}".') + return # handle the pint.Quantity and add data if isinstance(dataset.data, pint.Quantity):