From 2b6727510596641114a8977f4d753a684f4856e1 Mon Sep 17 00:00:00 2001 From: Jianqi Pan Date: Thu, 6 Jun 2024 23:53:55 +0900 Subject: [PATCH] :tada: init(wdtagger): a simple and easy-to-use wrapper for wdtagger --- .gitignore | 4 + README.md | 25 + poetry.lock | 904 ++++++++++++++++++++++++++++++ pyproject.toml | 22 + tests/images/赤松楓.9d64b955.jpeg | Bin 0 -> 94214 bytes tests/test_tagger.py | 22 + wdtagger/__init__.py | 287 ++++++++++ 7 files changed, 1264 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 tests/images/赤松楓.9d64b955.jpeg create mode 100644 tests/test_tagger.py create mode 100644 wdtagger/__init__.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d731d8c --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +dist +models +__pycache__ +.pytest_cache diff --git a/README.md b/README.md new file mode 100644 index 0000000..333c947 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# wdtagger + +`wdtagger` is a simple and easy-to-use wrapper for the tagger model created by [SmilingWolf](https://github.com/SmilingWolf) which is specifically designed for tagging anime illustrations. + +## Installation + +You can install `wdtagger` via pip: + +```bash +pip install wdtagger +``` + +## Usage + +Below is a basic example of how to use wdtagger in your project: + +```python +from PIL import Image +from wdtagger import Tagger + +tagger = Tagger() # You can provide the model_repo, the default is "SmilingWolf/wd-swinv2-tagger-v3" +image = Image.open("image.jpg") +result = tagger.tag(image) +print(result) +``` diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..5ea51bb --- /dev/null +++ b/poetry.lock @@ -0,0 +1,904 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "certifi" +version = "2024.6.2" +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"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coloredlogs" +version = "15.0.1" +description = "Colored terminal output for Python's logging module" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + +[[package]] +name = "exceptiongroup" +version = "1.2.1" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "filelock" +version = "3.14.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + +[[package]] +name = "flatbuffers" +version = "24.3.25" +description = "The FlatBuffers serialization format for Python" +optional = false +python-versions = "*" +files = [ + {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"}, + {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, +] + +[[package]] +name = "fsspec" +version = "2024.6.0" +description = "File-system specification" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fsspec-2024.6.0-py3-none-any.whl", hash = "sha256:58d7122eb8a1a46f7f13453187bfea4972d66bf01618d37366521b1998034cee"}, + {file = "fsspec-2024.6.0.tar.gz", hash = "sha256:f579960a56e6d8038a9efc8f9c77279ec12e6299aa86b0769a7e9c46b94527c2"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +dev = ["pre-commit", "ruff"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] +tqdm = ["tqdm"] + +[[package]] +name = "huggingface-hub" +version = "0.23.3" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "huggingface_hub-0.23.3-py3-none-any.whl", hash = "sha256:22222c41223f1b7c209ae5511d2d82907325a0e3cdbce5f66949d43c598ff3bc"}, + {file = "huggingface_hub-0.23.3.tar.gz", hash = "sha256:1a1118a0b3dea3bab6c325d71be16f5ffe441d32f3ac7c348d6875911b694b5b"}, +] + +[package.dependencies] +filelock = "*" +fsspec = ">=2023.5.0" +packaging = ">=20.9" +pyyaml = ">=5.1" +requests = "*" +tqdm = ">=4.42.1" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +cli = ["InquirerPy (==0.3.4)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +hf-transfer = ["hf-transfer (>=0.1.4)"] +inference = ["aiohttp", "minijinja (>=1.0)"] +quality = ["mypy (==1.5.1)", "ruff (>=0.3.0)"] +tensorflow = ["graphviz", "pydot", "tensorflow"] +tensorflow-testing = ["keras (<3.0)", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["safetensors", "torch"] +typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] + +[[package]] +name = "humanfriendly" +version = "10.0" +description = "Human friendly output for text interfaces using Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] + +[package.dependencies] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + +[[package]] +name = "idna" +version = "3.7" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "onnxruntime" +version = "1.18.0" +description = "ONNX Runtime is a runtime accelerator for Machine Learning models" +optional = false +python-versions = "*" +files = [ + {file = "onnxruntime-1.18.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:5a3b7993a5ecf4a90f35542a4757e29b2d653da3efe06cdd3164b91167bbe10d"}, + {file = "onnxruntime-1.18.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:15b944623b2cdfe7f7945690bfb71c10a4531b51997c8320b84e7b0bb59af902"}, + {file = "onnxruntime-1.18.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e61ce5005118064b1a0ed73ebe936bc773a102f067db34108ea6c64dd62a179"}, + {file = "onnxruntime-1.18.0-cp310-cp310-win32.whl", hash = "sha256:a4fc8a2a526eb442317d280610936a9f73deece06c7d5a91e51570860802b93f"}, + {file = "onnxruntime-1.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:71ed219b768cab004e5cd83e702590734f968679bf93aa488c1a7ffbe6e220c3"}, + {file = "onnxruntime-1.18.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:3d24bd623872a72a7fe2f51c103e20fcca2acfa35d48f2accd6be1ec8633d960"}, + {file = "onnxruntime-1.18.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f15e41ca9b307a12550bfd2ec93f88905d9fba12bab7e578f05138ad0ae10d7b"}, + {file = "onnxruntime-1.18.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f45ca2887f62a7b847d526965686b2923efa72538c89b7703c7b3fe970afd59"}, + {file = "onnxruntime-1.18.0-cp311-cp311-win32.whl", hash = "sha256:9e24d9ecc8781323d9e2eeda019b4b24babc4d624e7d53f61b1fe1a929b0511a"}, + {file = "onnxruntime-1.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:f8608398976ed18aef450d83777ff6f77d0b64eced1ed07a985e1a7db8ea3771"}, + {file = "onnxruntime-1.18.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:f1d79941f15fc40b1ee67738b2ca26b23e0181bf0070b5fb2984f0988734698f"}, + {file = "onnxruntime-1.18.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e8caf3a8565c853a22d323a3eebc2a81e3de7591981f085a4f74f7a60aab2d"}, + {file = "onnxruntime-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:498d2b8380635f5e6ebc50ec1b45f181588927280f32390fb910301d234f97b8"}, + {file = "onnxruntime-1.18.0-cp312-cp312-win32.whl", hash = "sha256:ba7cc0ce2798a386c082aaa6289ff7e9bedc3dee622eef10e74830cff200a72e"}, + {file = "onnxruntime-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:1fa175bd43f610465d5787ae06050c81f7ce09da2bf3e914eb282cb8eab363ef"}, + {file = "onnxruntime-1.18.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:0284c579c20ec8b1b472dd190290a040cc68b6caec790edb960f065d15cf164a"}, + {file = "onnxruntime-1.18.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d47353d036d8c380558a5643ea5f7964d9d259d31c86865bad9162c3e916d1f6"}, + {file = "onnxruntime-1.18.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:885509d2b9ba4b01f08f7fa28d31ee54b6477953451c7ccf124a84625f07c803"}, + {file = "onnxruntime-1.18.0-cp38-cp38-win32.whl", hash = "sha256:8614733de3695656411d71fc2f39333170df5da6c7efd6072a59962c0bc7055c"}, + {file = "onnxruntime-1.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:47af3f803752fce23ea790fd8d130a47b2b940629f03193f780818622e856e7a"}, + {file = "onnxruntime-1.18.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:9153eb2b4d5bbab764d0aea17adadffcfc18d89b957ad191b1c3650b9930c59f"}, + {file = "onnxruntime-1.18.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c7fd86eca727c989bb8d9c5104f3c45f7ee45f445cc75579ebe55d6b99dfd7c"}, + {file = "onnxruntime-1.18.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac67a4de9c1326c4d87bcbfb652c923039b8a2446bb28516219236bec3b494f5"}, + {file = "onnxruntime-1.18.0-cp39-cp39-win32.whl", hash = "sha256:6ffb445816d06497df7a6dd424b20e0b2c39639e01e7fe210e247b82d15a23b9"}, + {file = "onnxruntime-1.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:46de6031cb6745f33f7eca9e51ab73e8c66037fb7a3b6b4560887c5b55ab5d5d"}, +] + +[package.dependencies] +coloredlogs = "*" +flatbuffers = "*" +numpy = ">=1.21.6" +packaging = "*" +protobuf = "*" +sympy = "*" + +[[package]] +name = "packaging" +version = "24.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + +[[package]] +name = "pandas" +version = "2.2.2" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "pillow" +version = "10.3.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "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 = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "protobuf" +version = "5.27.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-5.27.0-cp310-abi3-win32.whl", hash = "sha256:2f83bf341d925650d550b8932b71763321d782529ac0eaf278f5242f513cc04e"}, + {file = "protobuf-5.27.0-cp310-abi3-win_amd64.whl", hash = "sha256:b276e3f477ea1eebff3c2e1515136cfcff5ac14519c45f9b4aa2f6a87ea627c4"}, + {file = "protobuf-5.27.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:744489f77c29174328d32f8921566fb0f7080a2f064c5137b9d6f4b790f9e0c1"}, + {file = "protobuf-5.27.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:f51f33d305e18646f03acfdb343aac15b8115235af98bc9f844bf9446573827b"}, + {file = "protobuf-5.27.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:56937f97ae0dcf4e220ff2abb1456c51a334144c9960b23597f044ce99c29c89"}, + {file = "protobuf-5.27.0-cp38-cp38-win32.whl", hash = "sha256:a17f4d664ea868102feaa30a674542255f9f4bf835d943d588440d1f49a3ed15"}, + {file = "protobuf-5.27.0-cp38-cp38-win_amd64.whl", hash = "sha256:aabbbcf794fbb4c692ff14ce06780a66d04758435717107c387f12fb477bf0d8"}, + {file = "protobuf-5.27.0-cp39-cp39-win32.whl", hash = "sha256:587be23f1212da7a14a6c65fd61995f8ef35779d4aea9e36aad81f5f3b80aec5"}, + {file = "protobuf-5.27.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cb65fc8fba680b27cf7a07678084c6e68ee13cab7cace734954c25a43da6d0f"}, + {file = "protobuf-5.27.0-py3-none-any.whl", hash = "sha256:673ad60f1536b394b4fa0bcd3146a4130fcad85bfe3b60eaa86d6a0ace0fa374"}, + {file = "protobuf-5.27.0.tar.gz", hash = "sha256:07f2b9a15255e3cf3f137d884af7972407b556a7a220912b252f26dc3121e6bf"}, +] + +[[package]] +name = "pygments" +version = "2.18.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyreadline3" +version = "3.4.1" +description = "A python implementation of GNU readline." +optional = false +python-versions = "*" +files = [ + {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, + {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, +] + +[[package]] +name = "pytest" +version = "8.2.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, + {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2024.1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rich" +version = "13.7.1" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sympy" +version = "1.12.1" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.12.1-py3-none-any.whl", hash = "sha256:9b2cbc7f1a640289430e13d2a56f02f867a1da0190f2f99d8968c2f74da0e515"}, + {file = "sympy-1.12.1.tar.gz", hash = "sha256:2877b03f998cd8c08f07cd0de5b767119cd3ef40d09f41c30d722f6686b0fb88"}, +] + +[package.dependencies] +mpmath = ">=1.1.0,<1.4.0" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tqdm" +version = "4.66.4" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, + {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "typing-extensions" +version = "4.12.1" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.1-py3-none-any.whl", hash = "sha256:6024b58b69089e5a89c347397254e35f1bf02a907728ec7fee9bf0fe837d203a"}, + {file = "typing_extensions-4.12.1.tar.gz", hash = "sha256:915f5e35ff76f56588223f15fdd5938f9a1cf9195c0de25130c627e4d597f6d1"}, +] + +[[package]] +name = "tzdata" +version = "2024.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, +] + +[[package]] +name = "urllib3" +version = "2.2.1" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "79947fb7b5011c525936d8a22c4d026001528b3ff1e120ac7e20796e1a35fcea" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..bf2e7a1 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,22 @@ +[tool.poetry] +name = "wdtagger" +version = "0.1.0" +description = "" +authors = ["Jianqi Pan "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.10" +onnxruntime = "^1.18.0" +pillow = "^10.3.0" +pandas = "^2.2.2" +huggingface-hub = "^0.23.3" +rich = "^13.7.1" + + +[tool.poetry.group.dev.dependencies] +pytest = "^8.2.2" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/tests/images/赤松楓.9d64b955.jpeg b/tests/images/赤松楓.9d64b955.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..29b1d916793037f9c6777c0044e0535150efaeb4 GIT binary patch literal 94214 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 i)UB(Fk#PiKjrN;={ThqgX% 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 list[str]: + """Load labels from a dataframe and process tag names. + + Args: + dataframe (pd.DataFrame): DataFrame containing the tag names and categories. + + Returns: + tag_names: List of tag names. + rating_indexes: List of indexes for rating tags. + general_indexes: List of indexes for general tags. + character_indexes: List of indexes for character tags. + """ + name_series = dataframe["name"] + kaomojis = [ + "0_0", + "(o)_(o)", + "+_+", + "+_-", + "._.", + "_", + "<|>_<|>", + "=_=", + ">_<", + "3_3", + "6_9", + ">_o", + "@_@", + "^_^", + "o_o", + "u_u", + "x_x", + "|_|", + "||_||", + ] + name_series = name_series.map( + lambda x: x.replace("_", " ") if x not in kaomojis else x + ) + tag_names = name_series.tolist() + rating_indexes = list(np.where(dataframe["category"] == 9)[0]) + general_indexes = list(np.where(dataframe["category"] == 0)[0]) + character_indexes = list(np.where(dataframe["category"] == 4)[0]) + + return tag_names, rating_indexes, general_indexes, character_indexes + + +class Result: + def __init__( + self, preds, sep_tags, general_threshold=0.35, character_threshold=0.9 + ): + """Initialize the Result object to store tagging results. + + Args: + preds (np.array): Predictions array from the model. + sep_tags (tuple): Tuple containing separated tags based on categories. + general_threshold (float): Threshold for general tags. + character_threshold (float): Threshold for character tags. + """ + tag_names = sep_tags[0] + rating_indexes = sep_tags[1] + general_indexes = sep_tags[2] + character_indexes = sep_tags[3] + labels = list(zip(tag_names, preds[0].astype(float))) + + # Ratings + ratings_names = [labels[i] for i in rating_indexes] + rating_data = dict(ratings_names) + rating_data = OrderedDict( + sorted(rating_data.items(), key=lambda x: x[1], reverse=True) + ) + + # General tags + general_names = [labels[i] for i in general_indexes] + general_tag = [x for x in general_names if x[1] > general_threshold] + general_tag = OrderedDict(sorted(general_tag, key=lambda x: x[1], reverse=True)) + + # Character tags + character_names = [labels[i] for i in character_indexes] + character_tag = [x for x in character_names if x[1] > character_threshold] + character_tag = OrderedDict( + sorted(character_tag, key=lambda x: x[1], reverse=True) + ) + + self.general_tag_data = general_tag + self.character_tag_data = character_tag + self.rating_data = rating_data + + @property + def general_tags(self): + """Return general tags as a tuple.""" + return tuple(self.general_tag_data.keys()) + + @property + def character_tags(self): + """Return character tags as a tuple.""" + return tuple(self.character_tag_data.keys()) + + @property + def rating(self): + """Return the highest rated tag.""" + return max(self.rating_data, key=self.rating_data.get) + + @property + def general_tags_string(self) -> str: + """Return general tags as a sorted string.""" + string = sorted( + self.general_tag_data.items(), + key=lambda x: x[1], + reverse=True, + ) + string = [x[0] for x in string] + string = ", ".join(string) + + return string + + @property + def character_tags_string(self) -> str: + """Return character tags as a sorted string.""" + string = sorted( + self.character_tag_data.items(), + key=lambda x: x[1], + reverse=True, + ) + string = [x[0] for x in string] + string = ", ".join(string) + return string + + def __str__(self) -> str: + """Return a formatted string representation of the tags and their ratings.""" + + def get_tag_with_rate(tag_dict): + return ", ".join([f"{k} ({v:.2f})" for k, v in tag_dict.items()]) + + result = f"General tags: {get_tag_with_rate(self.general_tag_data)}\n" + result += f"Character tags: {get_tag_with_rate(self.character_tag_data)}\n" + result += f"Rating: {self.rating} ({self.rating_data[self.rating]:.2f})" + return result + + +class Tagger: + def __init__( + self, + model_repo="SmilingWolf/wd-swinv2-tagger-v3", + cache_dir=None, + hf_token=HF_TOKEN, + ): + """Initialize the Tagger object with the model repository and tokens. + + Args: + model_repo (str): Repository name on HuggingFace. + cache_dir (str, optional): Directory to cache the model. Defaults to None. + hf_token (str, optional): HuggingFace token for authentication. Defaults to HF_TOKEN. + """ + self.model_target_size = None + self.cache_dir = cache_dir + self.hf_token = hf_token + self.load_model(model_repo, cache_dir, hf_token) + + def load_model(self, model_repo, cache_dir=None, hf_token=None): + """Load the model and tags from the specified repository. + + Args: + model_repo (str): Repository name on HuggingFace. + cache_dir (str, optional): Directory to cache the model. Defaults to None. + hf_token (str, optional): HuggingFace token for authentication. Defaults to None. + """ + with console.status("Loading model..."): + csv_path = huggingface_hub.hf_hub_download( + model_repo, + LABEL_FILENAME, + cache_dir=cache_dir, + use_auth_token=hf_token, + ) + model_path = huggingface_hub.hf_hub_download( + model_repo, + MODEL_FILENAME, + cache_dir=cache_dir, + use_auth_token=hf_token, + ) + + tags_df = pd.read_csv(csv_path) + self.sep_tags = load_labels(tags_df) + + model = rt.InferenceSession(model_path) + _, height, _, _ = model.get_inputs()[0].shape + self.model_target_size = height + self.model = model + + def prepare_image(self, image): + """Prepare the image for model input. + + Args: + image (PIL.Image): Input image. + + Returns: + np.array: Processed image as a NumPy array. + """ + if image.mode != "RGBA": + image = image.convert("RGBA") + target_size = self.model_target_size + canvas = Image.new("RGBA", image.size, (255, 255, 255)) + canvas.alpha_composite(image) + image = canvas.convert("RGB") + + # Pad image to square + image_shape = image.size + max_dim = max(image_shape) + pad_left = (max_dim - image_shape[0]) // 2 + pad_top = (max_dim - image_shape[1]) // 2 + + padded_image = Image.new("RGB", (max_dim, max_dim), (255, 255, 255)) + padded_image.paste(image, (pad_left, pad_top)) + + # Resize + if max_dim != target_size: + padded_image = padded_image.resize( + (target_size, target_size), + Image.BICUBIC, + ) + + # Convert to numpy array + image_array = np.asarray(padded_image, dtype=np.float32) + + # Convert PIL-native RGB to BGR + image_array = image_array[:, :, ::-1] + + return np.expand_dims(image_array, axis=0) + + def tag( + self, + image, + general_threshold=0.35, + character_threshold=0.9, + ): + """Tag the image and return the results. + + Args: + image (PIL.Image): Input image. + general_threshold (float): Threshold for general tags. + character_threshold (float): Threshold for character tags. + + Returns: + Result: Object containing the tagging results. + """ + with console.status("Tagging..."): + image = self.prepare_image(image) + image_array = np.asarray(image, dtype=np.float32) + image_array = image_array[:, :, ::-1] # Convert PIL-native RGB to BGR + + image_array = np.expand_dims(image_array, axis=0) + input_name = self.model.get_inputs()[0].name + label_name = self.model.get_outputs()[0].name + + preds = self.model.run([label_name], {input_name: image_array[0]})[0] + result = Result( + preds, self.sep_tags, general_threshold, character_threshold + ) + return result + + +__all__ = ["Tagger"] + +if __name__ == "__main__": + tagger = Tagger() + image = Image.open("./tests/images/赤松楓.9d64b955.jpeg") + result = tagger.tag(image, character_threshold=0.85, general_threshold=0.35) + print(result)