From 66a2e98f5abb74feac2eaff80001e5bb55df138c Mon Sep 17 00:00:00 2001 From: Kai Norman Clasen <46302524+kai-tub@users.noreply.github.com> Date: Mon, 8 Jul 2024 12:29:19 +0200 Subject: [PATCH] Minor update (#3) * feat: Add UC Merced support * feat: Add EuroSAT-MS support * internal: move to devenv * docs: add citation information --- .envrc | 2 +- .github/workflows/nix.yml | 4 +- .gitignore | 1 + README.md | 197 ++++++- flake.lock | 433 ++++++++++++++-- flake.nix | 120 ++--- integration_tests/rico_hdl | 1 + integration_tests/test_python_integration.py | 151 +++++- .../EuroSAT_MS/AnnualCrop/AnnualCrop_1.tif | Bin 0 -> 107244 bytes .../tiffs/EuroSAT_MS/Pasture/Pasture_300.tif | Bin 0 -> 107244 bytes .../tiffs/EuroSAT_MS/SeaLake/SeaLake_3000.tif | Bin 0 -> 107244 bytes .../EuroSAT_RGB/AnnualCrop/AnnualCrop_1.jpg | Bin 0 -> 2737 bytes .../tiffs/EuroSAT_RGB/Pasture/Pasture_300.jpg | Bin 0 -> 3269 bytes .../EuroSAT_RGB/SeaLake/SeaLake_3000.jpg | Bin 0 -> 1458 bytes poetry.lock | 482 ++++++++++++++++-- pyproject.toml | 1 + rico_hdl/__init__.py | 1 + rico_hdl/rico_hdl.py | 176 ++++++- 18 files changed, 1372 insertions(+), 197 deletions(-) create mode 120000 integration_tests/rico_hdl create mode 100644 integration_tests/tiffs/EuroSAT_MS/AnnualCrop/AnnualCrop_1.tif create mode 100644 integration_tests/tiffs/EuroSAT_MS/Pasture/Pasture_300.tif create mode 100644 integration_tests/tiffs/EuroSAT_MS/SeaLake/SeaLake_3000.tif create mode 100644 integration_tests/tiffs/EuroSAT_RGB/AnnualCrop/AnnualCrop_1.jpg create mode 100644 integration_tests/tiffs/EuroSAT_RGB/Pasture/Pasture_300.jpg create mode 100644 integration_tests/tiffs/EuroSAT_RGB/SeaLake/SeaLake_3000.jpg diff --git a/.envrc b/.envrc index bc49353..fda1fee 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use flake .# +use flake .# --impure diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index d6d9d01..dea69d0 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -19,7 +19,9 @@ jobs: - name: Run `nix fmt` run: nix fmt -- --check * - name: Run `flake checks` - run: nix flake check -L + # impure is required as the devshell is tested as well + # and the devenv devshell requires the `impure` flag + run: nix flake check --impure -L - name: Create AppImage run: nix build .#rico-hdl-AppImage - name: Test appimage diff --git a/.gitignore b/.gitignore index cc87225..2b4ec16 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /target .direnv .ipynb_checkpoints +.devenv /result .virtual_documents/integration_tests *.AppImage diff --git a/README.md b/README.md index 309bada..88ce5d5 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,8 @@ Currently, `rico-hdl` supports: - [BigEarthNet-S2 v2.0][ben] - [BigEarthNet-MM v2.0][ben] - [HySpecNet-11k][hyspecnet] +- [UC Merced Land Use][ucmerced] +- [EuroSAT][euro] Additional datasets will be added in the near future. @@ -164,7 +166,8 @@ rico-hdl hyspecnet-11k --dataset-dir --dataset-dir Encoded- In [HySpecNet-11k][hyspecnet], each patch contains 224 bands. The encoder will convert each patch into a [safetensors][s] -dictionary, where the band index prefixed with `B` is the key (for example, `B1`, `B201`). +dictionary, where the band index prefixed with `B` is the key (for example, `B1`, `B201`) +of the safetensor dictionary.
Example Input @@ -265,6 +268,181 @@ tensor = np.stack([safetensor_dict[f"B{k}"] for k in hyspecnet_bands if k not in assert tensor.shape == (202, 128, 128) ``` +### [UC Merced Land Use][ucmerced] Example + +First, [download the rico-hdl](#Download) binary and install +the Python [lmdb][pyl] and [saftensors][pys] packages. +Then, to convert the patches from the [UC Merced Land Use][ucmerced] +dataset into the optimized format, call the application with: + +```bash +rico-hdl uc-merced --dataset-dir --dataset-dir Encoded-UC-Merced +``` + +In [UC Merced][ucmerced], each patch contains 3 bands (RGB). +The encoder will convert each patch into a [safetensors][s] +dictionary, where the band's color interpretation is the key (one of `Red`, `Green`, `Blue`) +of the safetensor dictionary. + +
+ Example Input + +``` +integration_tests/tiffs/UCMerced_LandUse +└── Images + ├── airplane + │ ├── airplane00.tif + │ └── airplane42.tif + └── forest + ├── forest10.tif + └── forest99.tif +``` +
+ +
+ LMDB Result + +``` +'airplane00': + { + 'Red': <256x256 uint8 safetensors image data> + 'Green': <256x256 uint8 safetensors image data> + 'Blue': <256x256 uint8 safetensors image data> + }, +'airplane42': + { + 'Red': <256x256 uint8 safetensors image data> + 'Green': <256x256 uint8 safetensors image data> + 'Blue': <256x256 uint8 safetensors image data> + }, +'forest10': + { + 'Red': <256x256 uint8 safetensors image data> + 'Green': <256x256 uint8 safetensors image data> + 'Blue': <256x256 uint8 safetensors image data> + }, +'forest99': + { + 'Red': <256x256 uint8 safetensors image data> + 'Green': <256x256 uint8 safetensors image data> + 'Blue': <256x256 uint8 safetensors image data> + } +``` + +
+ +```python +import lmdb +import numpy as np +# import desired deep-learning library: +# numpy, torch, tensorflow, paddle, flax, mlx +from safetensors.numpy import load +from pathlib import Path + +encoded_path = "Encoded-UC-Merced" + +# Make sure to only open the environment once +# and not everytime an item is accessed. +env = lmdb.open(str(encoded_path), readonly=True) + +with env.begin() as txn: + # string encoding is required to map the string to an LMDB key + safetensor_dict = load(txn.get("airplane00".encode())) + +tensor = np.stack([safetensor_dict[key] for key in ["Red", "Green", "Blue"]]) +assert tensor.shape == (3, 256, 256) +``` + +### [EuroSAT][euro] Example + +First, [download the rico-hdl](#Download) binary and install +the Python [lmdb][pyl] and [saftensors][pys] packages. +Then, to convert the patches from the [EuroSAT][euro] multi-spectral +dataset into the optimized format, call the application with: + +```bash +rico-hdl eurosat-multi-spectral --dataset-dir --dataset-dir Encoded-EuroSAT-MS +``` + +In [EuroSAT][euro], each patch contains 13 bands from a Sentinel-2 L1C tile. +The encoder will convert each patch into a [safetensors][s] +where the dictionary's key is the band name (`B01`, `B02`,..., `B10`, `B11`, `B12`, `B8A`) +of the safetensor dictionary. + +
+ Example Input + +``` +integration_tests/tiffs/EuroSAT_MS +├── AnnualCrop +│ └── AnnualCrop_1.tif +├── Pasture +│ └── Pasture_300.tif +└── SeaLake + └── SeaLake_3000.tif +``` +
+ +
+ LMDB Result + +``` +'AnnualCrop_1': + { + 'B01': <64x64 uint16 safetensors image data>, + 'B02': <64x64 uint16 safetensors image data>, + 'B03': <64x64 uint16 safetensors image data>, + 'B04': <64x64 uint16 safetensors image data>, + 'B05': <64x64 uint16 safetensors image data>, + 'B06': <64x64 uint16 safetensors image data>, + 'B07': <64x64 uint16 safetensors image data>, + 'B08': <64x64 uint16 safetensors image data>, + 'B09': <64x64 uint16 safetensors image data>, + 'B10': <64x64 uint16 safetensors image data>, + 'B11': <64x64 uint16 safetensors image data>, + 'B12': <64x64 uint16 safetensors image data>, + 'B08A': <64x64 uint16 safetensors image data>, + }, +``` + +
+ +```python +import lmdb +import numpy as np +# import desired deep-learning library: +# numpy, torch, tensorflow, paddle, flax, mlx +from safetensors.numpy import load +from pathlib import Path + +encoded_path = "Encoded-EuroSAT-MS" + +# Make sure to only open the environment once +# and not everytime an item is accessed. +env = lmdb.open(str(encoded_path), readonly=True) + +with env.begin() as txn: + # string encoding is required to map the string to an LMDB key + safetensor_dict = load(txn.get("AnnualCrop_1".encode())) + +tensor = np.stack([safetensor_dict[key] for key in [ + "B01", + "B02", + "B03", + "B04", + "B05", + "B06", + "B07", + "B08", + "B09", + "B10", + "B11", + "B12", + "B08A" +]]) +assert tensor.shape == (13, 64, 64) +``` + ## Design @@ -304,6 +482,21 @@ These characteristics make array-structured data formats less suitable for deep-
+## Citation + +If you use this work, please cite: + +```bibtex +@article{clasen2024refinedbigearthnet, + title={reBEN: Refined BigEarthNet Dataset for Remote Sensing Image Analysis}, + author={Clasen, Kai Norman and Hackel, Leonard and Burgert, Tom and Sumbul, Gencer and Demir, Beg{\"u}m and Markl, Volker}, + year={2024}, + eprint={2407.03653}, + archivePrefix={arXiv}, + primaryClass={cs.CV}, + url={https://arxiv.org/abs/2407.03653}, +} +``` [ben]: https://bigearth.net [LMDB]: https://www.symas.com/lmdb @@ -311,3 +504,5 @@ These characteristics make array-structured data formats less suitable for deep- [hyspecnet]: https://hyspecnet.rsim.berlin/ [pyl]: https://lmdb.readthedocs.io/en/release/ [pys]: https://github.com/huggingface/safetensors +[ucmerced]: http://weegee.vision.ucmerced.edu/datasets/landuse.html +[euro]: https://zenodo.org/records/7711810 diff --git a/flake.lock b/flake.lock index dd4b079..42ddede 100644 --- a/flake.lock +++ b/flake.lock @@ -16,26 +16,124 @@ "type": "github" } }, - "devshell": { + "cachix": { "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "devenv": "devenv_2", + "flake-compat": [ + "devenv", + "flake-compat" + ], + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "pre-commit-hooks": [ + "devenv", + "pre-commit-hooks" + ] }, "locked": { - "lastModified": 1717408969, - "narHash": "sha256-Q0OEFqe35fZbbRPPRdrjTUUChKVhhWXz3T9ZSKmaoVY=", - "owner": "numtide", - "repo": "devshell", - "rev": "1ebbe68d57457c8cae98145410b164b5477761f4", + "lastModified": 1712055811, + "narHash": "sha256-7FcfMm5A/f02yyzuavJe06zLa9hcMHsagE28ADcmQvk=", + "owner": "cachix", + "repo": "cachix", + "rev": "02e38da89851ec7fec3356a5c04bc8349cae0e30", "type": "github" }, "original": { - "owner": "numtide", - "repo": "devshell", + "owner": "cachix", + "repo": "cachix", + "type": "github" + } + }, + "devenv": { + "inputs": { + "cachix": "cachix", + "flake-compat": "flake-compat_2", + "nix": "nix_2", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1720180409, + "narHash": "sha256-Y+2uP9hy06DFwIBhveHnKaDblZS4lO+Z/GacnwKPpps=", + "owner": "cachix", + "repo": "devenv", + "rev": "7b3ed618571f0d14655b05f7b1c6ef600904383a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "devenv_2": { + "inputs": { + "flake-compat": [ + "devenv", + "cachix", + "flake-compat" + ], + "nix": "nix", + "nixpkgs": "nixpkgs", + "poetry2nix": "poetry2nix", + "pre-commit-hooks": [ + "devenv", + "cachix", + "pre-commit-hooks" + ] + }, + "locked": { + "lastModified": 1708704632, + "narHash": "sha256-w+dOIW60FKMaHI1q5714CSibk99JfYxm0CzTinYWr+Q=", + "owner": "cachix", + "repo": "devenv", + "rev": "2ee4450b0f4b95a1b90f2eb5ffea98b90e48c196", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "python-rewrite", + "repo": "devenv", "type": "github" } }, "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { "flake": false, "locked": { "lastModified": 1650374568, @@ -51,7 +149,7 @@ "type": "github" } }, - "flake-compat_2": { + "flake-compat_4": { "flake": false, "locked": { "lastModified": 1696426674, @@ -72,11 +170,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1701680307, - "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", "owner": "numtide", "repo": "flake-utils", - "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", "type": "github" }, "original": { @@ -86,6 +184,24 @@ } }, "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { "locked": { "lastModified": 1656928814, "narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=", @@ -100,9 +216,9 @@ "type": "github" } }, - "flake-utils_3": { + "flake-utils_4": { "inputs": { - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1710146030, @@ -121,6 +237,7 @@ "gitignore": { "inputs": { "nixpkgs": [ + "devenv", "pre-commit-hooks", "nixpkgs" ] @@ -139,11 +256,58 @@ "type": "github" } }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "nix": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": [ + "devenv", + "cachix", + "devenv", + "nixpkgs" + ], + "nixpkgs-regression": "nixpkgs-regression" + }, + "locked": { + "lastModified": 1712911606, + "narHash": "sha256-BGvBhepCufsjcUkXnEEXhEVjwdJAwPglCC2+bInc794=", + "owner": "domenkozar", + "repo": "nix", + "rev": "b24a9318ea3f3600c1e24b4a00691ee912d4de12", + "type": "github" + }, + "original": { + "owner": "domenkozar", + "ref": "devenv-2.21", + "repo": "nix", + "type": "github" + } + }, "nix-appimage": { "inputs": { "appimage-runtime": "appimage-runtime", - "flake-compat": "flake-compat", - "flake-utils": "flake-utils_2", + "flake-compat": "flake-compat_3", + "flake-utils": "flake-utils_3", "nixpkgs": "nixpkgs_2", "squashfuse": "squashfuse" }, @@ -177,6 +341,30 @@ } }, "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "devenv", + "cachix", + "devenv", + "poetry2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1688870561, + "narHash": "sha256-4UYkifnPEw1nAzqqPOTL2MvWtm3sNGw1UTYTalkTcGY=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "165b1650b753316aa7f1787f3005a8d2da0f5301", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nix-github-actions_2": { "inputs": { "nixpkgs": [ "poetry2nix", @@ -197,13 +385,40 @@ "type": "github" } }, + "nix_2": { + "inputs": { + "flake-compat": [ + "devenv", + "flake-compat" + ], + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "nixpkgs-regression": "nixpkgs-regression_2" + }, + "locked": { + "lastModified": 1712911606, + "narHash": "sha256-BGvBhepCufsjcUkXnEEXhEVjwdJAwPglCC2+bInc794=", + "owner": "domenkozar", + "repo": "nix", + "rev": "b24a9318ea3f3600c1e24b4a00691ee912d4de12", + "type": "github" + }, + "original": { + "owner": "domenkozar", + "ref": "devenv-2.21", + "repo": "nix", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1704161960, - "narHash": "sha256-QGua89Pmq+FBAro8NriTuoO/wNaUtugt29/qqA8zeeM=", + "lastModified": 1692808169, + "narHash": "sha256-x9Opq06rIiwdwGeK2Ykj69dNc2IvUH1fY55Wm7atwrE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "63143ac2c9186be6d9da6035fa22620018c85932", + "rev": "9201b5ff357e781bf014d0330d18555695df7ba8", "type": "github" }, "original": { @@ -213,13 +428,61 @@ "type": "github" } }, + "nixpkgs-regression": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + } + }, + "nixpkgs-regression_2": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + } + }, "nixpkgs-stable": { "locked": { - "lastModified": 1718447546, - "narHash": "sha256-JHuXsrC9pr4kA4n7LuuPfWFJUVlDBVJ1TXDVpHEuUgM=", + "lastModified": 1710695816, + "narHash": "sha256-3Eh7fhEID17pv9ZxrPwCLfqXnYP006RKzSs0JptsN84=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "842253bf992c3a7157b67600c2857193f126563a", + "rev": "614b4613980a522ba49f0d194531beddbb7220d3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1718811006, + "narHash": "sha256-0Y8IrGhRmBmT7HHXlxxepg2t8j1X90++qRN3lukGaIk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "03d771e513ce90147b65fe922d87d3a0356fc125", "type": "github" }, "original": { @@ -246,11 +509,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1718870667, - "narHash": "sha256-jab3Kpc8O1z3qxwVsCMHL4+18n5Wy/HHKyu1fcsF7gs=", + "lastModified": 1720087678, + "narHash": "sha256-uOhYJU3ldDKXYV+mFaXcPtyjq/UIMh/6SCuoVNU9rxM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9b10b8f00cb5494795e5f51b39210fed4d2b0748", + "rev": "1afc5440469f94e7ed26e8648820971b102afdc3", "type": "github" }, "original": { @@ -262,11 +525,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1719146883, - "narHash": "sha256-DAyIfQgyqalov0DcEKRvDOUin7axELasaP6NCPt7UQA=", + "lastModified": 1719763542, + "narHash": "sha256-mXkOj9sJ0f69Nkc2dGGOWtof9d1YNY8Le/Hia3RN+8Q=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "084f8df2f3ff80cdec6f515931036f63c5d2f36c", + "rev": "e6cdd8a11b26b4d60593733106042141756b54a3", "type": "github" }, "original": { @@ -278,11 +541,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1718606988, - "narHash": "sha256-pmjP5ePc1jz+Okona3HxD7AYT0wbrCwm9bXAlj08nDM=", + "lastModified": 1719082008, + "narHash": "sha256-jHJSUH619zBQ6WdC21fFAlDxHErKVDJ5fpN0Hgx4sjs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "38d3352a65ac9d621b0cd3074d3bef27199ff78f", + "rev": "9693852a2070b398ee123a329e68f0dab5526681", "type": "github" }, "original": { @@ -294,18 +557,43 @@ }, "poetry2nix": { "inputs": { - "flake-utils": "flake-utils_3", + "flake-utils": "flake-utils", "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "devenv", + "cachix", + "devenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1692876271, + "narHash": "sha256-IXfZEkI0Mal5y1jr6IRWMqK8GW2/f28xJenZIPQqkY0=", + "owner": "nix-community", + "repo": "poetry2nix", + "rev": "d5006be9c2c2417dafb2e2e5034d83fabd207ee3", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "poetry2nix", + "type": "github" + } + }, + "poetry2nix_2": { + "inputs": { + "flake-utils": "flake-utils_4", + "nix-github-actions": "nix-github-actions_2", "nixpkgs": "nixpkgs_4", - "systems": "systems_3", + "systems": "systems_4", "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1719549552, - "narHash": "sha256-efvBV+45uQA6r7aov48H6MhvKp1QUIyIX5gh9oueUzs=", + "lastModified": 1719850884, + "narHash": "sha256-UU/lVTHFx0GpEkihoLJrMuM9DcuhZmNe3db45vshSyI=", "owner": "nix-community", "repo": "poetry2nix", - "rev": "4fd045cdb85f2a0173021a4717dc01d92d7ab2b2", + "rev": "42262f382c68afab1113ebd1911d0c93822d756e", "type": "github" }, "original": { @@ -316,17 +604,45 @@ }, "pre-commit-hooks": { "inputs": { - "flake-compat": "flake-compat_2", + "flake-compat": [ + "devenv", + "flake-compat" + ], + "flake-utils": "flake-utils_2", "gitignore": "gitignore", - "nixpkgs": "nixpkgs_5", + "nixpkgs": [ + "devenv", + "nixpkgs" + ], "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1718879355, - "narHash": "sha256-RTyqP4fBX2MdhNuMP+fnR3lIwbdtXhyj7w7fwtvgspc=", + "lastModified": 1713775815, + "narHash": "sha256-Wu9cdYTnGQQwtT20QQMg7jzkANKQjwBD9iccfGKkfls=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "2ac4dcbf55ed43f3be0bae15e181f08a57af24a4", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks_2": { + "inputs": { + "flake-compat": "flake-compat_4", + "gitignore": "gitignore_2", + "nixpkgs": "nixpkgs_5", + "nixpkgs-stable": "nixpkgs-stable_2" + }, + "locked": { + "lastModified": 1719259945, + "narHash": "sha256-F1h+XIsGKT9TkGO3omxDLEb/9jOOsI6NnzsXFsZhry4=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "8cd35b9496d21a6c55164d8547d9d5280162b07a", + "rev": "0ff4381bbb8f7a52ca4a851660fc7a437a4c6e07", "type": "github" }, "original": { @@ -337,13 +653,13 @@ }, "root": { "inputs": { - "devshell": "devshell", + "devenv": "devenv", "nix-appimage": "nix-appimage", "nix-filter": "nix-filter", "nixpkgs": "nixpkgs_3", - "poetry2nix": "poetry2nix", - "pre-commit-hooks": "pre-commit-hooks", - "systems": "systems_4" + "poetry2nix": "poetry2nix_2", + "pre-commit-hooks": "pre-commit-hooks_2", + "systems": "systems_5" } }, "squashfuse": { @@ -393,6 +709,21 @@ } }, "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_4": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -406,7 +737,7 @@ "type": "indirect" } }, - "systems_4": { + "systems_5": { "locked": { "lastModified": 1680978846, "narHash": "sha256-Gtqg8b/v49BFDpDetjclCYXm8mAnTrUzR0JnE2nv5aw=", @@ -429,11 +760,11 @@ ] }, "locked": { - "lastModified": 1718522839, - "narHash": "sha256-ULzoKzEaBOiLRtjeY3YoGFJMwWSKRYOic6VNw2UyTls=", + "lastModified": 1719749022, + "narHash": "sha256-ddPKHcqaKCIFSFc/cvxS14goUhCOAwsM1PbMr0ZtHMg=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "68eb1dc333ce82d0ab0c0357363ea17c31ea1f81", + "rev": "8df5ff62195d4e67e2264df0b7f5e8c9995fd0bd", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 9d4eb2f..0a02491 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,11 @@ nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; systems.url = "github:nix-systems/x86_64-linux"; nix-filter.url = "github:numtide/nix-filter"; - devshell.url = "github:numtide/devshell"; + devenv = { + url = "github:cachix/devenv"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; nix-appimage = { url = "github:ralismark/nix-appimage"; @@ -14,20 +18,16 @@ self, nixpkgs, systems, - devshell, ... } @ inputs: let eachSystem = nixpkgs.lib.genAttrs (import systems); # pkgsFor = eachSystem (system: ((nixpkgs.legacyPackages.${system}.extend devshell.overlays.default).extend self.overlays.default)); - pkgsFor = eachSystem (system: (nixpkgs.legacyPackages.${system}.extend devshell.overlays.default)); + pkgsFor = eachSystem (system: (nixpkgs.legacyPackages.${system})); pythonTestDeps = ps: with ps; [numpy lmdb rasterio safetensors more-itertools pytest]; in { formatter = eachSystem (system: pkgsFor.${system}.alejandra); checks = eachSystem ( - system: let - pkgs = pkgsFor.${system}; - lib = pkgs.lib; - in + system: { pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run { src = ./.; @@ -36,12 +36,6 @@ trim-trailing-whitespace.enable = true; }; }; - rico-hdl-test-runner-check = - pkgs.runCommandNoCC "rs-encoder-test-runner-check" { - nativeBuildInputs = [self.packages.${system}.rico-hdl-test-runner]; - } '' - ${lib.getExe self.packages.${system}.rico-hdl-test-runner} && touch $out - ''; } // self.packages.${system} ); @@ -65,6 +59,16 @@ --prefix PATH : ${pkgs.lib.makeBinPath [pkgs.fd]} ''; meta.mainProgram = "rico-hdl"; + checkPhase = '' + export PATH="$out/bin:$PATH" + export RICO_HDL_S1_PATH=${./integration_tests/tiffs/BigEarthNet/BigEarthNet-S1} + export RICO_HDL_S2_PATH=${./integration_tests/tiffs/BigEarthNet/BigEarthNet-S2} + export RICO_HDL_HYSPECNET_PATH=${./integration_tests/tiffs/HySpecNet-11k} + export RICO_HDL_LMDB_REF_PATH=${./integration_tests/BigEarthNet_LMDB} + export RICO_HDL_UC_MERCED_PATH=${./integration_tests/tiffs/UCMerced_LandUse} + export RICO_HDL_EUROSAT_MS_PATH=${./integration_tests/tiffs/EuroSAT_MS} + pytest + ''; # Python312 breaks LMDB... # python = pkgs.python312; # no idea how to write this: @@ -104,69 +108,45 @@ skopeo --insecure-policy copy "docker-archive:result" "$DOCKER_REPOSITORY" ''; }; - - rico-hdl-test-runner = pkgs.writeShellApplication { - name = "rico-hdl-test-runner"; - runtimeInputs = [ - rico-hdl - (pkgs.python3.withPackages - pythonTestDeps) - ]; - text = '' - export ENCODER_S1_PATH=${./integration_tests/tiffs/BigEarthNet/BigEarthNet-S1} - export ENCODER_S2_PATH=${./integration_tests/tiffs/BigEarthNet/BigEarthNet-S2} - export ENCODER_HYSPECNET_PATH=${./integration_tests/tiffs/HySpecNet-11k} - export ENCODER_LMDB_REF_PATH=${./integration_tests/BigEarthNet_LMDB} - echo "Running Python integration tests." - pytest ${./integration_tests/test_python_integration.py} && echo "Success!" - ''; - }; }); devShells = eachSystem (system: let pkgs = pkgsFor.${system}; + lib = pkgs.lib; inherit (inputs.poetry2nix.lib.mkPoetry2Nix {inherit pkgs;}) mkPoetryEnv; in { - default = pkgs.devshell.mkShell { - env = [ - # { - # name = "PYTHONPATH"; - # prefix = "${pkgs.python3Packages.ipykernel}/${pkgs.python3.sitePackages}"; - # } - { - name = "ENCODER_HYSPECNET_PATH"; - value = "./integration_tests/tiffs/HySpecNet-11k/"; - } - { - name = "ENCODER_S1_PATH"; - value = "./integration_tests/tiffs/BigEarthNet/BigEarthNet-S1"; - } - { - name = "ENCODER_LMDB_REF_DATA_PATH"; - value = "./integration_tests/BigEarthNet_LMDB"; - } - { - # seems to be some permission issues with walkdir - # if I use ${./tiffs/...} - # The permission all look good under the nix store - # and copying from the directory to the local directory - # also works - name = "ENCODER_S2_PATH"; - value = "./integration_tests/tiffs/BigEarthNet/BigEarthNet-S2"; - } - { - name = "JUPYTER_PATH"; - # should be the python from poetry - value = "${pkgs.python3Packages.jupyterlab}/share/jupyter"; - } - ]; - packages = [ - (mkPoetryEnv - { - projectDir = ./.; - preferWheels = true; - }) - pkgs.poetry + default = inputs.devenv.lib.mkShell { + inherit pkgs inputs; + modules = [ + ({ + pkgs, + config, + ... + }: { + enterShell = self.checks.${system}.pre-commit-check.shellHook; + env.RICO_HDL_HYSPECNET_PATH = "${config.env.DEVENV_ROOT}/integration_tests/tiffs/HySpecNet-11k/"; + env.RICO_HDL_UC_MERCED_PATH = "${config.env.DEVENV_ROOT}/integration_tests/tiffs/UCMerced_LandUse/"; + env.RICO_HDL_EUROSAT_MS_PATH = "${config.env.DEVENV_ROOT}/integration_tests/tiffs/EuroSAT_MS"; + env.RICO_HDL_S1_PATH = "${config.env.DEVENV_ROOT}/integration_tests/tiffs/BigEarthNet/BigEarthNet-S1"; + env.RICO_HDL_LMDB_REF_DATA_PATH = "${config.env.DEVENV_ROOT}/integration_tests/BigEarthNet_LMDB"; + env.RICO_HDL_S2_PATH = "${config.env.DEVENV_ROOT}/integration_tests/tiffs/BigEarthNet/BigEarthNet-S2"; + env.RICO_HDL_LMDB_REF_PATH = "${config.env.DEVENV_ROOT}/integration_tests/BigEarthNet_LMDB"; + env.JUPYTER_PATH = "${pkgs.python3Packages.jupyterlab}/share/jupyter"; + packages = + [ + (mkPoetryEnv + { + projectDir = ./.; + preferWheels = true; + editablePackageSources = { + rico-hdl = ./src; + }; + }) + pkgs.poetry + pkgs.quarto + ] + ++ self.checks.${system}.pre-commit-check.enabledPackages; + }) ]; }; }); diff --git a/integration_tests/rico_hdl b/integration_tests/rico_hdl new file mode 120000 index 0000000..873aa6c --- /dev/null +++ b/integration_tests/rico_hdl @@ -0,0 +1 @@ +../rico_hdl/ \ No newline at end of file diff --git a/integration_tests/test_python_integration.py b/integration_tests/test_python_integration.py index d7d33be..b22346b 100644 --- a/integration_tests/test_python_integration.py +++ b/integration_tests/test_python_integration.py @@ -1,3 +1,9 @@ +# I am kinda duplicating code. +# The main goal of these tests is to ensure that the data is not empty +# which may happen over time. +# And that the data can be loaded from the LMDB afterwards without any issues. +# This should ensure that the safetensor format also remains functional and reproducible +# But I do not think that I have to check if all encoded arrays remain identical for all datasets. import lmdb import rasterio import numpy as np @@ -7,6 +13,7 @@ import pytest import subprocess import hashlib +from rico_hdl.rico_hdl import EUROSAT_MS_BANDS def read_single_band_raster(path): @@ -16,7 +23,7 @@ def read_single_band_raster(path): @pytest.fixture(scope="session") def s1_root() -> Path: - str_p = os.environ.get("ENCODER_S1_PATH") or "./tiffs/BigEarthNet/BigEarthNet-S1/" + str_p = os.environ.get("RICO_HDL_S1_PATH") or "./tiffs/BigEarthNet/BigEarthNet-S1/" p = Path(str_p) assert p.exists() assert p.is_dir() @@ -25,7 +32,7 @@ def s1_root() -> Path: @pytest.fixture(scope="session") def bigearthnet_lmdb_ref_path() -> Path: - str_p = os.environ.get("ENCODER_LMDB_REF_PATH") or "./BigEarthNet_LMDB/" + str_p = os.environ.get("RICO_HDL_LMDB_REF_PATH") or "./BigEarthNet_LMDB/" p = Path(str_p) assert p.exists() assert p.is_dir() @@ -34,7 +41,7 @@ def bigearthnet_lmdb_ref_path() -> Path: @pytest.fixture(scope="session") def s2_root() -> Path: - str_p = os.environ.get("ENCODER_S2_PATH") or "./tiffs/BigEarthNet/BigEarthNet-S2/" + str_p = os.environ.get("RICO_HDL_S2_PATH") or "./tiffs/BigEarthNet/BigEarthNet-S2/" p = Path(str_p) assert p.exists() assert p.is_dir() @@ -43,7 +50,25 @@ def s2_root() -> Path: @pytest.fixture(scope="session") def hyspecnet_root() -> Path: - str_p = os.environ.get("ENCODER_HYSPECNET_PATH") or "./tiffs/HySpecNet-11k/" + str_p = os.environ.get("RICO_HDL_HYSPECNET_PATH") or "./tiffs/HySpecNet-11k/" + p = Path(str_p) + assert p.exists() + assert p.is_dir() + return p + + +@pytest.fixture(scope="session") +def uc_merced_root() -> Path: + str_p = os.environ.get("RICO_HDL_UC_MERCED_PATH") or "./tiffs/UCMerced_LandUse/" + p = Path(str_p) + assert p.exists() + assert p.is_dir() + return p + + +@pytest.fixture(scope="session") +def eurosat_ms_root() -> Path: + str_p = os.environ.get("RICO_HDL_EUROSAT_MS_PATH") or "./tiffs/EUROSAT_MS/" p = Path(str_p) assert p.exists() assert p.is_dir() @@ -83,7 +108,37 @@ def encoded_hyspecnet_path(hyspecnet_root, tmpdir_factory) -> Path: return Path(tmp_path) -def test_python_bigearthnet_integration( +@pytest.fixture +def encoded_uc_merced_path(uc_merced_root, tmpdir_factory) -> Path: + tmp_path = tmpdir_factory.mktemp("uc_merced_lmdb") + subprocess.run( + [ + "rico-hdl", + "uc-merced", + f"--dataset-dir={uc_merced_root}", + f"--target-dir={tmp_path}", + ], + check=True, + ) + return Path(tmp_path) + + +@pytest.fixture +def encoded_eurosat_ms_path(eurosat_ms_root, tmpdir_factory) -> Path: + tmp_path = tmpdir_factory.mktemp("eurosat_ms_lmdb") + subprocess.run( + [ + "rico-hdl", + "eurosat-multi-spectral", + f"--dataset-dir={eurosat_ms_root}", + f"--target-dir={tmp_path}", + ], + check=True, + ) + return Path(tmp_path) + + +def test_bigearthnet_integration( s1_root, s2_root, encoded_bigearthnet_s1_s2_path, bigearthnet_lmdb_ref_path ): s1_data = {file: read_single_band_raster(file) for file in s1_root.glob("**/*.tif")} @@ -120,7 +175,7 @@ def test_python_bigearthnet_integration( ), "The newly generated LMDB file has a different hash compared to the reference one!" -def read_all_raster_bands(path): +def read_all_hyspecnet_bands(path): """ Given a path to a GeoTIFF return all bands as a dictionary, where the key is the unformatted band index (starting from 1) @@ -130,9 +185,9 @@ def read_all_raster_bands(path): return {f"B{i}": r.read(i) for i in range(1, r.count + 1)} -def test_python_hyspecnet_integration(hyspecnet_root, encoded_hyspecnet_path): +def test_hyspecnet_integration(hyspecnet_root, encoded_hyspecnet_path): source_file_data = { - file: read_all_raster_bands(file) + file: read_all_hyspecnet_bands(file) for file in hyspecnet_root.glob("**/*SPECTRAL_IMAGE.TIF") } assert len(source_file_data) > 0 @@ -160,3 +215,83 @@ def test_python_hyspecnet_integration(hyspecnet_root, encoded_hyspecnet_path): np.array_equal(source_data, decoded_dict[source_key]) for decoded_dict in decoded_dicts ), f"Couldn't find data in the LMDB database that matches the data from: {source_file}:{source_key}" + + +def read_all_uc_merced_bands(path): + """ + Given a path to a UC Merced TIFF file return all bands as a dictionary, + where the keys are the color value + """ + with rasterio.open(path) as r: + return {key: r.read(i) for i, key in enumerate(["Red", "Green", "Blue"], 1)} + + +@pytest.mark.filterwarnings("ignore:Dataset has no geotransform") +def test_uc_merced_integration(uc_merced_root, encoded_uc_merced_path): + source_file_data = { + file: read_all_uc_merced_bands(file) for file in uc_merced_root.glob("**/*.tif") + } + assert len(source_file_data) > 0 + + # code to create the directory + # ./result/bin/encoder --hyspecnet-11k hyspec_artifacts/ + env = lmdb.open(str(encoded_uc_merced_path), readonly=True) + + with env.begin(write=False) as txn: + cur = txn.cursor() + decoded_lmdb_data = {k.decode("utf-8"): load(v) for (k, v) in cur} + + # The encoded data is nested inside of another safetensor dictionary, + # where the inner keys are derived from color mapping + decoded_dicts = [d for d in decoded_lmdb_data.values()] + + # Simply check if the data remains identical, as this is the only _true_ thing I care about from the Python viewpoint + # Here I iterate over all file name and raster data as dictionaries pairs + # and then for each raster data dictionary iterate over all key-value pairs, where the key is the band name + # in the same style as the LMDB file and check if the LMDB file contained a matching array from + # a safetensors dictionary accessed via the shared band name as key. + for source_file, source_data_dict in source_file_data.items(): + for source_key, source_data in source_data_dict.items(): + assert any( + np.array_equal(source_data, decoded_dict[source_key]) + for decoded_dict in decoded_dicts + ), f"Couldn't find data in the LMDB database that matches the data from: {source_file}:{source_key}" + + +def read_all_eurosat_ms_bands(path): + """ + Given a path to a TIFF file return all bands as a dictionary, + where the keys are the EuroSAT MS band value + """ + with rasterio.open(path) as r: + return {key: r.read(i) for i, key in enumerate(EUROSAT_MS_BANDS, start=1)} + + +def test_eurosat_integration(eurosat_ms_root, encoded_eurosat_ms_path): + source_file_data = { + file: read_all_eurosat_ms_bands(file) + for file in eurosat_ms_root.glob("**/*.tif") + } + assert len(source_file_data) > 0 + + env = lmdb.open(str(encoded_eurosat_ms_path), readonly=True) + + with env.begin(write=False) as txn: + cur = txn.cursor() + decoded_lmdb_data = {k.decode("utf-8"): load(v) for (k, v) in cur} + + # The encoded data is nested inside of another safetensor dictionary, + # where the inner keys are derived from color mapping + decoded_dicts = [d for d in decoded_lmdb_data.values()] + + # Simply check if the data remains identical, as this is the only _true_ thing I care about from the Python viewpoint + # Here I iterate over all file name and raster data as dictionaries pairs + # and then for each raster data dictionary iterate over all key-value pairs, where the key is the band name + # in the same style as the LMDB file and check if the LMDB file contained a matching array from + # a safetensors dictionary accessed via the shared band name as key. + for source_file, source_data_dict in source_file_data.items(): + for source_key, source_data in source_data_dict.items(): + assert any( + np.array_equal(source_data, decoded_dict[source_key]) + for decoded_dict in decoded_dicts + ), f"Couldn't find data in the LMDB database that matches the data from: {source_file}:{source_key}" diff --git a/integration_tests/tiffs/EuroSAT_MS/AnnualCrop/AnnualCrop_1.tif b/integration_tests/tiffs/EuroSAT_MS/AnnualCrop/AnnualCrop_1.tif new file mode 100644 index 0000000000000000000000000000000000000000..7a1c6b04884297211424f72565cebd38ed597414 GIT binary patch literal 107244 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℞G&&+zuLJl2~Wy}iO-G+DPAZ&I7 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 literal 0 HcmV?d00001 diff --git a/integration_tests/tiffs/EuroSAT_MS/Pasture/Pasture_300.tif b/integration_tests/tiffs/EuroSAT_MS/Pasture/Pasture_300.tif new file mode 100644 index 0000000000000000000000000000000000000000..02e25862b90da5035aa4dd5237a3c45e8faada47 GIT binary patch literal 107244 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�h_#r~Lg@CefRkT>)w+1Ie=n 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%0A@oP`gL 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 qHE)Uhsh2cfqv8HHaNlYav@rnqqc literal 0 HcmV?d00001 diff --git a/integration_tests/tiffs/EuroSAT_RGB/Pasture/Pasture_300.jpg b/integration_tests/tiffs/EuroSAT_RGB/Pasture/Pasture_300.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e64caf55375a8c8e3257a0eb4fa84aa404bfa344 GIT binary patch literal 3269 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 C5kdw4 literal 0 HcmV?d00001 diff --git a/poetry.lock b/poetry.lock index f3eeb8a..120a747 100644 --- a/poetry.lock +++ b/poetry.lock @@ -248,13 +248,13 @@ ujson = ["ujson (>=5.7.0)"] [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] @@ -496,6 +496,84 @@ traitlets = ">=4" [package.extras] test = ["pytest"] +[[package]] +name = "contourpy" +version = "1.2.1" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, + {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, + {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, + {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, + {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, + {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, + {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, + {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, + {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, + {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, +] + +[package.dependencies] +numpy = ">=1.20" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "debugpy" version = "1.8.2" @@ -588,6 +666,71 @@ files = [ [package.extras] devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] +[[package]] +name = "fonttools" +version = "4.53.0" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.53.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20"}, + {file = "fonttools-4.53.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca"}, + {file = "fonttools-4.53.0-cp310-cp310-win32.whl", hash = "sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068"}, + {file = "fonttools-4.53.0-cp310-cp310-win_amd64.whl", hash = "sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e"}, + {file = "fonttools-4.53.0-cp311-cp311-win32.whl", hash = "sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005"}, + {file = "fonttools-4.53.0-cp311-cp311-win_amd64.whl", hash = "sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2"}, + {file = "fonttools-4.53.0-cp312-cp312-win32.whl", hash = "sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea"}, + {file = "fonttools-4.53.0-cp312-cp312-win_amd64.whl", hash = "sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd"}, + {file = "fonttools-4.53.0-cp38-cp38-win32.whl", hash = "sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af"}, + {file = "fonttools-4.53.0-cp38-cp38-win_amd64.whl", hash = "sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0"}, + {file = "fonttools-4.53.0-cp39-cp39-win32.whl", hash = "sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9"}, + {file = "fonttools-4.53.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2"}, + {file = "fonttools-4.53.0-py3-none-any.whl", hash = "sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4"}, + {file = "fonttools-4.53.0.tar.gz", hash = "sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + [[package]] name = "fqdn" version = "1.5.1" @@ -679,13 +822,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.4" +version = "6.29.5" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, - {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, + {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, + {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, ] [package.dependencies] @@ -1143,43 +1286,147 @@ files = [ {file = "jupyterlab_widgets-3.0.11.tar.gz", hash = "sha256:dd5ac679593c969af29c9bed054c24f26842baa51352114736756bc035deee27"}, ] +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, +] + [[package]] name = "lmdb" -version = "1.4.1" +version = "1.5.1" description = "Universal Python binding for the LMDB 'Lightning' Database" optional = false python-versions = "*" files = [ - {file = "lmdb-1.4.1-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:dcdbe27f75da9b8f58815c6ac9a1f8fa2d7a8d42abc22abb664e089002d5ffa4"}, - {file = "lmdb-1.4.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:032ce6f490caedbec642fc0a79114475e8520d1bf1e1465c6a12b8e5fe39022f"}, - {file = "lmdb-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13c5c8504d419039d6617cee24941e420d648a5b15c4b21e6491821400e5750f"}, - {file = "lmdb-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f8018a947608c4be0dc885c90f477a600be1b71285059a9c68280d36b3fb29b"}, - {file = "lmdb-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:360ac42a8772f571fdd01156e0466d6be52eea1140556a138281b7c887916ae2"}, - {file = "lmdb-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f683f3d9a1771f21a7788a9be98fae9f3ce13cb8d549d6074d0402f284572458"}, - {file = "lmdb-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73332a830c72d76d57744cd2b29eca2c258bc406273ca4ee07dc9e48ae84d712"}, - {file = "lmdb-1.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c178c5134e942256a830b0bca7bb052d3d7c645b4b8759d720ab49ec36b3aae"}, - {file = "lmdb-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:12047c239ab6ccbbc9db99277aabcfe1c15b1cfc9ea33b92ab30ddd6f0823a10"}, - {file = "lmdb-1.4.1-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:91930a2a7eb9acc4d687f9067d6f9ec83c9673bbee55823badbbee2f9a3e9970"}, - {file = "lmdb-1.4.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:1b106eb7a23b6a224bc7dfe2bd5a34c84973dda039965ae99106e10d22833dd9"}, - {file = "lmdb-1.4.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d7779ccfacd5f4c62f28485dd2427b54d19dd7016000e6237816a3750287a82"}, - {file = "lmdb-1.4.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c1f1eff7ae8d8d534309f05e274fd646dd1d4abf5157c59db59a54a55463371"}, - {file = "lmdb-1.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b6354df94d241e8c0158f716902224109a5f3f7ed9a24447a25f968427f61d77"}, - {file = "lmdb-1.4.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:64cf7470edfc45ff0369956e40a0784b5225097569299b91f893bd50fa336f52"}, - {file = "lmdb-1.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3c15d344731507fcfddb911a86d325e867c5574751af28591e82ecf21aad1e5"}, - {file = "lmdb-1.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:342550b86bb6275bfb89dbde9e48385da51d57124433bd464cd7681d0702f566"}, - {file = "lmdb-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:3a99a3859427fbc273ae1e932b3e7da946089757e74a05a24a19f5c4a1aba933"}, - {file = "lmdb-1.4.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f71da9bd33fd17c9cdbe2bd4ce87f4b36b8f044927df4220bec4b03f209c78a2"}, - {file = "lmdb-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e9ff50ad20d890bc63524230237a61b6eb3be96ad6a6ac475e8ba1a1f2c751f"}, - {file = "lmdb-1.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81abf9475a62b7ced1ac0352967106b7ed1ac5d1c1a0d23ed24abe55a28f9884"}, - {file = "lmdb-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:c9fa31743b447a3fbbbdaefc858de1c761568d855155dec54d5ad490f88856b6"}, - {file = "lmdb-1.4.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:26ef8fa7bd34a64f78f5e16fa9bcce0fe2ad682dd26ef078f95a8847dacb1171"}, - {file = "lmdb-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f5dc8a335f7925fd667d62a5e43bed3aa35959b32b233fe0112a6ef02e07877"}, - {file = "lmdb-1.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ba5d78b0ff130b38a56b7161ceb7e27ba4364d827d2bbb251c24b06c28c64cd"}, - {file = "lmdb-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:3b84f6a349ed1bd3fa4e6c3c6b711d0389cc8d9206733cb92feffaf102998e0c"}, - {file = "lmdb-1.4.1-pp27-pypy_73-macosx_10_7_x86_64.whl", hash = "sha256:a428e6b0e298290b91b7d0ce409f595c2c9027d7f2076c39ba006290b90d14cc"}, - {file = "lmdb-1.4.1-pp27-pypy_73-win_amd64.whl", hash = "sha256:885d3f3bf51b9167d368e37b1f1277eabf595dceefd69a489bd81c1ffd3d8ffd"}, - {file = "lmdb-1.4.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4bd8e49d5209c652b2caa18a3a4c30524025d7868d34b7bb249c42f7997da240"}, - {file = "lmdb-1.4.1.tar.gz", hash = "sha256:1f4c76af24e907593487c904ef5eba1993beb38ed385af82adb25a858f2d658d"}, + {file = "lmdb-1.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b8c6a9d4ecdb186ff010bd96c1d67e27399cfe5e8a70029b8fba056538a29d1"}, + {file = "lmdb-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f5796c4ad57bce495395af7a24fd5f7f307b2ac30f91caa6c8046e90d40edba"}, + {file = "lmdb-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:96258cc9384963fdded53bf6bc815284dd25a65491e0915cc5d3e0c5cf59cdf8"}, + {file = "lmdb-1.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f32d007610068c50c981d731b08f94ac9c7dead9e9f4248dd0a5797dba44493"}, + {file = "lmdb-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:726f98836c0e5370fc9de579b8d2bcd957d03dd06f946fae05fe8048e20ad7ea"}, + {file = "lmdb-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:9abfe57eec2ed684401a9296280e1767d09098127fbf22aacd12e9005eeaa225"}, + {file = "lmdb-1.5.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:03a1fec597b10c300247f45c701a5098331aa2de738c12e149649684d84a449f"}, + {file = "lmdb-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d9a8a21b715e5dc417469de97d6c36d4f95b5d17a1a22fd091a9823b9864a37"}, + {file = "lmdb-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb60acb7b0abe63790ef88ca3e186871f90c27629291ed6b5effee80bb45643f"}, + {file = "lmdb-1.5.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef30e51649b729f7a9dc3a0de98fa470d0253907cc307ec411a179e9943b32d"}, + {file = "lmdb-1.5.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29a0e378a4ff4bb8042ca57d57f06c8b919c5ee1ab0a57c7fe756199d277bcfa"}, + {file = "lmdb-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:37ad932811145522aaae3be9b919ba76c9f853585596a0a4b8591c9e055c514e"}, + {file = "lmdb-1.5.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:e931fee0d7e587001bb98f7d6c0e689cf3842d67d4139f120a9afa053521e348"}, + {file = "lmdb-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ddffb6c24d0b24f08df0d4c2457ebf556e174bed99efd2e8e9cdad0e8cf1217"}, + {file = "lmdb-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ba174f48512e1589f3651d6c240dd22b03d010d5916ae9831720f794476e9a49"}, + {file = "lmdb-1.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f79e59d240889eb321bf310d7e94149b9bcad4fe6ba94bc6141429e9546e7129"}, + {file = "lmdb-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9edaab924d232aaa2631b6edc0ac9239813c8536a651e5168411caa2ec04c2f"}, + {file = "lmdb-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:cd784a255cdaa0a14906f766cff978b8dfd7d694f1b75ab0105a56fef1effa88"}, + {file = "lmdb-1.5.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:95ec4ec7c685577ac042b4f3ccc60d0ae574be4ab193d8f67cedce6ca92da35d"}, + {file = "lmdb-1.5.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2bec71fc9ad1a98a8b0176be1fd2952254a65e60bcbe63c0ac010f61e11f06d7"}, + {file = "lmdb-1.5.1.tar.gz", hash = "sha256:717c255827d331e02f7242b44051aa06466c90f6d732ecb07b31edfb1e06c67a"}, ] [[package]] @@ -1290,6 +1537,58 @@ files = [ {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] +[[package]] +name = "matplotlib" +version = "3.9.1" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.9.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ccd6270066feb9a9d8e0705aa027f1ff39f354c72a87efe8fa07632f30fc6bb"}, + {file = "matplotlib-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:591d3a88903a30a6d23b040c1e44d1afdd0d778758d07110eb7596f811f31842"}, + {file = "matplotlib-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2a59ff4b83d33bca3b5ec58203cc65985367812cb8c257f3e101632be86d92"}, + {file = "matplotlib-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fc001516ffcf1a221beb51198b194d9230199d6842c540108e4ce109ac05cc0"}, + {file = "matplotlib-3.9.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:83c6a792f1465d174c86d06f3ae85a8fe36e6f5964633ae8106312ec0921fdf5"}, + {file = "matplotlib-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:421851f4f57350bcf0811edd754a708d2275533e84f52f6760b740766c6747a7"}, + {file = "matplotlib-3.9.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b3fce58971b465e01b5c538f9d44915640c20ec5ff31346e963c9e1cd66fa812"}, + {file = "matplotlib-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a973c53ad0668c53e0ed76b27d2eeeae8799836fd0d0caaa4ecc66bf4e6676c0"}, + {file = "matplotlib-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82cd5acf8f3ef43f7532c2f230249720f5dc5dd40ecafaf1c60ac8200d46d7eb"}, + {file = "matplotlib-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab38a4f3772523179b2f772103d8030215b318fef6360cb40558f585bf3d017f"}, + {file = "matplotlib-3.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2315837485ca6188a4b632c5199900e28d33b481eb083663f6a44cfc8987ded3"}, + {file = "matplotlib-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a0c977c5c382f6696caf0bd277ef4f936da7e2aa202ff66cad5f0ac1428ee15b"}, + {file = "matplotlib-3.9.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:565d572efea2b94f264dd86ef27919515aa6d629252a169b42ce5f570db7f37b"}, + {file = "matplotlib-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d397fd8ccc64af2ec0af1f0efc3bacd745ebfb9d507f3f552e8adb689ed730a"}, + {file = "matplotlib-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26040c8f5121cd1ad712abffcd4b5222a8aec3a0fe40bc8542c94331deb8780d"}, + {file = "matplotlib-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12cb1837cffaac087ad6b44399d5e22b78c729de3cdae4629e252067b705e2b"}, + {file = "matplotlib-3.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0e835c6988edc3d2d08794f73c323cc62483e13df0194719ecb0723b564e0b5c"}, + {file = "matplotlib-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:44a21d922f78ce40435cb35b43dd7d573cf2a30138d5c4b709d19f00e3907fd7"}, + {file = "matplotlib-3.9.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0c584210c755ae921283d21d01f03a49ef46d1afa184134dd0f95b0202ee6f03"}, + {file = "matplotlib-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:11fed08f34fa682c2b792942f8902e7aefeed400da71f9e5816bea40a7ce28fe"}, + {file = "matplotlib-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0000354e32efcfd86bda75729716b92f5c2edd5b947200be9881f0a671565c33"}, + {file = "matplotlib-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db17fea0ae3aceb8e9ac69c7e3051bae0b3d083bfec932240f9bf5d0197a049"}, + {file = "matplotlib-3.9.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:208cbce658b72bf6a8e675058fbbf59f67814057ae78165d8a2f87c45b48d0ff"}, + {file = "matplotlib-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:dc23f48ab630474264276be156d0d7710ac6c5a09648ccdf49fef9200d8cbe80"}, + {file = "matplotlib-3.9.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3fda72d4d472e2ccd1be0e9ccb6bf0d2eaf635e7f8f51d737ed7e465ac020cb3"}, + {file = "matplotlib-3.9.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:84b3ba8429935a444f1fdc80ed930babbe06725bcf09fbeb5c8757a2cd74af04"}, + {file = "matplotlib-3.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b918770bf3e07845408716e5bbda17eadfc3fcbd9307dc67f37d6cf834bb3d98"}, + {file = "matplotlib-3.9.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f1f2e5d29e9435c97ad4c36fb6668e89aee13d48c75893e25cef064675038ac9"}, + {file = "matplotlib-3.9.1.tar.gz", hash = "sha256:de06b19b8db95dd33d0dc17c926c7c9ebed9f572074b6fac4f65068a6814d010"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -1575,6 +1874,103 @@ files = [ [package.dependencies] ptyprocess = ">=0.5" +[[package]] +name = "pillow" +version = "10.4.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, + {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, + {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, + {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, + {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, + {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, + {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, + {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, + {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, + {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, + {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, + {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, + {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, + {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, + {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, + {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, + {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, + {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, + {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, + {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, + {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, + {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, + {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, + {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, + {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, + {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, + {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, + {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, + {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, + {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, + {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, + {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, + {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, + {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, + {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, + {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, + {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, + {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, + {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] + [[package]] name = "platformdirs" version = "4.2.2" @@ -2484,18 +2880,18 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "70.1.1" +version = "70.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-70.1.1-py3-none-any.whl", hash = "sha256:a58a8fde0541dab0419750bcc521fbdf8585f6e5cb41909df3a472ef7b81ca95"}, - {file = "setuptools-70.1.1.tar.gz", hash = "sha256:937a48c7cdb7a21eb53cd7f9b59e525503aa8abaf3584c730dc5f7a5bec3a650"}, + {file = "setuptools-70.2.0-py3-none-any.whl", hash = "sha256:b8b8060bb426838fbe942479c90296ce976249451118ef566a5a0b7d8b78fb05"}, + {file = "setuptools-70.2.0.tar.gz", hash = "sha256:bd63e505105011b25c3c11f753f7e3b8465ea739efddaccef8f0efac2137bac1"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "shellingham" @@ -2913,4 +3309,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "~3.11" -content-hash = "d876c9412f95849b93b7b25c98acc2294d090cf3bb74031786675d80de3226b2" +content-hash = "fe0963f5edfcf0a40ae56c3e2c36ce5dd22ed28939915907ce6b113f856dc0ca" diff --git a/pyproject.toml b/pyproject.toml index b1c71bf..52faa7c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,7 @@ pytest = "^8.2.2" python-lsp-server = "^1.11.0" python-lsp-ruff = "^2.2.1" jupyter = "^1.0.0" +matplotlib = "^3.9.1" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" diff --git a/rico_hdl/__init__.py b/rico_hdl/__init__.py index e69de29..8b13789 100644 --- a/rico_hdl/__init__.py +++ b/rico_hdl/__init__.py @@ -0,0 +1 @@ + diff --git a/rico_hdl/rico_hdl.py b/rico_hdl/rico_hdl.py index 21072ef..b998b84 100644 --- a/rico_hdl/rico_hdl.py +++ b/rico_hdl/rico_hdl.py @@ -11,8 +11,10 @@ import structlog from more_itertools import chunked from tqdm import tqdm -from concurrent.futures import as_completed, ProcessPoolExecutor +from concurrent.futures import ProcessPoolExecutor import multiprocessing as mp +import warnings +from rasterio.errors import NotGeoreferencedWarning log = structlog.get_logger() @@ -31,9 +33,33 @@ "B09", ] +# Defined in the order of the bands! +# Order taken from (and only implicitely confirmed in): +# https://github.com/phelber/EuroSAT/issues/7#issuecomment-916754970 +# Visualizing the individual bands supports the ordering, as one +# can see the different interpolation strengths for the 20 and 60m +# bands. +EUROSAT_MS_BANDS = [ + "B01", + "B02", + "B03", + "B04", + "B05", + "B06", + "B07", + "B08", + "B09", + "B10", + "B11", + "B12", + "B08A", +] + BIGEARTHNET_S1_ORDERING = ["VH", "VV"] NUM_HYSPECNET_BANDS = 224 +# see output of `gdalinfo` +UC_MERCED_BAND_IDX_COLOR_MAPPING = {1: "Red", 2: "Green", 3: "Blue"} GENERAL_HELP_TEXT = """\ This CLI tool is a fast and easy-to-use *r*emote sensing *i*mage format *co*nverter @@ -77,7 +103,9 @@ def open_lmdb(dir: str): ) -def read_single_band_raster(path: Path, index: int = 1): +def read_single_band_raster(path: Path, index: int = 1, is_georeferenced: bool = True): + if not is_georeferenced: + warnings.filterwarnings("ignore", category=NotGeoreferencedWarning) with rasterio.open(path) as r: return r.read(index) @@ -99,7 +127,7 @@ def s1_read_tif(path: Path): return read_single_band_raster(path) -def safetensor_generator_s2(patch_path: str) -> bytes: +def bigearthnet_s2_to_safetensor(patch_path: str) -> bytes: """ Given the path to a BigEarthNet-S2 patch directory (NOT the individual TIFF files), read the individual @@ -117,7 +145,7 @@ def safetensor_generator_s2(patch_path: str) -> bytes: return save(data, metadata=None) -def safetensor_generator_s1(patch_path: str) -> bytes: +def bigearthnet_s1_to_safetensor(patch_path: str) -> bytes: """ Given the path to a BigEarthNet-S1 patch directory (NOT the individual TIFF files), read the individual @@ -135,6 +163,72 @@ def safetensor_generator_s1(patch_path: str) -> bytes: return save(data, metadata=None) +@app.command() +def uc_merced( + target_dir: TargetDir, + dataset_dir: DatasetDir, +): + """ + [UC Merced Land Use Dataset](http://weegee.vision.ucmerced.edu/datasets/landuse.html) converter. + + The LMDB keys will be the names of the UC Merced patches without the + `.tif` suffix. + + The `safetensor` keys are [`Red`, `Green`, `Blue`] to indicate the respective + channel meaning. + """ + # FUTURE: Allow keeping it together and only have a single joined RGB tensor + # -> This is possible but kinda defeats the purpose of wrapping it in a saftensor + # For such a small dataset, it would be interesting to know if this extra stacking + # costs a lot of time. + log.info(f"Searching for patches in: {dataset_dir}") + # this could match the file paths directly + # the lmdb key would be the name itself without SPECTRAL_IMAGE.TIF + # and the safetensor would be produced from this file + # Remember: hyspecnet has multiple bands per file! + patch_paths = fast_find(r".*\d\d\.tif$", dataset_dir, only_dir=False) + num_patch_paths = len(patch_paths) + log.debug(f"Found {num_patch_paths} patches.") + assert num_patch_paths > 0 + env = open_lmdb(target_dir) + log.debug("Writing UC Merced data into LMDB") + lmdb_writer(env, patch_paths, encode_stem, uc_merced_to_safetensor) + + +@app.command() +def eurosat_multi_spectral( + target_dir: TargetDir, + dataset_dir: DatasetDir, + # RGB ? +): + """ + [EuroSAT Multi-Spectral](https://doi.org/10.5281/zenodo.7711810) converter. + + The LMDB keys will be the names of the EuroSAT_MS patches without the + `.tif` suffix. + + The `safetensor` keys are the band names from the + [EuroSAT paper](https://ieeexplore.ieee.org/abstract/document/8736785). + + NOTE: No atmospheric correction has been applied to the dataset + NOTE: Lower spatial resolution bands were upsampled to 10m spatial resolution + using cubic-spline interpolation. + """ + log.info(f"Searching for patches in: {dataset_dir}") + # this could match the file paths directly + # the lmdb key would be the name itself without SPECTRAL_IMAGE.TIF + # and the safetensor would be produced from this file + # Remember: hyspecnet has multiple bands per file! + patch_paths = fast_find(r".*\d+\.tif$", dataset_dir, only_dir=False) + num_patch_paths = len(patch_paths) + log.debug(f"Found {num_patch_paths} patches.") + assert num_patch_paths > 0 + env = open_lmdb(target_dir) + log.debug("Writing EuroSAT_MS data into LMDB") + # Understand what the Band mapping is! + lmdb_writer(env, patch_paths, encode_stem, eurosat_ms_to_safetensor) + + @app.command() def hyspecnet_11k( target_dir: TargetDir, @@ -161,16 +255,50 @@ def hyspecnet_11k( assert num_patch_paths > 0 env = open_lmdb(target_dir) log.debug("Writing HyspecNet-11k data into LMDB") - lmdb_writer( - env, patch_paths, hyspecnet_lmdb_key_extractor, safetensor_generator_hyspecnet - ) + lmdb_writer(env, patch_paths, encode_stem, hyspecnet_to_safetensor) -def hyspecnet_lmdb_key_extractor(patch_path: str) -> bytes: - return str(Path(patch_path).stem).encode() +def encode_stem(path: str) -> bytes: + """ + Given a path extract the stem and encode the string. + """ + return str(Path(path).stem).encode() -def safetensor_generator_hyspecnet(patch_path: str) -> bytes: +def eurosat_ms_to_safetensor(patch_path: str) -> bytes: + """ + Given the path to a multi-spectral EuroSAT patch file (`.tif` file), + read the individual bands and write them as entries + into a serialized safetensor dictionary. + The keys map to the band name specified in the [EuroSAT paper](https://ieeexplore.ieee.org/abstract/document/8736785) + (one of: `B01`, `B02`, `B03`, `B04`, `B05`, `B06`, `B07`, `B08`, `B08A`, `B09`, `B10`, `B11`, `B12`) + """ + p = Path(patch_path) + data = { + name: read_single_band_raster(p, index=idx) + for idx, name in enumerate(EUROSAT_MS_BANDS, start=1) + } + + return save(data, metadata=None) + + +def uc_merced_to_safetensor(patch_path: str) -> bytes: + """ + Given the path to a UC Merced patch file (`.tif` file), + read the individual bands and write them as entries + into a serialized safetensor dictionary. + The keys map to the color band value (`Red`, `Green`, `Blue`). + """ + p = Path(patch_path) + data = { + color: read_single_band_raster(p, index=idx, is_georeferenced=False) + for idx, color in UC_MERCED_BAND_IDX_COLOR_MAPPING.items() + } + + return save(data, metadata=None) + + +def hyspecnet_to_safetensor(patch_path: str) -> bytes: """ Given the path to a HySpecNet-11k patch directory (NOT the individual TIFF file), read the individual @@ -199,6 +327,8 @@ def fast_find( """ Use `fd` to quickly find all files/directories that match a given regular expression. Will default to using `os.cpu_count()` number of threads. + This highly optimized program is especially useful for slow network-attached storage solutions + or slow hard-drives. """ return subprocess.check_output( [ @@ -211,7 +341,7 @@ def fast_find( "--regex", regex, ] - + (["--type=directory"] if only_dir else [""]), + + (["--type=directory"] if only_dir else []), text=True, ).splitlines() @@ -223,7 +353,7 @@ def bigearthnet( bigearthnet_s2_dir: DatasetDir = None, ): """ - BigEarthNet-S1 and BigEarthNet-S2 converter. + [BigEarthNet-S1 and BigEarthNet-S2](https://doi.org/10.5281/zenodo.10891137) converter. If both source directories are given, both of them will be written to the same LMDB file. The LMDB keys will be the names of the BigEarthNet-S1/S2 patches (i.e., no `_BXY.tif` suffix). @@ -260,22 +390,24 @@ def bigearthnet( if bigearthnet_s1_dir is not None: log.debug("Writing BigEarthNet-S1 data into LMDB") - lmdb_writer( - env, s1_patch_paths, bigearthnet_lmdb_key_extractor, safetensor_generator_s1 - ) + lmdb_writer(env, s1_patch_paths, encode_stem, bigearthnet_s1_to_safetensor) if bigearthnet_s2_dir is not None: log.debug("Writing BigEarthNet-S2 data into LMDB") - lmdb_writer( - env, s2_patch_paths, bigearthnet_lmdb_key_extractor, safetensor_generator_s2 - ) - - -def bigearthnet_lmdb_key_extractor(path: str) -> bytes: - return str(Path(path).stem).encode() + lmdb_writer(env, s2_patch_paths, encode_stem, bigearthnet_s2_to_safetensor) def lmdb_writer(env, paths, lmdb_key_extractor_func, safetensor_generator): + """ + A parallel LMDB writer. + It takes an already opened LMDB `env` as an input and writes batched + transactions to the DB. + It will iterate in parallel over the paths and will call the + `lmdb_key_extractor_func` and `safetensor_generator` on each provided `path`. + The data is inserted in a sorted order to ensure stable and repeatable outputs. + The function will NOT overwrite any data! If data would be overwritten, the program + halts and exists the program with an error message. + """ # insertion order is important for reproducibility! paths.sort() log.debug("About to serialize data in chunks")