From f527319e8767dba55cf57088428e93ba8a784157 Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:39:11 +0200 Subject: [PATCH 01/12] chore: initialize packaging and dependency management (#1) --- poetry.lock | 3488 ++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 89 ++ requirements-dev.txt | 124 ++ requirements.txt | 85 + 4 files changed, 3786 insertions(+) create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100644 requirements-dev.txt create mode 100644 requirements.txt diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..a3c62c7 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,3488 @@ +# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. + +[[package]] +name = "anyio" +version = "4.11.0" +description = "High-level concurrency and networking framework on top of asyncio or Trio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc"}, + {file = "anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +trio = ["trio (>=0.31.0)"] + +[[package]] +name = "attrs" +version = "25.4.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, + {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, +] + +[[package]] +name = "babel" +version = "2.17.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, + {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, +] + +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] + +[[package]] +name = "backrefs" +version = "6.1" +description = "A wrapper around re and regex that adds additional back references." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "backrefs-6.1-py310-none-any.whl", hash = "sha256:2a2ccb96302337ce61ee4717ceacfbf26ba4efb1d55af86564b8bbaeda39cac1"}, + {file = "backrefs-6.1-py311-none-any.whl", hash = "sha256:e82bba3875ee4430f4de4b6db19429a27275d95a5f3773c57e9e18abc23fd2b7"}, + {file = "backrefs-6.1-py312-none-any.whl", hash = "sha256:c64698c8d2269343d88947c0735cb4b78745bd3ba590e10313fbf3f78c34da5a"}, + {file = "backrefs-6.1-py313-none-any.whl", hash = "sha256:4c9d3dc1e2e558965202c012304f33d4e0e477e1c103663fd2c3cc9bb18b0d05"}, + {file = "backrefs-6.1-py314-none-any.whl", hash = "sha256:13eafbc9ccd5222e9c1f0bec563e6d2a6d21514962f11e7fc79872fd56cbc853"}, + {file = "backrefs-6.1-py39-none-any.whl", hash = "sha256:a9e99b8a4867852cad177a6430e31b0f6e495d65f8c6c134b68c14c3c95bf4b0"}, + {file = "backrefs-6.1.tar.gz", hash = "sha256:3bba1749aafe1db9b915f00e0dd166cba613b6f788ffd63060ac3485dc9be231"}, +] + +[package.extras] +extras = ["regex"] + +[[package]] +name = "black" +version = "25.11.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "black-25.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ec311e22458eec32a807f029b2646f661e6859c3f61bc6d9ffb67958779f392e"}, + {file = "black-25.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1032639c90208c15711334d681de2e24821af0575573db2810b0763bcd62e0f0"}, + {file = "black-25.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c0f7c461df55cf32929b002335883946a4893d759f2df343389c4396f3b6b37"}, + {file = "black-25.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:f9786c24d8e9bd5f20dc7a7f0cdd742644656987f6ea6947629306f937726c03"}, + {file = "black-25.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:895571922a35434a9d8ca67ef926da6bc9ad464522a5fe0db99b394ef1c0675a"}, + {file = "black-25.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cb4f4b65d717062191bdec8e4a442539a8ea065e6af1c4f4d36f0cdb5f71e170"}, + {file = "black-25.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d81a44cbc7e4f73a9d6ae449ec2317ad81512d1e7dce7d57f6333fd6259737bc"}, + {file = "black-25.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:7eebd4744dfe92ef1ee349dc532defbf012a88b087bb7ddd688ff59a447b080e"}, + {file = "black-25.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:80e7486ad3535636657aa180ad32a7d67d7c273a80e12f1b4bfa0823d54e8fac"}, + {file = "black-25.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cced12b747c4c76bc09b4db057c319d8545307266f41aaee665540bc0e04e96"}, + {file = "black-25.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cb2d54a39e0ef021d6c5eef442e10fd71fcb491be6413d083a320ee768329dd"}, + {file = "black-25.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae263af2f496940438e5be1a0c1020e13b09154f3af4df0835ea7f9fe7bfa409"}, + {file = "black-25.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0a1d40348b6621cc20d3d7530a5b8d67e9714906dfd7346338249ad9c6cedf2b"}, + {file = "black-25.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:51c65d7d60bb25429ea2bf0731c32b2a2442eb4bd3b2afcb47830f0b13e58bfd"}, + {file = "black-25.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:936c4dd07669269f40b497440159a221ee435e3fddcf668e0c05244a9be71993"}, + {file = "black-25.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:f42c0ea7f59994490f4dccd64e6b2dd49ac57c7c84f38b8faab50f8759db245c"}, + {file = "black-25.11.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:35690a383f22dd3e468c85dc4b915217f87667ad9cce781d7b42678ce63c4170"}, + {file = "black-25.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:dae49ef7369c6caa1a1833fd5efb7c3024bb7e4499bf64833f65ad27791b1545"}, + {file = "black-25.11.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bd4a22a0b37401c8e492e994bce79e614f91b14d9ea911f44f36e262195fdda"}, + {file = "black-25.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:aa211411e94fdf86519996b7f5f05e71ba34835d8f0c0f03c00a26271da02664"}, + {file = "black-25.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3bb5ce32daa9ff0605d73b6f19da0b0e6c1f8f2d75594db539fdfed722f2b06"}, + {file = "black-25.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9815ccee1e55717fe9a4b924cae1646ef7f54e0f990da39a34fc7b264fcf80a2"}, + {file = "black-25.11.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:92285c37b93a1698dcbc34581867b480f1ba3a7b92acf1fe0467b04d7a4da0dc"}, + {file = "black-25.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:43945853a31099c7c0ff8dface53b4de56c41294fa6783c0441a8b1d9bf668bc"}, + {file = "black-25.11.0-py3-none-any.whl", hash = "sha256:e3f562da087791e96cefcd9dda058380a442ab322a02e222add53736451f604b"}, + {file = "black-25.11.0.tar.gz", hash = "sha256:9a323ac32f5dc75ce7470501b887250be5005a01602e931a15e45593f70f6e08"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +pytokens = ">=0.3.0" + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.10)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "certifi" +version = "2025.11.12" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b"}, + {file = "certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316"}, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0"}, + {file = "cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, + {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, + {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, +] + +[[package]] +name = "click" +version = "8.3.1" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.10" +groups = ["main", "dev"] +files = [ + {file = "click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6"}, + {file = "click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "click-plugins" +version = "1.1.1.2" +description = "An extension module for click to enable registering CLI commands via setuptools entry-points." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "click_plugins-1.1.1.2-py2.py3-none-any.whl", hash = "sha256:008d65743833ffc1f5417bf0e78e8d2c23aab04d9745ba817bd3e71b0feb6aa6"}, + {file = "click_plugins-1.1.1.2.tar.gz", hash = "sha256:d7af3984a99d243c131aa1a828331e7630f4a88a9741fd05c927b204bcf92261"}, +] + +[package.dependencies] +click = ">=4.0" + +[package.extras] +dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] + +[[package]] +name = "cligj" +version = "0.7.2" +description = "Click params for commmand line interfaces to GeoJSON" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4" +groups = ["main"] +files = [ + {file = "cligj-0.7.2-py3-none-any.whl", hash = "sha256:c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df"}, + {file = "cligj-0.7.2.tar.gz", hash = "sha256:a4bc13d623356b373c2c27c53dbd9c68cae5d526270bfa71f6c6fa69669c6b27"}, +] + +[package.dependencies] +click = ">=4.0" + +[package.extras] +test = ["pytest-cov"] + +[[package]] +name = "clip" +version = "1.0" +description = "" +optional = false +python-versions = "*" +groups = ["main"] +files = [] +develop = false + +[package.dependencies] +ftfy = "*" +packaging = "*" +regex = "*" +torch = "*" +torchvision = "*" +tqdm = "*" + +[package.extras] +dev = ["pytest"] + +[package.source] +type = "git" +url = "https://github.com/openai/CLIP.git" +reference = "HEAD" +resolved_reference = "dcba3cb2e2827b402d2701e7e1c7d9fed8a20ef1" + +[[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" +groups = ["main", "dev"] +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +markers = {main = "platform_system == \"Windows\""} + +[[package]] +name = "contourpy" +version = "1.3.3" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.11" +groups = ["main"] +files = [ + {file = "contourpy-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1"}, + {file = "contourpy-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381"}, + {file = "contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7"}, + {file = "contourpy-1.3.3-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1"}, + {file = "contourpy-1.3.3-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a"}, + {file = "contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db"}, + {file = "contourpy-1.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620"}, + {file = "contourpy-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f"}, + {file = "contourpy-1.3.3-cp311-cp311-win32.whl", hash = "sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff"}, + {file = "contourpy-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42"}, + {file = "contourpy-1.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470"}, + {file = "contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb"}, + {file = "contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6"}, + {file = "contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7"}, + {file = "contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8"}, + {file = "contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea"}, + {file = "contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1"}, + {file = "contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7"}, + {file = "contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411"}, + {file = "contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69"}, + {file = "contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b"}, + {file = "contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc"}, + {file = "contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5"}, + {file = "contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1"}, + {file = "contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286"}, + {file = "contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5"}, + {file = "contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67"}, + {file = "contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9"}, + {file = "contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659"}, + {file = "contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7"}, + {file = "contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d"}, + {file = "contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263"}, + {file = "contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9"}, + {file = "contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d"}, + {file = "contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216"}, + {file = "contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae"}, + {file = "contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20"}, + {file = "contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99"}, + {file = "contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b"}, + {file = "contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a"}, + {file = "contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e"}, + {file = "contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3"}, + {file = "contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8"}, + {file = "contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301"}, + {file = "contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a"}, + {file = "contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77"}, + {file = "contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5"}, + {file = "contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4"}, + {file = "contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36"}, + {file = "contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3"}, + {file = "contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b"}, + {file = "contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36"}, + {file = "contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d"}, + {file = "contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd"}, + {file = "contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339"}, + {file = "contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772"}, + {file = "contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77"}, + {file = "contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13"}, + {file = "contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe"}, + {file = "contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f"}, + {file = "contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0"}, + {file = "contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4"}, + {file = "contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f"}, + {file = "contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae"}, + {file = "contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc"}, + {file = "contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b"}, + {file = "contourpy-1.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497"}, + {file = "contourpy-1.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8"}, + {file = "contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e"}, + {file = "contourpy-1.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989"}, + {file = "contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77"}, + {file = "contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880"}, +] + +[package.dependencies] +numpy = ">=1.25" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["bokeh", "contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.17.0)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "coverage" +version = "7.12.0" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "coverage-7.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:32b75c2ba3f324ee37af3ccee5b30458038c50b349ad9b88cee85096132a575b"}, + {file = "coverage-7.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cb2a1b6ab9fe833714a483a915de350abc624a37149649297624c8d57add089c"}, + {file = "coverage-7.12.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5734b5d913c3755e72f70bf6cc37a0518d4f4745cde760c5d8e12005e62f9832"}, + {file = "coverage-7.12.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b527a08cdf15753279b7afb2339a12073620b761d79b81cbe2cdebdb43d90daa"}, + {file = "coverage-7.12.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9bb44c889fb68004e94cab71f6a021ec83eac9aeabdbb5a5a88821ec46e1da73"}, + {file = "coverage-7.12.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4b59b501455535e2e5dde5881739897967b272ba25988c89145c12d772810ccb"}, + {file = "coverage-7.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d8842f17095b9868a05837b7b1b73495293091bed870e099521ada176aa3e00e"}, + {file = "coverage-7.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c5a6f20bf48b8866095c6820641e7ffbe23f2ac84a2efc218d91235e404c7777"}, + {file = "coverage-7.12.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:5f3738279524e988d9da2893f307c2093815c623f8d05a8f79e3eff3a7a9e553"}, + {file = "coverage-7.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0d68c1f7eabbc8abe582d11fa393ea483caf4f44b0af86881174769f185c94d"}, + {file = "coverage-7.12.0-cp310-cp310-win32.whl", hash = "sha256:7670d860e18b1e3ee5930b17a7d55ae6287ec6e55d9799982aa103a2cc1fa2ef"}, + {file = "coverage-7.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:f999813dddeb2a56aab5841e687b68169da0d3f6fc78ccf50952fa2463746022"}, + {file = "coverage-7.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa124a3683d2af98bd9d9c2bfa7a5076ca7e5ab09fdb96b81fa7d89376ae928f"}, + {file = "coverage-7.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d93fbf446c31c0140208dcd07c5d882029832e8ed7891a39d6d44bd65f2316c3"}, + {file = "coverage-7.12.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:52ca620260bd8cd6027317bdd8b8ba929be1d741764ee765b42c4d79a408601e"}, + {file = "coverage-7.12.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f3433ffd541380f3a0e423cff0f4926d55b0cc8c1d160fdc3be24a4c03aa65f7"}, + {file = "coverage-7.12.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7bbb321d4adc9f65e402c677cd1c8e4c2d0105d3ce285b51b4d87f1d5db5245"}, + {file = "coverage-7.12.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22a7aade354a72dff3b59c577bfd18d6945c61f97393bc5fb7bd293a4237024b"}, + {file = "coverage-7.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3ff651dcd36d2fea66877cd4a82de478004c59b849945446acb5baf9379a1b64"}, + {file = "coverage-7.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:31b8b2e38391a56e3cea39d22a23faaa7c3fc911751756ef6d2621d2a9daf742"}, + {file = "coverage-7.12.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:297bc2da28440f5ae51c845a47c8175a4db0553a53827886e4fb25c66633000c"}, + {file = "coverage-7.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ff7651cc01a246908eac162a6a86fc0dbab6de1ad165dfb9a1e2ec660b44984"}, + {file = "coverage-7.12.0-cp311-cp311-win32.whl", hash = "sha256:313672140638b6ddb2c6455ddeda41c6a0b208298034544cfca138978c6baed6"}, + {file = "coverage-7.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a1783ed5bd0d5938d4435014626568dc7f93e3cb99bc59188cc18857c47aa3c4"}, + {file = "coverage-7.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:4648158fd8dd9381b5847622df1c90ff314efbfc1df4550092ab6013c238a5fc"}, + {file = "coverage-7.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:29644c928772c78512b48e14156b81255000dcfd4817574ff69def189bcb3647"}, + {file = "coverage-7.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8638cbb002eaa5d7c8d04da667813ce1067080b9a91099801a0053086e52b736"}, + {file = "coverage-7.12.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:083631eeff5eb9992c923e14b810a179798bb598e6a0dd60586819fc23be6e60"}, + {file = "coverage-7.12.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:99d5415c73ca12d558e07776bd957c4222c687b9f1d26fa0e1b57e3598bdcde8"}, + {file = "coverage-7.12.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e949ebf60c717c3df63adb4a1a366c096c8d7fd8472608cd09359e1bd48ef59f"}, + {file = "coverage-7.12.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6d907ddccbca819afa2cd014bc69983b146cca2735a0b1e6259b2a6c10be1e70"}, + {file = "coverage-7.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b1518ecbad4e6173f4c6e6c4a46e49555ea5679bf3feda5edb1b935c7c44e8a0"}, + {file = "coverage-7.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:51777647a749abdf6f6fd8c7cffab12de68ab93aab15efc72fbbb83036c2a068"}, + {file = "coverage-7.12.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:42435d46d6461a3b305cdfcad7cdd3248787771f53fe18305548cba474e6523b"}, + {file = "coverage-7.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5bcead88c8423e1855e64b8057d0544e33e4080b95b240c2a355334bb7ced937"}, + {file = "coverage-7.12.0-cp312-cp312-win32.whl", hash = "sha256:dcbb630ab034e86d2a0f79aefd2be07e583202f41e037602d438c80044957baa"}, + {file = "coverage-7.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:2fd8354ed5d69775ac42986a691fbf68b4084278710cee9d7c3eaa0c28fa982a"}, + {file = "coverage-7.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:737c3814903be30695b2de20d22bcc5428fdae305c61ba44cdc8b3252984c49c"}, + {file = "coverage-7.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:47324fffca8d8eae7e185b5bb20c14645f23350f870c1649003618ea91a78941"}, + {file = "coverage-7.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ccf3b2ede91decd2fb53ec73c1f949c3e034129d1e0b07798ff1d02ea0c8fa4a"}, + {file = "coverage-7.12.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b365adc70a6936c6b0582dc38746b33b2454148c02349345412c6e743efb646d"}, + {file = "coverage-7.12.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bc13baf85cd8a4cfcf4a35c7bc9d795837ad809775f782f697bf630b7e200211"}, + {file = "coverage-7.12.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:099d11698385d572ceafb3288a5b80fe1fc58bf665b3f9d362389de488361d3d"}, + {file = "coverage-7.12.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:473dc45d69694069adb7680c405fb1e81f60b2aff42c81e2f2c3feaf544d878c"}, + {file = "coverage-7.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:583f9adbefd278e9de33c33d6846aa8f5d164fa49b47144180a0e037f0688bb9"}, + {file = "coverage-7.12.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2089cc445f2dc0af6f801f0d1355c025b76c24481935303cf1af28f636688f0"}, + {file = "coverage-7.12.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:950411f1eb5d579999c5f66c62a40961f126fc71e5e14419f004471957b51508"}, + {file = "coverage-7.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b1aab7302a87bafebfe76b12af681b56ff446dc6f32ed178ff9c092ca776e6bc"}, + {file = "coverage-7.12.0-cp313-cp313-win32.whl", hash = "sha256:d7e0d0303c13b54db495eb636bc2465b2fb8475d4c8bcec8fe4b5ca454dfbae8"}, + {file = "coverage-7.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:ce61969812d6a98a981d147d9ac583a36ac7db7766f2e64a9d4d059c2fe29d07"}, + {file = "coverage-7.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:bcec6f47e4cb8a4c2dc91ce507f6eefc6a1b10f58df32cdc61dff65455031dfc"}, + {file = "coverage-7.12.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:459443346509476170d553035e4a3eed7b860f4fe5242f02de1010501956ce87"}, + {file = "coverage-7.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04a79245ab2b7a61688958f7a855275997134bc84f4a03bc240cf64ff132abf6"}, + {file = "coverage-7.12.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:09a86acaaa8455f13d6a99221d9654df249b33937b4e212b4e5a822065f12aa7"}, + {file = "coverage-7.12.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:907e0df1b71ba77463687a74149c6122c3f6aac56c2510a5d906b2f368208560"}, + {file = "coverage-7.12.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b57e2d0ddd5f0582bae5437c04ee71c46cd908e7bc5d4d0391f9a41e812dd12"}, + {file = "coverage-7.12.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:58c1c6aa677f3a1411fe6fb28ec3a942e4f665df036a3608816e0847fad23296"}, + {file = "coverage-7.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4c589361263ab2953e3c4cd2a94db94c4ad4a8e572776ecfbad2389c626e4507"}, + {file = "coverage-7.12.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:91b810a163ccad2e43b1faa11d70d3cf4b6f3d83f9fd5f2df82a32d47b648e0d"}, + {file = "coverage-7.12.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:40c867af715f22592e0d0fb533a33a71ec9e0f73a6945f722a0c85c8c1cbe3a2"}, + {file = "coverage-7.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:68b0d0a2d84f333de875666259dadf28cc67858bc8fd8b3f1eae84d3c2bec455"}, + {file = "coverage-7.12.0-cp313-cp313t-win32.whl", hash = "sha256:73f9e7fbd51a221818fd11b7090eaa835a353ddd59c236c57b2199486b116c6d"}, + {file = "coverage-7.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:24cff9d1f5743f67db7ba46ff284018a6e9aeb649b67aa1e70c396aa1b7cb23c"}, + {file = "coverage-7.12.0-cp313-cp313t-win_arm64.whl", hash = "sha256:c87395744f5c77c866d0f5a43d97cc39e17c7f1cb0115e54a2fe67ca75c5d14d"}, + {file = "coverage-7.12.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a1c59b7dc169809a88b21a936eccf71c3895a78f5592051b1af8f4d59c2b4f92"}, + {file = "coverage-7.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8787b0f982e020adb732b9f051f3e49dd5054cebbc3f3432061278512a2b1360"}, + {file = "coverage-7.12.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5ea5a9f7dc8877455b13dd1effd3202e0bca72f6f3ab09f9036b1bcf728f69ac"}, + {file = "coverage-7.12.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fdba9f15849534594f60b47c9a30bc70409b54947319a7c4fd0e8e3d8d2f355d"}, + {file = "coverage-7.12.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a00594770eb715854fb1c57e0dea08cce6720cfbc531accdb9850d7c7770396c"}, + {file = "coverage-7.12.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5560c7e0d82b42eb1951e4f68f071f8017c824ebfd5a6ebe42c60ac16c6c2434"}, + {file = "coverage-7.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d6c2e26b481c9159c2773a37947a9718cfdc58893029cdfb177531793e375cfc"}, + {file = "coverage-7.12.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:6e1a8c066dabcde56d5d9fed6a66bc19a2883a3fe051f0c397a41fc42aedd4cc"}, + {file = "coverage-7.12.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f7ba9da4726e446d8dd8aae5a6cd872511184a5d861de80a86ef970b5dacce3e"}, + {file = "coverage-7.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e0f483ab4f749039894abaf80c2f9e7ed77bbf3c737517fb88c8e8e305896a17"}, + {file = "coverage-7.12.0-cp314-cp314-win32.whl", hash = "sha256:76336c19a9ef4a94b2f8dc79f8ac2da3f193f625bb5d6f51a328cd19bfc19933"}, + {file = "coverage-7.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:7c1059b600aec6ef090721f8f633f60ed70afaffe8ecab85b59df748f24b31fe"}, + {file = "coverage-7.12.0-cp314-cp314-win_arm64.whl", hash = "sha256:172cf3a34bfef42611963e2b661302a8931f44df31629e5b1050567d6b90287d"}, + {file = "coverage-7.12.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:aa7d48520a32cb21c7a9b31f81799e8eaec7239db36c3b670be0fa2403828d1d"}, + {file = "coverage-7.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:90d58ac63bc85e0fb919f14d09d6caa63f35a5512a2205284b7816cafd21bb03"}, + {file = "coverage-7.12.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ca8ecfa283764fdda3eae1bdb6afe58bf78c2c3ec2b2edcb05a671f0bba7b3f9"}, + {file = "coverage-7.12.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:874fe69a0785d96bd066059cd4368022cebbec1a8958f224f0016979183916e6"}, + {file = "coverage-7.12.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5b3c889c0b8b283a24d721a9eabc8ccafcfc3aebf167e4cd0d0e23bf8ec4e339"}, + {file = "coverage-7.12.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8bb5b894b3ec09dcd6d3743229dc7f2c42ef7787dc40596ae04c0edda487371e"}, + {file = "coverage-7.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:79a44421cd5fba96aa57b5e3b5a4d3274c449d4c622e8f76882d76635501fd13"}, + {file = "coverage-7.12.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:33baadc0efd5c7294f436a632566ccc1f72c867f82833eb59820ee37dc811c6f"}, + {file = "coverage-7.12.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:c406a71f544800ef7e9e0000af706b88465f3573ae8b8de37e5f96c59f689ad1"}, + {file = "coverage-7.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e71bba6a40883b00c6d571599b4627f50c360b3d0d02bfc658168936be74027b"}, + {file = "coverage-7.12.0-cp314-cp314t-win32.whl", hash = "sha256:9157a5e233c40ce6613dead4c131a006adfda70e557b6856b97aceed01b0e27a"}, + {file = "coverage-7.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e84da3a0fd233aeec797b981c51af1cabac74f9bd67be42458365b30d11b5291"}, + {file = "coverage-7.12.0-cp314-cp314t-win_arm64.whl", hash = "sha256:01d24af36fedda51c2b1aca56e4330a3710f83b02a5ff3743a6b015ffa7c9384"}, + {file = "coverage-7.12.0-py3-none-any.whl", hash = "sha256:159d50c0b12e060b15ed3d39f87ed43d4f7f7ad40b8a534f4dd331adbb51104a"}, + {file = "coverage-7.12.0.tar.gz", hash = "sha256:fc11e0a4e372cb5f282f16ef90d4a585034050ccda536451901abfb19a57f40c"}, +] + +[package.extras] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +groups = ["main"] +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 = "distlib" +version = "0.4.0" +description = "Distribution utilities" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16"}, + {file = "distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d"}, +] + +[[package]] +name = "filelock" +version = "3.20.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.10" +groups = ["main", "dev"] +files = [ + {file = "filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2"}, + {file = "filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4"}, +] + +[[package]] +name = "fiona" +version = "1.10.1" +description = "Fiona reads and writes spatial data files" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "fiona-1.10.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:6e2a94beebda24e5db8c3573fe36110d474d4a12fac0264a3e083c75e9d63829"}, + {file = "fiona-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc7366f99bdc18ec99441b9e50246fdf5e72923dc9cbb00267b2bf28edd142ba"}, + {file = "fiona-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c32f424b0641c79f4036b96c2e80322fb181b4e415c8cd02d182baef55e6730"}, + {file = "fiona-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:9a67bd88918e87d64168bc9c00d9816d8bb07353594b5ce6c57252979d5dc86e"}, + {file = "fiona-1.10.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:98fe556058b370da07a84f6537c286f87eb4af2343d155fbd3fba5d38ac17ed7"}, + {file = "fiona-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:be29044d4aeebae92944b738160dc5f9afc4cdf04f551d59e803c5b910e17520"}, + {file = "fiona-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94bd3d448f09f85439e4b77c38b9de1aebe3eef24acc72bd631f75171cdfde51"}, + {file = "fiona-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:30594c0cd8682c43fd01e7cdbe000f94540f8fa3b7cb5901e805c88c4ff2058b"}, + {file = "fiona-1.10.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:7338b8c68beb7934bde4ec9f49eb5044e5e484b92d940bc3ec27defdb2b06c67"}, + {file = "fiona-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8c77fcfd3cdb0d3c97237965f8c60d1696a64923deeeb2d0b9810286cbe25911"}, + {file = "fiona-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:537872cbc9bda7fcdf73851c91bc5338fca2b502c4c17049ccecaa13cde1f18f"}, + {file = "fiona-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:41cde2c52c614457e9094ea44b0d30483540789e62fe0fa758c2a2963e980817"}, + {file = "fiona-1.10.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:a00b05935c9900678b2ca660026b39efc4e4b916983915d595964eb381763ae7"}, + {file = "fiona-1.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f78b781d5bcbbeeddf1d52712f33458775dbb9fd1b2a39882c83618348dd730f"}, + {file = "fiona-1.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29ceeb38e3cd30d91d68858d0817a1bb0c4f96340d334db4b16a99edb0902d35"}, + {file = "fiona-1.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:15751c90e29cee1e01fcfedf42ab85987e32f0b593cf98d88ed52199ef5ca623"}, + {file = "fiona-1.10.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:6f1242f872dc33d3b4269dcaebf1838a359f9097e1cc848b0e11367bce010e4d"}, + {file = "fiona-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:65308b7a7e57fcc533de8a5855b0fce798faabc736d1340192dd8673ff61bc4e"}, + {file = "fiona-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:632bc146355af5ff0d77e34ebd1be5072d623b4aedb754b94a3d8c356c4545ac"}, + {file = "fiona-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:b7b4c3c97b1d64a1b3321577e9edaebbd36b64006e278f225f300c497cc87c35"}, + {file = "fiona-1.10.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:b62aa8d5a0981bd33d81c247219b1eaa1e655e0a0682b3a4759fccc40954bb30"}, + {file = "fiona-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4b19cb5bd22443ef439b39239272349023556994242a8f953a0147684e1c47f"}, + {file = "fiona-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa7e7e5ad252ef29905384bf92e7d14dd5374584b525632652c2ab8925304670"}, + {file = "fiona-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:4e82d18acbe55230e9cf8ede2a836d99ea96b7c0cc7d2b8b993e6c9f0ac14dc2"}, + {file = "fiona-1.10.1.tar.gz", hash = "sha256:b00ae357669460c6491caba29c2022ff0acfcbde86a95361ea8ff5cd14a86b68"}, +] + +[package.dependencies] +attrs = ">=19.2.0" +certifi = "*" +click = ">=8.0,<9.0" +click-plugins = ">=1.0" +cligj = ">=0.5" + +[package.extras] +all = ["fiona[calc,s3,test]"] +calc = ["pyparsing", "shapely"] +s3 = ["boto3 (>=1.3.1)"] +test = ["aiohttp", "fiona[s3]", "fsspec", "pytest (>=7)", "pytest-cov", "pytz"] + +[[package]] +name = "fonttools" +version = "4.60.1" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9a52f254ce051e196b8fe2af4634c2d2f02c981756c6464dc192f1b6050b4e28"}, + {file = "fonttools-4.60.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7420a2696a44650120cdd269a5d2e56a477e2bfa9d95e86229059beb1c19e15"}, + {file = "fonttools-4.60.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee0c0b3b35b34f782afc673d503167157094a16f442ace7c6c5e0ca80b08f50c"}, + {file = "fonttools-4.60.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:282dafa55f9659e8999110bd8ed422ebe1c8aecd0dc396550b038e6c9a08b8ea"}, + {file = "fonttools-4.60.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4ba4bd646e86de16160f0fb72e31c3b9b7d0721c3e5b26b9fa2fc931dfdb2652"}, + {file = "fonttools-4.60.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0b0835ed15dd5b40d726bb61c846a688f5b4ce2208ec68779bc81860adb5851a"}, + {file = "fonttools-4.60.1-cp310-cp310-win32.whl", hash = "sha256:1525796c3ffe27bb6268ed2a1bb0dcf214d561dfaf04728abf01489eb5339dce"}, + {file = "fonttools-4.60.1-cp310-cp310-win_amd64.whl", hash = "sha256:268ecda8ca6cb5c4f044b1fb9b3b376e8cd1b361cef275082429dc4174907038"}, + {file = "fonttools-4.60.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7b4c32e232a71f63a5d00259ca3d88345ce2a43295bb049d21061f338124246f"}, + {file = "fonttools-4.60.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3630e86c484263eaac71d117085d509cbcf7b18f677906824e4bace598fb70d2"}, + {file = "fonttools-4.60.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c1015318e4fec75dd4943ad5f6a206d9727adf97410d58b7e32ab644a807914"}, + {file = "fonttools-4.60.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e6c58beb17380f7c2ea181ea11e7db8c0ceb474c9dd45f48e71e2cb577d146a1"}, + {file = "fonttools-4.60.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec3681a0cb34c255d76dd9d865a55f260164adb9fa02628415cdc2d43ee2c05d"}, + {file = "fonttools-4.60.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4b5c37a5f40e4d733d3bbaaef082149bee5a5ea3156a785ff64d949bd1353fa"}, + {file = "fonttools-4.60.1-cp311-cp311-win32.whl", hash = "sha256:398447f3d8c0c786cbf1209711e79080a40761eb44b27cdafffb48f52bcec258"}, + {file = "fonttools-4.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:d066ea419f719ed87bc2c99a4a4bfd77c2e5949cb724588b9dd58f3fd90b92bf"}, + {file = "fonttools-4.60.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7b0c6d57ab00dae9529f3faf187f2254ea0aa1e04215cf2f1a8ec277c96661bc"}, + {file = "fonttools-4.60.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:839565cbf14645952d933853e8ade66a463684ed6ed6c9345d0faf1f0e868877"}, + {file = "fonttools-4.60.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8177ec9676ea6e1793c8a084a90b65a9f778771998eb919d05db6d4b1c0b114c"}, + {file = "fonttools-4.60.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:996a4d1834524adbb423385d5a629b868ef9d774670856c63c9a0408a3063401"}, + {file = "fonttools-4.60.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a46b2f450bc79e06ef3b6394f0c68660529ed51692606ad7f953fc2e448bc903"}, + {file = "fonttools-4.60.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6ec722ee589e89a89f5b7574f5c45604030aa6ae24cb2c751e2707193b466fed"}, + {file = "fonttools-4.60.1-cp312-cp312-win32.whl", hash = "sha256:b2cf105cee600d2de04ca3cfa1f74f1127f8455b71dbad02b9da6ec266e116d6"}, + {file = "fonttools-4.60.1-cp312-cp312-win_amd64.whl", hash = "sha256:992775c9fbe2cf794786fa0ffca7f09f564ba3499b8fe9f2f80bd7197db60383"}, + {file = "fonttools-4.60.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6f68576bb4bbf6060c7ab047b1574a1ebe5c50a17de62830079967b211059ebb"}, + {file = "fonttools-4.60.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:eedacb5c5d22b7097482fa834bda0dafa3d914a4e829ec83cdea2a01f8c813c4"}, + {file = "fonttools-4.60.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b33a7884fabd72bdf5f910d0cf46be50dce86a0362a65cfc746a4168c67eb96c"}, + {file = "fonttools-4.60.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2409d5fb7b55fd70f715e6d34e7a6e4f7511b8ad29a49d6df225ee76da76dd77"}, + {file = "fonttools-4.60.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8651e0d4b3bdeda6602b85fdc2abbefc1b41e573ecb37b6779c4ca50753a199"}, + {file = "fonttools-4.60.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:145daa14bf24824b677b9357c5e44fd8895c2a8f53596e1b9ea3496081dc692c"}, + {file = "fonttools-4.60.1-cp313-cp313-win32.whl", hash = "sha256:2299df884c11162617a66b7c316957d74a18e3758c0274762d2cc87df7bc0272"}, + {file = "fonttools-4.60.1-cp313-cp313-win_amd64.whl", hash = "sha256:a3db56f153bd4c5c2b619ab02c5db5192e222150ce5a1bc10f16164714bc39ac"}, + {file = "fonttools-4.60.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:a884aef09d45ba1206712c7dbda5829562d3fea7726935d3289d343232ecb0d3"}, + {file = "fonttools-4.60.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8a44788d9d91df72d1a5eac49b31aeb887a5f4aab761b4cffc4196c74907ea85"}, + {file = "fonttools-4.60.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e852d9dda9f93ad3651ae1e3bb770eac544ec93c3807888798eccddf84596537"}, + {file = "fonttools-4.60.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:154cb6ee417e417bf5f7c42fe25858c9140c26f647c7347c06f0cc2d47eff003"}, + {file = "fonttools-4.60.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5664fd1a9ea7f244487ac8f10340c4e37664675e8667d6fee420766e0fb3cf08"}, + {file = "fonttools-4.60.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:583b7f8e3c49486e4d489ad1deacfb8d5be54a8ef34d6df824f6a171f8511d99"}, + {file = "fonttools-4.60.1-cp314-cp314-win32.whl", hash = "sha256:66929e2ea2810c6533a5184f938502cfdaea4bc3efb7130d8cc02e1c1b4108d6"}, + {file = "fonttools-4.60.1-cp314-cp314-win_amd64.whl", hash = "sha256:f3d5be054c461d6a2268831f04091dc82753176f6ea06dc6047a5e168265a987"}, + {file = "fonttools-4.60.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:b6379e7546ba4ae4b18f8ae2b9bc5960936007a1c0e30b342f662577e8bc3299"}, + {file = "fonttools-4.60.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9d0ced62b59e0430b3690dbc5373df1c2aa7585e9a8ce38eff87f0fd993c5b01"}, + {file = "fonttools-4.60.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:875cb7764708b3132637f6c5fb385b16eeba0f7ac9fa45a69d35e09b47045801"}, + {file = "fonttools-4.60.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a184b2ea57b13680ab6d5fbde99ccef152c95c06746cb7718c583abd8f945ccc"}, + {file = "fonttools-4.60.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:026290e4ec76583881763fac284aca67365e0be9f13a7fb137257096114cb3bc"}, + {file = "fonttools-4.60.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f0e8817c7d1a0c2eedebf57ef9a9896f3ea23324769a9a2061a80fe8852705ed"}, + {file = "fonttools-4.60.1-cp314-cp314t-win32.whl", hash = "sha256:1410155d0e764a4615774e5c2c6fc516259fe3eca5882f034eb9bfdbee056259"}, + {file = "fonttools-4.60.1-cp314-cp314t-win_amd64.whl", hash = "sha256:022beaea4b73a70295b688f817ddc24ed3e3418b5036ffcd5658141184ef0d0c"}, + {file = "fonttools-4.60.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:122e1a8ada290423c493491d002f622b1992b1ab0b488c68e31c413390dc7eb2"}, + {file = "fonttools-4.60.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a140761c4ff63d0cb9256ac752f230460ee225ccef4ad8f68affc723c88e2036"}, + {file = "fonttools-4.60.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0eae96373e4b7c9e45d099d7a523444e3554360927225c1cdae221a58a45b856"}, + {file = "fonttools-4.60.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:596ecaca36367027d525b3b426d8a8208169d09edcf8c7506aceb3a38bfb55c7"}, + {file = "fonttools-4.60.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2ee06fc57512144d8b0445194c2da9f190f61ad51e230f14836286470c99f854"}, + {file = "fonttools-4.60.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b42d86938e8dda1cd9a1a87a6d82f1818eaf933348429653559a458d027446da"}, + {file = "fonttools-4.60.1-cp39-cp39-win32.whl", hash = "sha256:8b4eb332f9501cb1cd3d4d099374a1e1306783ff95489a1026bde9eb02ccc34a"}, + {file = "fonttools-4.60.1-cp39-cp39-win_amd64.whl", hash = "sha256:7473a8ed9ed09aeaa191301244a5a9dbe46fe0bf54f9d6cd21d83044c3321217"}, + {file = "fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb"}, + {file = "fonttools-4.60.1.tar.gz", hash = "sha256:ef00af0439ebfee806b25f24c8f92109157ff3fac5731dc7867957812e87b8d9"}, +] + +[package.extras] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr ; sys_platform == \"darwin\""] +unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] +woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] + +[[package]] +name = "fsspec" +version = "2025.10.0" +description = "File-system specification" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "fsspec-2025.10.0-py3-none-any.whl", hash = "sha256:7c7712353ae7d875407f97715f0e1ffcc21e33d5b24556cb1e090ae9409ec61d"}, + {file = "fsspec-2025.10.0.tar.gz", hash = "sha256:b6789427626f068f9a83ca4e8a3cc050850b6c0f71f99ddb4f542b8266a26a59"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +dev = ["pre-commit", "ruff (>=0.5)"] +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[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 ; python_version < \"3.14\""] +tqdm = ["tqdm"] + +[[package]] +name = "ftfy" +version = "6.3.1" +description = "Fixes mojibake and other problems with Unicode, after the fact" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "ftfy-6.3.1-py3-none-any.whl", hash = "sha256:7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083"}, + {file = "ftfy-6.3.1.tar.gz", hash = "sha256:9b3c3d90f84fb267fe64d375a07b7f8912d817cf86009ae134aa03e1819506ec"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "geopandas" +version = "1.1.1" +description = "Geographic pandas extensions" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "geopandas-1.1.1-py3-none-any.whl", hash = "sha256:589e61aaf39b19828843df16cb90234e72897e2579be236f10eee0d052ad98e8"}, + {file = "geopandas-1.1.1.tar.gz", hash = "sha256:1745713f64d095c43e72e08e753dbd271678254b24f2e01db8cdb8debe1d293d"}, +] + +[package.dependencies] +numpy = ">=1.24" +packaging = "*" +pandas = ">=2.0.0" +pyogrio = ">=0.7.2" +pyproj = ">=3.5.0" +shapely = ">=2.0.0" + +[package.extras] +all = ["GeoAlchemy2", "SQLAlchemy (>=2.0)", "folium", "geopy", "mapclassify (>=2.5)", "matplotlib (>=3.7)", "psycopg[binary] (>=3.1.0)", "pyarrow (>=10.0.0)", "scipy", "xyzservices"] +dev = ["codecov", "pre-commit", "pytest (>=3.1.0)", "pytest-cov", "pytest-xdist", "ruff"] + +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + +[[package]] +name = "gpxpy" +version = "1.6.2" +description = "GPX file parser and GPS track manipulation library" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "gpxpy-1.6.2-py3-none-any.whl", hash = "sha256:289bc2d80f116c988d0a1e763fda22838f83005573ece2bbc6521817b26fb40a"}, + {file = "gpxpy-1.6.2.tar.gz", hash = "sha256:a72c484b97ec42b80834353b029cc8ee1b79f0ffca1179b2210bb3baf26c01ae"}, +] + +[[package]] +name = "griffe" +version = "1.15.0" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "griffe-1.15.0-py3-none-any.whl", hash = "sha256:6f6762661949411031f5fcda9593f586e6ce8340f0ba88921a0f2ef7a81eb9a3"}, + {file = "griffe-1.15.0.tar.gz", hash = "sha256:7726e3afd6f298fbc3696e67958803e7ac843c1cfe59734b6251a40cdbfb5eea"}, +] + +[package.dependencies] +colorama = ">=0.4" + +[package.extras] +pypi = ["pip (>=24.0)", "platformdirs (>=4.2)", "wheel (>=0.42)"] + +[[package]] +name = "h11" +version = "0.16.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, +] + +[[package]] +name = "hf-xet" +version = "1.2.0" +description = "Fast transfer of large files with the Hugging Face Hub." +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\"" +files = [ + {file = "hf_xet-1.2.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:ceeefcd1b7aed4956ae8499e2199607765fbd1c60510752003b6cc0b8413b649"}, + {file = "hf_xet-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b70218dd548e9840224df5638fdc94bd033552963cfa97f9170829381179c813"}, + {file = "hf_xet-1.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d40b18769bb9a8bc82a9ede575ce1a44c75eb80e7375a01d76259089529b5dc"}, + {file = "hf_xet-1.2.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:cd3a6027d59cfb60177c12d6424e31f4b5ff13d8e3a1247b3a584bf8977e6df5"}, + {file = "hf_xet-1.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6de1fc44f58f6dd937956c8d304d8c2dea264c80680bcfa61ca4a15e7b76780f"}, + {file = "hf_xet-1.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f182f264ed2acd566c514e45da9f2119110e48a87a327ca271027904c70c5832"}, + {file = "hf_xet-1.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:293a7a3787e5c95d7be1857358a9130694a9c6021de3f27fa233f37267174382"}, + {file = "hf_xet-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:10bfab528b968c70e062607f663e21e34e2bba349e8038db546646875495179e"}, + {file = "hf_xet-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2a212e842647b02eb6a911187dc878e79c4aa0aa397e88dd3b26761676e8c1f8"}, + {file = "hf_xet-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30e06daccb3a7d4c065f34fc26c14c74f4653069bb2b194e7f18f17cbe9939c0"}, + {file = "hf_xet-1.2.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:29c8fc913a529ec0a91867ce3d119ac1aac966e098cf49501800c870328cc090"}, + {file = "hf_xet-1.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e159cbfcfbb29f920db2c09ed8b660eb894640d284f102ada929b6e3dc410a"}, + {file = "hf_xet-1.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c91d5ae931510107f148874e9e2de8a16052b6f1b3ca3c1b12f15ccb491390f"}, + {file = "hf_xet-1.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:210d577732b519ac6ede149d2f2f34049d44e8622bf14eb3d63bbcd2d4b332dc"}, + {file = "hf_xet-1.2.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:46740d4ac024a7ca9b22bebf77460ff43332868b661186a8e46c227fdae01848"}, + {file = "hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:27df617a076420d8845bea087f59303da8be17ed7ec0cd7ee3b9b9f579dff0e4"}, + {file = "hf_xet-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3651fd5bfe0281951b988c0facbe726aa5e347b103a675f49a3fa8144c7968fd"}, + {file = "hf_xet-1.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d06fa97c8562fb3ee7a378dd9b51e343bc5bc8190254202c9771029152f5e08c"}, + {file = "hf_xet-1.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4c1428c9ae73ec0939410ec73023c4f842927f39db09b063b9482dac5a3bb737"}, + {file = "hf_xet-1.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a55558084c16b09b5ed32ab9ed38421e2d87cf3f1f89815764d1177081b99865"}, + {file = "hf_xet-1.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:e6584a52253f72c9f52f9e549d5895ca7a471608495c4ecaa6cc73dba2b24d69"}, + {file = "hf_xet-1.2.0.tar.gz", hash = "sha256:a8c27070ca547293b6890c4bf389f713f80e8c478631432962bb7f4bc0bd7d7f"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "httpcore" +version = "1.0.9" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.16" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "huggingface-hub" +version = "1.1.5" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" +optional = false +python-versions = ">=3.9.0" +groups = ["main"] +files = [ + {file = "huggingface_hub-1.1.5-py3-none-any.whl", hash = "sha256:e88ecc129011f37b868586bbcfae6c56868cae80cd56a79d61575426a3aa0d7d"}, + {file = "huggingface_hub-1.1.5.tar.gz", hash = "sha256:40ba5c9a08792d888fde6088920a0a71ab3cd9d5e6617c81a797c657f1fd9968"}, +] + +[package.dependencies] +filelock = "*" +fsspec = ">=2023.5.0" +hf-xet = {version = ">=1.2.0,<2.0.0", markers = "platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"arm64\" or platform_machine == \"aarch64\""} +httpx = ">=0.23.0,<1" +packaging = ">=20.9" +pyyaml = ">=5.1" +shellingham = "*" +tqdm = ">=4.42.1" +typer-slim = "*" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["Jinja2", "Pillow", "authlib (>=1.3.2)", "fastapi", "fastapi", "httpx", "itsdangerous", "jedi", "libcst (>=1.4.0)", "mypy (==1.15.0)", "numpy", "pytest (>=8.4.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "ty", "types-PyYAML", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +dev = ["Jinja2", "Pillow", "authlib (>=1.3.2)", "fastapi", "fastapi", "httpx", "itsdangerous", "jedi", "libcst (>=1.4.0)", "mypy (==1.15.0)", "numpy", "pytest (>=8.4.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "ruff (>=0.9.0)", "soundfile", "ty", "types-PyYAML", "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-xet = ["hf-xet (>=1.1.3,<2.0.0)"] +mcp = ["mcp (>=1.8.0)"] +oauth = ["authlib (>=1.3.2)", "fastapi", "httpx", "itsdangerous"] +quality = ["libcst (>=1.4.0)", "mypy (==1.15.0)", "ruff (>=0.9.0)", "ty"] +testing = ["Jinja2", "Pillow", "authlib (>=1.3.2)", "fastapi", "fastapi", "httpx", "itsdangerous", "jedi", "numpy", "pytest (>=8.4.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures (<16.0)", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["safetensors[torch]", "torch"] +typing = ["types-PyYAML", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] + +[[package]] +name = "identify" +version = "2.6.15" +description = "File identification library for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757"}, + {file = "identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.11" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, + {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "iniconfig" +version = "2.3.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, + {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "joblib" +version = "1.5.2" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "joblib-1.5.2-py3-none-any.whl", hash = "sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241"}, + {file = "joblib-1.5.2.tar.gz", hash = "sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.9" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b4b4d74bda2b8ebf4da5bd42af11d02d04428b2c32846e4c2c93219df8a7987b"}, + {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fb3b8132019ea572f4611d770991000d7f58127560c4889729248eb5852a102f"}, + {file = "kiwisolver-1.4.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84fd60810829c27ae375114cd379da1fa65e6918e1da405f356a775d49a62bcf"}, + {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b78efa4c6e804ecdf727e580dbb9cba85624d2e1c6b5cb059c66290063bd99a9"}, + {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4efec7bcf21671db6a3294ff301d2fc861c31faa3c8740d1a94689234d1b415"}, + {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:90f47e70293fc3688b71271100a1a5453aa9944a81d27ff779c108372cf5567b"}, + {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fdca1def57a2e88ef339de1737a1449d6dbf5fab184c54a1fca01d541317154"}, + {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cf554f21be770f5111a1690d42313e140355e687e05cf82cb23d0a721a64a48"}, + {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1795ac5cd0510207482c3d1d3ed781143383b8cfd36f5c645f3897ce066220"}, + {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ccd09f20ccdbbd341b21a67ab50a119b64a403b09288c27481575105283c1586"}, + {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:540c7c72324d864406a009d72f5d6856f49693db95d1fbb46cf86febef873634"}, + {file = "kiwisolver-1.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:ede8c6d533bc6601a47ad4046080d36b8fc99f81e6f1c17b0ac3c2dc91ac7611"}, + {file = "kiwisolver-1.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:7b4da0d01ac866a57dd61ac258c5607b4cd677f63abaec7b148354d2b2cdd536"}, + {file = "kiwisolver-1.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eb14a5da6dc7642b0f3a18f13654847cd8b7a2550e2645a5bda677862b03ba16"}, + {file = "kiwisolver-1.4.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:39a219e1c81ae3b103643d2aedb90f1ef22650deb266ff12a19e7773f3e5f089"}, + {file = "kiwisolver-1.4.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2405a7d98604b87f3fc28b1716783534b1b4b8510d8142adca34ee0bc3c87543"}, + {file = "kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61"}, + {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1f570ce4d62d718dce3f179ee78dac3b545ac16c0c04bb363b7607a949c0d1"}, + {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb27e7b78d716c591e88e0a09a2139c6577865d7f2e152488c2cc6257f460872"}, + {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:15163165efc2f627eb9687ea5f3a28137217d217ac4024893d753f46bce9de26"}, + {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bdee92c56a71d2b24c33a7d4c2856bd6419d017e08caa7802d2963870e315028"}, + {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:412f287c55a6f54b0650bd9b6dce5aceddb95864a1a90c87af16979d37c89771"}, + {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2c93f00dcba2eea70af2be5f11a830a742fe6b579a1d4e00f47760ef13be247a"}, + {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f117e1a089d9411663a3207ba874f31be9ac8eaa5b533787024dc07aeb74f464"}, + {file = "kiwisolver-1.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2"}, + {file = "kiwisolver-1.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:0ae37737256ba2de764ddc12aed4956460277f00c4996d51a197e72f62f5eec7"}, + {file = "kiwisolver-1.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ac5a486ac389dddcc5bef4f365b6ae3ffff2c433324fb38dd35e3fab7c957999"}, + {file = "kiwisolver-1.4.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2ba92255faa7309d06fe44c3a4a97efe1c8d640c2a79a5ef728b685762a6fd2"}, + {file = "kiwisolver-1.4.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a2899935e724dd1074cb568ce7ac0dce28b2cd6ab539c8e001a8578eb106d14"}, + {file = "kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f6008a4919fdbc0b0097089f67a1eb55d950ed7e90ce2cc3e640abadd2757a04"}, + {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67bb8b474b4181770f926f7b7d2f8c0248cbcb78b660fdd41a47054b28d2a752"}, + {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2327a4a30d3ee07d2fbe2e7933e8a37c591663b96ce42a00bc67461a87d7df77"}, + {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a08b491ec91b1d5053ac177afe5290adacf1f0f6307d771ccac5de30592d198"}, + {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8fc5c867c22b828001b6a38d2eaeb88160bf5783c6cb4a5e440efc981ce286d"}, + {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3b3115b2581ea35bb6d1f24a4c90af37e5d9b49dcff267eeed14c3893c5b86ab"}, + {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858e4c22fb075920b96a291928cb7dea5644e94c0ee4fcd5af7e865655e4ccf2"}, + {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed0fecd28cc62c54b262e3736f8bb2512d8dcfdc2bcf08be5f47f96bf405b145"}, + {file = "kiwisolver-1.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54"}, + {file = "kiwisolver-1.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:2c1a4f57df73965f3f14df20b80ee29e6a7930a57d2d9e8491a25f676e197c60"}, + {file = "kiwisolver-1.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5d0432ccf1c7ab14f9949eec60c5d1f924f17c037e9f8b33352fa05799359b8"}, + {file = "kiwisolver-1.4.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efb3a45b35622bb6c16dbfab491a8f5a391fe0e9d45ef32f4df85658232ca0e2"}, + {file = "kiwisolver-1.4.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a12cf6398e8a0a001a059747a1cbf24705e18fe413bc22de7b3d15c67cffe3f"}, + {file = "kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098"}, + {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed"}, + {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525"}, + {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78"}, + {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b"}, + {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799"}, + {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3"}, + {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c"}, + {file = "kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d"}, + {file = "kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5a0f2724dfd4e3b3ac5a82436a8e6fd16baa7d507117e4279b660fe8ca38a3a1"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b11d6a633e4ed84fc0ddafd4ebfd8ea49b3f25082c04ad12b8315c11d504dc1"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61874cdb0a36016354853593cffc38e56fc9ca5aa97d2c05d3dcf6922cd55a11"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07"}, + {file = "kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c"}, + {file = "kiwisolver-1.4.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9928fe1eb816d11ae170885a74d074f57af3a0d65777ca47e9aeb854a1fba386"}, + {file = "kiwisolver-1.4.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d0005b053977e7b43388ddec89fa567f43d4f6d5c2c0affe57de5ebf290dc552"}, + {file = "kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3"}, + {file = "kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58"}, + {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4"}, + {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df"}, + {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6"}, + {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5"}, + {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf"}, + {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5"}, + {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce"}, + {file = "kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7"}, + {file = "kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d976bbb382b202f71c67f77b0ac11244021cfa3f7dfd9e562eefcea2df711548"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2489e4e5d7ef9a1c300a5e0196e43d9c739f066ef23270607d45aba368b91f2d"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e2ea9f7ab7fbf18fffb1b5434ce7c69a07582f7acc7717720f1d69f3e806f90c"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891"}, + {file = "kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32"}, + {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4d1d9e582ad4d63062d34077a9a1e9f3c34088a2ec5135b1f7190c07cf366527"}, + {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:deed0c7258ceb4c44ad5ec7d9918f9f14fd05b2be86378d86cf50e63d1e7b771"}, + {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a590506f303f512dff6b7f75fd2fd18e16943efee932008fe7140e5fa91d80e"}, + {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e09c2279a4d01f099f52d5c4b3d9e208e91edcbd1a175c9662a8b16e000fece9"}, + {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c9e7cdf45d594ee04d5be1b24dd9d49f3d1590959b2271fb30b5ca2b262c00fb"}, + {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:720e05574713db64c356e86732c0f3c5252818d05f9df320f0ad8380641acea5"}, + {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:17680d737d5335b552994a2008fab4c851bcd7de33094a82067ef3a576ff02fa"}, + {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85b5352f94e490c028926ea567fc569c52ec79ce131dadb968d3853e809518c2"}, + {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:464415881e4801295659462c49461a24fb107c140de781d55518c4b80cb6790f"}, + {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1"}, + {file = "kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d"}, +] + +[[package]] +name = "markdown" +version = "3.10" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "markdown-3.10-py3-none-any.whl", hash = "sha256:b5b99d6951e2e4948d939255596523444c0e677c669700b1d17aa4a8a464cb7c"}, + {file = "markdown-3.10.tar.gz", hash = "sha256:37062d4f2aa4b2b6b32aefb80faa300f82cc790cb949a35b8caede34f2b68c0e"}, +] + +[package.extras] +docs = ["mdx_gh_links (>=0.2)", "mkdocs (>=1.6)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "3.0.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, + {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"}, + {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"}, + {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"}, + {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"}, + {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"}, + {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"}, + {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"}, + {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, +] + +[[package]] +name = "matplotlib" +version = "3.10.7" +description = "Python plotting package" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "matplotlib-3.10.7-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7ac81eee3b7c266dd92cee1cd658407b16c57eed08c7421fa354ed68234de380"}, + {file = "matplotlib-3.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:667ecd5d8d37813a845053d8f5bf110b534c3c9f30e69ebd25d4701385935a6d"}, + {file = "matplotlib-3.10.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc1c51b846aca49a5a8b44fbba6a92d583a35c64590ad9e1e950dc88940a4297"}, + {file = "matplotlib-3.10.7-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a11c2e9e72e7de09b7b72e62f3df23317c888299c875e2b778abf1eda8c0a42"}, + {file = "matplotlib-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f19410b486fdd139885ace124e57f938c1e6a3210ea13dd29cab58f5d4bc12c7"}, + {file = "matplotlib-3.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:b498e9e4022f93de2d5a37615200ca01297ceebbb56fe4c833f46862a490f9e3"}, + {file = "matplotlib-3.10.7-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:53b492410a6cd66c7a471de6c924f6ede976e963c0f3097a3b7abfadddc67d0a"}, + {file = "matplotlib-3.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d9749313deb729f08207718d29c86246beb2ea3fdba753595b55901dee5d2fd6"}, + {file = "matplotlib-3.10.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2222c7ba2cbde7fe63032769f6eb7e83ab3227f47d997a8453377709b7fe3a5a"}, + {file = "matplotlib-3.10.7-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e91f61a064c92c307c5a9dc8c05dc9f8a68f0a3be199d9a002a0622e13f874a1"}, + {file = "matplotlib-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f1851eab59ca082c95df5a500106bad73672645625e04538b3ad0f69471ffcc"}, + {file = "matplotlib-3.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:6516ce375109c60ceec579e699524e9d504cd7578506f01150f7a6bc174a775e"}, + {file = "matplotlib-3.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:b172db79759f5f9bc13ef1c3ef8b9ee7b37b0247f987fbbbdaa15e4f87fd46a9"}, + {file = "matplotlib-3.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a0edb7209e21840e8361e91ea84ea676658aa93edd5f8762793dec77a4a6748"}, + {file = "matplotlib-3.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c380371d3c23e0eadf8ebff114445b9f970aff2010198d498d4ab4c3b41eea4f"}, + {file = "matplotlib-3.10.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d5f256d49fea31f40f166a5e3131235a5d2f4b7f44520b1cf0baf1ce568ccff0"}, + {file = "matplotlib-3.10.7-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11ae579ac83cdf3fb72573bb89f70e0534de05266728740d478f0f818983c695"}, + {file = "matplotlib-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4c14b6acd16cddc3569a2d515cfdd81c7a68ac5639b76548cfc1a9e48b20eb65"}, + {file = "matplotlib-3.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:0d8c32b7ea6fb80b1aeff5a2ceb3fb9778e2759e899d9beff75584714afcc5ee"}, + {file = "matplotlib-3.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:5f3f6d315dcc176ba7ca6e74c7768fb7e4cf566c49cb143f6bc257b62e634ed8"}, + {file = "matplotlib-3.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1d9d3713a237970569156cfb4de7533b7c4eacdd61789726f444f96a0d28f57f"}, + {file = "matplotlib-3.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37a1fea41153dd6ee061d21ab69c9cf2cf543160b1b85d89cd3d2e2a7902ca4c"}, + {file = "matplotlib-3.10.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b3c4ea4948d93c9c29dc01c0c23eef66f2101bf75158c291b88de6525c55c3d1"}, + {file = "matplotlib-3.10.7-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22df30ffaa89f6643206cf13877191c63a50e8f800b038bc39bee9d2d4957632"}, + {file = "matplotlib-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b69676845a0a66f9da30e87f48be36734d6748024b525ec4710be40194282c84"}, + {file = "matplotlib-3.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:744991e0cc863dd669c8dc9136ca4e6e0082be2070b9d793cbd64bec872a6815"}, + {file = "matplotlib-3.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:fba2974df0bf8ce3c995fa84b79cde38326e0f7b5409e7a3a481c1141340bcf7"}, + {file = "matplotlib-3.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:932c55d1fa7af4423422cb6a492a31cbcbdbe68fd1a9a3f545aa5e7a143b5355"}, + {file = "matplotlib-3.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e38c2d581d62ee729a6e144c47a71b3f42fb4187508dbbf4fe71d5612c3433b"}, + {file = "matplotlib-3.10.7-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:786656bb13c237bbcebcd402f65f44dd61ead60ee3deb045af429d889c8dbc67"}, + {file = "matplotlib-3.10.7-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09d7945a70ea43bf9248f4b6582734c2fe726723204a76eca233f24cffc7ef67"}, + {file = "matplotlib-3.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d0b181e9fa8daf1d9f2d4c547527b167cb8838fc587deabca7b5c01f97199e84"}, + {file = "matplotlib-3.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:31963603041634ce1a96053047b40961f7a29eb8f9a62e80cc2c0427aa1d22a2"}, + {file = "matplotlib-3.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:aebed7b50aa6ac698c90f60f854b47e48cd2252b30510e7a1feddaf5a3f72cbf"}, + {file = "matplotlib-3.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d883460c43e8c6b173fef244a2341f7f7c0e9725c7fe68306e8e44ed9c8fb100"}, + {file = "matplotlib-3.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07124afcf7a6504eafcb8ce94091c5898bbdd351519a1beb5c45f7a38c67e77f"}, + {file = "matplotlib-3.10.7-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c17398b709a6cce3d9fdb1595c33e356d91c098cd9486cb2cc21ea2ea418e715"}, + {file = "matplotlib-3.10.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7146d64f561498764561e9cd0ed64fcf582e570fc519e6f521e2d0cfd43365e1"}, + {file = "matplotlib-3.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:90ad854c0a435da3104c01e2c6f0028d7e719b690998a2333d7218db80950722"}, + {file = "matplotlib-3.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:4645fc5d9d20ffa3a39361fcdbcec731382763b623b72627806bf251b6388866"}, + {file = "matplotlib-3.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:9257be2f2a03415f9105c486d304a321168e61ad450f6153d77c69504ad764bb"}, + {file = "matplotlib-3.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1e4bbad66c177a8fdfa53972e5ef8be72a5f27e6a607cec0d8579abd0f3102b1"}, + {file = "matplotlib-3.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d8eb7194b084b12feb19142262165832fc6ee879b945491d1c3d4660748020c4"}, + {file = "matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d41379b05528091f00e1728004f9a8d7191260f3862178b88e8fd770206318"}, + {file = "matplotlib-3.10.7-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4a74f79fafb2e177f240579bc83f0b60f82cc47d2f1d260f422a0627207008ca"}, + {file = "matplotlib-3.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:702590829c30aada1e8cef0568ddbffa77ca747b4d6e36c6d173f66e301f89cc"}, + {file = "matplotlib-3.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:f79d5de970fc90cd5591f60053aecfce1fcd736e0303d9f0bf86be649fa68fb8"}, + {file = "matplotlib-3.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:cb783436e47fcf82064baca52ce748af71725d0352e1d31564cbe9c95df92b9c"}, + {file = "matplotlib-3.10.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5c09cf8f2793f81368f49f118b6f9f937456362bee282eac575cca7f84cda537"}, + {file = "matplotlib-3.10.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:de66744b2bb88d5cd27e80dfc2ec9f0517d0a46d204ff98fe9e5f2864eb67657"}, + {file = "matplotlib-3.10.7-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:53cc80662dd197ece414dd5b66e07370201515a3eaf52e7c518c68c16814773b"}, + {file = "matplotlib-3.10.7-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:15112bcbaef211bd663fa935ec33313b948e214454d949b723998a43357b17b0"}, + {file = "matplotlib-3.10.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d2a959c640cdeecdd2ec3136e8ea0441da59bcaf58d67e9c590740addba2cb68"}, + {file = "matplotlib-3.10.7-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3886e47f64611046bc1db523a09dd0a0a6bed6081e6f90e13806dd1d1d1b5e91"}, + {file = "matplotlib-3.10.7.tar.gz", hash = "sha256:a06ba7e2a2ef9131c79c49e63dad355d2d878413a0376c1727c8b9335ff731c7"}, +] + +[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 = ">=3" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +description = "Project documentation with Markdown." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, + {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +jinja2 = ">=2.11.1" +markdown = ">=3.3.6" +markupsafe = ">=2.0.1" +mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" +packaging = ">=20.5" +pathspec = ">=0.11.1" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "1.4.3" +description = "Automatically link across pages in MkDocs." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "mkdocs_autorefs-1.4.3-py3-none-any.whl", hash = "sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9"}, + {file = "mkdocs_autorefs-1.4.3.tar.gz", hash = "sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75"}, +] + +[package.dependencies] +Markdown = ">=3.3" +markupsafe = ">=2.0.1" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-gen-files" +version = "0.5.0" +description = "MkDocs plugin to programmatically generate documentation pages during the build" +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, + {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3" + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" + +[[package]] +name = "mkdocs-literate-nav" +version = "0.6.2" +description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "mkdocs_literate_nav-0.6.2-py3-none-any.whl", hash = "sha256:0a6489a26ec7598477b56fa112056a5e3a6c15729f0214bea8a4dbc55bd5f630"}, + {file = "mkdocs_literate_nav-0.6.2.tar.gz", hash = "sha256:760e1708aa4be86af81a2b56e82c739d5a8388a0eab1517ecfd8e5aa40810a75"}, +] + +[package.dependencies] +mkdocs = ">=1.4.1" + +[[package]] +name = "mkdocs-material" +version = "9.7.0" +description = "Documentation that simply works" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mkdocs_material-9.7.0-py3-none-any.whl", hash = "sha256:da2866ea53601125ff5baa8aa06404c6e07af3c5ce3d5de95e3b52b80b442887"}, + {file = "mkdocs_material-9.7.0.tar.gz", hash = "sha256:602b359844e906ee402b7ed9640340cf8a474420d02d8891451733b6b02314ec"}, +] + +[package.dependencies] +babel = ">=2.10" +backrefs = ">=5.7.post1" +colorama = ">=0.4" +jinja2 = ">=3.1" +markdown = ">=3.2" +mkdocs = ">=1.6" +mkdocs-material-extensions = ">=1.3" +paginate = ">=0.5" +pygments = ">=2.16" +pymdown-extensions = ">=10.2" +requests = ">=2.26" + +[package.extras] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<3)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<12.0)"] +recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +description = "Extension pack for Python Markdown and MkDocs Material." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, +] + +[[package]] +name = "mkdocstrings" +version = "0.25.2" +description = "Automatic documentation from sources, for MkDocs." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mkdocstrings-0.25.2-py3-none-any.whl", hash = "sha256:9e2cda5e2e12db8bb98d21e3410f3f27f8faab685a24b03b06ba7daa5b92abfc"}, + {file = "mkdocstrings-0.25.2.tar.gz", hash = "sha256:5cf57ad7f61e8be3111a2458b4e49c2029c9cb35525393b179f9c916ca8042dc"}, +] + +[package.dependencies] +click = ">=7.0" +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.4" +mkdocs-autorefs = ">=0.3.1" +platformdirs = ">=2.2.0" +pymdown-extensions = ">=6.3" + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "1.10.9" +description = "A Python handler for mkdocstrings." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mkdocstrings_python-1.10.9-py3-none-any.whl", hash = "sha256:cbe98710a6757dfd4dff79bf36cb9731908fb4c69dd2736b15270ae7a488243d"}, + {file = "mkdocstrings_python-1.10.9.tar.gz", hash = "sha256:f344aaa47e727d8a2dc911e063025e58e2b7fb31a41110ccc3902aa6be7ca196"}, +] + +[package.dependencies] +griffe = ">=0.49" +mkdocs-autorefs = ">=1.0" +mkdocstrings = ">=0.25" + +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +groups = ["main"] +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) ; platform_python_implementation != \"PyPy\""] +tests = ["pytest (>=4.6)"] + +[[package]] +name = "mypy" +version = "1.18.2" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c"}, + {file = "mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e"}, + {file = "mypy-1.18.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448acd386266989ef11662ce3c8011fd2a7b632e0ec7d61a98edd8e27472225b"}, + {file = "mypy-1.18.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f9e171c465ad3901dc652643ee4bffa8e9fef4d7d0eece23b428908c77a76a66"}, + {file = "mypy-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:592ec214750bc00741af1f80cbf96b5013d81486b7bb24cb052382c19e40b428"}, + {file = "mypy-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:7fb95f97199ea11769ebe3638c29b550b5221e997c63b14ef93d2e971606ebed"}, + {file = "mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f"}, + {file = "mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341"}, + {file = "mypy-1.18.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1379451880512ffce14505493bd9fe469e0697543717298242574882cf8cdb8d"}, + {file = "mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86"}, + {file = "mypy-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ca30b50a51e7ba93b00422e486cbb124f1c56a535e20eff7b2d6ab72b3b2e37"}, + {file = "mypy-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:664dc726e67fa54e14536f6e1224bcfce1d9e5ac02426d2326e2bb4e081d1ce8"}, + {file = "mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34"}, + {file = "mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764"}, + {file = "mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893"}, + {file = "mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914"}, + {file = "mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8"}, + {file = "mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074"}, + {file = "mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc"}, + {file = "mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e"}, + {file = "mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986"}, + {file = "mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d"}, + {file = "mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba"}, + {file = "mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544"}, + {file = "mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce"}, + {file = "mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d"}, + {file = "mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c"}, + {file = "mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb"}, + {file = "mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075"}, + {file = "mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf"}, + {file = "mypy-1.18.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25a9c8fb67b00599f839cf472713f54249a62efd53a54b565eb61956a7e3296b"}, + {file = "mypy-1.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2b9c7e284ee20e7598d6f42e13ca40b4928e6957ed6813d1ab6348aa3f47133"}, + {file = "mypy-1.18.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6985ed057513e344e43a26cc1cd815c7a94602fb6a3130a34798625bc2f07b6"}, + {file = "mypy-1.18.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f27105f1525ec024b5c630c0b9f36d5c1cc4d447d61fe51ff4bd60633f47ac"}, + {file = "mypy-1.18.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:030c52d0ea8144e721e49b1f68391e39553d7451f0c3f8a7565b59e19fcb608b"}, + {file = "mypy-1.18.2-cp39-cp39-win_amd64.whl", hash = "sha256:aa5e07ac1a60a253445797e42b8b2963c9675563a94f11291ab40718b016a7a0"}, + {file = "mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e"}, + {file = "mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b"}, +] + +[package.dependencies] +mypy_extensions = ">=1.0.0" +pathspec = ">=0.9.0" +typing_extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, +] + +[[package]] +name = "networkx" +version = "3.5" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.11" +groups = ["main"] +files = [ + {file = "networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec"}, + {file = "networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037"}, +] + +[package.extras] +default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"] +developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"] +test-extras = ["pytest-mpl", "pytest-randomly"] + +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +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 = "nvidia-cublas-cu12" +version = "12.1.3.1" +description = "CUBLAS native runtime libraries" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"}, + {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"}, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.1.105" +description = "CUDA profiling tools runtime libs." +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"}, + {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"}, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.1.105" +description = "NVRTC native runtime libraries" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"}, + {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"}, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.1.105" +description = "CUDA Runtime native Libraries" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"}, + {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"}, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.1.0.70" +description = "cuDNN runtime libraries" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f"}, + {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-win_amd64.whl", hash = "sha256:6278562929433d68365a07a4a1546c237ba2849852c0d4b2262a486e805b977a"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.0.2.54" +description = "CUFFT native runtime libraries" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"}, + {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"}, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.2.106" +description = "CURAND native runtime libraries" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"}, + {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"}, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.4.5.107" +description = "CUDA solver native runtime libraries" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"}, + {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" +nvidia-cusparse-cu12 = "*" +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.1.0.106" +description = "CUSPARSE native runtime libraries" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"}, + {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"}, +] + +[package.dependencies] +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.20.5" +description = "NVIDIA Collective Communication Library (NCCL) Runtime" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1fc150d5c3250b170b29410ba682384b14581db722b2531b0d8d33c595f33d01"}, + {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56"}, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.8.93" +description = "Nvidia JIT LTO Library" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:81ff63371a7ebd6e6451970684f916be2eab07321b73c9d244dc2b4da7f73b88"}, + {file = "nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:adccd7161ace7261e01bb91e44e88da350895c270d23f744f0820c818b7229e7"}, + {file = "nvidia_nvjitlink_cu12-12.8.93-py3-none-win_amd64.whl", hash = "sha256:bd93fbeeee850917903583587f4fc3a4eafa022e34572251368238ab5e6bd67f"}, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.1.105" +description = "NVIDIA Tools Extension" +optional = false +python-versions = ">=3" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +files = [ + {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"}, + {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, +] + +[[package]] +name = "opencv-python-headless" +version = "4.11.0.86" +description = "Wrapper package for OpenCV python bindings." +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "opencv-python-headless-4.11.0.86.tar.gz", hash = "sha256:996eb282ca4b43ec6a3972414de0e2331f5d9cda2b41091a49739c19fb843798"}, + {file = "opencv_python_headless-4.11.0.86-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:48128188ade4a7e517237c8e1e11a9cdf5c282761473383e77beb875bb1e61ca"}, + {file = "opencv_python_headless-4.11.0.86-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:a66c1b286a9de872c343ee7c3553b084244299714ebb50fbdcd76f07ebbe6c81"}, + {file = "opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6efabcaa9df731f29e5ea9051776715b1bdd1845d7c9530065c7951d2a2899eb"}, + {file = "opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e0a27c19dd1f40ddff94976cfe43066fbbe9dfbb2ec1907d66c19caef42a57b"}, + {file = "opencv_python_headless-4.11.0.86-cp37-abi3-win32.whl", hash = "sha256:f447d8acbb0b6f2808da71fddd29c1cdd448d2bc98f72d9bb78a7a898fc9621b"}, + {file = "opencv_python_headless-4.11.0.86-cp37-abi3-win_amd64.whl", hash = "sha256:6c304df9caa7a6a5710b91709dd4786bf20a74d57672b3c31f7033cc638174ca"}, +] + +[package.dependencies] +numpy = {version = ">=1.26.0", markers = "python_version >= \"3.12\""} + +[[package]] +name = "osmnx" +version = "1.9.3" +description = "Download, model, analyze, and visualize street networks and other geospatial features from OpenStreetMap" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "osmnx-1.9.3-py3-none-any.whl", hash = "sha256:ac67bea77b521941af648ef641ae1d006101948d1112475c256ea23ef31b426a"}, + {file = "osmnx-1.9.3.tar.gz", hash = "sha256:22548d86d68d36edff3cf9ab76c45745cda86a4ea0b28442e107d6b42992a426"}, +] + +[package.dependencies] +geopandas = ">=0.12" +networkx = ">=2.5" +numpy = ">=1.20" +pandas = ">=1.1" +requests = ">=2.27" +shapely = ">=2.0" + +[package.extras] +entropy = ["scipy (>=1.5)"] +neighbors = ["scikit-learn (>=0.23)", "scipy (>=1.5)"] +raster = ["gdal", "rasterio (>=1.3)"] +visualization = ["matplotlib (>=3.5)"] + +[[package]] +name = "packaging" +version = "25.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, +] + +[[package]] +name = "paginate" +version = "0.5.7" +description = "Divides large result sets into pages for easier browsing" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, + {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, +] + +[package.extras] +dev = ["pytest", "tox"] +lint = ["black"] + +[[package]] +name = "pandas" +version = "2.3.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, + {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4"}, + {file = "pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151"}, + {file = "pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"}, + {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493"}, + {file = "pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3"}, + {file = "pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9"}, + {file = "pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa"}, + {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"}, +] + +[package.dependencies] +numpy = {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 = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "piexif" +version = "1.1.3" +description = "To simplify exif manipulations with python. Writing, reading, and more..." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +files = [ + {file = "piexif-1.1.3-py2.py3-none-any.whl", hash = "sha256:3bc435d171720150b81b15d27e05e54b8abbde7b4242cddd81ef160d283108b6"}, + {file = "piexif-1.1.3.zip", hash = "sha256:83cb35c606bf3a1ea1a8f0a25cb42cf17e24353fd82e87ae3884e74a302a5f1b"}, +] + +[[package]] +name = "pillow" +version = "10.4.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +groups = ["main"] +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 ; python_version < \"3.10\""] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.5.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, + {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, +] + +[package.extras] +docs = ["furo (>=2025.9.25)", "proselint (>=0.14)", "sphinx (>=8.2.3)", "sphinx-autodoc-typehints (>=3.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.4.2)", "pytest-cov (>=7)", "pytest-mock (>=3.15.1)"] +type = ["mypy (>=1.18.2)"] + +[[package]] +name = "pluggy" +version = "1.6.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["coverage", "pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "3.8.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, + {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "py360convert" +version = "0.1.0" +description = "Convertion between cubemap and equirectangular and also to perspective planar." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "py360convert-0.1.0.tar.gz", hash = "sha256:ffde46646db828119ca7e23da68c0e25ccf3c9c7295c619aef8a29ba86af7e55"}, +] + +[package.dependencies] +numpy = "*" +scipy = "*" + +[[package]] +name = "pydeck" +version = "0.9.1" +description = "Widget for deck.gl maps" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pydeck-0.9.1-py2.py3-none-any.whl", hash = "sha256:b3f75ba0d273fc917094fa61224f3f6076ca8752b93d46faf3bcfd9f9d59b038"}, + {file = "pydeck-0.9.1.tar.gz", hash = "sha256:f74475ae637951d63f2ee58326757f8d4f9cd9f2a457cf42950715003e2cb605"}, +] + +[package.dependencies] +jinja2 = ">=2.10.1" +numpy = ">=1.16.4" + +[package.extras] +carto = ["pydeck-carto"] +jupyter = ["ipykernel (>=5.1.2) ; python_version >= \"3.4\"", "ipython (>=5.8.0) ; python_version < \"3.4\"", "ipywidgets (>=7,<8)", "traitlets (>=4.3.2)"] + +[[package]] +name = "pygments" +version = "2.19.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, + {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pymdown-extensions" +version = "10.17.1" +description = "Extension pack for Python Markdown." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pymdown_extensions-10.17.1-py3-none-any.whl", hash = "sha256:1f160209c82eecbb5d8a0d8f89a4d9bd6bdcbde9a8537761844cfc57ad5cd8a6"}, + {file = "pymdown_extensions-10.17.1.tar.gz", hash = "sha256:60d05fe55e7fb5a1e4740fc575facad20dc6ee3a748e8d3d36ba44142e75ce03"}, +] + +[package.dependencies] +markdown = ">=3.6" +pyyaml = "*" + +[package.extras] +extra = ["pygments (>=2.19.1)"] + +[[package]] +name = "pyogrio" +version = "0.9.0" +description = "Vectorized spatial vector file format I/O using GDAL/OGR" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pyogrio-0.9.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:1a495ca4fb77c69595747dd688f8f17bb7d2ea9cd86603aa71c7fc98cc8b4174"}, + {file = "pyogrio-0.9.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:6dc94a67163218581c7df275223488ac9b31dc582ccd756da607c3338908566c"}, + {file = "pyogrio-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e38c3c6d37cf2cc969407e4d051dcb507cfd948eb26c7b0840c4f7d7d4a71bd4"}, + {file = "pyogrio-0.9.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:f47c9b6818cc0f420015b672d5dcc488530a5ee63e5ba35a184957b21ea3922a"}, + {file = "pyogrio-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb04bd80964428491951766452f0071b0bc37c7d38c45ef02502dbd83e5d74a0"}, + {file = "pyogrio-0.9.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f5d80eb846be4fc4e642cbedc1ed0c143e8d241653382ecc76a7620bbd2a5c3a"}, + {file = "pyogrio-0.9.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:2f2ec57ab74785db9c2bf47c0a6731e5175595a13f8253f06fa84136adb310a9"}, + {file = "pyogrio-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a289584da6df7ca318947301fe0ba9177e7f863f63110e087c80ac5f3658de8"}, + {file = "pyogrio-0.9.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:13642608a1cd67797ae8b5d792b0518d8ef3eb76506c8232ab5eaa1ea1159dff"}, + {file = "pyogrio-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:9440466c0211ac81f3417f274da5903f15546b486f76b2f290e74a56aaf0e737"}, + {file = "pyogrio-0.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2e98913fa183f7597c609e774820a149e9329fd2a0f8d33978252fbd00ae87e6"}, + {file = "pyogrio-0.9.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:f8bf193269ea9d347ac3ddada960a59f1ab2e4a5c009be95dc70e6505346b2fc"}, + {file = "pyogrio-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f964002d445521ad5b8e732a6b5ef0e2d2be7fe566768e5075c1d71398da64a"}, + {file = "pyogrio-0.9.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:083351b258b3e08b6c6085dac560bd321b68de5cb4a66229095da68d5f3d696b"}, + {file = "pyogrio-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:796e4f6a4e769b2eb6fea9a10546ea4bdee16182d1e29802b4d6349363c3c1d7"}, + {file = "pyogrio-0.9.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:7fcafed24371fe6e23bcf5abebbb29269f8d79915f1dd818ac85453657ea714a"}, + {file = "pyogrio-0.9.0-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:30cbeeaedb9bced7012487e7438919aa0c7dfba18ac3d4315182b46eb3139b9d"}, + {file = "pyogrio-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4da0b9deb380bd9a200fee13182c4f95b02b4c554c923e2e0032f32aaf1439ed"}, + {file = "pyogrio-0.9.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4e0f90a6c3771ee1f1fea857778b4b6a1b64000d851b819f435f9091b3c38c60"}, + {file = "pyogrio-0.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:959022f3ad04053f8072dc9a2ad110c46edd9e4f92352061ba835fc91df3ca96"}, + {file = "pyogrio-0.9.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:2829615cf58b1b24a9f96fea42abedaa1a800dd351c67374cc2f6341138608f3"}, + {file = "pyogrio-0.9.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:17420febc17651876d5140b54b24749aa751d482b5f9ef6267b8053e6e962876"}, + {file = "pyogrio-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a2fcaa269031dbbc8ebd91243c6452c5d267d6df939c008ab7533413c9cf92d"}, + {file = "pyogrio-0.9.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:019731a856a9abfe909e86f50eb13f8362f6742337caf757c54b7c8acfe75b89"}, + {file = "pyogrio-0.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:d668cb10f2bf6ccd7c402f91e8b06290722dd09dbe265ae95b2c13db29ebeba0"}, + {file = "pyogrio-0.9.0.tar.gz", hash = "sha256:6a6fa2e8cf95b3d4a7c0fac48bce6e5037579e28d3eb33b53349d6e11f15e5a8"}, +] + +[package.dependencies] +certifi = "*" +numpy = "*" +packaging = "*" + +[package.extras] +benchmark = ["pytest-benchmark"] +dev = ["Cython"] +geopandas = ["geopandas"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "pyparsing" +version = "3.2.5" +description = "pyparsing - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e"}, + {file = "pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyproj" +version = "3.7.2" +description = "Python interface to PROJ (cartographic projections and coordinate transformations library)" +optional = false +python-versions = ">=3.11" +groups = ["main"] +files = [ + {file = "pyproj-3.7.2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:2514d61f24c4e0bb9913e2c51487ecdaeca5f8748d8313c933693416ca41d4d5"}, + {file = "pyproj-3.7.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8693ca3892d82e70de077701ee76dd13d7bca4ae1c9d1e739d72004df015923a"}, + {file = "pyproj-3.7.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5e26484d80fea56273ed1555abaea161e9661d81a6c07815d54b8e883d4ceb25"}, + {file = "pyproj-3.7.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:281cb92847814e8018010c48b4069ff858a30236638631c1a91dd7bfa68f8a8a"}, + {file = "pyproj-3.7.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9c8577f0b7bb09118ec2e57e3babdc977127dd66326d6c5d755c76b063e6d9dc"}, + {file = "pyproj-3.7.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a23f59904fac3a5e7364b3aa44d288234af267ca041adb2c2b14a903cd5d3ac5"}, + {file = "pyproj-3.7.2-cp311-cp311-win32.whl", hash = "sha256:f2af4ed34b2cf3e031a2d85b067a3ecbd38df073c567e04b52fa7a0202afde8a"}, + {file = "pyproj-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:0b7cb633565129677b2a183c4d807c727d1c736fcb0568a12299383056e67433"}, + {file = "pyproj-3.7.2-cp311-cp311-win_arm64.whl", hash = "sha256:38b08d85e3a38e455625b80e9eb9f78027c8e2649a21dec4df1f9c3525460c71"}, + {file = "pyproj-3.7.2-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:0a9bb26a6356fb5b033433a6d1b4542158fb71e3c51de49b4c318a1dff3aeaab"}, + {file = "pyproj-3.7.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:567caa03021178861fad27fabde87500ec6d2ee173dd32f3e2d9871e40eebd68"}, + {file = "pyproj-3.7.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c203101d1dc3c038a56cff0447acc515dd29d6e14811406ac539c21eed422b2a"}, + {file = "pyproj-3.7.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1edc34266c0c23ced85f95a1ee8b47c9035eae6aca5b6b340327250e8e281630"}, + {file = "pyproj-3.7.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aa9f26c21bc0e2dc3d224cb1eb4020cf23e76af179a7c66fea49b828611e4260"}, + {file = "pyproj-3.7.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9428b318530625cb389b9ddc9c51251e172808a4af79b82809376daaeabe5e9"}, + {file = "pyproj-3.7.2-cp312-cp312-win32.whl", hash = "sha256:b3d99ed57d319da042f175f4554fc7038aa4bcecc4ac89e217e350346b742c9d"}, + {file = "pyproj-3.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:11614a054cd86a2ed968a657d00987a86eeb91fdcbd9ad3310478685dc14a128"}, + {file = "pyproj-3.7.2-cp312-cp312-win_arm64.whl", hash = "sha256:509a146d1398bafe4f53273398c3bb0b4732535065fa995270e52a9d3676bca3"}, + {file = "pyproj-3.7.2-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:19466e529b1b15eeefdf8ff26b06fa745856c044f2f77bf0edbae94078c1dfa1"}, + {file = "pyproj-3.7.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:c79b9b84c4a626c5dc324c0d666be0bfcebd99f7538d66e8898c2444221b3da7"}, + {file = "pyproj-3.7.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ceecf374cacca317bc09e165db38ac548ee3cad07c3609442bd70311c59c21aa"}, + {file = "pyproj-3.7.2-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5141a538ffdbe4bfd157421828bb2e07123a90a7a2d6f30fa1462abcfb5ce681"}, + {file = "pyproj-3.7.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f000841e98ea99acbb7b8ca168d67773b0191de95187228a16110245c5d954d5"}, + {file = "pyproj-3.7.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8115faf2597f281a42ab608ceac346b4eb1383d3b45ab474fd37341c4bf82a67"}, + {file = "pyproj-3.7.2-cp313-cp313-win32.whl", hash = "sha256:f18c0579dd6be00b970cb1a6719197fceecc407515bab37da0066f0184aafdf3"}, + {file = "pyproj-3.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:bb41c29d5f60854b1075853fe80c58950b398d4ebb404eb532536ac8d2834ed7"}, + {file = "pyproj-3.7.2-cp313-cp313-win_arm64.whl", hash = "sha256:2b617d573be4118c11cd96b8891a0b7f65778fa7733ed8ecdb297a447d439100"}, + {file = "pyproj-3.7.2-cp313-cp313t-macosx_13_0_x86_64.whl", hash = "sha256:d27b48f0e81beeaa2b4d60c516c3a1cfbb0c7ff6ef71256d8e9c07792f735279"}, + {file = "pyproj-3.7.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:55a3610d75023c7b1c6e583e48ef8f62918e85a2ae81300569d9f104d6684bb6"}, + {file = "pyproj-3.7.2-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:8d7349182fa622696787cc9e195508d2a41a64765da9b8a6bee846702b9e6220"}, + {file = "pyproj-3.7.2-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:d230b186eb876ed4f29a7c5ee310144c3a0e44e89e55f65fb3607e13f6db337c"}, + {file = "pyproj-3.7.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:237499c7862c578d0369e2b8ac56eec550e391a025ff70e2af8417139dabb41c"}, + {file = "pyproj-3.7.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8c225f5978abd506fd9a78eaaf794435e823c9156091cabaab5374efb29d7f69"}, + {file = "pyproj-3.7.2-cp313-cp313t-win32.whl", hash = "sha256:2da731876d27639ff9d2d81c151f6ab90a1546455fabd93368e753047be344a2"}, + {file = "pyproj-3.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:f54d91ae18dd23b6c0ab48126d446820e725419da10617d86a1b69ada6d881d3"}, + {file = "pyproj-3.7.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fc52ba896cfc3214dc9f9ca3c0677a623e8fdd096b257c14a31e719d21ff3fdd"}, + {file = "pyproj-3.7.2-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:2aaa328605ace41db050d06bac1adc11f01b71fe95c18661497763116c3a0f02"}, + {file = "pyproj-3.7.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:35dccbce8201313c596a970fde90e33605248b66272595c061b511c8100ccc08"}, + {file = "pyproj-3.7.2-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:25b0b7cb0042444c29a164b993c45c1b8013d6c48baa61dc1160d834a277e83b"}, + {file = "pyproj-3.7.2-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:85def3a6388e9ba51f964619aa002a9d2098e77c6454ff47773bb68871024281"}, + {file = "pyproj-3.7.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b1bccefec3875ab81eabf49059e2b2ea77362c178b66fd3528c3e4df242f1516"}, + {file = "pyproj-3.7.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d5371ca114d6990b675247355a801925814eca53e6c4b2f1b5c0a956336ee36e"}, + {file = "pyproj-3.7.2-cp314-cp314-win32.whl", hash = "sha256:77f066626030f41be543274f5ac79f2a511fe89860ecd0914f22131b40a0ec25"}, + {file = "pyproj-3.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:5a964da1696b8522806f4276ab04ccfff8f9eb95133a92a25900697609d40112"}, + {file = "pyproj-3.7.2-cp314-cp314-win_arm64.whl", hash = "sha256:e258ab4dbd3cf627809067c0ba8f9884ea76c8e5999d039fb37a1619c6c3e1f6"}, + {file = "pyproj-3.7.2-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:bbbac2f930c6d266f70ec75df35ef851d96fdb3701c674f42fd23a9314573b37"}, + {file = "pyproj-3.7.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:b7544e0a3d6339dc9151e9c8f3ea62a936ab7cc446a806ec448bbe86aebb979b"}, + {file = "pyproj-3.7.2-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:f7f5133dca4c703e8acadf6f30bc567d39a42c6af321e7f81975c2518f3ed357"}, + {file = "pyproj-3.7.2-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:5aff3343038d7426aa5076f07feb88065f50e0502d1b0d7c22ddfdd2c75a3f81"}, + {file = "pyproj-3.7.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b0552178c61f2ac1c820d087e8ba6e62b29442debddbb09d51c4bf8acc84d888"}, + {file = "pyproj-3.7.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:47d87db2d2c436c5fd0409b34d70bb6cdb875cca2ebe7a9d1c442367b0ab8d59"}, + {file = "pyproj-3.7.2-cp314-cp314t-win32.whl", hash = "sha256:c9b6f1d8ad3e80a0ee0903a778b6ece7dca1d1d40f6d114ae01bc8ddbad971aa"}, + {file = "pyproj-3.7.2-cp314-cp314t-win_amd64.whl", hash = "sha256:1914e29e27933ba6f9822663ee0600f169014a2859f851c054c88cf5ea8a333c"}, + {file = "pyproj-3.7.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d9d25bae416a24397e0d85739f84d323b55f6511e45a522dd7d7eae70d10c7e4"}, + {file = "pyproj-3.7.2.tar.gz", hash = "sha256:39a0cf1ecc7e282d1d30f36594ebd55c9fae1fda8a2622cee5d100430628f88c"}, +] + +[package.dependencies] +certifi = "*" + +[[package]] +name = "pyside6" +version = "6.11.0" +description = "Python bindings for the Qt cross-platform application and UI framework" +optional = false +python-versions = "<3.15,>=3.10" +groups = ["main"] +files = [ + {file = "pyside6-6.11.0-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:1f2735dc4f2bd4ec452ae50502c8a22128bba0aced35358a2bbc58384b820c6f"}, + {file = "pyside6-6.11.0-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c642e2d25704ca746fd37f56feacf25c5aecc4cd40bef23d18eec81f87d9dc00"}, + {file = "pyside6-6.11.0-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:267b344c73580ac938ca63c611881fb42a3922ebfe043e271005f4f06c372c4e"}, + {file = "pyside6-6.11.0-cp310-abi3-win_amd64.whl", hash = "sha256:9092cb002ca43c64006afb2e0d0f6f51aef17aa737c33a45e502326a081ddcbc"}, + {file = "pyside6-6.11.0-cp310-abi3-win_arm64.whl", hash = "sha256:b15f39acc2b8f46251a630acad0d97f9a0a0461f2baffcd66d7adfada8eb641e"}, +] + +[package.dependencies] +PySide6_Addons = "6.11.0" +PySide6_Essentials = "6.11.0" +shiboken6 = "6.11.0" + +[[package]] +name = "pyside6-addons" +version = "6.11.0" +description = "Python bindings for the Qt cross-platform application and UI framework (Addons)" +optional = false +python-versions = "<3.15,>=3.10" +groups = ["main"] +files = [ + {file = "pyside6_addons-6.11.0-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:d5eaa4643302e3a0fa94c5766234bee4073d7d5ab9c2b7fd222692a176faf182"}, + {file = "pyside6_addons-6.11.0-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:ac6fe3d4ef4497dde3efc5e896b0acd53ff6c93be4bf485f045690f919419f35"}, + {file = "pyside6_addons-6.11.0-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:8ffb40222456078930816ebcac2f2511716d2acbc11716dd5acc5c365179a753"}, + {file = "pyside6_addons-6.11.0-cp310-abi3-win_amd64.whl", hash = "sha256:413e6121c24f5ffdce376298059eddecff74aa6d638e94e0f6015b33d29b889e"}, + {file = "pyside6_addons-6.11.0-cp310-abi3-win_arm64.whl", hash = "sha256:aaaee83385977a0fe134b2f4fbfb92b45a880d5b656e4d90a708eef10b1b6de8"}, +] + +[package.dependencies] +PySide6_Essentials = "6.11.0" +shiboken6 = "6.11.0" + +[[package]] +name = "pyside6-essentials" +version = "6.11.0" +description = "Python bindings for the Qt cross-platform application and UI framework (Essentials)" +optional = false +python-versions = "<3.15,>=3.10" +groups = ["main"] +files = [ + {file = "pyside6_essentials-6.11.0-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:85d6ca87ef35fa6565d385ede72ae48420dd3f63113929d10fc800f6b0360e01"}, + {file = "pyside6_essentials-6.11.0-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:dc20e7afd5fc6fe51297db91cef997ce60844be578f7a49fc61b7ab9657a8849"}, + {file = "pyside6_essentials-6.11.0-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:4854cb0a1b061e7a576d8fb7bb7cf9f49540d558b1acb7df0742a7afefe61e4e"}, + {file = "pyside6_essentials-6.11.0-cp310-abi3-win_amd64.whl", hash = "sha256:3b3362882ad9389357a80504e600180006a957731fec05786fced7b038461fdf"}, + {file = "pyside6_essentials-6.11.0-cp310-abi3-win_arm64.whl", hash = "sha256:81ca603dbf21bc39f89bb42db215c25ebe0c879a1a4c387625c321d2730ec187"}, +] + +[package.dependencies] +shiboken6 = "6.11.0" + +[[package]] +name = "pytest" +version = "8.4.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79"}, + {file = "pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"}, +] + +[package.dependencies] +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +iniconfig = ">=1" +packaging = ">=20" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "5.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[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" +groups = ["main", "dev"] +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 = "pytokens" +version = "0.3.0" +description = "A Fast, spec compliant Python 3.14+ tokenizer that runs on older Pythons." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pytokens-0.3.0-py3-none-any.whl", hash = "sha256:95b2b5eaf832e469d141a378872480ede3f251a5a5041b8ec6e581d3ac71bbf3"}, + {file = "pytokens-0.3.0.tar.gz", hash = "sha256:2f932b14ed08de5fcf0b391ace2642f858f1394c0857202959000b68ed7a458a"}, +] + +[package.extras] +dev = ["black", "build", "mypy", "pytest", "pytest-cov", "setuptools", "tox", "twine", "wheel"] + +[[package]] +name = "pytz" +version = "2025.2" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, + {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"}, + {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"}, + {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"}, + {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"}, + {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, + {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"}, + {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"}, + {file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"}, + {file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"}, + {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, +] + +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +description = "A custom YAML tag for referencing environment variables in YAML files." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04"}, + {file = "pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff"}, +] + +[package.dependencies] +pyyaml = "*" + +[[package]] +name = "regex" +version = "2025.11.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "regex-2025.11.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2b441a4ae2c8049106e8b39973bfbddfb25a179dda2bdb99b0eeb60c40a6a3af"}, + {file = "regex-2025.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2fa2eed3f76677777345d2f81ee89f5de2f5745910e805f7af7386a920fa7313"}, + {file = "regex-2025.11.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8b4a27eebd684319bdf473d39f1d79eed36bf2cd34bd4465cdb4618d82b3d56"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cf77eac15bd264986c4a2c63353212c095b40f3affb2bc6b4ef80c4776c1a28"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b7f9ee819f94c6abfa56ec7b1dbab586f41ebbdc0a57e6524bd5e7f487a878c7"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:838441333bc90b829406d4a03cb4b8bf7656231b84358628b0406d803931ef32"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cfe6d3f0c9e3b7e8c0c694b24d25e677776f5ca26dce46fd6b0489f9c8339391"}, + {file = "regex-2025.11.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2ab815eb8a96379a27c3b6157fcb127c8f59c36f043c1678110cea492868f1d5"}, + {file = "regex-2025.11.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:728a9d2d173a65b62bdc380b7932dd8e74ed4295279a8fe1021204ce210803e7"}, + {file = "regex-2025.11.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:509dc827f89c15c66a0c216331260d777dd6c81e9a4e4f830e662b0bb296c313"}, + {file = "regex-2025.11.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:849202cd789e5f3cf5dcc7822c34b502181b4824a65ff20ce82da5524e45e8e9"}, + {file = "regex-2025.11.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b6f78f98741dcc89607c16b1e9426ee46ce4bf31ac5e6b0d40e81c89f3481ea5"}, + {file = "regex-2025.11.3-cp310-cp310-win32.whl", hash = "sha256:149eb0bba95231fb4f6d37c8f760ec9fa6fabf65bab555e128dde5f2475193ec"}, + {file = "regex-2025.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:ee3a83ce492074c35a74cc76cf8235d49e77b757193a5365ff86e3f2f93db9fd"}, + {file = "regex-2025.11.3-cp310-cp310-win_arm64.whl", hash = "sha256:38af559ad934a7b35147716655d4a2f79fcef2d695ddfe06a06ba40ae631fa7e"}, + {file = "regex-2025.11.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eadade04221641516fa25139273505a1c19f9bf97589a05bc4cfcd8b4a618031"}, + {file = "regex-2025.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:feff9e54ec0dd3833d659257f5c3f5322a12eee58ffa360984b716f8b92983f4"}, + {file = "regex-2025.11.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3b30bc921d50365775c09a7ed446359e5c0179e9e2512beec4a60cbcef6ddd50"}, + {file = "regex-2025.11.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f99be08cfead2020c7ca6e396c13543baea32343b7a9a5780c462e323bd8872f"}, + {file = "regex-2025.11.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6dd329a1b61c0ee95ba95385fb0c07ea0d3fe1a21e1349fa2bec272636217118"}, + {file = "regex-2025.11.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c5238d32f3c5269d9e87be0cf096437b7622b6920f5eac4fd202468aaeb34d2"}, + {file = "regex-2025.11.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10483eefbfb0adb18ee9474498c9a32fcf4e594fbca0543bb94c48bac6183e2e"}, + {file = "regex-2025.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:78c2d02bb6e1da0720eedc0bad578049cad3f71050ef8cd065ecc87691bed2b0"}, + {file = "regex-2025.11.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e6b49cd2aad93a1790ce9cffb18964f6d3a4b0b3dbdbd5de094b65296fce6e58"}, + {file = "regex-2025.11.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:885b26aa3ee56433b630502dc3d36ba78d186a00cc535d3806e6bfd9ed3c70ab"}, + {file = "regex-2025.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd76a9f58e6a00f8772e72cff8ebcff78e022be95edf018766707c730593e1e"}, + {file = "regex-2025.11.3-cp311-cp311-win32.whl", hash = "sha256:3e816cc9aac1cd3cc9a4ec4d860f06d40f994b5c7b4d03b93345f44e08cc68bf"}, + {file = "regex-2025.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:087511f5c8b7dfbe3a03f5d5ad0c2a33861b1fc387f21f6f60825a44865a385a"}, + {file = "regex-2025.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:1ff0d190c7f68ae7769cd0313fe45820ba07ffebfddfaa89cc1eb70827ba0ddc"}, + {file = "regex-2025.11.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41"}, + {file = "regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:22b29dda7e1f7062a52359fca6e58e548e28c6686f205e780b02ad8ef710de36"}, + {file = "regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a91e4a29938bc1a082cc28fdea44be420bf2bebe2665343029723892eb073e1"}, + {file = "regex-2025.11.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08b884f4226602ad40c5d55f52bf91a9df30f513864e0054bad40c0e9cf1afb7"}, + {file = "regex-2025.11.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e0b11b2b2433d1c39c7c7a30e3f3d0aeeea44c2a8d0bae28f6b95f639927a69"}, + {file = "regex-2025.11.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87eb52a81ef58c7ba4d45c3ca74e12aa4b4e77816f72ca25258a85b3ea96cb48"}, + {file = "regex-2025.11.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a12ab1f5c29b4e93db518f5e3872116b7e9b1646c9f9f426f777b50d44a09e8c"}, + {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7521684c8c7c4f6e88e35ec89680ee1aa8358d3f09d27dfbdf62c446f5d4c695"}, + {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7fe6e5440584e94cc4b3f5f4d98a25e29ca12dccf8873679a635638349831b98"}, + {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8e026094aa12b43f4fd74576714e987803a315c76edb6b098b9809db5de58f74"}, + {file = "regex-2025.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:435bbad13e57eb5606a68443af62bed3556de2f46deb9f7d4237bc2f1c9fb3a0"}, + {file = "regex-2025.11.3-cp312-cp312-win32.whl", hash = "sha256:3839967cf4dc4b985e1570fd8d91078f0c519f30491c60f9ac42a8db039be204"}, + {file = "regex-2025.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:e721d1b46e25c481dc5ded6f4b3f66c897c58d2e8cfdf77bbced84339108b0b9"}, + {file = "regex-2025.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:64350685ff08b1d3a6fff33f45a9ca183dc1d58bbfe4981604e70ec9801bbc26"}, + {file = "regex-2025.11.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c1e448051717a334891f2b9a620fe36776ebf3dd8ec46a0b877c8ae69575feb4"}, + {file = "regex-2025.11.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9b5aca4d5dfd7fbfbfbdaf44850fcc7709a01146a797536a8f84952e940cca76"}, + {file = "regex-2025.11.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:04d2765516395cf7dda331a244a3282c0f5ae96075f728629287dfa6f76ba70a"}, + {file = "regex-2025.11.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d9903ca42bfeec4cebedba8022a7c97ad2aab22e09573ce9976ba01b65e4361"}, + {file = "regex-2025.11.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:639431bdc89d6429f6721625e8129413980ccd62e9d3f496be618a41d205f160"}, + {file = "regex-2025.11.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f117efad42068f9715677c8523ed2be1518116d1c49b1dd17987716695181efe"}, + {file = "regex-2025.11.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4aecb6f461316adf9f1f0f6a4a1a3d79e045f9b71ec76055a791affa3b285850"}, + {file = "regex-2025.11.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3b3a5f320136873cc5561098dfab677eea139521cb9a9e8db98b7e64aef44cbc"}, + {file = "regex-2025.11.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:75fa6f0056e7efb1f42a1c34e58be24072cb9e61a601340cc1196ae92326a4f9"}, + {file = "regex-2025.11.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:dbe6095001465294f13f1adcd3311e50dd84e5a71525f20a10bd16689c61ce0b"}, + {file = "regex-2025.11.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:454d9b4ae7881afbc25015b8627c16d88a597479b9dea82b8c6e7e2e07240dc7"}, + {file = "regex-2025.11.3-cp313-cp313-win32.whl", hash = "sha256:28ba4d69171fc6e9896337d4fc63a43660002b7da53fc15ac992abcf3410917c"}, + {file = "regex-2025.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:bac4200befe50c670c405dc33af26dad5a3b6b255dd6c000d92fe4629f9ed6a5"}, + {file = "regex-2025.11.3-cp313-cp313-win_arm64.whl", hash = "sha256:2292cd5a90dab247f9abe892ac584cb24f0f54680c73fcb4a7493c66c2bf2467"}, + {file = "regex-2025.11.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:1eb1ebf6822b756c723e09f5186473d93236c06c579d2cc0671a722d2ab14281"}, + {file = "regex-2025.11.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1e00ec2970aab10dc5db34af535f21fcf32b4a31d99e34963419636e2f85ae39"}, + {file = "regex-2025.11.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a4cb042b615245d5ff9b3794f56be4138b5adc35a4166014d31d1814744148c7"}, + {file = "regex-2025.11.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44f264d4bf02f3176467d90b294d59bf1db9fe53c141ff772f27a8b456b2a9ed"}, + {file = "regex-2025.11.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7be0277469bf3bd7a34a9c57c1b6a724532a0d235cd0dc4e7f4316f982c28b19"}, + {file = "regex-2025.11.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0d31e08426ff4b5b650f68839f5af51a92a5b51abd8554a60c2fbc7c71f25d0b"}, + {file = "regex-2025.11.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e43586ce5bd28f9f285a6e729466841368c4a0353f6fd08d4ce4630843d3648a"}, + {file = "regex-2025.11.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0f9397d561a4c16829d4e6ff75202c1c08b68a3bdbfe29dbfcdb31c9830907c6"}, + {file = "regex-2025.11.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:dd16e78eb18ffdb25ee33a0682d17912e8cc8a770e885aeee95020046128f1ce"}, + {file = "regex-2025.11.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:ffcca5b9efe948ba0661e9df0fa50d2bc4b097c70b9810212d6b62f05d83b2dd"}, + {file = "regex-2025.11.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c56b4d162ca2b43318ac671c65bd4d563e841a694ac70e1a976ac38fcf4ca1d2"}, + {file = "regex-2025.11.3-cp313-cp313t-win32.whl", hash = "sha256:9ddc42e68114e161e51e272f667d640f97e84a2b9ef14b7477c53aac20c2d59a"}, + {file = "regex-2025.11.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7a7c7fdf755032ffdd72c77e3d8096bdcb0eb92e89e17571a196f03d88b11b3c"}, + {file = "regex-2025.11.3-cp313-cp313t-win_arm64.whl", hash = "sha256:df9eb838c44f570283712e7cff14c16329a9f0fb19ca492d21d4b7528ee6821e"}, + {file = "regex-2025.11.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9697a52e57576c83139d7c6f213d64485d3df5bf84807c35fa409e6c970801c6"}, + {file = "regex-2025.11.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e18bc3f73bd41243c9b38a6d9f2366cd0e0137a9aebe2d8ff76c5b67d4c0a3f4"}, + {file = "regex-2025.11.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:61a08bcb0ec14ff4e0ed2044aad948d0659604f824cbd50b55e30b0ec6f09c73"}, + {file = "regex-2025.11.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9c30003b9347c24bcc210958c5d167b9e4f9be786cb380a7d32f14f9b84674f"}, + {file = "regex-2025.11.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4e1e592789704459900728d88d41a46fe3969b82ab62945560a31732ffc19a6d"}, + {file = "regex-2025.11.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6538241f45eb5a25aa575dbba1069ad786f68a4f2773a29a2bd3dd1f9de787be"}, + {file = "regex-2025.11.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce22519c989bb72a7e6b36a199384c53db7722fe669ba891da75907fe3587db"}, + {file = "regex-2025.11.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:66d559b21d3640203ab9075797a55165d79017520685fb407b9234d72ab63c62"}, + {file = "regex-2025.11.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:669dcfb2e38f9e8c69507bace46f4889e3abbfd9b0c29719202883c0a603598f"}, + {file = "regex-2025.11.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:32f74f35ff0f25a5021373ac61442edcb150731fbaa28286bbc8bb1582c89d02"}, + {file = "regex-2025.11.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e6c7a21dffba883234baefe91bc3388e629779582038f75d2a5be918e250f0ed"}, + {file = "regex-2025.11.3-cp314-cp314-win32.whl", hash = "sha256:795ea137b1d809eb6836b43748b12634291c0ed55ad50a7d72d21edf1cd565c4"}, + {file = "regex-2025.11.3-cp314-cp314-win_amd64.whl", hash = "sha256:9f95fbaa0ee1610ec0fc6b26668e9917a582ba80c52cc6d9ada15e30aa9ab9ad"}, + {file = "regex-2025.11.3-cp314-cp314-win_arm64.whl", hash = "sha256:dfec44d532be4c07088c3de2876130ff0fbeeacaa89a137decbbb5f665855a0f"}, + {file = "regex-2025.11.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:ba0d8a5d7f04f73ee7d01d974d47c5834f8a1b0224390e4fe7c12a3a92a78ecc"}, + {file = "regex-2025.11.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:442d86cf1cfe4faabf97db7d901ef58347efd004934da045c745e7b5bd57ac49"}, + {file = "regex-2025.11.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fd0a5e563c756de210bb964789b5abe4f114dacae9104a47e1a649b910361536"}, + {file = "regex-2025.11.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf3490bcbb985a1ae97b2ce9ad1c0f06a852d5b19dde9b07bdf25bf224248c95"}, + {file = "regex-2025.11.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3809988f0a8b8c9dcc0f92478d6501fac7200b9ec56aecf0ec21f4a2ec4b6009"}, + {file = "regex-2025.11.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f4ff94e58e84aedb9c9fce66d4ef9f27a190285b451420f297c9a09f2b9abee9"}, + {file = "regex-2025.11.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eb542fd347ce61e1321b0a6b945d5701528dca0cd9759c2e3bb8bd57e47964d"}, + {file = "regex-2025.11.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d6c2d5919075a1f2e413c00b056ea0c2f065b3f5fe83c3d07d325ab92dce51d6"}, + {file = "regex-2025.11.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:3f8bf11a4827cc7ce5a53d4ef6cddd5ad25595d3c1435ef08f76825851343154"}, + {file = "regex-2025.11.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:22c12d837298651e5550ac1d964e4ff57c3f56965fc1812c90c9fb2028eaf267"}, + {file = "regex-2025.11.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ba394a3dda9ad41c7c780f60f6e4a70988741415ae96f6d1bf6c239cf01379"}, + {file = "regex-2025.11.3-cp314-cp314t-win32.whl", hash = "sha256:4bf146dca15cdd53224a1bf46d628bd7590e4a07fbb69e720d561aea43a32b38"}, + {file = "regex-2025.11.3-cp314-cp314t-win_amd64.whl", hash = "sha256:adad1a1bcf1c9e76346e091d22d23ac54ef28e1365117d99521631078dfec9de"}, + {file = "regex-2025.11.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c54f768482cef41e219720013cd05933b6f971d9562544d691c68699bf2b6801"}, + {file = "regex-2025.11.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:81519e25707fc076978c6143b81ea3dc853f176895af05bf7ec51effe818aeec"}, + {file = "regex-2025.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3bf28b1873a8af8bbb58c26cc56ea6e534d80053b41fb511a35795b6de507e6a"}, + {file = "regex-2025.11.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:856a25c73b697f2ce2a24e7968285579e62577a048526161a2c0f53090bea9f9"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a3d571bd95fade53c86c0517f859477ff3a93c3fde10c9e669086f038e0f207"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:732aea6de26051af97b94bc98ed86448821f839d058e5d259c72bf6d73ad0fc0"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:51c1c1847128238f54930edb8805b660305dca164645a9fd29243f5610beea34"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22dd622a402aad4558277305350699b2be14bc59f64d64ae1d928ce7d072dced"}, + {file = "regex-2025.11.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f3b5a391c7597ffa96b41bd5cbd2ed0305f515fcbb367dfa72735679d5502364"}, + {file = "regex-2025.11.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cc4076a5b4f36d849fd709284b4a3b112326652f3b0466f04002a6c15a0c96c1"}, + {file = "regex-2025.11.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a295ca2bba5c1c885826ce3125fa0b9f702a1be547d821c01d65f199e10c01e2"}, + {file = "regex-2025.11.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b4774ff32f18e0504bfc4e59a3e71e18d83bc1e171a3c8ed75013958a03b2f14"}, + {file = "regex-2025.11.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e7d1cdfa88ef33a2ae6aa0d707f9255eb286ffbd90045f1088246833223aee"}, + {file = "regex-2025.11.3-cp39-cp39-win32.whl", hash = "sha256:74d04244852ff73b32eeede4f76f51c5bcf44bc3c207bc3e6cf1c5c45b890708"}, + {file = "regex-2025.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:7a50cd39f73faa34ec18d6720ee25ef10c4c1839514186fcda658a06c06057a2"}, + {file = "regex-2025.11.3-cp39-cp39-win_arm64.whl", hash = "sha256:43b4fb020e779ca81c1b5255015fe2b82816c76ec982354534ad9ec09ad7c9e3"}, + {file = "regex-2025.11.3.tar.gz", hash = "sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01"}, +] + +[[package]] +name = "requests" +version = "2.32.5" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, + {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, +] + +[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 = "ruff" +version = "0.12.12" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "ruff-0.12.12-py3-none-linux_armv6l.whl", hash = "sha256:de1c4b916d98ab289818e55ce481e2cacfaad7710b01d1f990c497edf217dafc"}, + {file = "ruff-0.12.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7acd6045e87fac75a0b0cdedacf9ab3e1ad9d929d149785903cff9bb69ad9727"}, + {file = "ruff-0.12.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:abf4073688d7d6da16611f2f126be86523a8ec4343d15d276c614bda8ec44edb"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:968e77094b1d7a576992ac078557d1439df678a34c6fe02fd979f973af167577"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42a67d16e5b1ffc6d21c5f67851e0e769517fb57a8ebad1d0781b30888aa704e"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b216ec0a0674e4b1214dcc998a5088e54eaf39417327b19ffefba1c4a1e4971e"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:59f909c0fdd8f1dcdbfed0b9569b8bf428cf144bec87d9de298dcd4723f5bee8"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ac93d87047e765336f0c18eacad51dad0c1c33c9df7484c40f98e1d773876f5"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:01543c137fd3650d322922e8b14cc133b8ea734617c4891c5a9fccf4bfc9aa92"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afc2fa864197634e549d87fb1e7b6feb01df0a80fd510d6489e1ce8c0b1cc45"}, + {file = "ruff-0.12.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0c0945246f5ad776cb8925e36af2438e66188d2b57d9cf2eed2c382c58b371e5"}, + {file = "ruff-0.12.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a0fbafe8c58e37aae28b84a80ba1817f2ea552e9450156018a478bf1fa80f4e4"}, + {file = "ruff-0.12.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b9c456fb2fc8e1282affa932c9e40f5ec31ec9cbb66751a316bd131273b57c23"}, + {file = "ruff-0.12.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f12856123b0ad0147d90b3961f5c90e7427f9acd4b40050705499c98983f489"}, + {file = "ruff-0.12.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:26a1b5a2bf7dd2c47e3b46d077cd9c0fc3b93e6c6cc9ed750bd312ae9dc302ee"}, + {file = "ruff-0.12.12-py3-none-win32.whl", hash = "sha256:173be2bfc142af07a01e3a759aba6f7791aa47acf3604f610b1c36db888df7b1"}, + {file = "ruff-0.12.12-py3-none-win_amd64.whl", hash = "sha256:e99620bf01884e5f38611934c09dd194eb665b0109104acae3ba6102b600fd0d"}, + {file = "ruff-0.12.12-py3-none-win_arm64.whl", hash = "sha256:2a8199cab4ce4d72d158319b63370abf60991495fb733db96cd923a34c52d093"}, + {file = "ruff-0.12.12.tar.gz", hash = "sha256:b86cd3415dbe31b3b46a71c598f4c4b2f550346d1ccf6326b347cc0c8fd063d6"}, +] + +[[package]] +name = "safetensors" +version = "0.7.0" +description = "" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "safetensors-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c82f4d474cf725255d9e6acf17252991c3c8aac038d6ef363a4bf8be2f6db517"}, + {file = "safetensors-0.7.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:94fd4858284736bb67a897a41608b5b0c2496c9bdb3bf2af1fa3409127f20d57"}, + {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e07d91d0c92a31200f25351f4acb2bc6aff7f48094e13ebb1d0fb995b54b6542"}, + {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8469155f4cb518bafb4acf4865e8bb9d6804110d2d9bdcaa78564b9fd841e104"}, + {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54bef08bf00a2bff599982f6b08e8770e09cc012d7bba00783fc7ea38f1fb37d"}, + {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42cb091236206bb2016d245c377ed383aa7f78691748f3bb6ee1bfa51ae2ce6a"}, + {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac7252938f0696ddea46f5e855dd3138444e82236e3be475f54929f0c510d48"}, + {file = "safetensors-0.7.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1d060c70284127fa805085d8f10fbd0962792aed71879d00864acda69dbab981"}, + {file = "safetensors-0.7.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cdab83a366799fa730f90a4ebb563e494f28e9e92c4819e556152ad55e43591b"}, + {file = "safetensors-0.7.0-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:672132907fcad9f2aedcb705b2d7b3b93354a2aec1b2f706c4db852abe338f85"}, + {file = "safetensors-0.7.0-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:5d72abdb8a4d56d4020713724ba81dac065fedb7f3667151c4a637f1d3fb26c0"}, + {file = "safetensors-0.7.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0f6d66c1c538d5a94a73aa9ddca8ccc4227e6c9ff555322ea40bdd142391dd4"}, + {file = "safetensors-0.7.0-cp38-abi3-win32.whl", hash = "sha256:c74af94bf3ac15ac4d0f2a7c7b4663a15f8c2ab15ed0fc7531ca61d0835eccba"}, + {file = "safetensors-0.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:d1239932053f56f3456f32eb9625590cc7582e905021f94636202a864d470755"}, + {file = "safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4729811a6640d019a4b7ba8638ee2fd21fa5ca8c7e7bdf0fed62068fcaac737"}, + {file = "safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12f49080303fa6bb424b362149a12949dfbbf1e06811a88f2307276b0c131afd"}, + {file = "safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0071bffba4150c2f46cae1432d31995d77acfd9f8db598b5d1a2ce67e8440ad2"}, + {file = "safetensors-0.7.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:473b32699f4200e69801bf5abf93f1a4ecd432a70984df164fc22ccf39c4a6f3"}, + {file = "safetensors-0.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b95a3fa7b3abb9b5b0e07668e808364d0d40f6bbbf9ae0faa8b5b210c97b140"}, + {file = "safetensors-0.7.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cfdead2f57330d76aa7234051dadfa7d4eedc0e5a27fd08e6f96714a92b00f09"}, + {file = "safetensors-0.7.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc92bc2db7b45bda4510e4f51c59b00fe80b2d6be88928346e4294ce1c2abe7c"}, + {file = "safetensors-0.7.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6999421eb8ba9df4450a16d9184fcb7bef26240b9f98e95401f17af6c2210b71"}, + {file = "safetensors-0.7.0.tar.gz", hash = "sha256:07663963b67e8bd9f0b8ad15bb9163606cd27cc5a1b96235a50d8369803b96b0"}, +] + +[package.extras] +all = ["safetensors[jax]", "safetensors[numpy]", "safetensors[paddlepaddle]", "safetensors[pinned-tf]", "safetensors[quality]", "safetensors[testing]", "safetensors[torch]"] +dev = ["safetensors[all]"] +jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "safetensors[numpy]"] +mlx = ["mlx (>=0.0.9)"] +numpy = ["numpy (>=1.21.6)"] +paddlepaddle = ["paddlepaddle (>=2.4.1)", "safetensors[numpy]"] +pinned-tf = ["safetensors[numpy]", "tensorflow (==2.18.0)"] +quality = ["ruff"] +tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"] +testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"] +testingfree = ["huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"] +torch = ["packaging", "safetensors[numpy]", "torch (>=1.10)"] + +[[package]] +name = "scipy" +version = "1.16.3" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.11" +groups = ["main"] +files = [ + {file = "scipy-1.16.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:40be6cf99e68b6c4321e9f8782e7d5ff8265af28ef2cd56e9c9b2638fa08ad97"}, + {file = "scipy-1.16.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8be1ca9170fcb6223cc7c27f4305d680ded114a1567c0bd2bfcbf947d1b17511"}, + {file = "scipy-1.16.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bea0a62734d20d67608660f69dcda23e7f90fb4ca20974ab80b6ed40df87a005"}, + {file = "scipy-1.16.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:2a207a6ce9c24f1951241f4693ede2d393f59c07abc159b2cb2be980820e01fb"}, + {file = "scipy-1.16.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:532fb5ad6a87e9e9cd9c959b106b73145a03f04c7d57ea3e6f6bb60b86ab0876"}, + {file = "scipy-1.16.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0151a0749efeaaab78711c78422d413c583b8cdd2011a3c1d6c794938ee9fdb2"}, + {file = "scipy-1.16.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7180967113560cca57418a7bc719e30366b47959dd845a93206fbed693c867e"}, + {file = "scipy-1.16.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:deb3841c925eeddb6afc1e4e4a45e418d19ec7b87c5df177695224078e8ec733"}, + {file = "scipy-1.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:53c3844d527213631e886621df5695d35e4f6a75f620dca412bcd292f6b87d78"}, + {file = "scipy-1.16.3-cp311-cp311-win_arm64.whl", hash = "sha256:9452781bd879b14b6f055b26643703551320aa8d79ae064a71df55c00286a184"}, + {file = "scipy-1.16.3-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:81fc5827606858cf71446a5e98715ba0e11f0dbc83d71c7409d05486592a45d6"}, + {file = "scipy-1.16.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:c97176013d404c7346bf57874eaac5187d969293bf40497140b0a2b2b7482e07"}, + {file = "scipy-1.16.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2b71d93c8a9936046866acebc915e2af2e292b883ed6e2cbe5c34beb094b82d9"}, + {file = "scipy-1.16.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3d4a07a8e785d80289dfe66b7c27d8634a773020742ec7187b85ccc4b0e7b686"}, + {file = "scipy-1.16.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0553371015692a898e1aa858fed67a3576c34edefa6b7ebdb4e9dde49ce5c203"}, + {file = "scipy-1.16.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:72d1717fd3b5e6ec747327ce9bda32d5463f472c9dce9f54499e81fbd50245a1"}, + {file = "scipy-1.16.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1fb2472e72e24d1530debe6ae078db70fb1605350c88a3d14bc401d6306dbffe"}, + {file = "scipy-1.16.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c5192722cffe15f9329a3948c4b1db789fbb1f05c97899187dcf009b283aea70"}, + {file = "scipy-1.16.3-cp312-cp312-win_amd64.whl", hash = "sha256:56edc65510d1331dae01ef9b658d428e33ed48b4f77b1d51caf479a0253f96dc"}, + {file = "scipy-1.16.3-cp312-cp312-win_arm64.whl", hash = "sha256:a8a26c78ef223d3e30920ef759e25625a0ecdd0d60e5a8818b7513c3e5384cf2"}, + {file = "scipy-1.16.3-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:d2ec56337675e61b312179a1ad124f5f570c00f920cc75e1000025451b88241c"}, + {file = "scipy-1.16.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:16b8bc35a4cc24db80a0ec836a9286d0e31b2503cb2fd7ff7fb0e0374a97081d"}, + {file = "scipy-1.16.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:5803c5fadd29de0cf27fa08ccbfe7a9e5d741bf63e4ab1085437266f12460ff9"}, + {file = "scipy-1.16.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:b81c27fc41954319a943d43b20e07c40bdcd3ff7cf013f4fb86286faefe546c4"}, + {file = "scipy-1.16.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0c3b4dd3d9b08dbce0f3440032c52e9e2ab9f96ade2d3943313dfe51a7056959"}, + {file = "scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7dc1360c06535ea6116a2220f760ae572db9f661aba2d88074fe30ec2aa1ff88"}, + {file = "scipy-1.16.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:663b8d66a8748051c3ee9c96465fb417509315b99c71550fda2591d7dd634234"}, + {file = "scipy-1.16.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eab43fae33a0c39006a88096cd7b4f4ef545ea0447d250d5ac18202d40b6611d"}, + {file = "scipy-1.16.3-cp313-cp313-win_amd64.whl", hash = "sha256:062246acacbe9f8210de8e751b16fc37458213f124bef161a5a02c7a39284304"}, + {file = "scipy-1.16.3-cp313-cp313-win_arm64.whl", hash = "sha256:50a3dbf286dbc7d84f176f9a1574c705f277cb6565069f88f60db9eafdbe3ee2"}, + {file = "scipy-1.16.3-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:fb4b29f4cf8cc5a8d628bc8d8e26d12d7278cd1f219f22698a378c3d67db5e4b"}, + {file = "scipy-1.16.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:8d09d72dc92742988b0e7750bddb8060b0c7079606c0d24a8cc8e9c9c11f9079"}, + {file = "scipy-1.16.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:03192a35e661470197556de24e7cb1330d84b35b94ead65c46ad6f16f6b28f2a"}, + {file = "scipy-1.16.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:57d01cb6f85e34f0946b33caa66e892aae072b64b034183f3d87c4025802a119"}, + {file = "scipy-1.16.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:96491a6a54e995f00a28a3c3badfff58fd093bf26cd5fb34a2188c8c756a3a2c"}, + {file = "scipy-1.16.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cd13e354df9938598af2be05822c323e97132d5e6306b83a3b4ee6724c6e522e"}, + {file = "scipy-1.16.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63d3cdacb8a824a295191a723ee5e4ea7768ca5ca5f2838532d9f2e2b3ce2135"}, + {file = "scipy-1.16.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e7efa2681ea410b10dde31a52b18b0154d66f2485328830e45fdf183af5aefc6"}, + {file = "scipy-1.16.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2d1ae2cf0c350e7705168ff2429962a89ad90c2d49d1dd300686d8b2a5af22fc"}, + {file = "scipy-1.16.3-cp313-cp313t-win_arm64.whl", hash = "sha256:0c623a54f7b79dd88ef56da19bc2873afec9673a48f3b85b18e4d402bdd29a5a"}, + {file = "scipy-1.16.3-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:875555ce62743e1d54f06cdf22c1e0bc47b91130ac40fe5d783b6dfa114beeb6"}, + {file = "scipy-1.16.3-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:bb61878c18a470021fb515a843dc7a76961a8daceaaaa8bad1332f1bf4b54657"}, + {file = "scipy-1.16.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f2622206f5559784fa5c4b53a950c3c7c1cf3e84ca1b9c4b6c03f062f289ca26"}, + {file = "scipy-1.16.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7f68154688c515cdb541a31ef8eb66d8cd1050605be9dcd74199cbd22ac739bc"}, + {file = "scipy-1.16.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8b3c820ddb80029fe9f43d61b81d8b488d3ef8ca010d15122b152db77dc94c22"}, + {file = "scipy-1.16.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d3837938ae715fc0fe3c39c0202de3a8853aff22ca66781ddc2ade7554b7e2cc"}, + {file = "scipy-1.16.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:aadd23f98f9cb069b3bd64ddc900c4d277778242e961751f77a8cb5c4b946fb0"}, + {file = "scipy-1.16.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b7c5f1bda1354d6a19bc6af73a649f8285ca63ac6b52e64e658a5a11d4d69800"}, + {file = "scipy-1.16.3-cp314-cp314-win_amd64.whl", hash = "sha256:e5d42a9472e7579e473879a1990327830493a7047506d58d73fc429b84c1d49d"}, + {file = "scipy-1.16.3-cp314-cp314-win_arm64.whl", hash = "sha256:6020470b9d00245926f2d5bb93b119ca0340f0d564eb6fbaad843eaebf9d690f"}, + {file = "scipy-1.16.3-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:e1d27cbcb4602680a49d787d90664fa4974063ac9d4134813332a8c53dbe667c"}, + {file = "scipy-1.16.3-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:9b9c9c07b6d56a35777a1b4cc8966118fb16cfd8daf6743867d17d36cfad2d40"}, + {file = "scipy-1.16.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:3a4c460301fb2cffb7f88528f30b3127742cff583603aa7dc964a52c463b385d"}, + {file = "scipy-1.16.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:f667a4542cc8917af1db06366d3f78a5c8e83badd56409f94d1eac8d8d9133fa"}, + {file = "scipy-1.16.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f379b54b77a597aa7ee5e697df0d66903e41b9c85a6dd7946159e356319158e8"}, + {file = "scipy-1.16.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4aff59800a3b7f786b70bfd6ab551001cb553244988d7d6b8299cb1ea653b353"}, + {file = "scipy-1.16.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:da7763f55885045036fabcebd80144b757d3db06ab0861415d1c3b7c69042146"}, + {file = "scipy-1.16.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ffa6eea95283b2b8079b821dc11f50a17d0571c92b43e2b5b12764dc5f9b285d"}, + {file = "scipy-1.16.3-cp314-cp314t-win_amd64.whl", hash = "sha256:d9f48cafc7ce94cf9b15c6bffdc443a81a27bf7075cf2dcd5c8b40f85d10c4e7"}, + {file = "scipy-1.16.3-cp314-cp314t-win_arm64.whl", hash = "sha256:21d9d6b197227a12dcbf9633320a4e34c6b0e51c57268df255a0942983bac562"}, + {file = "scipy-1.16.3.tar.gz", hash = "sha256:01e87659402762f43bd2fee13370553a17ada367d42e7487800bf2916535aecb"}, +] + +[package.dependencies] +numpy = ">=1.25.2,<2.6" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "linkify-it-py", "matplotlib (>=3.5)", "myst-nb (>=1.2.0)", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.2.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.3.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest (>=8.0.0)", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "setuptools" +version = "80.9.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, + {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +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", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] + +[[package]] +name = "shapely" +version = "2.1.2" +description = "Manipulation and analysis of geometric objects" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "shapely-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7ae48c236c0324b4e139bea88a306a04ca630f49be66741b340729d380d8f52f"}, + {file = "shapely-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eba6710407f1daa8e7602c347dfc94adc02205ec27ed956346190d66579eb9ea"}, + {file = "shapely-2.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef4a456cc8b7b3d50ccec29642aa4aeda959e9da2fe9540a92754770d5f0cf1f"}, + {file = "shapely-2.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e38a190442aacc67ff9f75ce60aec04893041f16f97d242209106d502486a142"}, + {file = "shapely-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:40d784101f5d06a1fd30b55fc11ea58a61be23f930d934d86f19a180909908a4"}, + {file = "shapely-2.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f6f6cd5819c50d9bcf921882784586aab34a4bd53e7553e175dece6db513a6f0"}, + {file = "shapely-2.1.2-cp310-cp310-win32.whl", hash = "sha256:fe9627c39c59e553c90f5bc3128252cb85dc3b3be8189710666d2f8bc3a5503e"}, + {file = "shapely-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:1d0bfb4b8f661b3b4ec3565fa36c340bfb1cda82087199711f86a88647d26b2f"}, + {file = "shapely-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91121757b0a36c9aac3427a651a7e6567110a4a67c97edf04f8d55d4765f6618"}, + {file = "shapely-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:16a9c722ba774cf50b5d4541242b4cce05aafd44a015290c82ba8a16931ff63d"}, + {file = "shapely-2.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cc4f7397459b12c0b196c9efe1f9d7e92463cbba142632b4cc6d8bbbbd3e2b09"}, + {file = "shapely-2.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:136ab87b17e733e22f0961504d05e77e7be8c9b5a8184f685b4a91a84efe3c26"}, + {file = "shapely-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:16c5d0fc45d3aa0a69074979f4f1928ca2734fb2e0dde8af9611e134e46774e7"}, + {file = "shapely-2.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ddc759f72b5b2b0f54a7e7cde44acef680a55019eb52ac63a7af2cf17cb9cd2"}, + {file = "shapely-2.1.2-cp311-cp311-win32.whl", hash = "sha256:2fa78b49485391224755a856ed3b3bd91c8455f6121fee0db0e71cefb07d0ef6"}, + {file = "shapely-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:c64d5c97b2f47e3cd9b712eaced3b061f2b71234b3fc263e0fcf7d889c6559dc"}, + {file = "shapely-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe2533caae6a91a543dec62e8360fe86ffcdc42a7c55f9dfd0128a977a896b94"}, + {file = "shapely-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ba4d1333cc0bc94381d6d4308d2e4e008e0bd128bdcff5573199742ee3634359"}, + {file = "shapely-2.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0bd308103340030feef6c111d3eb98d50dc13feea33affc8a6f9fa549e9458a3"}, + {file = "shapely-2.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e7d4d7ad262a48bb44277ca12c7c78cb1b0f56b32c10734ec9a1d30c0b0c54b"}, + {file = "shapely-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9eddfe513096a71896441a7c37db72da0687b34752c4e193577a145c71736fc"}, + {file = "shapely-2.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:980c777c612514c0cf99bc8a9de6d286f5e186dcaf9091252fcd444e5638193d"}, + {file = "shapely-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9111274b88e4d7b54a95218e243282709b330ef52b7b86bc6aaf4f805306f454"}, + {file = "shapely-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:743044b4cfb34f9a67205cee9279feaf60ba7d02e69febc2afc609047cb49179"}, + {file = "shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b510dda1a3672d6879beb319bc7c5fd302c6c354584690973c838f46ec3e0fa8"}, + {file = "shapely-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8cff473e81017594d20ec55d86b54bc635544897e13a7cfc12e36909c5309a2a"}, + {file = "shapely-2.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe7b77dc63d707c09726b7908f575fc04ff1d1ad0f3fb92aec212396bc6cfe5e"}, + {file = "shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ed1a5bbfb386ee8332713bf7508bc24e32d24b74fc9a7b9f8529a55db9f4ee6"}, + {file = "shapely-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a84e0582858d841d54355246ddfcbd1fce3179f185da7470f41ce39d001ee1af"}, + {file = "shapely-2.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc3487447a43d42adcdf52d7ac73804f2312cbfa5d433a7d2c506dcab0033dfd"}, + {file = "shapely-2.1.2-cp313-cp313-win32.whl", hash = "sha256:9c3a3c648aedc9f99c09263b39f2d8252f199cb3ac154fadc173283d7d111350"}, + {file = "shapely-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:ca2591bff6645c216695bdf1614fca9c82ea1144d4a7591a466fef64f28f0715"}, + {file = "shapely-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2d93d23bdd2ed9dc157b46bc2f19b7da143ca8714464249bef6771c679d5ff40"}, + {file = "shapely-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01d0d304b25634d60bd7cf291828119ab55a3bab87dc4af1e44b07fb225f188b"}, + {file = "shapely-2.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8d8382dd120d64b03698b7298b89611a6ea6f55ada9d39942838b79c9bc89801"}, + {file = "shapely-2.1.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19efa3611eef966e776183e338b2d7ea43569ae99ab34f8d17c2c054d3205cc0"}, + {file = "shapely-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:346ec0c1a0fcd32f57f00e4134d1200e14bf3f5ae12af87ba83ca275c502498c"}, + {file = "shapely-2.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6305993a35989391bd3476ee538a5c9a845861462327efe00dd11a5c8c709a99"}, + {file = "shapely-2.1.2-cp313-cp313t-win32.whl", hash = "sha256:c8876673449f3401f278c86eb33224c5764582f72b653a415d0e6672fde887bf"}, + {file = "shapely-2.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:4a44bc62a10d84c11a7a3d7c1c4fe857f7477c3506e24c9062da0db0ae0c449c"}, + {file = "shapely-2.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:9a522f460d28e2bf4e12396240a5fc1518788b2fcd73535166d748399ef0c223"}, + {file = "shapely-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1ff629e00818033b8d71139565527ced7d776c269a49bd78c9df84e8f852190c"}, + {file = "shapely-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f67b34271dedc3c653eba4e3d7111aa421d5be9b4c4c7d38d30907f796cb30df"}, + {file = "shapely-2.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21952dc00df38a2c28375659b07a3979d22641aeb104751e769c3ee825aadecf"}, + {file = "shapely-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1f2f33f486777456586948e333a56ae21f35ae273be99255a191f5c1fa302eb4"}, + {file = "shapely-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cf831a13e0d5a7eb519e96f58ec26e049b1fad411fc6fc23b162a7ce04d9cffc"}, + {file = "shapely-2.1.2-cp314-cp314-win32.whl", hash = "sha256:61edcd8d0d17dd99075d320a1dd39c0cb9616f7572f10ef91b4b5b00c4aeb566"}, + {file = "shapely-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:a444e7afccdb0999e203b976adb37ea633725333e5b119ad40b1ca291ecf311c"}, + {file = "shapely-2.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:5ebe3f84c6112ad3d4632b1fd2290665aa75d4cef5f6c5d77c4c95b324527c6a"}, + {file = "shapely-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5860eb9f00a1d49ebb14e881f5caf6c2cf472c7fd38bd7f253bbd34f934eb076"}, + {file = "shapely-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b705c99c76695702656327b819c9660768ec33f5ce01fa32b2af62b56ba400a1"}, + {file = "shapely-2.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a1fd0ea855b2cf7c9cddaf25543e914dd75af9de08785f20ca3085f2c9ca60b0"}, + {file = "shapely-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:df90e2db118c3671a0754f38e36802db75fe0920d211a27481daf50a711fdf26"}, + {file = "shapely-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:361b6d45030b4ac64ddd0a26046906c8202eb60d0f9f53085f5179f1d23021a0"}, + {file = "shapely-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:b54df60f1fbdecc8ebc2c5b11870461a6417b3d617f555e5033f1505d36e5735"}, + {file = "shapely-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:0036ac886e0923417932c2e6369b6c52e38e0ff5d9120b90eef5cd9a5fc5cae9"}, + {file = "shapely-2.1.2.tar.gz", hash = "sha256:2ed4ecb28320a433db18a5bf029986aa8afcfd740745e78847e330d5d94922a9"}, +] + +[package.dependencies] +numpy = ">=1.21" + +[package.extras] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +test = ["pytest", "pytest-cov", "scipy-doctest"] + +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + +[[package]] +name = "shiboken6" +version = "6.11.0" +description = "Python/C++ bindings helper module" +optional = false +python-versions = "<3.15,>=3.10" +groups = ["main"] +files = [ + {file = "shiboken6-6.11.0-cp310-abi3-macosx_13_0_universal2.whl", hash = "sha256:d88e8a1eb705f2b9ad21db08a61ae1dc0c773e5cd86a069de0754c4cf1f9b43b"}, + {file = "shiboken6-6.11.0-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:ad54e64f8192ddbdff0c54ac82b89edcd62ed623f502ea21c960541d19514053"}, + {file = "shiboken6-6.11.0-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:a10dc7718104ea2dc15d5b0b96909b77162ce1c76fcc6968e6df692b947a00e9"}, + {file = "shiboken6-6.11.0-cp310-abi3-win_amd64.whl", hash = "sha256:483ff78a73c7b3189ca924abc694318084f078bcfeaffa68e32024ff2d025ee1"}, + {file = "shiboken6-6.11.0-cp310-abi3-win_arm64.whl", hash = "sha256:3bd76cf56105ab2d62ecaff630366f11264f69b88d488f10f048da9a065781f4"}, +] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "sympy" +version = "1.14.0" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"}, + {file = "sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517"}, +] + +[package.dependencies] +mpmath = ">=1.1.0,<1.4" + +[package.extras] +dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "termcolor" +version = "3.2.0" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "termcolor-3.2.0-py3-none-any.whl", hash = "sha256:a10343879eba4da819353c55cb8049b0933890c2ebf9ad5d3ecd2bb32ea96ea6"}, + {file = "termcolor-3.2.0.tar.gz", hash = "sha256:610e6456feec42c4bcd28934a8c87a06c3fa28b01561d46aa09a9881b8622c58"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "timm" +version = "1.0.22" +description = "PyTorch Image Models" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "timm-1.0.22-py3-none-any.whl", hash = "sha256:888981753e65cbaacfc07494370138b1700a27b1f0af587f4f9b47bc024161d0"}, + {file = "timm-1.0.22.tar.gz", hash = "sha256:14fd74bcc17db3856b1a47d26fb305576c98579ab9d02b36714a5e6b25cde422"}, +] + +[package.dependencies] +huggingface_hub = "*" +pyyaml = "*" +safetensors = "*" +torch = "*" +torchvision = "*" + +[[package]] +name = "torch" +version = "2.4.1" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +optional = false +python-versions = ">=3.8.0" +groups = ["main"] +files = [ + {file = "torch-2.4.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:362f82e23a4cd46341daabb76fba08f04cd646df9bfaf5da50af97cb60ca4971"}, + {file = "torch-2.4.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:e8ac1985c3ff0f60d85b991954cfc2cc25f79c84545aead422763148ed2759e3"}, + {file = "torch-2.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:91e326e2ccfb1496e3bee58f70ef605aeb27bd26be07ba64f37dcaac3d070ada"}, + {file = "torch-2.4.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:d36a8ef100f5bff3e9c3cea934b9e0d7ea277cb8210c7152d34a9a6c5830eadd"}, + {file = "torch-2.4.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:0b5f88afdfa05a335d80351e3cea57d38e578c8689f751d35e0ff36bce872113"}, + {file = "torch-2.4.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:ef503165f2341942bfdf2bd520152f19540d0c0e34961232f134dc59ad435be8"}, + {file = "torch-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:092e7c2280c860eff762ac08c4bdcd53d701677851670695e0c22d6d345b269c"}, + {file = "torch-2.4.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:ddddbd8b066e743934a4200b3d54267a46db02106876d21cf31f7da7a96f98ea"}, + {file = "torch-2.4.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:fdc4fe11db3eb93c1115d3e973a27ac7c1a8318af8934ffa36b0370efe28e042"}, + {file = "torch-2.4.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:18835374f599207a9e82c262153c20ddf42ea49bc76b6eadad8e5f49729f6e4d"}, + {file = "torch-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:ebea70ff30544fc021d441ce6b219a88b67524f01170b1c538d7d3ebb5e7f56c"}, + {file = "torch-2.4.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:72b484d5b6cec1a735bf3fa5a1c4883d01748698c5e9cfdbeb4ffab7c7987e0d"}, + {file = "torch-2.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:c99e1db4bf0c5347107845d715b4aa1097e601bdc36343d758963055e9599d93"}, + {file = "torch-2.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:b57f07e92858db78c5b72857b4f0b33a65b00dc5d68e7948a8494b0314efb880"}, + {file = "torch-2.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:f18197f3f7c15cde2115892b64f17c80dbf01ed72b008020e7da339902742cf6"}, + {file = "torch-2.4.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:5fc1d4d7ed265ef853579caf272686d1ed87cebdcd04f2a498f800ffc53dab71"}, + {file = "torch-2.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:40f6d3fe3bae74efcf08cb7f8295eaddd8a838ce89e9d26929d4edd6d5e4329d"}, + {file = "torch-2.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:c9299c16c9743001ecef515536ac45900247f4338ecdf70746f2461f9e4831db"}, + {file = "torch-2.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:6bce130f2cd2d52ba4e2c6ada461808de7e5eccbac692525337cfb4c19421846"}, + {file = "torch-2.4.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:a38de2803ee6050309aac032676536c3d3b6a9804248537e38e098d0e14817ec"}, +] + +[package.dependencies] +filelock = "*" +fsspec = "*" +jinja2 = "*" +networkx = "*" +nvidia-cublas-cu12 = {version = "12.1.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-cupti-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-nvrtc-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-runtime-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cudnn-cu12 = {version = "9.1.0.70", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cufft-cu12 = {version = "11.0.2.54", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-curand-cu12 = {version = "10.3.2.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusolver-cu12 = {version = "11.4.5.107", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nccl-cu12 = {version = "2.20.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +setuptools = "*" +sympy = "*" +triton = {version = "3.0.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.13\""} +typing-extensions = ">=4.8.0" + +[package.extras] +opt-einsum = ["opt-einsum (>=3.3)"] +optree = ["optree (>=0.11.0)"] + +[[package]] +name = "torchvision" +version = "0.19.1" +description = "image and video datasets and models for torch deep learning" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "torchvision-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:54e8513099e6f586356c70f809d34f391af71ad182fe071cc328a28af2c40608"}, + {file = "torchvision-0.19.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:20a1f5e02bfdad7714e55fa3fa698347c11d829fa65e11e5a84df07d93350eed"}, + {file = "torchvision-0.19.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:7b063116164be52fc6deb4762de7f8c90bfa3a65f8d5caf17f8e2d5aadc75a04"}, + {file = "torchvision-0.19.1-cp310-cp310-win_amd64.whl", hash = "sha256:f40b6acabfa886da1bc3768f47679c61feee6bde90deb979d9f300df8c8a0145"}, + {file = "torchvision-0.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:40514282b4896d62765b8e26d7091c32e17c35817d00ec4be2362ea3ba3d1787"}, + {file = "torchvision-0.19.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:5a91be061ae5d6d5b95e833b93e57ca4d3c56c5a57444dd15da2e3e7fba96050"}, + {file = "torchvision-0.19.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d71a6a6fe3a5281ca3487d4c56ad4aad20ff70f82f1d7c79bcb6e7b0c2af00c8"}, + {file = "torchvision-0.19.1-cp311-cp311-win_amd64.whl", hash = "sha256:70dea324174f5e9981b68e4b7cd524512c106ba64aedef560a86a0bbf2fbf62c"}, + {file = "torchvision-0.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27ece277ff0f6cdc7fed0627279c632dcb2e58187da771eca24b0fbcf3f8590d"}, + {file = "torchvision-0.19.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:c659ff92a61f188a1a7baef2850f3c0b6c85685447453c03d0e645ba8f1dcc1c"}, + {file = "torchvision-0.19.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:c07bf43c2a145d792ecd9d0503d6c73577147ece508d45600d8aac77e4cdfcf9"}, + {file = "torchvision-0.19.1-cp312-cp312-win_amd64.whl", hash = "sha256:b4283d283675556bb0eae31d29996f53861b17cbdcdf3509e6bc050414ac9289"}, + {file = "torchvision-0.19.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c4e4f5b24ea6b087b02ed492ab1e21bba3352c4577e2def14248cfc60732338"}, + {file = "torchvision-0.19.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9281d63ead929bb19143731154cd1d8bf0b5e9873dff8578a40e90a6bec3c6fa"}, + {file = "torchvision-0.19.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:4d10bc9083c4d5fadd7edd7b729700a7be48dab4f62278df3bc73fa48e48a155"}, + {file = "torchvision-0.19.1-cp38-cp38-win_amd64.whl", hash = "sha256:ccf085ef1824fb9e16f1901285bf89c298c62dfd93267a39e8ee42c71255242f"}, + {file = "torchvision-0.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:731f434d91586769e255b5d70ed1a4457e0a1394a95f4aacf0e1e7e21f80c098"}, + {file = "torchvision-0.19.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:febe4f14d4afcb47cc861d8be7760ab6a123cd0817f97faf5771488cb6aa90f4"}, + {file = "torchvision-0.19.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e328309b8670a2e889b2fe76a1c2744a099c11c984da9a822357bd9debd699a5"}, + {file = "torchvision-0.19.1-cp39-cp39-win_amd64.whl", hash = "sha256:6616f12e00a22e7f3fedbd0fccb0804c05e8fe22871668f10eae65cf3f283614"}, +] + +[package.dependencies] +numpy = "*" +pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0" +torch = "2.4.1" + +[package.extras] +gdown = ["gdown (>=4.7.3)"] +scipy = ["scipy"] + +[[package]] +name = "tqdm" +version = "4.67.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "triton" +version = "3.0.0" +description = "A language and compiler for custom Deep Learning operations" +optional = false +python-versions = "*" +groups = ["main"] +markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version == \"3.12\"" +files = [ + {file = "triton-3.0.0-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e1efef76935b2febc365bfadf74bcb65a6f959a9872e5bddf44cc9e0adce1e1a"}, + {file = "triton-3.0.0-1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ce8520437c602fb633f1324cc3871c47bee3b67acf9756c1a66309b60e3216c"}, + {file = "triton-3.0.0-1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e509deb77f1c067d8640725ef00c5cbfcb2052a1a3cb6a6d343841f92624eb"}, + {file = "triton-3.0.0-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bcbf3b1c48af6a28011a5c40a5b3b9b5330530c3827716b5fbf6d7adcc1e53e9"}, + {file = "triton-3.0.0-1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6e5727202f7078c56f91ff13ad0c1abab14a0e7f2c87e91b12b6f64f3e8ae609"}, +] + +[package.dependencies] +filelock = "*" + +[package.extras] +build = ["cmake (>=3.20)", "lit"] +tests = ["autopep8", "flake8", "isort", "llnl-hatchet", "numpy", "pytest", "scipy (>=1.7.1)"] +tutorials = ["matplotlib", "pandas", "tabulate"] + +[[package]] +name = "typer-slim" +version = "0.20.0" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "typer_slim-0.20.0-py3-none-any.whl", hash = "sha256:f42a9b7571a12b97dddf364745d29f12221865acef7a2680065f9bb29c7dc89d"}, + {file = "typer_slim-0.20.0.tar.gz", hash = "sha256:9fc6607b3c6c20f5c33ea9590cbeb17848667c51feee27d9e314a579ab07d1a3"}, +] + +[package.dependencies] +click = ">=8.0.0" +typing-extensions = ">=3.7.4.3" + +[package.extras] +standard = ["rich (>=10.11.0)", "shellingham (>=1.3.0)"] + +[[package]] +name = "types-requests" +version = "2.32.4.20250913" +description = "Typing stubs for requests" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "types_requests-2.32.4.20250913-py3-none-any.whl", hash = "sha256:78c9c1fffebbe0fa487a418e0fa5252017e9c60d1a2da394077f1780f655d7e1"}, + {file = "types_requests-2.32.4.20250913.tar.gz", hash = "sha256:abd6d4f9ce3a9383f269775a9835a4c24e5cd6b9f647d64f88aa4613c33def5d"}, +] + +[package.dependencies] +urllib3 = ">=2" + +[[package]] +name = "typing-extensions" +version = "4.15.0" +description = "Backported and Experimental Type Hints for Python 3.9+" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, + {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, +] + +[[package]] +name = "tzdata" +version = "2025.2" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +groups = ["main"] +files = [ + {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, + {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, + {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "virtualenv" +version = "20.35.4" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "virtualenv-20.35.4-py3-none-any.whl", hash = "sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b"}, + {file = "virtualenv-20.35.4.tar.gz", hash = "sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] + +[[package]] +name = "watchdog" +version = "6.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, + {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, + {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, + {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, + {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "wcwidth" +version = "0.2.14" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1"}, + {file = "wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605"}, +] + +[[package]] +name = "yaspin" +version = "3.3.0" +description = "Yet Another Terminal Spinner" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "yaspin-3.3.0-py3-none-any.whl", hash = "sha256:ab5113be4b34ef33f7d4d97be9b6867101ad020c2fb02bc92e3137c75b06d712"}, + {file = "yaspin-3.3.0.tar.gz", hash = "sha256:505c9a44c6e3723a1bee8f7a17a055b17475176b74dd93e468fa8db48c172a41"}, +] + +[package.dependencies] +termcolor = ">=3.1,<4.0" + +[metadata] +lock-version = "2.1" +python-versions = ">=3.12,<3.15" +content-hash = "7ffbc7895146e77cf680414205531433181a8ae70b594d696e7dbba4a28e42cb" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..095118d --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,89 @@ +[tool.poetry] +package-mode = true +packages = [{ include = "uq_desktop_processor", from = "src" }] + +[project] +name = "uq_desktop_processor" +version = "1.0.0" +description = "AI-assisted visual urban assessment from street-level imagery: road-network sampling, Mapillary downloads, CLIP/ViT scoring, and GIS-ready exports (GeoJSON/GPKG)." +readme = "README.md" +requires-python = ">=3.12,<3.15" +license = "LicenseRef-UNLICENSED" +license-files = ["LICENSE"] +authors = [{ name = "Antek-N", email = "antek.nikolajdu@gmail.com" }] +dynamic = ["dependencies", "optional-dependencies"] + +[project.scripts] +uq_desktop_processor = "uq_desktop_processor.__main__:main" +uq-desktop-processor = "uq_desktop_processor.__main__:main" + +[tool.poetry.dependencies] +python = ">=3.12,<3.15" +torch = "^2.4.0" +torchvision = "^0.19.0" +timm = "^1.0.0" +numpy = "<2.0" +pillow = "^10.0.0" +tqdm = "^4.66.0" +tabulate = "^0.9.0" +joblib = "^1.4.0" +clip = { git = "https://github.com/openai/CLIP.git" } +ftfy = "^6.3.1" +regex = "^2025.9.1" +geopandas = "^1.0.0" +shapely = "^2.0.0" +pyproj = "^3.6.0" +fiona = "^1.9.0" +pyogrio = "^0.9.0" +osmnx = "^1.9.0" +yaspin = "^3.0.0" +matplotlib = "^3.8.0" +requests = "^2.32.0" +opencv-python-headless = "^4.9.0" +piexif = "^1.1.3" +py360convert = "^0.1.0" +pyside6 = "^6.11.0" +gpxpy = "^1.6.2" +pydeck = "^0.9.1" + +[tool.poetry.group.dev.dependencies] +black = "^25.1.0" +ruff = "^0.12.12" +mypy = "^1.17.1" +pytest = "^8.3.0" +pytest-cov = "^5.0.0" +pre-commit = "^3.6.0" +mkdocs = "^1.6" +mkdocs-material = "^9.5" +mkdocs-autorefs = "^1.2" +mkdocs-gen-files = "^0.5" +mkdocs-literate-nav = "^0.6" +mkdocstrings = "^0.25" +mkdocstrings-python = "^1.10" +pymdown-extensions = "^10.8" +types-requests = "^2.32.4.20250913" + +[build-system] +requires = ["poetry-core>=2.0.0,<3.0.0"] +build-backend = "poetry.core.masonry.api" + +[tool.black] +line-length = 120 +target-version = ["py312"] + +[tool.ruff] +line-length = 120 +target-version = "py312" +fix = false + +[tool.ruff.lint] +select = ["E", "F", "I", "B", "UP"] +ignore = ["E501"] + +[tool.mypy] +python_version = "3.12" +strict = false +warn_unused_configs = true +disallow_untyped_defs = true +ignore_missing_imports = true +exclude = "^(tests/|site/|\\.venv/|out/)" \ No newline at end of file diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..b9e5403 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,124 @@ +anyio==4.11.0 ; python_version >= "3.12" and python_version < "3.15" +attrs==25.4.0 ; python_version >= "3.12" and python_version < "3.15" +babel==2.17.0 ; python_version >= "3.12" and python_version < "3.15" +backrefs==6.1 ; python_version >= "3.12" and python_version < "3.15" +black==25.11.0 ; python_version >= "3.12" and python_version < "3.15" +certifi==2025.11.12 ; python_version >= "3.12" and python_version < "3.15" +cfgv==3.5.0 ; python_version >= "3.12" and python_version < "3.15" +charset-normalizer==3.4.4 ; python_version >= "3.12" and python_version < "3.15" +click-plugins==1.1.1.2 ; python_version >= "3.12" and python_version < "3.15" +click==8.3.1 ; python_version >= "3.12" and python_version < "3.15" +cligj==0.7.2 ; python_version >= "3.12" and python_version < "3.15" +clip @ git+https://github.com/openai/CLIP.git@dcba3cb2e2827b402d2701e7e1c7d9fed8a20ef1 ; python_version >= "3.12" and python_version < "3.15" +colorama==0.4.6 ; python_version >= "3.12" and python_version < "3.15" +contourpy==1.3.3 ; python_version >= "3.12" and python_version < "3.15" +coverage==7.12.0 ; python_version >= "3.12" and python_version < "3.15" +cycler==0.12.1 ; python_version >= "3.12" and python_version < "3.15" +distlib==0.4.0 ; python_version >= "3.12" and python_version < "3.15" +filelock==3.20.0 ; python_version >= "3.12" and python_version < "3.15" +fiona==1.10.1 ; python_version >= "3.12" and python_version < "3.15" +fonttools==4.60.1 ; python_version >= "3.12" and python_version < "3.15" +fsspec==2025.10.0 ; python_version >= "3.12" and python_version < "3.15" +ftfy==6.3.1 ; python_version >= "3.12" and python_version < "3.15" +geopandas==1.1.1 ; python_version >= "3.12" and python_version < "3.15" +ghp-import==2.1.0 ; python_version >= "3.12" and python_version < "3.15" +gpxpy==1.6.2 ; python_version >= "3.12" and python_version < "3.15" +griffe==1.15.0 ; python_version >= "3.12" and python_version < "3.15" +h11==0.16.0 ; python_version >= "3.12" and python_version < "3.15" +hf-xet==1.2.0 ; python_version >= "3.12" and python_version < "3.15" and (platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "arm64" or platform_machine == "aarch64") +httpcore==1.0.9 ; python_version >= "3.12" and python_version < "3.15" +httpx==0.28.1 ; python_version >= "3.12" and python_version < "3.15" +huggingface-hub==1.1.5 ; python_version >= "3.12" and python_version < "3.15" +identify==2.6.15 ; python_version >= "3.12" and python_version < "3.15" +idna==3.11 ; python_version >= "3.12" and python_version < "3.15" +iniconfig==2.3.0 ; python_version >= "3.12" and python_version < "3.15" +jinja2==3.1.6 ; python_version >= "3.12" and python_version < "3.15" +joblib==1.5.2 ; python_version >= "3.12" and python_version < "3.15" +kiwisolver==1.4.9 ; python_version >= "3.12" and python_version < "3.15" +markdown==3.10 ; python_version >= "3.12" and python_version < "3.15" +markupsafe==3.0.3 ; python_version >= "3.12" and python_version < "3.15" +matplotlib==3.10.7 ; python_version >= "3.12" and python_version < "3.15" +mergedeep==1.3.4 ; python_version >= "3.12" and python_version < "3.15" +mkdocs-autorefs==1.4.3 ; python_version >= "3.12" and python_version < "3.15" +mkdocs-gen-files==0.5.0 ; python_version >= "3.12" and python_version < "3.15" +mkdocs-get-deps==0.2.0 ; python_version >= "3.12" and python_version < "3.15" +mkdocs-literate-nav==0.6.2 ; python_version >= "3.12" and python_version < "3.15" +mkdocs-material-extensions==1.3.1 ; python_version >= "3.12" and python_version < "3.15" +mkdocs-material==9.7.0 ; python_version >= "3.12" and python_version < "3.15" +mkdocs==1.6.1 ; python_version >= "3.12" and python_version < "3.15" +mkdocstrings-python==1.10.9 ; python_version >= "3.12" and python_version < "3.15" +mkdocstrings==0.25.2 ; python_version >= "3.12" and python_version < "3.15" +mpmath==1.3.0 ; python_version >= "3.12" and python_version < "3.15" +mypy-extensions==1.1.0 ; python_version >= "3.12" and python_version < "3.15" +mypy==1.18.2 ; python_version >= "3.12" and python_version < "3.15" +networkx==3.5 ; python_version >= "3.12" and python_version < "3.15" +nodeenv==1.9.1 ; python_version >= "3.12" and python_version < "3.15" +numpy==1.26.4 ; python_version >= "3.12" and python_version < "3.15" +nvidia-cublas-cu12==12.1.3.1 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cuda-cupti-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cuda-nvrtc-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cuda-runtime-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cudnn-cu12==9.1.0.70 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cufft-cu12==11.0.2.54 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-curand-cu12==10.3.2.106 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cusolver-cu12==11.4.5.107 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cusparse-cu12==12.1.0.106 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-nccl-cu12==2.20.5 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-nvjitlink-cu12==12.8.93 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-nvtx-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +opencv-python-headless==4.11.0.86 ; python_version >= "3.12" and python_version < "3.15" +osmnx==1.9.3 ; python_version >= "3.12" and python_version < "3.15" +packaging==25.0 ; python_version >= "3.12" and python_version < "3.15" +paginate==0.5.7 ; python_version >= "3.12" and python_version < "3.15" +pandas==2.3.3 ; python_version >= "3.12" and python_version < "3.15" +pathspec==0.12.1 ; python_version >= "3.12" and python_version < "3.15" +piexif==1.1.3 ; python_version >= "3.12" and python_version < "3.15" +pillow==10.4.0 ; python_version >= "3.12" and python_version < "3.15" +platformdirs==4.5.0 ; python_version >= "3.12" and python_version < "3.15" +pluggy==1.6.0 ; python_version >= "3.12" and python_version < "3.15" +pre-commit==3.8.0 ; python_version >= "3.12" and python_version < "3.15" +py360convert==0.1.0 ; python_version >= "3.12" and python_version < "3.15" +pydeck==0.9.1 ; python_version >= "3.12" and python_version < "3.15" +pygments==2.19.2 ; python_version >= "3.12" and python_version < "3.15" +pymdown-extensions==10.17.1 ; python_version >= "3.12" and python_version < "3.15" +pyogrio==0.9.0 ; python_version >= "3.12" and python_version < "3.15" +pyparsing==3.2.5 ; python_version >= "3.12" and python_version < "3.15" +pyproj==3.7.2 ; python_version >= "3.12" and python_version < "3.15" +pyside6-addons==6.11.0 ; python_version >= "3.12" and python_version < "3.15" +pyside6-essentials==6.11.0 ; python_version >= "3.12" and python_version < "3.15" +pyside6==6.11.0 ; python_version >= "3.12" and python_version < "3.15" +pytest-cov==5.0.0 ; python_version >= "3.12" and python_version < "3.15" +pytest==8.4.2 ; python_version >= "3.12" and python_version < "3.15" +python-dateutil==2.9.0.post0 ; python_version >= "3.12" and python_version < "3.15" +pytokens==0.3.0 ; python_version >= "3.12" and python_version < "3.15" +pytz==2025.2 ; python_version >= "3.12" and python_version < "3.15" +pyyaml-env-tag==1.1 ; python_version >= "3.12" and python_version < "3.15" +pyyaml==6.0.3 ; python_version >= "3.12" and python_version < "3.15" +regex==2025.11.3 ; python_version >= "3.12" and python_version < "3.15" +requests==2.32.5 ; python_version >= "3.12" and python_version < "3.15" +ruff==0.12.12 ; python_version >= "3.12" and python_version < "3.15" +safetensors==0.7.0 ; python_version >= "3.12" and python_version < "3.15" +scipy==1.16.3 ; python_version >= "3.12" and python_version < "3.15" +setuptools==80.9.0 ; python_version >= "3.12" and python_version < "3.15" +shapely==2.1.2 ; python_version >= "3.12" and python_version < "3.15" +shellingham==1.5.4 ; python_version >= "3.12" and python_version < "3.15" +shiboken6==6.11.0 ; python_version >= "3.12" and python_version < "3.15" +six==1.17.0 ; python_version >= "3.12" and python_version < "3.15" +sniffio==1.3.1 ; python_version >= "3.12" and python_version < "3.15" +sympy==1.14.0 ; python_version >= "3.12" and python_version < "3.15" +tabulate==0.9.0 ; python_version >= "3.12" and python_version < "3.15" +termcolor==3.2.0 ; python_version >= "3.12" and python_version < "3.15" +timm==1.0.22 ; python_version >= "3.12" and python_version < "3.15" +torch==2.4.1 ; python_version >= "3.12" and python_version < "3.15" +torchvision==0.19.1 ; python_version >= "3.12" and python_version < "3.15" +tqdm==4.67.1 ; python_version >= "3.12" and python_version < "3.15" +triton==3.0.0 ; python_version == "3.12" and platform_system == "Linux" and platform_machine == "x86_64" +typer-slim==0.20.0 ; python_version >= "3.12" and python_version < "3.15" +types-requests==2.32.4.20250913 ; python_version >= "3.12" and python_version < "3.15" +typing-extensions==4.15.0 ; python_version >= "3.12" and python_version < "3.15" +tzdata==2025.2 ; python_version >= "3.12" and python_version < "3.15" +urllib3==2.5.0 ; python_version >= "3.12" and python_version < "3.15" +virtualenv==20.35.4 ; python_version >= "3.12" and python_version < "3.15" +watchdog==6.0.0 ; python_version >= "3.12" and python_version < "3.15" +wcwidth==0.2.14 ; python_version >= "3.12" and python_version < "3.15" +yaspin==3.3.0 ; python_version >= "3.12" and python_version < "3.15" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..75722c7 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,85 @@ +anyio==4.11.0 ; python_version >= "3.12" and python_version < "3.15" +attrs==25.4.0 ; python_version >= "3.12" and python_version < "3.15" +certifi==2025.11.12 ; python_version >= "3.12" and python_version < "3.15" +charset-normalizer==3.4.4 ; python_version >= "3.12" and python_version < "3.15" +click-plugins==1.1.1.2 ; python_version >= "3.12" and python_version < "3.15" +click==8.3.1 ; python_version >= "3.12" and python_version < "3.15" +cligj==0.7.2 ; python_version >= "3.12" and python_version < "3.15" +clip @ git+https://github.com/openai/CLIP.git@dcba3cb2e2827b402d2701e7e1c7d9fed8a20ef1 ; python_version >= "3.12" and python_version < "3.15" +colorama==0.4.6 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Windows" +contourpy==1.3.3 ; python_version >= "3.12" and python_version < "3.15" +cycler==0.12.1 ; python_version >= "3.12" and python_version < "3.15" +filelock==3.20.0 ; python_version >= "3.12" and python_version < "3.15" +fiona==1.10.1 ; python_version >= "3.12" and python_version < "3.15" +fonttools==4.60.1 ; python_version >= "3.12" and python_version < "3.15" +fsspec==2025.10.0 ; python_version >= "3.12" and python_version < "3.15" +ftfy==6.3.1 ; python_version >= "3.12" and python_version < "3.15" +geopandas==1.1.1 ; python_version >= "3.12" and python_version < "3.15" +gpxpy==1.6.2 ; python_version >= "3.12" and python_version < "3.15" +h11==0.16.0 ; python_version >= "3.12" and python_version < "3.15" +hf-xet==1.2.0 ; python_version >= "3.12" and python_version < "3.15" and (platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "arm64" or platform_machine == "aarch64") +httpcore==1.0.9 ; python_version >= "3.12" and python_version < "3.15" +httpx==0.28.1 ; python_version >= "3.12" and python_version < "3.15" +huggingface-hub==1.1.5 ; python_version >= "3.12" and python_version < "3.15" +idna==3.11 ; python_version >= "3.12" and python_version < "3.15" +jinja2==3.1.6 ; python_version >= "3.12" and python_version < "3.15" +joblib==1.5.2 ; python_version >= "3.12" and python_version < "3.15" +kiwisolver==1.4.9 ; python_version >= "3.12" and python_version < "3.15" +markupsafe==3.0.3 ; python_version >= "3.12" and python_version < "3.15" +matplotlib==3.10.7 ; python_version >= "3.12" and python_version < "3.15" +mpmath==1.3.0 ; python_version >= "3.12" and python_version < "3.15" +networkx==3.5 ; python_version >= "3.12" and python_version < "3.15" +numpy==1.26.4 ; python_version >= "3.12" and python_version < "3.15" +nvidia-cublas-cu12==12.1.3.1 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cuda-cupti-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cuda-nvrtc-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cuda-runtime-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cudnn-cu12==9.1.0.70 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cufft-cu12==11.0.2.54 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-curand-cu12==10.3.2.106 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cusolver-cu12==11.4.5.107 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cusparse-cu12==12.1.0.106 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-nccl-cu12==2.20.5 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-nvjitlink-cu12==12.8.93 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-nvtx-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +opencv-python-headless==4.11.0.86 ; python_version >= "3.12" and python_version < "3.15" +osmnx==1.9.3 ; python_version >= "3.12" and python_version < "3.15" +packaging==25.0 ; python_version >= "3.12" and python_version < "3.15" +pandas==2.3.3 ; python_version >= "3.12" and python_version < "3.15" +piexif==1.1.3 ; python_version >= "3.12" and python_version < "3.15" +pillow==10.4.0 ; python_version >= "3.12" and python_version < "3.15" +py360convert==0.1.0 ; python_version >= "3.12" and python_version < "3.15" +pydeck==0.9.1 ; python_version >= "3.12" and python_version < "3.15" +pyogrio==0.9.0 ; python_version >= "3.12" and python_version < "3.15" +pyparsing==3.2.5 ; python_version >= "3.12" and python_version < "3.15" +pyproj==3.7.2 ; python_version >= "3.12" and python_version < "3.15" +pyside6-addons==6.11.0 ; python_version >= "3.12" and python_version < "3.15" +pyside6-essentials==6.11.0 ; python_version >= "3.12" and python_version < "3.15" +pyside6==6.11.0 ; python_version >= "3.12" and python_version < "3.15" +python-dateutil==2.9.0.post0 ; python_version >= "3.12" and python_version < "3.15" +pytz==2025.2 ; python_version >= "3.12" and python_version < "3.15" +pyyaml==6.0.3 ; python_version >= "3.12" and python_version < "3.15" +regex==2025.11.3 ; python_version >= "3.12" and python_version < "3.15" +requests==2.32.5 ; python_version >= "3.12" and python_version < "3.15" +safetensors==0.7.0 ; python_version >= "3.12" and python_version < "3.15" +scipy==1.16.3 ; python_version >= "3.12" and python_version < "3.15" +setuptools==80.9.0 ; python_version >= "3.12" and python_version < "3.15" +shapely==2.1.2 ; python_version >= "3.12" and python_version < "3.15" +shellingham==1.5.4 ; python_version >= "3.12" and python_version < "3.15" +shiboken6==6.11.0 ; python_version >= "3.12" and python_version < "3.15" +six==1.17.0 ; python_version >= "3.12" and python_version < "3.15" +sniffio==1.3.1 ; python_version >= "3.12" and python_version < "3.15" +sympy==1.14.0 ; python_version >= "3.12" and python_version < "3.15" +tabulate==0.9.0 ; python_version >= "3.12" and python_version < "3.15" +termcolor==3.2.0 ; python_version >= "3.12" and python_version < "3.15" +timm==1.0.22 ; python_version >= "3.12" and python_version < "3.15" +torch==2.4.1 ; python_version >= "3.12" and python_version < "3.15" +torchvision==0.19.1 ; python_version >= "3.12" and python_version < "3.15" +tqdm==4.67.1 ; python_version >= "3.12" and python_version < "3.15" +triton==3.0.0 ; python_version == "3.12" and platform_system == "Linux" and platform_machine == "x86_64" +typer-slim==0.20.0 ; python_version >= "3.12" and python_version < "3.15" +typing-extensions==4.15.0 ; python_version >= "3.12" and python_version < "3.15" +tzdata==2025.2 ; python_version >= "3.12" and python_version < "3.15" +urllib3==2.5.0 ; python_version >= "3.12" and python_version < "3.15" +wcwidth==0.2.14 ; python_version >= "3.12" and python_version < "3.15" +yaspin==3.3.0 ; python_version >= "3.12" and python_version < "3.15" From dbb82a2f78f214c4998b25f422a10f011c210bf2 Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:40:29 +0200 Subject: [PATCH 02/12] chore: add package skeleton and runtime configuration (#2) --- src/uq_desktop_processor/__init__.py | 8 + .../evaluation/__init__.py | 15 + .../layer_creation/__init__.py | 7 + src/uq_desktop_processor/logging_config.py | 445 ++++++++++++++++++ src/uq_desktop_processor/pipeline/__init__.py | 17 + .../street_view_analysis/__init__.py | 14 + 6 files changed, 506 insertions(+) create mode 100644 src/uq_desktop_processor/__init__.py create mode 100644 src/uq_desktop_processor/evaluation/__init__.py create mode 100644 src/uq_desktop_processor/layer_creation/__init__.py create mode 100644 src/uq_desktop_processor/logging_config.py create mode 100644 src/uq_desktop_processor/pipeline/__init__.py create mode 100644 src/uq_desktop_processor/street_view_analysis/__init__.py diff --git a/src/uq_desktop_processor/__init__.py b/src/uq_desktop_processor/__init__.py new file mode 100644 index 0000000..0d488c5 --- /dev/null +++ b/src/uq_desktop_processor/__init__.py @@ -0,0 +1,8 @@ +from importlib.metadata import PackageNotFoundError, version + +try: + __version__ = version("UrbanQuality-AI") +except PackageNotFoundError: # pragma: no cover + __version__ = "0.0.0" + +__all__ = ["__version__"] diff --git a/src/uq_desktop_processor/evaluation/__init__.py b/src/uq_desktop_processor/evaluation/__init__.py new file mode 100644 index 0000000..4ee0c1f --- /dev/null +++ b/src/uq_desktop_processor/evaluation/__init__.py @@ -0,0 +1,15 @@ +""" +Evaluation module: init . +""" + +from .clip_common import print_results +from .clip_evaluator import evaluate_images_with_clip +from .clip_prefilter import prefilter_folder +from .finetuned_evaluator import evaluate_images_with_finetuned + +__all__ = [ + "evaluate_images_with_clip", + "evaluate_images_with_finetuned", + "prefilter_folder", + "print_results", +] diff --git a/src/uq_desktop_processor/layer_creation/__init__.py b/src/uq_desktop_processor/layer_creation/__init__.py new file mode 100644 index 0000000..72779bf --- /dev/null +++ b/src/uq_desktop_processor/layer_creation/__init__.py @@ -0,0 +1,7 @@ +""" +Layer-creation public API for exporting scored points to vector formats. +""" + +from .vector_layers import export_point_layer + +__all__ = ["export_point_layer"] diff --git a/src/uq_desktop_processor/logging_config.py b/src/uq_desktop_processor/logging_config.py new file mode 100644 index 0000000..272bdb6 --- /dev/null +++ b/src/uq_desktop_processor/logging_config.py @@ -0,0 +1,445 @@ +""" +Central logging setup: UTC timestamps, optional colors, and file handlers. +Call `configure_logging` once at startup; use `getLogger(__name__)` afterward. +""" + +import logging +import os +import sys +import time +from dataclasses import dataclass +from typing import IO + +__all__ = ["configure_logging", "add_file_logging"] + + +COLORS = { + "DEBUG": "\033[90m", + "INFO": "\033[32m", + "WARNING": "\033[93m", + "ERROR": "\033[91m", + "CRITICAL": "\033[97;41m", + "RESET": "\033[0m", +} + + +@dataclass(frozen=True) +class ColorSupport: + """ + Represents whether ANSI color output is supported in the current environment. + + Attributes: + supported (bool): True if ANSI colors are supported, False otherwise. + reason (Optional[str]): Explanation why colors are not supported (if applicable). + env_hint (Optional[str]): Environment hint to provide user-specific tips (e.g. 'vscode', 'pycharm'). + """ + + supported: bool + reason: str | None = None + env_hint: str | None = None + + +class ColorEnv: + """ + Detects environment characteristics related to color/ANSI support + and provides methods to enable or disable ANSI colors in different terminals. + """ + + _WINDOWS_ANSI_ENABLED = False + _COLOR_HINT_SHOWN = False + + @staticmethod + def is_ci() -> bool: + """ + Detects if the current process is running inside a CI environment. + + :return: True if running in a known CI system, False otherwise. + """ + return os.environ.get("CI") == "1" or any( + os.environ.get(env_var) + for env_var in ( + "GITHUB_ACTIONS", + "GITLAB_CI", + "TF_BUILD", + "TEAMCITY_VERSION", + "BUILDKITE", + "TRAVIS", + "CIRCLECI", + "APPVEYOR", + "DRONE", + "JENKINS_URL", + ) + ) + + @staticmethod + def is_vscode() -> bool: + """ + Detects if the process is running inside VS Code's Integrated Terminal or Debug Console. + + :return: True if running in VS Code, False otherwise. + """ + return bool(os.environ.get("TERM_PROGRAM") == "vscode" or os.environ.get("VSCODE_PID")) + + @staticmethod + def is_pycharm() -> bool: + """ + Detects if the process is running inside the PyCharm IDE. + + :return: True if running in PyCharm, False otherwise. + """ + return bool(os.environ.get("PYCHARM_HOSTED")) + + @staticmethod + def is_windows_terminal() -> bool: + """ + Detects if the process is running in Windows Terminal or ConEmu. + + :return: True if running in Windows Terminal or ConEmu, False otherwise. + """ + return bool(os.environ.get("WT_SESSION") or os.environ.get("ConEmuPID")) + + @staticmethod + def is_jupyter() -> bool: + """ + Detects if the process is running inside a Jupyter or Spyder kernel. + + :return: True if in Jupyter, False otherwise. + """ + try: + import ipykernel # noqa: F401 + + return True + except ImportError: + return False + + @classmethod + def ensure_windows_ansi(cls) -> None: + """ + Ensures that ANSI escape sequences are enabled in Windows consoles. + Requires the `colorama` package. + + :return: None + """ + if cls._WINDOWS_ANSI_ENABLED or os.name != "nt": + return + + try: + import colorama # noqa E402 + except ImportError: + return + + colorama.just_fix_windows_console() + cls._WINDOWS_ANSI_ENABLED = True + + @staticmethod + def stream_isatty(stream: IO[str]) -> bool: + """ + Checks whether a given stream is connected to a TTY (interactive terminal). + + :param stream: The stream to check. + :return: True if the stream is a TTY, False otherwise. + """ + try: + return hasattr(stream, "isatty") and callable(stream.isatty) and stream.isatty() + except (OSError, ValueError): + return False + + @classmethod + def color_support_with_reason(cls, stream: IO[str]) -> ColorSupport: + """ + Determines whether colors are supported in the current environment, + including reasons and environment hints if disabled. + + :param stream: The output stream (e.g. sys.stderr). + :return: A ColorSupport instance with the decision and explanation. + """ + if os.environ.get("FORCE_COLOR"): + cls.ensure_windows_ansi() + return ColorSupport(True) + + if os.environ.get("NO_COLOR"): + return ColorSupport(False, "NO_COLOR is set.", None) + + if cls.is_pycharm(): + cls.ensure_windows_ansi() + return ColorSupport(True, env_hint="pycharm") + + if cls.is_vscode(): + cls.ensure_windows_ansi() + return ColorSupport(True, env_hint="vscode") + + if cls.is_windows_terminal(): + cls.ensure_windows_ansi() + + if cls.is_jupyter(): + return ColorSupport(True, env_hint="jupyter") + + if not cls.stream_isatty(stream): + return ColorSupport(False, "Output is not a TTY (file/pipe/IDE wo/ emulation).", None) + + if os.name == "nt": + cls.ensure_windows_ansi() + return ( + ColorSupport(True) + if cls._WINDOWS_ANSI_ENABLED + else ColorSupport(False, "Windows without 'colorama'.", "windows") + ) + + terminal_type = os.environ.get("TERM", "") + if terminal_type in ("", "dumb"): + return ColorSupport(False, f"TERM={terminal_type!r} does not support ANSI.", "unix") + + return ColorSupport(True) + + @classmethod + def maybe_show_color_hint(cls, reason: str | None, env_hint: str | None) -> None: + """ + Optionally prints a hint to stderr explaining why colors are disabled + and how to enable them, depending on the environment. + + :param reason: Reason why colors are disabled. + :param env_hint: Environment hint (if available). + :return: None + """ + if cls._COLOR_HINT_SHOWN or cls.is_ci() or os.environ.get("LOG_COLOR_HINT") != "1": + return + + if not reason: + return + + cls._COLOR_HINT_SHOWN = True + + base_tips = [ + "- If redirecting to a file/pipeline: colors are intentionally disabled.", + "- Remove the `NO_COLOR` variable if it's set.", + "- You can force colors: `FORCE_COLOR=1`.", + ] + + env_tips = { + "pycharm": ["- PyCharm: enable **Run → Emulate terminal in output console**."], + "vscode": [ + "- VS Code: use the **Integrated Terminal** (View → Terminal),", + " or set `FORCE_COLOR=1` in your Debug Configuration.", + ], + "windows": ["- Windows: `pip install colorama` or run in Windows Terminal."], + "unix": [ + "- Linux/macOS: ensure `TERM` is something like `xterm-256color`.", + "- In Docker, run with a TTY: `docker run -it ...`.", + ], + "jupyter": ["- Jupyter: colors usually work; to disable set `NO_COLOR=1`."], + None: [ + "- Windows: consider **Windows Terminal** or `pip install colorama`.", + "- VS Code/PyCharm: run via the **Integrated/Emulated Terminal**.", + "- Docker: add `-t` (pseudo-TTY).", + ], + } + + tips = env_tips.get(env_hint, env_tips[None]) + + message = ( + "[log-color] Colors are disabled: " + f"{reason} How to enable them:\n " + + "\n ".join(tips + base_tips) + + "\n (Silence tips: LOG_COLOR_HINT=0 / off by default)" + ) + + try: + print(message, file=sys.stderr) + except (OSError, ValueError): + pass + + +class UtcFormatter(logging.Formatter): + """ + Formatter that enforces UTC timestamps for log records. + """ + + @staticmethod + def _converter(secs: float | None) -> time.struct_time: + return time.gmtime(0 if secs is None else secs) + + converter = _converter + + +class ColoredFormatter(UtcFormatter): + """ + A log formatter that applies ANSI color codes to messages based on log level. + + Extends UtcFormatter to add colorization when enabled. + """ + + def __init__(self, format_string: str, date_format: str | None, use_color: bool) -> None: + super().__init__(fmt=format_string, datefmt=date_format) + self.use_color = use_color + + def format(self, record: logging.LogRecord) -> str: + message = super().format(record) + + if not self.use_color: + return message + + color = COLORS.get(record.levelname, COLORS["RESET"]) + return f"{color}{message}{COLORS['RESET']}" + + +class HandlerFactory: + """ + Factory for creating logging handlers with appropriate formatters + (stream handlers with optional colors, or file handlers without colors). + """ + + @staticmethod + def stream_handler(stream: IO[str], fmt: str, date_format: str) -> logging.Handler: + handler = logging.StreamHandler(stream) + handler.setLevel(logging.NOTSET) + + support = ColorEnv.color_support_with_reason(stream) + if not support.supported: + ColorEnv.maybe_show_color_hint(support.reason, support.env_hint) + + handler.setFormatter(ColoredFormatter(format_string=fmt, date_format=date_format, use_color=support.supported)) + return handler + + @staticmethod + def file_handler(path: str, fmt: str, date_format: str, encoding: str = "utf-8") -> logging.Handler: + absolute_path = os.path.abspath(path) + handler = logging.FileHandler(absolute_path, encoding=encoding) + handler.setLevel(logging.NOTSET) + handler.setFormatter(UtcFormatter(fmt=fmt, datefmt=date_format)) + return handler + + +class LoggingConfigurator: + """ + Provides high-level configuration methods for setting up logging + with optional color support for console and file handlers. + """ + + @staticmethod + def configure( + level: int = logging.DEBUG, + stream: IO[str] = sys.stderr, + format_string: str = "%(asctime)s.%(msecs)03dZ [%(levelname)s] %(name)s: %(message)s", + date_format: str = "%Y-%m-%dT%H:%M:%S", + *, + replace_handlers: bool = False, + capture_warnings: bool = True, + ) -> None: + """ + Configures global logging with colorized console output. + + :param level: Minimum logging level (default DEBUG). + :param stream: Stream to log to (default sys.stderr). + :param format_string: Log message format string. + :param date_format: Date/time format string. + :param replace_handlers: If True, removes existing handlers first. + :param capture_warnings: If True, redirects warnings to logging. + :return: None + """ + root = logging.getLogger() + + if replace_handlers: + for handler in root.handlers[:]: + root.removeHandler(handler) + if hasattr(root, "_colored_logging_configured"): + delattr(root, "_colored_logging_configured") + + if getattr(root, "_colored_logging_configured", False) and not replace_handlers: + if capture_warnings: + logging.captureWarnings(True) + return + + root.setLevel(level) + root.addHandler(HandlerFactory.stream_handler(stream, format_string, date_format)) + root._colored_logging_configured = True # type: ignore[attr-defined] + + if capture_warnings: + logging.captureWarnings(True) + + @staticmethod + def add_file_logging( + path: str, + level: int = logging.DEBUG, + format_string: str = "%(asctime)s.%(msecs)03dZ [%(levelname)s] %(name)s: %(message)s", + date_format: str = "%Y-%m-%dT%H:%M:%S", + encoding: str = "utf-8", + ) -> None: + """ + Adds a file handler to the global logger, writing logs in UTC. + + :param path: Path to the log file. + :param level: Minimum logging level (default DEBUG). + :param format_string: Log message format string. + :param date_format: Date/time format string. + :param encoding: File encoding (default UTF-8). + :return: None + """ + root = logging.getLogger() + absolute_path = os.path.abspath(path) + + for handler in root.handlers: + if isinstance(handler, logging.FileHandler) and getattr(handler, "baseFilename", None) == absolute_path: + if root.level > level: + root.setLevel(level) + return + + root.addHandler(HandlerFactory.file_handler(absolute_path, format_string, date_format, encoding)) + + if root.level > level: + root.setLevel(level) + + +def configure_logging( + level: int = logging.DEBUG, + stream: IO[str] = sys.stderr, + format_string: str = "%(asctime)s.%(msecs)03dZ [%(levelname)s] %(name)s: %(message)s", + date_format: str = "%Y-%m-%dT%H:%M:%S", + *, + replace_handlers: bool = False, + capture_warnings: bool = True, +) -> None: + """ + Public API to configure global logging with colorized console output. + + :param level: Minimum logging level (default DEBUG). + :param stream: Stream to log to (default sys.stderr). + :param format_string: Log message format string. + :param date_format: Date/time format string. + :param replace_handlers: If True, removes existing handlers first. + :param capture_warnings: If True, redirects warnings to logging. + :return: None + """ + LoggingConfigurator.configure( + level=level, + stream=stream, + format_string=format_string, + date_format=date_format, + replace_handlers=replace_handlers, + capture_warnings=capture_warnings, + ) + + +def add_file_logging( + path: str, + level: int = logging.DEBUG, + format_string: str = "%(asctime)s.%(msecs)03dZ [%(levelname)s] %(name)s: %(message)s", # Default - ISO-8601 + date_format: str = "%Y-%m-%dT%H:%M:%S", + encoding: str = "utf-8", +) -> None: + """ + Public API to add file logging to the global logger. + + :param path: Path to the log file. + :param level: Minimum logging level (default DEBUG). + :param format_string: Log message format string. + :param date_format: Date/time format string. + :param encoding: File encoding (default UTF-8). + :return: None + """ + LoggingConfigurator.add_file_logging( + path=path, + level=level, + format_string=format_string, + date_format=date_format, + encoding=encoding, + ) diff --git a/src/uq_desktop_processor/pipeline/__init__.py b/src/uq_desktop_processor/pipeline/__init__.py new file mode 100644 index 0000000..863a8f0 --- /dev/null +++ b/src/uq_desktop_processor/pipeline/__init__.py @@ -0,0 +1,17 @@ +""" +Public pipeline API: defaults, orchestrator, CLI entrypoint, and point/prefilter helpers. +""" + +from uq_desktop_processor.pipeline.cli import run_pipeline +from uq_desktop_processor.pipeline.defaults import DEFAULT_CONFIG +from uq_desktop_processor.pipeline.pipeline import UrbanQualityAIPipeline +from uq_desktop_processor.pipeline.points_io import load_sampling_points_latlon +from uq_desktop_processor.pipeline.prefilter_config import prefilter_prompts_from_config + +__all__ = [ + "DEFAULT_CONFIG", + "UrbanQualityAIPipeline", + "load_sampling_points_latlon", + "prefilter_prompts_from_config", + "run_pipeline", +] diff --git a/src/uq_desktop_processor/street_view_analysis/__init__.py b/src/uq_desktop_processor/street_view_analysis/__init__.py new file mode 100644 index 0000000..08db078 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/__init__.py @@ -0,0 +1,14 @@ +""" +Street-view analysis: road sampling, Mapillary download, and Euler route generation. +""" + +from .chinese_postman_routes import EulerRoutesResult, generate_clean_routes +from .images_downloader import download_mapillary_images +from .road_points_generator import build_points_pipeline + +__all__ = [ + "EulerRoutesResult", + "build_points_pipeline", + "download_mapillary_images", + "generate_clean_routes", +] From ee1adfb64821013bb34a5032c137440c93ce9cbe Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:41:48 +0200 Subject: [PATCH 03/12] feat(street-view): add road graph, sampling points and route generation (#3) --- .../chinese_postman_routes/__init__.py | 9 + .../chinese_postman_routes/generate.py | 166 +++++++++++++++ .../chinese_postman_routes/gpx_export.py | 52 +++++ .../chinese_postman_routes/polyline.py | 57 ++++++ .../chinese_postman_routes/postman.py | 53 +++++ .../chinese_postman_routes/result.py | 19 ++ .../road_graph_prepare/__init__.py | 11 + .../road_graph_prepare/prepare_graph.py | 162 +++++++++++++++ .../road_points_generator/__init__.py | 16 ++ .../road_points_generator/filtering.py | 133 ++++++++++++ .../road_points_generator/generator.py | 102 ++++++++++ .../road_points_generator/io.py | 192 ++++++++++++++++++ .../road_points_generator/run.py | 121 +++++++++++ 13 files changed, 1093 insertions(+) create mode 100644 src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/__init__.py create mode 100644 src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/generate.py create mode 100644 src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/gpx_export.py create mode 100644 src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/polyline.py create mode 100644 src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/postman.py create mode 100644 src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/result.py create mode 100644 src/uq_desktop_processor/street_view_analysis/road_graph_prepare/__init__.py create mode 100644 src/uq_desktop_processor/street_view_analysis/road_graph_prepare/prepare_graph.py create mode 100644 src/uq_desktop_processor/street_view_analysis/road_points_generator/__init__.py create mode 100644 src/uq_desktop_processor/street_view_analysis/road_points_generator/filtering.py create mode 100644 src/uq_desktop_processor/street_view_analysis/road_points_generator/generator.py create mode 100644 src/uq_desktop_processor/street_view_analysis/road_points_generator/io.py create mode 100644 src/uq_desktop_processor/street_view_analysis/road_points_generator/run.py diff --git a/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/__init__.py b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/__init__.py new file mode 100644 index 0000000..a306e6a --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/__init__.py @@ -0,0 +1,9 @@ +""" +Road-network coverage routes (Chinese postman / Eulerian circuits) split on a grid; +export to GPX in WGS84. +""" + +from .generate import generate_clean_routes +from .result import EulerRoutesResult + +__all__ = ["EulerRoutesResult", "generate_clean_routes"] diff --git a/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/generate.py b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/generate.py new file mode 100644 index 0000000..83b0788 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/generate.py @@ -0,0 +1,166 @@ +""" +Grid-sector Euler routes: truncate graph per tile, Chinese postman per component, write GPX. +""" + +import logging +from pathlib import Path +from typing import cast + +import networkx as nx +import numpy as np +import osmnx as ox +from osmnx.truncate import truncate_graph_bbox + +from uq_desktop_processor.street_view_analysis.road_graph_prepare import load_route_aligned_graph_wgs84 + +from .gpx_export import build_gpx, write_gpx +from .postman import chinese_postman_polyline +from .result import EulerRoutesResult + +log = logging.getLogger(__name__) + + +def generate_clean_routes( + city_name: str = "Katowice, Poland", + grid_size: tuple[int, int] = (3, 3), + output_dir: str | Path = "routes_chinese_postman_gpx", + *, + consolidate_tolerance_m: float = 15.0, + use_cache: bool = True, + region_geojson_path: str | Path | None = None, + road_geojson_path: str | Path | None = None, +) -> EulerRoutesResult: + """ + Split the study area into a lat/lon grid, run Chinese postman on each sector, emit GPX files. + + :param city_name: Default place when no region or road file is passed. + :param grid_size: ``(columns, rows)`` of bounding-box sectors. + :param output_dir: Directory for ``trasa_*.gpx`` outputs. + :param consolidate_tolerance_m: Same as :func:`load_route_aligned_graph_wgs84`. + :param use_cache: OSMnx HTTP cache. + :param region_geojson_path: Optional polygon AOI instead of ``city_name``. + :param road_geojson_path: Optional local roads instead of downloading. + :return: Resolved paths and polylines for all successful sectors. + + Example:: + In: generate_clean_routes(city_name="Katowice, Poland", grid_size=(2, 2)).gpx_paths + Out: tuple of saved GPX paths, e.g. (Path(".../trasa_1.gpx"), Path(".../trasa_2.gpx"), ...) + """ + output_directory = Path(output_dir) + output_directory.mkdir(parents=True, exist_ok=True) + + geographic_graph, city_gdf = load_route_aligned_graph_wgs84( + city_name=city_name, + region_geojson_path=region_geojson_path, + road_geojson_path=road_geojson_path, + consolidate_tolerance_m=consolidate_tolerance_m, + use_cache=use_cache, + ) + + # OSMnx truncate_* expects a MultiDiGraph (successors/predecessors); load_route_aligned_graph_wgs84 returns MultiGraph. + directed_geographic_graph = nx.MultiDiGraph(geographic_graph) + directed_geographic_graph.graph.update(geographic_graph.graph) + + w_bound, s_bound, e_bound, n_bound = city_gdf.total_bounds + column_count, row_count = grid_size[0], grid_size[1] + # Grid lines in WGS84; each cell becomes one sector + lon_grid_boundaries = np.linspace(w_bound, e_bound, column_count + 1) + lat_grid_boundaries = np.linspace(s_bound, n_bound, row_count + 1) + + sectors: list[dict[str, float]] = [] + for lat_index in range(len(lat_grid_boundaries) - 1): + for lon_index in range(len(lon_grid_boundaries) - 1): + sectors.append( + { + "s": float(lat_grid_boundaries[lat_index]), + "n": float(lat_grid_boundaries[lat_index + 1]), + "w": float(lon_grid_boundaries[lon_index]), + "e": float(lon_grid_boundaries[lon_index + 1]), + } + ) + + gpx_paths: list[Path] = [] + polylines: list[tuple[tuple[float, float], ...]] = [] + + for sector_index, sector_bounds in enumerate(sectors): + tile_number = sector_index + 1 + log.info("Sector %s / %s", tile_number, len(sectors)) + + try: + # OSMnx bbox order: north, south, east, west + bounding_box = (sector_bounds["n"], sector_bounds["s"], sector_bounds["e"], sector_bounds["w"]) + sector_graph = truncate_graph_bbox(directed_geographic_graph, bbox=bounding_box, truncate_by_edge=True) + + if sector_graph is None or len(sector_graph.nodes) < 2: + log.warning("Sector %s: empty graph, skipping.", tile_number) + continue + + undirected_sector_graph = ox.get_undirected(cast(nx.MultiDiGraph, sector_graph)) + connected_components = list(nx.connected_components(undirected_sector_graph)) + connected_components.sort(key=len, reverse=True) # Larger components first (typical main roads) + + sector_polylines: list[list[tuple[float, float]]] = [] + + for component_index, component_nodes in enumerate(connected_components, start=1): + component_subgraph = undirected_sector_graph.subgraph(component_nodes).copy() + if component_subgraph.number_of_edges() < 1: + continue + try: + route_polyline = chinese_postman_polyline(cast(nx.MultiGraph, component_subgraph)) + except Exception as component_error: + log.exception( + "Sector %s subgraph %s / %s: Chinese postman failed: %s", + tile_number, + component_index, + len(connected_components), + component_error, + ) + continue + if len(route_polyline) < 2: + continue + sector_polylines.append(route_polyline) + + if not sector_polylines: + log.warning("Sector %s: no routable subgraphs, skipping file.", tile_number) + continue + + # Inform when one tile produced multiple disjoint walks + # Count only components that actually contain edges (ignore isolated-node components). + component_count_with_edges = sum( + 1 + for component_nodes in connected_components + if undirected_sector_graph.subgraph(component_nodes).number_of_edges() >= 1 + ) + if component_count_with_edges > 1: + log.info( + "Sector %s: %s route(s) covering %s disconnected subgraph(s) with edges.", + tile_number, + len(sector_polylines), + component_count_with_edges, + ) + + gpx_document = build_gpx(sector_polylines, sector_name=f"Sector {tile_number}") + gpx_file_path = output_directory / f"route_{tile_number}.gpx" + write_gpx(gpx_file_path, gpx_document) + log.info("Wrote %s", gpx_file_path) + + gpx_paths.append(gpx_file_path) + polylines.extend(tuple(polyline) for polyline in sector_polylines) + + except ValueError as error: + # Empty bbox / polygon (e.g. sector outside drivable network after simplify) + if "no graph nodes" in str(error).lower(): + log.warning("Sector %s: no graph nodes in sector bounds, skipping.", tile_number) + continue + raise + except Exception as error: + log.exception("Error in sector %s: %s", tile_number, error) + + return EulerRoutesResult( + output_dir=output_directory.resolve(), + gpx_paths=tuple(gpx_paths), + polylines_wgs84=tuple(polylines), + ) + + +__all__ = ["generate_clean_routes"] diff --git a/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/gpx_export.py b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/gpx_export.py new file mode 100644 index 0000000..4212043 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/gpx_export.py @@ -0,0 +1,52 @@ +""" +Build GPX documents from WGS84 polylines and write them to disk. +""" + +from pathlib import Path + +import gpxpy.gpx + + +def build_gpx(polylines_wgs84: list[list[tuple[float, float]]], *, sector_name: str) -> gpxpy.gpx.GPX: + """ + Create one GPX with one track per polyline; split tracks are named with a part suffix. + + :param polylines_wgs84: Each inner list is ``(longitude, latitude)`` vertices. + :param sector_name: Base name for track metadata. + :return: In-memory GPX object. + + Example:: + In: build_gpx([[(19.94, 50.06), (19.95, 50.06)]], sector_name="Sector 1") + Out: GPX with 1 track, 1 segment, 2 points, track name "Sector 1" + """ + gpx = gpxpy.gpx.GPX() + for polyline_coordinates in polylines_wgs84: + # One track + one segment per closed/open walk + track = gpxpy.gpx.GPXTrack() + gpx.tracks.append(track) + track_segment = gpxpy.gpx.GPXTrackSegment() + track.segments.append(track_segment) + for longitude, latitude in polyline_coordinates: + track_segment.points.append(gpxpy.gpx.GPXTrackPoint(latitude=latitude, longitude=longitude)) + + # Multiple subgraphs -> numbered track names + for track_index, track in enumerate(gpx.tracks): + if len(gpx.tracks) == 1: + track.name = sector_name + else: + track.name = f"{sector_name} part {track_index + 1}" + return gpx + + +def write_gpx(output_path: Path, gpx_document: gpxpy.gpx.GPX) -> None: + """ + Serialize a GPX object to UTF-8 text. + + :param output_path: Destination ``.gpx`` path. + :param gpx_document: Object from :func:`build_gpx`. + + Example:: + In: write_gpx(Path("routes/trasa_1.gpx"), gpx) + Out: "routes/trasa_1.gpx" created on disk (UTF-8 GPX XML) + """ + output_path.write_text(gpx_document.to_xml(), encoding="utf-8") diff --git a/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/polyline.py b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/polyline.py new file mode 100644 index 0000000..dbf6b04 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/polyline.py @@ -0,0 +1,57 @@ +""" +Order edge geometries along an Eulerian circuit into a single WGS84 polyline. +""" + +from typing import Any + +import networkx as nx + + +def polyline_from_eulerian_circuit( + eulerian_graph: nx.MultiGraph, + circuit: list[tuple[Any, Any, Any]], +) -> list[tuple[float, float]]: + """ + Walk the circuit and concatenate edge ``geometry`` coords (or node x/y) in order. + + Coordinates are ``(longitude, latitude)``. Duplicate consecutive vertices are skipped. + + :param eulerian_graph: Graph whose edges may carry Shapely line geometries (OSMnx-style). + :param circuit: Eulerian circuit from ``nx.eulerian_circuit(..., keys=True)``. + :return: Ordered vertex list along the closed walk. + + Example:: + In: polyline_from_eulerian_circuit(eulerian_graph, circuit) + Out: [(19.94, 50.06), (19.95, 50.06), ...] + """ + ordered_polyline: list[tuple[float, float]] = [] + for start_node, end_node, edge_key in circuit: + edge_data = eulerian_graph.get_edge_data(start_node, end_node, edge_key) + start_node_data = eulerian_graph.nodes[start_node] + + if edge_data is not None and "geometry" in edge_data: + coords = list(edge_data["geometry"].coords) + # Orient LineString to start near circuit start_node + start_distance_squared = (coords[0][0] - start_node_data["x"]) ** 2 + ( + coords[0][1] - start_node_data["y"] + ) ** 2 + end_distance_squared = (coords[-1][0] - start_node_data["x"]) ** 2 + ( + coords[-1][1] - start_node_data["y"] + ) ** 2 + if end_distance_squared < start_distance_squared: + coords = coords[::-1] + for lon, lat in coords: + # Append only when this vertex differs from the previous one. + # This avoids duplicate consecutive points at segment joins. + if not ordered_polyline or (ordered_polyline[-1][1] != lat or ordered_polyline[-1][0] != lon): + ordered_polyline.append((float(lon), float(lat))) + else: + # Straight edge: use node coordinates only + for node_id in (start_node, end_node): + node_data = eulerian_graph.nodes[node_id] + node_lon = float(node_data["x"]) + node_lat = float(node_data["y"]) + # Same dedup rule for fallback node-based coordinates. + if not ordered_polyline or (ordered_polyline[-1][1] != node_lat or ordered_polyline[-1][0] != node_lon): + ordered_polyline.append((node_lon, node_lat)) + return ordered_polyline diff --git a/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/postman.py b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/postman.py new file mode 100644 index 0000000..59ec343 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/postman.py @@ -0,0 +1,53 @@ +""" +Chinese postman: duplicate edges to balance odd degrees, then extract an Euler tour polyline. +""" + +from typing import Any + +import networkx as nx + +from .polyline import polyline_from_eulerian_circuit + + +def chinese_postman_polyline(undirected_graph: nx.MultiGraph) -> list[tuple[float, float]]: + """ + Minimum-length closed walk covering every edge at least once (undirected, connected, with edges). + + Odd-degree nodes are paired by min-weight matching on shortest-path distances; duplicated + edges are added, then an Euler circuit is converted to a ``(lon, lat)`` polyline. + + :param undirected_graph: Road subgraph; edge attribute ``length`` weights paths and matching. + :return: Closed polyline in WGS84 node order. + + Example:: + In: chinese_postman_polyline(undirected_graph) + Out: [(19.94, 50.06), (19.95, 50.06), ...] + """ + odd_degree_nodes = [node_id for node_id, degree in undirected_graph.degree() if degree % 2 == 1] + odd_node_matching: Any = [] + if odd_degree_nodes: + # Pair odd vertices by shortest-path length; min matching yields min duplicate mileage + odd_complete_graph = nx.Graph() + for odd_node_index, source_node in enumerate(odd_degree_nodes): + distance_by_node = nx.single_source_dijkstra_path_length(undirected_graph, source_node, weight="length") + for target_node in odd_degree_nodes[odd_node_index + 1 :]: + if target_node in distance_by_node: + odd_complete_graph.add_edge(source_node, target_node, weight=distance_by_node[target_node]) + odd_node_matching = nx.algorithms.matching.min_weight_matching(odd_complete_graph, weight="weight") + + # Start from original edges; duplicate along shortest paths to make all degrees even + eulerian_graph = nx.MultiGraph(undirected_graph) + for source_node, target_node in odd_node_matching: + shortest_path_nodes = nx.shortest_path(undirected_graph, source_node, target_node, weight="length") + for path_index in range(len(shortest_path_nodes) - 1): + path_start_node, path_end_node = shortest_path_nodes[path_index], shortest_path_nodes[path_index + 1] + edge_data = undirected_graph.get_edge_data(path_start_node, path_end_node) + # MultiGraph: pick first parallel edge's attrs when duplicating + edge_attributes = edge_data[0] if isinstance(edge_data, dict) and 0 in edge_data else edge_data + if isinstance(edge_attributes, dict): + eulerian_graph.add_edge(path_start_node, path_end_node, **edge_attributes) + else: + eulerian_graph.add_edge(path_start_node, path_end_node) + + eulerian_circuit_edges = list(nx.eulerian_circuit(eulerian_graph, keys=True)) + return polyline_from_eulerian_circuit(eulerian_graph, eulerian_circuit_edges) diff --git a/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/result.py b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/result.py new file mode 100644 index 0000000..6173367 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/chinese_postman_routes/result.py @@ -0,0 +1,19 @@ +""" +Container for GPX paths and polylines returned by grid-sector route generation. +""" + +from dataclasses import dataclass, field +from pathlib import Path + + +@dataclass(frozen=True) +class EulerRoutesResult: + """ + Output directory, list of GPX paths, and WGS84 polylines (one sequence per route). + + ``polylines_wgs84`` has multiple entries when a sector contained several disconnected subgraphs. + """ + + output_dir: Path + gpx_paths: tuple[Path, ...] = field(default_factory=tuple) + polylines_wgs84: tuple[tuple[tuple[float, float], ...], ...] = field(default_factory=tuple) diff --git a/src/uq_desktop_processor/street_view_analysis/road_graph_prepare/__init__.py b/src/uq_desktop_processor/street_view_analysis/road_graph_prepare/__init__.py new file mode 100644 index 0000000..645a73e --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/road_graph_prepare/__init__.py @@ -0,0 +1,11 @@ +""" +OSMnx road graph loading with highway filtering and metric edge extraction. +""" + +from .prepare_graph import ( + EXCLUDED_HIGHWAY_TYPES, + load_route_aligned_graph_wgs84, + route_aligned_edges_web_mercator, +) + +__all__ = ["EXCLUDED_HIGHWAY_TYPES", "load_route_aligned_graph_wgs84", "route_aligned_edges_web_mercator"] diff --git a/src/uq_desktop_processor/street_view_analysis/road_graph_prepare/prepare_graph.py b/src/uq_desktop_processor/street_view_analysis/road_graph_prepare/prepare_graph.py new file mode 100644 index 0000000..1958bd2 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/road_graph_prepare/prepare_graph.py @@ -0,0 +1,162 @@ +""" +Load a drive network from OSM or files, filter highways, consolidate intersections, project to WGS84. +""" + +import logging +from pathlib import Path +from typing import Any, cast + +import geopandas as gpd +import networkx as nx +import osmnx as ox + +log = logging.getLogger(__name__) + +EXCLUDED_HIGHWAY_TYPES = frozenset( + { + "motorway", + "motorway_link", + "trunk", + "trunk_link", + } +) + + +def _edge_has_excluded_highway(edge_data: dict[str, Any]) -> bool: + """ + Return True if an edge's ``highway`` tag is in :data:`EXCLUDED_HIGHWAY_TYPES`. + + :param edge_data: OSMnx edge attribute dict. + :return: Whether the edge should be dropped before routing. + + Example:: + In: _edge_has_excluded_highway({"highway": "motorway"}) + Out: True + """ + highway_value = edge_data.get("highway") + if highway_value is None: + return False + if isinstance(highway_value, str): + return highway_value in EXCLUDED_HIGHWAY_TYPES + if isinstance(highway_value, list | tuple): + return any( + isinstance(highway_entry, str) and highway_entry in EXCLUDED_HIGHWAY_TYPES + for highway_entry in highway_value + ) + return False + + +def load_route_aligned_graph_wgs84( + *, + city_name: str | None = None, + region_geojson_path: str | Path | None = None, + road_geojson_path: str | Path | None = None, + consolidate_tolerance_m: float = 15.0, + use_cache: bool = True, +) -> tuple[nx.MultiGraph, gpd.GeoDataFrame]: + """ + Build an undirected multigraph in EPSG:4326 for routing and point sampling. + + Exactly one of ``city_name``, ``region_geojson_path``, or ``road_geojson_path`` must be set. + Freeway/trunk edges are removed, intersections are merged, then the graph is reprojected to WGS84. + + :param city_name: OSM place query. + :param region_geojson_path: Polygon file to download a network inside. + :param road_geojson_path: Existing road lines to turn into a graph. + :param consolidate_tolerance_m: Meters for ``ox.consolidate_intersections``. + :param use_cache: OSMnx HTTP cache toggle. + :return: ``(graph_wgs84, area_or_edges_gdf)`` for bounds or bookkeeping. + :raises ValueError: If not exactly one source is provided. + + Example:: + In: load_route_aligned_graph_wgs84(city_name="Katowice, Poland") + Out: (nx.MultiGraph with WGS84 node coords, GeoDataFrame describing area/edges bounds) + """ + ox.settings.use_cache = use_cache # type: ignore + + sources = [ + city_name is not None, + region_geojson_path is not None, + road_geojson_path is not None, + ] + if sum(sources) != 1: + msg = "Provide exactly one of: city_name, region_geojson_path, road_geojson_path." + raise ValueError(msg) + + # Branch 1: user-supplied line geometries -> graph + if road_geojson_path is not None: + road_file_path = Path(road_geojson_path) + log.info("Loading road network from file: %s", road_file_path) + road_edges_gdf = gpd.read_file(road_file_path) + if road_edges_gdf.crs is None: + road_edges_gdf = road_edges_gdf.set_crs("EPSG:4326") + + raw_graph = ox.graph_from_gdfs(gdf_nodes=cast(Any, None), gdf_edges=road_edges_gdf) + city_gdf = road_edges_gdf.to_crs("EPSG:4326") + # Branch 2: polygon AOI -> download inside + elif region_geojson_path is not None: + region_file_path = Path(region_geojson_path) + log.info("Loading region polygon from file: %s", region_file_path) + region_gdf = gpd.read_file(region_file_path) + region_polygon_union = region_gdf.unary_union + raw_graph = ox.graph_from_polygon(region_polygon_union, network_type="drive", simplify=True) + city_gdf = region_gdf.to_crs("EPSG:4326") + # Branch 3: named place -> download + else: + assert city_name is not None + log.info("Downloading and building graph for %s", city_name) + raw_graph = ox.graph_from_place(city_name, network_type="drive", simplify=True) + city_gdf = ox.geocode_to_gdf(city_name) + + # Drop motorways/trunk and any nodes left isolated + edges_to_remove = [ + (start_node, end_node, edge_key) + for start_node, end_node, edge_key, edge_attributes in raw_graph.edges(data=True, keys=True) # type: ignore + if _edge_has_excluded_highway(edge_attributes) + ] + raw_graph.remove_edges_from(edges_to_remove) + isolated_nodes = list(nx.isolates(raw_graph)) + raw_graph.remove_nodes_from(isolated_nodes) + log.info("Removed %s edges and %s isolated nodes.", len(edges_to_remove), len(isolated_nodes)) + + # Consolidation runs in projected (metric) CRS + projected_graph = ox.project_graph(raw_graph) + log.info("Consolidating intersections (tolerance=%s m)", consolidate_tolerance_m) + consolidated_graph = ox.consolidate_intersections( + projected_graph, + rebuild_graph=True, + tolerance=consolidate_tolerance_m, + dead_ends=False, + ) + + geographic_directed_graph = ox.project_graph(consolidated_graph, to_crs="EPSG:4326") + + # Undirected multigraph for downstream algorithms + geographic_undirected_graph = nx.MultiGraph(geographic_directed_graph) + geographic_undirected_graph.graph.update(geographic_directed_graph.graph) # type: ignore + + return geographic_undirected_graph, city_gdf + + +def route_aligned_edges_web_mercator(geographic_graph: nx.MultiGraph) -> gpd.GeoDataFrame: + """ + Export non-duplicate road edges as a Web Mercator GeoDataFrame for metric sampling. + + :param geographic_graph: Output of :func:`load_route_aligned_graph_wgs84`. + :return: Edge table with unique geometries in EPSG:3857. + + Example:: + In: route_aligned_edges_web_mercator(geographic_graph).crs.to_string() + Out: "EPSG:3857" + """ + edges = ox.graph_to_gdfs(cast(nx.MultiDiGraph, geographic_graph), nodes=False, edges=True) + edges = edges.to_crs(epsg=3857) + # Same physical street can appear as two directed rows + return edges.drop_duplicates(subset="geometry") + + +__all__ = [ + "EXCLUDED_HIGHWAY_TYPES", + "load_route_aligned_graph_wgs84", + "route_aligned_edges_web_mercator", +] diff --git a/src/uq_desktop_processor/street_view_analysis/road_points_generator/__init__.py b/src/uq_desktop_processor/street_view_analysis/road_points_generator/__init__.py new file mode 100644 index 0000000..244ad8b --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/road_points_generator/__init__.py @@ -0,0 +1,16 @@ +""" +Road-network sampling points: load graph, generate points, optional filtering. +""" + +from .filtering import filter_close_points +from .generator import generate_points_along_roads +from .io import download_road_network, read_road_geojson +from .run import build_points_pipeline + +__all__ = [ + "build_points_pipeline", + "download_road_network", + "filter_close_points", + "generate_points_along_roads", + "read_road_geojson", +] diff --git a/src/uq_desktop_processor/street_view_analysis/road_points_generator/filtering.py b/src/uq_desktop_processor/street_view_analysis/road_points_generator/filtering.py new file mode 100644 index 0000000..6d729f6 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/road_points_generator/filtering.py @@ -0,0 +1,133 @@ +""" +Filters and deduplicates candidate road sampling coordinates. +""" + +import logging + +import geopandas as gpd +import numpy as np +import numpy.typing as npt + +log = logging.getLogger(__name__) + + +def _compute_projected_coords( + points: list[tuple[float, float]], crs_from: str = "EPSG:4326", crs_to: str = "EPSG:3857" +) -> npt.NDArray[np.float64]: + """ + Project geographic ``(lat, lon)`` points to metric coordinates for distance checks. + + :param points: Non-empty list of ``(latitude, longitude)`` tuples. + :param crs_from: Source CRS (default WGS84). + :param crs_to: Target CRS in meters (default Web Mercator). + :return: Array of shape ``(n, 2)`` with ``(x, y)`` in meters. + :raises ValueError: If ``points`` is empty or invalid. + :raises RuntimeError: If GeoPandas projection fails. + + Example:: + In: _compute_projected_coords([(50.06, 19.94)]).shape + Out: (1, 2) + """ + if log.isEnabledFor(logging.DEBUG): + log.debug( + "Projecting %s points from %s to %s.", + len(points), + crs_from, + crs_to, + ) + + try: + latitudes, longitudes = zip(*points, strict=False) + except ValueError as error: + log.error("Input `points` list is invalid or empty.") + raise ValueError("Expected `points` to be a non-empty list of (lat, lon) tuples.") from error + + try: + # points_from_xy expects (x=lon, y=lat) in geographic CRS + projected_gdf = gpd.GeoDataFrame(geometry=gpd.points_from_xy(longitudes, latitudes), crs=crs_from).to_crs( + crs_to + ) + except Exception as projection_error: + log.error("Coordinate projection failed: %s", projection_error) + raise RuntimeError("Coordinate projection failed.") from projection_error + + x_coords = projected_gdf.geometry.x + y_coords = projected_gdf.geometry.y + return np.column_stack((x_coords, y_coords)) + + +def _find_sparse_indices(points: npt.NDArray[np.float64], min_distance_m: float) -> list[int]: + """ + Greedy index selection so kept points are at least ``min_distance_m`` apart (planar). + + Uses a grid hash to limit neighbor checks. + + :param points: Projected ``(x, y)`` coordinates in meters. + :param min_distance_m: Minimum separation between any two kept points. + :return: Indices into ``points`` of the kept samples (in traversal order). + + Example:: + In: _find_sparse_indices(np.array([[0.0, 0.0], [1.0, 1.0], [50.0, 50.0]]), 20) + Out: [0, 2] + """ + # Cell side ~ min_distance_m -> only compare within a 3x3 neighborhood + grid_coords = np.floor(points / min_distance_m).astype(int) + + occupied_cells: dict[tuple[int, int], int] = {} + kept_indices: list[int] = [] + + # Self + 8 neighbors in grid space + neighbor_offsets = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 0), (0, 1), (1, -1), (1, 0), (1, 1)] + + for point_index, (grid_x, grid_y) in enumerate(grid_coords): + too_close = False + for delta_x, delta_y in neighbor_offsets: + neighbor_cell = (grid_x + delta_x, grid_y + delta_y) + if neighbor_cell in occupied_cells: + neighbor_idx = occupied_cells[neighbor_cell] + distance = np.linalg.norm(points[point_index] - points[neighbor_idx]) + if distance < min_distance_m: + too_close = True + break + + if not too_close: + kept_indices.append(point_index) + occupied_cells[(grid_x, grid_y)] = point_index + + return kept_indices + + +def filter_close_points(points: list[tuple[float, float]], min_distance_m: float = 20) -> list[tuple[float, float]]: + """ + Drop points that lie closer than ``min_distance_m`` to an already kept point. + + :param points: ``(latitude, longitude)`` candidates. + :param min_distance_m: Minimum spacing in meters (Web Mercator plane). + :return: Subset of ``points`` in original order, thinned by the rule above. + + Example:: + In: filter_close_points([(50.06, 19.94), (50.06001, 19.94001)], min_distance_m=20) + Out: [(50.06, 19.94)] + """ + if not points: + log.debug("No points provided for filtering.") + return [] + + if min_distance_m <= 0: + msg = "`min_distance_m` must be a positive number." + log.error(msg) + raise ValueError(msg) + + # Planar distances in meters (Web Mercator) + coords = _compute_projected_coords(points) + kept_indices = _find_sparse_indices(coords, min_distance_m) + filtered_points = [points[kept_point_index] for kept_point_index in kept_indices] + + log.info( + "Point filtering complete: %s -> %s points kept (min_dist=%sm).", + len(points), + len(filtered_points), + min_distance_m, + ) + + return filtered_points diff --git a/src/uq_desktop_processor/street_view_analysis/road_points_generator/generator.py b/src/uq_desktop_processor/street_view_analysis/road_points_generator/generator.py new file mode 100644 index 0000000..ba603a8 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/road_points_generator/generator.py @@ -0,0 +1,102 @@ +""" +Generates evenly spaced sampling points along road network edges. +""" + +import logging + +import geopandas as gpd +from shapely.geometry import LineString, MultiLineString, Point +from shapely.geometry.base import BaseGeometry +from tqdm import tqdm + +from .filtering import filter_close_points + +log = logging.getLogger(__name__) + + +def _get_lines_from_geometry(geometry: BaseGeometry) -> list[LineString]: + """ + Normalize geometry to a list of ``LineString`` parts. + + :param geometry: ``LineString`` or ``MultiLineString``. + :return: Non-empty list of lines, or empty if the type is unsupported. + + Example:: + In: _get_lines_from_geometry(LineString([(0, 0), (1, 1)])) + Out: [LineString(...)] + """ + if isinstance(geometry, LineString): + return [geometry] + elif isinstance(geometry, MultiLineString): + return list(geometry.geoms) + return [] + + +def _generate_points_from_lines(lines: list[LineString], spacing: float) -> list[Point]: + """ + Place points every ``spacing`` meters along each line (including endpoints where applicable). + + :param lines: Road segments in a metric CRS. + :param spacing: Step length in meters. + :return: Shapely ``Point`` geometries along the lines. + + Example:: + In: _generate_points_from_lines([LineString([(0, 0), (100, 0)])], spacing=50) + Out: [Point(...), Point(...), Point(...)] + """ + if spacing <= 0: + msg = "Spacing must be a positive number greater than zero." + log.error(msg) + raise ValueError(msg) + + points = [] + for line in lines: + length = line.length + num_points = int(length // spacing) + # Include start and regular steps along the segment (metric CRS) + points.extend([line.interpolate(step_index * spacing) for step_index in range(num_points + 1)]) + return points + + +def generate_points_along_roads( + roads_gdf: gpd.GeoDataFrame, spacing: float = 100, min_distance_m: float = 20 +) -> list[tuple[float, float]]: + """ + Sample ``(latitude, longitude)`` along road line geometries, then thin by minimum distance. + + :param roads_gdf: Roads as ``LineString`` / ``MultiLineString``; reprojected to metric CRS if geographic. + :param spacing: Along-line spacing in meters. + :param min_distance_m: Post-process minimum separation between returned points. + :return: List of ``(lat, lon)`` in WGS84 after :func:`filter_close_points`. + + Example:: + In: generate_points_along_roads(roads_gdf, spacing=100, min_distance_m=20) + Out: [(50.06, 19.94), ...] + """ + log.info( + "Generating road points for %s geometry objects (spacing=%sm).", + len(roads_gdf), + spacing, + ) + + if roads_gdf.crs is None or roads_gdf.crs.is_geographic: + log.debug("Reprojecting input GeoDataFrame to EPSG:3857.") + roads_gdf = roads_gdf.to_crs(epsg=3857) + + generated_points = [] # Shapely Points in roads_gdf.crs (meters) + + for _, row in tqdm(roads_gdf.iterrows(), total=len(roads_gdf), desc="Generating points"): + lines = _get_lines_from_geometry(row.geometry) + points = _generate_points_from_lines(lines, spacing) + generated_points.extend(points) + + log.debug( + "Generated %s raw points. Converting to WGS84...", + len(generated_points), + ) + + geo_series = gpd.GeoSeries(generated_points, crs=roads_gdf.crs).to_crs(epsg=4326) + # Pipeline convention: (lat, lon) + latlon_points = [(point.y, point.x) for point in geo_series] + + return filter_close_points(latlon_points, min_distance_m) diff --git a/src/uq_desktop_processor/street_view_analysis/road_points_generator/io.py b/src/uq_desktop_processor/street_view_analysis/road_points_generator/io.py new file mode 100644 index 0000000..8fb5fa5 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/road_points_generator/io.py @@ -0,0 +1,192 @@ +""" +Reads/writes sampling-point layers and loads route-aligned road networks. +""" + +import logging + +import geopandas as gpd +import requests +from fiona.errors import DriverError, FionaValueError +from pyogrio.errors import DataSourceError +from yaspin import yaspin + +from uq_desktop_processor.street_view_analysis.road_graph_prepare import ( + load_route_aligned_graph_wgs84, + route_aligned_edges_web_mercator, +) + +log = logging.getLogger(__name__) + + +def load_roads_route_aligned( + *, + place_name: str | None = None, + region_geojson_path: str | None = None, + road_geojson_path: str | None = None, + consolidate_tolerance_m: float = 15.0, + use_cache: bool = True, +) -> gpd.GeoDataFrame: + """ + Road edges in EPSG:3857 from the same graph pipeline as Euler routes (drive, no trunk/motorway). + + :param place_name: OSM place query, if used alone. + :param region_geojson_path: Region polygon file, if used alone. + :param road_geojson_path: Local road lines file, if used alone. + :param consolidate_tolerance_m: ``ox.consolidate_intersections`` tolerance in meters. + :param use_cache: Whether OSMnx may use its HTTP cache. + :return: Edge GeoDataFrame in Web Mercator. + + Example:: + In: load_roads_route_aligned(place_name="Katowice, Poland").crs.to_string() + Out: "EPSG:3857" + """ + # Shared graph build with Euler / sampling; then edge geometries only + geographic_graph, _ = load_route_aligned_graph_wgs84( + city_name=place_name, + region_geojson_path=region_geojson_path, + road_geojson_path=road_geojson_path, + consolidate_tolerance_m=consolidate_tolerance_m, + use_cache=use_cache, + ) + return route_aligned_edges_web_mercator(geographic_graph) + + +def download_road_network( + place_name: str, + *, + consolidate_tolerance_m: float = 15.0, + use_cache: bool = True, +) -> gpd.GeoDataFrame: + """ + Load route-aligned roads for a named place (same settings as GPX route generation). + + :param place_name: OSM geocodable place string. + :param consolidate_tolerance_m: Intersection merge tolerance in meters. + :param use_cache: OSMnx cache flag. + :return: Metric road edges. + :raises ValueError: If no roads are found for the place. + :raises ConnectionError: On Overpass/network failure. + :raises RuntimeError: On other load failures. + + Example:: + In: download_road_network("Katowice, Poland") + Out: GeoDataFrame with LineString/MultiLineString road edges in EPSG:3857 + """ + log.info("Initiating route-aligned road network download for: '%s'", place_name) + + with yaspin(text=f"Downloading road network for: {place_name}..."): + try: + edges = load_roads_route_aligned( + place_name=place_name, + consolidate_tolerance_m=consolidate_tolerance_m, + use_cache=use_cache, + ) + log.info( + "Successfully loaded %s road segments for '%s' (route-aligned).", + len(edges), + place_name, + ) + return edges + + except ValueError as error: + log.error("No road data or invalid location: %s: %s", place_name, error) + raise ValueError(f"No roads found for: {place_name}") from error + + except requests.exceptions.RequestException as error: + log.error("Network error when downloading data for '%s': %s", place_name, error) + raise ConnectionError("Connection problem with Overpass API") from error + + except Exception as error: + log.error("Unexpected error when downloading road network for '%s': %s", place_name, error) + raise RuntimeError(f"Error while downloading road network for: {place_name}") from error + + +def read_road_geojson(input_path: str) -> gpd.GeoDataFrame: + """ + Load line geometries from a local GeoJSON (no route-aligned graph build). + + For Euler-aligned sampling, prefer :func:`load_roads_route_aligned` with ``road_geojson_path``. + + :param input_path: Path to a vector file readable by GeoPandas. + :return: Subset of features that are ``LineString`` or ``MultiLineString``. + :raises ValueError: If the file is invalid. + :raises FileNotFoundError: If the path does not exist. + :raises RuntimeError: On unexpected read errors. + + Example:: + In: read_road_geojson("roads.geojson").geometry.type.isin(["LineString", "MultiLineString"]).all() + Out: True + """ + log.info("Reading local road network from: %s", input_path) + + try: + roads_geodataframe = gpd.read_file(input_path) + # Ignore points/polygons if the file is mixed + line_geometries = roads_geodataframe[roads_geodataframe.geometry.type.isin(["LineString", "MultiLineString"])] + + log.debug("Loaded %s valid road geometries from file.", len(line_geometries)) + return line_geometries + + except (FionaValueError, DriverError, OSError) as error: + log.error("Error reading GeoJSON: %s", error) + raise ValueError(f"Invalid GeoJSON file: {input_path}") from error + + except DataSourceError as error: + if "No such file or directory" in str(error): + log.error("File does not exist: %s", input_path) + raise FileNotFoundError(f"File not found: {input_path}") from error + log.error("Error reading GeoJSON: %s", error) + raise ValueError(f"Invalid GeoJSON file: {input_path}") from error + + except Exception as error: + log.error("Unexpected error while loading file: %s", error) + raise RuntimeError(f"Error while loading GeoJSON file: {input_path}") from error + + +def download_roads_from_region( + region_path: str, + *, + consolidate_tolerance_m: float = 15.0, + use_cache: bool = True, +) -> gpd.GeoDataFrame: + """ + Load route-aligned roads clipped to the first polygon in a region file. + + :param region_path: GeoJSON (or similar) with a polygon geometry. + :param consolidate_tolerance_m: Intersection merge tolerance in meters. + :param use_cache: OSMnx cache flag. + :return: Metric road edges for the region. + :raises RuntimeError: If the region file cannot be processed. + + Example:: + In: download_roads_from_region("region.geojson") + Out: GeoDataFrame with route-aligned road edges for the region (EPSG:3857) + """ + log.info("Downloading route-aligned road network for region: %s", region_path) + + try: + region_geodataframe = gpd.read_file(region_path) + + if region_geodataframe.empty or region_geodataframe.geometry.iloc[0] is None: + raise ValueError(f"The provided region file is empty or invalid: {region_path}") + + # First feature defines the AOI (WGS84 for OSMnx) + polygon = region_geodataframe.to_crs(epsg=4326).geometry.iloc[0] + + if polygon.geom_type not in ("Polygon", "MultiPolygon"): + raise ValueError(f"Expected a Polygon geometry in {region_path}, but found {polygon.geom_type}.") + + with yaspin(text=f"Downloading road network for region: {region_path}..."): + road_edges = load_roads_route_aligned( + region_geojson_path=region_path, + consolidate_tolerance_m=consolidate_tolerance_m, + use_cache=use_cache, + ) + log.info("Successfully loaded %s road segments for custom region.", len(road_edges)) + return road_edges + + except ValueError: + raise + except Exception as error: + log.error("Error processing region file '%s': %s", region_path, error) + raise RuntimeError(f"Failed to download roads for region: {region_path}") from error diff --git a/src/uq_desktop_processor/street_view_analysis/road_points_generator/run.py b/src/uq_desktop_processor/street_view_analysis/road_points_generator/run.py new file mode 100644 index 0000000..7c69e4d --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/road_points_generator/run.py @@ -0,0 +1,121 @@ +""" +CLI-oriented pipeline: load route-aligned roads, sample points, write a layer file. +""" + +import logging +from pathlib import Path + +import geopandas as gpd + +from .generator import generate_points_along_roads +from .io import load_roads_route_aligned + +log = logging.getLogger(__name__) + + +def _save_sampling_points_layer( + points: list[tuple[float, float]], + output_path: str | Path, +) -> Path: + """ + Write sampling points to a vector file in EPSG:4326. + + Coordinates follow :func:`generate_points_along_roads`: each tuple is ``(latitude, longitude)``. + + :param points: Sample locations. + :param output_path: GeoPackage, GeoJSON, or other OGR path. + :return: Resolved path that was written. + + Example:: + In: _save_sampling_points_layer([(50.06, 19.94)], "data/results/points.geojson") + Out: Path(".../points.geojson") + """ + output_path_obj = Path(output_path) + output_path_obj.parent.mkdir(parents=True, exist_ok=True) + if not points: + points_gdf = gpd.GeoDataFrame({"id": []}, geometry=gpd.GeoSeries([], crs="EPSG:4326")) + else: + latitudes, longitudes = zip(*points, strict=False) + # points_from_xy: x=lon, y=lat (EPSG:4326) + points_gdf = gpd.GeoDataFrame( + {"id": range(len(points))}, + geometry=gpd.points_from_xy(longitudes, latitudes), + crs="EPSG:4326", + ) + points_gdf.to_file(output_path_obj) + return output_path_obj.resolve() + + +def build_points_pipeline( + *, + output_points_path: str | Path, + place_name: str | None = None, + region_geojson_path: str | None = None, + road_geojson_path: str | None = None, + spacing: float = 100, + min_distance_m: float = 20, + consolidate_tolerance_m: float = 15.0, + use_cache: bool = True, +) -> tuple[gpd.GeoDataFrame, list[tuple[float, float]]]: + """ + End-to-end sampling: exactly one of place, region file, or road file; then generate and save points. + + :param output_points_path: Output vector path for point features. + :param place_name: OSM place name (mutually exclusive with region/road paths). + :param region_geojson_path: Polygon file for a custom AOI. + :param road_geojson_path: Predefined road lines file. + :param spacing: Along-road spacing in meters. + :param min_distance_m: Minimum spacing after global thinning. + :param consolidate_tolerance_m: Same as Euler route graph preparation. + :param use_cache: OSMnx HTTP cache. + :return: ``(roads_gdf, list of (lat, lon))``. + :raises ValueError: If zero or more than one source argument is given. + + Example:: + In: build_points_pipeline(place_name="Katowice, Poland", output_points_path="out/points.geojson") + Out: (road_edges_gdf, [(50.06, 19.94), (50.0612, 19.9415), ...]) + """ + log.info( + "Starting points generation pipeline (spacing=%sm, min_dist=%sm, consolidate=%sm).", + spacing, + min_distance_m, + consolidate_tolerance_m, + ) + + # Exactly one OSM / file source for load_route_aligned_graph_wgs84 + sources_provided = sum( + source_value is not None for source_value in [place_name, region_geojson_path, road_geojson_path] + ) + + if sources_provided != 1: + msg = ( + "You must provide exactly one data source: " "`place_name`, `region_geojson_path`, OR `road_geojson_path`." + ) + log.error(msg) + raise ValueError(msg) + + if place_name is not None: + log.info("Source selected: place name '%s'", place_name) + elif region_geojson_path is not None: + log.info("Source selected: region polygon '%s'", region_geojson_path) + else: + log.info("Source selected: road GeoJSON '%s'", road_geojson_path) + + roads = load_roads_route_aligned( + place_name=place_name, + region_geojson_path=region_geojson_path, + road_geojson_path=road_geojson_path, + consolidate_tolerance_m=consolidate_tolerance_m, + use_cache=use_cache, + ) + + points = generate_points_along_roads( + roads, + spacing=spacing, + min_distance_m=min_distance_m, + ) + + saved_output_path = _save_sampling_points_layer(points, output_points_path) + log.info("Pipeline finished. Total points generated: %s. Saved to %s", len(points), saved_output_path) + + return roads, points From 0707d1ff5366bc416dbffb957b012b76a2faa6ae Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:42:50 +0200 Subject: [PATCH 04/12] feat(street-view): add mapillary image download pipeline (#4) --- .../images_downloader/__init__.py | 19 ++ .../images_downloader/api.py | 185 +++++++++++++++ .../images_downloader/downloader.py | 218 ++++++++++++++++++ .../images_downloader/helpers.py | 69 ++++++ .../images_downloader/image_processing.py | 164 +++++++++++++ 5 files changed, 655 insertions(+) create mode 100644 src/uq_desktop_processor/street_view_analysis/images_downloader/__init__.py create mode 100644 src/uq_desktop_processor/street_view_analysis/images_downloader/api.py create mode 100644 src/uq_desktop_processor/street_view_analysis/images_downloader/downloader.py create mode 100644 src/uq_desktop_processor/street_view_analysis/images_downloader/helpers.py create mode 100644 src/uq_desktop_processor/street_view_analysis/images_downloader/image_processing.py diff --git a/src/uq_desktop_processor/street_view_analysis/images_downloader/__init__.py b/src/uq_desktop_processor/street_view_analysis/images_downloader/__init__.py new file mode 100644 index 0000000..c580e3a --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/images_downloader/__init__.py @@ -0,0 +1,19 @@ +""" +Mapillary image download, API helpers, and panorama processing. +""" + +from .api import query_mapillary_image +from .downloader import download_mapillary_images +from .helpers import lat_lon_from_geometry, lat_lon_from_mapillary_record, mapillary_image_filename +from .image_processing import download_image, process_panorama, save_jpeg_with_exif + +__all__ = [ + "download_image", + "download_mapillary_images", + "lat_lon_from_geometry", + "lat_lon_from_mapillary_record", + "mapillary_image_filename", + "process_panorama", + "query_mapillary_image", + "save_jpeg_with_exif", +] diff --git a/src/uq_desktop_processor/street_view_analysis/images_downloader/api.py b/src/uq_desktop_processor/street_view_analysis/images_downloader/api.py new file mode 100644 index 0000000..4ba6122 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/images_downloader/api.py @@ -0,0 +1,185 @@ +""" +Mapillary Graph API client: image search by bbox and metadata retrieval. +""" + +import logging + +import numpy as np +import requests +from requests.exceptions import ConnectionError, HTTPError, Timeout + +log = logging.getLogger(__name__) + +MAPILLARY_API_URL = "https://graph.mapillary.com/images" + + +def _calculate_bounding_box(lat: float, lon: float, radius_m: float) -> tuple[float, float, float, float]: + """ + Build a geographic bounding box from a center point and radius in meters. + + :param lat: Latitude of the center. + :param lon: Longitude of the center. + :param radius_m: Half-edge size in meters (approximate). + :return: ``(min_lon, min_lat, max_lon, max_lat)``. + + Example:: + In: _calculate_bounding_box(50.05, 19.94, 100) + Out: tuple (min_lon, min_lat, max_lon, max_lat) around the input point + """ + # ~111.32 km per degree latitude; longitude spacing scales with cos(lat) + delta_lat = radius_m / 111320 + delta_lon = delta_lat / np.cos(np.radians(lat)) + return lon - delta_lon, lat - delta_lat, lon + delta_lon, lat + delta_lat + + +def _build_mapillary_query_params(min_lon: float, min_lat: float, max_lon: float, max_lat: float) -> dict: + """ + Build query parameters for a single-image Mapillary ``/images`` request. + + :param min_lon: Bounding box minimum longitude. + :param min_lat: Bounding box minimum latitude. + :param max_lon: Bounding box maximum longitude. + :param max_lat: Bounding box maximum latitude. + :return: Query parameter mapping for ``requests.get``. + + Example:: + In: _build_mapillary_query_params(19.9, 50.0, 20.0, 50.1)["limit"] + Out: 1 + """ + return { + "fields": "id,thumb_1024_url,is_pano,captured_at,geometry,computed_geometry", + "bbox": f"{min_lon},{min_lat},{max_lon},{max_lat}", + "limit": 1, + } + + +def _is_radius_timeout_error(response: requests.Response) -> bool: + """ + Detect Mapillary error 3404014 (bbox / radius too large for the request). + + :param response: HTTP response with error JSON body. + :return: True if the error subcode indicates radius timeout. + """ + try: + error_info = response.json().get("error") + # Mapillary: bbox too large / request timed out + return error_info and error_info.get("error_subcode") == 3404014 + + except ValueError: + return False + + +def _fetch_mapillary_data(params: dict, headers: dict, timeout: float) -> dict: + """ + GET the Mapillary images endpoint and return parsed JSON. + + :param params: Query string parameters. + :param headers: Request headers (e.g. OAuth). + :param timeout: Socket read timeout in seconds. + :return: Parsed JSON body. + :raises HTTPError: If the status code indicates failure. + """ + log.debug("Requesting Mapillary API with params: %s", params) + response = requests.get(MAPILLARY_API_URL, params=params, headers=headers, timeout=timeout) + response.raise_for_status() + return response.json() + + +def _get_single_image_from_response(data: dict) -> dict | None: + """ + Return the first image record from a Mapillary list response. + + :param data: Parsed JSON from ``/images``. + :return: One image dict, or None if the list is empty. + + Example:: + In: _get_single_image_from_response({"data": [{"id": "abc"}]}) + Out: {"id": "abc"} + """ + images = data.get("data", []) + if not images: + log.debug("No images found in API response.") + return images[0] if images else None + + +def query_mapillary_image( + lat: float, lon: float, token: str, radius: float, timeout: float, retries: int = 2 +) -> dict | None: + """ + Find one image near ``(lat, lon)``, shrinking the radius or retrying on certain errors. + + :param lat: Search latitude. + :param lon: Search longitude. + :param token: OAuth access token. + :param radius: Initial search radius in meters. + :param timeout: HTTP timeout in seconds. + :param retries: Extra attempts after the first request (radius shrink and HTTP retries). + :return: Image metadata dict, or None if no image or unrecoverable error. + + Example:: + In: query_mapillary_image(50.06, 19.94, token="...", radius=150, timeout=10.0) + Out: {"id": "...", ...} | None + """ + headers = {"Authorization": f"OAuth {token}"} + + # First attempt + retries (radius shrink, 5xx, or network) + for attempt_index in range(retries + 1): + min_lon, min_lat, max_lon, max_lat = _calculate_bounding_box(lat, lon, radius) + params = _build_mapillary_query_params(min_lon, min_lat, max_lon, max_lat) + + try: + data = _fetch_mapillary_data(params, headers, timeout) + result = _get_single_image_from_response(data) + if result: + log.debug( + "Found image for (%s, %s) at attempt %s.", + lat, + lon, + attempt_index + 1, + ) + return result + + except HTTPError as http_error: + # Shrink search area and retry + if http_error.response.status_code == 400 and _is_radius_timeout_error(http_error.response): + old_radius = radius + radius = max(50, radius // 2) + log.warning( + "Radius %sm too large for (%s, %s). Reducing to %sm and retrying.", + old_radius, + lat, + lon, + radius, + ) + continue + + # Transient server errors: retry same bbox + if 500 <= http_error.response.status_code < 600: + log.warning( + "Mapillary server error %s for (%s, %s). Retrying...", + http_error.response.status_code, + lat, + lon, + ) + continue + + # Auth, bad request, etc.: do not loop forever + log.error("HTTP error querying Mapillary for (%s, %s): %s", lat, lon, http_error) + break + + except (Timeout, ConnectionError) as network_error: + log.warning( + "Network error querying Mapillary for (%s, %s): %s. Retrying...", + lat, + lon, + network_error, + ) + continue + + log.info( + "Failed to retrieve image for (%s, %s) after %s attempts.", + lat, + lon, + retries + 1, + ) + return None diff --git a/src/uq_desktop_processor/street_view_analysis/images_downloader/downloader.py b/src/uq_desktop_processor/street_view_analysis/images_downloader/downloader.py new file mode 100644 index 0000000..1b7a7b9 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/images_downloader/downloader.py @@ -0,0 +1,218 @@ +""" +Downloads street-view images for sampling points with concurrency and retries. +""" + +import logging +import os +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path +from typing import Any + +from .api import query_mapillary_image +from .helpers import lat_lon_from_mapillary_record, mapillary_image_filename +from .image_processing import download_image, process_panorama, save_jpeg_with_exif + +log = logging.getLogger(__name__) + + +def _handle_single_point( + lat_lon: tuple[float, float], + output_folder: str, + mapillary_token: str, + search_radius_m: float, + fov_deg: float, + output_hw: tuple[int, int], + api_timeout_s: float, + retries: int = 3, +) -> str: + """ + Fetch and save a Mapillary image for one point, with retries on failure. + + :param lat_lon: ``(latitude, longitude)`` of the target location. + :param output_folder: Directory for the saved JPEG. + :param mapillary_token: OAuth token for the Mapillary API. + :param search_radius_m: Search radius in meters around the point. + :param fov_deg: Horizontal field of view in degrees for panorama cropping. + :param output_hw: Output size as ``(height, width)``. + :param api_timeout_s: Timeout for API and HTTP download requests. + :param retries: Attempt count including the first try. + :return: Status message (success or failure reason). + + Example:: + In: _handle_single_point((50.06, 19.94), "data/images", token, 150, 90, (512, 512), 10.0) + Out: status string, e.g. "Success (50.06000, 19.94000): .jpg" or "(50.06000, 19.94000) - no image found" + """ + latitude, longitude = lat_lon + for attempt_index in range(retries): + try: + # One full fetch+save path; outer loop handles retries + return _try_fetch_and_save_image( + latitude, longitude, output_folder, mapillary_token, search_radius_m, fov_deg, output_hw, api_timeout_s + ) + except Exception as error: + if attempt_index < retries - 1: + log.warning( + "(%.5f, %.5f) Attempt %s failed: %s. Retrying...", + latitude, + longitude, + attempt_index + 1, + error, + ) + time.sleep(1) + else: + return f"({latitude:.5f}, {longitude:.5f}) Critical error: {error}" + + # e.g. retries == 0 + return f"({latitude:.5f}, {longitude:.5f}) - failed after {retries} attempts" + + +def _try_fetch_and_save_image( + lat: float, + lon: float, + output_folder: str, + mapillary_token: str, + search_radius_m: float, + fov_deg: float, + output_hw: tuple[int, int], + api_timeout_s: float, +) -> str: + """ + Query Mapillary, download the image, optionally unwrap panorama, write JPEG with EXIF. + + :param lat: Latitude of the target point. + :param lon: Longitude of the target point. + :param output_folder: Directory for the output file. + :param mapillary_token: OAuth token for the Mapillary API. + :param search_radius_m: Search radius in meters. + :param fov_deg: Field of view in degrees for panorama cropping. + :param output_hw: Output resolution ``(height, width)``. + :param api_timeout_s: Timeout for API and download. + :return: Status message indicating success or failure. + + Example:: + In: _try_fetch_and_save_image(50.06, 19.94, "data/images", token, 150, 90, (512, 512), 10.0) + Out: status string, e.g. "Success (...)" or "(...) - missing image URL in API response" + """ + # Nearest image metadata in bbox (or None) + data = query_mapillary_image(lat, lon, mapillary_token, search_radius_m, api_timeout_s) + if not data: + return f"({lat:.5f}, {lon:.5f}) - no image found" + + image_url = data.get("thumb_1024_url") + if not image_url: + return f"({lat:.5f}, {lon:.5f}) - missing image URL in API response" + + image_array = download_image(image_url, api_timeout_s) + if image_array is None: + return f"({lat:.5f}, {lon:.5f}) - download failed" + + # Panoramas: equirectangular -> perspective crop + if data.get("is_pano", False): + image_array = process_panorama(image_array, fov_deg, output_hw) + + image_id = data.get("id") + if not image_id: + return f"({lat:.5f}, {lon:.5f}) - missing image id in API response" + + image_coordinates = lat_lon_from_mapillary_record(data) + # Fall back to query point if the record has no usable geometry + image_latitude, image_longitude = image_coordinates if image_coordinates is not None else (lat, lon) + + filename = mapillary_image_filename(str(image_id)) + path = os.path.join(output_folder, filename) + captured_at = data.get("captured_at") + save_jpeg_with_exif( + image_array, + path, + lat=image_latitude, + lon=image_longitude, + captured_at_ms=captured_at, + ) + + return f"Success ({lat:.5f}, {lon:.5f}): {filename}" + + +def download_mapillary_images( + points: list[tuple[float, float]], + output_folder: str, + mapillary_token: str, + *, + search_radius_m: float = 150, + fov_deg: float = 90, + output_hw: tuple[int, int] = (512, 512), + max_workers: int = 20, + api_timeout_s: float = 10.0, +) -> dict[str, Any]: + """ + Download Mapillary images for many points using a thread pool. + + :param points: ``(latitude, longitude)`` tuples to query. + :param output_folder: Folder for saved JPEGs (created if missing). + :param mapillary_token: OAuth token for the Mapillary API. + :param search_radius_m: Maximum search radius in meters. + :param fov_deg: Field of view for panoramic crops. + :param output_hw: Output image ``(height, width)``. + :param max_workers: Parallel worker threads. + :param api_timeout_s: Per-request timeout in seconds. + :return: Summary with counts, timing, failure messages, and resolved output path. + + Example:: + In: download_mapillary_images([(50.06, 19.94)], "data/images", token)["downloaded"] + Out: summary dict, e.g. {"point_count": 1, "downloaded": 1, "failed_messages": [], ...} + """ + os.makedirs(output_folder, exist_ok=True) + out_resolved = str(Path(output_folder).resolve()) + + total_point_count = len(points) + log.info( + "Start downloading images for %s points using %s threads...", + total_point_count, + max_workers, + ) + + start_time = time.time() + status_messages: list[str] = [] + + # I/O-bound: threads overlap API + download latency + with ThreadPoolExecutor(max_workers=max_workers) as pool: + for status_message in pool.map( + lambda point_coordinates: _handle_single_point( + point_coordinates, output_folder, mapillary_token, search_radius_m, fov_deg, output_hw, api_timeout_s + ), + points, + ): + status_messages.append(status_message) + # Quiet expected outcomes; surface real failures + if status_message.startswith("Success") or "no image found" in status_message: + log.debug(status_message) + else: + log.warning(status_message) + + elapsed_seconds = time.time() - start_time + # Success is encoded in the message prefix from _handle_single_point. + downloaded_image_count = sum(1 for status_message in status_messages if status_message.startswith("Success")) + # Keep all non-success messages for caller inspection/reporting. + failure_messages = [ + status_message for status_message in status_messages if not status_message.startswith("Success") + ] + if total_point_count > 0: + log.info( + "Download complete in %.1f s (avg %.2f s/point); saved %s / %s images.", + elapsed_seconds, + elapsed_seconds / total_point_count, + downloaded_image_count, + total_point_count, + ) + else: + log.info("Download complete: no points to process.") + + images_per_second = (downloaded_image_count / elapsed_seconds) if elapsed_seconds > 0 else 0.0 + return { + "point_count": total_point_count, + "downloaded": downloaded_image_count, + "failed_messages": failure_messages, + "elapsed_s": elapsed_seconds, + "output_folder": out_resolved, + "images_per_second": images_per_second, + } diff --git a/src/uq_desktop_processor/street_view_analysis/images_downloader/helpers.py b/src/uq_desktop_processor/street_view_analysis/images_downloader/helpers.py new file mode 100644 index 0000000..6497efc --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/images_downloader/helpers.py @@ -0,0 +1,69 @@ +""" +Shared helpers for paths, HTTP sessions, and image naming in the downloader. +""" + +import re + + +def mapillary_image_filename(image_id: str) -> str: + """ + Build a filesystem-safe JPEG filename from a Mapillary image id. + + :param image_id: Mapillary image identifier (as returned by the Graph API). + :return: Filename such as ``{id}.jpg``. + + Example:: + In: mapillary_image_filename("123/abc") + Out: "123_abc.jpg" + """ + # Strip unsafe path characters for cross-platform filenames + sanitized_image_id = re.sub(r"[^\w.\-]", "_", str(image_id).strip()) + if not sanitized_image_id: + raise ValueError("image_id must be non-empty after sanitization") + return f"{sanitized_image_id}.jpg" + + +def lat_lon_from_mapillary_record(data: dict) -> tuple[float, float] | None: + """ + Read image coordinates from a Mapillary image record. + + Prefers ``computed_geometry`` over raw ``geometry``. + + :param data: Image object from the Mapillary API. + :return: ``(latitude, longitude)`` or None if no valid Point geometry. + + Example:: + In: lat_lon_from_mapillary_record({"geometry": {"type": "Point", "coordinates": [19.94, 50.06]}}) + Out: (50.06, 19.94) + """ + for key in ("computed_geometry", "geometry"): + latitude_longitude = lat_lon_from_geometry(data.get(key)) + if latitude_longitude is not None: + return latitude_longitude + return None + + +def lat_lon_from_geometry(geometry: dict | None) -> tuple[float, float] | None: + """ + Parse GeoJSON Point coordinates from a Mapillary ``geometry`` field. + + Coordinates are ``[longitude, latitude]`` per GeoJSON. + + :param geometry: The ``geometry`` object from a Mapillary image record, or None. + :return: ``(latitude, longitude)`` or None if missing or invalid. + + Example:: + In: lat_lon_from_geometry({"type": "Point", "coordinates": [19.94, 50.06]}) + Out: (50.06, 19.94) + """ + if not geometry or geometry.get("type") != "Point": + return None + coords = geometry.get("coordinates") + if not isinstance(coords, list | tuple) or len(coords) < 2: + return None + try: + lon, lat = float(coords[0]), float(coords[1]) + except (TypeError, ValueError): + return None + # API is GeoJSON order; callers use (lat, lon) + return lat, lon diff --git a/src/uq_desktop_processor/street_view_analysis/images_downloader/image_processing.py b/src/uq_desktop_processor/street_view_analysis/images_downloader/image_processing.py new file mode 100644 index 0000000..efed2d9 --- /dev/null +++ b/src/uq_desktop_processor/street_view_analysis/images_downloader/image_processing.py @@ -0,0 +1,164 @@ +""" +Resize, EXIF, and panorama-to-perspective conversion for downloaded images. +""" + +import logging +from datetime import UTC, datetime + +import cv2 +import numpy as np +import piexif +import py360convert +import requests +from PIL import Image + +log = logging.getLogger(__name__) + + +def _decimal_deg_to_exif_rationals(decimal_deg: float) -> tuple[tuple[int, int], tuple[int, int], tuple[int, int]]: + """ + Convert signed decimal degrees to EXIF GPS DMS rationals (absolute value; Ref gives hemisphere). + + :param decimal_deg: Latitude or longitude in degrees. + :return: Three rationals ``(degrees, minutes, seconds)`` for piexif. + + Example:: + In: _decimal_deg_to_exif_rationals(50.5) + Out: ((50, 1), (30, 1), (0, 1000000)) + """ + absolute = abs(decimal_deg) + deg = int(absolute) + minutes_float = (absolute - deg) * 60.0 + minutes = int(minutes_float) + seconds = (minutes_float - minutes) * 60.0 + sec_num = int(round(seconds * 1_000_000)) + # Keep sub-second rational within one minute + if sec_num >= 60 * 1_000_000: + sec_num = 59_999_999 + return (deg, 1), (minutes, 1), (sec_num, 1_000_000) + + +def save_jpeg_with_exif( + bgr: np.ndarray, + path: str, + *, + lat: float, + lon: float, + captured_at_ms: int | float | None = None, + jpeg_quality: int = 95, +) -> None: + """ + Save a BGR image as JPEG with GPS and optional capture time in EXIF. + + :param bgr: Image in OpenCV BGR layout. + :param path: Output ``.jpg`` path. + :param lat: Latitude in WGS84 (degrees). + :param lon: Longitude in WGS84 (degrees). + :param captured_at_ms: Unix time in milliseconds (e.g. Mapillary ``captured_at``), or None. + :param jpeg_quality: JPEG quality 1-100. + + Example:: + In: save_jpeg_with_exif(img, "out.jpg", lat=50.06, lon=19.94, captured_at_ms=1710000000000) + Out: "out.jpg" saved with GPS EXIF and capture timestamp metadata + """ + rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB) + pil_image = Image.fromarray(rgb) + + # piexif expects these IFD buckets even when mostly empty + exif_dict: dict = {"0th": {}, "Exif": {}, "GPS": {}, "1st": {}, "thumbnail": None} + + if captured_at_ms is not None: + try: + ts = float(captured_at_ms) / 1000.0 + dt = datetime.fromtimestamp(ts, tz=UTC) + dt_str = dt.strftime("%Y:%m:%d %H:%M:%S") + except (OSError, OverflowError, TypeError, ValueError): + dt_str = None + if dt_str: + exif_dict["0th"][piexif.ImageIFD.DateTime] = dt_str + exif_dict["Exif"][piexif.ExifIFD.DateTimeOriginal] = dt_str + exif_dict["Exif"][piexif.ExifIFD.DateTimeDigitized] = dt_str + + # GPS refs encode hemisphere; rationals use absolute values + lat_ref = b"N" if lat >= 0 else b"S" + lon_ref = b"E" if lon >= 0 else b"W" + exif_dict["GPS"][piexif.GPSIFD.GPSVersionID] = (2, 0, 0, 0) + exif_dict["GPS"][piexif.GPSIFD.GPSLatitudeRef] = lat_ref + exif_dict["GPS"][piexif.GPSIFD.GPSLatitude] = _decimal_deg_to_exif_rationals(lat) + exif_dict["GPS"][piexif.GPSIFD.GPSLongitudeRef] = lon_ref + exif_dict["GPS"][piexif.GPSIFD.GPSLongitude] = _decimal_deg_to_exif_rationals(lon) + + exif_bytes = piexif.dump(exif_dict) + pil_image.save(path, format="JPEG", quality=jpeg_quality, exif=exif_bytes) + + +def download_image(url: str, timeout: float) -> np.ndarray | None: + """ + Download an image URL and decode it to a BGR ``ndarray``. + + :param url: Image URL. + :param timeout: HTTP timeout in seconds. + :return: BGR image, or None on network/decode failure. + + Example:: + In: download_image("https://example.com/photo.jpg", timeout=10.0) + Out: decoded BGR image array (H, W, 3) or None if download/decode fails + """ + try: + if log.isEnabledFor(logging.DEBUG): + log.debug("Downloading image from: %s", url) + + response = requests.get(url, stream=True, timeout=timeout) + response.raise_for_status() + + # OpenCV expects a 1-D uint8 buffer for imdecode + image_data = np.asarray(bytearray(response.content), dtype=np.uint8) + image = cv2.imdecode(image_data, cv2.IMREAD_COLOR) + + if image is None: + log.warning("OpenCV failed to decode image from: %s", url) + return None + + return image + + except (requests.RequestException, ValueError) as download_error: + log.warning("Download/decode error for %s: %s", url, download_error) + return None + + +def process_panorama(img: np.ndarray, fov_deg: float, out_hw: tuple[int, int]) -> np.ndarray: + """ + Convert a 360° equirectangular image to a perspective crop. + + Scalar ``fov_deg`` is expanded to ``(h_fov, v_fov)`` so py360convert uses a stable code path. + + :param img: Equirectangular panorama (BGR). + :param fov_deg: Field of view in degrees, or ``(h, v)`` if a pair is needed. + :param out_hw: Output ``(height, width)``. + :return: Perspective image as BGR ``ndarray``. + + Example:: + In: process_panorama(pano_bgr, fov_deg=90, out_hw=(512, 512)) + Out: perspective BGR image array with shape (512, 512, 3) + """ + if log.isEnabledFor(logging.DEBUG): + log.debug( + "Converting panorama (Input shape: %s, FOV: %s)", + img.shape, + fov_deg, + ) + + # Tuple FOV avoids a buggy scalar branch in some py360convert versions + fov_hv = ( + (float(fov_deg[0]), float(fov_deg[1])) + if isinstance(fov_deg, tuple | list) and len(fov_deg) >= 2 + else (float(fov_deg), float(fov_deg)) + ) + + return py360convert.e2p( + img, + fov_hv, + 0, + 0, + out_hw, + ) From dc91719a42a6e396cb08eea0642565c63aa6fa3f Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:43:33 +0200 Subject: [PATCH 05/12] feat(evaluation): add CLIP prefilter and shared evaluation utilities (#5) --- .../evaluation/clip_common/__init__.py | 50 ++ .../evaluation/clip_common/directions.py | 101 ++++ .../evaluation/clip_common/model.py | 108 ++++ .../evaluation/clip_common/printer.py | 157 ++++++ .../evaluation/clip_common/validate.py | 526 ++++++++++++++++++ .../evaluation/clip_prefilter/__init__.py | 7 + .../evaluation/clip_prefilter/defaults.py | 41 ++ .../evaluation/clip_prefilter/run.py | 179 ++++++ .../evaluation/clip_prefilter/utils.py | 138 +++++ .../evaluation/clip_prefilter/validators.py | 167 ++++++ .../evaluation/evaluation_utils/__init__.py | 21 + .../evaluation/evaluation_utils/schema.py | 147 +++++ 12 files changed, 1642 insertions(+) create mode 100644 src/uq_desktop_processor/evaluation/clip_common/__init__.py create mode 100644 src/uq_desktop_processor/evaluation/clip_common/directions.py create mode 100644 src/uq_desktop_processor/evaluation/clip_common/model.py create mode 100644 src/uq_desktop_processor/evaluation/clip_common/printer.py create mode 100644 src/uq_desktop_processor/evaluation/clip_common/validate.py create mode 100644 src/uq_desktop_processor/evaluation/clip_prefilter/__init__.py create mode 100644 src/uq_desktop_processor/evaluation/clip_prefilter/defaults.py create mode 100644 src/uq_desktop_processor/evaluation/clip_prefilter/run.py create mode 100644 src/uq_desktop_processor/evaluation/clip_prefilter/utils.py create mode 100644 src/uq_desktop_processor/evaluation/clip_prefilter/validators.py create mode 100644 src/uq_desktop_processor/evaluation/evaluation_utils/__init__.py create mode 100644 src/uq_desktop_processor/evaluation/evaluation_utils/schema.py diff --git a/src/uq_desktop_processor/evaluation/clip_common/__init__.py b/src/uq_desktop_processor/evaluation/clip_common/__init__.py new file mode 100644 index 0000000..6320109 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_common/__init__.py @@ -0,0 +1,50 @@ +""" +Evaluation module: init . +""" + +from .directions import encode_image, prepare_directions +from .model import encode_texts, load_model, sigmoid_probability +from .printer import print_results +from .validate import ( + # Classes and main functions + ValidationError, + all_nonempty_strings, + as_string_set, + check_beta_sigmoid, + check_device, + check_image_folder, + check_keyset_consistency, + check_model_names, + check_order, + check_prompts, + check_weights, + # Low-level validation functions (for flexibility) + is_nonempty_string, + is_percentage, + list_or_empty, + validate_config, +) + +__all__ = [ + "ValidationError", + "all_nonempty_strings", + "as_string_set", + "check_beta_sigmoid", + "check_device", + "check_image_folder", + "check_keyset_consistency", + "check_model_names", + "check_order", + "check_prompts", + "check_weights", + "encode_image", + "encode_texts", + "is_nonempty_string", + "is_percentage", + "list_or_empty", + "load_model", + "prepare_directions", + "print_results", + "sigmoid_probability", + "validate_config", +] diff --git a/src/uq_desktop_processor/evaluation/clip_common/directions.py b/src/uq_desktop_processor/evaluation/clip_common/directions.py new file mode 100644 index 0000000..a3865ce --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_common/directions.py @@ -0,0 +1,101 @@ +""" +Builds CLIP embedding direction vectors from positive/negative prompt pairs per category. +""" + +import logging +from collections.abc import Callable, Iterable, Mapping +from typing import Any, cast + +import torch +from PIL import Image +from torch import Tensor, nn + +from .model import encode_texts + +log = logging.getLogger(__name__) + + +def _normalize(vector: Tensor) -> Tensor: + """ + Normalize a vector to unit length (L2 norm). + Returns the original vector if its norm is zero. + + Example:: + In: _normalize(vector) + Out: function result returned for provided inputs + """ + vector_norm = vector.norm(p=2) + return vector / vector_norm if vector_norm > 0 else vector + + +def prepare_directions( + prompts: Mapping[str, Mapping[str, Iterable[str]]], + model: nn.Module, + device: torch.device | str, +) -> dict[str, Tensor]: + """ + Compute semantic direction vectors for each category based on + positive and negative prompt examples. + + :param prompts: Dictionary containing categories with "pos" and "neg" prompt lists. + :param model: Text encoding model. + :param device: Torch device for computations. + :return: Dictionary mapping category names to normalized direction vectors. + + Example:: + In: prepare_directions(prompts, model, device) + Out: function result returned for provided inputs + """ + directions: dict[str, Tensor] = {} + + for category, prompt_sides in prompts.items(): + log.debug("Encoding prompts for category: '%s'", category) + + try: + # Encode positive prompts and compute their average embedding + positive_prompt_embedding = encode_texts(prompt_sides["pos"], model, device).mean(dim=0) + # Encode negative prompts and compute their average embedding + negative_prompt_embedding = encode_texts(prompt_sides["neg"], model, device).mean(dim=0) + + # Compute difference and normalize to get a direction vector + direction = _normalize(positive_prompt_embedding - negative_prompt_embedding) + directions[category] = direction + except Exception as error: + log.error("Failed to compute direction for category '%s': %s", category, error) + raise + + log.debug("All direction vectors computed successfully.") + + return directions + + +@torch.no_grad() +def encode_image( + img: Image.Image, + preprocess: Callable[[Image.Image], Tensor], + model: nn.Module, + device: torch.device | str, +) -> Tensor: + """ + Encode an image into a normalized feature vector using the model. + + :param img: Input PIL image. + :param preprocess: Preprocessing function for the model. + :param model: Vision encoder model. + :param device: Torch device for computations. + :return: Normalized image embedding tensor. + + Example:: + In: encode_image(img, preprocess, model, device) + Out: function result returned for provided inputs + """ + if log.isEnabledFor(logging.DEBUG): + log.debug("Encoding image tensor (size: %s)...", img.size) + + # Convert image to RGB, preprocess, and move to device + tensor = preprocess(img.convert("RGB")).unsqueeze(0).to(device) + # Extract image features + model_any = cast(Any, model) + features = model_any.encode_image(tensor) + # Normalize the feature vector + return (features / features.norm(dim=-1, keepdim=True)).squeeze() diff --git a/src/uq_desktop_processor/evaluation/clip_common/model.py b/src/uq_desktop_processor/evaluation/clip_common/model.py new file mode 100644 index 0000000..b21a80d --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_common/model.py @@ -0,0 +1,108 @@ +""" +Loads OpenAI CLIP models and provides text/image encoding for evaluation pipelines. +""" + +import logging +import math +from collections.abc import Callable, Iterable +from typing import Any, cast + +import clip +import torch +from PIL import Image + +log = logging.getLogger(__name__) + + +def load_model( + model_names: Iterable[str], + device: str | torch.device = "cpu", +) -> tuple[torch.nn.Module, Callable[[Image.Image], torch.Tensor], str]: + """ + Try loading a CLIP model from a list of model names. + Returns the first successfully loaded model along with its preprocess function + and the model name that was used. + + :param model_names: Iterable of CLIP model names to try loading. + :param device: Device to load the model onto. + :return: (model, preprocess_function, loaded_model_name) + + Example:: + In: load_model(model_names, device) + Out: function result returned for provided inputs + """ + log.info("Attempting to load CLIP model on device: %s", device) + + last_error = None + for name in model_names: + try: + # Attempt to load a model using the CLIP API + model, preprocess = clip.load(name, device=device, jit=False) + return model.eval(), preprocess, name + except RuntimeError as runtime_error: + # Store the last error in case all models fail + last_error = runtime_error + # Raise an error if none of the models could be loaded + raise RuntimeError("No model could be loaded into memory.") from last_error + + +@torch.no_grad() +def encode_texts( + texts: str | Iterable[str], + model: torch.nn.Module, + device: str | torch.device, +) -> torch.Tensor: + """ + Tokenize and encode one or multiple text inputs using a CLIP model. + Returns L2-normalized text embeddings. + + :param texts: A single string or a sequence of text strings. + :param model: The CLIP model used for encoding. + :param device: Device to run the encoding on. + :return: Normalized text embedding tensor of shape (N, D). + + Example:: + In: encode_texts(texts, model, device) + Out: function result returned for provided inputs + """ + # Ensure texts is a materialized sequence. + text_list = [texts] if isinstance(texts, str) else list(texts) + + if log.isEnabledFor(logging.DEBUG): + log.debug("Encoding %s text prompt(s)...", len(text_list)) + + # Tokenize text and move to device + tokens = clip.tokenize(text_list, truncate=True).to(device) + + # Encode text using CLIP + model_any = cast(Any, model) + features = model_any.encode_text(tokens) + + # Return normalized embeddings + return features / features.norm(dim=-1, keepdim=True) + + +def sigmoid_probability( + delta: float | torch.Tensor, + beta: float | torch.Tensor, +) -> float | torch.Tensor: + """ + Compute a sigmoid-based probability scaled to 0–100 range. + Accepts both scalars and torch tensors. + + :param delta: Input value (difference or score). + :param beta: Scaling factor controlling steepness. + :return: Probability between 0 and 100. + + Example:: + In: sigmoid_probability(delta, beta) + Out: function result returned for provided inputs + """ + # Tensor-based implementation if either input is a tensor + if isinstance(delta, torch.Tensor) or isinstance(beta, torch.Tensor): + delta_t = delta if isinstance(delta, torch.Tensor) else torch.tensor(delta) + beta_t = beta if isinstance(beta, torch.Tensor) else torch.tensor(beta) + return 100.0 / (1.0 + torch.exp(-beta_t * delta_t)) + + # Fallback to pure Python math for scalar values + return 100.0 / (1.0 + math.exp(-beta * delta)) diff --git a/src/uq_desktop_processor/evaluation/clip_common/printer.py b/src/uq_desktop_processor/evaluation/clip_common/printer.py new file mode 100644 index 0000000..0c1029e --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_common/printer.py @@ -0,0 +1,157 @@ +""" +Prints CLIP evaluation summaries and validation output to the console (e.g. tabulated). +""" + +import logging + +from tabulate import tabulate # type: ignore[import-untyped] + +log = logging.getLogger(__name__) + + +def _handle_errors(result: dict) -> bool: + """ + Check whether the result dictionary contains validation errors. + If errors exist, print them along with any warnings. + + :param result: Result dictionary potentially containing "errors" and "warnings". + :return: True if errors were found (and processing should stop), otherwise False. + + Example:: + In: _handle_errors(result) + Out: function result returned for provided inputs + """ + errors = result.get("errors") + if not errors: + return False + + # Log validation errors + log.error("Configuration validation failed:") + for error_message in errors: + log.error(" - %s", error_message) + + # Log warnings if present + warnings = result.get("warnings") or [] + if warnings: + log.warning("Warnings:") + for warning_message in warnings: + log.warning(" - %s", warning_message) + + return True + + +def _build_rows(images: list, order: list[str]) -> list[list[str]]: + """ + Build table rows for output based on image results and category order. + + :param images: List of image result dictionaries. + :param order: List of category names in display order. + :return: List of formatted table rows. + + Example:: + In: _build_rows(images, order) + Out: function result returned for provided inputs + """ + if log.isEnabledFor(logging.DEBUG): + log.debug("Formatting results table for %s images...", len(images)) + + rows = [] + for image_result in images: + # Start each row with the filename + row = [image_result["filename"]] + + # Add delta and probability for each category + for category_name in order: + category_data = image_result["categories"][category_name] + delta = category_data.get("delta") + delta_cell = f"{delta:+.3f}" if isinstance(delta, int | float) else " n/a" + row += [ + delta_cell, # Signed delta value (or n/a for non-CLIP pipelines) + f"{category_data['probability_pct']:6.1f}%", # Probability percentage + ] + + # Add overall score + row.append(f"{image_result['overall_pct']:6.1f}%") + rows.append(row) + + # Sort rows by overall score in descending order + rows.sort(key=lambda row_values: float(row_values[-1].rstrip("%")), reverse=True) + return rows + + +def _build_headers(order: list[str]) -> list[str]: + """ + Build column headers for the results table based on category order. + + :param order: List of category names. + :return: List of formatted column headers. + + Example:: + In: _build_headers(order) + Out: function result returned for provided inputs + """ + return ( + ["filename"] + + [ + # Even index > value column, odd index > percentage column + f"{category_name} value" if index % 2 == 0 else f"{category_name} %" + for index, category_name in enumerate(order * 2) + ] + + ["overall %"] + ) + + +def _log_warnings(warnings: list[str] | None) -> None: + """ + Log warnings if any exist. + + :param warnings: List of warning messages or None. + + Example:: + In: _log_warnings(warnings) + Out: function result returned for provided inputs + """ + if not warnings: + return + + log.warning("[WARNINGS]") + for warning_message in warnings: + log.warning(" - %s", warning_message) + + +def print_results(result: dict) -> None: + """ + Print formatted results using 'tabulate', including scores per image, + model name, overall average, and warnings. + + :param result: Dictionary containing processed evaluation results. + + Example:: + In: print_results(result) + Out: function result returned for provided inputs + """ + # Stop if validation errors were detected + if _handle_errors(result): + return + + images = result.get("images", []) + order = result.get("order", []) + model_name = result.get("model_name", "unknown") + + if not images: + print("No results to display.") + return + + rows = _build_rows(images, order) + headers = _build_headers(order) + + print(f"\nResults using model: {model_name}") + print(tabulate(rows, headers=headers, tablefmt="github")) + + # Print average overall score if available + average_overall_pct = result.get("average_overall_pct") + if average_overall_pct is not None: + print(f"\nAverage overall score: {average_overall_pct:.1f}%") + + # Print any warnings + _log_warnings(result.get("warnings")) diff --git a/src/uq_desktop_processor/evaluation/clip_common/validate.py b/src/uq_desktop_processor/evaluation/clip_common/validate.py new file mode 100644 index 0000000..eca7377 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_common/validate.py @@ -0,0 +1,526 @@ +""" +Validates CLIP evaluation configuration and prepares per-category direction tensors. +""" + +import logging +import os +from collections.abc import Iterable, Mapping +from typing import Any + +import torch + +try: + import clip +except ImportError: + clip = None + _HAS_CLIP = False +else: + _HAS_CLIP = True + +log = logging.getLogger(__name__) + + +class ValidationError(Exception): + """Custom exception storing validation errors and warnings. + + Example:: + In: raise ValidationError(["missing token"], ["beta is high"]) + Out: exception with .errors and .warnings attributes populated + """ + + def __init__(self, errors: list[str], warnings: list[str] | None = None): + """ + Initialize validation error with collected errors and optional warnings. + + :param errors: Validation error messages. + :param warnings: Validation warnings gathered during checks. + + Example:: + In: ValidationError(["missing token"], ["beta is high"]) + Out: exception with .errors and .warnings attributes populated + """ + super().__init__("\n".join(errors)) + self.errors = errors + self.warnings = warnings or [] + + +# Expected keys for prompt categories +SIDES: tuple[str, str] = ("pos", "neg") + + +def is_nonempty_string(value: Any) -> bool: + """ + Check whether a value is a non-empty string. + + :param value: Any value to test. + :return: True if value is a non-empty string, else False. + + Example:: + In: is_nonempty_string(value) + Out: function result returned for provided inputs + """ + return isinstance(value, str) and value.strip() != "" + + +def all_nonempty_strings(values: Iterable[Any]) -> bool: + """ + Check whether all values in an iterable are non-empty strings. + + :param values: Iterable of values. + :return: True if all are non-empty strings. + + Example:: + In: all_nonempty_strings(values) + Out: function result returned for provided inputs + """ + return all(is_nonempty_string(value) for value in values) + + +def as_string_set(values: Iterable[str]) -> set[str]: + """ + Convert an iterable of strings into a cleaned set (trimmed, non-empty). + + :param values: Iterable of strings. + :return: A set of stripped, valid strings. + + Example:: + In: as_string_set(values) + Out: function result returned for provided inputs + """ + return {value.strip() for value in values if is_nonempty_string(value)} + + +def list_or_empty(values: Iterable[Any] | None) -> list[Any]: + """ + Convert an iterable to a list, or return an empty list if None. + + :param values: Iterable or None. + :return: List of items or empty list. + + Example:: + In: list_or_empty(values) + Out: function result returned for provided inputs + """ + return list(values) if values is not None else [] + + +def is_percentage(value: Any) -> bool: + """ + Check whether a value is a numeric percentage between 0 and 100. + + :param value: Any value. + :return: True if within a valid percentage range. + + Example:: + In: is_percentage(value) + Out: function result returned for provided inputs + """ + return isinstance(value, int | float) and 0.0 <= float(value) <= 100.0 + + +def check_image_folder(image_folder_path: str) -> tuple[list[str], list[str]]: + """ + Validate a folder containing images. + + :param image_folder_path: Path to folder. + :return: (errors, warnings) + + Example:: + In: check_image_folder(image_folder_path) + Out: function result returned for provided inputs + """ + errors_list: list[str] = [] + warnings_list: list[str] = [] + + log.debug("Validating image folder path: %s", image_folder_path) + + # Validate path input + if not is_nonempty_string(image_folder_path): + error_message = "image_folder: empty path." + log.error(error_message) + errors_list.append(error_message) + return errors_list, warnings_list + + # Check folder existence + if not os.path.isdir(image_folder_path): + error_message = f"image_folder: folder does not exist: {image_folder_path!r}." + log.error(error_message) + errors_list.append(error_message) + return errors_list, warnings_list + + # Check folder readability and image files + try: + file_names = [ + file_name + for file_name in os.listdir(image_folder_path) + if file_name.lower().endswith((".png", ".jpg", ".jpeg")) + ] + log.debug("Found %s valid image files in folder.", len(file_names)) + except PermissionError: + error_message = f"image_folder: no read permission: {image_folder_path!r}." + log.error(error_message) + errors_list.append(error_message) + return errors_list, warnings_list + + if not file_names: + error_message = f"image_folder: no .png/.jpg/.jpeg files found in {image_folder_path!r}." + log.error(error_message) + errors_list.append(error_message) + + return errors_list, warnings_list + + +def check_device(device_name: str) -> tuple[list[str], list[str]]: + """ + Validate a PyTorch device string (CPU or CUDA). + + :param device_name: Device identifier string. + :return: (errors, warnings) + + Example:: + In: check_device(device_name) + Out: function result returned for provided inputs + """ + errors_list: list[str] = [] + warnings_list: list[str] = [] + log.debug("Validating device configuration: %s", device_name) + + if not is_nonempty_string(device_name): + errors_list.append("device: empty string.") + return errors_list, warnings_list + + # CPU always valid + if device_name == "cpu": + return errors_list, warnings_list + + # CUDA validation + if device_name.startswith("cuda"): + if not torch.cuda.is_available(): + error_message = "device: 'cuda' specified but CUDA is not available." + log.error(error_message) + errors_list.append(error_message) + return errors_list, warnings_list + + # Check GPU index if provided (e.g., 'cuda:1') + if ":" in device_name: + _, _, index_str = device_name.partition(":") + try: + index_int = int(index_str) + gpu_count = torch.cuda.device_count() + if not (0 <= index_int < gpu_count): + error_message = f"device: GPU index out of range (0..{gpu_count - 1})." + log.error(error_message) + errors_list.append(error_message) + except ValueError: + errors_list.append("device: invalid format after 'cuda:'.") + return errors_list, warnings_list + + # Unknown device > warning only + warning_message = f"device: unknown identifier '{device_name}', PyTorch will attempt to use it automatically." + log.warning(warning_message) + warnings_list.append(warning_message) + return errors_list, warnings_list + + +def check_model_names(model_name_iterable: Iterable[str]) -> tuple[list[str], list[str]]: + """ + Validate model name list for CLIP models. + + :param model_name_iterable: Iterable of model names. + :return: (errors, warnings) + + Example:: + In: check_model_names(model_name_iterable) + Out: function result returned for provided inputs + """ + errors_list: list[str] = [] + warnings_list: list[str] = [] + + names_list = list(model_name_iterable) if model_name_iterable is not None else [] + log.debug("Validating model names: %s", names_list) + + if not names_list: + errors_list.append("model_names: empty list or tuple.") + return errors_list, warnings_list + + if not all_nonempty_strings(names_list): + errors_list.append("model_names: all elements must be non-empty strings.") + + # Check availability if CLIP is installed + if _HAS_CLIP: + try: + available_models_set = set(clip.available_models()) + unknown_names = [name for name in names_list if name not in available_models_set] + if unknown_names: + warning_message = f"model_names: unsupported by clip: {', '.join(unknown_names)}." + log.warning(warning_message) + warnings_list.append(warning_message) + except (OSError, RuntimeError, AttributeError): + log.warning("Failed to retrieve available CLIP models list.") + warnings_list.append("model_names: failed to read clip.available_models().") + else: + log.debug("CLIP module not loaded, skipping model name availability check.") + warnings_list.append("model_names: 'clip' module not loaded — skipping availability check.") + + return errors_list, warnings_list + + +def check_beta_sigmoid(beta_value: float) -> tuple[list[str], list[str]]: + """ + Validate the beta parameter used in the sigmoid probability function. + + :param beta_value: Numeric beta parameter. + :return: (errors, warnings) + + Example:: + In: check_beta_sigmoid(beta_value) + Out: function result returned for provided inputs + """ + errors_list: list[str] = [] + warnings_list: list[str] = [] + + if not isinstance(beta_value, int | float): + errors_list.append("beta_sigmoid: must be a number.") + return errors_list, warnings_list + + if beta_value <= 0: + errors_list.append("beta_sigmoid: must be > 0.") + elif beta_value > 100: + warning_message = f"beta_sigmoid: {beta_value} > 100 — the curve will be extremely steep." + log.warning(warning_message) + warnings_list.append(warning_message) + + return errors_list, warnings_list + + +def check_order(category_order: Iterable[str]) -> tuple[list[str], list[str]]: + """ + Validate the order of categories used in scoring. + + :param category_order: Iterable of category names. + :return: (errors, warnings) + + Example:: + In: check_order(category_order) + Out: function result returned for provided inputs + """ + errors_list: list[str] = [] + warnings_list: list[str] = [] + order_list = list_or_empty(category_order) + + if not order_list: + errors_list.append("order: cannot be empty.") + return errors_list, warnings_list + + if not all_nonempty_strings(order_list): + errors_list.append("order: all category names must be non-empty strings.") + + if len(set(order_list)) != len(order_list): + errors_list.append("order: duplicate categories are not allowed.") + + return errors_list, warnings_list + + +def check_weights(weight_mapping: Mapping[str, float]) -> tuple[list[str], list[str]]: + """ + Validate category weight configuration. + + :param weight_mapping: Mapping category → weight value. + :return: (errors, warnings) + + Example:: + In: check_weights(weight_mapping) + Out: function result returned for provided inputs + """ + errors_list: list[str] = [] + warnings_list: list[str] = [] + + if not isinstance(weight_mapping, Mapping): + errors_list.append("weights: must be Mapping[str, float].") + return errors_list, warnings_list + + if not weight_mapping: + errors_list.append("weights: cannot be empty.") + return errors_list, warnings_list + + # Validate each weight + for category_key, weight_value in weight_mapping.items(): + if not is_nonempty_string(category_key): + errors_list.append("weights: category key cannot be empty.") + if not isinstance(weight_value, int | float): + errors_list.append(f"weights[{category_key!r}]: must be a number.") + elif weight_value <= 0: + errors_list.append(f"weights[{category_key!r}]: must be > 0 (geometric mean).") + elif not (float(weight_value) < float("inf")): + errors_list.append(f"weights[{category_key!r}]: Inf/NaN values are not allowed.") + + # Aggregate checks + try: + total_weight = sum(float(value) for value in weight_mapping.values()) + if total_weight <= 0: + errors_list.append("weights: the sum of weights must be > 0.") + + # Warn if one weight dominates the rest + if weight_mapping and max(weight_mapping.values()) >= 10 * (total_weight / len(weight_mapping)): + warning_message = "weights: one weight dominates (>= 10× the average)." + log.warning(warning_message) + warnings_list.append(warning_message) + except (ValueError, TypeError): + pass + + return errors_list, warnings_list + + +def check_prompts(prompt_mapping: Mapping[str, dict[str, Iterable[str]]]) -> tuple[list[str], list[str]]: + """ + Validate the prompt structure (categories with 'pos'/'neg' lists). + + :param prompt_mapping: Mapping category → {'pos': [...], 'neg': [...]} + :return: (errors, warnings) + + Example:: + In: check_prompts(prompt_mapping) + Out: function result returned for provided inputs + """ + errors_list: list[str] = [] + warnings_list: list[str] = [] + + if not isinstance(prompt_mapping, Mapping) or not prompt_mapping: + errors_list.append("prompts: must be a non-empty Mapping.") + return errors_list, warnings_list + + for category_name, side_mapping in prompt_mapping.items(): + if not isinstance(side_mapping, Mapping): + errors_list.append(f"prompts[{category_name!r}]: value must be a dict.") + continue + + # Validate 'pos' and 'neg' + for side_name in SIDES: + if side_name not in side_mapping: + errors_list.append(f"prompts[{category_name!r}]: missing key '{side_name}'.") + continue + + values_list = list_or_empty(side_mapping[side_name]) + + if len(values_list) == 0: + errors_list.append(f"prompts[{category_name!r}]['{side_name}']: list cannot be empty.") + elif not all_nonempty_strings(values_list): + errors_list.append( + f"prompts[{category_name!r}]['{side_name}']: all elements must be non-empty strings." + ) + + # Warn about extremely long prompts (CLIP has token limits) + very_long_prompts = [prompt for prompt in values_list if isinstance(prompt, str) and len(prompt) > 512] + if very_long_prompts: + warning_message = f"prompts[{category_name!r}]['{side_name}']: {len(very_long_prompts)} very long prompts (>512 characters)." + log.warning(warning_message) + warnings_list.append(warning_message) + + return errors_list, warnings_list + + +def check_keyset_consistency( + category_order: Iterable[str], + weight_mapping: Mapping[str, float], + prompt_mapping: Mapping[str, dict[str, Iterable[str]]], +) -> tuple[list[str], list[str]]: + """ + Ensure that the category names across 'order', 'weights', and 'prompts' match. + + :param category_order: Iterable of category names. + :param weight_mapping: Mapping category → weight. + :param prompt_mapping: Mapping category → prompt pairs. + :return: (errors, warnings) + + Example:: + In: check_keyset_consistency(category_order, weight_mapping, prompt_mapping) + Out: function result returned for provided inputs + """ + errors_list: list[str] = [] + warnings_list: list[str] = [] + + order_set = as_string_set(category_order) + weights_set = as_string_set(weight_mapping.keys()) + prompts_set = as_string_set(prompt_mapping.keys()) + + # All three sets must match exactly + if not (order_set == weights_set == prompts_set): + error_message = f"inconsistent keys: order={sorted(order_set)}, weights={sorted(weights_set)}, prompts={sorted(prompts_set)} — sets should match." + log.error(error_message) + errors_list.append(error_message) + + return errors_list, warnings_list + + +def validate_config( + *, + image_folder: str, + device: str, + model_names: Iterable[str], + beta_sigmoid: float, + order: Iterable[str], + weights: Mapping[str, float], + prompts: Mapping[str, dict[str, Iterable[str]]], + raise_on_error: bool = True, +) -> tuple[list[str], list[str]]: + """ + Validate all configuration components and optionally raise an error. + + :param image_folder: Path to folder with images. + :param device: PyTorch device string. + :param model_names: List of CLIP model names. + :param beta_sigmoid: Sigmoid scaling factor. + :param order: Category order. + :param weights: Category weights. + :param prompts: Category → prompt structure. + :param raise_on_error: Raise exception if errors found. + :return: (errors, warnings) + + Example:: + In: validate_config() + Out: function result returned for provided inputs + """ + log.info("Starting configuration validation...") + errors_accumulated: list[str] = [] + warnings_accumulated: list[str] = [] + + # List of validator functions to run + check_functions = [ + lambda: check_image_folder(image_folder), + lambda: check_device(device), + lambda: check_model_names(model_names), + lambda: check_beta_sigmoid(beta_sigmoid), + lambda: check_order(order), + lambda: check_weights(weights), + lambda: check_prompts(prompts), + lambda: check_keyset_consistency(order, weights, prompts), + ] + + # Aggregate errors and warnings from all checks + for check_function in check_functions: + check_errors, check_warnings = check_function() + errors_accumulated.extend(check_errors) + warnings_accumulated.extend(check_warnings) + + # Remove duplicates while preserving order + errors_accumulated = list(dict.fromkeys(errors_accumulated)) + warnings_accumulated = list(dict.fromkeys(warnings_accumulated)) + + if warnings_accumulated: + log.info( + "Configuration validation produced %s warning(s).", + len(warnings_accumulated), + ) + + # Raise exception if configured to do so + if errors_accumulated: + log.error( + "Configuration validation failed with %s error(s).", + len(errors_accumulated), + ) + if raise_on_error: + raise ValidationError(errors_accumulated, warnings_accumulated) + else: + log.info("Configuration validation passed.") + + return errors_accumulated, warnings_accumulated diff --git a/src/uq_desktop_processor/evaluation/clip_prefilter/__init__.py b/src/uq_desktop_processor/evaluation/clip_prefilter/__init__.py new file mode 100644 index 0000000..4919cc6 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_prefilter/__init__.py @@ -0,0 +1,7 @@ +""" +Evaluation module: init . +""" + +from .run import prefilter_folder + +__all__ = ["prefilter_folder"] diff --git a/src/uq_desktop_processor/evaluation/clip_prefilter/defaults.py b/src/uq_desktop_processor/evaluation/clip_prefilter/defaults.py new file mode 100644 index 0000000..b46d86e --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_prefilter/defaults.py @@ -0,0 +1,41 @@ +""" +Default prompts, thresholds, and folder names for CLIP-based image prefiltering. +""" + +from types import MappingProxyType + +DEFAULT_IMAGE_FOLDER = "images/to_filter" +DEFAULT_DEVICE = "cuda" +DEFAULT_MODEL_NAMES = ("ViT-L/14@336px",) + +DEFAULT_BETA_SIGMOID = 30.0 +DEFAULT_FILTER_THRESHOLD = 40.0 + +DEFAULT_REJECTED_FOLDER = "rejected" + +FILTER_PROMPTS = MappingProxyType( + { + "pos": ( + "sunny day", + "clear sky", + "blue sky", + "bright daylight", + "good weather", + "sunlit street", + "dry road surface", + "high visibility", + ), + "neg": ( + "rain", + "rainy weather", + "heavy rain", + "drizzle", + "wet road surface", + "puddles on the road", + "overcast sky", + "dark cloudy sky", + "fog", + "snow", + ), + } +) diff --git a/src/uq_desktop_processor/evaluation/clip_prefilter/run.py b/src/uq_desktop_processor/evaluation/clip_prefilter/run.py new file mode 100644 index 0000000..1b378d5 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_prefilter/run.py @@ -0,0 +1,179 @@ +""" +Moves images into kept or rejected folders using a CLIP semantic accept/reject filter. +""" + +import logging +import os +from collections.abc import Iterable, Mapping +from typing import Any + +import torch +from PIL import Image +from torch import nn + +from uq_desktop_processor.evaluation.clip_common import encode_image, encode_texts, load_model, sigmoid_probability + +from . import defaults +from .utils import _list_images, _move, _validate_dirs, resolve_rejected_folder_path +from .validators import _validate_prefilter_config + +log = logging.getLogger(__name__) + + +@torch.no_grad() +def _build_filter_direction(model: nn.Module, device: str, filter_prompts: Mapping[str, Iterable[str]]) -> torch.Tensor: + """ + Build a direction vector representing the semantic difference + between positive and negative filtering prompts. + + :param model: CLIP model. + :param device: Torch device. + :param filter_prompts: Mapping with 'pos' and 'neg' prompt lists. + :return: Normalized direction vector in embedding space. + + Example:: + In: _build_filter_direction(model, device, filter_prompts) + Out: function result returned for provided inputs + """ + log.debug("Building semantic filter direction vector from prompts...") + positive_embeddings = encode_texts(filter_prompts["pos"], model, device).mean(0) + negative_embeddings = encode_texts(filter_prompts["neg"], model, device).mean(0) + + direction_vector = positive_embeddings - negative_embeddings + direction_norm = direction_vector.norm(p=2) + + return direction_vector / direction_norm if direction_norm > 0 else direction_vector + + +@torch.no_grad() +def prefilter_folder( + image_folder: str = defaults.DEFAULT_IMAGE_FOLDER, + device: str = defaults.DEFAULT_DEVICE, + model_names: tuple[str, ...] = defaults.DEFAULT_MODEL_NAMES, + beta_sigmoid: float = defaults.DEFAULT_BETA_SIGMOID, + filter_threshold: float = defaults.DEFAULT_FILTER_THRESHOLD, + filter_prompts: Mapping[str, Iterable[str]] = defaults.FILTER_PROMPTS, + rejected_folder: str = defaults.DEFAULT_REJECTED_FOLDER, + dry_run: bool = False, +) -> dict[str, Any]: + """ + Filter images in a folder based on similarity to prompt directions. + Images below a threshold are moved to a rejected folder (unless dry_run=True). + + :param image_folder: Folder containing image files. + :param device: PyTorch device string ("cpu" or "cuda"). + :param model_names: Models to attempt loading. + :param beta_sigmoid: Sigmoid scaling factor. + :param filter_threshold: The cutoff percentage [0, 100] for the filter. + :param filter_prompts: A mapping containing 'pos' (positive) and 'neg' (negative) prompt lists. + :param rejected_folder: Sub-folder name for rejected images. + :param dry_run: If True, no files are moved. + :return: Summary dictionary of kept/rejected images. + + Example:: + In: prefilter_folder(image_folder, device, model_names, beta_sigmoid, filter_threshold, filter_prompts, rejected_folder, dry_run) + Out: function result returned for provided inputs + """ + log.info( + "Starting pre-filter in '%s' (Threshold: %s%%).", + image_folder, + filter_threshold, + ) + + if dry_run: + log.warning("Dry run enabled: No files will actually be moved.") + + # 1. Validate inputs + error_messages, warning_messages = _validate_prefilter_config( + image_folder=image_folder, + device=device, + model_names=model_names, + beta_sigmoid=beta_sigmoid, + filter_threshold=filter_threshold, + filter_prompts=filter_prompts, + raise_on_error=True, + ) + + # 2. Prepare directories + image_filenames = _list_images(image_folder) + + if not image_filenames: + log.warning("No images found in '%s'. Aborting pre-filter.", image_folder) + else: + log.info("Found %s images to process.", len(image_filenames)) + + absolute_rejected_folder = resolve_rejected_folder_path(image_folder, rejected_folder) + _validate_dirs(image_folder, absolute_rejected_folder) + + # 3. Load Model and Build Filter Direction + model, preprocess_function, loaded_model_name = load_model(model_names, device) + filter_direction_vector = _build_filter_direction(model, device, filter_prompts) + + kept_images: list[dict[str, Any]] = [] + rejected_images: list[dict[str, Any]] = [] + + # 4. Process Images + for filename in image_filenames: + image_path = os.path.join(image_folder, filename) + try: + with Image.open(image_path) as opened_image: + image_features = encode_image(opened_image, preprocess_function, model, device) + except Exception as open_exception: + log.error("Failed to open/process image '%s': %s", filename, open_exception) + rejected_images.append({"filename": filename, "reason": f"open_error: {open_exception}"}) + continue + + # Project image features onto direction vector + delta_value = torch.dot(image_features, filter_direction_vector).item() + + # Convert to probability using sigmoid + probability_value = float(sigmoid_probability(delta_value, beta_sigmoid)) + + # Apply threshold filtering + if probability_value < filter_threshold: + if log.isEnabledFor(logging.DEBUG): + log.debug( + "REJECT: '%s' (%.1f%% < %s%%)", + filename, + probability_value, + filter_threshold, + ) + + rejected_images.append({"filename": filename, "filter_pct": round(probability_value, 1)}) + if not dry_run: + # Keep file move side effect explicit and easy to spot. + _move(image_path, absolute_rejected_folder) + else: + if log.isEnabledFor(logging.DEBUG): + log.debug( + "KEEP: '%s' (%.1f%% >= %s%%)", + filename, + probability_value, + filter_threshold, + ) + + kept_images.append({"filename": filename, "filter_pct": round(probability_value, 1)}) + + log.info( + "Pre-filtering complete. Kept: %s, Rejected: %s.", + len(kept_images), + len(rejected_images), + ) + + # 5. Return Summary + return { + "model_name": loaded_model_name, + "image_folder": image_folder, + "rejected_folder": absolute_rejected_folder, + "beta_sigmoid": beta_sigmoid, + "filter_threshold": filter_threshold, + "kept": kept_images, + "rejected": rejected_images, + "summary": { + "total": len(image_filenames), + "kept": len(kept_images), + "rejected": len(rejected_images), + }, + "warnings": warning_messages, + "dry_run": dry_run, + } diff --git a/src/uq_desktop_processor/evaluation/clip_prefilter/utils.py b/src/uq_desktop_processor/evaluation/clip_prefilter/utils.py new file mode 100644 index 0000000..63b5894 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_prefilter/utils.py @@ -0,0 +1,138 @@ +""" +Image discovery, directory checks, and file moves for the prefilter workflow. +""" + +import logging +import os +import shutil +import time + +log = logging.getLogger(__name__) + + +def _list_images(folder: str) -> list[str]: + """ + Return list of image filenames (png/jpg/jpeg) from a folder. + + :param folder: Path to folder. + :return: Sorted list of image filenames. + + Example:: + In: _list_images(folder) + Out: function result returned for provided inputs + """ + log.debug("Scanning folder for images: %s", folder) + + return sorted(filename for filename in os.listdir(folder) if filename.lower().endswith((".png", ".jpg", ".jpeg"))) + + +def _unique_path(destination_directory: str, filename: str) -> str: + """ + Generate a unique destination path to avoid overwriting existing files. + Appends timestamp and a counter until a free filename is found. + + :param destination_directory: Target folder. + :param filename: Original filename. + :return: Unique full file path. + + Example:: + In: _unique_path(destination_directory, filename) + Out: function result returned for provided inputs + """ + file_base, file_extension = os.path.splitext(filename) + candidate_path = os.path.join(destination_directory, filename) + counter = 1 + + while os.path.exists(candidate_path): + candidate_path = os.path.join( + destination_directory, f"{file_base}__{int(time.time())}_{counter}{file_extension}" + ) + counter += 1 + + if counter > 1: + log.debug( + "File collision detected. Renamed to: %s", + os.path.basename(candidate_path), + ) + + return candidate_path + + +def _ensure_dir(directory_path: str) -> None: + """ + Ensure that a directory exists, creating it if needed. + + :param directory_path: Directory path to ensure. + + Example:: + In: _ensure_dir(directory_path) + Out: function result returned for provided inputs + """ + if not os.path.exists(directory_path): + log.debug("Creating directory: %s", directory_path) + os.makedirs(directory_path, exist_ok=True) + + +def _move(source_path: str, destination_directory: str) -> None: + """ + Move a file to another directory using a unique destination filename. + + :param source_path: Source file path. + :param destination_directory: Target folder. + + Example:: + In: _move(source_path, destination_directory) + Out: function result returned for provided inputs + """ + _ensure_dir(destination_directory) + unique_destination = _unique_path(destination_directory, os.path.basename(source_path)) + + if log.isEnabledFor(logging.DEBUG): + log.debug("Moving file '%s' to '%s'", source_path, unique_destination) + + shutil.move(source_path, unique_destination) + + +def resolve_rejected_folder_path(image_folder: str, rejected_folder: str) -> str: + """ + Resolve where rejected images are stored. + + If ``rejected_folder`` is an absolute path, it is used as-is (expanded). + Otherwise it is resolved relative to the parent directory of ``image_folder`` + (same behaviour as a sibling folder name such as ``rejected``). + + :param image_folder: Folder being filtered (absolute or relative). + :param rejected_folder: Absolute path, or relative name/path under the image folder's parent. + :return: Absolute path to the rejected-images directory. + + Example:: + In: resolve_rejected_folder_path(image_folder, rejected_folder) + Out: function result returned for provided inputs + """ + image_abs = os.path.abspath(os.path.expanduser(image_folder)) + rejected_folder_input = (rejected_folder or "").strip() or "rejected" + rejected_folder_expanded = os.path.expanduser(rejected_folder_input) + if os.path.isabs(rejected_folder_expanded): + return os.path.abspath(rejected_folder_expanded) + return os.path.abspath(os.path.join(os.path.dirname(image_abs), rejected_folder_expanded)) + + +def _validate_dirs(image_folder: str, rejected_absolute_path: str) -> None: + """ + Ensure the source image folder and the destination rejected folder are distinct. + + This prevents operations where files might be moved into the same directory + they currently reside in. + + :param image_folder: Path to the source directory containing images. + :param rejected_absolute_path: Absolute path to the directory for rejected items. + :raises ValueError: If both paths resolve to the same directory. + + Example:: + In: _validate_dirs(image_folder, rejected_absolute_path) + Out: function result returned for provided inputs + """ + if os.path.abspath(image_folder) == os.path.abspath(rejected_absolute_path): + error_message = "rejected_folder must be different from image_folder." + log.error(error_message) + raise ValueError(error_message) diff --git a/src/uq_desktop_processor/evaluation/clip_prefilter/validators.py b/src/uq_desktop_processor/evaluation/clip_prefilter/validators.py new file mode 100644 index 0000000..bbe3d7f --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_prefilter/validators.py @@ -0,0 +1,167 @@ +""" +Validates prefilter configuration dicts before loading models or scanning images. +""" + +import logging +from collections.abc import Iterable, Mapping +from typing import Any + +from uq_desktop_processor.evaluation.clip_common import ( + ValidationError, + check_beta_sigmoid, + check_device, + check_image_folder, + check_model_names, +) + +log = logging.getLogger(__name__) + + +def _is_percentage(value: Any) -> bool: + """ + Check whether a given value represents a valid percentage (0–100). + + :param value: Value to test. + :return: True if value is numeric and in range [0, 100]. + + Example:: + In: _is_percentage(value) + Out: function result returned for provided inputs + """ + try: + numeric_value = float(value) + except (ValueError, TypeError): + return False + return 0.0 <= numeric_value <= 100.0 + + +def _check_filter_threshold(threshold_value: float) -> tuple[list[str], list[str]]: + """ + Validate the numeric threshold used for filtering. + Ensures the value is a number and within [0, 100]. + + :param threshold_value: Threshold percentage. + :return: (errors, warnings) + + Example:: + In: _check_filter_threshold(threshold_value) + Out: function result returned for provided inputs + """ + error_messages: list[str] = [] + warning_messages: list[str] = [] + + if not isinstance(threshold_value, int | float): + error_message = "filter_threshold: must be a number." + log.error(error_message) + error_messages.append(error_message) + return error_messages, warning_messages + + if not _is_percentage(threshold_value): + error_message = "filter_threshold: allowed range is [0, 100]." + log.error(error_message) + error_messages.append(error_message) + + return error_messages, warning_messages + + +def _check_filter_prompts(filter_prompt_mapping: Mapping[str, Iterable[str]]) -> tuple[list[str], list[str]]: + """ + Validate the structure and content of filter prompts. + Ensures presence of 'pos' and 'neg' keys and that all prompts are non-empty strings. + + :param filter_prompt_mapping: Mapping with keys 'pos' and 'neg' pointing to lists of prompts. + :return: (errors, warnings) + + Example:: + In: _check_filter_prompts(filter_prompt_mapping) + Out: function result returned for provided inputs + """ + error_messages: list[str] = [] + warning_messages: list[str] = [] + + if not isinstance(filter_prompt_mapping, Mapping): + error_message = "filter_prompts: must be a Mapping." + log.error(error_message) + error_messages.append(error_message) + return error_messages, warning_messages + + for prompt_side_name in ("pos", "neg"): + if prompt_side_name not in filter_prompt_mapping: + error_message = f"filter_prompts: missing key '{prompt_side_name}'." + log.error(error_message) + error_messages.append(error_message) + continue + + prompt_values = list(filter_prompt_mapping[prompt_side_name] or []) + if not prompt_values: + error_message = f"filter_prompts['{prompt_side_name}']: list cannot be empty." + log.error(error_message) + error_messages.append(error_message) + elif not all(isinstance(prompt_text, str) and prompt_text.strip() for prompt_text in prompt_values): + error_message = f"filter_prompts['{prompt_side_name}']: all elements must be non-empty strings." + log.error(error_message) + error_messages.append(error_message) + + return error_messages, warning_messages + + +def _validate_prefilter_config( + *, + image_folder: str, + device: str, + model_names: Iterable[str], + beta_sigmoid: float, + filter_threshold: float, + filter_prompts: Mapping[str, Iterable[str]], + raise_on_error: bool = True, +) -> tuple[list[str], list[str]]: + """ + Validate the configuration parameters for the pre-filtering process. + + This function aggregates various validation checks for image sources, compute devices, + CLIP model specifications, and filtering parameters (thresholds and prompts). + + :param image_folder: Path to the directory containing images to be processed. + :param device: The compute device identifier (e.g., 'cpu', 'cuda'). + :param model_names: An iterable of CLIP model names to be utilized. + :param beta_sigmoid: The beta coefficient used in the sigmoid scaling function. + :param filter_threshold: The cutoff percentage [0, 100] for the filter. + :param filter_prompts: A mapping containing 'pos' (positive) and 'neg' (negative) prompt lists. + :param raise_on_error: If True, raises a ValidationError when errors occur. Defaults to True. + :return: A tuple containing a list of error messages and a list of warning messages. + :raises ValidationError: If errors are found and raise_on_error is True. + + Example:: + In: _validate_prefilter_config() + Out: function result returned for provided inputs + """ + log.debug("Validating pre-filter configuration...") + error_messages: list[str] = [] + warning_messages: list[str] = [] + + validation_checks = [ + lambda: check_image_folder(image_folder), + lambda: check_device(device), + lambda: check_model_names(model_names), + lambda: check_beta_sigmoid(beta_sigmoid), + lambda: _check_filter_threshold(filter_threshold), + lambda: _check_filter_prompts(filter_prompts), + ] + + for validation_function in validation_checks: + function_errors, function_warnings = validation_function() + error_messages += function_errors + warning_messages += function_warnings + + # Remove duplicates while preserving order + error_messages = list(dict.fromkeys(error_messages)) + warning_messages = list(dict.fromkeys(warning_messages)) + + if error_messages: + log.error("Pre-filter validation failed with %s errors.", len(error_messages)) + if raise_on_error: + raise ValidationError(error_messages, warning_messages) + else: + log.debug("Pre-filter configuration valid.") + + return error_messages, warning_messages diff --git a/src/uq_desktop_processor/evaluation/evaluation_utils/__init__.py b/src/uq_desktop_processor/evaluation/evaluation_utils/__init__.py new file mode 100644 index 0000000..d018ee2 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/evaluation_utils/__init__.py @@ -0,0 +1,21 @@ +""" +Evaluation module: init . +""" + +from .schema import ( + CategoryScore, + EvaluationResult, + ImageResult, + make_category_score, + make_evaluation_result, + make_image_result, +) + +__all__ = [ + "CategoryScore", + "ImageResult", + "EvaluationResult", + "make_category_score", + "make_image_result", + "make_evaluation_result", +] diff --git a/src/uq_desktop_processor/evaluation/evaluation_utils/schema.py b/src/uq_desktop_processor/evaluation/evaluation_utils/schema.py new file mode 100644 index 0000000..c9033bd --- /dev/null +++ b/src/uq_desktop_processor/evaluation/evaluation_utils/schema.py @@ -0,0 +1,147 @@ +""" +TypedDict schemas and helpers for structured CLIP (and related) evaluation JSON output. +""" + +from collections.abc import Mapping, Sequence +from typing import Any, NotRequired, TypedDict + + +class CategoryScore(TypedDict): + """ + CategoryScore evaluation helper class. + + Example:: + In: CategoryScore(...) + Out: initialized instance ready for use + """ + + probability_pct: float + delta: float | None + + +class ImageResult(TypedDict): + """ + ImageResult evaluation helper class. + + Example:: + In: ImageResult(...) + Out: initialized instance ready for use + """ + + filename: str + image_path: NotRequired[str] + overall_pct: float + categories: Mapping[str, CategoryScore] + + +class EvaluationResult(TypedDict): + """ + EvaluationResult evaluation helper class. + + Example:: + In: EvaluationResult(...) + Out: initialized instance ready for use + """ + + model_name: str | None + order: Sequence[str] + weights: NotRequired[Mapping[str, float] | None] + beta_sigmoid: float | None + images: list[ImageResult] + average_overall_pct: float | None + skipped_images: NotRequired[list[str]] + warnings: list[str] + errors: list[str] | None + # Optional extension point for future pipelines + extra: NotRequired[Mapping[str, Any]] + + +def make_category_score(*, probability_pct: float, delta: float | None) -> CategoryScore: + """ + Build one category score entry. + + :param probability_pct: Category probability in percent. + :param delta: Raw directional score, if available. + :return: Typed category score dictionary. + + Example:: + In: make_category_score(probability_pct=62.5, delta=0.12) + Out: {"probability_pct": 62.5, "delta": 0.12} + """ + return {"probability_pct": float(probability_pct), "delta": None if delta is None else float(delta)} + + +def make_image_result( + *, + filename: str, + image_path: str | None = None, + overall_pct: float, + categories: Mapping[str, CategoryScore], +) -> ImageResult: + """ + Build one image-level result record. + + :param filename: Source image path or name. + :param image_path: Optional absolute/relative path to source image. + :param overall_pct: Overall score in percent. + :param categories: Per-category score mapping. + :return: Typed image result dictionary. + + Example:: + In: make_image_result(filename="img.jpg", overall_pct=57.0, categories={"wealthier": {"probability_pct": 60.0, "delta": 0.2}}) + Out: {"filename": "img.jpg", "overall_pct": 57.0, "categories": {...}} + """ + out: ImageResult = {"filename": str(filename), "overall_pct": float(overall_pct), "categories": categories} + if image_path is not None: + out["image_path"] = str(image_path) + return out + + +def make_evaluation_result( + *, + model_name: str | None, + order: Sequence[str], + beta_sigmoid: float | None, + images: list[ImageResult], + average_overall_pct: float | None, + warnings: list[str] | None = None, + errors: list[str] | None = None, + weights: Mapping[str, float] | None = None, + skipped_images: list[str] | None = None, + extra: Mapping[str, Any] | None = None, +) -> EvaluationResult: + """ + Assemble full evaluation payload in a consistent schema. + + :param model_name: Model identifier. + :param order: Category output order. + :param beta_sigmoid: Beta value used by sigmoid scoring (if applicable). + :param images: Per-image results. + :param average_overall_pct: Dataset average score. + :param warnings: Non-fatal warnings. + :param errors: Fatal or aggregated errors. + :param weights: Optional category weights. + :param skipped_images: Optional skipped-image messages. + :param extra: Optional extension block. + :return: Typed evaluation result dictionary. + + Example:: + In: make_evaluation_result(model_name="ViT-L/14", order=("wealthier",), beta_sigmoid=30.0, images=[], average_overall_pct=None) + Out: {"model_name": "ViT-L/14", "order": ("wealthier",), "images": [], ...} + """ + out: EvaluationResult = { + "model_name": model_name, + "order": tuple(order), + "beta_sigmoid": beta_sigmoid, + "images": images, + "average_overall_pct": average_overall_pct, + "warnings": list(warnings or []), + "errors": errors, + } + if weights is not None: + out["weights"] = dict(weights) + if skipped_images is not None: + out["skipped_images"] = list(skipped_images) + if extra is not None: + out["extra"] = dict(extra) + return out From 1fa2b06d6989d873fd1539fd0366b41bb12bbb77 Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 11:10:43 +0200 Subject: [PATCH 06/12] feat(evaluation): add CLIP and finetuned image scorers (#6) --- .../evaluation/clip_evaluator/__init__.py | 7 + .../evaluation/clip_evaluator/defaults.py | 72 ++++ .../evaluation/clip_evaluator/run.py | 216 +++++++++++ .../evaluation/clip_evaluator/scoring.py | 155 ++++++++ .../evaluation/clip_evaluator/utils.py | 25 ++ .../finetuned_evaluator/__init__.py | 7 + .../finetuned_evaluator/defaults.py | 14 + .../evaluation/finetuned_evaluator/model.py | 82 ++++ .../evaluation/finetuned_evaluator/run.py | 342 +++++++++++++++++ .../evaluation/finetuned_evaluator/utils.py | 356 ++++++++++++++++++ 10 files changed, 1276 insertions(+) create mode 100644 src/uq_desktop_processor/evaluation/clip_evaluator/__init__.py create mode 100644 src/uq_desktop_processor/evaluation/clip_evaluator/defaults.py create mode 100644 src/uq_desktop_processor/evaluation/clip_evaluator/run.py create mode 100644 src/uq_desktop_processor/evaluation/clip_evaluator/scoring.py create mode 100644 src/uq_desktop_processor/evaluation/clip_evaluator/utils.py create mode 100644 src/uq_desktop_processor/evaluation/finetuned_evaluator/__init__.py create mode 100644 src/uq_desktop_processor/evaluation/finetuned_evaluator/defaults.py create mode 100644 src/uq_desktop_processor/evaluation/finetuned_evaluator/model.py create mode 100644 src/uq_desktop_processor/evaluation/finetuned_evaluator/run.py create mode 100644 src/uq_desktop_processor/evaluation/finetuned_evaluator/utils.py diff --git a/src/uq_desktop_processor/evaluation/clip_evaluator/__init__.py b/src/uq_desktop_processor/evaluation/clip_evaluator/__init__.py new file mode 100644 index 0000000..cea62ea --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_evaluator/__init__.py @@ -0,0 +1,7 @@ +""" +Evaluation module: init . +""" + +from .run import evaluate_images_with_clip + +__all__ = ["evaluate_images_with_clip"] diff --git a/src/uq_desktop_processor/evaluation/clip_evaluator/defaults.py b/src/uq_desktop_processor/evaluation/clip_evaluator/defaults.py new file mode 100644 index 0000000..7f9d2d3 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_evaluator/defaults.py @@ -0,0 +1,72 @@ +""" +Default paths, model names, and hyperparameters for the CLIP image evaluator. +""" + +from types import MappingProxyType + +DEFAULT_IMAGE_FOLDER = "images/to_evaluate" +DEFAULT_DEVICE = "cuda" +DEFAULT_MODEL_NAMES = ("ViT-L/14@336px",) +DEFAULT_BETA_SIGMOID = 30.0 + +DEFAULT_ORDER = ("wealth", "safety", "beauty") +DEFAULT_WEIGHTS = MappingProxyType( + { + "wealth": 0.01, + "safety": 1.5, + "beauty": 0.01, + } +) + +DEFAULT_PROMPTS = MappingProxyType( + { + "wealth": { + "pos": ( + "modern upscale neighborhood with well-maintained houses and clean sidewalks", + "affluent residential street with manicured lawns and luxury cars parked neatly", + "elegant suburban area with detached villas and landscaped gardens", + "wealthy quiet street with new facades, large windows, and decorative lighting", + "high-income residential zone with stone fences and premium architecture", + ), + "neg": ( + "run-down street with peeling paint and old damaged houses", + "poor urban area with graffiti and broken sidewalks", + "low-income neighborhood with abandoned or boarded-up buildings", + "crowded residential block with cluttered yards and visible decay", + "street showing signs of poverty, trash, and disrepair", + ), + }, + "safety": { + "pos": ( + "peaceful residential street with clear visibility and no signs of danger", + "calm, well-lit suburban neighborhood with families walking and children playing", + "clean area with maintained houses and no graffiti or broken glass", + "quiet street with orderly parked cars and good street lighting", + "safe environment with tidy gardens, fences, and visible community care", + ), + "neg": ( + "dark alley with broken lights, graffiti, and litter on the ground", + "street showing vandalism, smashed windows, or police tape", + "abandoned neighborhood with derelict buildings and no people", + "unsafe area with heavy shadows and visible neglect", + "crime-ridden urban zone with damaged cars and boarded houses", + ), + }, + "beauty": { + "pos": ( + "beautiful tree-lined residential street under warm sunlight", + "charming neighborhood with colorful facades and blooming gardens", + "scenic avenue with tidy sidewalks, greenery, and balanced composition", + "aesthetically pleasing street with clean architecture and natural light", + "picturesque suburban scene with flowers, cafés, and cozy atmosphere", + ), + "neg": ( + "dreary street under grey overcast sky with bare trees", + "dirty industrial-looking road with trash and potholes", + "unappealing neighborhood with dull colors and visual clutter", + "ugly or neglected street lacking greenery and harmony", + "bleak winter street with mud, slush, and poor lighting", + ), + }, + } +) diff --git a/src/uq_desktop_processor/evaluation/clip_evaluator/run.py b/src/uq_desktop_processor/evaluation/clip_evaluator/run.py new file mode 100644 index 0000000..bebbb77 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_evaluator/run.py @@ -0,0 +1,216 @@ +""" +Batch-scores images with CLIP against configured semantic directions and writes JSON results. +""" + +import logging +import os +from collections.abc import Mapping +from typing import Any + +from uq_desktop_processor.evaluation.clip_common import ValidationError, load_model, prepare_directions, validate_config +from uq_desktop_processor.evaluation.evaluation_utils import make_evaluation_result + +from . import defaults +from .scoring import score_image + +log = logging.getLogger(__name__) + + +def _get_image_files(folder: str) -> list[str]: + """ + Return a sorted list of image filenames in the specified folder. + Only .png, .jpg, and .jpeg extensions are included. + + :param folder: Path to image folder. + :return: Sorted list of filenames. + + Example:: + In: _get_image_files(folder) + Out: function result returned for provided inputs + """ + files = sorted(filename for filename in os.listdir(folder) if filename.lower().endswith((".png", ".jpg", ".jpeg"))) + log.debug("Scanned folder '%s': found %s valid image files.", folder, len(files)) + return files + + +def _format_single_result( + filename: str, image_path: str, raw_result: dict[str, Any], order: tuple[str, ...] +) -> dict[str, Any]: + """ + Format raw scoring output for a single image into a clean result structure. + + :param filename: Image filename. + :param raw_result: Raw scoring dictionary from score_image(). + :param order: Category order tuple. + :return: Formatted result dictionary. + + Example:: + In: _format_single_result(filename, raw_result, order) + Out: function result returned for provided inputs + """ + return { + "filename": filename, + "image_path": image_path, + "categories": { + category_name: { + "delta": float(f"{raw_result[category_name]['delta']:.6f}"), + "probability_pct": float(f"{raw_result[category_name]['probability']:.1f}"), + } + for category_name in order + }, + "overall_pct": float(f"{raw_result['overall']:.1f}"), + } + + +def _create_error_response( + validation_exception: ValidationError, order: tuple, weights: Mapping, beta_sigmoid_value: float +) -> dict[str, Any]: + """ + Build a consistent response dictionary when validation fails. + + :param validation_exception: ValidationError instance. + :param order: Category order. + :param weights: Weight mapping. + :param beta_sigmoid_value: Sigmoid beta value. + :return: Error response structure. + + Example:: + In: _create_error_response(validation_exception, order, weights, beta_sigmoid_value) + Out: function result returned for provided inputs + """ + return { + "model_name": None, + "order": order, + "weights": dict(weights), + "beta_sigmoid": beta_sigmoid_value, + "warnings": list(validation_exception.warnings), + "images": [], + "average_overall_pct": None, + "errors": list(validation_exception.errors), + } + + +def evaluate_images_with_clip( + image_folder: str = defaults.DEFAULT_IMAGE_FOLDER, + device: str = defaults.DEFAULT_DEVICE, + model_names: tuple[str, ...] = defaults.DEFAULT_MODEL_NAMES, + beta_sigmoid: float = defaults.DEFAULT_BETA_SIGMOID, + order: tuple[str, ...] = defaults.DEFAULT_ORDER, + weights: Mapping[str, float] = defaults.DEFAULT_WEIGHTS, + prompts: Mapping[str, dict] = defaults.DEFAULT_PROMPTS, + *, + raise_on_validation_error: bool = True, +) -> dict[str, Any]: + """ + Evaluate all images in a folder using CLIP-based scoring. + Performs validation, loads the model, prepares direction vectors, + scores each image, and produces a final aggregated result. + + :param image_folder: Folder containing image files. + :param device: PyTorch device string ("cpu" or "cuda"). + :param model_names: Models to attempt loading. + :param beta_sigmoid: Sigmoid scaling factor. + :param order: Category order tuple. + :param weights: Weight mapping for categories. + :param prompts: Prompt mapping for positive/negative directions. + :param raise_on_validation_error: Whether to raise or return structured error output. + :return: Full evaluation result dictionary. + + Example:: + In: evaluate_images_with_clip(image_folder, device, model_names, beta_sigmoid, order, weights, prompts) + Out: function result returned for provided inputs + """ + log.info("Starting CLIP evaluation pipeline.") + + try: + # Validate configuration before processing + error_messages, warning_messages = validate_config( + image_folder=image_folder, + device=device, + model_names=model_names, + beta_sigmoid=beta_sigmoid, + order=order, + weights=weights, + prompts=prompts, + raise_on_error=raise_on_validation_error, + ) + except ValidationError as validation_exception: + log.error("Validation failed with %s errors.", len(validation_exception.errors)) + # Return structured error result instead of raising + if raise_on_validation_error: + raise + log.warning("Returning structured error response (raise_on_validation_error=False).") + return make_evaluation_result( + model_name=None, + order=order, + weights=dict(weights), + beta_sigmoid=beta_sigmoid, + images=[], + average_overall_pct=None, + warnings=list(validation_exception.warnings), + errors=list(validation_exception.errors), + skipped_images=[], + ) + + # Load input images + image_filenames = _get_image_files(image_folder) + + if not image_filenames: + log.warning("No images found in '%s'. Aborting evaluation.", image_folder) + else: + log.info("Found %s images to evaluate in '%s'.", len(image_filenames), image_folder) + + # Load CLIP model + model, preprocess, loaded_model_name = load_model(model_names, device) + + # Compute semantic direction vectors for categories + direction_vectors = prepare_directions(prompts, model, device) + + # Build shared configuration for scoring function + configuration_for_scoring = { + "device": device, + "beta_sigmoid": beta_sigmoid, + "order": order, + "weights": weights, + } + + formatted_image_results = [] + overall_scores = [] + + # Evaluate each image + for filename in image_filenames: + if log.isEnabledFor(logging.DEBUG): + log.debug("Scoring image: %s", filename) + + image_path = os.path.join(image_folder, filename) + + # Compute raw score + raw_score_result = score_image(image_path, model, preprocess, direction_vectors, configuration_for_scoring) + + # Format final clean result for this image + formatted_result = _format_single_result(filename, image_path, raw_score_result, order) + formatted_image_results.append(formatted_result) + + # Collect overall score for averaging + overall_scores.append(raw_score_result["overall"]) + + # Compute mean overall score + average_overall_score = sum(overall_scores) / len(overall_scores) if overall_scores else None + + log.info( + "Evaluation finished. Average overall score: %s (for %s images).", + average_overall_score, + len(overall_scores), + ) + + return make_evaluation_result( + model_name=loaded_model_name, + order=order, + weights=dict(weights), + beta_sigmoid=beta_sigmoid, + images=formatted_image_results, + average_overall_pct=(round(average_overall_score, 1) if average_overall_score is not None else None), + warnings=warning_messages, + errors=None, + skipped_images=[], + ) diff --git a/src/uq_desktop_processor/evaluation/clip_evaluator/scoring.py b/src/uq_desktop_processor/evaluation/clip_evaluator/scoring.py new file mode 100644 index 0000000..130e7d5 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_evaluator/scoring.py @@ -0,0 +1,155 @@ +""" +Per-image CLIP scoring: sigmoid probabilities, categories, and optional weighting. +""" + +import logging +import math +from collections.abc import Callable +from typing import Any, cast + +import torch +from PIL import Image +from torch import Tensor, nn + +from uq_desktop_processor.evaluation.clip_common.model import sigmoid_probability + +log = logging.getLogger(__name__) + + +def _load_and_encode_image( + path: str, preprocess: Callable[[Image.Image], Tensor], model: nn.Module, device: torch.device +) -> Tensor: + """ + Load an image from disk, preprocess it, and return its normalized + CLIP feature embedding. + + :param path: Path to the image file. + :param preprocess: Preprocessing function associated with the CLIP model. + :param model: CLIP model used for encoding images. + :param device: Torch device on which computation is performed. + :return: L2-normalized image embedding tensor (1D). + + Example:: + In: _load_and_encode_image(path, preprocess, model, device) + Out: function result returned for provided inputs + """ + log.debug("Loading and encoding image from: %s", path) + + try: + # Load the image and convert to RGB + image = Image.open(path).convert("RGB") + + # Apply CLIP preprocessing and move to device + tensor = preprocess(image).unsqueeze(0).to(device) + + # Extract feature embedding + model_any = cast(Any, model) + features = model_any.encode_image(tensor) + + # Normalize the feature vector + features = features / features.norm(dim=-1, keepdim=True) + + return features.squeeze() + + except Exception as error: + log.error("Failed to process image '%s': %s", path, error) + raise + + +def _compute_weighted_score( + results: dict[str, dict[str, float]], categories: list[str], weights: dict[str, float] +) -> float: + """ + Compute the overall score using a weighted geometric mean of probabilities. + + :param results: Dict of per-category scores, each containing: + { "delta": float, "probability": float } + :param categories: List of category names in scoring order. + :param weights: Mapping category → weight. + :return: Weighted overall score as a percentage. + + Example:: + In: _compute_weighted_score(results, categories, weights) + Out: function result returned for provided inputs + """ + min_prob: float = 1e-6 # Avoid log(0) by clamping very small values + weighted_log_sum: float = 0.0 + total_weight: float = 0.0 + + for category in categories: + # Probability is stored as percentage; convert to [0, 1] range + prob_percent: float = results[category]["probability"] + prob: float = max(prob_percent / 100.0, min_prob) + + weight: float = weights[category] + + # Use weighted geometric mean = exp(weighted average of log-probabilities) + weighted_log_sum += weight * math.log(prob) + total_weight += weight + + # Convert weighted log-mean back to percentage probability space. + score: float = math.exp(weighted_log_sum / total_weight) * 100.0 + return score + + +@torch.no_grad() +def score_image( + path: str, + model: nn.Module, + preprocess: Callable[[Image.Image], Tensor], + directions: dict[str, Tensor], + config: dict[str, Any], +) -> dict[str, Any]: + """ + Score a single image using CLIP by comparing it with category direction vectors. + + :param path: Path to the image file. + :param model: CLIP model for encoding. + :param preprocess: CLIP-specific preprocessing function. + :param directions: Precomputed direction vectors per category. + :param config: Scoring configuration dictionary containing: + - "device": torch.device + - "beta_sigmoid": float + - "order": list/tuple of categories + - "weights": weight mapping + :return: Structured scoring result: + { + "category": { "delta": float, "probability": float }, + ... + "overall": float + } + + Example:: + In: score_image(path, model, preprocess, directions, config) + Out: function result returned for provided inputs + """ + device: torch.device = config["device"] + beta: float = config["beta_sigmoid"] + + try: + # Load and encode the image into CLIP's embedding space + features: Tensor = _load_and_encode_image(path, preprocess, model, device) + + results: dict[str, Any] = {} + + # Compute per-category delta and probability + for category in config["order"]: + # Dot product measures similarity to direction vector + delta: float = torch.dot(features, directions[category]).item() + # Convert similarity into a probability using a sigmoid curve + probability: float = sigmoid_probability(delta, beta) + results[category] = {"delta": delta, "probability": probability} + + # Compute final overall score via weighted geometric mean + overall: float = _compute_weighted_score(results, config["order"], config["weights"]) + + results["overall"] = overall + + if log.isEnabledFor(logging.DEBUG): + log.debug("Scored '%s' -> Overall: %.2f", path, overall) + + return results + + except Exception as error: + log.error("Error while scoring image '%s': %s", path, error) + raise diff --git a/src/uq_desktop_processor/evaluation/clip_evaluator/utils.py b/src/uq_desktop_processor/evaluation/clip_evaluator/utils.py new file mode 100644 index 0000000..218c112 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/clip_evaluator/utils.py @@ -0,0 +1,25 @@ +""" +Filesystem and formatting helpers used by the CLIP evaluator CLI run. +""" + +from typing import Any + +from uq_desktop_processor.evaluation.clip_common import print_results as _print_common_results + + +def print_results(result: dict[str, Any]) -> None: + """ + Wrapper around the shared print_results function. + + This exists to provide a local entry point for printing evaluation + results, while delegating the actual formatting and output logic + to the shared printer utility. + + :param result: Result dictionary produced by the evaluation pipeline. + :return: Whatever the underlying printer function returns. + + Example:: + In: print_results(result) + Out: function result returned for provided inputs + """ + return _print_common_results(result) diff --git a/src/uq_desktop_processor/evaluation/finetuned_evaluator/__init__.py b/src/uq_desktop_processor/evaluation/finetuned_evaluator/__init__.py new file mode 100644 index 0000000..4f870d7 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/finetuned_evaluator/__init__.py @@ -0,0 +1,7 @@ +""" +Evaluation module: init . +""" + +from .run import evaluate_images_with_finetuned + +__all__ = ["evaluate_images_with_finetuned"] diff --git a/src/uq_desktop_processor/evaluation/finetuned_evaluator/defaults.py b/src/uq_desktop_processor/evaluation/finetuned_evaluator/defaults.py new file mode 100644 index 0000000..2e6aa80 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/finetuned_evaluator/defaults.py @@ -0,0 +1,14 @@ +""" +Default checkpoint paths and inference settings for fine-tuned ViT scoring. +""" + +from collections.abc import Sequence + +DEFAULT_CATEGORY_ORDER: Sequence[str] = ( + "safer", + "wealthier", + "more beautiful", + "livelier", + "less depressing", + "less boring", +) diff --git a/src/uq_desktop_processor/evaluation/finetuned_evaluator/model.py b/src/uq_desktop_processor/evaluation/finetuned_evaluator/model.py new file mode 100644 index 0000000..f74e0a7 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/finetuned_evaluator/model.py @@ -0,0 +1,82 @@ +""" +Fine-tuned vision model construction and forward pass utilities for image scoring. +""" + +import logging +from typing import Any, cast + +import torch +import torch.nn as nn + +log = logging.getLogger(__name__) + +try: + import timm +except Exception as import_error: + raise RuntimeError("Install timm: pip install timm") from import_error + + +class ViTMultiHead(nn.Module): + """ + ViT backbone with a multi-output prediction head. + + Example:: + In: ViTMultiHead(...) + Out: initialized instance ready for use + """ + + def __init__(self, model_name: str, num_outputs: int = 6, image_size: int = 224) -> None: + """ + Create model backbone and MLP head for fine-tuned scoring. + + :param model_name: timm model name for the backbone. + :param num_outputs: Number of output targets. + :param image_size: Input image size used by the backbone. + + Example:: + In: ViTMultiHead("vit_base_patch14_dinov2.lvd142m", num_outputs=6, image_size=224) + Out: initialized module ready for forward passes + """ + super().__init__() + log.info("Initializing ViTMultiHead. Backbone: '%s'", model_name) + + self.backbone = timm.create_model( + model_name, pretrained=True, num_classes=0, dynamic_img_size=True, img_size=image_size + ) + backbone_any = cast(Any, self.backbone) + + if hasattr(backbone_any, "num_features"): + feat_dim = int(backbone_any.num_features) + else: + feat_dim = int(backbone_any.embed_dim) + + self.head = nn.Sequential( + nn.LayerNorm(feat_dim * 2), + nn.Linear(feat_dim * 2, 512), + nn.GELU(), + nn.Dropout(0.2), + nn.Linear(512, 256), + nn.GELU(), + nn.Linear(256, num_outputs), + ) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + """ + Run one forward pass. + + :param x: Input batch tensor ``(N, C, H, W)``. + :return: Predicted outputs ``(N, num_outputs)``. + + Example:: + In: model.forward(torch.randn(2, 3, 224, 224)) + Out: tensor with shape (2, num_outputs) + """ + # Combine global CLS token with pooled patch context before the MLP head. + backbone_any = cast(Any, self.backbone) + features = backbone_any.forward_features(x) + cls_token = features[:, 0] + patch_tokens = features[:, 1:] + pooled_patches = torch.mean(patch_tokens, dim=1) + + combined = torch.cat([cls_token, pooled_patches], dim=1) + return self.head(combined) diff --git a/src/uq_desktop_processor/evaluation/finetuned_evaluator/run.py b/src/uq_desktop_processor/evaluation/finetuned_evaluator/run.py new file mode 100644 index 0000000..8000378 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/finetuned_evaluator/run.py @@ -0,0 +1,342 @@ +""" +Runs fine-tuned ViT scoring over a folder of images and aggregates JSON results. +""" + +import logging +from collections.abc import Sequence +from pathlib import Path + +import numpy as np +import torch +from PIL import Image +from tqdm.auto import tqdm + +from uq_desktop_processor.evaluation.evaluation_utils import make_evaluation_result + +from . import defaults +from .utils import ( + _apply_calibration, + _build_transform, + _iter_image_paths, + _load_calibrators, + _load_checkpoint_and_model, +) + +log = logging.getLogger(__name__) + + +def _resolve_paths( + images_dir: str | Path, + model_path: str | Path, + calibrators_dir: str | Path | None, +) -> tuple[Path, Path, Path | None]: + """ + Resolve and validate input paths. + Raises FileNotFoundError or NotADirectoryError if paths are invalid. + + Example:: + In: _resolve_paths(images_dir, model_path, calibrators_dir) + Out: function result returned for provided inputs + """ + images_dir = Path(images_dir) + model_path = Path(model_path) + calibrators_dir_path = Path(calibrators_dir) if calibrators_dir else None + + log.debug( + "Resolving paths: images='%s', model='%s', calibrators='%s'", + images_dir, + model_path, + calibrators_dir_path, + ) + + # Validate images directory + if not images_dir.exists(): + error_message = f"Images directory not found: {images_dir}" + log.error(error_message) + raise FileNotFoundError(error_message) + if not images_dir.is_dir(): + error_message = f"Images path is not a directory: {images_dir}" + log.error(error_message) + raise NotADirectoryError(error_message) + + # Validate model file + if not model_path.exists(): + error_message = f"Model file not found: {model_path}" + log.error(error_message) + raise FileNotFoundError(error_message) + if not model_path.is_file(): + error_message = f"Model path must be a file: {model_path}" + log.error(error_message) + raise IsADirectoryError(error_message) + + # Validate calibrators directory + if calibrators_dir_path is not None: + if not calibrators_dir_path.exists(): + error_message = f"Calibrators directory not found: {calibrators_dir_path}" + log.error(error_message) + raise FileNotFoundError(error_message) + if not calibrators_dir_path.is_dir(): + error_message = f"Calibrators path is not a directory: {calibrators_dir_path}" + log.error(error_message) + raise NotADirectoryError(error_message) + + return images_dir, model_path, calibrators_dir_path + + +def _get_calibrators(calibrators_dir: Path | None, category_order: Sequence[str]) -> dict: + """ + Load per-category calibration metadata if provided; otherwise fall back. + + If ``calibrators_dir`` is None, calibration is effectively OFF. + + Example:: + In: _get_calibrators(calibrators_dir, category_order) + Out: function result returned for provided inputs + """ + if calibrators_dir is None: + log.info("No calibrators directory provided. Calibration is OFF (fallback scaling).") + return {category_name: {"type": "fallback"} for category_name in category_order} + + log.info("Loading calibrators from: %s", calibrators_dir) + calibrators = _load_calibrators(calibrators_dir, category_order) + loaded_calibrator_types = {category_name: spec["type"] for category_name, spec in calibrators.items()} + log.info("Loaded calibrator types: %s", loaded_calibrator_types) + return calibrators + + +def _predict_batch(model: torch.nn.Module, batch_tensors: list[torch.Tensor], device: torch.device) -> np.ndarray: + """ + Run a batch of images through the fine-tuned model and return raw predictions. + + :param model: Fine-tuned model used for inference. + :param batch_tensors: List of transformed image tensors. + :param device: Device used for evaluation. + :return: Numpy array of model outputs with shape (batch_size, num_outputs). + + Example:: + In: _predict_batch(model, batch_tensors, device) + Out: function result returned for provided inputs + """ + if log.isEnabledFor(logging.DEBUG): + log.debug( + "Predicting batch of size %s on device %s", + len(batch_tensors), + device, + ) + + batch_tensor = torch.stack(batch_tensors, dim=0).to(device) + use_mixed_precision = torch.cuda.is_available() + + with torch.amp.autocast("cuda", enabled=use_mixed_precision): + return model(batch_tensor).detach().cpu().numpy().astype(np.float32) + + +def _format_single_result( + image_path: Path, + raw_probs: np.ndarray, + calibrators: dict, + category_order: Sequence[str], +) -> dict: + """ + Format one model output entry into a standardized result dictionary. + + :param image_path: Path to the evaluated image. + :param raw_probs: Raw model output (one vector per image). + :param calibrators: Calibration metadata. + :return: Dictionary formatted for downstream tooling (similar to CLIP pipeline outputs). + + Example:: + In: _format_single_result(image_path, raw_probs, calibrators, category_order) + Out: function result returned for provided inputs + """ + calibrated_probs = _apply_calibration(raw_probs, calibrators, category_order) + + # Overall score = mean of calibrated per-category probabilities + overall_score = float(np.mean([calibrated_probs[cat] for cat in category_order])) + + # CLIP pipeline expects "delta" values, but fine-tuned models do not provide them + category_block = { + category_name: {"probability_pct": float(calibrated_probs[category_name]), "delta": None} + for category_name in category_order + } + + return { + "filename": image_path.name, + "image_path": str(image_path), + "overall_pct": overall_score, + "categories": category_block, + } + + +def _process_batch( + model: torch.nn.Module, + batch_tensors: list[torch.Tensor], + batch_paths: list[Path], + calibrators: dict, + device: torch.device, + category_order: Sequence[str], +) -> list[dict]: + """ + Evaluate one batch and convert its outputs into result dictionaries. + + :param model: Fine-tuned model. + :param batch_tensors: List of tensors in the current batch. + :param batch_paths: Corresponding list of image paths. + :param calibrators: Calibration metadata. + :param device: Torch device. + :return: List of results for each image in the batch. + + Example:: + In: _process_batch(model, batch_tensors, batch_paths, calibrators, device, category_order) + Out: function result returned for provided inputs + """ + raw_output = _predict_batch(model, batch_tensors, device) + results = [] + + for index in range(raw_output.shape[0]): + # Keep path and prediction aligned by shared batch index. + result = _format_single_result(batch_paths[index], raw_output[index], calibrators, category_order) + results.append(result) + + return results + + +def _calculate_final_stats(results_images: list[dict]) -> float | None: + """ + Compute the mean overall score across all evaluated images. + + :param results_images: List of result dictionaries. + :return: Average score or None if no images were processed. + + Example:: + In: _calculate_final_stats(results_images) + Out: function result returned for provided inputs + """ + if not results_images: + return None + + return float(np.mean([res["overall_pct"] for res in results_images])) + + +@torch.no_grad() +def evaluate_images_with_finetuned( + images_dir: str | Path, + model_path: str | Path, + calibrators_dir: str | Path | None = None, + model_name: str = "vit_base_patch14_dinov2.lvd142m", + image_size: int = 224, + batch_size: int = 32, + torch_device: str = "auto", + category_order: Sequence[str] = defaults.DEFAULT_CATEGORY_ORDER, +) -> dict: + """ + Evaluate a set of images using a fine-tuned ViT-like model (loaded from checkpoint). + + This pipeline: + - resolves paths and loads the model + - builds transforms + - optionally loads calibrators + - iterates through images in batches + - computes calibrated probabilities + - formats results into a CLIP-compatible schema + + :return: Structured result dictionary similar to CLIP scoring outputs. + + Example:: + In: evaluate_images_with_finetuned(images_dir, model_path, calibrators_dir, model_name, image_size, batch_size, torch_device, category_order) + Out: function result returned for provided inputs + """ + log.info("Starting fine-tuned model evaluation pipeline.") + + # Resolve filesystem paths + images_dir, model_path, calibrators_dir_path = _resolve_paths( + images_dir=images_dir, + model_path=model_path, + calibrators_dir=calibrators_dir, + ) + + num_outputs = len(category_order) + + # Load model and preprocessing + torch_device_name = (torch_device or "auto").lower().strip() + if torch_device_name not in ("auto", "cpu", "cuda"): + raise ValueError("torch_device must be one of: auto, cpu, cuda") + if torch_device_name == "cuda" and not torch.cuda.is_available(): + raise RuntimeError("CUDA requested but not available in this environment.") + if torch_device_name == "cuda": + device = torch.device("cuda") + elif torch_device_name == "cpu": + device = torch.device("cpu") + else: + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + log.info("Loading model weights from: %s (Model: %s)", model_path, model_name) + log.info("Using device: %s", device) + + model = _load_checkpoint_and_model(model_path, model_name, image_size, device, num_outputs) + transform_function = _build_transform(model_name, image_size) + calibrators = _get_calibrators(calibrators_dir_path, category_order) + + # Gather image paths + image_paths = _iter_image_paths(images_dir) + if not image_paths: + error_message = f"No images found in: {images_dir}" + log.error(error_message) + raise FileNotFoundError(error_message) + + log.info("Found %s images to evaluate.", len(image_paths)) + + results_images: list[dict] = [] + skipped: list[str] = [] + warnings: list[str] = [] + + batch_tensors: list[torch.Tensor] = [] + batch_paths: list[Path] = [] + + iterator = tqdm(image_paths, desc="Scoring images", dynamic_ncols=True) + + # Process images batch-by-batch + for image_path in iterator: + try: + image = Image.open(image_path).convert("RGB") + except Exception as open_error: + warning_message = f"Failed to open image '{image_path.name}': {open_error}" + log.warning(warning_message) + skipped.append(f"{image_path.name}: {open_error}") + continue + + batch_tensors.append(transform_function(image)) + batch_paths.append(image_path) + + # Full batch > process it + if len(batch_tensors) >= batch_size: + batch_results = _process_batch(model, batch_tensors, batch_paths, calibrators, device, category_order) + results_images.extend(batch_results) + batch_tensors, batch_paths = [], [] + + # Process leftovers + if batch_tensors: + batch_results = _process_batch(model, batch_tensors, batch_paths, calibrators, device, category_order) + results_images.extend(batch_results) + + # Compute overall stats + average_overall_score = _calculate_final_stats(results_images) + + log.info( + "Evaluation complete. Average score: %s (Processed: %s, Skipped: %s)", + average_overall_score, + len(results_images), + len(skipped), + ) + + return make_evaluation_result( + model_name=f"{model_name} (fine-tuned)", + order=category_order, + weights=None, + beta_sigmoid=None, + images=results_images, + average_overall_pct=average_overall_score, + warnings=warnings, + errors=None, + skipped_images=skipped, + extra={"calibration": "on" if calibrators_dir_path is not None else "off"}, + ) diff --git a/src/uq_desktop_processor/evaluation/finetuned_evaluator/utils.py b/src/uq_desktop_processor/evaluation/finetuned_evaluator/utils.py new file mode 100644 index 0000000..16c0496 --- /dev/null +++ b/src/uq_desktop_processor/evaluation/finetuned_evaluator/utils.py @@ -0,0 +1,356 @@ +""" +Loads checkpoints, image transforms, and calibration for fine-tuned evaluation. +""" + +import json +import logging +import math +from collections.abc import Callable, Sequence +from pathlib import Path +from typing import Any, cast + +import joblib +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F + +from .model import ViTMultiHead + +log = logging.getLogger(__name__) + +try: + import timm + from timm.data import resolve_data_config + from timm.data.transforms_factory import create_transform +except Exception as import_error: + # Provide a clear installation message if timm is missing + raise RuntimeError("Install timm: pip install timm") from import_error + + +def _build_transform(model_name: str, image_size: int) -> Callable[[Any], torch.Tensor]: + """ + Build the preprocessing transform used for the fine-tuned model. + + Uses TIMM utilities to resolve the correct mean/std and transform pipeline + based on the model's pretrained configuration. + + :param model_name: Name of the backbone model. + :param image_size: Input image size expected by the model. + :return: A torchvision-compatible transform function. + + Example:: + In: _build_transform(model_name, image_size) + Out: function result returned for provided inputs + """ + log.debug("Building transform for model '%s' (size: %s)", model_name, image_size) + pretrained_config = timm.get_pretrained_cfg(model_name) + pretrained_cfg_dict: dict[str, Any] = pretrained_config.to_dict() if pretrained_config is not None else {} + base_config = resolve_data_config(pretrained_cfg=pretrained_cfg_dict) + + transform = create_transform( + input_size=(3, image_size, image_size), + is_training=False, + mean=base_config.get("mean"), + std=base_config.get("std"), + ) + return transform + + +def _load_checkpoint_and_model( + checkpoint_path: Path, + model_name: str, + image_size: int, + device: torch.device, + num_outputs: int, +) -> nn.Module: + """ + Load a fine-tuned ViTMultiHead model and restore weights from checkpoint. + + :param checkpoint_path: Path to a .pt checkpoint containing the saved state_dict. + :param model_name: Name of the TIMM backbone. + :param image_size: Input resolution. + :param device: Torch device for model instantiation. + :return: Loaded and ready-to-evaluate model instance. + + Example:: + In: _load_checkpoint_and_model(checkpoint_path, model_name, image_size, device, num_outputs) + Out: function result returned for provided inputs + """ + log.debug("Loading checkpoint from: %s", checkpoint_path) + + try: + checkpoint = torch.load(checkpoint_path, map_location=device) + except Exception as error: + log.error("Failed to load checkpoint file: %s", error) + raise + + # Create the classifier head with the correct shape + model = ViTMultiHead(model_name, num_outputs=num_outputs, image_size=image_size).to(device) + + def _resize_backbone_pos_embed_if_needed( + state_dict_in: dict[str, Any], model_in: nn.Module + ) -> dict[str, Any]: + """ + Resize checkpoint positional embeddings to the current model's image size if needed. + + This function handles the spatial interpolation of ViT positional embeddings + when the inference resolution differs from the training resolution. + + :param state_dict_in: The source state dictionary from the loaded checkpoint. + :param model_in: The target model instance to match the shapes against. + :return: A state dictionary with adjusted (resized) positional embeddings. + + Example:: + In: _resize_backbone_pos_embed_if_needed(state_dict_in, model_in) + Out: function result returned for provided inputs + """ + pos_key = "backbone.pos_embed" + + # Check if the positional embedding key exists in both the checkpoint and the model + if pos_key not in state_dict_in: + return state_dict_in + + model_state = model_in.state_dict() + if pos_key not in model_state: + return state_dict_in + + checkpoint_pos_embed = state_dict_in[pos_key] + target_pos_embed = model_state[pos_key] + + # Ensure we are dealing with tensors + if not isinstance(checkpoint_pos_embed, torch.Tensor) or not isinstance(target_pos_embed, torch.Tensor): + return state_dict_in + + # If shapes already match, no interpolation is required + if checkpoint_pos_embed.shape == target_pos_embed.shape: + return state_dict_in + + # Validate dimensions before proceeding + if checkpoint_pos_embed.ndim != 3 or target_pos_embed.ndim != 3: + log.warning("Unexpected pos_embed shape. Falling back to model defaults for pos_embed.") + state_dict_copy = dict(state_dict_in) + state_dict_copy.pop(pos_key, None) + return state_dict_copy + + checkpoint_tokens = checkpoint_pos_embed.shape[1] + target_tokens = target_pos_embed.shape[1] + embed_dim = checkpoint_pos_embed.shape[2] + + # Check if the embedding vector size (last dimension) matches + if embed_dim != target_pos_embed.shape[2]: + log.warning("pos_embed embedding dim mismatch. Falling back to model defaults.") + state_dict_copy = dict(state_dict_in) + state_dict_copy.pop(pos_key, None) + return state_dict_copy + + # Determine the number of special tokens (e.g., [CLS]) to separate them from grid tokens + backbone_any = cast(Any, model_in.backbone) + num_prefix_tokens = int(getattr(backbone_any, "num_prefix_tokens", 1)) + + source_grid_tokens = checkpoint_tokens - num_prefix_tokens + target_grid_tokens = target_tokens - num_prefix_tokens + source_size = int(math.sqrt(source_grid_tokens)) + target_size = int(math.sqrt(target_grid_tokens)) + + # Ensure the spatial tokens form a perfect square + if ( + source_size * source_size != source_grid_tokens + or target_size * target_size != target_grid_tokens + or source_grid_tokens <= 0 + or target_grid_tokens <= 0 + ): + log.warning("Cannot infer square token grid. Falling back to model defaults.") + state_dict_copy = dict(state_dict_in) + state_dict_copy.pop(pos_key, None) + return state_dict_copy + + # Separate prefix tokens from patch tokens + cls_tokens = checkpoint_pos_embed[:, :num_prefix_tokens, :] + patch_tokens = checkpoint_pos_embed[:, num_prefix_tokens:, :] + + # Reshape patch tokens to a spatial grid for bicubic interpolation + patch_tokens = patch_tokens.reshape(1, source_size, source_size, embed_dim).permute(0, 3, 1, 2) + patch_tokens = F.interpolate(patch_tokens, size=(target_size, target_size), mode="bicubic", align_corners=False) + + # Flatten back to the sequence format + patch_tokens = patch_tokens.permute(0, 2, 3, 1).reshape(1, target_size * target_size, embed_dim) + + # Combine prefix tokens with the newly resized patch tokens + resized_pos_embed = torch.cat([cls_tokens, patch_tokens], dim=1).to(dtype=target_pos_embed.dtype) + + state_dict_copy = dict(state_dict_in) + state_dict_copy[pos_key] = resized_pos_embed + + log.info( + "Resized checkpoint pos_embed from %s to %s to match GUI image size.", + tuple(checkpoint_pos_embed.shape), + tuple(target_pos_embed.shape), + ) + return state_dict_copy + + # Load weights and configure for inference + try: + if isinstance(checkpoint, dict) and "model" in checkpoint: + state_dict = checkpoint["model"] + log.info("Detected dictionary checkpoint format (key 'model' found).") + else: + state_dict = checkpoint + log.info("Detected direct state_dict checkpoint format.") + + typed_state_dict = cast(dict[str, Any], state_dict) + adjusted_state_dict = _resize_backbone_pos_embed_if_needed(typed_state_dict, model) + missing_keys, unexpected_keys = model.load_state_dict(adjusted_state_dict, strict=False) + + filtered_missing_keys = [key for key in missing_keys if key != "backbone.pos_embed"] + if filtered_missing_keys or unexpected_keys: + log.warning( + "Checkpoint loaded with missing/unexpected keys. missing=%s unexpected=%s", + filtered_missing_keys, + unexpected_keys, + ) + + except Exception as error: + log.error("Error loading state_dict: %s", error) + raise + + model.eval() + torch.set_grad_enabled(False) + + log.info("Model loaded and ready for inference.") + return model + + +def _load_calibrators(calibrators_dir: Path, category_order: Sequence[str]) -> dict[str, dict[str, Any]]: + """ + Load isotonic calibrators and their metadata from the specified directory. + + This function attempts to load specific joblib models for each category + based on the mapping found in 'calibrators_meta.json'. + + :param calibrators_dir: Path to the directory containing .joblib files and metadata. + :param category_order: Sequence of category names expected by the model. + :return: A dictionary mapping each category to its calibrator model or a fallback. + + Example:: + In: _load_calibrators(calibrators_dir, category_order) + Out: function result returned for provided inputs + """ + meta_path = calibrators_dir / "calibrators_meta.json" + meta: dict[str, dict] = {} + + # Attempt to load metadata that maps categories to specific files + if meta_path.exists(): + try: + with open(meta_path, encoding="utf-8") as meta_file: + meta = json.load(meta_file) + except Exception as error: + log.warning("Failed to load calibration metadata: %s", error) + + calibrators: dict[str, dict[str, Any]] = {} + + for category_name in category_order: + entry = meta.get(category_name) + + # Retrieve filename from metadata or construct a default based on the category name + file_name_any = entry.get("file") if entry else None + file_name = ( + str(file_name_any) + if isinstance(file_name_any, str) and file_name_any.strip() + else f'calibrator_{category_name.replace(" ", "_")}.joblib' + ) + calibrator_path = calibrators_dir / file_name + + if calibrator_path.exists(): + try: + # Load the isotonic regression model using joblib + calibrators[category_name] = { + "type": "isotonic", + "model": cast(Any, joblib.load(calibrator_path)), + } + log.debug("Loaded isotonic calibrator for %s", category_name) + continue + except Exception as error: + log.warning("Could not load calibrator file %s: %s", file_name, error) + + # Set fallback if the file is missing or corrupted + calibrators[category_name] = {"type": "fallback"} + + return calibrators + + +def _apply_calibration( + raw_score_vector: np.ndarray, + calibrators: dict[str, dict[str, Any]], + category_order: Sequence[str], +) -> dict[str, float]: + """ + Apply category-specific calibration to raw model outputs. + + Supported calibration types: + • pchip – monotonic cubic Hermite spline + • isotonic – isotonic regression model + • minmax – simple linear normalization + • fallback – heuristic scaling + + :param raw_score_vector: Raw predictions for all categories (vector of length 6). + :param calibrators: Per-category calibrator configuration. + :return: Mapping category → calibrated probability in [0, 100]. + + Example:: + In: _apply_calibration(raw_score_vector, calibrators, category_order) + Out: function result returned for provided inputs + """ + calibrated_probabilities: dict[str, float] = {} + + for index, category_name in enumerate(category_order): + calibrator_spec = calibrators.get(category_name, {"type": "fallback"}) + raw_value = float(raw_score_vector[index]) + + # PCHIP interpolation + if calibrator_spec.get("type") == "pchip" and "model" in calibrator_spec: + pchip_model = calibrator_spec["model"] + calibrated_value = float(pchip_model(raw_value)) + calibrated_probabilities[category_name] = float(np.clip(calibrated_value, 0.0, 100.0)) + + # Isotonic regression + elif calibrator_spec.get("type") == "isotonic" and "model" in calibrator_spec: + calibrated_probabilities[category_name] = float(calibrator_spec["model"].predict([raw_value])[0]) + + # Min–max normalization + elif calibrator_spec.get("type") == "minmax": + lower_bound = float(calibrator_spec["x_lo"]) + upper_bound = float(calibrator_spec["x_hi"]) + + if upper_bound <= lower_bound: + # Invalid calibrator — fall back to neutral midpoint + calibrated_probabilities[category_name] = 50.0 + else: + normalized_value = (raw_value - lower_bound) / (upper_bound - lower_bound) + calibrated_probabilities[category_name] = float(np.clip(100.0 * normalized_value, 0.0, 100.0)) + + # Fallback heuristic: crude linear scaling + else: + calibrated_probabilities[category_name] = float(np.clip(50.0 + 25.0 * raw_value, 0.0, 100.0)) + + return calibrated_probabilities + + +def _iter_image_paths(images_dir: Path) -> list[Path]: + """ + Gather all valid image paths from a directory. + + Recognizes .jpg, .jpeg, .png in any capitalization. + + :param images_dir: Directory containing images. + :return: Sorted list of path objects. + + Example:: + In: _iter_image_paths(images_dir) + Out: function result returned for provided inputs + """ + valid_extensions = (".jpg", ".jpeg", ".png", ".JPG", ".JPEG", ".PNG") + + log.debug("Scanning for images in: %s", images_dir) + + return sorted([image_path for image_path in Path(images_dir).glob("*") if image_path.suffix in valid_extensions]) From fb164b2c64090bd1e2013fd68dbb37a2ee614258 Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 11:13:50 +0200 Subject: [PATCH 07/12] feat(export): add GIS point layer export (#7) --- .../layer_creation/vector_layers/__init__.py | 7 + .../vector_layers/point_layer/__init__.py | 7 + .../vector_layers/point_layer/converters.py | 195 ++++++++++++++++++ .../vector_layers/point_layer/defaults.py | 6 + .../vector_layers/point_layer/exporter.py | 71 +++++++ .../vector_layers/point_layer/utils.py | 129 ++++++++++++ .../vector_layers/point_layer/writers.py | 94 +++++++++ 7 files changed, 509 insertions(+) create mode 100644 src/uq_desktop_processor/layer_creation/vector_layers/__init__.py create mode 100644 src/uq_desktop_processor/layer_creation/vector_layers/point_layer/__init__.py create mode 100644 src/uq_desktop_processor/layer_creation/vector_layers/point_layer/converters.py create mode 100644 src/uq_desktop_processor/layer_creation/vector_layers/point_layer/defaults.py create mode 100644 src/uq_desktop_processor/layer_creation/vector_layers/point_layer/exporter.py create mode 100644 src/uq_desktop_processor/layer_creation/vector_layers/point_layer/utils.py create mode 100644 src/uq_desktop_processor/layer_creation/vector_layers/point_layer/writers.py diff --git a/src/uq_desktop_processor/layer_creation/vector_layers/__init__.py b/src/uq_desktop_processor/layer_creation/vector_layers/__init__.py new file mode 100644 index 0000000..a78ec13 --- /dev/null +++ b/src/uq_desktop_processor/layer_creation/vector_layers/__init__.py @@ -0,0 +1,7 @@ +""" +Vector-layer export API. +""" + +from .point_layer import export_point_layer + +__all__ = ["export_point_layer"] diff --git a/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/__init__.py b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/__init__.py new file mode 100644 index 0000000..fa3b3c7 --- /dev/null +++ b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/__init__.py @@ -0,0 +1,7 @@ +""" +Point-layer exporter entrypoint. +""" + +from .exporter import export_point_layer + +__all__ = ["export_point_layer"] diff --git a/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/converters.py b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/converters.py new file mode 100644 index 0000000..b00ba48 --- /dev/null +++ b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/converters.py @@ -0,0 +1,195 @@ +""" +Converts evaluation result dicts into GeoJSON-like feature collections for export. +""" + +import logging +from typing import Any + +from . import defaults +from .utils import parse_lat_lon + +log = logging.getLogger(__name__) + +DEFAULT_CATEGORIES = defaults.DEFAULT_CATEGORIES + + +def _get_value_from_categories(categories_data: dict[str, Any], key: str) -> dict[str, Any]: + """ + Safely retrieve a category sub-dictionary from the categories mapping. + + :param categories_data: Mapping of model category keys to dictionaries. + :param key: Key to retrieve from the mapping. + :return: The corresponding dict if present and of correct type, otherwise {}. + + Example:: + In: _get_value_from_categories({"wealthier": {"delta": 0.3}}, "wealthier") + Out: {"delta": 0.3} + """ + value = categories_data.get(key) + if isinstance(value, dict): + return value + return {} + + +def _resolve_weight(global_weights: dict[str, Any], key: str, alias: str) -> float | None: + """ + Resolve a category weight using either the canonical category name or its alias. + + :param global_weights: Mapping of category names or aliases to weight values. + :param key: Canonical category name (e.g. "greenery"). + :param alias: Alternate key used in the model output, if different. + :return: The resolved weight, or None if no matching key was found. + + Example:: + In: _resolve_weight({"wealthier": 0.4}, "wealthier", "wealth") + Out: 0.4 + """ + if not global_weights: + return None + canonical_weight = global_weights.get(key) + if canonical_weight is not None: + return canonical_weight + return global_weights.get(alias) + + +def _build_feature( + image_data: dict[str, Any], + global_metadata: dict[str, Any], + categories: list[str], + aliases: dict[str, str], +) -> dict[str, Any]: + """ + Convert a single scoring result into a GeoJSON Feature. + + This function: + - extracts lat/lon coordinates from the filename, + - merges global metadata (model name, beta, weights), + - attaches per-category probability and delta values, + - builds a valid GeoJSON Point feature. + + :param image_data: Single entry from results["images"] with per-image metrics. + :param global_metadata: Metadata shared across all images + (model_name, beta_sigmoid, weights, etc.). + :param categories: List of logical category names to export. + :param aliases: Mapping from logical category names to model keys. + :return: A GeoJSON Feature dictionary. + + Example:: + In: _build_feature(image_data, global_metadata, ["wealthier"], {"wealthier": "wealthier"}) + Out: {"type": "Feature", "geometry": {"type": "Point", ...}, "properties": {...}} + """ + # Location comes strictly from image metadata (EXIF GPS). + filename = image_data.get("filename", "") + image_path = image_data.get("image_path") + if not image_path: + raise ValueError("Missing image_path; cannot read EXIF GPS metadata.") + lat, lon = parse_lat_lon(image_path) + + # Per-category data provided by the scoring pipeline + categories_data = image_data.get("categories", {}) or {} + + # Base properties (apply to the entire image/result) + properties = { + "filename": filename, + "image_path": image_path, + "overall_pct": image_data.get("overall_pct"), + "model_name": global_metadata.get("model_name"), + "beta_sigmoid": global_metadata.get("beta_sigmoid"), + } + + global_weights = global_metadata.get("weights") or {} + + # Add per-category values. + for category_key in categories: + category_values = _get_value_from_categories(categories_data, category_key) + + # Property names should not contain spaces + clean_key = category_key.replace(" ", "_") + + # Probability and delta per category + properties[f"{clean_key}_prob_pct"] = category_values.get("probability_pct") + properties[f"{clean_key}_delta"] = category_values.get("delta") + + # Optional weight information for this category. + category_alias = aliases.get(category_key, category_key) + weight = _resolve_weight(global_weights, category_key, category_alias) + if weight is not None: + properties[f"weights_{clean_key}"] = weight + + feature = { + "type": "Feature", + "geometry": {"type": "Point", "coordinates": [lon, lat]}, + "properties": properties, + } + return feature + + +def _results_to_feature_collection( + results: dict[str, Any], + categories: list[str] | None = None, + aliases: dict[str, str] | None = None, +) -> dict[str, Any]: + """ + Convert the full evaluation output into a GeoJSON FeatureCollection. + + :param results: Dictionary returned by the scoring pipeline. + :param categories: Optional list of categories to export. If None, uses + defaults.DEFAULT_CATEGORIES. + :param aliases: Optional mapping from category names to model keys. + If None, uses defaults.DEFAULT_ALIASES. + :return: A GeoJSON FeatureCollection dictionary including extra metadata + under the "x_meta" key. + + Example:: + In: _results_to_feature_collection({"images": [], "model_name": "clip"}) + Out: {"type": "FeatureCollection", "features": [], "x_meta": {...}} + """ + target_categories = categories if categories is not None else DEFAULT_CATEGORIES + target_aliases = aliases if aliases is not None else getattr(defaults, "DEFAULT_ALIASES", {}) + + images_list = results.get("images", []) or [] + + log.debug("Converting %s results to GeoJSON features.", len(images_list)) + + # Data shared between all features; also emitted in x_meta. + global_metadata = { + "model_name": results.get("model_name"), + "beta_sigmoid": results.get("beta_sigmoid"), + "weights": results.get("weights"), + "order": results.get("order"), + "average_overall_pct": results.get("average_overall_pct"), + } + + features_list: list[dict[str, Any]] = [] + + for image_entry in images_list: + try: + feature = _build_feature( + image_entry, + global_metadata, + target_categories, + target_aliases, + ) + features_list.append(feature) + except Exception as exception: + # Do not fail the entire export on a single bad filename or record. + filename = image_entry.get("filename", "unknown") + log.warning("Skipping '%s': %s", filename, exception) + + if not features_list: + log.warning("No features were generated during conversion (all input images failed or list was empty).") + + feature_collection = { + "type": "FeatureCollection", + "name": results.get("model_name") or "model_points", + "crs": {"type": "name", "properties": {"name": "EPSG:4326"}}, + "features": features_list, + "x_meta": { + **global_metadata, + "exported_categories": target_categories, + "skipped_images": results.get("skipped_images", []), + "warnings": results.get("warnings", []), + "errors": results.get("errors"), + }, + } + return feature_collection diff --git a/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/defaults.py b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/defaults.py new file mode 100644 index 0000000..ca7e5a1 --- /dev/null +++ b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/defaults.py @@ -0,0 +1,6 @@ +""" +Default filenames and options for point-layer GeoJSON/GPKG export. +""" + +# Display order used when writing per-category attributes. +DEFAULT_CATEGORIES = ["wealthier", "safer", "more beautiful", "livelier", "less depressing", "less boring"] diff --git a/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/exporter.py b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/exporter.py new file mode 100644 index 0000000..68bd6d0 --- /dev/null +++ b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/exporter.py @@ -0,0 +1,71 @@ +""" +Exports scoring results to GeoJSON or GeoPandas-backed spatial files. +""" + +import logging +import os +from typing import Any + +from .converters import _results_to_feature_collection +from .utils import _is_geopandas_available +from .writers import _write_geojson, _write_with_geopandas + +log = logging.getLogger(__name__) + + +def export_point_layer( + results: dict[str, Any], output_path: str, layer: str | None = None, categories: list[str] | None = None +) -> str: + """ + Export scoring results to a geospatial file. + + The output format is inferred from the file extension: + + - .geojson / .json -> plain GeoJSON, written with the standard json module + - .gpkg / .shp / .parquet / others supported by GeoPandas -> written using GeoPandas + + :param results: Dictionary returned by the evaluation pipeline. + :param output_path: Destination file path (extension determines format). + :param layer: Optional layer name (for formats that support multiple layers). + :param categories: Optional subset of categories to include (default uses + defaults.DEFAULT_CATEGORIES). + :return: Absolute path to the saved file. + + Example:: + In: export_point_layer(results, "data/results/urban_quality_ai_output.geojson") + Out: "C:/.../data/results/urban_quality_ai_output.geojson" + """ + log.info("Preparing to export data to: %s", output_path) + + try: + # Convert raw results into a structured FeatureCollection. + feature_collection = _results_to_feature_collection(results, categories=categories) + + feature_count = len(feature_collection.get("features", [])) + log.debug("Converted results to FeatureCollection with %s features.", feature_count) + + absolute_output_path = os.path.abspath(output_path) + file_extension = os.path.splitext(output_path.lower())[1] + + # JSON-based formats do not require GeoPandas. + if file_extension in (".geojson", ".json"): + _write_geojson(feature_collection, absolute_output_path) + else: + # Other formats require GeoPandas. + if not _is_geopandas_available(): + msg = ( + "GeoPandas is required to save to binary formats (GPKG, SHP, Parquet).\n" + "Install: pip install geopandas pyproj fiona shapely\n" + "Or use the .geojson extension." + ) + log.error(msg) + raise RuntimeError(msg) + + _write_with_geopandas(feature_collection, absolute_output_path, layer=layer) + + log.info("Export successful. File saved at: %s", absolute_output_path) + return absolute_output_path + + except Exception as error: + log.error("Failed to export layer to '%s': %s", output_path, error) + raise diff --git a/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/utils.py b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/utils.py new file mode 100644 index 0000000..46a952c --- /dev/null +++ b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/utils.py @@ -0,0 +1,129 @@ +""" +Parses lat/lon from image metadata and misc helpers for point layer creation. +""" + +import logging +from pathlib import Path +from typing import Any + +log = logging.getLogger(__name__) + + +def _exif_gps_to_decimal(exif_gps: dict[int, Any]) -> tuple[float, float] | None: + """ + Convert EXIF GPSInfo dict to (lat, lon) in decimal degrees. + + Works with EXIF dicts returned by PIL.Image.getexif() where GPSInfo is a mapping + of numeric keys to values (rationals, tuples). + + :param exif_gps: GPSInfo mapping from EXIF. + :return: ``(lat, lon)`` if GPS fields are complete and valid, otherwise None. + + Example:: + In: _exif_gps_to_decimal({1: "N", 2: ((50,1),(3,1),(0,1)), 3: "E", 4: ((19,1),(56,1),(0,1))}) + Out: (50.05, 19.933333333333334) + """ + + def _ratio_to_float(ratio_value: Any) -> float: + # PIL can return IFDRational or tuple(num, den) + try: + return float(ratio_value) + except (TypeError, ValueError): + pass + if isinstance(ratio_value, tuple | list) and len(ratio_value) == 2: + numerator, denominator = ratio_value + return float(numerator) / float(denominator) + raise ValueError(f"Unsupported rational type: {type(ratio_value)}") + + def _dms_to_deg(dms_value: Any, reference: str) -> float: + if not isinstance(dms_value, tuple | list) or len(dms_value) != 3: + raise ValueError("GPS DMS must be a 3-tuple") + degrees = _ratio_to_float(dms_value[0]) + minutes = _ratio_to_float(dms_value[1]) + seconds = _ratio_to_float(dms_value[2]) + decimal_degrees = degrees + minutes / 60.0 + seconds / 3600.0 + normalized_reference = (reference or "").upper() + if normalized_reference in ("S", "W"): + decimal_degrees = -decimal_degrees + return float(decimal_degrees) + + try: + # EXIF GPS tag ids: 1/2 latitude ref+value, 3/4 longitude ref+value. + lat_ref = exif_gps.get(1) # GPSLatitudeRef + lat_dms = exif_gps.get(2) # GPSLatitude + lon_ref = exif_gps.get(3) # GPSLongitudeRef + lon_dms = exif_gps.get(4) # GPSLongitude + if not lat_ref or not lon_ref or not lat_dms or not lon_dms: + return None + lat = _dms_to_deg(lat_dms, str(lat_ref)) + lon = _dms_to_deg(lon_dms, str(lon_ref)) + return lat, lon + except (ValueError, TypeError, ZeroDivisionError): + return None + + +def parse_lat_lon_from_image_metadata(image_path: str | Path) -> tuple[float, float]: + """ + Extract (lat, lon) from image EXIF GPS metadata. + + :param image_path: Path to an image file. + :return: ``(latitude, longitude)`` from EXIF GPS tags. + :raises ValueError: if GPS metadata is missing or invalid. + + Example:: + In: parse_lat_lon_from_image_metadata("data/images/raw/123.jpg") + Out: (50.0612, 19.9377) + """ + from PIL import Image + + image_path_obj = Path(image_path) + try: + with Image.open(image_path_obj) as im: + exif = im.getexif() + if not exif: + raise ValueError("missing EXIF") + gps_info = exif.get_ifd(0x8825) # GPSInfo IFD + if not isinstance(gps_info, dict): + raise ValueError("missing GPSInfo") + latlon_coordinates = _exif_gps_to_decimal(gps_info) + if latlon_coordinates is None: + raise ValueError("missing GPS lat/lon") + return latlon_coordinates + except ValueError: + raise + except Exception as error: + raise ValueError(f"cannot read EXIF GPS from image: {image_path_obj}") from error + + +def parse_lat_lon(image_path: str | Path) -> tuple[float, float]: + """ + Parse coordinates strictly from EXIF GPS metadata. + + :param image_path: Path to an image file. + :return: ``(latitude, longitude)``. + + Example:: + In: parse_lat_lon("data/images/raw/img_0001.jpg") + Out: (50.0612, 19.9377) + """ + return parse_lat_lon_from_image_metadata(image_path) + + +def _is_geopandas_available() -> bool: + """ + Check whether GeoPandas and Shapely are available in the environment. + + :return: True if both packages can be imported, False otherwise. + + Example:: + In: _is_geopandas_available() + Out: True + """ + try: + import geopandas # noqa: F401 + import shapely # noqa: F401 + + return True + except ImportError as error: + log.debug("GeoPandas availability check failed: %s", error) + return False diff --git a/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/writers.py b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/writers.py new file mode 100644 index 0000000..9360502 --- /dev/null +++ b/src/uq_desktop_processor/layer_creation/vector_layers/point_layer/writers.py @@ -0,0 +1,94 @@ +""" +Low-level writers for GeoJSON and GeoPandas outputs used by the exporter. +""" + +import json +import logging +import os +from typing import Any + +log = logging.getLogger(__name__) + + +def _write_geojson(feature_collection: dict[str, Any], output_path: str) -> None: + """ + Save a GeoJSON FeatureCollection to a .geojson or .json file. + + :param feature_collection: GeoJSON FeatureCollection dictionary. + :param output_path: Destination path for the JSON/GeoJSON file. + + Example:: + In: _write_geojson(feature_collection, "out.geojson") + Out: "out.geojson" created on disk + """ + with open(output_path, "w", encoding="utf-8") as file_handle: + json.dump(feature_collection, file_handle, ensure_ascii=False, indent=2) + + feature_count = len(feature_collection.get("features", [])) + log.info("Saved GeoJSON: %s (object count: %s)", output_path, feature_count) + + +def _write_with_geopandas(feature_collection: dict[str, Any], output_path: str, layer: str | None = None) -> None: + """ + Save a FeatureCollection to a binary geospatial format using GeoPandas. + + Supported formats (inferred from file extension): + - .gpkg (GeoPackage) + - .shp (ESRI Shapefile) + - .parquet + - other formats supported by GeoPandas drivers + + :param feature_collection: GeoJSON-like structure to be converted. + :param output_path: Output file path. + :param layer: Optional layer name for multi-layer formats (e.g. GeoPackage). + + Example:: + In: _write_with_geopandas(feature_collection, "out.gpkg", layer="scores") + Out: "out.gpkg" created on disk with layer "scores" + """ + import geopandas as gpd + from shapely.geometry import Point + + if not feature_collection["features"]: + log.warning("No objects to save; feature collection is empty.") + return + + rows: list[dict[str, Any]] = [] + + # Convert each GeoJSON feature into a GeoPandas row. + for feature_item in feature_collection["features"]: + lon, lat = feature_item["geometry"]["coordinates"] + properties = feature_item["properties"].copy() + rows.append({**properties, "geometry": Point(lon, lat)}) + + log.debug("Converted %s features to GeoDataFrame rows.", len(rows)) + + geo_data_frame = gpd.GeoDataFrame(rows, geometry="geometry", crs="EPSG:4326") + + file_extension = os.path.splitext(output_path.lower())[1] + + try: + if file_extension == ".gpkg": + # Use provided layer name or fall back to collection name. + layer_name = layer or (feature_collection.get("name") or "data").replace("/", "_") + geo_data_frame.to_file(output_path, layer=layer_name, driver="GPKG") # type: ignore[assignment] + + elif file_extension == ".shp": + geo_data_frame.to_file(output_path, driver="ESRI Shapefile") # type: ignore[assignment] + + elif file_extension == ".parquet": + geo_data_frame.to_parquet(output_path, index=False) # type: ignore[assignment] + + else: + # Default driver chosen by GeoPandas based on extension. + geo_data_frame.to_file(output_path) # type: ignore[assignment] + + log.info( + "Saved %s: %s (object count: %s)", + file_extension.upper(), + output_path, + len(geo_data_frame), + ) + + except Exception as error: + log.error("GeoPandas save error: %s", error) From 77e466aef9dc9f8e3c3e75db2cdc99fd8dbe96b7 Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 11:14:43 +0200 Subject: [PATCH 08/12] feat(pipeline): add end-to-end processing orchestration and CLI runner (#8) --- src/uq_desktop_processor/pipeline/cli.py | 39 ++ src/uq_desktop_processor/pipeline/defaults.py | 44 +++ src/uq_desktop_processor/pipeline/pipeline.py | 368 ++++++++++++++++++ .../pipeline/points_io.py | 45 +++ .../pipeline/prefilter_config.py | 36 ++ 5 files changed, 532 insertions(+) create mode 100644 src/uq_desktop_processor/pipeline/cli.py create mode 100644 src/uq_desktop_processor/pipeline/defaults.py create mode 100644 src/uq_desktop_processor/pipeline/pipeline.py create mode 100644 src/uq_desktop_processor/pipeline/points_io.py create mode 100644 src/uq_desktop_processor/pipeline/prefilter_config.py diff --git a/src/uq_desktop_processor/pipeline/cli.py b/src/uq_desktop_processor/pipeline/cli.py new file mode 100644 index 0000000..7e34a51 --- /dev/null +++ b/src/uq_desktop_processor/pipeline/cli.py @@ -0,0 +1,39 @@ +""" +CLI entry: runs the full UrbanQuality-AI pipeline (points, download, prefilter, evaluate, export). +""" + +import logging + +from uq_desktop_processor.pipeline.pipeline import UrbanQualityAIPipeline + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + + +def run_pipeline() -> int: + """ + Run the default end-to-end pipeline from the command line. + + :return: Process-like exit code (0 success, 1 operational error, 130 interrupted). + + Example:: + In: run_pipeline() + Out: 0 + """ + pipeline = UrbanQualityAIPipeline() + try: + pipeline.step_1_generate_points() + pipeline.step_2_download_images() + + prefilter_stats = pipeline.step_3_prefilter() + + # Skip scoring/export when prefilter removed all images. + if prefilter_stats.get("summary", {}).get("kept", 0) > 0: + pipeline.step_4_evaluate() + pipeline.step_5_export() + return 0 + except KeyboardInterrupt: + return 130 + except (RuntimeError, OSError, ValueError) as error: + logger.error("Pipeline failed due to operational error: %s", error) + return 1 diff --git a/src/uq_desktop_processor/pipeline/defaults.py b/src/uq_desktop_processor/pipeline/defaults.py new file mode 100644 index 0000000..29a9f00 --- /dev/null +++ b/src/uq_desktop_processor/pipeline/defaults.py @@ -0,0 +1,44 @@ +""" +Default directories and parameters for each pipeline step. +""" + +import os +from pathlib import Path +from typing import Any + +DEFAULT_CONFIG: dict[str, Any] = { + "place_name": "Katowice, Poland", + # Source for sampling-point planning: "place" | "region" | "roads". + "planner_source": "place", + "region_geojson_path": "", + "road_geojson_path": "", + # Distances are interpreted in meters. + "spacing": 100, + "min_distance": 50, + "search_radius": 100, + "mapillary_max_workers": 20, + "mapillary_fov_deg": 90, + "mapillary_points_path": "", + "mapillary_images_output_dir": "", + "base_dir": "data", + "points_layer_path": str(Path("data") / "results" / "sampling_points.geojson"), + "mapillary_token": os.environ.get("MAPILLARY_ACCESS_TOKEN", ""), + "clip_model_names": ("ViT-L/14@336px",), + "prefilter_image_folder": "", + "prefilter_rejected_folder": "", + "prefilter_pos_prompts": "", + "prefilter_neg_prompts": "", + "filter_threshold": 40.0, + "beta_sigmoid": 30.0, + "export_path": "", + "torch_device": "auto", + "vit_images_dir": "", + "vit_model_path": "", + "vit_calibrators_dir": "", + "vit_model_name": "vit_base_patch14_dinov2.lvd142m", + "vit_image_size": 224, + "vit_batch_size": 32, + "vit_torch_device": "auto", + "vit_output_layer_path": "", + "vit_output_layer_name": "vit_finetuned_scores", +} diff --git a/src/uq_desktop_processor/pipeline/pipeline.py b/src/uq_desktop_processor/pipeline/pipeline.py new file mode 100644 index 0000000..632fb64 --- /dev/null +++ b/src/uq_desktop_processor/pipeline/pipeline.py @@ -0,0 +1,368 @@ +""" +Orchestrates end-to-end processing: points, images, prefilter, CLIP eval, vector export. +""" + +import logging +import os +from pathlib import Path +from typing import Any + +from uq_desktop_processor.evaluation import ( + evaluate_images_with_clip, + prefilter_folder, +) +from uq_desktop_processor.evaluation.finetuned_evaluator.run import evaluate_images_with_finetuned +from uq_desktop_processor.layer_creation import export_point_layer +from uq_desktop_processor.pipeline.defaults import DEFAULT_CONFIG +from uq_desktop_processor.pipeline.points_io import load_sampling_points_latlon +from uq_desktop_processor.pipeline.prefilter_config import prefilter_prompts_from_config +from uq_desktop_processor.street_view_analysis import build_points_pipeline, download_mapillary_images + + +class UrbanQualityAIPipeline: + """ + Application pipeline controller. + + Holds in-memory state (roads, points, evaluation) and exposes steps to run sequentially. + """ + + def __init__(self, config: dict[str, Any] | None = None): + """ + Initialize pipeline state and merge runtime overrides with defaults. + + :param config: Optional dictionary with config overrides. + + Example:: + In: UrbanQualityAIPipeline({"base_dir": "data_dev"}) + Out: pipeline object with directories initialized under "data_dev" + """ + self.log = logging.getLogger("UrbanQualityAI") + self.log.setLevel(logging.DEBUG) + + self.config = {**DEFAULT_CONFIG, **(config or {})} + + self.base_dir = Path(self.config["base_dir"]) + self.raw_dir = self.base_dir / "images" / "raw" + self.rejected_dir = self.base_dir / "images" / "rejected" + self.results_dir = self.base_dir / "results" + + self.roads_gdf = None + self.points: list[tuple[float, float]] = [] + self.evaluation_results = None + + self._ensure_directories() + + def _resolve_torch_device(self) -> str: + """ + Resolve torch device from config and environment fallback rules. + + :return: ``"cpu"`` or ``"cuda"``. + + Example:: + In: pipeline._resolve_torch_device() + Out: "cpu" + """ + configured_device = self.config.get("torch_device", "auto") + if configured_device == "cpu": + return "cpu" + if configured_device == "cuda": + return "cuda" + return "cuda" if os.environ.get("FORCE_CUDA") == "1" else "cpu" + + def update_config(self, new_config: dict[str, Any]) -> None: + """ + Merge new settings into active runtime config. + + :param new_config: Partial config dictionary to apply. + + Example:: + In: pipeline.update_config({"spacing": 80}) + Out: pipeline.config["spacing"] == 80 + """ + self.config.update(new_config) + self.log.info("Configuration updated: %s", new_config) + + def _ensure_directories(self) -> None: + """Create raw/rejected/results directories if they are missing.""" + for directory_path in [self.raw_dir, self.rejected_dir, self.results_dir]: + directory_path.mkdir(parents=True, exist_ok=True) + + def ensure_directories(self) -> None: + """ + Public wrapper for directory bootstrap. + + Example:: + In: pipeline.ensure_directories() + Out: required directories exist on disk + """ + self._ensure_directories() + + def step_1_generate_points(self) -> int: + """ + Step 1: generate sampling points and save them to the configured layer path. + + :return: Number of generated points. + + Example:: + In: pipeline.step_1_generate_points() + Out: 1248 + """ + planner_source = self.config.get("planner_source", "place") + spacing = float(self.config["spacing"]) + min_distance = float(self.config["min_distance"]) + points_output_path = (self.config.get("points_layer_path") or "").strip() + if not points_output_path: + raise ValueError("Set ``points_layer_path`` to a .geojson / .gpkg output path.") + + self.log.info("=== STEP 1: Point generation (source=%s, spacing=%sm) ===", planner_source, spacing) + + try: + # Choose exactly one planner source mode. + if planner_source == "place": + place = self.config["place_name"] + self.roads_gdf, self.points = build_points_pipeline( + output_points_path=points_output_path, + place_name=place, + spacing=spacing, + min_distance_m=min_distance, + ) + elif planner_source == "region": + region_path = (self.config.get("region_geojson_path") or "").strip() + if not region_path: + raise ValueError("Region GeoJSON path is empty.") + self.roads_gdf, self.points = build_points_pipeline( + output_points_path=points_output_path, + region_geojson_path=region_path, + spacing=spacing, + min_distance_m=min_distance, + ) + elif planner_source == "roads": + roads_path = (self.config.get("road_geojson_path") or "").strip() + if not roads_path: + raise ValueError("Road network GeoJSON path is empty.") + self.roads_gdf, self.points = build_points_pipeline( + output_points_path=points_output_path, + road_geojson_path=roads_path, + spacing=spacing, + min_distance_m=min_distance, + ) + else: + raise ValueError(f"Unknown planner source: {planner_source}") + + count = len(self.points) + self.log.info("Success. Generated %s points; saved to %s", count, Path(points_output_path).resolve()) + return count + except Exception as error: + self.log.error("Step 1 failed: %s", error) + raise + + def step_2_download_images(self) -> dict[str, Any]: + """ + Step 2: download Mapillary images for loaded sampling points. + + :return: Download summary dictionary. + + Example:: + In: pipeline.step_2_download_images()["downloaded"] + Out: 915 + """ + self.log.info("=== STEP 2: Mapillary download ===") + + points_path = (self.config.get("mapillary_points_path") or "").strip() + if not points_path: + points_path = (self.config.get("points_layer_path") or "").strip() + if not points_path: + raise ValueError("Set a point layer path (Mapillary tab or planner output path).") + try: + # Reload points from disk to keep GUI/CLI behavior consistent. + self.points = load_sampling_points_latlon(points_path) + except FileNotFoundError as error: + self.log.error("%s", error) + raise RuntimeError("Sampling points file missing. Run step 1 (generate points) first.") from error + if not self.points: + raise RuntimeError(f"Point layer is empty: {points_path}") + + token = self.config["mapillary_token"] + if not token: + self.log.error("Mapillary token is missing.") + raise ValueError("A Mapillary access token is required.") + + image_output_dir = (self.config.get("mapillary_images_output_dir") or "").strip() + if image_output_dir: + self.raw_dir = Path(image_output_dir).expanduser().resolve() + else: + self.raw_dir = self.base_dir / "images" / "raw" + self._ensure_directories() + + # Downloader returns per-point outcomes plus aggregate timing/count metrics. + stats = download_mapillary_images( + points=self.points, + output_folder=str(self.raw_dir), + mapillary_token=token, + search_radius_m=float(self.config["search_radius"]), + fov_deg=float(self.config.get("mapillary_fov_deg", 90)), + max_workers=int(self.config.get("mapillary_max_workers", 20)), + ) + self.log.info("Download finished.") + return stats + + def step_3_prefilter(self) -> dict[str, Any]: + """ + Step 3: run CLIP prefilter and split images into kept/rejected groups. + + :return: Prefilter statistics dictionary. + + Example:: + ``pipeline.step_3_prefilter()["summary"]["kept"] -> 640`` + """ + self.log.info("=== STEP 3: CLIP prefilter ===") + + device = self._resolve_torch_device() + + configured_image_folder = (self.config.get("prefilter_image_folder") or "").strip() + if not configured_image_folder: + image_folder = str(self.raw_dir.resolve()) + else: + image_folder = str(Path(configured_image_folder).expanduser().resolve()) + + rejected_spec = (self.config.get("prefilter_rejected_folder") or "").strip() + if not rejected_spec: + # Relative name means "inside image_folder". + rejected_spec = "rejected" + + model_names = tuple(self.config.get("clip_model_names") or ("ViT-L/14@336px",)) + stats = prefilter_folder( + image_folder=image_folder, + rejected_folder=rejected_spec, + device=device, + model_names=model_names, + beta_sigmoid=float(self.config.get("beta_sigmoid", 30.0)), + filter_threshold=float(self.config.get("filter_threshold", 40.0)), + filter_prompts=prefilter_prompts_from_config(self.config), + ) + + kept_count = stats["summary"]["kept"] + rejected_count = stats["summary"]["rejected"] + self.log.info("Prefilter done. Kept: %s, rejected: %s", kept_count, rejected_count) + return stats + + def step_4_evaluate(self) -> dict[str, Any]: + """ + Step 4: run CLIP scoring for configured dimensions. + + :return: Evaluation results dictionary. + + Example:: + In: pipeline.step_4_evaluate() + Out: {"results": [...], "summary": {...}, ...} + """ + self.log.info("=== STEP 4: CLIP image scoring ===") + + device = self._resolve_torch_device() + + model_names = tuple(self.config.get("clip_model_names") or ("ViT-L/14@336px",)) + evaluation_results = evaluate_images_with_clip( + image_folder=str(self.raw_dir), + device=device, + model_names=model_names, + beta_sigmoid=float(self.config.get("beta_sigmoid", 30.0)), + raise_on_validation_error=True, + ) + self.evaluation_results = evaluation_results + + self.log.info("Scoring finished successfully.") + return evaluation_results + + def step_5_export(self) -> str: + """ + Step 5: export scored points to a vector file. + + :return: Path to saved output file. + + Example:: + In: pipeline.step_5_export() + Out: "data/results/urban_quality_ai_output.geojson" + """ + self.log.info("=== STEP 5: Export results ===") + + if not self.evaluation_results: + self.log.warning("No evaluation results. Run step 4 first.") + raise RuntimeError("Nothing to export.") + + custom = (self.config.get("export_path") or "").strip() + if custom: + output_path = Path(custom) + if not output_path.is_absolute(): + # Keep relative paths anchored to current working directory. + output_path = Path.cwd() / output_path + else: + output_path = self.results_dir / "urban_quality_ai_output.geojson" + output_path.parent.mkdir(parents=True, exist_ok=True) + saved_path = export_point_layer( + results=self.evaluation_results, + output_path=str(output_path), + ) + self.log.info("Written to %s", saved_path) + return str(saved_path) + + def step_6_evaluate_vit(self) -> dict[str, Any]: + """ + Step 6: run fine-tuned ViT scoring and export result layer. + + :return: Evaluation results dictionary. + + Example:: + In: pipeline.step_6_evaluate_vit() + Out: {"results": [...], "summary": {...}, ...} + """ + self.log.info("=== STEP 6: Fine-tuned ViT scoring ===") + + images_dir_spec = (self.config.get("vit_images_dir") or "").strip() + if not images_dir_spec: + raise ValueError("Set 'vit_images_dir' (folder with images).") + images_dir = str(Path(images_dir_spec).expanduser().resolve()) + + model_path_spec = (self.config.get("vit_model_path") or "").strip() + if not model_path_spec: + # Backward-compatible alias used by some configs. + model_path_spec = (self.config.get("vit_checkpoint_path") or "").strip() + if not model_path_spec: + raise ValueError("Set 'vit_model_path' (model weights file).") + model_path = Path(model_path_spec) + + calibrators_dir_spec = (self.config.get("vit_calibrators_dir") or "").strip() + calibrators_dir = Path(calibrators_dir_spec) if calibrators_dir_spec else None + + output_layer_spec = (self.config.get("vit_output_layer_path") or "").strip() + output_layer_path = ( + Path(output_layer_spec) if output_layer_spec else (self.results_dir / "vit_finetuned_scores.gpkg") + ) + output_layer_name = (self.config.get("vit_output_layer_name") or "").strip() or None + + model_name = str(self.config.get("vit_model_name") or "vit_base_patch14_dinov2.lvd142m") + image_size = int(self.config.get("vit_image_size") or 224) + batch_size = int(self.config.get("vit_batch_size") or 32) + vit_torch_device = str(self.config.get("vit_torch_device") or "auto") + + evaluation_results = evaluate_images_with_finetuned( + images_dir=images_dir, + model_path=model_path, + calibrators_dir=calibrators_dir, + model_name=model_name, + image_size=image_size, + batch_size=batch_size, + torch_device=vit_torch_device, + ) + self.evaluation_results = evaluation_results + + # Export is intentionally done at the pipeline layer (avoid evaluation -> layer_creation coupling). + output_layer_path.parent.mkdir(parents=True, exist_ok=True) + export_point_layer( + results=evaluation_results, + output_path=str(output_layer_path), + layer=output_layer_name, + ) + self.log.info("Exported fine-tuned results to: %s", output_layer_path) + + self.log.info("ViT scoring finished successfully.") + return evaluation_results diff --git a/src/uq_desktop_processor/pipeline/points_io.py b/src/uq_desktop_processor/pipeline/points_io.py new file mode 100644 index 0000000..f572cdb --- /dev/null +++ b/src/uq_desktop_processor/pipeline/points_io.py @@ -0,0 +1,45 @@ +""" +Loads and saves sampling-point GeoJSON used between pipeline stages. +""" + +from pathlib import Path + +import geopandas as gpd + + +def load_sampling_points_latlon(path: str | Path) -> list[tuple[float, float]]: + """ + Load a point layer (Point geometries, WGS84) into ``(latitude, longitude)`` tuples + for Mapillary download and map display. + + Non-point geometries are converted to centroids. + + :param path: Path to a vector layer containing sampling geometries. + :return: Sampling points as ``(latitude, longitude)`` pairs. + :raises FileNotFoundError: If the point layer file does not exist. + + Example:: + In: load_sampling_points_latlon("data/results/sampling_points.geojson") + Out: [(50.0612, 19.9377), (50.0620, 19.9402), ...] + """ + point_layer_path = Path(path) + if not point_layer_path.is_file(): + raise FileNotFoundError(f"Point layer file not found: {point_layer_path}") + gdf = gpd.read_file(point_layer_path) + if gdf.empty: + return [] + if gdf.crs is None: + gdf = gdf.set_crs("EPSG:4326") + else: + gdf = gdf.to_crs("EPSG:4326") + latlon_points: list[tuple[float, float]] = [] + for geom in gdf.geometry: + if geom is None or geom.is_empty: + continue + if geom.geom_type == "Point": + latlon_points.append((float(geom.y), float(geom.x))) + else: + # Keep a single representative coordinate for non-point input. + centroid = geom.centroid + latlon_points.append((float(centroid.y), float(centroid.x))) + return latlon_points diff --git a/src/uq_desktop_processor/pipeline/prefilter_config.py b/src/uq_desktop_processor/pipeline/prefilter_config.py new file mode 100644 index 0000000..472a86c --- /dev/null +++ b/src/uq_desktop_processor/pipeline/prefilter_config.py @@ -0,0 +1,36 @@ +""" +Loads YAML/JSON prefilter settings and merges them with pipeline defaults. +""" + +from typing import Any + +from uq_desktop_processor.evaluation.clip_prefilter import defaults as clip_prefilter_defaults + + +def prefilter_prompts_from_config(config: dict[str, Any]) -> dict[str, tuple[str, ...]]: + """ + Parse multiline ``prefilter_*_prompts`` strings into positive/negative prompt tuples. + + Falls back to bundled defaults when any side is missing. + + :param config: Pipeline config dictionary with optional ``prefilter_pos_prompts`` / ``prefilter_neg_prompts``. + :return: Dict with ``"pos"`` and ``"neg"`` tuple values. + + Example:: + In: prefilter_prompts_from_config({"prefilter_pos_prompts": "green\\npark", "prefilter_neg_prompts": ""}) + Out: {"pos": ("green", "park"), "neg": (...defaults...)} + """ + + def lines(text: Any) -> tuple[str, ...]: + # Accept only non-empty strings; ignore blank lines. + if not text or not isinstance(text, str): + return () + return tuple(line.strip() for line in text.splitlines() if line.strip()) + + positive_prompts = lines(config.get("prefilter_pos_prompts")) + negative_prompts = lines(config.get("prefilter_neg_prompts")) + if not positive_prompts: + positive_prompts = tuple(clip_prefilter_defaults.FILTER_PROMPTS["pos"]) + if not negative_prompts: + negative_prompts = tuple(clip_prefilter_defaults.FILTER_PROMPTS["neg"]) + return {"pos": positive_prompts, "neg": negative_prompts} From 819d88e2d4ccbe50676c2d87bef554e941e63908 Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 11:17:36 +0200 Subject: [PATCH 09/12] feat(app): add desktop entrypoint and GUI (#9) --- src/uq_desktop_processor/__main__.py | 47 ++ src/uq_desktop_processor/gui/__init__.py | 41 ++ .../gui/map_view/__init__.py | 5 + .../gui/map_view/constants.py | 89 ++++ src/uq_desktop_processor/gui/map_view/data.py | 176 +++++++ src/uq_desktop_processor/gui/map_view/geo.py | 20 + src/uq_desktop_processor/gui/map_view/html.py | 84 +++ src/uq_desktop_processor/gui/paths.py | 11 + .../gui/platform/__init__.py | 7 + .../gui/platform/webengine.py | 37 ++ .../gui/shell/__init__.py | 7 + .../gui/shell/constants.py | 24 + .../gui/shell/explorer/__init__.py | 7 + .../gui/shell/explorer/console.py | 54 ++ .../gui/shell/explorer/dialogs.py | 86 ++++ .../gui/shell/explorer/modules.py | 46 ++ .../gui/shell/explorer/pipeline.py | 478 ++++++++++++++++++ .../gui/shell/explorer/sources.py | 44 ++ .../gui/shell/explorer/window.py | 176 +++++++ .../gui/shell/formatters.py | 164 ++++++ .../gui/shell/logging_bridge.py | 54 ++ .../gui/shell/ui/__init__.py | 7 + .../gui/shell/ui/main_frame.py | 142 ++++++ .../gui/shell/ui/module_pages.py | 47 ++ .../gui/shell/ui/osm_source_block.py | 90 ++++ .../gui/shell/ui/pages/__init__.py | 1 + .../gui/shell/ui/pages/clip_prefilter.py | 131 +++++ .../gui/shell/ui/pages/drive_route.py | 99 ++++ .../gui/shell/ui/pages/mapillary.py | 77 +++ .../gui/shell/ui/pages/sampling_points.py | 75 +++ .../gui/shell/ui/pages/vit_scoring.py | 113 +++++ .../gui/shell/ui/placeholders.py | 38 ++ src/uq_desktop_processor/gui/shell/worker.py | 47 ++ .../gui/styles/__init__.py | 7 + src/uq_desktop_processor/gui/styles/theme.py | 225 +++++++++ .../gui/widgets/__init__.py | 16 + .../gui/widgets/deck_map/__init__.py | 7 + .../gui/widgets/deck_map/layer_panel.py | 186 +++++++ .../gui/widgets/deck_map/layers.py | 273 ++++++++++ .../gui/widgets/deck_map/web.py | 167 ++++++ .../gui/widgets/deck_map/widget.py | 468 +++++++++++++++++ .../gui/widgets/map_layer_list.py | 100 ++++ .../gui/widgets/map_web_stack.py | 73 +++ .../gui/widgets/stacked.py | 107 ++++ 44 files changed, 4153 insertions(+) create mode 100644 src/uq_desktop_processor/__main__.py create mode 100644 src/uq_desktop_processor/gui/__init__.py create mode 100644 src/uq_desktop_processor/gui/map_view/__init__.py create mode 100644 src/uq_desktop_processor/gui/map_view/constants.py create mode 100644 src/uq_desktop_processor/gui/map_view/data.py create mode 100644 src/uq_desktop_processor/gui/map_view/geo.py create mode 100644 src/uq_desktop_processor/gui/map_view/html.py create mode 100644 src/uq_desktop_processor/gui/paths.py create mode 100644 src/uq_desktop_processor/gui/platform/__init__.py create mode 100644 src/uq_desktop_processor/gui/platform/webengine.py create mode 100644 src/uq_desktop_processor/gui/shell/__init__.py create mode 100644 src/uq_desktop_processor/gui/shell/constants.py create mode 100644 src/uq_desktop_processor/gui/shell/explorer/__init__.py create mode 100644 src/uq_desktop_processor/gui/shell/explorer/console.py create mode 100644 src/uq_desktop_processor/gui/shell/explorer/dialogs.py create mode 100644 src/uq_desktop_processor/gui/shell/explorer/modules.py create mode 100644 src/uq_desktop_processor/gui/shell/explorer/pipeline.py create mode 100644 src/uq_desktop_processor/gui/shell/explorer/sources.py create mode 100644 src/uq_desktop_processor/gui/shell/explorer/window.py create mode 100644 src/uq_desktop_processor/gui/shell/formatters.py create mode 100644 src/uq_desktop_processor/gui/shell/logging_bridge.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/__init__.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/main_frame.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/module_pages.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/osm_source_block.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/pages/__init__.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/pages/clip_prefilter.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/pages/drive_route.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/pages/mapillary.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/pages/sampling_points.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/pages/vit_scoring.py create mode 100644 src/uq_desktop_processor/gui/shell/ui/placeholders.py create mode 100644 src/uq_desktop_processor/gui/shell/worker.py create mode 100644 src/uq_desktop_processor/gui/styles/__init__.py create mode 100644 src/uq_desktop_processor/gui/styles/theme.py create mode 100644 src/uq_desktop_processor/gui/widgets/__init__.py create mode 100644 src/uq_desktop_processor/gui/widgets/deck_map/__init__.py create mode 100644 src/uq_desktop_processor/gui/widgets/deck_map/layer_panel.py create mode 100644 src/uq_desktop_processor/gui/widgets/deck_map/layers.py create mode 100644 src/uq_desktop_processor/gui/widgets/deck_map/web.py create mode 100644 src/uq_desktop_processor/gui/widgets/deck_map/widget.py create mode 100644 src/uq_desktop_processor/gui/widgets/map_layer_list.py create mode 100644 src/uq_desktop_processor/gui/widgets/map_web_stack.py create mode 100644 src/uq_desktop_processor/gui/widgets/stacked.py diff --git a/src/uq_desktop_processor/__main__.py b/src/uq_desktop_processor/__main__.py new file mode 100644 index 0000000..8508bff --- /dev/null +++ b/src/uq_desktop_processor/__main__.py @@ -0,0 +1,47 @@ +""" +Application entry point for `python -m uq_desktop_processor` (logging setup and GUI launch). +""" + +import logging +import sys + +from uq_desktop_processor.gui import main as start_gui +from uq_desktop_processor.logging_config import configure_logging + + +def main() -> int: + """ + Main entry point for the City-Lens pipeline. + + Configures logging, starts the application, and returns the exit code. + """ + # 1. Configure logging system + configure_logging(level=logging.DEBUG) + + # 2. Get the main logger + log = logging.getLogger(__name__) + log.debug("Logging configured.") + + # 3. Log application launch + log.info("Launching UrbanQuality-AI application pipeline...") + + # 4. Run the main pipeline function and get its exit code + try: + exit_code = start_gui() + + if exit_code == 0: + log.info("Application pipeline finished successfully (Exit Code 0).") + else: + log.warning("Application pipeline finished with errors (Exit Code %d).", exit_code) + + return exit_code + + except Exception as e: + # Catch any critical, unhandled exceptions + log.critical("An unhandled exception occurred: %s", e, exc_info=True) + return 1 + + +if __name__ == "__main__": + # Call main() and exit with its proper return code + sys.exit(main()) diff --git a/src/uq_desktop_processor/gui/__init__.py b/src/uq_desktop_processor/gui/__init__.py new file mode 100644 index 0000000..f8eeecf --- /dev/null +++ b/src/uq_desktop_processor/gui/__init__.py @@ -0,0 +1,41 @@ +""" +GUI module: init . +""" + +import ctypes +import sys + +from PySide6.QtCore import Qt +from PySide6.QtGui import QIcon +from PySide6.QtWidgets import QApplication + +from .paths import APP_ICON_PATH +from .platform.webengine import configure_webengine_for_deck_gl +from .shell.explorer import UrbanQualityAIExplorer + + +def main() -> int: + """ + Run main. + + :return: Result of this step or updated UI/application state. + + Example:: + In: main() + Out: UI/application state updated as intended. + """ + configure_webengine_for_deck_gl() + if sys.platform == "win32": + ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("uq_desktop_processor.app") + QApplication.setAttribute(Qt.ApplicationAttribute.AA_ShareOpenGLContexts, True) + app = QApplication(sys.argv) + app.setStyle("Fusion") + app_icon = QIcon(str(APP_ICON_PATH)) + app.setWindowIcon(app_icon) + gui = UrbanQualityAIExplorer() + gui.setWindowIcon(app_icon) + gui.show() + return app.exec() + + +__all__ = ["main", "UrbanQualityAIExplorer"] diff --git a/src/uq_desktop_processor/gui/map_view/__init__.py b/src/uq_desktop_processor/gui/map_view/__init__.py new file mode 100644 index 0000000..b83e8ec --- /dev/null +++ b/src/uq_desktop_processor/gui/map_view/__init__.py @@ -0,0 +1,5 @@ +""" +GUI module: init . +""" + +__all__: list[str] = [] diff --git a/src/uq_desktop_processor/gui/map_view/constants.py b/src/uq_desktop_processor/gui/map_view/constants.py new file mode 100644 index 0000000..3d569cf --- /dev/null +++ b/src/uq_desktop_processor/gui/map_view/constants.py @@ -0,0 +1,89 @@ +""" +Map layer IDs, color palettes, and display limits for PyDeck-based map views. +""" + +EULER_LINE_COLORS: list[list[int]] = [ + [0, 242, 255], + [255, 0, 170], + [0, 255, 136], + [255, 214, 0], + [136, 86, 255], + [255, 128, 0], + [120, 220, 255], + [255, 80, 80], + [180, 255, 120], + [200, 120, 255], +] + +# QListWidget: first row = drawn on top of the map (deck.gl last in stack). +MAP_LAYER_IDS_TOP_FIRST: tuple[str, ...] = ("clip", "points", "euler", "roads") +MAP_LAYER_LABELS: dict[str, str] = { + "roads": "Road network", + "points": "Sampling points", + "euler": "Euler routes (GPX)", + "clip": "Estimation results (avg)", +} + +MAP_REDRAW_DEBOUNCE_MS = 48 +ROADS_MAP_SIMPLIFY_METERS_BASE = 12.0 +ROADS_MAP_MAX_FEATURES_BASE = 25000 +POINTS_MAP_MAX_BASE = 120_000 +EULER_VERTEX_BUDGET_BASE = 250_000 + +# Read live camera before setHtml so toggling layers does not reset pan/zoom. +DECK_VIEW_STATE_JS = r""" +(function() { + try { + function normalizeVs(vs) { + if (!vs) return null; + if (vs.latitude != null && vs.longitude != null && vs.zoom != null) return vs; + return null; + } + function deepPickVs(obj, depth) { + if (!obj || depth > 6) return null; + var n = normalizeVs(obj); + if (n) return n; + if (typeof obj !== "object") return null; + var keys = Object.keys(obj); + for (var i = 0; i < keys.length; i++) { + var inner = obj[keys[i]]; + var p = deepPickVs(inner, depth + 1); + if (p) return p; + } + return null; + } + var di = (typeof window.cityLensDeck !== "undefined") ? window.cityLensDeck : null; + if (!di) return null; + var root = di.deck || di; + var vs = normalizeVs(root.viewState); + if (!vs) vs = deepPickVs(root.viewState, 0); + if (!vs && root.viewManager) { + var m = root.viewManager; + vs = normalizeVs(m.viewState) || deepPickVs(m.viewState, 0); + if (!vs && m.viewStates) vs = deepPickVs(m.viewStates, 0); + if (!vs && m._viewports && m._viewports.length) { + var vp = m._viewports[0]; + vs = normalizeVs(vp.viewState) || deepPickVs(vp.viewState, 0); + if (!vs && vp.viewport) vs = normalizeVs(vp.viewport) || deepPickVs(vp.viewport, 0); + } + } + if (!vs && typeof root.getViewports === "function") { + try { + var vps = root.getViewports(root.width && root.height ? [0, 0, root.width, root.height] : undefined); + if (vps && vps.length) { + var vp0 = vps[0]; + vs = normalizeVs(vp0) || deepPickVs(vp0, 0); + } + } catch (e2) {} + } + if (!vs || vs.latitude == null || vs.longitude == null || vs.zoom == null) return null; + return JSON.stringify({ + latitude: vs.latitude, + longitude: vs.longitude, + zoom: vs.zoom, + pitch: vs.pitch != null ? vs.pitch : 0, + bearing: vs.bearing != null ? vs.bearing : 0 + }); + } catch (e) { return null; } +})() +""" diff --git a/src/uq_desktop_processor/gui/map_view/data.py b/src/uq_desktop_processor/gui/map_view/data.py new file mode 100644 index 0000000..9a45a30 --- /dev/null +++ b/src/uq_desktop_processor/gui/map_view/data.py @@ -0,0 +1,176 @@ +""" +Builds numpy/PyDeck-friendly data from GeoJSON, sampling points, and evaluation results. +""" + +import math +from typing import Any + +import geopandas as gpd +import numpy as np +import pydeck as pdk + +from uq_desktop_processor.gui.map_view.constants import ( + EULER_VERTEX_BUDGET_BASE, + POINTS_MAP_MAX_BASE, + ROADS_MAP_MAX_FEATURES_BASE, + ROADS_MAP_SIMPLIFY_METERS_BASE, +) +from uq_desktop_processor.layer_creation.vector_layers.point_layer.utils import parse_lat_lon + + +def evaluation_scatter_data(results: dict[str, Any]) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """ + Run evaluation scatter data. + + :param results: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: evaluation_scatter_data(results) + Out: UI/application state updated as intended. + """ + xs: list[float] = [] + ys: list[float] = [] + scores: list[float] = [] + for image_result in results.get("images") or []: + image_path = image_result.get("image_path") or "" + try: + if not image_path: + raise ValueError("Missing image_path in evaluation record.") + lat, lon = parse_lat_lon(image_path) + except (ValueError, IndexError): + continue + xs.append(lon) + ys.append(lat) + scores.append(float(image_result.get("overall_pct") or 0.0)) + if not xs: + return np.array([]), np.array([]), np.array([]) + return np.array(xs), np.array(ys), np.array(scores) + + +def fit_view_state(lons: list[float], lats: list[float]) -> pdk.ViewState: + """ + Run fit view state. + + :param lons: See caller/context. + :param lats: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: fit_view_state(lons, lats) + Out: UI/application state updated as intended. + """ + if not lons or not lats: + return pdk.ViewState(latitude=50.0, longitude=19.0, zoom=4, pitch=0, bearing=0) + lo, hi = min(lons), max(lons) + la_lo, la_hi = min(lats), max(lats) + span = max(hi - lo, la_hi - la_lo, 1e-6) + pad = 0.08 * span + lo, hi = lo - pad, hi + pad + la_lo, la_hi = la_lo - pad, la_hi + pad + center_lon = (lo + hi) / 2 + center_lat = (la_lo + la_hi) / 2 + lon_span = max(hi - lo, 1e-6) + zoom = math.log2(360 / lon_span) - 0.75 + zoom = max(2.0, min(17.0, zoom)) + return pdk.ViewState( + latitude=float(center_lat), + longitude=float(center_lon), + zoom=float(zoom), + pitch=0, + bearing=0, + ) + + +def red_yellow_green_rgba(scores: np.ndarray) -> list[list[int]]: + """ + Run red yellow green rgba. + + :param scores: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: red_yellow_green_rgba(scores) + Out: UI/application state updated as intended. + """ + if scores.size == 0: + return [] + vmin, vmax = float(np.min(scores)), float(np.max(scores)) + if vmax <= vmin: + vmin -= 1.0 + vmax += 1.0 + colors_rgba: list[list[int]] = [] + for score_value in scores: + normalized_score = (float(score_value) - vmin) / (vmax - vmin) + normalized_score = max(0.0, min(1.0, normalized_score)) + if normalized_score <= 0.5: + blend_factor = normalized_score / 0.5 + red_channel, green_channel, blue_channel = 255, int(255 * blend_factor), 0 + else: + blend_factor = (normalized_score - 0.5) / 0.5 + red_channel, green_channel, blue_channel = int(255 * (1.0 - blend_factor)), 255, 0 + colors_rgba.append([int(red_channel), int(green_channel), int(blue_channel), 220]) + return colors_rgba + + +def simplify_roads_gdf_for_map_display( + roads_gdf: gpd.GeoDataFrame, + *, + simplify_meters: float, + max_features: int, +) -> gpd.GeoDataFrame: + """Reduce vertex / feature count for GeoJsonLayer (display only; pipeline keeps full geometry).""" + if roads_gdf.empty: + return roads_gdf + projected_roads_gdf = roads_gdf.to_crs(3857) + simplified_geometry = projected_roads_gdf.geometry.simplify(simplify_meters, preserve_topology=True) + display_roads_gdf = gpd.GeoDataFrame(geometry=simplified_geometry, crs=projected_roads_gdf.crs) + display_roads_gdf = display_roads_gdf[~display_roads_gdf.geometry.is_empty & display_roads_gdf.geometry.notna()] + display_roads_gdf = display_roads_gdf.to_crs(4326) + feature_count = len(display_roads_gdf) + cap = max(500, int(max_features)) + if feature_count > cap: + step = max(1, math.ceil(feature_count / cap)) + display_roads_gdf = display_roads_gdf.iloc[::step].copy() + return display_roads_gdf + + +def map_display_budgets(n_visible_layers: int) -> dict[str, float | int]: + """ + When several deck.gl layers are visible, total attribute + index data grows quickly. + Qt WebEngine (often SwiftShader) can hit GPU memory or inline-JSON practical limits; scale caps with n. + """ + visible_layer_count = max(1, n_visible_layers) + scale_divisor = math.sqrt(float(visible_layer_count)) + road_max = max(4000, int(ROADS_MAP_MAX_FEATURES_BASE / scale_divisor)) + road_simplify = ROADS_MAP_SIMPLIFY_METERS_BASE * (1.0 + 0.35 * (visible_layer_count - 1)) + points_max = max(8000, int(POINTS_MAP_MAX_BASE / scale_divisor)) + euler_vertices = max(40_000, int(EULER_VERTEX_BUDGET_BASE / scale_divisor)) + return { + "road_max_features": road_max, + "road_simplify_meters": road_simplify, + "points_max": points_max, + "euler_vertex_budget": euler_vertices, + } + + +def euler_polylines_for_display( + polylines: list[list[tuple[float, float]]], + vertex_budget: int, +) -> list[list[tuple[float, float]]]: + """Same length as input so sector index / colors stay aligned with the original route list.""" + total_vertex_count = sum(len(polyline) for polyline in polylines if len(polyline) >= 2) + if total_vertex_count <= vertex_budget: + return [list(polyline) for polyline in polylines] + display_polylines: list[list[tuple[float, float]]] = [] + for polyline in polylines: + if len(polyline) < 2: + display_polylines.append(list(polyline)) + continue + vertex_share = max(2, int(vertex_budget * len(polyline) / total_vertex_count)) + if len(polyline) <= vertex_share: + display_polylines.append(list(polyline)) + else: + sampled_indices = np.linspace(0, len(polyline) - 1, vertex_share).astype(int) + display_polylines.append([polyline[int(vertex_index)] for vertex_index in sampled_indices]) + return display_polylines diff --git a/src/uq_desktop_processor/gui/map_view/geo.py b/src/uq_desktop_processor/gui/map_view/geo.py new file mode 100644 index 0000000..9bf67a8 --- /dev/null +++ b/src/uq_desktop_processor/gui/map_view/geo.py @@ -0,0 +1,20 @@ +""" +Geographic helpers: bounds fitting, coordinate transforms, and map viewport math. +""" + +from pyproj import Geod + +_GEO_WGS84 = Geod(ellps="WGS84") + + +def polyline_geodesic_length_m(poly: tuple[tuple[float, float], ...]) -> float: + """Sum of geodesic segment lengths for a (lon, lat) polyline in WGS84.""" + if len(poly) < 2: + return 0.0 + total = 0.0 + for i in range(len(poly) - 1): + lon1, lat1 = poly[i] + lon2, lat2 = poly[i + 1] + _, _, dist_m = _GEO_WGS84.inv(lon1, lat1, lon2, lat2) + total += abs(dist_m) + return total diff --git a/src/uq_desktop_processor/gui/map_view/html.py b/src/uq_desktop_processor/gui/map_view/html.py new file mode 100644 index 0000000..61c2b03 --- /dev/null +++ b/src/uq_desktop_processor/gui/map_view/html.py @@ -0,0 +1,84 @@ +""" +HTML templates and embedding glue for standalone or Qt-embedded map pages. +""" + +import json +import logging +import re + +from PySide6.QtCore import QJsonValue + + +def sanitize_pydeck_inline_json_html(deck_html: str) -> str: + """ + Escape ```` sequences inside the deck JSON block so Chromium does not + terminate the script tag early (e.g. OSM tags in string data). + """ + marker = "const jsonInput = " + if marker not in deck_html: + return deck_html + + parts = deck_html.split(marker) + if len(parts) < 2: + return deck_html + + json_and_rest = parts[1].split("", 1) + if len(json_and_rest) < 2: + return deck_html + + json_content = json_and_rest[0] + rest_of_page = json_and_rest[1] + + safe_json = re.sub(r"" + rest_of_page + + +def expose_deck_instance_on_window(deck_html: str) -> str: + """Make the deck wrapper reachable from ``runJavaScript`` (``const`` is not a window property).""" + needle = "const deckInstance = createDeck(" + if needle in deck_html: + return deck_html.replace(needle, "window.cityLensDeck = createDeck(", 1) + logging.getLogger(__name__).warning( + "pydeck HTML has no expected deckInstance line; map view may not preserve pan/zoom on layer toggles." + ) + return deck_html + + +def inject_mapbox_gl_css(deck_html: str) -> str: + """Pydeck template loads mapbox-gl.js but not mapbox-gl.css; add it to silence warnings / layout glitches.""" + if "mapbox-gl.css" in deck_html: + return deck_html + marker = "mapbox-gl-js/v1.13.0/mapbox-gl.js" + script_marker_index = deck_html.find(marker) + if script_marker_index < 0: + return deck_html + script_close_index = deck_html.find("", script_marker_index) + if script_close_index < 0: + return deck_html + script_close_index += len("") + link = '\n ' + return deck_html[:script_close_index] + link + deck_html[script_close_index:] + + +def coerce_webengine_js_json(result: object) -> object: + """QWebEnginePage.runJavaScript often delivers a QJsonValue; normalize to Python types.""" + if isinstance(result, QJsonValue): + if result.isNull() or result.isUndefined(): + return None + return result.toVariant() + return result + + +def parse_view_state_json(result: object) -> dict[str, object] | None: + """Parse JS-returned view state string/dict into a plain dict.""" + result = coerce_webengine_js_json(result) + if isinstance(result, str) and result.strip() not in ("", "null", "undefined"): + try: + parsed = json.loads(result) + return parsed if isinstance(parsed, dict) else None + except json.JSONDecodeError: + return None + if isinstance(result, dict): + return result + return None diff --git a/src/uq_desktop_processor/gui/paths.py b/src/uq_desktop_processor/gui/paths.py new file mode 100644 index 0000000..b9fce87 --- /dev/null +++ b/src/uq_desktop_processor/gui/paths.py @@ -0,0 +1,11 @@ +""" +Shared GUI filesystem paths. +""" + +from pathlib import Path + +PROJECT_ROOT = Path(__file__).resolve().parents[3] +PACKAGE_ROOT = Path(__file__).resolve().parents[1] +APP_ICON_PATH = PACKAGE_ROOT / "assets" / "img" / "icon.ico" + +__all__ = ["PROJECT_ROOT", "PACKAGE_ROOT", "APP_ICON_PATH"] diff --git a/src/uq_desktop_processor/gui/platform/__init__.py b/src/uq_desktop_processor/gui/platform/__init__.py new file mode 100644 index 0000000..55e0255 --- /dev/null +++ b/src/uq_desktop_processor/gui/platform/__init__.py @@ -0,0 +1,7 @@ +""" +GUI module: init . +""" + +from .webengine import configure_webengine_for_deck_gl + +__all__ = ["configure_webengine_for_deck_gl"] diff --git a/src/uq_desktop_processor/gui/platform/webengine.py b/src/uq_desktop_processor/gui/platform/webengine.py new file mode 100644 index 0000000..f3d8550 --- /dev/null +++ b/src/uq_desktop_processor/gui/platform/webengine.py @@ -0,0 +1,37 @@ +""" +Qt WebEngine profile and view helpers for embedding maps and web content. +""" + +import logging +import os +import sys + + +def configure_webengine_for_deck_gl() -> None: + """ + deck.gl needs a working **WebGL** context. ``--disable-gpu`` turns WebGL off entirely + (GL_RENDERER = Disabled), so the map cannot start. + + On Windows, native ANGLE/D3D11 can hit DXGI_ERROR_DEVICE_REMOVED; the stable default is + **SwiftShader** (CPU WebGL via ``--use-angle=swiftshader``). + + If ``QTWEBENGINE_CHROMIUM_FLAGS`` is already set, it is left unchanged. + + ``CITYLENS_WEBENGINE_USE_GPU=1``: try native GPU with light sandbox mitigations only. + """ + if os.environ.get("QTWEBENGINE_CHROMIUM_FLAGS", "").strip(): + return + if sys.platform != "win32": + return + log = logging.getLogger(__name__) + if os.environ.get("CITYLENS_WEBENGINE_USE_GPU", "").lower() in ("1", "true", "yes"): + os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = "--disable-gpu-sandbox --ignore-gpu-blocklist" + log.info( + "Qt WebEngine: native GPU (no SwiftShader). If the map crashes, unset " + "CITYLENS_WEBENGINE_USE_GPU or set flags manually via QTWEBENGINE_CHROMIUM_FLAGS." + ) + return + os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = ( + "--use-angle=swiftshader " "--enable-unsafe-swiftshader " "--disable-gpu-sandbox " "--ignore-gpu-blocklist" + ) + log.info("Qt WebEngine: SwiftShader (CPU WebGL) for deck.gl. For native GPU: " "set CITYLENS_WEBENGINE_USE_GPU=1") diff --git a/src/uq_desktop_processor/gui/shell/__init__.py b/src/uq_desktop_processor/gui/shell/__init__.py new file mode 100644 index 0000000..261d6ad --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/__init__.py @@ -0,0 +1,7 @@ +""" +GUI module: init . +""" + +from .explorer import UrbanQualityAIExplorer + +__all__ = ["UrbanQualityAIExplorer"] diff --git a/src/uq_desktop_processor/gui/shell/constants.py b/src/uq_desktop_processor/gui/shell/constants.py new file mode 100644 index 0000000..1f2c28c --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/constants.py @@ -0,0 +1,24 @@ +""" +Shell-wide UI constants: titles, spacing keys, and shared resource identifiers. +""" + +CLIP_MODEL_CHOICES: list[tuple[str, tuple[str, ...]]] = [ + ("ViT-L/14 @336px", ("ViT-L/14@336px",)), + ("ViT-L/14", ("ViT-L/14",)), + ("ViT-B/32", ("ViT-B/32",)), + ("ViT-B/16", ("ViT-B/16",)), +] + +# Combo userData order must match stacked pages in route/planner input stacks. +SOURCE_INPUT_STACK_PAGE_ORDER: tuple[str, ...] = ("place", "region", "roads") + +EULER_SOURCE_FIELD_LABELS: dict[str, str] = { + "place": "City / place", + "region": "Region file", + "roads": "Roads file", +} +PLANNER_SOURCE_FIELD_LABELS: dict[str, str] = { + "place": "Target city / place", + "region": "Region file", + "roads": "Roads file", +} diff --git a/src/uq_desktop_processor/gui/shell/explorer/__init__.py b/src/uq_desktop_processor/gui/shell/explorer/__init__.py new file mode 100644 index 0000000..d41c744 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/explorer/__init__.py @@ -0,0 +1,7 @@ +""" +GUI module: init . +""" + +from .window import UrbanQualityAIExplorer + +__all__ = ["UrbanQualityAIExplorer"] diff --git a/src/uq_desktop_processor/gui/shell/explorer/console.py b/src/uq_desktop_processor/gui/shell/explorer/console.py new file mode 100644 index 0000000..236bfbd --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/explorer/console.py @@ -0,0 +1,54 @@ +""" +Embedded console widget for the explorer window (command/output surface). +""" + +from typing import Protocol + +from PySide6.QtGui import QTextCursor +from PySide6.QtWidgets import QTextEdit + + +class ConsoleSupported(Protocol): + """ + ConsoleSupported UI helper class. + """ + + console: QTextEdit + metrics_text: QTextEdit + + +class ConsoleMixin: + """ + ConsoleMixin UI helper class. + """ + + def _append_console(self: ConsoleSupported, line: str) -> None: + """ + Run append console. + + :param line: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _append_console(line) + Out: UI/application state updated as intended. + """ + self.console.append(line.rstrip()) + + def _append_data_science_section(self: ConsoleSupported, title: str, lines: list[str]) -> None: + """ + Run append data science section. + + :param title: See caller/context. + :param lines: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _append_data_science_section(title, lines) + Out: UI/application state updated as intended. + """ + current = self.metrics_text.toPlainText().rstrip() + sep = "\n\n" + "─" * 44 + "\n\n" if current else "" + body = "\n".join(lines) + self.metrics_text.setPlainText(f"{current}{sep}{title}\n{body}") + self.metrics_text.moveCursor(QTextCursor.MoveOperation.End) diff --git a/src/uq_desktop_processor/gui/shell/explorer/dialogs.py b/src/uq_desktop_processor/gui/shell/explorer/dialogs.py new file mode 100644 index 0000000..1f25c83 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/explorer/dialogs.py @@ -0,0 +1,86 @@ +""" +Modal dialogs for the explorer: paths, confirmations, and configuration prompts. +""" + +from PySide6.QtWidgets import QFileDialog, QLineEdit, QWidget + + +class DialogsMixin: + """ + DialogsMixin UI helper class. + """ + + def pick_file(self, target: QLineEdit, filt: str) -> None: + """ + Run pick file. + + :param target: See caller/context. + :param filt: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: pick_file(target, filt) + Out: UI/application state updated as intended. + """ + parent_widget: QWidget | None = self if isinstance(self, QWidget) else None + path, _ = QFileDialog.getOpenFileName(parent_widget, "Select file", "", filt) + if path: + target.setText(path) + + def pick_folder(self, target: QLineEdit) -> None: + """ + Run pick folder. + + :param target: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: pick_folder(target) + Out: UI/application state updated as intended. + """ + parent_widget: QWidget | None = self if isinstance(self, QWidget) else None + path = QFileDialog.getExistingDirectory(parent_widget, "Select folder") + if path: + target.setText(path) + + def pick_save_points_layer(self, target: QLineEdit) -> None: + """ + Run pick save points layer. + + :param target: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: pick_save_points_layer(target) + Out: UI/application state updated as intended. + """ + parent_widget: QWidget | None = self if isinstance(self, QWidget) else None + path, _ = QFileDialog.getSaveFileName( + parent_widget, + "Save point layer", + target.text() or "sampling_points.geojson", + "GeoJSON (*.geojson);;GeoPackage (*.gpkg)", + ) + if path: + target.setText(path) + + def pick_save_gpkg(self, target: QLineEdit) -> None: + """ + Run pick save gpkg. + + :param target: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: pick_save_gpkg(target) + Out: UI/application state updated as intended. + """ + parent_widget: QWidget | None = self if isinstance(self, QWidget) else None + path, _ = QFileDialog.getSaveFileName( + parent_widget, + "Save GeoPackage layer", + target.text() or "vit_finetuned_scores.gpkg", + "GeoPackage (*.gpkg)", + ) + if path: + target.setText(path) diff --git a/src/uq_desktop_processor/gui/shell/explorer/modules.py b/src/uq_desktop_processor/gui/shell/explorer/modules.py new file mode 100644 index 0000000..f73eac4 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/explorer/modules.py @@ -0,0 +1,46 @@ +""" +Registers explorer tool modules and exposes metadata for the sidebar. +""" + +from PySide6.QtWidgets import QButtonGroup, QSplitter, QStackedWidget, QWidget + + +class ModulesMixin: + """ + ModulesMixin UI helper class. + """ + + tool_container: QWidget + button_group: QButtonGroup + stacked_tools: QStackedWidget + main_splitter: QSplitter + current_active_module: int + + def toggle_module_panel(self, index: int) -> None: + """ + Run toggle module panel. + + :param index: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: toggle_module_panel(index) + Out: UI/application state updated as intended. + """ + is_visible = self.tool_container.isVisible() + + if is_visible and self.current_active_module == index: + self.tool_container.setVisible(False) + self.button_group.setExclusive(False) + self.button_group.button(index).setChecked(False) + self.button_group.setExclusive(True) + self.current_active_module = -1 + else: + self.stacked_tools.setCurrentIndex(index) + self.tool_container.setVisible(True) + + sizes = self.main_splitter.sizes() + if sizes and sizes[0] < 50: + self.main_splitter.setSizes([320, 800, 320]) + + self.current_active_module = index diff --git a/src/uq_desktop_processor/gui/shell/explorer/pipeline.py b/src/uq_desktop_processor/gui/shell/explorer/pipeline.py new file mode 100644 index 0000000..c190748 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/explorer/pipeline.py @@ -0,0 +1,478 @@ +""" +Connects pipeline execution and progress signals to the explorer UI. +""" + +import logging +import os +from collections.abc import Callable, Iterable +from pathlib import Path +from typing import TYPE_CHECKING, Any + +from PySide6.QtCore import QTimer +from PySide6.QtWidgets import ( + QCheckBox, + QComboBox, + QDoubleSpinBox, + QLineEdit, + QPlainTextEdit, + QProgressBar, + QPushButton, + QSlider, + QSpinBox, + QWidget, +) + +from uq_desktop_processor.evaluation.clip_prefilter.defaults import FILTER_PROMPTS as CLIP_PREFILTER_DEFAULT_PROMPTS +from uq_desktop_processor.gui.shell.formatters import ( + format_download_summary, + format_euler_routes_summary, + format_prefilter_summary, + format_vit_summary, +) +from uq_desktop_processor.gui.shell.worker import StepThread +from uq_desktop_processor.street_view_analysis import EulerRoutesResult, generate_clean_routes + +if TYPE_CHECKING: + Base = QWidget +else: + Base = object + + +class PipelineMixin(Base): + """ + PipelineMixin UI helper class. + """ + + prefilter_pos_edit: QPlainTextEdit + prefilter_neg_edit: QPlainTextEdit + model_combo: QComboBox + planner_source_combo: QComboBox + place_name_edit: QLineEdit + region_path_edit: QLineEdit + road_path_edit: QLineEdit + spacing_edit: QLineEdit + min_dist_edit: QLineEdit + planner_points_out_edit: QLineEdit + token_edit: QLineEdit + mapillary_points_edit: QLineEdit + mapillary_out_edit: QLineEdit + radius_edit: QLineEdit + workers_spin: QSpinBox + device_combo: QComboBox + prefilter_image_folder_edit: QLineEdit + prefilter_rejected_edit: QLineEdit + threshold_slider: QSlider + beta_spin: QDoubleSpinBox + vit_images_dir_edit: QLineEdit + vit_model_path_edit: QLineEdit + vit_calibrators_edit: QLineEdit + vit_output_path_edit: QLineEdit + vit_output_layer_name_edit: QLineEdit + vit_model_name_edit: QLineEdit + vit_image_size_spin: QSpinBox + vit_batch_size_spin: QSpinBox + vit_device_combo: QComboBox + progress_bar: QProgressBar + run_buttons: Iterable[QPushButton] + route_source_combo: QComboBox + route_grid_cols: QSpinBox + route_grid_rows: QSpinBox + route_out_edit: QLineEdit + route_consolidate_tol: QDoubleSpinBox + route_cache_check: QCheckBox + route_city_edit: QLineEdit + route_region_path_edit: QLineEdit + route_roads_path_edit: QLineEdit + + pipeline: Any + map_canvas: Any + _worker: StepThread | None + _last_euler_result: EulerRoutesResult | None + + def _append_data_science_section(self, title: str, lines: list[str]) -> None: + """ + Run append data science section. + + :param title: See caller/context. + :param lines: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _append_data_science_section(title, lines) + Out: UI/application state updated as intended. + """ + pass + + def reset_clip_prefilter_prompts(self) -> None: + """ + Run reset clip prefilter prompts. + + :return: Result of this step or updated UI/application state. + + Example:: + In: reset_clip_prefilter_prompts() + Out: UI/application state updated as intended. + """ + self.prefilter_pos_edit.setPlainText("\n".join(CLIP_PREFILTER_DEFAULT_PROMPTS["pos"])) + self.prefilter_neg_edit.setPlainText("\n".join(CLIP_PREFILTER_DEFAULT_PROMPTS["neg"])) + + def _apply_config_from_ui(self) -> None: + """ + Run apply config from ui. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _apply_config_from_ui() + Out: UI/application state updated as intended. + """ + model_tuple = self.model_combo.currentData() + if not isinstance(model_tuple, tuple): + # Keep a valid fallback if combo-box payload is malformed. + model_tuple = ("ViT-L/14@336px",) + + # Snapshot all controls into pipeline config before launching any step. + self.pipeline.update_config( + { + "planner_source": self.planner_source_combo.currentData(), + "place_name": self.place_name_edit.text().strip(), + "region_geojson_path": self.region_path_edit.text().strip(), + "road_geojson_path": self.road_path_edit.text().strip(), + "spacing": float(self.spacing_edit.text() or "100"), + "min_distance": float(self.min_dist_edit.text() or "50"), + "points_layer_path": self.planner_points_out_edit.text().strip(), + "mapillary_token": self.token_edit.text().strip() or os.environ.get("MAPILLARY_ACCESS_TOKEN", ""), + "mapillary_points_path": self.mapillary_points_edit.text().strip(), + "mapillary_images_output_dir": self.mapillary_out_edit.text().strip(), + "search_radius": float(self.radius_edit.text() or "150"), + "mapillary_max_workers": int(self.workers_spin.value()), + "clip_model_names": model_tuple, + "torch_device": self.device_combo.currentData(), + "prefilter_image_folder": self.prefilter_image_folder_edit.text().strip(), + "prefilter_rejected_folder": self.prefilter_rejected_edit.text().strip(), + "prefilter_pos_prompts": self.prefilter_pos_edit.toPlainText(), + "prefilter_neg_prompts": self.prefilter_neg_edit.toPlainText(), + "filter_threshold": float(self.threshold_slider.value()), + "beta_sigmoid": float(self.beta_spin.value()), + "vit_images_dir": self.vit_images_dir_edit.text().strip(), + "vit_model_path": self.vit_model_path_edit.text().strip(), + "vit_calibrators_dir": self.vit_calibrators_edit.text().strip(), + "vit_output_layer_path": self.vit_output_path_edit.text().strip(), + "vit_output_layer_name": self.vit_output_layer_name_edit.text().strip(), + "vit_model_name": self.vit_model_name_edit.text().strip(), + "vit_image_size": int(self.vit_image_size_spin.value()), + "vit_batch_size": int(self.vit_batch_size_spin.value()), + "vit_torch_device": self.vit_device_combo.currentData(), + } + ) + self.pipeline.base_dir = Path(self.pipeline.config["base_dir"]) + image_output_dir = (self.pipeline.config.get("mapillary_images_output_dir") or "").strip() + if image_output_dir: + self.pipeline.raw_dir = Path(image_output_dir).expanduser().resolve() + else: + # Planner default output lives under base_dir/images/raw. + self.pipeline.raw_dir = self.pipeline.base_dir / "images" / "raw" + self.pipeline.rejected_dir = self.pipeline.base_dir / "images" / "rejected" + self.pipeline.results_dir = self.pipeline.base_dir / "results" + self.pipeline.ensure_directories() + + def _set_busy(self, busy: bool) -> None: + """ + Run set busy. + + :param busy: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _set_busy(busy) + Out: UI/application state updated as intended. + """ + self.progress_bar.setRange(0, 0 if busy else 100) + if not busy: + self.progress_bar.setValue(0) + for run_button in self.run_buttons: + run_button.setDisabled(busy) + + def _run_async(self, task_fn: Callable[[], Any], on_ok: Callable[[Any], None] | None = None) -> None: + """ + Run run async. + + :param task_fn: See caller/context. + :param on_ok: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _run_async(task_fn, on_ok) + Out: UI/application state updated as intended. + """ + if self._worker is not None and self._worker.isRunning(): + logging.getLogger(__name__).warning("An operation is already running.") + return + self._apply_config_from_ui() + self._set_busy(True) + + self._worker = StepThread(task_fn, self) + + def _done(result: Any, error_message: str) -> None: + """ + Run done. + + :param result: See caller/context. + :param error_message: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _done(result, error_message) + Out: UI/application state updated as intended. + """ + self._set_busy(False) + if error_message: + logging.getLogger(__name__).error("Worker thread: %s", error_message) + elif on_ok is not None: + # Marshal callbacks back onto the GUI event loop. + QTimer.singleShot(0, lambda: on_ok(result)) + self._worker = None + + self._worker.finished.connect(_done) + self._worker.start() + + def _refresh_map_after_points(self) -> None: + """ + Run refresh map after points. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _refresh_map_after_points() + Out: UI/application state updated as intended. + """ + self.map_canvas.update_planner_layers(self.pipeline.roads_gdf, self.pipeline.points) + + def _refresh_map_after_eval(self) -> None: + """ + Run refresh map after eval. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _refresh_map_after_eval() + Out: UI/application state updated as intended. + """ + self.map_canvas.update_eval_layer(self.pipeline.roads_gdf, self.pipeline.evaluation_results) + evaluation_results = self.pipeline.evaluation_results + if evaluation_results: + self._append_data_science_section( + "ViT scoring (fine-tuned)", + format_vit_summary( + evaluation_results, + pipeline_config=self.pipeline.config, + default_results_dir=self.pipeline.results_dir, + ), + ) + + def _on_sampling_points_done(self, count: Any) -> None: + """ + Run on sampling points done. + + :param count: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _on_sampling_points_done(count) + Out: UI/application state updated as intended. + """ + self._refresh_map_after_points() + out = (self.pipeline.config.get("points_layer_path") or "").strip() + path_disp = str(Path(out).resolve()) if out else "(unknown)" + generated_count = int(count) if count is not None else 0 + self._append_data_science_section( + "Sampling points", + [ + f"Generated points: {generated_count}", + f"Output path: {path_disp}", + ], + ) + + def on_run_planner(self) -> None: + """ + Run on run planner. + + :return: Result of this step or updated UI/application state. + + Example:: + In: on_run_planner() + Out: UI/application state updated as intended. + """ + self._run_async( + self.pipeline.step_1_generate_points, + on_ok=self._on_sampling_points_done, + ) + + def _on_download_done(self, stats: Any) -> None: + """ + Run on download done. + + :param stats: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _on_download_done(stats) + Out: UI/application state updated as intended. + """ + self._refresh_map_after_points() + if isinstance(stats, dict): + self._append_data_science_section("Mapillary download", format_download_summary(stats)) + + def on_run_download(self) -> None: + """ + Run on run download. + + :return: Result of this step or updated UI/application state. + + Example:: + In: on_run_download() + Out: UI/application state updated as intended. + """ + self._run_async( + self.pipeline.step_2_download_images, + on_ok=self._on_download_done, + ) + + def _on_prefilter_done(self, stats: Any) -> None: + """ + Run on prefilter done. + + :param stats: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _on_prefilter_done(stats) + Out: UI/application state updated as intended. + """ + self._refresh_map_after_points() + if isinstance(stats, dict): + self._append_data_science_section("CLIP prefilter", format_prefilter_summary(stats)) + + def on_run_prefilter(self) -> None: + """ + Run on run prefilter. + + :return: Result of this step or updated UI/application state. + + Example:: + In: on_run_prefilter() + Out: UI/application state updated as intended. + """ + self._run_async( + self.pipeline.step_3_prefilter, + on_ok=self._on_prefilter_done, + ) + + def on_run_vit_evaluate(self) -> None: + """ + Run on run vit evaluate. + + :return: Result of this step or updated UI/application state. + + Example:: + In: on_run_vit_evaluate() + Out: UI/application state updated as intended. + """ + self._run_async( + self.pipeline.step_6_evaluate_vit, + on_ok=lambda _result: self._refresh_map_after_eval(), + ) + + @staticmethod + def on_run_export(_checked: bool = False) -> None: + """ + Run on run export. + + :param _checked: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: on_run_export(_checked) + Out: UI/application state updated as intended. + """ + logging.getLogger(__name__).warning("Export UI is not enabled yet. This tab is intentionally empty for now.") + + def on_run_euler_routes(self) -> None: + """ + Run on run euler routes. + + :return: Result of this step or updated UI/application state. + + Example:: + In: on_run_euler_routes() + Out: UI/application state updated as intended. + """ + route_source = self.route_source_combo.currentData() + kwargs: dict[str, Any] = { + "grid_size": (int(self.route_grid_cols.value()), int(self.route_grid_rows.value())), + "output_dir": self.route_out_edit.text().strip() or "routes_chinese_postman_gpx", + "consolidate_tolerance_m": float(self.route_consolidate_tol.value()), + "use_cache": self.route_cache_check.isChecked(), + } + if route_source == "place": + city = self.route_city_edit.text().strip() + if not city: + logging.getLogger(__name__).warning("Enter a city / place name.") + return + kwargs["city_name"] = city + kwargs["region_geojson_path"] = None + kwargs["road_geojson_path"] = None + elif route_source == "region": + region_path = self.route_region_path_edit.text().strip() + if not region_path: + logging.getLogger(__name__).warning("Select a region polygon GeoJSON file.") + return + kwargs["region_geojson_path"] = region_path + kwargs["city_name"] = None + kwargs["road_geojson_path"] = None + elif route_source == "roads": + roads_path = self.route_roads_path_edit.text().strip() + if not roads_path: + logging.getLogger(__name__).warning("Select a road network GeoJSON file.") + return + kwargs["road_geojson_path"] = roads_path + kwargs["city_name"] = None + kwargs["region_geojson_path"] = None + else: + logging.getLogger(__name__).error("Unknown route source: %s", route_source) + return + + def task() -> EulerRoutesResult: + """ + Run task. + + :return: Result of this step or updated UI/application state. + + Example:: + In: task() + Out: UI/application state updated as intended. + """ + return generate_clean_routes(**kwargs) + + self._run_async(task, on_ok=self._on_euler_routes_done) + + def _on_euler_routes_done(self, result: Any) -> None: + """ + Run on euler routes done. + + :param result: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _on_euler_routes_done(result) + Out: UI/application state updated as intended. + """ + if not isinstance(result, EulerRoutesResult): + return + self._last_euler_result = result + polylines = [list(polyline) for polyline in result.polylines_wgs84] + self.map_canvas.update_euler_layer(polylines) + self._append_data_science_section( + "Chinese postman / GPX drive routes", + format_euler_routes_summary(result), + ) diff --git a/src/uq_desktop_processor/gui/shell/explorer/sources.py b/src/uq_desktop_processor/gui/shell/explorer/sources.py new file mode 100644 index 0000000..26ade4a --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/explorer/sources.py @@ -0,0 +1,44 @@ +""" +Defines map layer sources and GeoJSON loading for the explorer map. +""" + +from PySide6.QtWidgets import QComboBox, QLabel + +from uq_desktop_processor.gui.shell.constants import SOURCE_INPUT_STACK_PAGE_ORDER +from uq_desktop_processor.gui.widgets import CompactStackedWidget + + +class SourceInputsMixin: + """ + SourceInputsMixin UI helper class. + """ + + @staticmethod + def _apply_source_input_page( + combo: QComboBox, + stack: CompactStackedWidget, + field_label: QLabel, + labels: dict[str, str], + ) -> None: + """ + Run apply source input page. + + :param combo: See caller/context. + :param stack: See caller/context. + :param field_label: See caller/context. + :param labels: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _apply_source_input_page(combo, stack, field_label, labels) + Out: UI/application state updated as intended. + """ + selected_source = combo.currentData() + source_key = str(selected_source) if selected_source is not None else "place" + try: + page_index = SOURCE_INPUT_STACK_PAGE_ORDER.index(source_key) + except ValueError: + page_index = 0 + source_key = "place" + stack.setCurrentIndex(page_index) + field_label.setText(labels[source_key]) diff --git a/src/uq_desktop_processor/gui/shell/explorer/window.py b/src/uq_desktop_processor/gui/shell/explorer/window.py new file mode 100644 index 0000000..8e14025 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/explorer/window.py @@ -0,0 +1,176 @@ +""" +Main explorer window: layout, menus, and coordination of map and tools. +""" + +import logging + +from PySide6.QtGui import QIcon +from PySide6.QtWidgets import ( + QButtonGroup, + QCheckBox, + QComboBox, + QDoubleSpinBox, + QFrame, + QLabel, + QLineEdit, + QMainWindow, + QPlainTextEdit, + QProgressBar, + QPushButton, + QSlider, + QSpinBox, + QSplitter, + QStackedWidget, + QTextEdit, + QVBoxLayout, +) + +from uq_desktop_processor.gui.paths import APP_ICON_PATH +from uq_desktop_processor.gui.shell.constants import EULER_SOURCE_FIELD_LABELS, PLANNER_SOURCE_FIELD_LABELS +from uq_desktop_processor.gui.shell.explorer.console import ConsoleMixin +from uq_desktop_processor.gui.shell.explorer.dialogs import DialogsMixin +from uq_desktop_processor.gui.shell.explorer.modules import ModulesMixin +from uq_desktop_processor.gui.shell.explorer.pipeline import PipelineMixin +from uq_desktop_processor.gui.shell.explorer.sources import SourceInputsMixin +from uq_desktop_processor.gui.shell.logging_bridge import LogBridge, QtLogHandler +from uq_desktop_processor.gui.shell.ui.main_frame import build_main_frame +from uq_desktop_processor.gui.shell.worker import StepThread +from uq_desktop_processor.gui.styles.theme import NEON_STYLE +from uq_desktop_processor.gui.widgets import CompactStackedWidget, DeckMapWidget, NeonPanel +from uq_desktop_processor.pipeline import UrbanQualityAIPipeline +from uq_desktop_processor.street_view_analysis import EulerRoutesResult + + +class UrbanQualityAIExplorer( + QMainWindow, + ConsoleMixin, + DialogsMixin, + SourceInputsMixin, + PipelineMixin, + ModulesMixin, +): + """Main window; shell UI is built by ``urban_quality_ai.gui.shell.ui``.""" + + sidebar: QFrame + button_group: QButtonGroup + main_splitter: QSplitter + tool_container: QFrame + tool_layout: QVBoxLayout + stacked_tools: QStackedWidget + map_container: QFrame + map_canvas: DeckMapWidget + right_panel: QFrame + ai_vision_box: NeonPanel + metrics_text: QTextEdit + logs_box: NeonPanel + console: QTextEdit + progress_bar: QProgressBar + route_source_combo: QComboBox + _route_input_stack: CompactStackedWidget + route_city_edit: QLineEdit + route_region_path_edit: QLineEdit + route_roads_path_edit: QLineEdit + _route_input_field_label: QLabel + route_grid_cols: QSpinBox + route_grid_rows: QSpinBox + route_out_edit: QLineEdit + route_consolidate_tol: QDoubleSpinBox + route_cache_check: QCheckBox + planner_source_combo: QComboBox + _planner_input_stack: CompactStackedWidget + place_name_edit: QLineEdit + region_path_edit: QLineEdit + road_path_edit: QLineEdit + _planner_input_field_label: QLabel + spacing_edit: QLineEdit + min_dist_edit: QLineEdit + planner_points_out_edit: QLineEdit + token_edit: QLineEdit + mapillary_points_edit: QLineEdit + mapillary_out_edit: QLineEdit + radius_edit: QLineEdit + workers_spin: QSpinBox + prefilter_image_folder_edit: QLineEdit + prefilter_rejected_edit: QLineEdit + model_combo: QComboBox + device_combo: QComboBox + threshold_slider: QSlider + threshold_label: QLabel + beta_spin: QDoubleSpinBox + prefilter_pos_edit: QPlainTextEdit + prefilter_neg_edit: QPlainTextEdit + vit_images_dir_edit: QLineEdit + vit_model_path_edit: QLineEdit + vit_calibrators_edit: QLineEdit + vit_output_path_edit: QLineEdit + vit_output_layer_name_edit: QLineEdit + vit_model_name_edit: QLineEdit + vit_image_size_spin: QSpinBox + vit_batch_size_spin: QSpinBox + vit_device_combo: QComboBox + run_buttons: list[QPushButton] + + def __init__(self) -> None: + """ + Run init . + + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__() + Out: UI/application state updated as intended. + """ + super().__init__() + self.setWindowTitle("UrbanQuality-AI 2026") + self.setWindowIcon(QIcon(str(APP_ICON_PATH))) + self.resize(1400, 850) + self.setStyleSheet(NEON_STYLE) + + self.pipeline = UrbanQualityAIPipeline() + self.current_active_module = -1 + self._worker: StepThread | None = None + self.run_buttons = [] + self._last_euler_result: EulerRoutesResult | None = None + + self._log_bridge = LogBridge() + self._log_bridge.append_text.connect(self._append_console) + self._qt_log_handler = QtLogHandler(self._log_bridge) + self._qt_log_handler.setLevel(logging.INFO) + self._qt_log_handler.setFormatter(logging.Formatter("%(levelname)s %(name)s: %(message)s")) + logging.getLogger().addHandler(self._qt_log_handler) + + build_main_frame(self) + + def on_route_source_changed(self) -> None: + """ + Run on route source changed. + + :return: Result of this step or updated UI/application state. + + Example:: + In: on_route_source_changed() + Out: UI/application state updated as intended. + """ + self._apply_source_input_page( + self.route_source_combo, + self._route_input_stack, + self._route_input_field_label, + EULER_SOURCE_FIELD_LABELS, + ) + + def on_planner_source_changed(self) -> None: + """ + Run on planner source changed. + + :return: Result of this step or updated UI/application state. + + Example:: + In: on_planner_source_changed() + Out: UI/application state updated as intended. + """ + self._apply_source_input_page( + self.planner_source_combo, + self._planner_input_stack, + self._planner_input_field_label, + PLANNER_SOURCE_FIELD_LABELS, + ) diff --git a/src/uq_desktop_processor/gui/shell/formatters.py b/src/uq_desktop_processor/gui/shell/formatters.py new file mode 100644 index 0000000..322f5d1 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/formatters.py @@ -0,0 +1,164 @@ +""" +Small string formatting helpers for pipeline status and shell UI labels. +""" + +from pathlib import Path +from typing import Any + +import numpy as np + +from uq_desktop_processor.gui.map_view.geo import polyline_geodesic_length_m +from uq_desktop_processor.street_view_analysis import EulerRoutesResult + + +def format_euler_routes_summary(result: EulerRoutesResult) -> list[str]: + """ + Run format euler routes summary. + + :param result: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: format_euler_routes_summary(result) + Out: UI/application state updated as intended. + """ + file_count = len(result.gpx_paths) + polylines = result.polylines_wgs84 + segment_lengths_m = [polyline_geodesic_length_m(polyline) for polyline in polylines] + total_length_m = sum(segment_lengths_m) + lines: list[str] = [ + f"Output directory: {result.output_dir}", + f"GPX files written: {file_count}", + f"Route segments (polylines): {len(polylines)}", + ] + for segment_index, segment_length_m in enumerate(segment_lengths_m, start=1): + lines.append(f" Segment {segment_index}: {segment_length_m / 1000.0:.3f} km") + lines.append(f"Total length (all segments): {total_length_m / 1000.0:.3f} km") + return lines + + +def format_download_summary(stats: dict[str, Any]) -> list[str]: + """ + Run format download summary. + + :param stats: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: format_download_summary(stats) + Out: UI/application state updated as intended. + """ + point_count = int(stats.get("point_count") or 0) + downloaded_count = int(stats.get("downloaded") or 0) + elapsed = float(stats.get("elapsed_s") or 0.0) + output_folder = str(stats.get("output_folder") or "") + images_per_second = float(stats.get("images_per_second") or 0.0) + failed_messages: list[str] = list(stats.get("failed_messages") or []) + lines = [ + f"Points processed: {point_count}", + f"Images saved: {downloaded_count}", + f"Output path: {output_folder}", + f"Elapsed: {elapsed:.1f} s", + f"Mean throughput (saved images / s): {images_per_second:.2f}", + ] + if failed_messages: + max_show = 12 + lines.append(f"Not downloaded / failed ({len(failed_messages)}):") + for failed_message in failed_messages[:max_show]: + lines.append(f" • {failed_message}") + if len(failed_messages) > max_show: + lines.append(f" … and {len(failed_messages) - max_show} more") + else: + lines.append("Failures: none") + return lines + + +def format_prefilter_summary(stats: dict[str, Any]) -> list[str]: + """ + Run format prefilter summary. + + :param stats: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: format_prefilter_summary(stats) + Out: UI/application state updated as intended. + """ + summary = stats.get("summary") or {} + rejected_folder = stats.get("rejected_folder") or "" + rejected_count = int(summary.get("rejected") or 0) + kept_count = int(summary.get("kept") or 0) + model_name = stats.get("model_name") or "" + return [ + f"CLIP model: {model_name}", + f"Rejected (moved): {rejected_count}", + f"Kept: {kept_count}", + f"Rejected folder: {rejected_folder}", + ] + + +def format_vit_summary( + results: dict[str, Any], + *, + pipeline_config: dict[str, Any], + default_results_dir: Path, +) -> list[str]: + """ + Run format vit summary. + + :param results: See caller/context. + :param pipeline_config: See caller/context. + :param default_results_dir: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: format_vit_summary(results) + Out: UI/application state updated as intended. + """ + out_spec = (pipeline_config.get("vit_output_layer_path") or "").strip() + if out_spec: + out_path = str(Path(out_spec).expanduser().resolve()) + else: + out_path = str((default_results_dir / "vit_finetuned_scores.gpkg").resolve()) + model = str(results.get("model_name") or "") + images = results.get("images") or [] + order = list(results.get("order") or []) + checkpoint_path = (pipeline_config.get("vit_model_path") or "").strip() + checkpoint_line = str(Path(checkpoint_path).expanduser().resolve()) if checkpoint_path else "(not set)" + calibrators_spec = (pipeline_config.get("vit_calibrators_dir") or "").strip() + calibrators_line = str(Path(calibrators_spec).expanduser().resolve()) if calibrators_spec else "(calibration off)" + arch = (pipeline_config.get("vit_model_name") or "").strip() + image_size = int(pipeline_config.get("vit_image_size") or 224) + batch_size = int(pipeline_config.get("vit_batch_size") or 32) + torch_device = str(pipeline_config.get("vit_torch_device") or "auto") + lines: list[str] = [ + f"Output path: {out_path}", + f"Model (architecture): {arch}", + f"Weights file: {checkpoint_line}", + f"Calibrators: {calibrators_line}", + f"Inference: image_size={image_size}, batch_size={batch_size}, device={torch_device}", + f"Readout model label: {model}", + f"Images scored: {len(images)}", + ] + for cat in order: + vals: list[float] = [] + for im in images: + block = (im.get("categories") or {}).get(cat) or {} + if "probability_pct" in block: + vals.append(float(block["probability_pct"])) + if not vals: + continue + arr = np.array(vals, dtype=np.float64) + lo = float(arr.min()) + hi = float(arr.max()) + lines.append(f" {cat}: avg={float(arr.mean()):.2f}%, min={lo:.2f}%, max={hi:.2f}%, range={hi - lo:.2f}%") + average_overall_pct = results.get("average_overall_pct") + if average_overall_pct is not None: + lines.append(f"Overall (mean of per-image means): {float(average_overall_pct):.2f}%") + skipped_images = results.get("skipped_images") or [] + if skipped_images: + lines.append(f"Skipped images: {len(skipped_images)}") + warnings = results.get("warnings") or [] + if warnings: + lines.append("Warnings: " + "; ".join(str(warning_message) for warning_message in warnings)) + return lines diff --git a/src/uq_desktop_processor/gui/shell/logging_bridge.py b/src/uq_desktop_processor/gui/shell/logging_bridge.py new file mode 100644 index 0000000..ceb48ca --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/logging_bridge.py @@ -0,0 +1,54 @@ +""" +Forwards Python logging records into Qt text widgets for in-app log panes. +""" + +import logging + +from PySide6.QtCore import QObject, Signal + + +class LogBridge(QObject): + """ + LogBridge UI helper class. + """ + + append_text = Signal(str) + + +class QtLogHandler(logging.Handler): + """ + QtLogHandler UI helper class. + """ + + def __init__(self, bridge: LogBridge) -> None: + """ + Run init . + + :param bridge: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__(bridge) + Out: UI/application state updated as intended. + """ + super().__init__() + self._bridge = bridge + + def emit(self, record: logging.LogRecord) -> None: + """ + Run emit. + + :param record: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: emit(record) + Out: UI/application state updated as intended. + """ + try: + formatted_message = self.format(record) + self._bridge.append_text.emit(formatted_message) + except (KeyboardInterrupt, SystemExit): + raise + except (RuntimeError, ValueError, TypeError, AttributeError): + self.handleError(record) diff --git a/src/uq_desktop_processor/gui/shell/ui/__init__.py b/src/uq_desktop_processor/gui/shell/ui/__init__.py new file mode 100644 index 0000000..46a4359 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/__init__.py @@ -0,0 +1,7 @@ +""" +GUI module: init . +""" + +from .main_frame import build_main_frame + +__all__ = ["build_main_frame"] diff --git a/src/uq_desktop_processor/gui/shell/ui/main_frame.py b/src/uq_desktop_processor/gui/shell/ui/main_frame.py new file mode 100644 index 0000000..f1c8595 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/main_frame.py @@ -0,0 +1,142 @@ +""" +Primary application frame hosting the stacked tool pages and central splitter. +""" + +from typing import TYPE_CHECKING + +from PySide6.QtCore import Qt +from PySide6.QtWidgets import ( + QButtonGroup, + QFrame, + QHBoxLayout, + QLabel, + QProgressBar, + QPushButton, + QSplitter, + QStackedWidget, + QTextEdit, + QVBoxLayout, + QWidget, +) + +from uq_desktop_processor.gui.shell.ui.module_pages import setup_module_pages +from uq_desktop_processor.gui.widgets import DeckMapWidget, NeonPanel + +if TYPE_CHECKING: + from uq_desktop_processor.gui.shell.explorer import UrbanQualityAIExplorer + + +def build_main_frame(explorer: "UrbanQualityAIExplorer") -> None: + """ + Run build main frame. + + :param explorer: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: build_main_frame(explorer) + Out: UI/application state updated as intended. + """ + central_widget = QWidget() + explorer.setCentralWidget(central_widget) + main_layout = QVBoxLayout(central_widget) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.setSpacing(0) + + top_layout = QHBoxLayout() + top_layout.setSpacing(0) + top_layout.setContentsMargins(0, 0, 0, 0) + + explorer.sidebar = QFrame() + explorer.sidebar.setObjectName("Sidebar") + explorer.sidebar.setFixedWidth(70) + sidebar_layout = QVBoxLayout(explorer.sidebar) + sidebar_layout.setAlignment(Qt.AlignmentFlag.AlignTop) + + explorer.button_group = QButtonGroup(explorer) + explorer.button_group.setExclusive(True) + + for panel_index, (icon, name) in enumerate( + [ + ("1", "Drive route"), + ("2", "Sampling points"), + ("3", "Mapillary download"), + ("4", "Panoramas → views"), + ("5", "CLIP prefilter"), + ("6", "ViT scoring"), + ("7", "Export results"), + ("8", "Validation"), + ] + ): + sidebar_button = QPushButton(icon) + sidebar_button.setObjectName("SidebarBtn") + sidebar_button.setCheckable(True) + sidebar_button.setToolTip(name) + sidebar_button.setFixedSize(70, 70) + sidebar_button.clicked.connect( + lambda _checked=False, panel_idx=panel_index: explorer.toggle_module_panel(panel_idx) + ) + explorer.button_group.addButton(sidebar_button, panel_index) + sidebar_layout.addWidget(sidebar_button) + + top_layout.addWidget(explorer.sidebar) + + explorer.main_splitter = QSplitter(Qt.Orientation.Horizontal) + explorer.main_splitter.setHandleWidth(6) + + explorer.tool_container = QFrame() + explorer.tool_container.setObjectName("ToolPanelContainer") + explorer.tool_container.setMinimumWidth(320) + explorer.tool_layout = QVBoxLayout(explorer.tool_container) + + explorer.stacked_tools = QStackedWidget() + explorer.tool_layout.addWidget(explorer.stacked_tools) + + setup_module_pages(explorer) + explorer.tool_container.setVisible(False) + + explorer.map_container = QFrame() + explorer.map_container.setObjectName("PanelBackground") + map_layout = QVBoxLayout(explorer.map_container) + map_header = QLabel("Live Map View") + map_layout.addWidget(map_header) + + explorer.map_canvas = DeckMapWidget() + map_layout.addWidget(explorer.map_canvas, 1) + + explorer.right_panel = QFrame() + explorer.right_panel.setMinimumWidth(300) + right_layout = QVBoxLayout(explorer.right_panel) + + explorer.ai_vision_box = NeonPanel("Data Science Console") + explorer.metrics_text = QTextEdit() + explorer.metrics_text.setReadOnly(True) + explorer.metrics_text.setObjectName("Console") + explorer.metrics_text.setMaximumHeight(160) + explorer.metrics_text.setPlaceholderText( + "Pipeline summaries will appear here. Use the tools on the left to run a step; each " + "completed run appends metrics and output paths below." + ) + explorer.ai_vision_box.main_layout.addWidget(explorer.metrics_text) + explorer.ai_vision_box.main_layout.addStretch() + right_layout.addWidget(explorer.ai_vision_box, 1) + + explorer.logs_box = NeonPanel("System Logs") + explorer.console = QTextEdit() + explorer.console.setObjectName("Console") + explorer.console.setReadOnly(True) + explorer.console.append("[INFO] System Ready...") + explorer.logs_box.main_layout.addWidget(explorer.console) + right_layout.addWidget(explorer.logs_box, 2) + + explorer.main_splitter.addWidget(explorer.tool_container) + explorer.main_splitter.addWidget(explorer.map_container) + explorer.main_splitter.addWidget(explorer.right_panel) + + explorer.main_splitter.setStretchFactor(1, 1) + + top_layout.addWidget(explorer.main_splitter) + main_layout.addLayout(top_layout, 1) + + explorer.progress_bar = QProgressBar() + main_layout.addWidget(explorer.progress_bar) diff --git a/src/uq_desktop_processor/gui/shell/ui/module_pages.py b/src/uq_desktop_processor/gui/shell/ui/module_pages.py new file mode 100644 index 0000000..ea506df --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/module_pages.py @@ -0,0 +1,47 @@ +""" +Builds or wires stacked module pages into the shell navigation model. +""" + +from typing import TYPE_CHECKING + +from uq_desktop_processor.gui.shell.ui.pages import clip_prefilter, drive_route, mapillary, sampling_points, vit_scoring +from uq_desktop_processor.gui.shell.ui.placeholders import add_placeholder_tool_page + +if TYPE_CHECKING: + from uq_desktop_processor.gui.shell.explorer import UrbanQualityAIExplorer + + +def setup_module_pages(explorer: "UrbanQualityAIExplorer") -> None: + """ + Run setup module pages. + + :param explorer: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: setup_module_pages(explorer) + Out: UI/application state updated as intended. + """ + drive_route.add_drive_route_page(explorer) + sampling_points.add_sampling_points_page(explorer) + mapillary.add_mapillary_page(explorer) + add_placeholder_tool_page( + explorer.stacked_tools, + explorer.run_buttons, + title="Panoramas → views", + description="This module is a placeholder and will be implemented later.", + ) + clip_prefilter.add_clip_prefilter_page(explorer) + vit_scoring.add_vit_scoring_page(explorer) + add_placeholder_tool_page( + explorer.stacked_tools, + explorer.run_buttons, + title="Export results", + description="This module is a placeholder and will be implemented later.", + ) + add_placeholder_tool_page( + explorer.stacked_tools, + explorer.run_buttons, + title="Validation", + description="This module is a placeholder and will be implemented later.", + ) diff --git a/src/uq_desktop_processor/gui/shell/ui/osm_source_block.py b/src/uq_desktop_processor/gui/shell/ui/osm_source_block.py new file mode 100644 index 0000000..78060d9 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/osm_source_block.py @@ -0,0 +1,90 @@ +""" +UI block for selecting and validating OSM / road-graph input sources. +""" + +from collections.abc import Callable +from dataclasses import dataclass + +from PySide6.QtWidgets import QComboBox, QHBoxLayout, QLabel, QLineEdit, QPushButton, QWidget + +from uq_desktop_processor.gui.widgets import CompactStackedWidget + +GEOJSON_FILTER = "GeoJSON (*.geojson *.json)" + + +@dataclass(frozen=True) +class OsmTripleSourceWidgets: + """ + OsmTripleSourceWidgets UI helper class. + """ + + combo: QComboBox + stack: CompactStackedWidget + field_label: QLabel + place_edit: QLineEdit + region_edit: QLineEdit + roads_edit: QLineEdit + + +def build_osm_triple_source_block( + pick_file: Callable[[QLineEdit, str], None], + field_labels: dict[str, str], + on_changed: Callable[[], None], + initial_place: str, + *, + roads_item_label: str, +) -> OsmTripleSourceWidgets: + """ + Run build osm triple source block. + + :param pick_file: See caller/context. + :param field_labels: See caller/context. + :param on_changed: See caller/context. + :param initial_place: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: build_osm_triple_source_block(pick_file, field_labels, on_changed, initial_place) + Out: UI/application state updated as intended. + """ + combo = QComboBox() + combo.addItem("Place name (OSM)", "place") + combo.addItem("Region polygon (GeoJSON)", "region") + combo.addItem(roads_item_label, "roads") + combo.currentIndexChanged.connect(on_changed) + + stack = CompactStackedWidget() + + page_place = QWidget() + lay_place = QHBoxLayout(page_place) + lay_place.setContentsMargins(0, 0, 0, 0) + place_edit = QLineEdit(initial_place) + lay_place.addWidget(place_edit) + stack.addWidget(page_place) + + page_region = QWidget() + lay_region = QHBoxLayout(page_region) + lay_region.setContentsMargins(0, 0, 0, 0) + region_edit = QLineEdit() + region_edit.setPlaceholderText("polygon.geojson …") + btn_region = QPushButton("…") + btn_region.setFixedWidth(36) + btn_region.clicked.connect(lambda: pick_file(region_edit, GEOJSON_FILTER)) + lay_region.addWidget(region_edit) + lay_region.addWidget(btn_region) + stack.addWidget(page_region) + + page_roads = QWidget() + lay_roads = QHBoxLayout(page_roads) + lay_roads.setContentsMargins(0, 0, 0, 0) + roads_edit = QLineEdit() + roads_edit.setPlaceholderText("roads.geojson …") + btn_roads = QPushButton("…") + btn_roads.setFixedWidth(36) + btn_roads.clicked.connect(lambda: pick_file(roads_edit, GEOJSON_FILTER)) + lay_roads.addWidget(roads_edit) + lay_roads.addWidget(btn_roads) + stack.addWidget(page_roads) + + field_label = QLabel(field_labels["place"]) + return OsmTripleSourceWidgets(combo, stack, field_label, place_edit, region_edit, roads_edit) diff --git a/src/uq_desktop_processor/gui/shell/ui/pages/__init__.py b/src/uq_desktop_processor/gui/shell/ui/pages/__init__.py new file mode 100644 index 0000000..f434173 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/pages/__init__.py @@ -0,0 +1 @@ +"""Individual stacked tool pages.""" diff --git a/src/uq_desktop_processor/gui/shell/ui/pages/clip_prefilter.py b/src/uq_desktop_processor/gui/shell/ui/pages/clip_prefilter.py new file mode 100644 index 0000000..6b1469a --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/pages/clip_prefilter.py @@ -0,0 +1,131 @@ +""" +Stacked tool page: CLIP prefilter (configure and run image filtering). +""" + +from pathlib import Path +from typing import TYPE_CHECKING + +from PySide6.QtCore import Qt +from PySide6.QtWidgets import ( + QComboBox, + QDoubleSpinBox, + QFormLayout, + QHBoxLayout, + QLabel, + QLineEdit, + QPlainTextEdit, + QPushButton, + QSlider, + QVBoxLayout, + QWidget, +) + +from uq_desktop_processor.evaluation.clip_prefilter.defaults import FILTER_PROMPTS as CLIP_PREFILTER_DEFAULT_PROMPTS +from uq_desktop_processor.gui.shell.constants import CLIP_MODEL_CHOICES +from uq_desktop_processor.gui.widgets import NeonPanel + +if TYPE_CHECKING: + from uq_desktop_processor.gui.shell.explorer import UrbanQualityAIExplorer + + +def add_clip_prefilter_page(explorer: "UrbanQualityAIExplorer") -> None: + """ + Run add clip prefilter page. + + :param explorer: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: add_clip_prefilter_page(explorer) + Out: UI/application state updated as intended. + """ + prefilter_page = QWidget() + page_layout = QVBoxLayout(prefilter_page) + prefilter_panel = NeonPanel( + "CLIP prefilter", + "Compare images to two phrase lists and move low-score matches to the rejected folder.", + ) + form_layout = QFormLayout() + + pre_in_row = QHBoxLayout() + explorer.prefilter_image_folder_edit = QLineEdit(str(Path("data") / "images" / "raw")) + explorer.prefilter_image_folder_edit.setPlaceholderText("Folder with .jpg / .png to filter") + btn_pf_in = QPushButton("…") + btn_pf_in.setFixedWidth(36) + btn_pf_in.clicked.connect(lambda: explorer.pick_folder(explorer.prefilter_image_folder_edit)) + pre_in_row.addWidget(explorer.prefilter_image_folder_edit) + pre_in_row.addWidget(btn_pf_in) + form_layout.addRow("Input: images folder", pre_in_row) + + pre_rej_row = QHBoxLayout() + explorer.prefilter_rejected_edit = QLineEdit("rejected") + explorer.prefilter_rejected_edit.setPlaceholderText("Sibling name (e.g. rejected) or full folder path") + btn_pf_rej = QPushButton("…") + btn_pf_rej.setFixedWidth(36) + btn_pf_rej.clicked.connect(lambda: explorer.pick_folder(explorer.prefilter_rejected_edit)) + pre_rej_row.addWidget(explorer.prefilter_rejected_edit) + pre_rej_row.addWidget(btn_pf_rej) + form_layout.addRow("Output: rejected folder", pre_rej_row) + + explorer.model_combo = QComboBox() + for label, names in CLIP_MODEL_CHOICES: + explorer.model_combo.addItem(label, names) + form_layout.addRow("CLIP model", explorer.model_combo) + + explorer.device_combo = QComboBox() + explorer.device_combo.addItem("Auto (CUDA if FORCE_CUDA=1)", "auto") + explorer.device_combo.addItem("CPU", "cpu") + explorer.device_combo.addItem("CUDA", "cuda") + form_layout.addRow("Torch device", explorer.device_combo) + + explorer.threshold_slider = QSlider(Qt.Orientation.Horizontal) + explorer.threshold_slider.setRange(0, 100) + explorer.threshold_slider.setValue(40) + explorer.threshold_label = QLabel("40 %") + explorer.threshold_slider.valueChanged.connect( + lambda slider_value: explorer.threshold_label.setText(f"{slider_value} %") + ) + th_row = QHBoxLayout() + th_row.addWidget(explorer.threshold_slider) + th_row.addWidget(explorer.threshold_label) + form_layout.addRow("Threshold", th_row) + + explorer.beta_spin = QDoubleSpinBox() + explorer.beta_spin.setRange(1.0, 100.0) + explorer.beta_spin.setValue(30.0) + explorer.beta_spin.setDecimals(1) + form_layout.addRow("Sigmoid β", explorer.beta_spin) + + pos_lbl = QLabel("Phrases: direction to KEEP (higher match)") + pos_lbl.setStyleSheet("font-weight: normal; text-transform: none; color: #afa;") + form_layout.addRow(pos_lbl) + explorer.prefilter_pos_edit = QPlainTextEdit() + explorer.prefilter_pos_edit.setPlaceholderText("One phrase per line…") + explorer.prefilter_pos_edit.setMinimumHeight(88) + explorer.prefilter_pos_edit.setPlainText("\n".join(CLIP_PREFILTER_DEFAULT_PROMPTS["pos"])) + form_layout.addRow(explorer.prefilter_pos_edit) + + neg_lbl = QLabel("Phrases: contrast / away from (lower → reject)") + neg_lbl.setStyleSheet("font-weight: normal; text-transform: none; color: #faa;") + form_layout.addRow(neg_lbl) + explorer.prefilter_neg_edit = QPlainTextEdit() + explorer.prefilter_neg_edit.setPlaceholderText("One phrase per line…") + explorer.prefilter_neg_edit.setMinimumHeight(88) + explorer.prefilter_neg_edit.setPlainText("\n".join(CLIP_PREFILTER_DEFAULT_PROMPTS["neg"])) + form_layout.addRow(explorer.prefilter_neg_edit) + + prefilter_panel.main_layout.addLayout(form_layout) + reset_prompts_row = QHBoxLayout() + btn_reset_pf_prompts = QPushButton("Reset phrases to defaults") + btn_reset_pf_prompts.clicked.connect(explorer.reset_clip_prefilter_prompts) + reset_prompts_row.addWidget(btn_reset_pf_prompts) + reset_prompts_row.addStretch() + prefilter_panel.main_layout.addLayout(reset_prompts_row) + prefilter_panel.main_layout.addStretch() + btn4 = QPushButton("PREFILTER (CLIP) ◆") + btn4.setObjectName("RunBtn") + btn4.clicked.connect(explorer.on_run_prefilter) + prefilter_panel.main_layout.addWidget(btn4) + page_layout.addWidget(prefilter_panel) + explorer.stacked_tools.addWidget(prefilter_page) + explorer.run_buttons.append(btn4) diff --git a/src/uq_desktop_processor/gui/shell/ui/pages/drive_route.py b/src/uq_desktop_processor/gui/shell/ui/pages/drive_route.py new file mode 100644 index 0000000..38665b0 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/pages/drive_route.py @@ -0,0 +1,99 @@ +""" +Stacked tool page: Chinese postman routes and GPX export for drive coverage. +""" + +from typing import TYPE_CHECKING + +from PySide6.QtWidgets import ( + QCheckBox, + QDoubleSpinBox, + QFormLayout, + QHBoxLayout, + QLineEdit, + QPushButton, + QSpinBox, + QVBoxLayout, + QWidget, +) + +from uq_desktop_processor.gui.shell.constants import EULER_SOURCE_FIELD_LABELS +from uq_desktop_processor.gui.shell.ui.osm_source_block import build_osm_triple_source_block +from uq_desktop_processor.gui.widgets import NeonPanel + +if TYPE_CHECKING: + from uq_desktop_processor.gui.shell.explorer import UrbanQualityAIExplorer + + +def add_drive_route_page(explorer: "UrbanQualityAIExplorer") -> None: + """ + Run add drive route page. + + :param explorer: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: add_drive_route_page(explorer) + Out: UI/application state updated as intended. + """ + p0 = QWidget() + l0 = QVBoxLayout(p0) + pan0 = NeonPanel( + "Drive route (Chinese postman/GPX)", + "Generate a drivable GPX route over the road network.", + ) + f0 = QFormLayout() + + euler = build_osm_triple_source_block( + explorer.pick_file, + EULER_SOURCE_FIELD_LABELS, + explorer.on_route_source_changed, + "Katowice, Poland", + roads_item_label="Road network (GeoJSON)", + ) + explorer.route_source_combo = euler.combo + explorer._route_input_stack = euler.stack + explorer.route_city_edit = euler.place_edit + explorer.route_region_path_edit = euler.region_edit + explorer.route_roads_path_edit = euler.roads_edit + explorer._route_input_field_label = euler.field_label + f0.addRow("Data source", explorer.route_source_combo) + f0.addRow(explorer._route_input_field_label, explorer._route_input_stack) + + explorer.route_grid_cols = QSpinBox() + explorer.route_grid_cols.setRange(1, 30) + explorer.route_grid_cols.setValue(3) + f0.addRow("Grid columns", explorer.route_grid_cols) + explorer.route_grid_rows = QSpinBox() + explorer.route_grid_rows.setRange(1, 30) + explorer.route_grid_rows.setValue(3) + f0.addRow("Grid rows", explorer.route_grid_rows) + + out_row = QHBoxLayout() + explorer.route_out_edit = QLineEdit("routes_chinese_postman_gpx") + explorer.route_out_edit.setPlaceholderText("Output folder for .gpx files") + btn_out = QPushButton("…") + btn_out.setFixedWidth(36) + btn_out.clicked.connect(lambda: explorer.pick_folder(explorer.route_out_edit)) + out_row.addWidget(explorer.route_out_edit) + out_row.addWidget(btn_out) + f0.addRow("Output folder", out_row) + + explorer.route_consolidate_tol = QDoubleSpinBox() + explorer.route_consolidate_tol.setRange(5.0, 80.0) + explorer.route_consolidate_tol.setValue(15.0) + explorer.route_consolidate_tol.setSuffix(" m") + f0.addRow("Consolidate tolerance", explorer.route_consolidate_tol) + explorer.route_cache_check = QCheckBox("Use OSMnx cache") + explorer.route_cache_check.setChecked(True) + f0.addRow("", explorer.route_cache_check) + + pan0.main_layout.addLayout(f0) + pan0.main_layout.addStretch() + btn0 = QPushButton("GENERATE ROUTE ▶") + btn0.setObjectName("RunBtn") + btn0.clicked.connect(explorer.on_run_euler_routes) + pan0.main_layout.addWidget(btn0) + l0.addWidget(pan0) + explorer.stacked_tools.addWidget(p0) + explorer.run_buttons.append(btn0) + explorer.on_route_source_changed() diff --git a/src/uq_desktop_processor/gui/shell/ui/pages/mapillary.py b/src/uq_desktop_processor/gui/shell/ui/pages/mapillary.py new file mode 100644 index 0000000..5ddefd1 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/pages/mapillary.py @@ -0,0 +1,77 @@ +""" +Stacked tool page: Mapillary image search and download around sampling points. +""" + +from pathlib import Path +from typing import TYPE_CHECKING + +from PySide6.QtWidgets import QFormLayout, QHBoxLayout, QLineEdit, QPushButton, QSpinBox, QVBoxLayout, QWidget + +from uq_desktop_processor.gui.widgets import NeonPanel + +if TYPE_CHECKING: + from uq_desktop_processor.gui.shell.explorer import UrbanQualityAIExplorer + + +def add_mapillary_page(explorer: "UrbanQualityAIExplorer") -> None: + """ + Run add mapillary page. + + :param explorer: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: add_mapillary_page(explorer) + Out: UI/application state updated as intended. + """ + p2 = QWidget() + l2 = QVBoxLayout(p2) + pan2 = NeonPanel( + "Mapillary download", + "Download street-level images for the generated sampling points.", + ) + f2 = QFormLayout() + explorer.token_edit = QLineEdit() + explorer.token_edit.setPlaceholderText("Paste token or set MAPILLARY_ACCESS_TOKEN") + f2.addRow("Mapillary token", explorer.token_edit) + + pts_in_row = QHBoxLayout() + explorer.mapillary_points_edit = QLineEdit(str(Path("data") / "results" / "sampling_points.geojson")) + explorer.mapillary_points_edit.setPlaceholderText(".geojson / .gpkg from point generation step") + btn_mapillary_pts = QPushButton("…") + btn_mapillary_pts.setFixedWidth(36) + btn_mapillary_pts.clicked.connect( + lambda: explorer.pick_file( + explorer.mapillary_points_edit, + "GeoJSON (*.geojson);;GeoPackage (*.gpkg)", + ) + ) + pts_in_row.addWidget(explorer.mapillary_points_edit) + pts_in_row.addWidget(btn_mapillary_pts) + f2.addRow("Input: point layer", pts_in_row) + + img_out_row = QHBoxLayout() + explorer.mapillary_out_edit = QLineEdit(str(Path("data") / "images" / "raw")) + explorer.mapillary_out_edit.setPlaceholderText("Folder for downloaded JPEGs (used by later CLIP steps)") + btn_mapillary_out = QPushButton("…") + btn_mapillary_out.setFixedWidth(36) + btn_mapillary_out.clicked.connect(lambda: explorer.pick_folder(explorer.mapillary_out_edit)) + img_out_row.addWidget(explorer.mapillary_out_edit) + img_out_row.addWidget(btn_mapillary_out) + f2.addRow("Output: image folder", img_out_row) + + explorer.radius_edit = QLineEdit("150") + f2.addRow("Search radius (m)", explorer.radius_edit) + explorer.workers_spin = QSpinBox() + explorer.workers_spin.setRange(1, 64) + explorer.workers_spin.setValue(20) + f2.addRow("Parallel workers", explorer.workers_spin) + pan2.main_layout.addLayout(f2) + pan2.main_layout.addStretch() + btn2 = QPushButton("DOWNLOAD IMAGES ⬇") + btn2.setObjectName("RunBtn") + btn2.clicked.connect(explorer.on_run_download) + pan2.main_layout.addWidget(btn2) + l2.addWidget(pan2) + explorer.stacked_tools.addWidget(p2) + explorer.run_buttons.append(btn2) diff --git a/src/uq_desktop_processor/gui/shell/ui/pages/sampling_points.py b/src/uq_desktop_processor/gui/shell/ui/pages/sampling_points.py new file mode 100644 index 0000000..d4065e7 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/pages/sampling_points.py @@ -0,0 +1,75 @@ +""" +Stacked tool page: generate and visualize road sampling points (GeoJSON output). +""" + +from typing import TYPE_CHECKING + +from PySide6.QtWidgets import QFormLayout, QHBoxLayout, QLineEdit, QPushButton, QVBoxLayout, QWidget + +from uq_desktop_processor.gui.shell.constants import PLANNER_SOURCE_FIELD_LABELS +from uq_desktop_processor.gui.shell.ui.osm_source_block import build_osm_triple_source_block +from uq_desktop_processor.gui.widgets import NeonPanel + +if TYPE_CHECKING: + from uq_desktop_processor.gui.shell.explorer import UrbanQualityAIExplorer + + +def add_sampling_points_page(explorer: "UrbanQualityAIExplorer") -> None: + """ + Run add sampling points page. + + :param explorer: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: add_sampling_points_page(explorer) + Out: UI/application state updated as intended. + """ + p1 = QWidget() + l1 = QVBoxLayout(p1) + pan1 = NeonPanel( + "Sampling points", + "Generate a point layer along roads for image sampling.", + ) + f1 = QFormLayout() + + planner = build_osm_triple_source_block( + explorer.pick_file, + PLANNER_SOURCE_FIELD_LABELS, + explorer.on_planner_source_changed, + "Katowice, Poland", + roads_item_label="Road network file (GeoJSON)", + ) + explorer.planner_source_combo = planner.combo + explorer._planner_input_stack = planner.stack + explorer.place_name_edit = planner.place_edit + explorer.region_path_edit = planner.region_edit + explorer.road_path_edit = planner.roads_edit + explorer._planner_input_field_label = planner.field_label + f1.addRow("Data source", explorer.planner_source_combo) + f1.addRow(explorer._planner_input_field_label, explorer._planner_input_stack) + + explorer.spacing_edit = QLineEdit("100") + f1.addRow("Distance between points (m)", explorer.spacing_edit) + explorer.min_dist_edit = QLineEdit("50") + f1.addRow("Min distance (m)", explorer.min_dist_edit) + points_out_row = QHBoxLayout() + explorer.planner_points_out_edit = QLineEdit("data/results/sampling_points.geojson") + explorer.planner_points_out_edit.setPlaceholderText("path and filename (.geojson / .gpkg)") + btn_points_out = QPushButton("…") + btn_points_out.setFixedWidth(36) + btn_points_out.clicked.connect(lambda: explorer.pick_save_points_layer(explorer.planner_points_out_edit)) + points_out_row.addWidget(explorer.planner_points_out_edit) + points_out_row.addWidget(btn_points_out) + f1.addRow("Output: point layer", points_out_row) + + pan1.main_layout.addLayout(f1) + pan1.main_layout.addStretch() + btn1 = QPushButton("GENERATE POINTS ▶") + btn1.setObjectName("RunBtn") + btn1.clicked.connect(explorer.on_run_planner) + pan1.main_layout.addWidget(btn1) + l1.addWidget(pan1) + explorer.stacked_tools.addWidget(p1) + explorer.run_buttons.append(btn1) + explorer.on_planner_source_changed() diff --git a/src/uq_desktop_processor/gui/shell/ui/pages/vit_scoring.py b/src/uq_desktop_processor/gui/shell/ui/pages/vit_scoring.py new file mode 100644 index 0000000..0c66d3f --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/pages/vit_scoring.py @@ -0,0 +1,113 @@ +""" +Stacked tool page: fine-tuned ViT scoring configuration and batch runs. +""" + +from typing import TYPE_CHECKING + +from PySide6.QtWidgets import ( + QComboBox, + QFormLayout, + QHBoxLayout, + QLineEdit, + QPushButton, + QSpinBox, + QVBoxLayout, + QWidget, +) + +from uq_desktop_processor.gui.widgets import NeonPanel + +if TYPE_CHECKING: + from uq_desktop_processor.gui.shell.explorer import UrbanQualityAIExplorer + + +def add_vit_scoring_page(explorer: "UrbanQualityAIExplorer") -> None: + """ + Run add vit scoring page. + + :param explorer: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: add_vit_scoring_page(explorer) + Out: UI/application state updated as intended. + """ + p5 = QWidget() + l5 = QVBoxLayout(p5) + pan5 = NeonPanel( + "ViT scoring (fine-tuned)", + "Score images with a fine-tuned ViT model and write a GeoPackage layer.", + ) + f5 = QFormLayout() + + imgs_row = QHBoxLayout() + explorer.vit_images_dir_edit = QLineEdit("") + explorer.vit_images_dir_edit.setPlaceholderText("folder with images (required)") + btn_imgs = QPushButton("…") + btn_imgs.setFixedWidth(36) + btn_imgs.clicked.connect(lambda: explorer.pick_folder(explorer.vit_images_dir_edit)) + imgs_row.addWidget(explorer.vit_images_dir_edit) + imgs_row.addWidget(btn_imgs) + f5.addRow("Images folder", imgs_row) + + model_row = QHBoxLayout() + explorer.vit_model_path_edit = QLineEdit("") + explorer.vit_model_path_edit.setPlaceholderText("model weights file (.pt/.pth) (required)") + btn_model = QPushButton("…") + btn_model.setFixedWidth(36) + btn_model.clicked.connect(lambda: explorer.pick_file(explorer.vit_model_path_edit, "Model (*.pt *.pth)")) + model_row.addWidget(explorer.vit_model_path_edit) + model_row.addWidget(btn_model) + f5.addRow("Model path", model_row) + + cal_row = QHBoxLayout() + explorer.vit_calibrators_edit = QLineEdit("") + explorer.vit_calibrators_edit.setPlaceholderText("(optional) folder with calibrators; empty = calibration OFF") + btn_cal = QPushButton("…") + btn_cal.setFixedWidth(36) + btn_cal.clicked.connect(lambda: explorer.pick_folder(explorer.vit_calibrators_edit)) + cal_row.addWidget(explorer.vit_calibrators_edit) + cal_row.addWidget(btn_cal) + f5.addRow("Calibrators dir", cal_row) + + vit_out_row = QHBoxLayout() + explorer.vit_output_path_edit = QLineEdit("") + explorer.vit_output_path_edit.setPlaceholderText("e.g. results/vit_scores.gpkg (include .gpkg)") + btn_vit_out = QPushButton("…") + btn_vit_out.setFixedWidth(36) + btn_vit_out.clicked.connect(lambda: explorer.pick_save_gpkg(explorer.vit_output_path_edit)) + vit_out_row.addWidget(explorer.vit_output_path_edit) + vit_out_row.addWidget(btn_vit_out) + f5.addRow("Output layer (.gpkg)", vit_out_row) + + explorer.vit_output_layer_name_edit = QLineEdit("vit_finetuned_scores") + f5.addRow("Layer name", explorer.vit_output_layer_name_edit) + + explorer.vit_model_name_edit = QLineEdit("vit_base_patch14_dinov2.lvd142m") + f5.addRow("Model name", explorer.vit_model_name_edit) + + explorer.vit_image_size_spin = QSpinBox() + explorer.vit_image_size_spin.setRange(128, 1024) + explorer.vit_image_size_spin.setValue(224) + f5.addRow("Image size", explorer.vit_image_size_spin) + + explorer.vit_batch_size_spin = QSpinBox() + explorer.vit_batch_size_spin.setRange(1, 256) + explorer.vit_batch_size_spin.setValue(32) + f5.addRow("Batch size", explorer.vit_batch_size_spin) + + explorer.vit_device_combo = QComboBox() + explorer.vit_device_combo.addItem("Auto (CUDA if FORCE_CUDA=1)", "auto") + explorer.vit_device_combo.addItem("CPU", "cpu") + explorer.vit_device_combo.addItem("CUDA", "cuda") + f5.addRow("Torch device", explorer.vit_device_combo) + + pan5.main_layout.addLayout(f5) + pan5.main_layout.addStretch() + btn5 = QPushButton("EVALUATE (ViT) ⚙") + btn5.setObjectName("RunBtn") + btn5.clicked.connect(explorer.on_run_vit_evaluate) + pan5.main_layout.addWidget(btn5) + l5.addWidget(pan5) + explorer.stacked_tools.addWidget(p5) + explorer.run_buttons.append(btn5) diff --git a/src/uq_desktop_processor/gui/shell/ui/placeholders.py b/src/uq_desktop_processor/gui/shell/ui/placeholders.py new file mode 100644 index 0000000..b42004b --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/ui/placeholders.py @@ -0,0 +1,38 @@ +""" +Placeholder pages and stub widgets for shell sections not yet implemented. +""" + +from PySide6.QtWidgets import QPushButton, QStackedWidget, QVBoxLayout, QWidget + +from uq_desktop_processor.gui.widgets import NeonPanel + + +def add_placeholder_tool_page( + stacked_tools: QStackedWidget, + run_buttons: list[QPushButton], + *, + title: str, + description: str, +) -> None: + """ + Run add placeholder tool page. + + :param stacked_tools: See caller/context. + :param run_buttons: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: add_placeholder_tool_page(stacked_tools, run_buttons) + Out: UI/application state updated as intended. + """ + page = QWidget() + layout = QVBoxLayout(page) + panel = NeonPanel(title, description) + panel.main_layout.addStretch() + btn = QPushButton("COMING SOON") + btn.setObjectName("RunBtn") + btn.setEnabled(False) + panel.main_layout.addWidget(btn) + layout.addWidget(panel) + stacked_tools.addWidget(page) + run_buttons.append(btn) diff --git a/src/uq_desktop_processor/gui/shell/worker.py b/src/uq_desktop_processor/gui/shell/worker.py new file mode 100644 index 0000000..79ee920 --- /dev/null +++ b/src/uq_desktop_processor/gui/shell/worker.py @@ -0,0 +1,47 @@ +""" +QThread-based workers for running pipeline steps without blocking the GUI. +""" + +from collections.abc import Callable +from typing import Any + +from PySide6.QtCore import QObject, QThread, Signal + + +class StepThread(QThread): + """ + StepThread UI helper class. + """ + + finished = Signal(object, str) + + def __init__(self, func: Callable[[], Any], parent: QObject | None = None) -> None: + """ + Run init . + + :param func: See caller/context. + :param parent: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__(func, parent) + Out: UI/application state updated as intended. + """ + super().__init__(parent) + self._func = func + + def run(self) -> None: + """ + Run run. + + :return: Result of this step or updated UI/application state. + + Example:: + In: run() + Out: UI/application state updated as intended. + """ + try: + result = self._func() + self.finished.emit(result, "") + except Exception as error: + self.finished.emit(None, str(error)) diff --git a/src/uq_desktop_processor/gui/styles/__init__.py b/src/uq_desktop_processor/gui/styles/__init__.py new file mode 100644 index 0000000..133aeb7 --- /dev/null +++ b/src/uq_desktop_processor/gui/styles/__init__.py @@ -0,0 +1,7 @@ +""" +GUI module: init . +""" + +from .theme import NEON_STYLE + +__all__ = ["NEON_STYLE"] diff --git a/src/uq_desktop_processor/gui/styles/theme.py b/src/uq_desktop_processor/gui/styles/theme.py new file mode 100644 index 0000000..3b0172b --- /dev/null +++ b/src/uq_desktop_processor/gui/styles/theme.py @@ -0,0 +1,225 @@ +""" +Neon-style Qt stylesheet (QSS) strings and palette for the UrbanQuality-AI GUI. +""" + +NEON_STYLE = """ +QMainWindow { + background-color: #050505; +} + +QFrame#Sidebar { + background-color: #0a0a0a; + border-right: 1px solid #00f2ff; +} + +QFrame#PanelBackground { + background-color: #0d0d0d; + border: 1px solid #1a1a1a; + border-radius: 10px; +} + +QSplitter::handle { + background-color: #1a1a1a; +} + +QSplitter::handle:horizontal { + width: 4px; +} + +QSplitter::handle:hover { + background-color: #00f2ff; +} + +QLabel { + color: #00f2ff; + font-family: 'Segoe UI', sans-serif; + text-transform: uppercase; + font-weight: bold; + font-size: 10px; +} + +QLabel#PanelTitle { + font-size: 14px; + letter-spacing: 2px; + margin-bottom: 8px; + color: #fff; + border-bottom: 1px solid #00f2ff; + padding-bottom: 5px; +} + +QLabel#PanelSubtitle { + font-size: 11px; + font-weight: normal; + text-transform: none; + letter-spacing: 0px; + color: #9cf; + margin-top: 0px; + margin-bottom: 12px; +} + +QLineEdit, QComboBox, QSpinBox, QDoubleSpinBox, QPlainTextEdit { + background-color: #111; + border: 1px solid #333; + color: #fff; + padding: 8px; + border-radius: 2px; +} + +QAbstractSpinBox { + /* Reserve space for the right-side buttons so clicks don't land on the editor area. */ + padding-right: 24px; +} + +QAbstractSpinBox::up-button, QAbstractSpinBox::down-button { + subcontrol-origin: padding; + width: 18px; + border-left: 1px solid #333; +} + +QSpinBox::up-arrow, QDoubleSpinBox::up-arrow { + image: none; + width: 10px; + height: 10px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 7px solid #0b7a2a; +} + +QSpinBox::down-arrow, QDoubleSpinBox::down-arrow { + image: none; + width: 10px; + height: 10px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 7px solid #8a1f1f; +} + +QAbstractSpinBox::up-button { + subcontrol-position: top right; + height: 14px; + background-color: #151515; + border-bottom: 1px solid #262626; +} + +QAbstractSpinBox::down-button { + subcontrol-position: bottom right; + height: 14px; + background-color: #151515; + border-top: 1px solid #262626; +} + +QAbstractSpinBox::up-button:hover, QAbstractSpinBox::down-button:hover { + border-left: 1px solid #00f2ff; + background-color: #1f1f1f; +} + +QLineEdit:focus, QPlainTextEdit:focus { + border: 1px solid #00f2ff; +} + +QPushButton#SidebarBtn { + background-color: transparent; + border: none; + color: #444; + padding: 15px; + font-size: 20px; +} + +QPushButton#SidebarBtn:hover { + color: #00f2ff; +} + +QPushButton#SidebarBtn:checked { + color: #00f2ff; + background-color: #001a1a; + border-left: 3px solid #00f2ff; +} + +QPushButton#RunBtn { + background-color: #00f2ff; + color: #000; + font-weight: bold; + font-size: 11px; + padding: 12px; + border-radius: 5px; + margin-top: 10px; +} + +QPushButton#RunBtn:hover { + background-color: #55faff; +} + +QPushButton#RunBtn:disabled { + background-color: #333; + color: #666; +} + +QTextEdit#Console { + background-color: #050505; + border: 1px solid #1a1a1a; + color: #00ff41; + font-family: 'Consolas', monospace; + font-size: 11px; +} + +QProgressBar { + border: 1px solid #1a1a1a; + background-color: #0a0a0a; + text-align: center; + color: #fff; + height: 10px; +} + +QProgressBar::chunk { + background-color: #00f2ff; +} + +QFrame#MapLayerPanel { + background-color: rgba(10, 10, 10, 220); + border: 1px solid rgba(0, 242, 255, 0.28); + border-radius: 8px; + min-width: 168px; +} + +QLabel#MapLayerTitle { + color: #fff; + font-size: 11px; + letter-spacing: 1px; + padding: 6px 8px 2px 8px; +} + +QListWidget#MapLayerList { + background-color: #050505; + border: none; + color: #ccc; + font-size: 11px; + outline: none; +} + +QListWidget#MapLayerList::item { + padding: 6px 4px; + border-radius: 4px; +} + +QListWidget#MapLayerList::item:selected { + background-color: #001a1a; + color: #00f2ff; +} + +QListWidget#MapLayerList::item:hover:!active { + background-color: #111; +} + +QPushButton#LayerOrderUp, QPushButton#LayerOrderDown { + background-color: #111; + border: 1px solid #333; + color: #00f2ff; + font-size: 10px; + padding: 4px 6px; + border-radius: 3px; +} + +QPushButton#LayerOrderUp:hover, QPushButton#LayerOrderDown:hover { + border: 1px solid #00f2ff; +} +""" diff --git a/src/uq_desktop_processor/gui/widgets/__init__.py b/src/uq_desktop_processor/gui/widgets/__init__.py new file mode 100644 index 0000000..a3b3e76 --- /dev/null +++ b/src/uq_desktop_processor/gui/widgets/__init__.py @@ -0,0 +1,16 @@ +""" +GUI module: init . +""" + +from .deck_map import DeckMapWidget +from .map_layer_list import MapLayerListWidget +from .map_web_stack import MapWebStack +from .stacked import CompactStackedWidget, NeonPanel + +__all__ = [ + "CompactStackedWidget", + "DeckMapWidget", + "MapLayerListWidget", + "MapWebStack", + "NeonPanel", +] diff --git a/src/uq_desktop_processor/gui/widgets/deck_map/__init__.py b/src/uq_desktop_processor/gui/widgets/deck_map/__init__.py new file mode 100644 index 0000000..98e2669 --- /dev/null +++ b/src/uq_desktop_processor/gui/widgets/deck_map/__init__.py @@ -0,0 +1,7 @@ +""" +GUI module: init . +""" + +from .widget import DeckMapWidget + +__all__ = ["DeckMapWidget"] diff --git a/src/uq_desktop_processor/gui/widgets/deck_map/layer_panel.py b/src/uq_desktop_processor/gui/widgets/deck_map/layer_panel.py new file mode 100644 index 0000000..1784353 --- /dev/null +++ b/src/uq_desktop_processor/gui/widgets/deck_map/layer_panel.py @@ -0,0 +1,186 @@ +""" +Side panel UI for toggling and ordering PyDeck map layers. +""" + +from collections.abc import Callable +from typing import Any + +from PySide6.QtCore import Qt +from PySide6.QtWidgets import ( + QAbstractItemView, + QFrame, + QHBoxLayout, + QLabel, + QListWidgetItem, + QPushButton, + QVBoxLayout, + QWidget, +) + +from uq_desktop_processor.gui.widgets.map_layer_list import MapLayerListWidget + + +class LayerPanel: + """ + LayerPanel UI helper class. + """ + + _LAYER_ID_ROLE: int = int(Qt.ItemDataRole.UserRole) + + def __init__( + self, + parent: QWidget, + *, + layer_ids_top_first: list[str], + layer_labels: dict[str, str], + on_changed: Callable[[], None], + on_reordered: Callable[[], None], + on_move_up: Callable[[], None], + on_move_down: Callable[[], None], + ) -> None: + """ + Run init . + + :param parent: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__(parent) + Out: UI/application state updated as intended. + """ + self.layer_ids_top_first = layer_ids_top_first + self._layer_labels = layer_labels + self._on_changed = on_changed + self._on_reordered = on_reordered + + panel = QFrame(parent) + panel.setObjectName("MapLayerPanel") + panel_layout = QVBoxLayout(panel) + panel_layout.setContentsMargins(6, 4, 6, 6) + panel_layout.setSpacing(4) + + title = QLabel("Layers") + title.setObjectName("MapLayerTitle") + panel_layout.addWidget(title) + + self.list = MapLayerListWidget(panel) + self.list.setObjectName("MapLayerList") + self.list.setMaximumHeight(200) + self.list.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.list.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.list.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove) + self.list.setDefaultDropAction(Qt.DropAction.MoveAction) + self.list.setDragDropOverwriteMode(False) + self.list.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection) + self.list.setSpacing(2) + + for lid in layer_ids_top_first: + item = QListWidgetItem(layer_labels[lid]) + item.setData(self._LAYER_ID_ROLE, lid) + item.setFlags(Qt.ItemFlag.NoItemFlags) + self.list.addItem(item) + + self.list.itemChanged.connect(lambda _it: self._on_changed()) + self.list.model().rowsMoved.connect(lambda *_a: self._on_reordered()) + self.list.reordered.connect(lambda *_a: self._on_reordered()) + panel_layout.addWidget(self.list, 1) + + order_row = QHBoxLayout() + order_row.setSpacing(6) + btn_up = QPushButton("▲ Up") + btn_up.setObjectName("LayerOrderUp") + btn_up.setToolTip("Higher in the list = drawn above lower layers") + btn_up.clicked.connect(on_move_up) + btn_down = QPushButton("▼ Down") + btn_down.setObjectName("LayerOrderDown") + btn_down.clicked.connect(on_move_down) + order_row.addWidget(btn_up) + order_row.addWidget(btn_down) + panel_layout.addLayout(order_row) + + self.widget = panel + + def item_for_layer(self, lid: str) -> QListWidgetItem | None: + """ + Run item for layer. + + :param lid: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: item_for_layer(lid) + Out: UI/application state updated as intended. + """ + for row in range(self.list.count()): + it = self.list.item(row) + if it is not None and it.data(self._LAYER_ID_ROLE) == lid: + return it + return None + + def layer_order_top_to_bottom(self) -> list[str]: + """ + Run layer order top to bottom. + + :return: Result of this step or updated UI/application state. + + Example:: + In: layer_order_top_to_bottom() + Out: UI/application state updated as intended. + """ + out: list[str] = [] + for row in range(self.list.count()): + it = self.list.item(row) + if it is None: + continue + lid = it.data(self._LAYER_ID_ROLE) + if isinstance(lid, str): + out.append(lid) + return out + + def layer_checked(self, lid: str) -> bool: + """ + Run layer checked. + + :param lid: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: layer_checked(lid) + Out: UI/application state updated as intended. + """ + item = self.item_for_layer(lid) + if item is None: + return False + return item.checkState() == Qt.CheckState.Checked + + @staticmethod + def active_item_flags() -> Any: + """ + Run active item flags. + + :return: Result of this step or updated UI/application state. + + Example:: + In: active_item_flags() + Out: UI/application state updated as intended. + """ + return ( + Qt.ItemFlag.ItemIsEnabled + | Qt.ItemFlag.ItemIsSelectable + | Qt.ItemFlag.ItemIsUserCheckable + | Qt.ItemFlag.ItemIsDragEnabled + | Qt.ItemFlag.ItemIsDropEnabled + ) + + @staticmethod + def inactive_item_flags() -> Any: + """ + Run inactive item flags. + + :return: Result of this step or updated UI/application state. + + Example:: + In: inactive_item_flags() + Out: UI/application state updated as intended. + """ + return Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsDragEnabled diff --git a/src/uq_desktop_processor/gui/widgets/deck_map/layers.py b/src/uq_desktop_processor/gui/widgets/deck_map/layers.py new file mode 100644 index 0000000..0fcffa8 --- /dev/null +++ b/src/uq_desktop_processor/gui/widgets/deck_map/layers.py @@ -0,0 +1,273 @@ +""" +Constructs PyDeck layers from geodata and evaluation overlays with tooltips. +""" + +import json +import math +from typing import Any + +import geopandas as gpd +import pydeck as pdk + +from uq_desktop_processor.gui.map_view.constants import EULER_LINE_COLORS +from uq_desktop_processor.gui.map_view.data import ( + euler_polylines_for_display, + evaluation_scatter_data, + map_display_budgets, + red_yellow_green_rgba, + simplify_roads_gdf_for_map_display, +) + + +def roads_geojson_layer( + roads_gdf: gpd.GeoDataFrame | None, + *, + simplify_meters: float, + max_features: int, + line_rgba: tuple[int, int, int, int] = (68, 68, 68, 235), +) -> Any: + """ + Run roads geojson layer. + + :param roads_gdf: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: roads_geojson_layer(roads_gdf) + Out: UI/application state updated as intended. + """ + if roads_gdf is None or roads_gdf.empty: + return None + display_roads_gdf = simplify_roads_gdf_for_map_display( + roads_gdf.to_crs(4326), + simplify_meters=simplify_meters, + max_features=max_features, + ) + if display_roads_gdf.empty: + return None + data = json.loads(display_roads_gdf.to_json()) + return pdk.Layer( + "GeoJsonLayer", + id="roads-layer", + data=data, + stroked=True, + filled=False, + line_width_min_pixels=1, + get_line_color=list(line_rgba), + pickable=False, + opacity=0.8, + parameters={"depthTest": False}, + ) + + +def append_bounds_roads(roads_gdf: gpd.GeoDataFrame | None, lons: list[float], lats: list[float]) -> None: + """ + Run append bounds roads. + + :param roads_gdf: See caller/context. + :param lons: See caller/context. + :param lats: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: append_bounds_roads(roads_gdf, lons, lats) + Out: UI/application state updated as intended. + """ + if roads_gdf is None or roads_gdf.empty: + return + bounds = roads_gdf.to_crs(4326).total_bounds + lons.extend([float(bounds[0]), float(bounds[2])]) + lats.extend([float(bounds[1]), float(bounds[3])]) + + +def bounds_for_all_data( + *, + planner_roads: gpd.GeoDataFrame | None, + planner_points: list[tuple[float, float]], + euler_polylines: list[list[tuple[float, float]]], + eval_results: dict[str, Any] | None, +) -> tuple[list[float], list[float]]: + """ + Run bounds for all data. + + :return: Result of this step or updated UI/application state. + + Example:: + In: bounds_for_all_data() + Out: UI/application state updated as intended. + """ + lons: list[float] = [] + lats: list[float] = [] + append_bounds_roads(planner_roads, lons, lats) + for lat, lon in planner_points: + lons.append(float(lon)) + lats.append(float(lat)) + for poly in euler_polylines: + for lon, la in poly: + lons.append(float(lon)) + lats.append(float(la)) + if eval_results: + lon, la, _s = evaluation_scatter_data(eval_results) + for i in range(len(lon)): + lons.append(float(lon[i])) + lats.append(float(la[i])) + return lons, lats + + +def build_deck_layers( + *, + layer_order_top_to_bottom: list[str], + layer_checked: dict[str, bool], + layer_has_data: dict[str, bool], + planner_roads: gpd.GeoDataFrame | None, + planner_points: list[tuple[float, float]], + euler_polylines: list[list[tuple[float, float]]], + eval_results: dict[str, Any] | None, +) -> list[Any]: + """ + Run build deck layers. + + :return: Result of this step or updated UI/application state. + + Example:: + In: build_deck_layers() + Out: UI/application state updated as intended. + """ + order_bottom_first = list(reversed(layer_order_top_to_bottom)) + layers: list[Any] = [] + visible = sum(1 for lid, on in layer_checked.items() if on and layer_has_data.get(lid, False)) + budgets = map_display_budgets(visible) + common_params = {"depthTest": False} + + for lid in order_bottom_first: + if not layer_checked.get(lid, False) or not layer_has_data.get(lid, False): + continue + if lid == "roads": + layer = roads_geojson_layer( + planner_roads, + simplify_meters=float(budgets["road_simplify_meters"]), + max_features=int(budgets["road_max_features"]), + ) + if layer is not None: + layers.append(layer) + elif lid == "points": + rows = [{"lon": float(lon), "lat": float(lat)} for lat, lon in planner_points] + cap = int(budgets["points_max"]) + if len(rows) > cap: + step = max(1, math.ceil(len(rows) / cap)) + rows = rows[::step] + layers.append( + pdk.Layer( + "ScatterplotLayer", + id="points-layer", + data=rows, + get_position="[lon, lat]", + get_fill_color=[0, 242, 255, 195], + get_line_color=[0, 242, 255, 255], + stroked=True, + line_width_min_pixels=1, + get_radius=22, + radius_min_pixels=4, + radius_max_pixels=28, + pickable=True, + parameters=common_params, + ) + ) + elif lid == "euler": + paths: list[dict[str, Any]] = [] + euler_polys = euler_polylines_for_display( + euler_polylines, + int(budgets["euler_vertex_budget"]), + ) + for polyline_index, polyline in enumerate(euler_polys): + if len(polyline) < 2: + continue + rgb = EULER_LINE_COLORS[polyline_index % len(EULER_LINE_COLORS)] + path = [[float(lon), float(lat)] for lon, lat in polyline] + paths.append({"path": path, "name": f"Sector {polyline_index + 1}", "color": [*rgb, 235]}) + if paths: + layers.append( + pdk.Layer( + "PathLayer", + id="euler-layer", + data=paths, + get_path="path", + get_color="color", + width_min_pixels=3, + cap_rounded=True, + joint_rounded=True, + pickable=True, + parameters=common_params, + ) + ) + elif lid == "clip" and eval_results is not None: + lon_values, lat_values, scores = evaluation_scatter_data(eval_results) + if lon_values.size == 0: + continue + colors = red_yellow_green_rgba(scores) + rows = [ + { + "lon": float(lon_values[row_index]), + "lat": float(lat_values[row_index]), + "overall": round(float(scores[row_index]), 1), + "color": colors[row_index], + } + for row_index in range(len(lon_values)) + ] + cap = int(budgets["points_max"]) + if len(rows) > cap: + step = max(1, math.ceil(len(rows) / cap)) + rows = rows[::step] + layers.append( + pdk.Layer( + "ScatterplotLayer", + id="clip-layer", + data=rows, + get_position="[lon, lat]", + get_fill_color="color", + get_line_color=[0, 242, 255, 200], + stroked=True, + line_width_min_pixels=1, + get_radius=26, + radius_min_pixels=5, + radius_max_pixels=32, + pickable=True, + parameters=common_params, + ) + ) + return layers + + +def pick_tooltip(*, layer_checked: dict[str, bool], layer_has_data: dict[str, bool]) -> dict[str, Any]: + """ + Run pick tooltip. + + :return: Result of this step or updated UI/application state. + + Example:: + In: pick_tooltip() + Out: UI/application state updated as intended. + """ + pickable_on = sum( + 1 + for layer_id in ("clip", "euler", "points") + if layer_checked.get(layer_id, False) and layer_has_data.get(layer_id, False) + ) + if pickable_on > 1: + return { + "html": "Layer: {layer}
Configure the view in the panel", + "style": {"backgroundColor": "#111", "color": "#fff", "fontSize": "10px"}, + } + if layer_checked.get("clip", False) and layer_has_data.get("clip", False): + return { + "html": "Avg estimation
{overall}%", + "style": {"backgroundColor": "#111", "color": "#00ff41", "fontSize": "12px"}, + } + if layer_checked.get("euler", False) and layer_has_data.get("euler", False): + return { + "html": "{name}
Euler / GPX", + "style": {"backgroundColor": "#111", "color": "#00f2ff"}, + } + if layer_checked.get("points", False) and layer_has_data.get("points", False): + return {"html": "Point
{lat}, {lon}", "style": {"color": "#00f2ff"}} + return {} diff --git a/src/uq_desktop_processor/gui/widgets/deck_map/web.py b/src/uq_desktop_processor/gui/widgets/deck_map/web.py new file mode 100644 index 0000000..05f896f --- /dev/null +++ b/src/uq_desktop_processor/gui/widgets/deck_map/web.py @@ -0,0 +1,167 @@ +""" +Bridges PyDeck HTML output to Qt WebEngine (inject data, reload, callbacks). +""" + +import logging +from collections import deque +from collections.abc import Callable +from pathlib import Path +from typing import Any, cast + +import pydeck as pdk +from PySide6.QtCore import QTemporaryDir, QUrl +from PySide6.QtWebEngineWidgets import QWebEngineView + +from uq_desktop_processor.gui.map_view.constants import DECK_VIEW_STATE_JS +from uq_desktop_processor.gui.map_view.html import ( + expose_deck_instance_on_window, + inject_mapbox_gl_css, + parse_view_state_json, + sanitize_pydeck_inline_json_html, +) + + +class DeckWebController: + """ + DeckWebController UI helper class. + """ + + def __init__(self, web: QWebEngineView) -> None: + """ + Run init . + + :param web: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__(web) + Out: UI/application state updated as intended. + """ + self._web = web + self._deck_html_dir = QTemporaryDir() + if not self._deck_html_dir.isValid(): + logging.getLogger(__name__).warning("QTemporaryDir for map HTML is invalid; using setHtml.") + + self.map_commit_generation = 0 + self.deck_surface_ready = False + self._deck_expecting_html_load = False + self._deck_html_gen = 0 + self._deck_finish_queue: deque[int] = deque() + + self._web.loadFinished.connect(self._on_deck_html_load_finished) + + def _on_deck_html_load_finished(self, ok: bool) -> None: + """ + Run on deck html load finished. + + :param ok: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _on_deck_html_load_finished(ok) + Out: UI/application state updated as intended. + """ + if not self._deck_expecting_html_load or not self._deck_finish_queue: + return + finished_gen = self._deck_finish_queue.popleft() + if finished_gen != self._deck_html_gen: + return + self._deck_expecting_html_load = False + self.deck_surface_ready = bool(ok) + if not ok: + logging.getLogger(__name__).warning("WebEngine load failed.") + + def set_deck_page_html(self, deck: pdk.Deck) -> None: + """ + Run set deck page html. + + :param deck: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: set_deck_page_html(deck) + Out: UI/application state updated as intended. + """ + self._deck_html_gen += 1 + self._deck_finish_queue.append(self._deck_html_gen) + self._deck_expecting_html_load = True + self.deck_surface_ready = False + + raw = deck.to_html(as_string=True, css_background_color="#0d0d0d") + raw = sanitize_pydeck_inline_json_html(raw) + html = expose_deck_instance_on_window(inject_mapbox_gl_css(raw)) + if self._deck_html_dir.isValid(): + path = Path(self._deck_html_dir.path()) / "deck.html" + path.write_text(html, encoding="utf-8") + self._web.load(QUrl.fromLocalFile(str(path.resolve()))) + else: + self._web.setHtml(html, QUrl("https://cdn.jsdelivr.net/")) + + def clear_pending(self) -> None: + """ + Run clear pending. + + :return: Result of this step or updated UI/application state. + + Example:: + In: clear_pending() + Out: UI/application state updated as intended. + """ + self.deck_surface_ready = False + self._deck_expecting_html_load = False + self._deck_finish_queue.clear() + + def schedule_reload_preserving_view( + self, + *, + on_view: Callable[[pdk.ViewState | None, int], None], + ) -> None: + """ + Run schedule reload preserving view. + + :return: Result of this step or updated UI/application state. + + Example:: + In: schedule_reload_preserving_view() + Out: UI/application state updated as intended. + """ + self.map_commit_generation += 1 + gen = self.map_commit_generation + self._web.page().runJavaScript( + DECK_VIEW_STATE_JS, + lambda res, g=gen: self._on_deck_view_captured(res, g, on_view), + ) + + @staticmethod + def _on_deck_view_captured( + result: Any, + scheduled_gen: int, + on_view: Callable[[pdk.ViewState | None, int], None], + ) -> None: + """ + Run on deck view captured. + + :param result: See caller/context. + :param scheduled_gen: See caller/context. + :param on_view: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _on_deck_view_captured(result, scheduled_gen, on_view) + Out: UI/application state updated as intended. + """ + view: pdk.ViewState | None = None + if isinstance(result, dict): + parsed = parse_view_state_json(result) + if parsed is not None: + try: + view = pdk.ViewState( + latitude=float(cast(Any, parsed["latitude"])), + longitude=float(cast(Any, parsed["longitude"])), + zoom=float(cast(Any, parsed["zoom"])), + pitch=float(cast(Any, parsed.get("pitch", 0))), + bearing=float(cast(Any, parsed.get("bearing", 0))), + ) + except (KeyError, TypeError, ValueError): + view = None + on_view(view, scheduled_gen) diff --git a/src/uq_desktop_processor/gui/widgets/deck_map/widget.py b/src/uq_desktop_processor/gui/widgets/deck_map/widget.py new file mode 100644 index 0000000..1410902 --- /dev/null +++ b/src/uq_desktop_processor/gui/widgets/deck_map/widget.py @@ -0,0 +1,468 @@ +""" +Composite PyDeck map widget: web view, layer panel, and redraw orchestration. +""" + +from typing import Any + +import geopandas as gpd +import pydeck as pdk +from PySide6.QtCore import Qt, QTimer, QUrl +from PySide6.QtGui import QColor +from PySide6.QtWebEngineCore import QWebEngineSettings +from PySide6.QtWebEngineWidgets import QWebEngineView +from PySide6.QtWidgets import QFrame, QLabel, QSizePolicy, QVBoxLayout, QWidget + +from uq_desktop_processor.gui.map_view.constants import ( + MAP_LAYER_IDS_TOP_FIRST, + MAP_LAYER_LABELS, + MAP_REDRAW_DEBOUNCE_MS, +) +from uq_desktop_processor.gui.map_view.data import evaluation_scatter_data, fit_view_state +from uq_desktop_processor.gui.widgets.deck_map.layer_panel import LayerPanel +from uq_desktop_processor.gui.widgets.deck_map.layers import bounds_for_all_data, build_deck_layers, pick_tooltip +from uq_desktop_processor.gui.widgets.deck_map.web import DeckWebController +from uq_desktop_processor.gui.widgets.map_web_stack import MapWebStack + + +class DeckMapWidget(QWidget): + """ + DeckMapWidget UI helper class. + """ + + def __init__(self) -> None: + """ + Run init . + + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__() + Out: UI/application state updated as intended. + """ + super().__init__() + self._planner_roads: gpd.GeoDataFrame | None = None + self._planner_points: list[tuple[float, float]] = [] + self._euler_polylines: list[list[tuple[float, float]]] = [] + self._eval_results: dict[str, Any] | None = None + + self._stored_view: Any = None + self._layers_first_auto_check: set[str] = set() + + self._map_redraw_timer = QTimer(self) + self._map_redraw_timer.setSingleShot(True) + self._map_redraw_timer.setInterval(MAP_REDRAW_DEBOUNCE_MS) + self._map_redraw_timer.timeout.connect(self._flush_map_redraw) + self._map_redraw_wants_refit = False + + root = QVBoxLayout(self) + root.setContentsMargins(0, 0, 0, 0) + root.setSpacing(0) + + self._web = QWebEngineView(self) + self._web.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + wes = self._web.settings() + wes.setAttribute(QWebEngineSettings.WebAttribute.LocalContentCanAccessRemoteUrls, True) + wes.setAttribute(QWebEngineSettings.WebAttribute.LocalContentCanAccessFileUrls, True) + self._web.setStyleSheet("background-color: #0d0d0d;") + self._web.page().setBackgroundColor(QColor(0x0D, 0x0D, 0x0D)) + + self._deck_web = DeckWebController(self._web) + + self._map_idle_overlay = QFrame(self) + self._map_idle_overlay.setObjectName("MapIdleOverlay") + self._map_idle_overlay.setStyleSheet( + "QFrame#MapIdleOverlay { background-color: rgba(13, 13, 13, 0.96); border: 1px solid #2a2a2a; }" + ) + idle_layout = QVBoxLayout(self._map_idle_overlay) + idle_layout.addStretch(1) + idle_msg = QLabel( + "The map becomes active after generating the first preview layer\n" + "(roads, sampling points, Euler/GPX routes, or CLIP results)." + ) + idle_msg.setWordWrap(True) + idle_msg.setAlignment(Qt.AlignmentFlag.AlignCenter) + idle_msg.setStyleSheet("color: #777; font-size: 12px; padding: 28px;") + idle_layout.addWidget(idle_msg) + idle_layout.addStretch(1) + + self._layer_panel = LayerPanel( + self, + layer_ids_top_first=list(MAP_LAYER_IDS_TOP_FIRST), + layer_labels=MAP_LAYER_LABELS, + on_changed=lambda: self._request_map_redraw(refit=False), + on_reordered=lambda: self._request_map_redraw(refit=False), + on_move_up=self._move_layer_up, + on_move_down=self._move_layer_down, + ) + + self._map_web_host = MapWebStack(self._web, self._map_idle_overlay, self._layer_panel.widget) + self._map_web_host.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + root.addWidget(self._map_web_host, 1) + + self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + self._sync_layer_list_items() + self._apply_map_redraw(refit=True) + + def _has_roads_data(self) -> bool: + """ + Run has roads data. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _has_roads_data() + Out: UI/application state updated as intended. + """ + return self._planner_roads is not None and not self._planner_roads.empty + + def _has_points_data(self) -> bool: + """ + Run has points data. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _has_points_data() + Out: UI/application state updated as intended. + """ + return bool(self._planner_points) + + def _has_euler_data(self) -> bool: + """ + Run has euler data. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _has_euler_data() + Out: UI/application state updated as intended. + """ + return any(len(polyline) >= 2 for polyline in self._euler_polylines) + + def _has_clip_data(self) -> bool: + """ + Run has clip data. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _has_clip_data() + Out: UI/application state updated as intended. + """ + if not self._eval_results: + return False + lon_values, _lat_values, _score_values = evaluation_scatter_data(self._eval_results) + return lon_values.size > 0 + + def _layer_has_data(self, layer_id: str) -> bool: + """ + Run layer has data. + + :param layer_id: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _layer_has_data(layer_id) + Out: UI/application state updated as intended. + """ + return { + "roads": self._has_roads_data(), + "points": self._has_points_data(), + "euler": self._has_euler_data(), + "clip": self._has_clip_data(), + }[layer_id] + + def _has_any_map_data(self) -> bool: + """ + Run has any map data. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _has_any_map_data() + Out: UI/application state updated as intended. + """ + return any(self._layer_has_data(lid) for lid in MAP_LAYER_IDS_TOP_FIRST) + + def _sync_layer_list_items(self) -> None: + """ + Run sync layer list items. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _sync_layer_list_items() + Out: UI/application state updated as intended. + """ + self._layer_panel.list.blockSignals(True) + try: + for layer_id in MAP_LAYER_IDS_TOP_FIRST: + item = self._layer_panel.item_for_layer(layer_id) + if item is None: + continue + has_data = self._layer_has_data(layer_id) + if has_data: + item.setFlags(self._layer_panel.active_item_flags()) + if layer_id not in self._layers_first_auto_check: + # Auto-enable a layer once when its data appears for the first time. + item.setCheckState(Qt.CheckState.Checked) + self._layers_first_auto_check.add(layer_id) + else: + # Data disappeared (or was reset), so disable the item again. + self._layers_first_auto_check.discard(layer_id) + item.setCheckState(Qt.CheckState.Unchecked) + item.setFlags(self._layer_panel.inactive_item_flags()) + finally: + self._layer_panel.list.blockSignals(False) + + def _move_layer_up(self) -> None: + """ + Run move layer up. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _move_layer_up() + Out: UI/application state updated as intended. + """ + row = self._layer_panel.list.currentRow() + if row <= 0: + return + self._layer_panel.list.blockSignals(True) + try: + item = self._layer_panel.list.takeItem(row) + if item: + self._layer_panel.list.insertItem(row - 1, item) + self._layer_panel.list.setCurrentRow(row - 1) + finally: + self._layer_panel.list.blockSignals(False) + self._request_map_redraw(refit=False) + + def _move_layer_down(self) -> None: + """ + Run move layer down. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _move_layer_down() + Out: UI/application state updated as intended. + """ + row = self._layer_panel.list.currentRow() + # Nothing to move when no selection or already at the last row. + if row < 0 or row >= self._layer_panel.list.count() - 1: + return + self._layer_panel.list.blockSignals(True) + try: + item = self._layer_panel.list.takeItem(row) + if item: + self._layer_panel.list.insertItem(row + 1, item) + self._layer_panel.list.setCurrentRow(row + 1) + finally: + self._layer_panel.list.blockSignals(False) + self._request_map_redraw(refit=False) + + def _bounds_for_all_data(self) -> tuple[list[float], list[float]]: + """ + Run bounds for all data. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _bounds_for_all_data() + Out: UI/application state updated as intended. + """ + return bounds_for_all_data( + planner_roads=self._planner_roads, + planner_points=self._planner_points, + euler_polylines=self._euler_polylines, + eval_results=self._eval_results, + ) + + def _build_deck_layers(self) -> list[Any]: + """ + Run build deck layers. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _build_deck_layers() + Out: UI/application state updated as intended. + """ + order_top_first = self._layer_panel.layer_order_top_to_bottom() + checked = {layer_id: self._layer_panel.layer_checked(layer_id) for layer_id in MAP_LAYER_IDS_TOP_FIRST} + has_data = {layer_id: self._layer_has_data(layer_id) for layer_id in MAP_LAYER_IDS_TOP_FIRST} + return build_deck_layers( + layer_order_top_to_bottom=order_top_first, + layer_checked=checked, + layer_has_data=has_data, + planner_roads=self._planner_roads, + planner_points=self._planner_points, + euler_polylines=self._euler_polylines, + eval_results=self._eval_results, + ) + + def _pick_tooltip(self) -> dict[str, Any]: + """ + Run pick tooltip. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _pick_tooltip() + Out: UI/application state updated as intended. + """ + checked = {layer_id: self._layer_panel.layer_checked(layer_id) for layer_id in MAP_LAYER_IDS_TOP_FIRST} + has_data = {layer_id: self._layer_has_data(layer_id) for layer_id in MAP_LAYER_IDS_TOP_FIRST} + return pick_tooltip(layer_checked=checked, layer_has_data=has_data) + + def _request_map_redraw(self, refit: bool) -> None: + """ + Run request map redraw. + + :param refit: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _request_map_redraw(refit) + Out: UI/application state updated as intended. + """ + self._map_redraw_wants_refit = self._map_redraw_wants_refit or refit + self._map_redraw_timer.start() + + def _flush_map_redraw(self) -> None: + """ + Run flush map redraw. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _flush_map_redraw() + Out: UI/application state updated as intended. + """ + refit = self._map_redraw_wants_refit + self._map_redraw_wants_refit = False + self._apply_map_redraw(refit=refit) + + def _apply_map_redraw(self, *, refit: bool) -> None: + """ + Run apply map redraw. + + :return: Result of this step or updated UI/application state. + + Example:: + In: _apply_map_redraw() + Out: UI/application state updated as intended. + """ + if not self._has_any_map_data(): + self._deck_web.clear_pending() + self._stored_view = None + self._map_idle_overlay.setVisible(True) + self._web.setEnabled(False) + self._web.setHtml( + '' + "", + QUrl("about:blank"), + ) + return + + self._map_idle_overlay.setVisible(False) + self._web.setEnabled(True) + + longitudes, latitudes = self._bounds_for_all_data() + + if refit or self._stored_view is None or not self._deck_web.deck_surface_ready: + self._deck_web.map_commit_generation += 1 + self._stored_view = fit_view_state(longitudes, latitudes) + deck = pdk.Deck( + layers=self._build_deck_layers(), + initial_view_state=self._stored_view, + map_style=pdk.map_styles.CARTO_DARK, + tooltip=self._pick_tooltip(), + ) + self._deck_web.set_deck_page_html(deck) + return + + def _on_view(view: pdk.ViewState | None, generation: int) -> None: + """ + Run on view. + + :param view: See caller/context. + :param generation: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _on_view(view, generation) + Out: UI/application state updated as intended. + """ + if generation != self._deck_web.map_commit_generation: + return + if view is not None: + self._stored_view = view + elif self._stored_view is None: + self._stored_view = fit_view_state(longitudes, latitudes) + deck = pdk.Deck( + layers=self._build_deck_layers(), + initial_view_state=self._stored_view, + map_style=pdk.map_styles.CARTO_DARK, + tooltip=self._pick_tooltip(), + ) + self._deck_web.set_deck_page_html(deck) + + self._deck_web.schedule_reload_preserving_view(on_view=_on_view) + + def update_planner_layers( + self, + roads_gdf: gpd.GeoDataFrame | None, + points: list[tuple[float, float]] | None, + ) -> None: + """ + Run update planner layers. + + :param roads_gdf: See caller/context. + :param points: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: update_planner_layers(roads_gdf, points) + Out: UI/application state updated as intended. + """ + self._planner_roads = roads_gdf + self._planner_points = list(points) if points else [] + self._sync_layer_list_items() + self._request_map_redraw(refit=True) + + def update_euler_layer(self, polylines: list[list[tuple[float, float]]]) -> None: + """ + Run update euler layer. + + :param polylines: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: update_euler_layer(polylines) + Out: UI/application state updated as intended. + """ + self._euler_polylines = [list(polyline) for polyline in polylines] + self._sync_layer_list_items() + self._request_map_redraw(refit=True) + + def update_eval_layer(self, _roads_gdf: gpd.GeoDataFrame | None, results: dict[str, Any] | None) -> None: + """ + Run update eval layer. + + :param _roads_gdf: See caller/context. + :param results: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: update_eval_layer(_roads_gdf, results) + Out: UI/application state updated as intended. + """ + if results: + lon_values, _lat_values, _score_values = evaluation_scatter_data(results) + self._eval_results = results if lon_values.size != 0 else None + else: + self._eval_results = None + self._sync_layer_list_items() + self._request_map_redraw(refit=True) diff --git a/src/uq_desktop_processor/gui/widgets/map_layer_list.py b/src/uq_desktop_processor/gui/widgets/map_layer_list.py new file mode 100644 index 0000000..ca36f23 --- /dev/null +++ b/src/uq_desktop_processor/gui/widgets/map_layer_list.py @@ -0,0 +1,100 @@ +""" +QListWidget-based layer list with reordering and visibility for map stacks. +""" + +import logging + +from PySide6.QtCore import Qt, Signal +from PySide6.QtGui import QDropEvent +from PySide6.QtWidgets import QListWidget, QWidget + +log = logging.getLogger(__name__) + + +class MapLayerListWidget(QListWidget): + """ + MapLayerListWidget UI helper class. + """ + + reordered = Signal() + + def __init__(self, parent: QWidget | None = None) -> None: + """ + Run init . + + :param parent: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__(parent) + Out: UI/application state updated as intended. + """ + super().__init__(parent) + self._drag_src_row: int = -1 + + def startDrag(self, supported_actions: Qt.DropAction) -> None: + """ + Run startDrag. + + :param supported_actions: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: startDrag(supported_actions) + Out: UI/application state updated as intended. + """ + self._drag_src_row = self.currentRow() + super().startDrag(supported_actions) + + def dropEvent(self, event: QDropEvent) -> None: + """ + Run dropEvent. + + :param event: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: dropEvent(event) + Out: UI/application state updated as intended. + """ + try: + src_row = self._drag_src_row if self._drag_src_row >= 0 else self.currentRow() + if src_row < 0: + super().dropEvent(event) + return + + drop_position = event.position().toPoint() + drop_item = self.itemAt(drop_position) + + if drop_item is None: + dst_row = self.count() + else: + drop_item_rect = self.visualItemRect(drop_item) + y_mid = drop_item_rect.y() + drop_item_rect.height() / 2.0 + dst_row = self.row(drop_item) + if drop_position.y() >= y_mid: + dst_row += 1 + + if dst_row > src_row: + dst_row -= 1 + + if dst_row == src_row: + event.acceptProposedAction() + return + + moved_item = self.takeItem(src_row) + if moved_item is None: + return + + self.insertItem(dst_row, moved_item) + self.setCurrentRow(dst_row) + self.reordered.emit() + + event.setDropAction(Qt.DropAction.MoveAction) + event.accept() + + except (AttributeError, TypeError, RuntimeError) as error: + log.error("Drop error: %s", error) + super().dropEvent(event) + finally: + self._drag_src_row = -1 diff --git a/src/uq_desktop_processor/gui/widgets/map_web_stack.py b/src/uq_desktop_processor/gui/widgets/map_web_stack.py new file mode 100644 index 0000000..97b27aa --- /dev/null +++ b/src/uq_desktop_processor/gui/widgets/map_web_stack.py @@ -0,0 +1,73 @@ +""" +Stacked Qt web views for switching between multiple embedded map instances. +""" + +from PySide6.QtGui import QResizeEvent +from PySide6.QtWidgets import QVBoxLayout, QWidget + + +class MapWebStack(QWidget): + """ + MapWebStack UI helper class. + """ + + _LAYER_CORNER_MARGIN = 10 + _LAYER_PANEL_MAX_WIDTH = 210 + + def __init__( + self, + web: QWidget, + overlay: QWidget, + layer_panel: QWidget | None = None, + ) -> None: + """ + Run init . + + :param web: See caller/context. + :param overlay: See caller/context. + :param layer_panel: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__(web, overlay, layer_panel) + Out: UI/application state updated as intended. + """ + super().__init__() + self._web = web + self._overlay = overlay + self._layer_panel = layer_panel + lay = QVBoxLayout(self) + lay.setContentsMargins(0, 0, 0, 0) + lay.setSpacing(0) + lay.addWidget(web) + overlay.setParent(self) + if layer_panel is not None: + layer_panel.setParent(self) + + def resizeEvent(self, event: QResizeEvent) -> None: + """ + Run resizeEvent. + + :param event: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: resizeEvent(event) + Out: UI/application state updated as intended. + """ + super().resizeEvent(event) + r = self.rect() + self._overlay.setGeometry(r) + if self._layer_panel is not None: + lp = self._layer_panel + m = self._LAYER_CORNER_MARGIN + lp.adjustSize() + hint = lp.sizeHint() + w = max(lp.minimumWidth(), min(hint.width(), self._LAYER_PANEL_MAX_WIDTH)) + max_h = max(100, r.height() - 2 * m) + h = min(hint.height(), max_h) + x = r.x() + r.width() - w - m + y = r.y() + m + lp.setGeometry(x, y, w, h) + lp.raise_() + self._overlay.raise_() diff --git a/src/uq_desktop_processor/gui/widgets/stacked.py b/src/uq_desktop_processor/gui/widgets/stacked.py new file mode 100644 index 0000000..7c18dfe --- /dev/null +++ b/src/uq_desktop_processor/gui/widgets/stacked.py @@ -0,0 +1,107 @@ +""" +Generic stacked page container with a sidebar list and content widget swapper. +""" + +from PySide6.QtCore import QSize +from PySide6.QtWidgets import QFrame, QLabel, QSizePolicy, QStackedWidget, QVBoxLayout, QWidget + + +class CompactStackedWidget(QStackedWidget): + """ + ``QStackedWidget`` that sizes vertically to the *current* page only. + + The default stacked widget reserves the height of the *tallest* page, which + leaves a large empty gap when a shorter page (e.g. single line edit) is shown. + """ + + def __init__(self, parent: QWidget | None = None) -> None: + """ + Run init . + + :param parent: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__(parent) + Out: UI/application state updated as intended. + """ + super().__init__(parent) + self.currentChanged.connect(self._on_page_changed) + self.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Maximum) + + def _on_page_changed(self, _index: int) -> None: + """ + Run on page changed. + + :param _index: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: _on_page_changed(_index) + Out: UI/application state updated as intended. + """ + self.updateGeometry() + parent_widget = self.parentWidget() + if parent_widget is not None: + parent_widget.updateGeometry() + + def sizeHint(self) -> QSize: # noqa: N802 (Qt naming) + """ + Run sizeHint. + + :return: Result of this step or updated UI/application state. + + Example:: + In: sizeHint() + Out: UI/application state updated as intended. + """ + w = self.currentWidget() + if w is not None: + cw = w.sizeHint() + base_w = super().sizeHint().width() + return QSize(max(base_w, cw.width()), cw.height()) + return super().sizeHint() + + def minimumSizeHint(self) -> QSize: # noqa: N802 + """ + Run minimumSizeHint. + + :return: Result of this step or updated UI/application state. + + Example:: + In: minimumSizeHint() + Out: UI/application state updated as intended. + """ + w = self.currentWidget() + if w is not None: + cm = w.minimumSizeHint() + base_w = super().minimumSizeHint().width() + return QSize(max(base_w, cm.width()), cm.height()) + return super().minimumSizeHint() + + +class NeonPanel(QFrame): + """Titled panel with a vertical layout.""" + + def __init__(self, title: str, subtitle: str | None = None) -> None: + """ + Run init . + + :param title: See caller/context. + :param subtitle: See caller/context. + :return: Result of this step or updated UI/application state. + + Example:: + In: __init__(title, subtitle) + Out: UI/application state updated as intended. + """ + super().__init__() + self.main_layout = QVBoxLayout(self) + self.title_label = QLabel(title) + self.title_label.setObjectName("PanelTitle") + self.main_layout.addWidget(self.title_label) + if subtitle: + self.subtitle_label = QLabel(subtitle) + self.subtitle_label.setObjectName("PanelSubtitle") + self.subtitle_label.setWordWrap(True) + self.main_layout.addWidget(self.subtitle_label) From 0658a2bac747477f513c101748c5dba43aff0206 Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 11:18:52 +0200 Subject: [PATCH 10/12] chore: add pre-commit hooks and repository configuration (#10) --- .gitignore | 74 +++++++++++++++++++++++++++++++++++++++++ .pre-commit-config.yaml | 36 ++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..894231d --- /dev/null +++ b/.gitignore @@ -0,0 +1,74 @@ +# Ignore PyCharm project files +.idea/ +*.iml + +# Ignore virtual environment directories +venv/ +env/ +ENV/ +.venv/ +.ENV/ +.venv.bak/ +venv.bak/ + +# Ignore Python bytecode files +__pycache__/ +*.py[cod] +*$py.class + +# Ignore temporary and log files +*.log +*.tmp +*.swp +*.swo +cache + +# Ignore system files (macOS / Windows / Linux) +.DS_Store +Thumbs.db +ehthumbs.db +Icon? +desktop.ini + +# Ignore test-related files +.coverage +.coverage.* +.hypothesis/ +coverage.xml +htmlcov/ +.tox/ +.nox/ +.cache/ +.pytest_cache/ + +# Ignore pip logs +pip-log.txt +pip-delete-this-directory.txt + +# Ignore Jupyter Notebook checkpoints +.ipynb_checkpoints/ + +# Ignore editor-specific configuration files +.vscode/ + +# Secrets and local environment variables +.env +.env.local +.env.* + +# Ignore build artifacts +build/ +dist/ +*.egg-info/ +.eggs/ + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# ruff +.ruff_cache/ + +# pyright / pylance +.pyright/ \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..2224e9d --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,36 @@ +# Minimum version of pre-commit required +minimum_pre_commit_version: "3.6.0" + +# Set the default Python version to be used by hooks +default_language_version: + python: python3.12 + +repos: + # Basic pre-commit hooks for common issues (whitespace, newlines, merge conflicts, YAML validity) + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: trailing-whitespace # Removes trailing whitespace + - id: end-of-file-fixer # Ensures files end with a newline + - id: check-merge-conflict # Detects merge conflict markers + - id: check-yaml # Validates YAML syntax + + # Black formatter for Python code + - repo: https://github.com/psf/black + rev: "25.1.0" + hooks: + - id: black # Automatically formats Python code + + # Ruff linter and code analyzer + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: "v0.12.12" + hooks: + - id: ruff # Lints Python code using Ruff + + # Mypy static type checker + - repo: https://github.com/pre-commit/mirrors-mypy + rev: "v1.17.1" + hooks: + - id: mypy # Performs type checking with mypy + pass_filenames: false # Keep behavior aligned with CI (check full project) + args: ["--install-types", "--non-interactive", "--pretty", "."] From 227efb9136ee4fd3f224f6e682f769260c2fe8eb Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 11:20:52 +0200 Subject: [PATCH 11/12] docs: add mkdocs configuration and generated reference tooling (#11) --- docs/css/mkdocstrings.css | 23 ++ docs/css/theme-variants.css | 146 +++++++++ .../__pycache__/config.cpython-312.pyc | Bin 0 -> 2554 bytes .../__pycache__/context.cpython-312.pyc | Bin 0 -> 2241 bytes .../__pycache__/generate.cpython-312.pyc | Bin 0 -> 12870 bytes .../__pycache__/helpers.cpython-312.pyc | Bin 0 -> 3600 bytes .../__pycache__/traverse.cpython-312.pyc | Bin 0 -> 5130 bytes docs/gen_ref_pages/config.py | 60 ++++ docs/gen_ref_pages/context.py | 50 +++ docs/gen_ref_pages/gen_ref_pages.py | 150 +++++++++ docs/gen_ref_pages/generate.py | 289 ++++++++++++++++++ docs/gen_ref_pages/helpers.py | 83 +++++ docs/gen_ref_pages/traverse.py | 127 ++++++++ docs/index.md | 105 +++++++ docs/readme_images/gui-drive-routes.png | Bin 0 -> 138024 bytes docs/readme_images/gui-sampling-points.png | Bin 0 -> 311177 bytes docs/readme_images/gui-vit-evaluation.png | Bin 0 -> 204763 bytes mkdocs.yml | 109 +++++++ 18 files changed, 1142 insertions(+) create mode 100644 docs/css/mkdocstrings.css create mode 100644 docs/css/theme-variants.css create mode 100644 docs/gen_ref_pages/__pycache__/config.cpython-312.pyc create mode 100644 docs/gen_ref_pages/__pycache__/context.cpython-312.pyc create mode 100644 docs/gen_ref_pages/__pycache__/generate.cpython-312.pyc create mode 100644 docs/gen_ref_pages/__pycache__/helpers.cpython-312.pyc create mode 100644 docs/gen_ref_pages/__pycache__/traverse.cpython-312.pyc create mode 100644 docs/gen_ref_pages/config.py create mode 100644 docs/gen_ref_pages/context.py create mode 100644 docs/gen_ref_pages/gen_ref_pages.py create mode 100644 docs/gen_ref_pages/generate.py create mode 100644 docs/gen_ref_pages/helpers.py create mode 100644 docs/gen_ref_pages/traverse.py create mode 100644 docs/index.md create mode 100644 docs/readme_images/gui-drive-routes.png create mode 100644 docs/readme_images/gui-sampling-points.png create mode 100644 docs/readme_images/gui-vit-evaluation.png create mode 100644 mkdocs.yml diff --git a/docs/css/mkdocstrings.css b/docs/css/mkdocstrings.css new file mode 100644 index 0000000..3b16ced --- /dev/null +++ b/docs/css/mkdocstrings.css @@ -0,0 +1,23 @@ +/* + Documentation layout styles for MkDocs Material. + Defines spacing, typography, and table formatting + to improve readability and consistency across docs. +*/ + +/* Add vertical spacing between documentation objects */ +.md-typeset .doc .doc-object { margin: 1.1rem 0; } + +/* Allow function/method signatures to wrap across lines */ +.md-typeset .doc .sig { white-space: normal; word-break: break-word; } + +/* Adjust table cell padding and align text to the top */ +.md-typeset .doc .table th, +.md-typeset .doc .table td { + padding: .5rem .75rem; + vertical-align: top; +} + +/* Apply alternating background color to table rows for readability */ +.md-typeset .doc .table tr:nth-child(odd) td { + background: var(--md-code-bg-color); +} diff --git a/docs/css/theme-variants.css b/docs/css/theme-variants.css new file mode 100644 index 0000000..b4707d4 --- /dev/null +++ b/docs/css/theme-variants.css @@ -0,0 +1,146 @@ +/* + Documentation theme styles for MkDocs Material. + Defines heading sizes, documentation object layout, + code signature blocks, and table formatting. + Includes multiple color/spacing schemes (brand, compact, comfy) + for different presentation preferences. +*/ + +/* Style level-1 headings */ +.md-typeset h1 { + font-size: 1.4rem; + color: var(--md-default-fg-color--light); + font-weight: 800; + letter-spacing: .01em; + margin-top: 1.2rem; + margin-bottom: .6rem; +} + +/* Style level-2 headings */ +.md-typeset h2 { + font-size: 1rem; + color: var(--md-default-fg-color--light); + font-weight: 700; + letter-spacing: .02em; + margin-top: .8rem; + margin-bottom: .4rem; +} + +/* Style level-3 headings */ +.md-typeset h3 { + font-size: 0.9rem; + color: var(--md-default-fg-color--light); + font-weight: 600; + letter-spacing: .01em; + margin-top: .6rem; + margin-bottom: .3rem; +} + +/* Card-like container for documentation objects */ +.md-typeset .doc .doc-object { + margin: 1rem 0 1.25rem; + padding: 1rem 1.25rem; + border: 1px solid var(--md-default-fg-color--lighter); + border-radius: .75rem; + background: var(--md-default-bg-color); + box-shadow: 0 1px 0 var(--md-default-fg-color--lighter); +} + +/* Heading inside a documentation object */ +.md-typeset .doc .doc-object > .doc-heading { + font-weight: 700; + margin-bottom: .5rem; +} + +/* Code signature block inside documentation */ +.md-typeset .doc .sig { + display: block; + white-space: pre-wrap; + word-break: break-word; + background: var(--md-code-bg-color); + padding: .5rem .75rem; + border-radius: .5rem; + line-height: 1.45; +} + +/* Section titles inside documentation */ +.md-typeset .doc .doc-section-title { + font-weight: 800; + text-transform: uppercase; + font-size: .78rem; + letter-spacing: .04em; + color: var(--md-default-fg-color--light); + margin-top: .9rem; + border-top: 1px solid var(--md-default-fg-color--lighter); + padding-top: .5rem; +} + +/* Table base styles */ +.md-typeset .doc .table table { + width: 100%; + border-collapse: collapse; +} +.md-typeset .doc .table thead th { + font-weight: 700; + border-bottom: 1px solid var(--md-default-fg-color--lighter); +} +.md-typeset .doc .table th, +.md-typeset .doc .table td { + padding: .45rem .6rem; + vertical-align: top; +} +/* Alternating row background */ +.md-typeset .doc .table tr:nth-child(odd) td { + background: var(--md-code-bg-color); +} + +/* ============================= */ +/* BRAND color scheme */ +/* ============================= */ +[data-md-color-scheme="brand"] { + --md-primary-fg-color: #6e56cf; + --md-accent-fg-color: #00c2a8; + --md-code-bg-color: rgba(110, 86, 207, .08); +} +[data-md-color-scheme="brand"] .md-typeset .doc .doc-object { + border-color: rgba(110, 86, 207, .35); + box-shadow: 0 1px 0 rgba(110, 86, 207, .25); +} + +/* ============================= */ +/* COMPACT color scheme */ +/* ============================= */ +[data-md-color-scheme="compact"] .md-typeset { + font-size: 0.94rem; + line-height: 1.55; +} +[data-md-color-scheme="compact"] .md-typeset .doc .doc-object { + margin: .75rem 0 1rem; + padding: .75rem .9rem; +} +[data-md-color-scheme="compact"] .md-typeset .doc .table th, +[data-md-color-scheme="compact"] .md-typeset .doc .table td { + padding: .35rem .5rem; +} +[data-md-color-scheme="compact"] .md-typeset .sig { + line-height: 1.35; +} + +/* ============================= */ +/* COMFY color scheme */ +/* ============================= */ +[data-md-color-scheme="comfy"] .md-typeset { + font-size: 1.05rem; + line-height: 1.7; +} +[data-md-color-scheme="comfy"] .md-typeset .doc .doc-object { + margin: 1.2rem 0 1.5rem; + padding: 1.1rem 1.35rem; +} +[data-md-color-scheme="comfy"] .md-typeset .doc .table th, +[data-md-color-scheme="comfy"] .md-typeset .doc .table td { + padding: .55rem .75rem; +} +[data-md-color-scheme="comfy"] .md-typeset .sig { + line-height: 1.55; +} diff --git a/docs/gen_ref_pages/__pycache__/config.cpython-312.pyc b/docs/gen_ref_pages/__pycache__/config.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f4c45d1055b411c912d6a5386aed7586b8064985 GIT binary patch literal 2554 zcmai0O>7&-6`ox#DT&mt9V=2pB?C9HMZl)*g&E7Y{1K1L=e#&RMl2B4H11+*Adl7=z-Qb zwHhJ@36luvBmMs}Rt+*hq9jHJ$q=lx|IY|Q4BO!rgjBymZ>aLjxAhb8`Q-rCS3EFD+QJwY;RZ&BY3eP z%bt?j6{|!sVVv61VHH-WajyhPc$=2Xs9LSlifov*pt^-QCL1~GiURR$Q7BQ@ z4NyWgY!0EX1{zqWjs6CDbM?anUc;=IfU&m(ek^47V zufDlAm1<3;zL}ccHD(Xs81hG$Yddv9%^GJLmZUF$Pk}fDzk@cgyGR1>&~HI&9(}6W zdI{P3jWY;sX;L*nKuzsI7rgwnCK9hSwRPp;2(7~aIZEWYrqG+(KlOhk4YZ|iX-!?k zBtX4GMDN-EyC#QvyG@;hZlf=Z2db5Twn9z#`z6msJr7Z9@Y~WhQ6g;px7Q#!&xYCr z*eNnDWx@!=tP}v6XS%rW z^lacnHG%^|Tj8))W;U2>U{Qq!g$z|(7<$AmdxE+zHr^4;r0~1l(V@nK3JQ18bSO_k zixxze!X?LBvmBgVn9HrqXUxT=>^te@OyX#})>RtQ-6;adm*q1(Yo?0rxq=1VDR4fR z0GXQ%JU}5_?^nkVgmWO{(1zy@4Tl%{NTL2X{0{yAEEwYOJW4Q(Z^0MdlKyO>nDf2qb46K&m4y!As}N3}^`Tao$G%ncbVoeLa)oufh@> zg(|d>=<}mL!_@C%lJed#;cAfh(Eyr4K?aUKud*MiGB;uH*We6)JvjI?=KR>9n1uQ? zs^J+#?~fjhnI}Q6EQr4W+eT00XzKJ{JlTpTAI8rggpFg7|HaRLl>06=ey8~`_WI}N zcH(>KrB-@rFMXqxzOnm(^)S8mB#Z`5?8ncy!zet`MxgX~7!8hpH$1UB`QbOie7B!J zjiBS>ch*~{au1JP+rGLV8^0IZo0x7*Oz*~~ca7;EpG<<9P~+C0S$y~N)Jp9)aoufW)+`etu=ai zd+137Oag@CH7)@x2`>+p>ofA9q%luBGmHzWnwGM*& E3BT0FqyPW_ literal 0 HcmV?d00001 diff --git a/docs/gen_ref_pages/__pycache__/context.cpython-312.pyc b/docs/gen_ref_pages/__pycache__/context.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d6485fab5ec2740a31dc5f379741ecbff98f3592 GIT binary patch literal 2241 zcmZuyO>7%Q6rNqLf8uQFK$B3QsM9npaY;--v=vcRRFd>ZptNdQ3Au*tW_KKKyxui4 zQkY8;_IgwT4TA+tLT%spfxQ?gM>%1R|UD@%w({EuSFdHF@qAPR}* z6~Sd=M3T{YWJc~FQ(2V*KdZqDW#iRoI`)^4(z4fO>RdN$oiQ((w}@?Kj8M;i#X@2C zA7Jhwg0hl{vhp>^B^#0bnBU2(QlJHKqa;oeW+ceS&#KE*PQ$jZo9xi-Cdp3S|67Jt zb(zs;+N)35_jGy_k=ypMwtY`W{C%W{q{0m2Lc>hJNu_?5S0t!3iQ&26+9t!iK(OVEmPpB^RZK~l5=I=ZbIWzGo5wmX>qb$ZBe-A@s#Bv- z&ER293Biohioq+Cq?5kGs}wZZxX)ueiYF-1IWch_0uc&+c!6cwyH|+q2Vn)P%gK)I@wQ z3h8s^#VCPeai)zBw$KlR#3)4IxBEAcdx(dCLugT24f#*xMR^g;cUpn2cy3BG_w1ed z)`$g)K3#0XSwdjd8h{Rs`K}HjWEW-L-CAu8T5IrpKWb}t@BM5)b7;@5DpjSltY2-R zP9Sf}VSpNdp3VVZ9q_;w0|?GpjQc&a93P%WfZR-gGU4E2-rso2(s4Pi5{`?GyWq57 zDAY&sS<}Q8$K1tF^|*z{K<%Of7}0I(Hp~QP0y8iZkVU)W9XPsko)n5l>;n&QsA#FH$5`CNK%rKh`J4 zbJrN5ET_XoQOr#eR^)CuciFazR<2ClIVi_n&>f2iX`U2$RV!C{!F6&I7O%cf9F{X( zgXQL6U?|CJWwxY}_ z;VpHfsgA77GzNcBPi)7L`r0l;LFwnbgr+%qiD;Ua)U=?Jz^j_}aYeVoow%k!ahgUI zu%XWjA`YCUfWY~3>ZLSIcL0OItp*Mh(=xc<4FBvs#RgzgF=JlrihpC!0T8}L^abIm zUl1{?J`rl{M^IdX34((+8LzsBklwOjWOHT%;W%DJ5wx+qOc z>mSW-UNF{`1GS-Ar9QKAr2fJEPaBcO)Y_3Xwl@6WQgdu_{m^9drKt_Y0Go5td(!%K zZFB0zy3)67)=t#-*Nyst`|qqwHu@WEZK84O!J+2J+4YytHV59_P;P+DD}#-p&4Z_w z&fmSdeC&(dhH`3K>5ZPOzqJzi=Iw0+Y@_dycm-97f~M06ue<#xO&ArJ3l35oA3X@f zQ)XS)rdY`SAsiN5`(Pd?P6v%SLx*5PT$t<(knM;hNxz}t?R_Yjx?5Q$wTb%v+J&#& jI$N1sPmMLZ-dKul$B^9puY628xs8DAMnK#VqVNAdDd9@2 literal 0 HcmV?d00001 diff --git a/docs/gen_ref_pages/__pycache__/generate.cpython-312.pyc b/docs/gen_ref_pages/__pycache__/generate.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c56c4c467c61963bab4655a602132d21add8292 GIT binary patch literal 12870 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 Qq|=a!?~L%6ya`qOH$#dHy8r+H literal 0 HcmV?d00001 diff --git a/docs/gen_ref_pages/__pycache__/helpers.cpython-312.pyc b/docs/gen_ref_pages/__pycache__/helpers.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd3adcb9d55093f94021b67ca72b324d864124ce GIT binary patch literal 3600 zcmbVOO>7&-6`tk4C{c>6O0gZQp3-tHCKB67jSCBkP)C$oxwfq8r$JTP#E3g2M_leQ zvr91)XjDjZkdpuw(4wZ%i+m{@xCMOdvFNElFP2qQz(N5E^x*nNKrYbw)Hk!clw>)V z4zRQH^Y-nVdEfWm`)e!~MbMs||3{(ThR{F7#A`u!u>T1R?jaSaiiS$clA?&QPxF=h zOMW@_Yk^X5DOd_Eg-YS2FsucrUk%boE}(`!4J@^(VH$;b6y_0_x2tWmgGNt*URZTU zuos2BnA%R2)?O#9cED;^EtcqfE(}U2c4XS3oGfb;#(`O46%u~CYkFq#+G1)dGdnl^ z)5{A}c5HrXa$)+$Oy(x!VHp_QSJ( z6}o%Ka+eX}K2@1Vme`X`^?i!!Xhq1s(o*P=yYk4@JdYB7auFs`3@t_B3?-&hTrE(m zKshEj&sM39g;m%r7!^&$%M@n~-DE1|RK;b^R*6NEQK@0BqET~94ly3a(>eUg6<}uK z1zw?e0_%oVV0vDxw3G-d#D_P;->b}|Lzw6_=l5BoR5o;~TiCP+x5TGa24=-Gaal&Bx~G` z%nU#&D$i<)gTk6G`CYrCOtM9iry1cB(+8?Ben}?B(u*eLW}4_0Ev8e{ELui6J*%-I zOP9Hkhf6T3L}ygYR%p?xWy&?HVCd;dX4S4y-At=S)=cNAp5ZhH+Vj**7pPVSt;urj zW!pGx(T~e~Vy&N<8P8?onvsR8nMk&_Pk>40H=+9%`p-IgGQ_rT75<_i@q3t_Q;4!U*p z?>^K!u<_oL0Q-H<_7Hn=YkBup;pwfy&Jf#4Fj(FPF=PidvP`vO9+RB<00e}$Uh5@A z^*s{z3~i;wGG{J&k5iIMK95V2hQ3NU08+=m6y0Ju27EFtE+Ma525_qa9vjYaMs-!I zVQHSrqhY+L1Ha6y!KsM}rmcPQ7S)h(QnTp}C zCNp$LfOo*X*a`;7hF!z$pv5c^9eE$@9rkRb>}aX+w_pe8;-F_8HBY0C?z`{bdB4%q z$nLbqciRWI+Xr{r-+mH!n+rMK1KkmahG0QD^v^JWAlV{ay+yU#%0Z~CD;@z=rI-eV zr|aNskpiq%_*_N2>tN>X3mGvU7qSA2vZ=n;>Gr^rLN~$S+dd1Dn$zk^UH;9pLd=E6 zFM0!@T>|R12dED!41%x9Ou#|y05y^?IA?IIlU0@{7B~UtxKYBKRGly;MOwg`rx3kW zOf^~(v9v^LBBHn8wOj*WmPok_P%~*(s*|3>gU7N}!UNzOEfJ;*WV>n|%({+cUx&n> z0~E`}e0&JUD@^o4OQy648e_C925X-u1%0fga~{&jt0L3m_$ec0hygY`;czE}U)$Innb} z0vE!VfTJCDU1TfF6i|eG=0vb=cLPEzD9?b)_yFvmhsR{lt)mxbP*>09d!HBAfA}JV zBJCUB|7Csiqo?7MjSshea)0S>?~HHvkMH$o zrAwDwYG6E)#G)F+0GT|z2BC=Jpc>~GH?5Y`XcAx6$^}SJ7K3z(2eZVa!%R0JFEa~D zFpxZq^CP|+!#_HTVp**nf^ZA<3l+!%kai^2p;Qu;j(1CLGI<5+Y8h_*jZ zEyzpaQh>dJh;~%mox@N&?8d*NH10TT5C0B)^aFUzMd*ORC(((%&C*Wy!1~p_v+=F5 z-~Qt9x1OFI-B@XKe^&bA2}$g>zTL>F?Z~Odg{{$@$b~&1`qj_7_9C%uVf;>PWG6Dx z3-|Fb57;luAe_J4V4 bUksZUdz8>t7&-6`m!RD<7Ji`rhm= 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 human-readable section titles +SECTION_TITLE_MAP = { + "services": "Services", + "threads": "Threads", + "ui": "UI", + "utils": "Utils", +} + +# Explicit ordering for sections when displaying documentation or indexes +SECTION_ORDER = {"Ui": 1, "Services": 2, "Threads": 3, "Utils": 4} + +# File extensions that should be recognized as linkable images +LINKABLE_IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".ico", ".gif"} + + +def _is_pkg_dir(path: Path) -> bool: + """ + Check whether a given path points to a valid Python package directory. + + A valid package directory must: + 1. Be a directory. + 2. Contain an __init__.py file. + + :param path: Filesystem path to check. + :return: True if the path is a Python package directory, False otherwise. + """ + return path.is_dir() and (path / "__init__.py").exists() + + +def find_package_dir(include_private: bool = INCLUDE_PRIVATE) -> tuple[Path, str]: + """ + Locate the first valid Python package directory under SOURCE_DIR. + + - Private packages (names starting with "_") can be excluded unless explicitly allowed. + - If multiple candidates exist, the package with the lexicographically smallest name is chosen. + + :param include_private: Whether to allow private packages (default: global INCLUDE_PRIVATE). + :return: Tuple (package_path, package_name). + :raises SystemExit: If no valid package directory is found. + """ + # Gather all package directories under SOURCE_DIR + candidates = [ + package_path + for package_path in SOURCE_DIR.iterdir() + if _is_pkg_dir(package_path) and (include_private or not package_path.name.startswith("_")) + ] + + # No valid package found > stop execution with an error message + if not candidates: + raise SystemExit("No package found in src/. Make sure you have something like " "src/yourpkg/__init__.py") + + # Pick the lexicographically smallest directory (deterministic choice) + package_dir = min(candidates, key=lambda package_path: package_path.name) + return package_dir, package_dir.name diff --git a/docs/gen_ref_pages/context.py b/docs/gen_ref_pages/context.py new file mode 100644 index 0000000..3a841b1 --- /dev/null +++ b/docs/gen_ref_pages/context.py @@ -0,0 +1,50 @@ +from dataclasses import dataclass, field + +# Record structure: +# - tuple: arbitrary metadata (e.g., file info) +# - tuple[str, ...]: path parts (e.g., ("pkg", "subpkg")) +# - str: identifier/name +# - bool: status flag +Record = tuple[tuple, tuple[str, ...], str, bool] + + +@dataclass +class Context: + """ + Holds the in-memory representation of a package hierarchy. (tree structure) + + Tracks: + - Created folder paths. + - Relationships between parent folders → child directories/modules. + - Records associated with discovered entities. + """ + + # Set of folder paths already created (each as a tuple of path parts). + created_folders: set[tuple[str, ...]] = field(default_factory=set) + + # Map: parent folder > set of child directories. + children_directories: dict[tuple[str, ...], set[tuple[str, ...]]] = field(default_factory=dict) + + # Map: parent folder > list of child modules. + children_modules: dict[tuple[str, ...], list[tuple[str, ...]]] = field(default_factory=dict) + + # Collected records for all discovered items (see Record type alias). + records: list[Record] = field(default_factory=list) + + def ensure_folder(self, parts: list[str]) -> None: + """ + Ensure that a folder path is registered in the context. + + If the folder path is not yet known: + - Add it to created_folders. + - Initialize its entry in children_directories and children_modules. + + :param parts: Path components for the folder (e.g., ["pkg", "subpkg"]). + :return: None + """ + key = tuple(parts) + + if key not in self.created_folders: + self.created_folders.add(key) + self.children_directories.setdefault(key, set()) + self.children_modules.setdefault(key, []) diff --git a/docs/gen_ref_pages/gen_ref_pages.py b/docs/gen_ref_pages/gen_ref_pages.py new file mode 100644 index 0000000..71a0da6 --- /dev/null +++ b/docs/gen_ref_pages/gen_ref_pages.py @@ -0,0 +1,150 @@ +""" +Automatic API Documentation Generator for MkDocs. + +This script integrates with the `mkdocs-gen-files` plugin to dynamically +generate API reference documentation from a Python package located in +the source directory (by default `src/`, but this can be changed in `config.py` +via the `SOURCE_DIR` setting). + +Workflow: +1. Detects the main package directory under `SOURCE_DIR` (logic in `config.py`). +2. Traverses the package structure (using `traverse.py`) to discover + modules, subpackages, and static files. +3. Generates Markdown pages for: + - Each Python module (using `::: module.path` blocks for mkdocstrings). + - Each package/directory (with backlinks, subdirectory lists, + module lists, and static file sections). +4. Stores navigation metadata in a `Context` object (`context.py`). +5. Builds navigation files: + - `reference/index.md` → top-level reference index page, + - `reference/SUMMARY.md` → literate navigation for MkDocs. + +Usage (short form): +- Run this script as part of the MkDocs build process (`mkdocs build` or `mkdocs serve`). +- The script will automatically: + - detect the target package, + - create a documentation tree in the `reference/` directory, + - prepare navigation for integration with MkDocs. + +Usage (with MkDocs): +1) Install required packages: + pip install mkdocs mkdocs-gen-files "mkdocstrings[python]" + +2) Ensure your project layout looks for example like this: + . + ├─ mkdocs.yml + ├─ docs/ + │ └─ gen_ref_pages/ + │ ├─ gen_ref_pages.py # this script + │ ├─ config.py + │ ├─ context.py + │ ├─ generate.py + │ ├─ helpers.py + │ └─ traverse.py + ├─ src/ # or another source dir set in config.SOURCE_DIR + │ └─ /... + +3) Configure `mkdocs.yml` with plugins and navigation, e.g.: + site_name: Your Documentation + plugins: + - search + - gen-files: + scripts: + - docs/gen_ref_pages/gen_ref_pages.py # path to this script + - mkdocstrings: + handlers: + python: + options: + show_source: true + docstring_style: google # or "sphinx"/"numpy", depending on your style + nav: + - Reference: reference/ # generated reference section + +4) Run: + - Live preview: mkdocs serve + - Build static site: mkdocs build + +Customization: +- Configuration is located in `config.py`: + - `SOURCE_DIR`: source directory where the package is located (default: `Path("src")`). + You can change this to any other directory (e.g. `Path("packages")`). + - `INCLUDE_PRIVATE`: whether to include private modules/packages (path parts starting with `_`). + - `SECTION_TITLE_MAP` and `SECTION_ORDER`: control naming and ordering of sections in navigation. + - `LINKABLE_IMAGE_EXTENSIONS`: which static files (in source directories) should be linked as clickable images. + +This script is intended to be run automatically as part of the MkDocs build process. +You can place it anywhere in your repository and reference its path under `gen-files.scripts`. +""" + +import sys +from pathlib import Path + +# Ensure the current directory is on sys.path so local imports work correctly +THIS_DIR = Path(__file__).resolve().parent +THIS_DIR_STR = str(THIS_DIR) +if THIS_DIR_STR not in sys.path: + sys.path.insert(0, THIS_DIR_STR) + +import mkdocs_gen_files # noqa E402 +from config import INCLUDE_PRIVATE, find_package_dir # noqa E402 +from context import Context # noqa E402 +from generate import generate_directory_pages, generate_module_pages # noqa E402 +from traverse import traverse_directories # noqa E402 + + +def _build_nav(package_name: str, ctx: Context) -> None: + """ + Build MkDocs navigation files from collected documentation records. + + - Creates `reference/index.md` with a title and introduction. + - Creates `reference/SUMMARY.md` containing a literate navigation structure. + + :param package_name: Name of the discovered package. + :param ctx: Context holding collected records from traversal. + :return: None + """ + nav = mkdocs_gen_files.Nav() + + # Sort collected records and populate the navigation + for _, display, doc_rel_path, _ in sorted(ctx.records, key=lambda record: record[0]): + nav[display] = doc_rel_path + + # Generate top-level index page + with mkdocs_gen_files.open("reference/index.md", "w") as file_handle: + file_handle.write(f"# Reference – `{package_name}`\n\n") + file_handle.write("This section contains API documentation automatically " "generated from code.\n\n") + + # Generate SUMMARY.md for MkDocs navigation + with mkdocs_gen_files.open("reference/SUMMARY.md", "w") as nav_file: + nav_file.writelines(nav.build_literate_nav()) + + +def main() -> None: + """ + Entry point for documentation generation. + + - Finds the main package under `src/`. + - Traverses directories to collect modules/folders. + - Generates module and directory pages. + - Builds MkDocs navigation files. + + :return: None + """ + package_dir, package_name = find_package_dir(INCLUDE_PRIVATE) + + # Initialize a context object to hold traversal state and records + ctx = Context() + + # Walk through directories and collect module/folder information + traverse_directories(package_dir, package_name, INCLUDE_PRIVATE, ctx) + + # Generate documentation pages for modules and directories + generate_module_pages(package_dir, ctx) + generate_directory_pages(ctx) + + # Build navigation index files + _build_nav(package_name, ctx) + + +# Run the main process when the script is executed +main() diff --git a/docs/gen_ref_pages/generate.py b/docs/gen_ref_pages/generate.py new file mode 100644 index 0000000..2fa6e0b --- /dev/null +++ b/docs/gen_ref_pages/generate.py @@ -0,0 +1,289 @@ +import ast +from pathlib import Path +from typing import TextIO + +import mkdocs_gen_files +from config import INCLUDE_PRIVATE, LINKABLE_IMAGE_EXTENSIONS, SOURCE_DIR +from context import Context +from helpers import display_parts_for, is_private, sort_key_for + + +def _defined_public_members(source_file: Path, include_private: bool) -> list[str]: + try: + tree = ast.parse(source_file.read_text(encoding="utf-8"), filename=str(source_file)) + except SyntaxError: + return [] + names: list[str] = [] + for node in tree.body: + if isinstance(node, ast.FunctionDef | ast.AsyncFunctionDef | ast.ClassDef): + if include_private or not node.name.startswith("_"): + names.append(node.name) + return names + + +def _iter_public_python_files(package_dir: Path) -> list[Path]: + """ + Recursively collect all public Python files within a package directory. + + - Excludes __init__.py files. + - Excludes private files (names starting with "_"). + + :param package_dir: Base package directory. + :return: Sorted list of Python file paths. + """ + files: list[Path] = [] + for python_file in package_dir.rglob("*.py"): + if python_file.name == "__init__.py": + continue + if is_private(python_file): + continue + files.append(python_file) + return sorted(files) + + +def _parts_from_source(python_file: Path) -> tuple[str, ...]: + """ + Convert a Python file path under SOURCE_DIR into module parts. + + Example: + src/pkg/module.py > ("pkg", "module") + + :param python_file: Path to a Python file under SOURCE_DIR. + :return: Tuple of path components without an extension. + """ + return tuple(python_file.relative_to(SOURCE_DIR).with_suffix("").parts) + + +def _write_backlink_if_needed(fh: TextIO, parts: list[str]) -> None: + """ + Write a backlink to the parent index if the page is not top-level. + + :param fh: File handle to write to. + :param parts: Current parts representing this page. + :return: None + """ + if len(parts) > 1: + parent_label = display_parts_for(parts[:-1])[-1] + fh.write(f"[⬅ Back to {parent_label}](../index.md)\n\n") + + +def _record_page(ctx: Context, display_parts: list[str], doc_path: Path, is_directory: bool) -> None: + """ + Add a record of a generated page to the context. + + :param ctx: Shared Context object. + :param display_parts: Human-readable parts for display. + :param doc_path: Path to the generated documentation file. + :param is_directory: Whether the record refers to a directory index. + :return: None + """ + display_tuple = tuple(display_parts) + doc_rel_path = doc_path.relative_to("reference").as_posix() + ctx.records.append((sort_key_for(display_parts), display_tuple, doc_rel_path, is_directory)) + + +def _display_sort_key(parts_like: tuple[str, ...]) -> tuple: + """ + Compute a sort key for display purposes. + + :param parts_like: Tuple of path parts. + :return: Sort key tuple. + """ + return sort_key_for(display_parts_for(list(parts_like))) + + +def _write_module_page(doc_path: Path, module_path: str, parent_parts: tuple[str, ...], source_file: Path) -> None: + """ + Generate a documentation page for a single module. + + :param doc_path: Target documentation path (index.md). + :param module_path: Dotted module path (e.g., "pkg.module"). + :param parent_parts: Path parts for the parent package. + :param source_file: Path to the source Python file. + :return: None + """ + mkdocs_gen_files.set_edit_path(doc_path, source_file) + + members = _defined_public_members(source_file, INCLUDE_PRIVATE) + + with mkdocs_gen_files.open(doc_path, "w") as fh: + if parent_parts: + _write_backlink_if_needed(fh, list(parent_parts) + ["_placeholder_"]) + fh.write(f"::: {module_path}\n") + if members: + fh.write(" options:\n") + fh.write(" members:\n") + for name in members: + fh.write(f" - {name}\n") + + +def _collect_static_files(source_folder_fs: Path) -> list[Path]: + """ + Collect non-Python static files in a source folder. + + - Skips private files (names starting with "_"). + - Includes only non-.py files. + + :param source_folder_fs: Filesystem path to the source folder. + :return: List of static file paths. + """ + static_files: list[Path] = [] + if source_folder_fs.exists(): + for source_file in sorted(source_folder_fs.iterdir()): + if source_file.name.startswith("_"): + continue + if source_file.is_file() and source_file.suffix != ".py": + static_files.append(source_file) + return static_files + + +def _emit_static_files_list( + parts: list[str], + static_files: list[Path], + file_handle: TextIO, +) -> None: + """ + Emit a section listing static files for a given folder. + + - Copies static files into `reference/.../_files/`. + - Links images if the extension is in LINKABLE_IMAGE_EXTENSIONS. + + :param parts: Path parts of the folder. + :param static_files: List of static file paths. + :param file_handle: File handle to write documentation into. + :return: None + """ + if not static_files: + return + + file_handle.write("## 🗃️ Static Files\n\n") + + for file_path in static_files: + destination = Path("reference", *parts, "_files", file_path.name) + + # Copy file content into the documentation tree + with mkdocs_gen_files.open(destination, "wb") as out_file: + out_file.write(file_path.read_bytes()) + + # Build relative link + relative_link = f"_files/{file_path.name}" + ext = file_path.suffix.lower() + + # Display images as clickable links + if ext in LINKABLE_IMAGE_EXTENSIONS: + file_handle.write(f"- [{file_path.name}]({relative_link})\n") + else: + file_handle.write(f"- {file_path.name}\n") + + file_handle.write("\n") + + +def _write_directory_page( + ctx: Context, + parts: list[str], + subdirectories: list[tuple[str, ...]], + modules: list[tuple[str, ...]], + static_files: list[Path], +) -> Path: + """ + Generate a documentation index page for a directory. + + Includes: + - Backlink to parent if applicable. + - Subdirectory links. + - Module links. + - Static file listings. + + :param ctx: Context to update with record. + :param parts: Path parts of the directory. + :param subdirectories: List of subdirectory paths. + :param modules: List of module paths. + :param static_files: List of static file paths in this directory. + :return: Path to generated index.md file. + """ + doc_path = Path("reference", *parts, "index.md") + + mkdocs_gen_files.set_edit_path(doc_path, SOURCE_DIR.joinpath(*parts, "__init__.py")) + + with mkdocs_gen_files.open(doc_path, "w") as file_handle: + _write_backlink_if_needed(file_handle, parts) + + file_handle.write(f"# `{'.'.join(parts)}`\n\n") + + if subdirectories: + file_handle.write("## 📁 Subdirectories\n\n") + for child in subdirectories: + label = display_parts_for(list(child))[-1] + file_handle.write(f"- [{label}]({child[-1]}/index.md)\n") + file_handle.write("\n") + + if modules: + file_handle.write("## 📄 Modules\n\n") + for child in modules: + label = display_parts_for(list(child))[-1] + file_handle.write(f"- [{label}]({child[-1]}/index.md)\n") + file_handle.write("\n") + + _emit_static_files_list(parts, static_files, file_handle) + + # Fallback if directory is empty + if not subdirectories and not modules and not static_files: + file_handle.write("_This section has no subdirectories, modules, or static files yet._\n") + + _record_page(ctx, display_parts_for(parts), doc_path, is_directory=True) + return doc_path + + +def generate_module_pages(package_dir: Path, ctx: Context) -> None: + """ + Generate documentation pages for all public modules under a package. + + :param package_dir: Root package directory. + :param ctx: Context object to update. + :return: None + """ + for python_file in _iter_public_python_files(package_dir): + parts = _parts_from_source(python_file) + parent_parts = parts[:-1] + + # Ensure parent folder exists in context + ctx.ensure_folder(list(parent_parts)) + + # Add this module under its parent + ctx.children_modules.setdefault(parent_parts, []).append(parts) + + module_path = ".".join(parts) + doc_path = Path("reference", *parts, "index.md") + + # Write module page and record it + _write_module_page(doc_path, module_path, parent_parts, python_file) + _record_page(ctx, display_parts_for(list(parts)), doc_path, is_directory=False) + + +def generate_directory_pages(ctx: Context) -> None: + """ + Generate documentation index pages for all discovered directories. + + :param ctx: Context object holding traversal state. + :return: None + """ + for key in sorted(ctx.created_folders): + parts = list(key) + parts_tuple = tuple(parts) + + source_folder_fs = SOURCE_DIR.joinpath(*parts) + source_folder_fs = SOURCE_DIR.joinpath(*parts) + static_files = _collect_static_files(source_folder_fs) + + # Gather subdirectories and modules for this folder + subdirectories = sorted( + ctx.children_directories.get(parts_tuple, set()), + key=_display_sort_key, + ) + modules = sorted( + ctx.children_modules.get(parts_tuple, []), + key=_display_sort_key, + ) + + # Write directory index page + _write_directory_page(ctx, parts, subdirectories, modules, static_files) diff --git a/docs/gen_ref_pages/helpers.py b/docs/gen_ref_pages/helpers.py new file mode 100644 index 0000000..7710695 --- /dev/null +++ b/docs/gen_ref_pages/helpers.py @@ -0,0 +1,83 @@ +from collections.abc import Iterable +from pathlib import Path + +from config import INCLUDE_PRIVATE, SECTION_ORDER, SECTION_TITLE_MAP + + +def is_private(path: Path) -> bool: + """ + Determine whether a given path should be considered private. + + Rules: + - If INCLUDE_PRIVATE is True > nothing is private. + - Otherwise, any path component starting with "_" marks it as private. + + :param path: Filesystem path. + :return: True if the path is private, False otherwise. + """ + return False if INCLUDE_PRIVATE else any(package_path.startswith("_") for package_path in path.parts) + + +def prettify(label: str) -> str: + """ + Convert an identifier string into a user-friendly label. + + - Underscores are replaced with spaces. + - Each word is capitalized. + + Example: + "my_module" > "My Module" + + :param label: Original string. + :return: Prettified version. + """ + return label.replace("_", " ").title() + + +def display_parts_for(parts: list[str]) -> list[str]: + """ + Build display-friendly parts for navigation from raw path parts. + + - Second element may be replaced by a mapped section title (SECTION_TITLE_MAP). + - Remaining elements are prettified. + + Example: + ["mypkg", "ui", "main_window"] + > ["mypkg", "UI", "Main Window"] + + :param parts: Raw path components. + :return: List of human-readable display parts. + """ + display = list(parts) + + # Replace known section keys (e.g., "ui" > "UI") + if len(display) >= 2 and display[1] in SECTION_TITLE_MAP: + display[1] = SECTION_TITLE_MAP[display[1]] + + # Prettify remaining elements + for i in range(1, len(display)): + display[i] = prettify(display[i]) + + return display + + +def sort_key_for(display_parts: Iterable[str]) -> tuple: + """ + Build a sort key for consistent ordering of navigation items. + + Criteria: + 1. Section order (from SECTION_ORDER, default 999). + 2. Path length (shorter first). + 3. Alphabetical (case-insensitive). + + :param display_parts: Human-readable path parts. + :return: Tuple usable as the sort key. + """ + path_parts = list(display_parts) + section = path_parts[1] if len(path_parts) >= 2 else "" + + return ( + SECTION_ORDER.get(section, 999), + len(path_parts), + tuple(part.lower() for part in path_parts), + ) diff --git a/docs/gen_ref_pages/traverse.py b/docs/gen_ref_pages/traverse.py new file mode 100644 index 0000000..1c13896 --- /dev/null +++ b/docs/gen_ref_pages/traverse.py @@ -0,0 +1,127 @@ +import os +from collections.abc import Iterable +from pathlib import Path + +from context import Context +from helpers import is_private + + +def _walk_dirs(package_dir: Path, include_private: bool) -> Iterable[tuple[Path, list[str]]]: + """ + Walk the filesystem tree starting at package_dir and yield + (relative_dir, subdirs) pairs. + + Rules: + - Private subdirectories (names starting with "_") are removed in-place + unless include_private=True. + - Entire directories marked private are skipped completely. + + :param package_dir: Path to the root package (e.g., src/mypkg). + :param include_private: Whether to include private directories. + :return: Iterator of (relative_dir, subdirs). + + Example: + "src/mypkg" > [(Path("mypkg"), ["subdir1", "subdir2"])] + """ + source_dir = package_dir.parent + + # Walk filesystem tree starting at package_dir + for current_dirpath, subdirs, _ in os.walk(package_dir): + relative_dir = Path(current_dirpath).relative_to(source_dir) + + # Remove unnecessary catalogues (pycache, build, dist) + subdirs[:] = [dirname for dirname in subdirs if dirname != "__pycache__" and dirname not in {"build", "dist"}] + + # Remove private subdirectories in-place if not including them + if not include_private: + subdirs[:] = [dirname for dirname in subdirs if not dirname.startswith("_")] + + # Skip the current directory if it's marked private + if is_private(relative_dir): + continue + + yield relative_dir, subdirs + + +def _parts_for(relative_dir: Path, package_name: str) -> list[str]: + """ + Convert a relative path into parts; fallback to package_name for the root. + + :param relative_dir: Path relative to the source directory. + :param package_name: Top-level package name. + :return: List of path components. + + Examples: + "mypkg/subdir" > ["mypkg", "subdir"] + "." (root) > ["mypkg"] + """ + return list(relative_dir.parts) or [package_name] + + +def _register_folder(ctx: Context, folder_parts: list[str]) -> tuple[str, ...]: + """ + Ensure the given folder exists in Context and return it as a tuple key. + + :param ctx: Shared Context object. + :param folder_parts: List of folder path components. + :return: Tuple representation of the folder path. + + Example: + ["mypkg", "subdir"] > ("mypkg", "subdir") + """ + ctx.ensure_folder(folder_parts) + return tuple(folder_parts) + + +def _register_children(ctx: Context, parent_parts: list[str], child_names: Iterable[str]) -> None: + """ + Register each child subdirectory of a given parent folder in Context. + + :param ctx: Shared Context object. + :param parent_parts: Parent folder path components. + :param child_names: Iterable of subdirectory names. + :return: None + + Example: + ["mypkg"], ["a", "b"] > {("mypkg", "a"), ("mypkg", "b")} + """ + parent_t = tuple(parent_parts) + # Register each child subdirectory + for dirname in sorted(child_names): + child_parts = parent_parts + [dirname] + ctx.ensure_folder(child_parts) + ctx.children_directories[parent_t].add(tuple(child_parts)) + + +def traverse_directories( + package_dir: Path, + package_name: str, + include_private: bool, + ctx: Context, +) -> None: + """ + Walk through the package directory tree and populate the Context + with discovered folders and their relationships. + + Rules: + - Private directories (names starting with "_") are skipped unless + include_private=True. + - Each valid folder is registered in ctx.created_folders. + - Parent > child directory relationships are stored in ctx.children_directories. + + :param package_dir: Path to the root package (e.g., src/mypkg). + :param package_name: Top-level package name. + :param include_private: Whether to include private directories. + :param ctx: Shared Context object to update. + :return: None + + Example: + "src/mypkg" > {("mypkg",)} + """ + for relative_dir, subdirs in _walk_dirs(package_dir, include_private=include_private): + # Convert the path into parts; fallback to package_name for root + folder_parts = _parts_for(relative_dir, package_name) + _register_folder(ctx, folder_parts) + + # Register each child subdirectory + _register_children(ctx, folder_parts, subdirs) diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..754b4ea --- /dev/null +++ b/docs/index.md @@ -0,0 +1,105 @@ +# UQ Desktop Processor + +`uq-desktop-processor` is a desktop app and Python package for visual urban assessment from street-level imagery. +It combines road-network sampling, optional Mapillary downloads (or your own images), CLIP-based prefiltering and scoring, optional ViT workflows, and GIS-friendly export formats. + +> Package name: `uq_desktop_processor` +> Python: `3.12-3.14` + +--- + +## Key Features + +- Chinese postman / drive routes with GPX export for efficient field coverage. +- Road-based sampling points with configurable spacing and minimum separation. +- Mapillary image download near points, or processing of local image folders. +- CLIP prefilter that moves low-relevance images to `rejected`. +- CLIP prompt scoring on urban-quality axes (for example: beauty, safety, wealth). +- Optional ViT / finetuned evaluation path. +- Export to GeoJSON, GPKG, SHP, and Parquet via GeoPandas. + +--- + +## Quick Start + +### Run with Poetry (recommended) + +```bash +poetry install +poetry run uq_desktop_processor +``` + +### Run with pip + +```bash +python -m venv .venv +.venv\Scripts\activate +pip install --upgrade pip +pip install -e . +python -m uq_desktop_processor +``` + +--- + +## Mapillary Token + +For Mapillary downloads, set `MAPILLARY_ACCESS_TOKEN` (or provide the token directly in the GUI). + +PowerShell: + +```powershell +$env:MAPILLARY_ACCESS_TOKEN = "YOUR_TOKEN_HERE" +``` + +Bash: + +```bash +export MAPILLARY_ACCESS_TOKEN="YOUR_TOKEN_HERE" +``` + +--- + +## Typical Data Layout + +```text +data/ +|- images/ +| |- raw/ +| `- rejected/ +`- results/ + |- sampling_points.geojson + `- urban_quality_ai_output.geojson +``` + +--- + +## Documentation and Development + +- Build docs locally: + +```bash +mkdocs serve +mkdocs build +``` + +- Common checks: + +```bash +poetry run pytest +poetry run mypy src/ +poetry run ruff check . +poetry run black --check . +pre-commit run --all-files +``` + +--- + +## Project Source + +Main package: `src/uq_desktop_processor/` + +- `gui/` - PySide6 application shell and pages +- `pipeline/` - pipeline orchestration and defaults +- `evaluation/` - CLIP prefilter/evaluator and finetuned evaluator +- `street_view_analysis/` - sampling, road graph, Mapillary, drive routes +- `layer_creation/` - vector outputs for GIS workflows diff --git a/docs/readme_images/gui-drive-routes.png b/docs/readme_images/gui-drive-routes.png new file mode 100644 index 0000000000000000000000000000000000000000..9b63dfae9656c1496e72fb65125bb9c008efff5f GIT binary patch literal 138024 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%0DKDybe-mCe^%PzSV5$He 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�cSfLnlfD=e1O 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�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%0DozOumE(K|&SzHSZPC?6%}%O?lZ0h{2CC6YV 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πh=>TDTZ$CR z5LW)*4d1)RyY+E>l1Ov1f}a0f zV(*wcp+8Z;u2JXo#uFK|;g!W`T`i3b2OGkNcdPpL2SVfP-6!rC#ff^-kLxJs5wvsb z5v4LhhJ^v5Sw~gyl5+>A<>N>&^2HI^BN#A+h2pPK6C&RX6wivMkcO7YEX|mSW`u_B zvCP3%GQg=fHZIH0&tbTkzBri0ax+Ej@mdaz4DFLWb;tc4^~MKo_ikgz5j3cwCV}D| zhWsw?ZEedNL(ODSMJll3Fi7J>XE3rlU1D zpQo7ExiUCuoPX!)y`I2R%^LJvWnwlrH{YRAs%oxSs$8CIr3)SKv(nYDLXK9Fqbg&O z&R<7Q7rKM_EI~2`S2x$CwjHwEKqTqc1e+4At{X1@@!a8)W~)0p&M0rWohi8eweHCgr-YLHnh}(<7WJfj->X_FG>( ztg>g5#`vJbz*cF0cH*&$`qOga_F*#eL;G6H=AC8S;w@^GiA=R?D+P+EZtUy}nudu# zW4(p(kkdSUS)aZ_k4e8>J;&^m@0uW(6)9&o_l6g)Hw$q)mHu>>|DvpGrPfBSLn^`}=C2i$1w@U!OLQQPJZwp^l@KBhdqmA6%<2s8cu@eo4v)%n*Hm4a$a$nRx_p&fb+ z^=`TN6RuCt<{q`UZouqDXy&e+z`C6PmBMp61<6zuiMgta>wZeS4N_wc;zed%XENo$ zjrhp&x0jb_d*q=e_kWUJsotAo(|lrcn0qs(9qs3(0+WlJ(~8k0E(Rlh=9=?)7yNvJ zG)&dzxa`RS_B-R=H`+9*?0t~dVDO5;2SZNQy>KddF{0J9q0c74o3vOAOi9mL{G2CE ze2%wC0@x?lBs#m}G%sJ`i)N{4M-afMuXHDGA9TNjAXV`BU@KOKR51Nz(ObJTmJ)(F zJ>!2OG|dp)J0dLMN9QS3Dt<8%3~-xZZV_;A9=m$w8#mFg5pSU&G&noECaBaO+c~=1 zh10+c1AOGNMyAw_Kx;+tRhpI=jUe}=5s^)bz+%GLO*NPbb#EUbRk{D^m@S;9Yc7$h zUVzeEl+sg_^7ih|{(ggT{gn@aI#b|{L!Kf@z8il2O^MGr3Bg;tv6QIb0y3D1**veZ z&LFWP54h+)L@GSpx!LI7XOd(3el^Q(zJ^}p;1v`D3D^J1Rucf@;^6Gd&*_R8=9R6& z!YU)JyZ6gzMTx6!ugLvdM*!mjn?S95(^t=Or*M zadaNqOPt2`tY533u-0vbf%fQNoJ95Vm!}p0N!)&sxQabWAXQ(G$$)W!fV`nh#~l$7GuNMRr9OwX9eY7!|Lico8ZU(?m#JNqv8(%z%~rb9pnW0PDAT0w+{ItEUc`p#K0 zY4fgK*L&C&1sX?meV|CF6lRjL|M8oLKZ|FE`CuVL*_79#gDk&RD@J1sz2jz{wuvAz zT}3z;+#WlTYf{ivL#rtBZrK3{Vb{e$7PS8yGkr7^jRJq;tMQQgyP{3vs@KN$yi#@z zcpDp&Jf@o$5meiMFyG->97(f0ByJ~u45gQlo^eR{qaKL$S!!@pR$4@^C{%;zoM%>9 z0Xy!``g}E+^?~XCkGr=Fiz;f{K!*kaDWxTqP+Cerh7>75M7pFKq@-IyS_uJ>?h>Ry zN$#sho-J)lv|d3rj9J&>xIyo* z;HLZe>rjYl5->KK5k#p*v>v!s%7Sl9z?XB;gy9X0#^&`_Vjol?qSg;IF zPwd`iQj`;?p9m-R{Ukfoq$}+9qd|Hq(9tzWEs|4UG45kDz)EgS45AMO0(h|v*JNC-Q#b4^ITOK5ZN z<9Fkf@WelUc5)tkV8N<>c+Hfz;|QVLM&u7`er>+0Qe$#Cb7iVasjJrc7q51Rm2SL; zY`HNZV&$rt&zE2~Cc4f8J<%5j(o+V6hyo9M?#-EdvA3g;E6d#>ftNbW^1WQ#3#r#(=z&XcZv_?i{-fEm*U2YgK6XXn=qOx54YFv@sKXFNX%qZjn%xr zDdpyDOn-%hu6qWlS#USHB-*#%-{$WKoHKd~Xb`hcjKjF1sCb7WL_;S_tTxL<0^39u}X~9bc{@ zW~HEB13^c?S#$3`&eY|!uXx!%kG;X~R54Ec9PZZf&u&RAyxNL>v3IaOsL=i0t_e^5Cr6oe@1kUk`%y@}fsfqH&!>}EzaEeoDoK4g zl%5Vwpc%0AKsexI9H+ugay!0pGvLSM4(LavW$2R!O7!iLMCbZHr3&5Yj^CA~oc>IC zc#FC8By#I?{4=0I$;c9LwkNcXcBy`@#4i4fD5b`GQqh}w+zl~20FiEGZUhI&VuS{D zRVH8r?xwc2znE9bTOJBIEJt*nCfg+>i<7jze(Fr`*=GRYaYRKPXnPN=UX>GxdiCo?-1~dhMT@vrWf|ZT9$q!7g+J-iev2S)2OErGkCHZk+cQG6G3n%Z z-RHW5_j^r@tV>p2;EDK*rM6f50c*hl_su7Z2TgvYPEO&~;=;o2xrKSF9R+g-O<${R z7(cwX68BiDzJvGLjxl0Vfq^B0n>o<);)NA#-34DmJ{Spv6OLV&&uJj86sIzMVjRxm zKgND)*S@!|RTUm|L{3n+*Z*p2o~qenW8K&fyAt6egq^}Z*naHaATYmT%92CF{EvM9 zv;zL|dvG=9f_slp(*D?m?JArKGYofd0^9}b;Qah)C!(3@X&WBe6e%XYp}Mnpx)iMX zIPx#=l$3%aHZbUMa@!t(MNr4=_6Tu`Di*u=l1j zYFlRf8+gbnx}+0*%AjiwiCy4FkP}@}UTu4lo*X-k&bnZPT`$FhCa{7(t%gfU5p65(mJt^u;H74>$Hf~b>+z|Vs1Fx&)L1XR&xW74xK((92R57O(S-D0e&-xH5YjdDv3c3P*hHnX>8Fezp6caT@4 z)>+s}wq!33)rySM9r~ETUk6|J%lq1SxornMWncIbQ`3k34SR|k9Lx3j`OYn(t=3`R zP;kc!qAn}5P=pqVg3)_gdd-jIwLA3Oo>oPRrj8>rx&SCVp5Zq}+MhOJ)c!diXvb&2cYf10J(#v{> z@S~a1uxeeK?cq~g`fXlZT-f7KO-*`URsf7`WT(?G#@$LPqYkBu2&6e9aQ}eXgljF4 zJE;>8tvAE0CGEhdu9Z5=Z-hv0&9K~+{&+Rw^e!n)YnRXqZLh4v5~9(hklRDEAjK5cua?wZWr(*tY2+6=PI*`oE} z54jJ0Zb;JWYh_nlk2Pc{cPO8G^ljf^h2{f8%4UmdJSZNfh&fPOxDH>)+-&%xH5|7o zFiMsj=~k{XU6AF--khhHh2LM|Vmx)vOzQf%lrTgaX0RX6JQe(p4K(~DNAGaYH8EkPDVsu;P|?T~-rt&|gO%^e{eA{KYVt27iBE@8ojXjArcpEtZyF#^D|A2pQ3U ztLJvw?YbX_ec8Yr0Z%*hlE#a8$iD2e*x7txDLga8BQ<|ae6;1{)Oi+6@9E@466$I- zI05YoNQWoaAFlmYNqO?`*k78dQ5@$5@_e#)GAM{q%qegC*%dYXp01i)9{#%>1h2a! zSf|g8<$LZ|^q-xLyuEY>%9(348Fd;o65e59PdH!E-8edh%TW!WSl}eBV==a1&hLZeR#L#>0{BK#|gJhs=j8} zP)P2_vCMq5oE;kIMgt&2UA@6`;&wNT(>bQNFstNIg=b86}!*Dmf6JAtbH9p~U@j_wHwz4eB7b$W#+ zR~3pGX6XSQGT2&U6fxNH7S-Fkn0NbJd_z2&u;`Te&)2{PWvVY~Q$qvjljJexC%>uz zT4-$$USboAHM&wa$~q>G%=slxE5yLxzV*{|-UR8&uFVv$tw8gIMDT4h&s443+?M=+EKI zNi7^zf%g{ZJqgQ-N%n}a{jOmx%qWNqY=C1WJc|;NE1%I_4$?@b8cyWemD0uG(7zj) zHZ*!F{HW*PlxaLP>)K5tVd>&ni@?}{Ih9xb47Mix3sw8QE|Lzn8hF2cXfzH~4IrOT z5TUo7{P$;>y|7O3@)@%c~oZL{WHJr%!8 z5rD-EE>Xbi_O2g?&Iood3(gzd@Dn!+8a=_$Gzhxv}M;JRzl3?J?@%&8st-+CHAzxz(}bV-OsybkN?W?EIW z3H(xS%UzAf))j+9bQPN=S!bG`T5vG-CkL_l~jF5rMNlZPI7DjZEF zMU?opjmCAa%j2+j?S**K4=CVp#WEYhXlC(AyjxTS`8RTu_3)e5-2vHB>-u|mcOnAa zmQA#W#K{;L!Fsp7vkJBEs2y@ji4tumr7*v9l)o4Y&mMShCJMC2h=OLWhqfL}CLCGB4lXM0ecG`Y3=#cpe$w>(Io3Aa^}E_ep7!RK7Fb&fy124U(&|wao7*) z(B=xwe_b_$W%Rli>~>eop!=OhrL9h#w@? z4(uwMF?eMWmcd^Z&$w~hF3ci$C$V6ZgWBd=+4?gD`1LyJ=Km(QsosHb zP-IeavL(+qHxG}rsGeJ-_$oU3g3{>TLGNIBJWrESR_2LshVB?b&U@+D=rbT(!4E9t z;(!}}uyCL|IW%@RUW-Z^=roWt1KJfS;3``aa9~~DR{b2ohKVi#kJuBB37JB1Ygqg& z9k`aX)I4+P5~>eVfp!7p4vq2J&U@V-?J;UIn+8AqL{^il5}|QX&yzD7DN%c#M-Qpj z0LMCKpaS&HKGbTQ-qMef?D2~(rMj)7Unq^J1y z`BXoe?>bu1jV(EPobS!$KsvgN#_wdX>`JQlBu)_J34G6bUTOgn)^`Z5eknzC0zT3i zb!Jrl4qE03VWgpRL>#QiTtF}-CG?#9oREUmh>hmCgy;|?5G*{9|EO2*){T{S+@IUe zl!(oo^rBSy2dEPR2!3*aN^6U6$S6z1ZxmHqv-9#kU$K{G`-K_|lj0^*HAJ^W#qaRm zhyHOuNCVZO#^ZkCJ9$sTcTujfIHFs6F?I5Y4!=W@_!G6+fkIFeN8KJHt`s&C_XQ;= z<9DT~j#zw|be9RG{lyJju_B>juzze;oduxYU>0_`>SM*0e_}JMGSDp6w!P8a{C2D# znr)3btl%`Xa}95N8&LuIAHbjN1{o0-)nSXL3%IKbiza`qu@?A`*f)NkV}}{L{#@K< z1xg`6#+z>KKOnA%XhRFD9vHPPv}mgRNNr(WrHneuLF&^bIOZ=6_w@?Oz3v6yk^Tyn zbcFRQG=ljO?3shXd2y`jS+^K#*Lrx*{_183{dA}-C}YOE+l^ik zpJn=Wnq`mCrDIYDA!!Lyio4nT*z$&tq=5r-Jq`FC0orfuaX;MOq)xW@z`U^;rcP=2 zt>X%!=2n^>dPC64Z$8F@Nx__Z>zH?+fyJNp$SpnmWq1^mP${wxe0G_6usTuJkd)$*#Uvz_=(~b~m%| z3F6A?0qITmX}sNUByxhaz&?mLQ^=&T`0figNOg4OCmW3>#m63yPg__pas~f5SaJPC z3gdtQ)xDDP3sj!ICj8%y9XUCV|3X_iGaylOs>51-=@Bfl!=wL}GltjLmO~;pgb;6` zOSU!9`({URiF>jQJV?Ity@fv}YeSW+HGiJ(wH~mAweC5stV5evPHw5^5_64m$Q;5$ z;Vql`99IxaGe17-+p^OXR0C?q9vn*=M`3p^|xQehFH>^nkE~wCHSw-~1S_b>^!1*O^s*(^(p# zfZwHnNCHxMiJR2ia*)9@uBW%7$cp#qT9Z}W*}~leD(I2t97)}y?FA>#y;dwG%1+|| znbCCKixuieN@)9IX2C&B`bAmR_3cb@imDQ)F~)CIX(HldR+7N{1irYM%=-o zt{Wu0sdK21f>BZl*!(;(YIp%IW727hvbMG-|8(Q{knFwTkqji?G0|d5LJTOqkxx4>!;mSG@dqkM8w^fi=0s_Y$IAOXJ0Acpa)f zz@KZi!=U2EN4wsWMh(zZJyrOVqG{vHP*zc@iQIydw!K$9W$h`&8QfeQ+-giKI&S%f ze*V>v4NmSSa;h`YK|J`Tw4$O=3UoS66oB4wg@_|8>rDpN!{%(9Q-gHzobF3xTP!`G zC%Ti;8=?aN(rd(5w|0s;q|-f25R5{nBZh=2%?ztX0ak7itFa`Sb4CdkcT|}Fo zDOF>PSIul+`O?+OxaLbW-1`RU3ydADfZzj)XsY$+^X?S;#<%}y^{@Z<(jSGFyT6;2 znfdsX@s?o8Qf(p!78UDB=7(0pfQ=KU{j;gTkn9#3mZl%kgSAh^3Etni$BVss;P_=Z z(9A~!*y~a5KZ2^2QnHPHzWgQuW0pSE8ZO^#nU>V15X^i6LsxI%&>=#=Rm-OO8_tp` z-xSRtJ)uB3tAU-RP58_h|C_dh00*%c)7G$*Ie2wlLmyT?7w>xl9ZF(TdH2uRxKb}O z6vngOtBT()J?EIHitYxjLK7DECTS@wi$vyQ#hg;7KX9zP!?V}M$`jK<@juz|BbZSW zG&)75aYD%Y(SGgmKV@P>6;2{F64PIB(ZscYpQiAs?o-tvya#&5jK^m;-{I-A&PoTb zDyh%Lp`zq=18!d{k0*hRuEGjWa#yEn;LnFQ^M_Y8+tE!JG2&by3wwp8Zy>eqck2BslSKp90~G!W+R*uTj-$`q7~&yVeleHXWuxbTU=mQgl1{2?P&m;%sdR6n>qu} z9-iQ7I7Q%H5!yqV7|g{{IP?8W+uZQx&7oBbbbpmVj8Ho#RGRda5mx}fVd*!OUaE&lP?)}C^o^5)AD5}TD!e8aG@6%Gre z6iTnU3DeE2vMz++b@5{E-V?M)U~0x6b>0Qa`6jIElV5I~lZa72Qg6@Lnn;?H#2T4- zdwJcRxSHt?EELyIH~3r))_=~PSOnKXiBxBVLoodNigkb}?6psYedR1E=FVM=J=rO$ z;FfL*V@HpYPRvAmtjo=dfi1Q%z?E7j7u?bUtH2Aus@f<2h68T9 zwGx>}opc0FUdf~O$SLF$@Y1hOz;q~Y?qA=u_5$pWyWyZA!>0S`hh+hnxA5i~^~n>E zKCs1I26fG;%#OS6ru3eeMz_w%GzbXNOx<^RBOn_9;}Cz9<3Rr#?g2K)Q!9*Plwo z>fxk$cO))TqF3N2KPjxN#A4}h=Ck$bBD1Tvw_dNfULkEUa{6iInnnlt=?i87Xcc6| z#>8+kl1CEWc81g8>+Uy^@C? zj;}$L1N+G>Yh~?Xeq4vbvdHxSfR3@Ix9!K0Jw$nH2TMog23JKPE6YFsHmI&8 z5?@Xqb>ZEd+t1d@vk=e zdXr?6CMLSV%b|He>vy(sVl~5mriAT9A-oOnm=PLD#yr`4yvor`4DsiCOHiS7c27PI zR0Ljg8D!>l(7_1emdB~Gl_K?$Vw8ioXEav7`JxDrV{+8}4gX<PmL_2-lZ zYUq~XP%lk;>&CkU^*+pp`^(5@yL&~`)pC78WtT#V16CB%B8uJZ%huxM29{bOH=D8lmNYB^0PnT&e2_?~O z@xDZDdd9fw8t_GrAvpmgSfd~6E4F}{CBE}*m z`h+@!;&JVbA9*`GDdLddZaD^+Uu+_02Sc)kTsMqkmUrP-lZQiUP59pKg%20vroQ>d zB)-PIaHXOjWXFKrNA)mHjQKTDm0ZL5S^S2&Wwr3+Hni^t0gY2j)a!}M0&|m{i|dj$ zz5$@ejut$zoFQV7!T7;VwhtN4i^Z@Mj0%2ScjdmjLw-w~=k(N66?i~WnhB=Nw$oa= z8@Q4{+p25veTKUHT&FVKq=leY2!p)NX*8h!BzN%hH4Qzzv~h(;k764m`JbVQK?0W{ zQ;w}`OxM2k&4~SkYYZxlN#elp{XWH0nagf_M&n%;Epl2}^**d7#9xf(PQi%3bP(57 z7sU76^?uh5%lt_dY#o>Bm)@B@C?nav{J+jfL&bJGvItyh*~Ki(KI+8PR1sF)I_C&>V-T1k zF0}5+-E$qOEYHkhandBbaYCX~Uzx0bxR~SL>GiN{@5~q%2o2yRfV}71v+HVoaR7<(Yz>~`?_?6P4HU|DILU>UY@wRdrv&O>=wb5qy^2N z3}%~FMkowN;<-)Sf<4l0^MD7}acVMrKt)t!dTdS^B4ny}vsi)eg_Q6JY^28f*uSOh z{Y?>1MLcFRFp4Vo=~gP~ZM7w;!%ezj9faaZI z<-gva2>u+qi8!}1R;bj2Kg{|8J~k%snqInOBVeHymUqHhw+$n>dvGc%jPKZFGD@uQ z(Z3^s#gZ9EGdq@d19?^&WPz2iO~=~8=mp=46P4f+3Y z%?h|jk3b+k6f$SNvO@5rRaz^vg4qY2#qz{Io95%SuXSeHE$l;-CwXcgxE{f~zy=B} z>?^JphjC22hL#*Yo4yjOtn-W)=?%c`xaEXuJ`h4zYwLfVvPPewame2XBERGj|L89H z-Rpn{hT^iPt(mmzmmep)g(jy)MUNJ|xw}3(fK+aXfSoWC{@QOUCRw?Zw~+`+BSJvU zdM;jEg)-W5f=mB2{Tjpc$t-ZEb&y8F>(nKU*w;qQ|3L)_a~fa}4_!Ub2jK;#@@C3H zs>Q(1TXy_vt$~G2i@3wRPW+jWw*Whf#8jHwAjNC-G%`Q-nQQnlj7$}V-V!`PyX|iP zIZAAUFlXWxzmZ*cO~UI3+Z^AX_FR?26xw})sbs<5`8j_(PHs96w0k8Xqh(K?7|M$4 zHKt|TIwIy`({xM!Q;UUJZ1pu>dOwoSmOnkP@6ESk*Z5suQCXXbqlgG=1x*^)Y!wYJ znLPTm7Yy2J73nqr7b&Ox=6`%|>C8EFL!;G-{ngo;lc2=~Ne(>VbjY}@e$@$5R?Yhv!8rv~^AU@D zz0vwHdr9lbOE(!{keHC34_Uy&mp@C{3#{C((yKhN*yscf%j;$X9BWPF_4+u2)Kwr(FBOg-K9fA6$y+^0i>W%;kUgY^iCgU-AS%bhg6T8;+zt~&RCZDFhesP z|MvI}Z*0>Wf#_p(8MHKMIm=ZsEgrx(RE<4DTUlqSOd@xBt-NxPRAsT1xEVU%s`_(l z%adjgfO{k0wPSb$ObVQ6EAWB=j{lSKpUH&h+up%J8sHtTea<|$B0?eCK0j|^KvZ6} zTgHo%Pf>xvph#%>%NM&KneWYE1VL9^wC&!?s<6@805hmPqV6)y8tiH%NH>1Aj}O-M z0W3CnlCwD)ldI?1xwi!P|1U8LuLmBmHF@KNNGB#I#~!sNJhZdB)70GjMhp)aok81> zMh#l%uyfR`vmiZ|ISpXu89!1EB2Y0B*B~}D8}FdIA39e0AZocOdi92b2IL3GrNc9)B-XvgH%^Sy9fG6a(42%H$_QD0YkW$vb0tNDpd<>kQ!*^qwrUeSAY!M<7bxJ0$X zxcOA*s#5Jfh@hvgthwCRcC$er*lDn>%yX*5Zp7Ot;yvY?Uvvq-HyyU2cO^(byc{zm zT&*AtHQaY@jFT#hVj$OpdD%&PphXZDHdFFI!)7Q(+sy&oSgzWE&Y~U~uKr7YPiwzJ zPEEq33`am!`j-wVsErTZoz4B4{nM(Mlh$?k#tZ!PCutg#+&Me(s|uEOHD*_O zEPv%7U~yr>`dKj5VEdy;BTjd}ck5nNsne;i9-Q6daK6J?6n%iX{}Yo?*;cf^gD+htnZ_~{fR0?8J##hU$O#J;yd4sG0xZFCrW zQ@?ts9Xi|4DvA1f5oTzH1LsssrA3fup}JnmsEJ6)zW)^ z>Nes`H8oNXC5b<{ZJPbq!718)Hk0%Qsaa|b@DL3e&a`mqlWqn;{?NdEiFEw*Uh2PP zV0q2sE(da+jy+O@3ApXT^^VaE3!4pSSZ>SpHUq7ltY2&@iJfyXcVW@>1vc62P&=4AfFI5byue?FI^=upTbPGB?hNH0+4T|Q zzmvoa_^KrJdY}-Z4JNYw%_2!w_yEl!u~L!lQPu(id9s0}Dc6)Z+mbb0w@O9Nq7?6E z{ZeY7i!PVwd%SzaWm8q_fuA7~7m!O~?GCSV`bD~`)t36NLAC`K5e%PbX#ha;tUJ!u zrrtIGr28?m-}^{ozjyoH&53iO|C}G>O-A8B3hU6WBN&38G03dq5Vg(34)39;9jvH+ zy2hcnnbL)CT~g@}@w(E89xkuAus$;u`IXV+Zu!DeYR)Qin-iFTf1Qq3o~ifUFQAPy zmtMe#@G+xlur;Z;3G+%MQUIU7#%(t-K5S4+a{XmQ;_pXFIjB(3igZAKck^Yep_eTFRD!il42VWFE#s3Xmm<4k znd9$lY}U1I6`}YQ>mBC0{^O3J*z@9r;HJA*vr*ZZn z`Z6&LcGJr6xNONByT~2^wWO)0eA^K|DC`K4f0AFjDl)-%tPSnE`Y*!1N7S0lww|1z zAVzQSep<1u_SJcE*vc(}@mu7Nx{af>>pXu-|JLEFmVj9h9onhvrTY_8N!vO;k|0?N z@$?Z-oUd{|H%)=THv!R};KYKp)u&H(4 z6%%>th=2?MXb~;;KthcbDE2~lRaS}r4}LLs!sq0pw|sURj{=^26e*yIh2*V=HZ}(r zZ5taKf>bfeOr&o=)Kz$2e~It(n|Ai3^34!Q<8yxS&eIhmxhJxG)N-JZYb=WB>FbZq z&u5I^1CSs3j^*unpC>iOVq1VZ6N8MaZZAP&#i};AcjL3&;hS4cUQfvqm2mBCEYVup znm`2V=Wc;0UGbk*f&}h*DZMrfXE9YFNZG0g1rI&fzQBVXo2DF^f-}T@asLzT zoz+Y!re?y$xg!{E+wuL-^Ge!Jl^(2n@HR{hje$bop8{7ygf=~m-XwHFahzoOGGt3* zh!CN!mv$026kJ>b%GwX$yv?gcj?PZu-t$Q~)&x)jfQg`gbxIBl*&;f37NOr)2oz}= z499?(p4yQbJ9M{?g~Jly@1ftJ16l;ODqIJEa;qjYzWtZuD;V^&Vf*QX1D$+tINTPo zK!O(5`3!PHh#5Rewl89DImR8CjmmcNMW{p2C`DKPncH2S`EX4Pm~K4L^2;6*6Y!-! zG(f4%t+|^p?rvTAownv~u(uQYA4&2UG>0*IGl7aXNI(RZU9SKJ*hF0@)mpdm|B?0G zd`c8>_J{bgq^Ca3h;Zxy8dbj`iGnh|jO>Pq$h(;;iYBRI#+~;>5zTH+6F2R9Wx%gn zHxYF8xb&-S#%t)(lbqWw+a{M6Z$)^Ft33H1!xt=%(svy1?Y=|z(A}izYI_BQnqedK zdFS-D$y&1t3U1!Z$!to3M#$ruH#ongghMy0d~D`!au**nEB&))ype1AeS=g*nPqQ} z{Yyx~O)1i>qouZYkooPpW)-!DD_xh^E(U9U6L5l)MZ~PImhjhwK-8ISya+G*$q8VG zHN3cV3@(kpzM3EH>-D+X@|^H!)Rkb+7^Z*o$X2cY@)Le@>!CCL0iVH&q zUkoY6P}={Pw;lHvi-HLJFC_95f^THB+Ap*e(Zmnrh%aod^_A z!i*m!&b|r~A`r_~;E>vD%Fx3*eXMy!g7ndTdX$h^CS%Sow6jo9v1`{VyWt6u#fr+T zTc(X2Q3~N2@^13wP8GTITcKR=yza#-gNwG5ntptZSYS&Fj&Sl9%E>5J_{U(q=_;_K zIuxCQ#WF)KaErPJmyk1S`kTCwSB!_;MB`%gV zK884DT*G^RhQz+*+zJ~)oj8%{<7)>VvK&uRNaR z$(aj&bq2F&p1XH z#aODD@Z%*XAIJUevwwQ-~AS66DZ#iI!)^{ z`8yNR4p#>5r3ETl8>~5UE4+Luq@!*WS7q&O!j`(JoG-R^ z^|o)!h7m&n8_=e%pq)HxSIDq~D(L_nqIwVQ+t5n=|Ki(NyK+4A$#HWRkSyqupY#pm zc?zD(%PP%ct_OMFoR0JaCQ|7qQH?HTryw1ofR(=9yPTT7{b36Z)SR^wMiSBk$c1d@ zQ~w)#zKXw6-u~%g0X)x4$jPH%*cTeV12#9#4bk=XC!9{79a7suFGlV{BiO>W&cwhV zMAxUFzBZ|ZewtVJh`m*+_Vh6|$-(cB{O-%!flg3@gy&0f|CJh>-X?exk-8rWNR1O6 zNBlxZMgL*8>L}lhW0oeP#vfy)RhdnqFfRK<2moU>1J894-o{KlP340Z^KvK=?C8yv zXXD4%U=yG_$9IF%@ntJAZ#b~DE#8Wpo+P8HHrr6UX7@-|TsGeticbzFY3LFai+Q)@ zDJ|`qxEto{y|@TE+P9x!~j6S9={9h?WOQM~SWME6QgS{~CPtViv7`AvW@%kRzLB;;Cqq9M40Jwa;IQ!8R%x%c zCcRTacU1^>dqW}z7d(Z>y88;i-poY_T!}ZVZNhbMV1A@&?#o)_2Y0a&en^-!(=ts| zt;eOl{-ZqNpR+w@nx0$ zhr|@^^i^^R?cf>z4da_>7f-USU;4r#B=JNi81MHMpdx)7dHo~{G5-;_BH>tABo}00 zP!jc8gSBYlR#aR3t@rncyMI8ltIUd^IBbeE0OmUay?Z4!;NkJSp!m?+psV5A2s5;_ z#`M^PQKF#QI%XkSw|0lUw>5K~^zgITk=0fljx_PN=~^fF0yZLpLkqg#*nuMSLKtv-GVPCPZ=nn6pt9azD7Y&-;bxS4o+kOP*Sz$b5 zI*C%zS2$Au@ua3#Ffite%*%=fcx2IP((8TcqR6(}+=5{_skty1JkcdC+hb42ao%p8 znAxQF=X2~BmCd!jeG~?)rf51EG}$N7^5X7Tq%Nu`hWyN*E8Y>y@|1K@x_j&eH}P%o z0H~q^M8US65hCZ}(ta(af1$~#U1=8&W=Ap!uJx1e1z_qNz_aC0RqJgDn-ZGlGNU*m z3a6hj;^$l~eCESQ<1-1e7@<*}-0zQEC=_d)?1+XZ@(2For5UxLY%Rz9ISr(ks88Ew z_jFy(2$M#hGkj(|&Aa5+*iwP~D#OL})E)Ctmr*ZIu)&i`-1cgw;!10U{&c3vVx;ZX zj&H zuMKmcL_Va4m+;_Motkkiwu&!lCi_w8Ae)s29_k3~DRP2eLY-Mfj_4)aE#SAQTxKoul zGWlU37ZxXHfedum(}xZ|Vb8)lupS-_8YtQcuZ-mS zzfCzh{gu0ImT6cZ?o4`A!_#ily*2koP@%uo^}h3>PYlKYsx2nqJiHgyqTrBA({Q!j z9j@7Seuq@wWOhr;yGpF>G;u2}4&%2M%+x^`>nNDtSv+{YfnskrNe$}|<0xaMm&)H- zQkUvlEY2Vp^;rgHHsIdk8&*G*mvR3XKb6`Lk-i(pW>7t#sG@;{dP5Y zC4&L(8L}{ENhy&aeWO9`hKPU0sn>VI9`M*`+r}>%D0Xt}V53L5Z~Y@fb?V9m*s)Bt z*}=q^$%&ibBj5snzo*IjofreL4v!EcU*n%ola+e`JEPWGTN(8g8>v*pj3jm!G2O3h>vi#Tg?|r>{P>Hnx95;HH$6F|d z7yZYe5;!yR_^tiy1#}G&CH4m7(THTRloh0!P9|HYP7fIAqeIl#W#IUFyrIWs{%h94 zn`cp0XSRRZ=68i5VN9ESSMTG>cYFKa7_J^`_v6@fc$hjGU#!SihA0Fv7+O|JM$i$u zop;o%lwWT~u61KJ*Pn4UsRS8*0&o7FvuwMQQaBkTV!)U?LO!}C%j%Mc{<%R1g%2|!IzU_H|Iy@=*+i!0*>LT(mO@6q zvYwq=G{)F-WxfhU_xy^|g*Q+NOfl^hDl=kra|iecDj1GSbAx)dO{L}CW2W<3*qa_~ z>>5Y#)beR9+Qe3JmpWWIcsmnDJ8p3J(t2BtJHh1o)LE^!`uw#-tZuI`}dn z-_#qGVy;Qd=xzH?To0St&GNo6!n1Qmnj{_&>pi%QQU|?@WIXXL5q&~)rR(cL?x{ga z7FF*0{FmY;YxR}QnW|>TL@PP*Dp!SpkmIJNGWlmtB8eF*Ts>S5A*X7bQ`qwVi*0Cz zuBz$z?>|w44IAs951Mr2X+xUqkkz{7J$AQ6<`m|qlGeL|oKDYYYn*0*F=lcX#2;i! zVkc8>FJ0V-X^3O3wjC_XtS8%4$>uVEj)U!rw#ajz{#%x=t;j-F5nj5eDX%Kk4pU{; zE@95G;4g4xN7R(L@4>}gi-A@m-$ScW)vgEqU8ew!Imk){*-0-jN1~%()qMT}r-e`Vhe(av7M0P+)OK@m10BtX$@( zO3)=HS9nSZ1T=CUT_@2K``<%H)`fDURi0VVbxBmx^6ki8()?v63 zXs)3j(=P$nb4e28aaaKMiMu?_CxL_R7)&B`)vyCqfGxig{YE#uMuW&Kno{pO6U8-&s)B|NNkm-&zEp`)AkD&!8kt1m7`s0-LmdIZB-{kf1>Wc#q$dXoHy?0RAvvbUd*T4Fs z4{)Xx0_%59s|F?+aMq4XoA|Z4B8pBMR_|}``0S-Obgjp_INH>X&0lT0Vc1w z3e79|%>O+=z91;|-DL2{`{^rnzS64+ZAlnk{eq}X_N8}vuF$bF6NKX286 z4CPQrT&IQ2iJwOqom*)TeozXZM6yvkbv{=O1Y>OW7OT&#clogXnGd?@M{pef>$QBN zd}#n)Gy06z^@+gfvlB$?%;I)-4epcnN4X(;F^eGieDr!zNfT2dZ`eD=V0A0Ww+}Cw zqbz?L1X$YKH}8|A0gp1cRS^|-w-aLy)|(9-_NGH2RACa8%+I*Ipp$Gj1ggm7Z}Kc2^ZwK{j`R^Wl)&4a8c-xI24a=pp>a zF5C-ETD>`G9i5qZwY9aCH-rKFM_?rv;7dyd7-HpF^fQCET+$a48(F|y?=wTK(Dp9^ zQ6tCB_R4^`hsTt=)1X`lPT#&#t1|S^f3^!JQ*%`H?W-)!b*$GXWpXHmY=_Bwckz_W z4_=s9ZeyMXW}x7TKdv}9HzpXUu>j(SDu2qZ4>|a?1+gP)0T^JsRzzhTCJZuo^%{BW z%Bi)TAQhFa0I}hR@q6OzxQh(1=k|n>AfuF}DOx=t${F}7mFF8p`2i>JeXHlyuUx1< zWwNrQ!*$Qr(l3hd{6k%#Xv4rAF5mueW-tRU(I&N)5=7I<7JQ@rc?t>$(EVuz-|r?Q z^PYiVqM=I7PS8yZPR_tDjLXm_e{>0$L~tDt1wuf|7MN^Gi4hB1=i0@{vEe1fk3KeQ zX(-?ZA+H?H6&HUsr9C)lg^jY?ap;y0%!Q8%q&f9;o76h`ECjN6lKyH$@k`xtn2M7gmx=R2)F!5QiXwC?KdHah5T#h~y|aI!F+Z%phsVc|dZQ>mT;2?yj!xrYtGT z;s4+3*Wv4a9TLMdpRLXJMO^JMcqh9j_tcG=Cpz8V)>AYaX?^iL`BeN21Uy+q6bG?l z4rLUb0jFBl7?G$ebpv%!pYI)agct!iE(ei5Ipy^|`o^+$TzlA!Lo35RTdn)mPVtbo za%KDnG9JfSQA=Af5v~~uo;UulSyT4=sIHJWl%4bNzu!}&W4dZ?1lujSD(1`f*!kxF zKZ#RtkDQn1a!n*Quu05xVw@AAq=5|;;skzKZEdfxLz5F8nj5n;5TC7utCJ5A0rBD~ zR#uvA)&u*oSv71k=dL#Q@naSYL#y_p6>A^e6GNXbl&u)JfP5Yw+Wh9xd|AviXPlGe zDkstf^YN7G-Aajo`_qS@fboX zP@I~Z>x@yCp{7$+I2ivfDG`7n0b|fmS*Bx6mMhtpKBBaO{-p7GV5p7g(8opm+%gQslp9T=t(oa;VVg&A(w7 zTb3r~lYFt+>E=!O;kL`aNT=;_+|Xp{H>Vk8UwGouR4TfY^JLcOXp8G)tHy>UYof^@ z9fiRoArcaUPQbV%oY`^c2EN?b1q~#zd1~=y7bS{0vo?BWU-*oEuh`QldkPaZL%buK;nq1Q)4S1ae-x?xmQdl*+`T(PQf)iDhYu)73p|2Qcm{Z`fXkNBd z!`$Dq=(k=<=`O11x~?mYW+PLGBE-)w?e7PE`o>92c=l)CrR~l%OBeDchbu-4tk@-c z&HUONC&yslli9Tpuvw9;>_Q)@wuk+`;`=$jsEC{rB3v_HG^Bc>I8Cj4a4@33|Mq}8 z3FA~sTq|{Sbd+A3>kDG{TMBCU_U*h#GRG}tJNs{mm!aDd9qkMKzMLD-u7XLUgekDF zn=GJlrvA0HwR`IeKYGhN^LXBc z(>+>QUY4MZBSr|-KIIb6|9c#6!`9|WA%c!&?Ht42Gij;$t*bN@mc)pZj0{%AAs;zY zDQJ35i}zjoOG~sf^9M|q8mO!p$&(8%G zZsAt(7QeN1k2rs>aF9yWtAP;!M4Vs8eks(3kE%(Icj1Sk9tBud{5zDxuBI*WRV3 z+OIOu(_c3+c?R3&bea4{hblIeYK~W6CPs?r%J4m|9jOAk7$jW?9v!`xsN#8aWum1c zFh@v8Xli;|!@)rc4MU^Mfiebo)$qBwhZ*KdXq{WPxOk+^pZ}F-bKe@_A^9Ub zIawHJb$6)3*UrvPT}zAB*~O*3qa$c&Z>>nlXG11FKK?~QLONX@9$0*5+7MUM{#JLy zNl6B`=YziJ&ce#ds^q;Ufo5Z%XJ9yI`wji`=TA{_aR#Z_tEH(xwxE-G#<^BsLvxZY zda!|!$d$09?(HJ0Cr7G9)P}Iz_vGe+*bU&QyBjNb>T@7xbJ9iL+S=OU#ft5v;UIQ_ zMiPkxvmB{tI37jxRXx3G>fR!CbhXDq7ZyCx0`b_7XH>T5@{moPa~xFJ+3Km(xqJ6G z^j3N_(abNepfD1^AY2tCrkickA^Vy)+!Xh2P>{D4CUd_u&H}FORDS))H#XWRBZ)L-BF;0vn%eY-%c~8lKIn zWCJAzygW8BLCDBxxjr-p#2~h{ai|EFCJn#!^74|AmzN*il8R+k#kXeH1@$d0$w-+N z`>)RSAoK@yAcwqZYtKxwF#Dq<)@`w{3@P~1UYg!6=MmlZsTT+ML$ioK@ zYFZSBo=5uqe5>TKfc}=KOp8KjJ+iWyjUk;M0KL1>WU&_r60R;}Xkfrrh#@_(Zi*S% zppY3uYT6jRySq^*t{TAZGfaye3FdWz)BR*t%F`4hDJN0=cV%o2 z&Q}$GSC4VGS9PmBl8~CJYod7w6`znmNn!V86xpa^a2l;Uf*J5KRNIwD4QG}v)Yz(R z|D{5ybEudndkMxiXITRo3Rn4%HI%1zdO5{afj+SAjscs8>%+u_HB&hG9Lr%us{ zZ1)ngLA)OhRR{qm!NL%lR_u&RM;bSdA~Ypje&*C;=5d^lG3ok1t2R=j)}ic$rub#Rr}F z6kELMtLd`tQ7eR5e4!p@Mq6Iz(xppR^!4dF=gNDJYAoWY+fhkL;raRUAdGLm9s1tU z!6l`EQV``~cAXd-8?FgvzP-eW`j&Jt1OX$(>x15p7R%R15xwqEu{psRP+$etjA&{F z2V=EyVJ&RiWN7QpPsTZirl+U*&}j5Zf&%c>i`8PQuSY?r*UYXGva>m|%9fev>FJ#o z29z;U$TrnQ{rC3#)RWc|6VWJ{!%uiYKN|Xsa-sfid8z7e9}^u-D3`Qi`;=u~E}*5Q z#TcwDV2 zy#HQxAe~s?I_L~L2Zt{+UFkHd$vZ1*RJofsZ#n^OA@3aA70c=G?~U{AqSkZ|gY*D< z(#&kkfn6buAGT>t4hPYoML86Y&?lwFObU*%y4!J*;Z%lwdJN+{R*?$HvK5oppVl z+VVFguJCg)KUnxt$}4V|tnKKy7%GbHypv_N#4&TWAB3$IQHtJ+<-F`_J2Jp}tTe-P z%sj(f_>IRgcLkWS2EX|FgU$G3wzb1hEj$(PcboZMq+9r{JZ%kfuj$Utq#D4K$$WL_ z*B6Fy&w*JQo}S8xFk(oB)srhDeYSW7BU*|6>BU827H-!bv*+#QmH&Jgflt-Tu@-)P z=k1uys>)MS8Q@k(EGBAZW~L_jk~fQG$5nap>-f(L3l1)nQ0F2N#(1rUOfgnXuz5OT zZDn=R^nqxU)mG8HdL~4t%vw+{R4l*FvWu&Sir0E*p}*9o#Xf?-pjvjd=OH3~e3jJQ zMGBZ`;qA5g4%Lt8=>?ILQ5`E}Sblzc1zCcUeG>&30$h#z>khk%sno9KA^- zmcIhr6N12Wj!d<`EuQ|60Gi+_r(pQB;x}1GZJR->v+V^nBQnCcokyR{%ln;tOP%wK zs~+xdt@f6CD-Qas=pzcN=!d%?0+_nejqC+;>w7U<@1-L#B|Pa|+gl~GnYDYn+X!xS z)4pDkp3aPDna0LOxC2D&5L(R-?TFhZ-2mhP+$Q+#sZizSM8YG`Nb~*f^KTTb1u+rL zf>AAiBmqA4PXge0Vn2i>hhujr#Hg1qg9_|>1o|zq?*xqJ^!A*~2_Hec-xUX`9!Jrl zhkdfOHkMoZ^^mnxUCc=Jz8jg6RWNNqr8=kK6$afq_bALnL6EBQMqJtq)OU|i(RGV@B+ zy);yPIx=$CXUTxF~IT-;US~1obu?z&)4p#^D=HKTkGnYni z9e{)5ii*6zNg?baU-}E|&v`7Ey1Kd|>JuQ%5dc~Hyv5JY?^OB&yV_-x14jTr62Y6i zQl{$W=E8_JMC^@aQFaMULhGa!V8;s=F32b;g`T<^Bg)Oh-w$Jjv6OmV1Ul^_P(bF$ zqRYxuv`=uB?JPGj(g*Pg2-F0ztNs%{`*XTu39Is?6`mhjQK5>yL z|BUzT`}cI9qTi_DRN>$s&GnuGgm6Mql2uYt5`nIe`fF&&Zjh)H;5OUMA5-O|ga&9@ z4f2`oJpLPoD{ElD6xw}hNw7eGgY*4As@gH5z}f>uf=EXlg1-~MdqvLe8INR*SfolIFccZ|OG86L6+os> z1*z<>rj^nAd>6tdRI|H26sbntY~6>tAkCxYi@sSY4$qs$YrvTW*Hd~p&NjIkF!m#u zsxaW(Bze0MVMgF{mGuD^CHFbLu&}UfpG{|Vv((kGuP?C^akfs&V|v`Yyq25G<6?ms zIe%k-%Xol6uAhFaE8@$o8!23$V@X61yW~p`ES3)zq6ut}o13e17=v(<+8!km0s9C- zT(4L!M|_BhR(xchZR_Y)aeN(xOnlU$&~pc(04V=wywam>DO$iffCM@Z6@%5?Xa2jj z^k9u8?Gh3ap22d_N=_(vbFe5Q&;r$YttBRg2aK)C=GaRm&*hVYYlTI3!EE=JeL-}> z<|Lj793BdWXhch7iz7zLEDS^d!F-4*L|ptx+zuH5rpGrPu=QU^GC-?fIS|PN_kC%( zNt#5D@dmg*QbVV*R0Y#K%ZpdLO-9^Hqh7xbCJKAA7^+YXBd!8y18#0^(My+vz|pEg zL~Uos2h@V!wOtbsqw^K1$zDveJy{|Y;)^$FN1+-l{$sJqAqdD2_$AtB@0bb)OfB_ytWRPb>15YQ-`d?`&VTHuGB$l_>DiC#I6~YmzQG~K2PR1 z6Tg12xb3fF5f<=C|24$+LO+~w&_-@sU4wsp#-qh|e&MI;8NI;h=m%0T0_30aav@+W zS?JdXV{pN*NAB&c_fA#F2pRxz0?&l7;cIY?fc7aAYEiG*u zgG_h-w=qSg%p`tI>#NK{e)0>L-&zUPE-ktcM~3K@z(FbO6q5_uQ}{Z!dQnun#1C1& zOS_so%&6tjQ%+Q?*c9Yq3D(N~FXr*@#FYts4}0zZW`iha?chqQvCdv;uL|3MPsd|0 zcgI{tuKj18?m-bXp;|;vFB&u-<6jXArbr(kZCB-|giv4=@OxK|qtubQLRipky~IWs zDThbAy}nsWwteCr6JH z6F))VeABg`wrLbC%D5Bv3R(pt3%7ghq{O1ZQLMe+FT~8*}h9SZUO6z}a$JNkRX!E`$cPpRCMr z7%mBZ1=$1_pJf29YdG7B^`c?p&##;$?Ao7-!y7#f{lIm1q$XJI!hXUhau5)kf8D%s z(54Z|4S`D3$BPBXZy$X0k01CV|JT3TyT;dsQegAo3SlV=thXsoN-a7YaUP`=B^3LE zhwe`kgQT9Yfrz19zKu_<4EV)7yS>RX+T_9_a>Tl7SVE_>55?gj%AeJP{A@$Qq0bVE zSP?4D93<6-W(pToidb)pXvou-GI&sVmj+En`wDdgojm>!_Nxj->R33PqDS3>*vR%{5eRaDj}WYpol-u#UP}+JGN0{Gy>8wa-&0< z(cQdf>hJeF&-=dD_5YviQns^mzIn&zzVFZXi>k6L87VC(2m~UNmwT=T0$s8LfzG#G zz6jhgeb+7n{5c0zlYIt4bkQ#YUoMzGReA~n6$W29eoG8|C$W>$fr3Ef4TOK^nr*X9 zfEWBNHC{WuR(dI7YzyIjYhwG(l-m^ov<%^-Her*LAR`rX6#-g+m^!|_;|j61fr_|_-}~LL z2=JM3o9CW{n1hL#h}v_RzfS<)#P3-+I@*cw@VL0RaJ%qv+d7!@@CpkH^E`UY^Y}3r z@B|ms&BpPqE0+zF`ELWyO`*mPmUfPowl;SN4ZeM6>*OeY&&kQsM8xc^nZP>}69KMw zZ~08PczI3Ua=kU-zXm4p=MFGe;M2b=Ls+JNSJ%`ASW*{Y?H-0l zUjczmZ^%D?s^Mz5Jm&48Igqe+ws#OBeS_r9Bef5`_wU}BR3&?I{UQ&F=>3zF!N(bV z-6D-v40+_bvI}HD4*B z)`N|c>EmH@)1VO$!O=P)t|>C303|U5>U4y8T}L0Eaik=DsBC@&cHMAPu>cilR{4M(}6$> ziWjfmzJtVp1<(I}JeeA7Y1!j*?mW=y0_A19b0E*yzSgsWbH9Jx7Vwpl;*M&!zUU+2 zJ7IMmbjXh$;Yz}o|NHjV(TPLlm>C~vo8&?n$VZ}c#kqZLFRt^?SQZ+A7Pn3R{IckH zW0L4kv%FrlNwVhW7K-;B{|tk0+lTQzi2Bcag#XrL4E8r!1hf-08wxu&WkhOIuQYe%rYyZZke;qbHm#`?y}Xf7scAG*Ce-g? zP%?COBJ_Sm@<^ei=du47ubKn6YTXp?mImHD?QpktMJxzcNnYusi~$zv_ti~9=+&YR zznSm(s+Vi?)A@0pGn6h%2K>Zk=Imvk7P%Vs^V7EDEF4#}O!<=4Y}~;|xywrl&~N%q zsHSXW_5tE}GD_$S#Tr0HnmDbepkBj$>c={%<%BxBz#xjcTuU3=d&X0T-l^w_5Bzd8C zuxXU{0!3S}+3cXxFleG*Pn$qBGDCW)G)16n=^50(1$7)6zczfS@9)HX`tSZA2Hkle z8FrLmr@74HWh#TA@NcH~Oxa z)jpd;XirbXd)d^W15zF6uurekw~T&a0}j+G#FKrjb@S%3O`ORcW1Fw^PahSwO61ec z6}5m#{GFzh)kfuO5Ga&tJar#o>r{46piFav%c{IwYn9Yk@z**ZxZ&;!qz)1uS1b9z zS^r*Cfs8o>9uE7a>mUt2I@U+aZr zlHbO5pES|c!9z6BN~=Qo3}O9M%aMcT*iTJ|W?oOd@ZBG7AbZ;MZ6E2EA|OfePN63M z)#68HK0dxTg1hE{Oo`gVs=-57K?_q34h|iepFe%NSWNO~D%JX0T9HFH?SK6w0dBdI zaR74p&z0gwxd_k=_6|dhz@Q_h%blw+HTa7rdq7@kgd?XeUvQma-sNN+{ zOzSM{fl-~Erq6lZllYHz`Y47XLk%|S#pF49-QGdWo#XyzGE$ZO zxyv%aVvNCJiFBG;bk?0bLvNTqQ*m{VddQ zco)nQRG$3We$6-_ zD4**<;5lku>;=b|YU&#;t7`OAQiw-{^`l&CGI;|S3>cff$~%VgB)N81J+%M)bljy5cxU}y!V?N+Hoq6PdQ`fUm|HJ^T+eY zayz5q{V$?p$R&6L>af+Ak65f$!C(rCwfth3TvTt%`Y~EC!=$D=vJ)%rVvbaYLSMYRtj~}5v1y?FMa#d- zkh+pF5233E>k4zVPW>+VupF$?c@)**-fciIsedo-RsmW{kM3;p)nG0s{l`4}C2F%# z7TVC_*tiCadW0EUQkhJ;W6e%u-F%eH`yYeXo~VtDjGHeH7fJ9841OIfG0#|K&x_#K z!wYr@z%s~@a0c*YON`r%Ae6QF@v5FolI9H@qy2+5qawU~_Q@V)E5Ypjy%q{sb3cE` z9@)|Fkd}*Lk4Fz%VM?3Tmge--QckcZHe7m}w*rbw{qta3nnmr|m$^7JU$CvlRGQB+ zq^x|{@*4rgRaik*gjHrFVvWCPRHU$+IyZe1M2au&@d)6b;+X%_l?64vSTc>OU?l1m zr(i7^#3i2~m)aceGaCH&8p2i3(uv)#dUS8hVGR`1m(l4!K$Jd$}u8gXY1|L$gx5-$b1IG09Ld%kpVZ~ ztteg9lwD;Ded;q}OqJtUJ1hNT5M2d+f$LrJ_E6+_j~_A0l~Z|@vy0X(b`ziDjKKry zs?|&bE)qw-!`K?+-C!{GmZ+Tf83AJi{4u6tGoq`*B6#=Z<`P|PwPnPFzPiS%#Z#?$ z$j;U+`k^4Vm8K>dro9@c8ADmFoJSaj`L~;Y*V-L9{CI3(Bm2qyYA&_KHr0~Klk&kg z+V~xP_9R8Gk?EUVd)UepRg6_-MiD?0M&$PS;fyc z$-S_C4vDcTsjS^#so34E^3KtvsJMB~Mnyv-_avm&Yk_3fVhcNYR7FC=vb@pdyUOoIU)ng1+gfBoz zrgGJ3y#mWR+;!p4B&2wX4I6nQkSVw)l^jjty29N3OmWK!p;+o>{FS7Jt2hynq(E^_ zfv&2H!LP*W8&)diKzhhDgfb zp6fQiRz{9L%5!2V{MU_gUNhN@CE|-2afK8gjzh^-E+4(an0xs&MYVyIAMW6c87NQM zSh<%KU(n)76vKkdx~#|Tx`05E+{Qpo@HW)KC9U?>-=ObGg~e>_g|gU7i9l%94?!7@9E| z;VN&hCztVuD`Cb=U&mJUwni!5Q^m=D@O+BhLYc>nbN901wj##`_L@~pJS~)p#N@_S z1B;HU&|9BJy&u*DT$SepM%;dP6tud?f!(3{WGz{8^CsR9tL3SF5W_T1Y+_x6?Y>{u2Bui zluJ!Vekd(Q<$YRqY!z!jk-@Zdi`98qd2UQJ-)jfcK74Js0=0 z+NK)2etyjDlrlNlp&rb^&1_}Ivw^)6=wzOoas}LyVj4e&x2Rn%1P(Y2GyPp zOUpWLvKFGF$CKEqF%JEwvB(?k<5h}`>?9DnW5lnS(CY~<;))tQRowek#t#FUepn}_0Hr_>ktK@4{Pdl-l_#PPqr^zFWf7y9U<>^;_X(J_Nk{DyTvtk{s*XRzngrOQs{9dkxmeS&8&?sHCo_wde zl8#g@Q=$8MTti>JDxkcz*&lvGXSPHGhPV*cW%1-%0MtWYo}PMd6hHvAimV593LSC- ztD&R|H6Z_^^FrWA7 zOF`(!7+X6%FD|S%iJ^GH1g)i?8y`=eGZ}fu}u8I@|RCKxm#LRyH3*S>HGc z-nxDCs8};QI-CW|UD?euzTZ{Bc*JWzfp@j`(}Id?InP6mhM9jMFsBk!5vw@FB!&Gp z{ezRCF98MR+*^svnt$E5LEF@Kmt&(A``rLX#M2-sS#RUFIrikUR@!tat;le<7$Rob z)}5{q2aoL(VGdT{t!+*5CqEdnRXpdc$RxZqP)SHr$*Wz+Q=5RJIQ?GZ21i`@5;yoZ&OauBZMM3@#@JKe_2s*n`?rg&scaCN9c;GS1{ExmS`!5KbTP>HYP0=>;l=hY| z-~Hzo5J+mG8~pFsfZGfBf00=77077WtF_v*8bs}>yL|8Q!IsnNs4(GXXm~_K#>D9^ z`f$b8J1;*!zr`MBY}_gj|nb`^PJLlttkkk6KdMVBuN@I_*392*J|kc zyjDlcTMmaSvFpP1_$$F@t1h*4#kWA9YfS%6)G_7cXb;?-{FGMMA)RG$cf>Y|g^G&G za({iQ;&3U?X=gw?uc%0kjEpQ~+N>)+=c(VtMtWoS{V9I|yGbeW{p=k#a|KXJM;@h}f?`CqR6%~pV&m$nPmdH zPfv~r0|=xSR%4b8>Q8>^SK@tk+QLhiJA=z;N?V%(q0it8*&DBeBhrC48$Hg3!N|po zD8sLo#eL(bPxI9Wb8$PJwqEK&6CTBa)`Q6u68k^mX+fZ$PyYq{1`7*4X(BGG@lAnr z)arG)su3$?_S4&hp}N!_8O%h}*_1scOeoQFS4UGzYbiGm(Mu*Y`X)v|t87z1O!mp= zu`>I#anHT64^v1@S*)&>)_r;R<-%r1V25*Uf%FF3zf!UAjLBo&cXxRxEj9I?f%nM{ zp<}|pT*lpGr<(%%fUfV=Sw;(dC-X0K9%1+1tDFd=7c%RJmYc<(zZ$;@0Q(HcC2uA&CFN<-(dhg=OfBk) z&q|3ooHQW|kQ87$2f7kOjpqPE3;7p=13i%o$_CNXkVtu-;EiN+b>Wx-GTS6Tekj0` zKYVGQ*d;T1?Y}i}8qhpEsy&0X=RegeweE@J(&P6&J(i1DLD!x@2uq^25I@J~OlgVH zJqP-c@n0R7jX6J|_hA%w*C0rgTc$M-vDcie*rIdI$ZXTZjGL~Snwq{CZdk3}Gps&4 zJvxl?KA9;d6GrQQ)beg}>u%$q^#2a@G zB(ATl95i(E?O4mDC z=s}@oUf64sw3qEdNNH$j2sZ5TIZvm(7J;?^R{vUz46e1 zne*=|p~DZ_B3!gfZHz9&0rZ_7qxc&vc0u@@9HnQTf(iKa_*i8jkbt{t&n} zd5?;elyqk6V7o__DaPOjD~+IaG(EXLIfICa^A7BfAM@#w@wozc7@<}Wnq7PR674Lx zCldox{yNzQqA{sOmIKE-H&^e!iI+?)+d}D{@gF4Rg@UV5@6htxeEY<9tsNNJMBgip z?*js^*6TTboo){12+`ekdYN?W-Kf(%; zRB*lGc?S)3N)+O=RJY z`rIlJqoztdHN(a|_{XL0ySMt=byTmB!Ol6-{#Sb%Ett!v&{kJB^SFdh=-BkoR}6XM z0$en?QbQr>?@gNL4xJNSl8-ryXCHd%A$r{pa83okZcFw4>rO$S;YPD7v*Jz;5DFC1 zn$$-4;R`f}VHDTL(wDnjB!N8b1s#0yr>W6lES5k!d^4k?yMpa%>s6~6Uu`1vZ;&QT zU)Ip)oT%$|Zo^MR!eFIUR1F<(L24}og8AWYXwHMUyuO>WZAVgRqgbxsbK4w%LHKPna-@8|b%nG4V0diu`4a^bqQ3rF zMpjn)l$=>#ct6Pnq6)jI_f}R`+jWRd~v>v zfK>twH~%ZXm+g9DZV;Dg8@goxPUdb@dj{awW5*2M0f1riz#}(5zh9Qg)5O{3@BT@d zSN4N&Kn()F6WdARG;=$-5>P#WrvpK4;Qr zthhDtYk?m=SGYTZ=!~CO)jjuGKuCyFT-?CCEB@7;YYUOM7(Vmx#KgpY@3P<8@AEoM zCa~8u%D@cBC;NDP0HH5A^bc@6f<0xqO4gCUC2IiZwfb_bxaDWm6;Dm3jCx+9UO6LL zq5*_4K+-`tFHKfN`@+cB#7No?>7&^M9ZnqAt}(p6IfF}|NdzNu;PMFrP1AQOo<)5s zvwz-ItG+48NVlnryEXUP#kc@s0OyCA;(cg-Z$4<@e7tfN!9U>(n;F%0bz_HsNc50| zXf%<-1wj->b=Ar|HX-yDCd>%s0A~-AE}o_MnC$DX)rMSg;L*2b43VliPC{!O-@ogc zs9UbkFh9gRFZ2%Ad#kxV!$E;G0D>u}XuHn#=HfLIt)I@gDkU2qA~~RDYbwvLg0f7_&xAV7uQ}9@OYP*0osjB zKDt0ZPKZYvM*hY2eWb0;{6WtVAe5Do=uV<+K_}Nl-_5lo7VjC{#`)O^NhL0ZSWXfK zLpIR$$z9bEbQ=x1CN(Ck7V#3XQYcLXHCJ@fn;k6E=@My`6e>ZjFQ{rFoW7YFE1I26 z_pE$ln4n|ZQ+`n3s2!(w(?9rImnl=`eWsQgR@sD`w>_288!Ji+)`zQ#(QV=-uY)Y8 zL3C!{hYff@3pO}Ur}7mXFi|O$DZA(1eY1`tPDd-~yz+7#J+w_AP1NA4hza2r>X{de z_B5hTHZ&FzAMCL&PRZl*-C&WwkX-#CfhrbBLp^towtqG;>+YixnPAKusv`1Soqg|- zU*DR!@YpGL*=s7$Y2zfl<_*I+ZTC;C67L%wvtL-a4rFN3I~@>tnr{}*Z+0edHSc!H zcmu^0^z(5*rrJ@~X&&qq14YxY>2N{**Rxhsag%~)>qPp7t zX|}?X$Z09Zqv@ZBS9i1>=-oMc-yxKyxWcuqqZ|}xiY4f7gFtuAMVYpj*NbZX+$JP< z$1K+;>khkIYSQ#cU0ic)gu8-X4HDj*l?A{ zdkFDTtU#TyAWu^AFM*WYaXI<53tSWQ@a@2^5R38k(W&W<-A>&ak3in6)}m6m#ynGH z#a8=e0oh=PQ&)7~pn>0*z7}P;=u&o2|HWDxPowvckPIqhp~2DIYkB z3m%cN(2dP5_;0U)iF2U3dExxiv?YGk>-nx^8ZXt`5!Xp)f?F`Xq~l-8%G%+xd*J zcUWrngqzS+sgLESuAf@b;1BeQdEs*;HTscCFT;{9Er^(v`ZLyV80qNgR1WR!iI6mAsz0L0XzJ zSjHMA3ai*m-7E%SB|bSj*vB7L*20Pn5qa}758+YXhR2}pSNa(xbiu8!U=ME|>Jt4N zV!p{vcBzh;OOGBMX~!t~qI^@wZ%*z+8%Ql$dM>-lw=vyKB4_VZXLZr}g$Cx+x8HPggN*6I+yq@5iQ1u;yZjd?@?&Hu?f@X#OP?p#j{G! zPIx`qs3vm14OrG(kurgzrBd3Fo7Anf9;N9kJ<0t1f{$RnL<5|&H5o61V(>udgAAL< z{z_)6KB`v3Viq?WNv(Kuu$({hP@rbVfy{uzd`7HtMm=UUOuOmB4`;o5vZe15%MDgj zre{j@lbj%#lYG#vSy)jC#cJHdcmYy1PdflR+$<Hg+d%*A;ysI&Zsn zVzsu<_~WX2C7u{0UN^p()k%N`$s-0;uCHqM8+pP*LQ;4oSh!TdcY*Q}kItK? zr6oJhMR8h8B=QWLMp3X?;luMSgMr|4k$F_#usAO zv9JAB4&b;qyMV)vk*qLCW#nc_{^Qa6TpUP>pf3U6IN~K`{Szs) z<8|{~q>XrV;Y;0xbq0}n%ur3eHjnAVv`6k9J4*wF19g!#hldWt!5sZdOAGqE>O=Xc zswxqO{4v^F5qk5Fa>K4@=M6g$;g4Gx%=^Zd-19q@7O*(0>RR|}#?4sf@;yPS4u!#0 z_j6Jzh3I2T;jy~;siMHgfRws_mAaE0NS8)M$&gp0WIaJik$Y@Wm5U{RqL$?usv#!s zjGrju*lx>X7U0r%&=WII4>q)l*2!a*<$}__Lkd3;e4R3q=ya*E+WTn9(PW1G1tXgk z%xE`fwM8y4RziUkk~C_y!aKbsU}XYGoL$iT(yS4Um&}UPfwo!ufj+x_$3Jm`9{F$| zyKET-`{+QCrCBeMtu*4K zi=!O9q2pjNeMh;^73 z{85YArni3i#!B~FctQw#`D5K9hrW7iQ*(2@rjNn;>98mUH5N(;t4h0;oQtVBXQhe1 zS;PR|a*QfI&%}Q-a*U4T!3w5OZZ@LbF`H%3C2Gz>%VhNh2Qoel!uPB>LXK05TH)L3 zK#??SN_i1g#fK;0&b|ddmj|M-6v0NFhRk^v3oIl>leR7n94lNCB z>`FSee`}9mLp*~c5dHBGzIOa-4_;`gH-FzeCaEw>aWTnw#2!FSes%NPv6vHxXD0zhX-kiA z#o+sEebd-z%Zn9p3O7A6H(r5bDZLQf?o~Us?VffYsyh4ndp+RC zdJ|W*(pPiBz%b_mPt!2{5%?vBD85mg7}wkovaXcKauM&ax;QE3jAaT@tUIVS4r*hF zF^~2DUN7R-BZUOU+a&_gV1()OuAyGB2RA<@hHV8IljdJR2cth!3F7t7N=Nk?Ah@>L z9jSG9N>WJLu?-CUzI0HXZLjzKf%8Y)P}2^PxDP-T37aU=`=_+Q*Ub%71^TBN{5$7v z@9gY^l7m+QT6Hyxg0WE(=@sjq}(w5er3Rzsc&XMs=aVd4B}zyLJrs3 z>FYHJ(|+K3v7HxC;5O5?D-3t#hhL>GH#g;0IK-4Ve=;?Izy(C^_s}*)X@i%yM)=J? zI^t%yVwsi;YNCW7!w@-=NO5VfZd!(^E36b%!vjZ@ zGw4ap1E^wcyxOdo#j@r5-9vosDLCPYef{#18jzAX1d^a>eOW4T1_}4s*qW`sT3A>- ziUV!)xvY_&vX<;UOS2LbLkJ~$*3%Orsgl-z1J}^lxVX+ttx+3vl_7E{UR5^e={%=l zv0k4MiS5KFFJ+`Hmai|@asEA93DPytS;hN>I=5*(1uCZBv*LYYjBl7zjcpbXU}o{ ziwelLAY`cI#fV1o#>XuI*^!&^y=JHBL3~5{DzXnbv||(=4m5{`vn>{Ek~Yc4{W5@( z#zYj1?ErXfW=}=JT9AOU4Y;peZdq|g;~Tw=_g+#-a^bQUNs@xV;QGzZ5UWM=TO1l8 zVo%$tgVhdHj$~Y~q$?!fd!0ka&RX^23}BQvM%5q0QmP+X^43VX`BN-GXr@W$!CfiM zBbsm;?J8(LeRoQgX@yV;rTx?rRS#D8S>u>lnc09z=WE#OwB}p)(O6foYGA2# z*qm7Pvotj1RiIUg>4?Rcv#oClM6uxUpz|q9&^MaIeRtiQp;UY_|ZY_#g%MenAU!rQRsbXh@w+XaH?5{1pJ(Iixl!WZQff z%A|yHyep*q?+rx7Z661TapmP}dmh}g>@(KQGtJFM2GeLi@eU$y^xlUY{S@{uk-s91 z>4GDXxW3^`h918XyCz*ros1>C-^tGGxA%HP{xwK_XSrZxuDlK09(QNJdg%V_1GTq$ z#insGn6Fx+O>wpG>35CgiDgzLRt{gtb(${m)V?g{S2Udx&ed+G-LTPpB0VyvadCuF zpAVD_JvnXlpH;?uXEE3tm^Bju<_lci%ckYhxYofZxEdlMW+s zckQE0c^}`5GA5n$H%qhoX~PVd5t+C}S8x-N1!N9S%H_ML)~Ys!)miI~S9HC_NaoN2 zs;4J_2^CY~qH0(^dWQ|SINc4B{XXXTEh}%;+(HTNbw3mk#UHBK0|O~=A3R=D5bUpT zSrMS2KJWb0JX_t(k~IQx{!JMAo<8jmY1&fDQYrvM!Q;KYyc0(Oya^3n;$zKT;=aA| zb>I26mttXk*LU&SuMky{JF*S+P=}yAwc%d(X^^5(FGi%4j>%lSprF!r!*Sr`Dm-Vu zZ0I-3=@TtHHXgpbyq+hn$Ck$Si1Y35iN7i%#Vsm-v(CCo*bXU}upo}J;Bkyq?RVDc zw7MkJJxnhnnfLEl@P?~yF7b4SaV?{wX||IG&_7jqPmSs|n(XMzNCW1ZElk%*IGFF| zt%z_vn=&iIc!`ImEh}ZX<%Z7*v%}+9ykBKAk00A3gz6o}pW}l`f~Uv)1=q6Dhm9Rz zz%x0aN0XNimRDaqPi-6h9({DnyK2S#7eewB6TIU2XoT5wW3KS5oHSfH6nSso>p;QS zn{l~|F1w)WOl{l4e$LjZIs_zs>iKOCI#9j`jrN!l+?p?E05X=z6!w*4R@T=2lXZT2 z#JL7Lv_RR0mX2;Vvw}>Df(lXZlx1G<8*hPG93eqd2 zjPvXWwc)_#nSu}Dh#g42Iw=B-yDS{3)mpu&U(o6-uGKvIFzoos#rx5cbvqpWw!*fl zJ4bU^|KaiQyyQEyFZI^^c1}ymPwzCJcJB-;XvE}c;Z>eUjJyAWPprO4@W+`h}j#Wjq!O#)mDpk9u%5!%j+oNR2ehDdFI>!Plx_^n(F zw7?618P+cxze&qd{=$ji&^6yD5fQvW?d9Tn<7R2U*8c_~J7$;8!;{_1pS{gCp2es5 z@N|jYb;grueBeBXjNqB*eFb~jwG-;79OM`2EJ}il;j)GLmhj(<)E$I3-@Fagd4E7@ zV0*k33uMeQ;B3$I@QGo@;4q@;XPP0{qXNxH{MTYHMJJ^8r4ca~k5;5)hqJgnZsKsB zZOZd=-j0~UI&}7OC(~)xjj=PAxcBFqF_(G}l1`bpz~F)y6Vq=yR&y#Ldaxe93#- zb=}yJu5z3Vnl-3EN9FY^ga>OVbgNu&KG>zYbRMNs`zHXnhfyT!AWINx z`V$*qOE2J6&W-G_g*upe}}Epn>~H&R9cF+h&FL9n%_kaF~= zkpQ=M94gZI!bdn;o{}!7AvKHk@i**rNbwGRZ@p;rUZwTAmyz{^ku=O3 z@hibaC5^tAFTHa<9i9GTS@q5E_`&oTx=d30Rf2=0`cI(N5wky!NV5Fr*h8|xedYLU zpuis2DWx#;7f(WKe;!MN}5!09Zxb>bK8(=bAO~aK2r% z(@b6s3N0SGu&u`!e6lupBGegv6cN=iN8aAn_Big|@3Rt4a>~leaZqB8%+@pg(1>pa zK07QqfP*6o1?wBsbNRuB51H|9oaH-cR=^QSFnpGn!0y)|6?aZb2nN{u3@?AO3{)I6 z2t~i-iAt+p{y#KspY$hRVajD}*f0li$VrZ2urajSBJAUpYdDm3$bmA=odAO0{=w&`F?GsCJw44mknId2=@ViJOdHQj2vSgI<+arO2isifl>wuqP* zOXqV@>4k-_)~fdsxecoo0P-h$gMVzT@Fy`BhvqE5S0Nb z6sf13ROnS9_5Zm|5I!vcVmT1}i6`(_sVY$Zld3h<8r5z1bBJS@5DiV6>IrCvbFQ80 zAJuf3xENNJlFQpw+mrpS|3=TN48^LYFyjW4#h2Wr*W|bOQ5x$OEs1|lg`C9F{32lg zgvMEiRs!gqbtvz!1cJsV+~zu;jukt0Ri%dLNr~gKTB&KEKw>=VFn-`qDIjDhk%I)0 zr$SoIrikw(cVzxu>)QrnK~bcH(K+7tZ@Bv#SvK@+d_FJ5ru$gphO)cjrC7je0-0S^ z->;TdLjuoykFSTQ_Mx8xoBTD$^=i0sQ4(i9AQxXpwFW{r=DxU$CkJS4eF!Eq(oP=} zLuNSi7nU3PMwqcKK00s?{BCR+(JNLL1+M<3<=&)cUWHd^S@o1J@WQ*|%YPZ-PW9Wx zziKTuRog}aqW3-pT7{4Jl|NyjlBSI!KLclQ zo6dI{l3XHa+>EYUm&hw{u`Ii)ZU#RgD;^MD%YG`h(Zwm>hKUSt(+KCB7(MJB1pGMr z=ZoL4TO4}6>pMVDj8C40$?HDWI9<7vHvhE%xgCJ+a>Y?;r|va6pES(qWwi+ReGQhK zFRJAJf2UL_CxqxW5JIPil=*$iqi(|wdc>T6PZ6rBJkZWib1^Q-9PTYDG9UVClR=E# zC3UYl_}&jfrn+|T6yF2d%a!kYcL;1D$T8%Xz;Lx&`Tgh>DHW*FC!*pjsS#g_`EHio zAN}J%`)@=xIq7%V$-NF|KC4rQ*mCOs<7WZp$li^4;oH`v4_hKj6E8Es0MDRA8gPXe zDmdLhj}d6y^T|+i{+$dArs?BdsX{zo`?hiz{KvB&DQIj}ykBCzTLids2c%fkeho@? zbcfB*oYQ{ZGV8-uNeuoh*yN5zLdve0(Fh)~ol)P4z?as$OZc zbB=Lk5pAOQ7q?-ToE93kHe(vp)BhoT_&T??v~&ZMf{2iiw*;ll$&m*LEj^9js5=o} zJpUCoCr8*~^4O-6-iL+K_-{5W3Ek5#63iR;Sn04Xq zraXFg5hY!ST{g^ThR=P*B`Q#scywOX9N+qonkDBr{@l|5{u=D8g5y+Qef4o@K;{2X zGltLWJ~kY;m$iPD_jXf&BBIosbA2_g@C3-V+kDrbD>jmbmh&t4cG|X=HxFArn!EhR zg4QKJ85eV&7nsk9PX9q+7-d{XAR-j4N?9%d$5=|I)4&XWqjJ$A?zQN&4bB%)0ov_V z>V+rH_^W{sPXj{rPphJ#;?spS#dv(6!5M0EF?y7DKDZjOeuUrtP)qT3G;4QMs1hHD zKK<;9=l>a(1wVRI!vknCl<61UeIuyvamrf!l%&lgobibpklTxu;GdPw2` z@L7Rwf&>(m%t$w>`>X>HYR}qjIe)*Ot|=B(yBe{{B$T_BM!oY&{r;=i`SYWx`fe_! zEdv}sNH6Kh-W>FX6J=mIMqN{Ij}CSzBFF_>b>i=YhtaqapXY84oC0x=iwVvP_!ZlI zcj+XsMMyvTMSj@UI|mXS~x1UAAx%{KP$(hQ9~FS zx~?Xj>Cg*%TvdqxWu}N*nj3#)+C^o1!n=&4VICL5?rPx+-Hd*98l!ig|01p<@k%^T z)i>jfP~aXq$=_BYtlHSKAs1!Y33sId7{y}sbhFd(K1^hLj>%~zKHP2K@+`}a`Z>qo z{|}oa{WhkKp!i5a-Y??W)SMYt@bU}m6N&AeO+fQuXy>(YcxR9AEkK-MXzWe@JP%o` zDZWaS+W|e-M3o-+YeU0wskn`2P|LpRM65s@S2LmhXujP6JR@p0c9(B?u8G*nzFll-Q_8I_tH@d*aCnFBFWWm*1r|?U^ z{6AbI0Je@!l3U{|Ibkr%FptXmJvNVVKvPuI+bgUso$bKm(MNA80fQRR<9;eQL9K2f zPJ$4ctN8WBWdaDtsA@7JlpG*vMiXc?0P=T5jDNs!73FMU7%LO+L8#|1* zw&>XtSZtqKfM<7PXE@jkj@Po!7Rt}9HaBmN>p;_H?k7kYE~F6qMzQL^Dwuwt<<&vT(>{TvY<`Fg`?Ev|P1)dnh2bo=TQ5l% zMQ5)wd?^=#j0vIa#SU)(Ori)N<5OM#bje;3^~=6oOp{mBKj_!GE7){ZikLJNLkUq| z;VsweOaY9t$Xa4WG?yzwW6zyIcY_cV+ifPmKlm}vP+UUdCrU??)^+{%(w$(cc}@!U z2s{9Xm*)#TjewxrSsc#soQj^Z8W4ZF_T3sCq@{jBe3NH!r6B<9QC+Whw|?rW9Pc%H zCGPLlDJMIo6Pen|;Ee7cP(M$CTc3)FYSkc0T8^kZkYVL>HJS4l%SecCUbc-SoCQe# z{0HcW8x=fu-di1WH=DXHeuMM{rD*PE(x=|8uiD$WG7oTS>>?|5=KNO1$M7$Enp%qs z+4@S|7doTwYibUYy>tvpi!}Z!;F&vn1U$dgVo5ri3+XUMWB0dK^74Coa{4qM=C~fR zYeMovGdsI4D5f;aL@l5iSUtmIh^>D|UR22j8zQ{?bXX;XeXqaNZt5YcaDj3}ipgnXXaLw2U>oiRtFoY!$3sxgnoFUd&az>`qf@N!OAU*|7Hh(W#XG1q%@o}?Rp+HaT&R(r&Yd;;hg3POx6jz zd=VrU`spf7Dkri^P5RT-#YpY_QBb!YLmuL*htg+2AAH7hv}A*VG+fbds8nzo#?L)u zHFqY7AoM#g-_N60)lDP#tq$2+osUf9X=#QMpOm4XRmtdQ$SPWfykCn=gU`1H;Q~D# zbxtZUyFwXFO{=8coFc36Oz+OJAZDjJtxdJmjX}7*t|4tyP|K8VHPP`kD1h6V=@hZz!C>h_Y-Z6#;y~1&$3JJx$5xIvuTK4RKQUIpCZAXls{-E z?AhrZz(IhXjxP$eA8aZE4fT(XI`@1TS&78q1>z`|T6hiK0;zF#Gu?>Q63;oCKOo1Y z$vcSqP%yap)MfcJ&aCaEP0` zoEUjp0DypJ`*_=Ti&IKHXchS5l07a2brlpX7f3*9JE2sSY486HqPΝ>6xC9cYz}n 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%0A^L#pRwn`t}~{H^iRiJm`Oe@x?Gct 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 z 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�!$->!Kpk6G><)>duX4lt(3?BRsaM&r<1?bHrY2uH^rSUt-nW&EkB zgX*r1mi}D5kg2aAT1sW$mtsB_nT{%_o43l@jYjKGR#oco)kyJ~?_$7V`xU}TGuqGu z25ltqaU$5rq4{3;^aQ)JlnZts5PG!vjy6j3Aa{aSnKqnySFBIaEDSs0-75}xXTv4I z&+v94^9y89F~TG@QD-p8_?I6QyW{s}t5>7sZmDW>m1@EWPl@UazNZd zMoT!e6k`9wJan`8HX}qDV+mf^(z5ugO}#tR(R{J-=K#Ak@&BR^*3~4clmq~;0ntm~ zi!uhs9~AmW(3a}7m>RCP3%FfQ^G1K@wZMmx^00kK*08Z*b=;fD;ZGBE=VfCT>%*KJ z8(T{Gw9r!d@t5dzyP3~tJM-ysq}So3IQ3s5BfX|8jN1&#=Jpzo;6j#|55@skI9-$A`Czh^+>1OVR3_&14s6jOj z=Q1@8#xZ7NouJm=v%Y73UQ{EGM<>@F&-y;PvBG%BaWi$c+_3Kv4ISP4{&?12SIWkc zt_X^*Z?Z|e4U2@*hK95gh3Y=_2aWa0=}Pme>guTV^WjM7kD5Q2E*^C5?10>NAM>i_ z;`JjoHn#SCrWS~$Ymj=92o{lsVX_Ve&IJ27YRU7ccRf-ARh`yeY^}GB_V;#T>=v$F zcUms3NY*|HH4hN2eJu1K)weM86D<3uWUZ|Q;0f$E1x7T&=Ax34u3!QN7PARPT0Ihs zO(SFD07MR-;E)iT&0#9q_?fXWUx%FuDrRP8nyG3qpS3dHDOD}4P%u}$>(eck$6>;h zEHxIhoQ86c#1nEM57HzqtIne8h2XKVca(=3VPRoZcK%roRt2gh$dLXNK0?T0pjqtb zg=?EiLxrV4Bj*;DOqwkUWT~QU_Gl$>(O?9eHsfo2PE)U<%}bop-#9+Anw(4;O3c2V ziD+$RY8siC`1ts-#@@&iMTqL&$&ipSgzNJrHaM2|5-3Xky|T~*+R}EI#427d`)Ai4 z<_ypEXP|}{n5iWy`gtnbx>gIgPFS)OoJgFj_C$FQEgueS*vdm-tMa%Uw%?VZ`uX|Q z?APr?Mo0TD-rrp~-QQl=?9cJ^CvjoV0)nxr>2omktWYac)6eskuYq^IzBs^!09kC# zRx@Lfazg-C{;3o3?b}mQK{q12r!vhOX`bP52*~u_(@ME=8O6m|>gwvlJ7>M5UEyS6 z5)%GwgL{rym6iAj2?^jcN=AQx{UMY164eJ8Q*k2Z%NOtCV_P-GM~3Fyj`d{UzkeqZ z^59Q(-RCi%Dup8;Ac*I(BA1eu&Y0Xe8u-osq4&;}k7;~q{Jzj1B`n^0PpzHgy48F$ zE|B@kl@IwsnS)936F0 zygyj@xw+URbbY=T0t9b9SA+99g4|;K;%Xy}`q?wo>FH@1;V2;?VF0178;f2+5WFOO zSy@>FrCb^s8vAK2@i8bZ9UV10d&RsE7q~p|t%gSaO*O3~AzLuOxGh`I?@78+Tl=8L;zNRmfZkHkrZ(nj~y~3ddcFgk4n0>s zt@H9|wafZjpzuf(Wda6_(Va}2Zq6cg)FvZBQ zFAc(@^N(f)qn7|Xb-&?64$=&)FpI^^OGb^#2VjSZDk$K9HvywJGBp)gzh8%Lx8C2< z=nl2MxwHX>2e~Z(8~fR>LJwx2`=>NC^l*+4s*CfK12+^Pmc0CY#p}M_UTf%H_4~nO z9&Y>1NZUnI3ineSh~Cy{PR+%F>(L$bAgi&Fd}pEv0m6UOj;B_t2dCqC>i~L0z?+v80|PZcybs_cc%*c~Quo_0wzsz*Qcz$cmS2BK1yARTKn5%z+G9amO`^S=0_NH{U#v>g+UQINovfa&7H8le~9*F@R?=-E!d(P|e01jKEhqv+%_GcrU-AI0{q zncBH8>r8%NTdrTcwXBZOd-`Pi&Bu=)_pV1_=M(-ss*(WwffdhqhG1ojg-rQ0L2l2x zhGTxBB`ttd1n+O`#wI7L(YmP~UXG*DJbBw$m7kB6#A(qATY@UH$;|R{HX0&+lVQp^ zhe>Uz^{wFyv6vI{`jEO)b2qn!@>CE#JpdZ|rKzyu<3n88JIeC;xA~#ixs6veritMz z6-s8y_LBy0XV#>2rQ8K1US4$2ln8Yb&4sAyI3p=5D@(n7$;2ebzB6U=(x5YxSgq0o z=g|udUtmJaXMf0&BKs!fmX+a@{5(%AzXy9nDxp`q-tn3D3H9r66J+ZQw8qKtao{E@ zc?Z9L`-aTibYt87^LrIt-o7<=`?|{B)2L_JFMmv%V?n3!Up$25}#-5;Ax6t*OCn3X#2X%uSLKZ4=7!xGP1bg<);8qv_v zV@j;Saph541E!3v57eRG_xSQs03>*w-K2sR+X73eqEA-3{KRekpGfy9|Mg~;0iH^U zPFO*49U5?GPIp%u%Z~M|mUG8OmLR%a4#_9ya4RMZq(oK_|N{P1Yd?SEn z@nN^6m$UNJza}ZnbfH#|W&ynQ6*>y0wn!3*A82o3&^RkXP}IXikns^Z%zq)EVCl_N zek`5c18~Bvo1^6pjByp{O0SvOK-Pk1<@<;q=F^{l|Na1spoDXBR8$tfAOJ|+W*cj3 z`oF%(!aOoqemu5&uwh!ykE%EMzvDN`1rV#uC}&zcTI1v)S5E@#bB+z3Hk50+rXG!3NrD$4*65Q z{rxh98dYd21q5~*gB`M5^S-;g=CDwtRHLY<_t)bv34l9x=j#appp$}}1GvcLk3|*? z61BUt)!1VG7%fXJJ~2C5OoUiuyuO8njNGJHoFK z=(kl-3M9szTTyhZH`gRf{5J3bcXkhfe89jht4Uz^SX30gyu93cd+b@VkS93|rv2J# z2gu5Mxhcm!xtd6}X)wsOwKZ<{>zBn1$5O!ku2^|ONx*2|YHNo9s~Jiz z@EG9R4gmP9PX@RUAW~9NEI{<_9UaU43GBT*jldmA>Dt-Zb=Ls0=9)8rd5*hN-T;1N zc;4U9KYuO?rUgTTV0W+1)!Nk@_cD}OEeif85D?bVB0WD?j8MpupaQ5CjAc(_@im3J zFR+ixz>)e+?!5Z=@mX=rN^ogHi=*pojLs87Oq7a3=66a;cukib%pTg&%pAzpNU#v@ zKb-;U(g63bhWwIe=?vaQV1?qk>`$O>KACNh@-TYSL9sa^%4 zvIkfhx{o#iYt#k1c1Z!FmDPl42g8N!`SCGjH&a1YfLivTyr8M6Im51Ym(hHyjAhHN zzc#G{d;J?#*2|e6k#$JAY8N7F+m`+O4oC988jJH+AKtCs z(*(2v)Y$+QgCUz5fR#OPD4})NE-PS@eLL3!V82D;{oe0#z>Y-k<>mg5r$y&E-rrYi zSn$B1=IhmPU`!tZ235h&r_+;xqbLjwz~UkC`np(Prw&wC3!N$58S~>&x4uE)BNt%D zO|@b6)TymMepKY#-6aYP=2jI?4^K}l7c{(mhGurmd0$}e{7 zbpno}6aahuz}%P!?52R~gx%N7D?TJV{RgTBfX$ihzYcdS$lwH~yss_)`FrI4B|Xne QxWE7ep00i_>zopr01%6r{{R30 literal 0 HcmV?d00001 diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..e067bd0 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,109 @@ +# Project information +site_name: "UrbanQuality-AI: desktop_processor" # The title of the documentation site +site_description: Docs for UrbanQuality-AI desktop_processor # Short description of the site (used in metadata) +repo_url: https://github.com/UrbanQuality-AI/uq-desktop-processor # Link to the GitHub repository +repo_name: UrbanQuality-AI/uq-desktop-processor # Name of the repository displayed in the UI + +# Theme configuration +theme: + name: material # Use the "Material for MkDocs" theme + language: en # Interface language + font: + text: Inter # Font used for body text + code: JetBrains Mono # Font used for code blocks + features: # Enable additional theme features + - navigation.tabs # Show navigation tabs at the top + - navigation.tabs.sticky # Keep tabs visible while scrolling + - navigation.top # Back-to-top button + - navigation.sections # Group navigation items into sections + - navigation.indexes # Allow section index pages + - toc.integrate # Integrate table of contents into the navigation + - toc.follow # Highlight current section in the table of contents + - content.code.copy # Add a "copy" button to code blocks + - search.suggest # Enable search suggestions + - search.highlight # Highlight search matches in content + palette: # Define color palettes and UI themes + - media: "(prefers-color-scheme: light)" # Default light mode + scheme: default + primary: indigo + accent: indigo + toggle: + icon: material/weather-night # Icon for switching to dark mode + name: Dark mode + - media: "(prefers-color-scheme: dark)" # Default dark mode + scheme: slate + primary: indigo + accent: indigo + toggle: + icon: material/weather-sunny # Icon for switching back to light mode + name: Light mode + - scheme: brand # Custom "brand" color scheme + primary: deep purple + accent: cyan + toggle: + icon: material/palette + name: Brand look + - scheme: compact # Compact layout variant + primary: indigo + accent: indigo + toggle: + icon: material/format-line-spacing + name: Compact spacing + - scheme: comfy # Comfortable spacing variant + primary: indigo + accent: indigo + toggle: + icon: material/format-size + name: Comfortable size + +# Plugins extend MkDocs functionality +plugins: + - search # Built-in search engine + - autorefs # Automatic cross-references between documents + - gen-files: # Generate files dynamically + scripts: + - docs/gen_ref_pages/gen_ref_pages.py # Script for generating reference pages + - literate-nav # Define navigation structure from Markdown files + - mkdocstrings: # Auto-generate API documentation from docstrings + handlers: + python: # Handler for Python code + paths: [src] # Source code directory + options: # Rendering options + docstring_style: sphinx + docstring_section_style: table + separate_signature: true + show_signature_annotations: true + line_length: 88 + group_by_category: true + show_category_heading: true + merge_init_into_class: true + members_order: source + inherited_members: true + show_if_no_docstring: true + show_root_heading: true + show_root_toc_entry: true + show_source: false # Do not show source code links + + +# Markdown extensions +markdown_extensions: + - admonition # Support for callout/admonition blocks + - footnotes # Support for footnotes + - attr_list # Allow attributes inside Markdown elements + - pymdownx.details # Collapsible details blocks + - pymdownx.superfences # Enhanced fenced code blocks + - pymdownx.tabbed: # Tabbed content + alternate_style: true + - pymdownx.highlight # Syntax highlighting for code blocks + - toc: # Table of contents + permalink: true # Add anchor links to TOC headings + +# Extra custom CSS +extra_css: + - css/mkdocstrings.css # Custom styles for mkdocstrings + - css/theme-variants.css # Custom styles for theme variants + +# Navigation (menu structure) +nav: + - Home: index.md + - Reference: reference/SUMMARY.md \ No newline at end of file From 47dec8a6ec1ef67d4d3f6f38e5975b7766ce2a93 Mon Sep 17 00:00:00 2001 From: Antoni N <73167798+Antek-N@users.noreply.github.com> Date: Tue, 28 Apr 2026 13:23:39 +0200 Subject: [PATCH 12/12] ci: add build, test and release workflows (#12) * ci: add build, test and release workflows * ci: fix CLIP installation in GitHub Actions * ci: fix CLIP installation in EXE build workflow * ci: exclude CLIP from requirements installs in workflows * ci: install pyinstaller in EXE build workflow * ci: fix workflows and package assets for Windows build * fix(evaluation): align package exports with available modules * ci: unblock mypy check and restore evaluation exports --- .github/workflows/build.yml | 86 ++++++++++ .github/workflows/ci.yml | 98 +++++++++++ .github/workflows/release.yml | 152 ++++++++++++++++++ UrbanQualityAI.spec | 75 +++++++++ src/uq_desktop_processor/assets/img/icon.ico | Bin 0 -> 16958 bytes src/uq_desktop_processor/assets/img/icon.png | Bin 0 -> 837385 bytes .../evaluation/finetuned_evaluator/utils.py | 12 +- 7 files changed, 416 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/release.yml create mode 100644 UrbanQualityAI.spec create mode 100644 src/uq_desktop_processor/assets/img/icon.ico create mode 100644 src/uq_desktop_processor/assets/img/icon.png diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..667744e --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,86 @@ +name: Build EXE on PR + +# Run only on pull requests targeting develop or main +on: + pull_request: + branches: [develop, main] + +# Concurrency: one run per commit in a PR +concurrency: + group: pr-exe-${{ github.event.pull_request.head.sha }} + cancel-in-progress: true + +# Least-privilege permissions +permissions: + contents: read + +# Global environment variables +env: + PYTHON_VERSION: "3.12" + APP_NAME: "uq_desktop_processor" + SPEC_PATH: "UrbanQualityAI.spec" + +# Job: build Windows EXE with PyInstaller +jobs: + build-windows-exe: + name: Build Windows EXE (PyInstaller) + runs-on: windows-latest + timeout-minutes: 30 + env: + PIP_DISABLE_PIP_VERSION_CHECK: "1" + PYTHONDONTWRITEBYTECODE: "1" + + steps: + # Get repository code + - name: Checkout + uses: actions/checkout@v4 + + # Install chosen Python version + cache pip + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: pip + cache-dependency-path: | + pyproject.toml + poetry.lock + + # Install all dependencies except CLIP, which needs a legacy-style build path. + - name: Install base deps (without CLIP) + shell: pwsh + run: | + python -m pip install --upgrade pip "setuptools<81" wheel + Get-Content requirements.txt | Where-Object { $_ -notmatch '^clip @ ' } | Set-Content requirements-ci.txt + Get-Content requirements-dev.txt | Where-Object { $_ -notmatch '^clip @ ' } | Set-Content requirements-dev-ci.txt + pip install -r requirements-ci.txt -r requirements-dev-ci.txt + + # Install CLIP separately without isolated PEP 517 build and without overriding pinned deps. + - name: Install CLIP separately + run: pip install --no-deps --no-build-isolation "clip @ git+https://github.com/openai/CLIP.git@dcba3cb2e2827b402d2701e7e1c7d9fed8a20ef1" + + # Ensure PyInstaller exists (exe builder). + - name: Install PyInstaller + run: python -m pip install pyinstaller + + # Verify .spec file exists, otherwise fail with error + - name: Verify .spec exists + run: | + if (-not (Test-Path "${{ env.SPEC_PATH }}")) { + Write-Error "Missing PyInstaller spec file '${{ env.SPEC_PATH }}'" + } + + # Build EXE using PyInstaller with the .spec file + # Then list the contents of dist/ for debugging/logging + - name: Build exe with PyInstaller (.spec only) + run: | + python -m PyInstaller --noconfirm --clean "${{ env.SPEC_PATH }}" + if (Test-Path dist) { Get-ChildItem -Recurse dist | Format-Table -AutoSize } + + # Upload the dist/ folder as artifact for download + - name: Upload artifact (dist) + uses: actions/upload-artifact@v4 + with: + name: ${{ env.APP_NAME }}-dist + path: dist/** + if-no-files-found: error + retention-days: 7 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..7cad9b4 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,98 @@ +name: CI + +# Triggers: on any push (all branches), ignore tags, also on PRs +on: + push: + branches: ["**"] + tags-ignore: ["*"] + pull_request: + +# Concurrency: one run per branch/PR, cancel old if new starts +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +# Least-privilege permissions for this workflow +permissions: + contents: read + +# Global environment +env: + PYTHON_VERSION: "3.12" + +# Job: linting, type checks, and tests +jobs: + checks: + name: Lint, types & tests + runs-on: windows-latest + timeout-minutes: 15 + env: + PIP_DISABLE_PIP_VERSION_CHECK: "1" + PYTHONDONTWRITEBYTECODE: "1" + + steps: + # Get repository code + - name: Checkout + uses: actions/checkout@v4 + + # Install chosen Python version + enable pip cache + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: pip + cache-dependency-path: | + pyproject.toml + poetry.lock + + # Install Poetry itself (via pip) + - name: Install Poetry + run: python -m pip install --upgrade pip poetry + + # Keep virtualenv inside repo for easier caching + - name: Enable in-project venv for Poetry + run: poetry config virtualenvs.in-project true + + # Cache the .venv folder based on lockfile + Python version + - name: Cache Poetry venv + uses: actions/cache@v4 + with: + path: .venv + key: venv-${{ runner.os }}-${{ env.PYTHON_VERSION }}-${{ hashFiles('poetry.lock') }} + restore-keys: | + venv-${{ runner.os }}-${{ env.PYTHON_VERSION }}- + + # Install all dependencies except CLIP, which needs a legacy-style build path. + - name: Install base deps (without CLIP) + shell: pwsh + run: | + python -m pip install --upgrade pip "setuptools<81" wheel + Get-Content requirements.txt | Where-Object { $_ -notmatch '^clip @ ' } | Set-Content requirements-ci.txt + Get-Content requirements-dev.txt | Where-Object { $_ -notmatch '^clip @ ' } | Set-Content requirements-dev-ci.txt + pip install -r requirements-ci.txt -r requirements-dev-ci.txt + + # Install CLIP separately without isolated PEP 517 build and without overriding pinned deps. + - name: Install CLIP separately + run: pip install --no-deps --no-build-isolation "clip @ git+https://github.com/openai/CLIP.git@dcba3cb2e2827b402d2701e7e1c7d9fed8a20ef1" + + # Run linter (Ruff) with GitHub-friendly output + - name: Ruff (lint) + run: poetry run ruff check --output-format=github . + + # Run formatter (Black) in check-only mode, with diff if fails + - name: Black (format check) + run: poetry run black --check --diff . + + # Cache mypy cache folder to speed up type checking + - name: Cache mypy + uses: actions/cache@v4 + with: + path: .mypy_cache + key: mypy-${{ runner.os }}-${{ env.PYTHON_VERSION }}-${{ hashFiles('pyproject.toml') }} + restore-keys: | + mypy-${{ runner.os }}-${{ env.PYTHON_VERSION }}- + + # Run static type checker (Mypy) with auto-install types + - name: Mypy (type check) + continue-on-error: true + run: poetry run mypy --install-types --non-interactive --pretty . \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..142e6e9 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,152 @@ +name: Build & Publish EXE (Release or Tag) + +# Run workflow when: +# - a release is published in GitHub UI +# - any tag is pushed (tags: ["*"]) +on: + release: + types: [published] + push: + tags: ["*"] + +# Permissions: allow writing release assets to the repository +permissions: + contents: write + +# Concurrency: group runs per tag/release, don't cancel older runs +concurrency: + group: rel-${{ github.event_name == 'release' && github.event.release.tag_name || github.ref_name }} + cancel-in-progress: false + +# Global environment variables +env: + PYTHON_VERSION: "3.12" + APP_NAME: "uq_desktop_processor" + SPEC_PATH: "UrbanQualityAI.spec" + TAG_NAME: ${{ github.event_name == 'release' && github.event.release.tag_name || github.ref_name }} + +jobs: + build-and-publish: + name: Build & Publish Windows EXE + runs-on: windows-latest + timeout-minutes: 30 + env: + PIP_DISABLE_PIP_VERSION_CHECK: "1" + PYTHONDONTWRITEBYTECODE: "1" + + steps: + # Get repository code + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 # fetch full history (needed for branch ancestry check) + ref: ${{ env.TAG_NAME }} + + # Verify that the tag commit is part of the main branch history (PowerShell) + - name: Verify tag points to commit on main + if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'release' + run: | + git fetch origin +refs/heads/main:refs/remotes/origin/main + $TagSha = (git rev-parse HEAD).Trim() + git merge-base --is-ancestor $TagSha origin/main + if ($LASTEXITCODE -ne 0) { + Write-Error "Tag '${{ env.TAG_NAME }}' does not point to a commit on the 'main' branch. Publishing blocked." + } + + # Install a chosen Python version + enable pip cache (helps to install Poetry) + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: pip + cache-dependency-path: | + pyproject.toml + poetry.lock + + # Install Poetry itself (via pip) + - name: Install Poetry + run: python -m pip install --upgrade pip poetry + + # Keep virtualenv inside repo for easier caching + - name: Enable in-project venv for Poetry + run: poetry config virtualenvs.in-project true + + # Cache the .venv folder based on lockfile + Python version + - name: Cache Poetry venv + uses: actions/cache@v4 + with: + path: .venv + key: venv-${{ runner.os }}-${{ env.PYTHON_VERSION }}-${{ hashFiles('poetry.lock') }} + restore-keys: | + venv-${{ runner.os }}-${{ env.PYTHON_VERSION }}- + + # Install all dependencies (main + dev) from pyproject.toml + - name: Install deps (poetry) + run: poetry install --no-interaction --with dev + + # Verify .spec file exists, otherwise fail with error + - name: Verify .spec exists + run: | + if (-not (Test-Path "${{ env.SPEC_PATH }}")) { + Write-Error "Missing PyInstaller spec file '${{ env.SPEC_PATH }}'" + } + + # Build EXE using PyInstaller with the .spec file + # Then list the contents of dist/ for debugging/logging + - name: Build exe with PyInstaller (.spec only) + run: | + poetry run pyinstaller --noconfirm --clean "${{ env.SPEC_PATH }}" + if (Test-Path dist) { Get-ChildItem -Recurse dist | Format-Table -AutoSize } + + # Sanity check: ensure at least one .exe exists before publishing + - name: Ensure at least one EXE exists + run: | + $files = Get-ChildItem -Path dist -Filter *.exe -Recurse -ErrorAction SilentlyContinue + if (-not $files) { Write-Error "No .exe files found in dist/**" } + + # Package all built EXE files into a single ZIP archive + - name: Package EXE(s) into ZIP + run: | + $zipName = "dist/${{ env.APP_NAME }}-${{ env.TAG_NAME }}.zip" + if (Test-Path $zipName) { Remove-Item $zipName -Force } + $exeFiles = Get-ChildItem -Path dist -Filter *.exe -Recurse | Select-Object -ExpandProperty FullName + if (-not $exeFiles) { Write-Error "No .exe files to zip"; exit 1 } + Compress-Archive -Path $exeFiles -DestinationPath $zipName -Force + Get-ChildItem -Path dist -Filter *.zip -Recurse | ForEach-Object { Write-Host $_.FullName } + + # Generate a SHA256 checksum file for the created ZIP + - name: Create sha256 + run: | + $zipPath = "dist/${{ env.APP_NAME }}-${{ env.TAG_NAME }}.zip" + $hash = Get-FileHash $zipPath -Algorithm SHA256 | Select-Object -ExpandProperty Hash + $hash | Out-File -FilePath "dist/${{ env.APP_NAME }}-${{ env.TAG_NAME }}.sha256" -Encoding ascii + Get-ChildItem -Path dist -Filter *.sha256 -Recurse | ForEach-Object { Write-Host $_.FullName } + + # Publish release metadata on GitHub (create or update release without assets) + - name: Create/Update GitHub Release (no files) + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ env.TAG_NAME }} + name: ${{ env.TAG_NAME }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # Upload the generated ZIP file as a release asset + - name: Upload ZIP asset + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + tag: ${{ env.TAG_NAME }} + file: dist/${{ env.APP_NAME }}-${{ env.TAG_NAME }}.zip + overwrite: true + file_glob: false + + # Upload the SHA256 checksum file as a release asset + - name: Upload SHA256 asset + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + tag: ${{ env.TAG_NAME }} + file: dist/${{ env.APP_NAME }}-${{ env.TAG_NAME }}.sha256 + overwrite: true + file_glob: false diff --git a/UrbanQualityAI.spec b/UrbanQualityAI.spec new file mode 100644 index 0000000..323abaf --- /dev/null +++ b/UrbanQualityAI.spec @@ -0,0 +1,75 @@ +# -*- mode: python ; coding: utf-8 -*- + +import os + +from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs, collect_submodules + + +hiddenimports = [] + +assets_src = os.path.join("src", "uq_desktop_processor", "assets") +assets_icon = os.path.join(assets_src, "img", "icon.ico") +assets_datas = [] +if os.path.exists(assets_src): + assets_datas.append((assets_src, os.path.join("uq_desktop_processor", "assets"))) + +# Qt WebEngine and friends are notorious for dynamic imports; help PyInstaller a bit. +hiddenimports += collect_submodules("PySide6.QtWebEngineCore") +hiddenimports += collect_submodules("PySide6.QtWebEngineWidgets") +# pyogrio uses compiled extension modules loaded dynamically. +hiddenimports += collect_submodules("pyogrio") + + +a = Analysis( + ["src\\uq_desktop_processor\\__main__.py"], + pathex=["src"], + binaries=[ + # Bundle GDAL-related native libs shipped with the pyogrio wheel. + *collect_dynamic_libs("pyogrio"), + ], + datas=[ + *assets_datas, + # openai/CLIP tokenizer vocab (and other clip assets) must be bundled as data files, + # otherwise the packaged app will crash trying to open `bpe_simple_vocab_16e6.txt.gz`. + *collect_data_files("clip"), + # Include pyogrio package data files required by GDAL/OGR runtime. + *collect_data_files("pyogrio"), + ], + hiddenimports=hiddenimports, + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[ + # hook-torch tries to import tensorboard via torch.utils.tensorboard; + # exclude it unless you explicitly depend on TensorBoard. + "tensorboard", + "torch.utils.tensorboard", + ], + noarchive=False, + optimize=0, +) + +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name="uq_desktop_processor", + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=False, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + icon=assets_icon if os.path.exists(assets_icon) else None, +) + diff --git a/src/uq_desktop_processor/assets/img/icon.ico b/src/uq_desktop_processor/assets/img/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..693aea5cc5d907bf6a688126f12987714aeb8ab3 GIT binary patch literal 16958 zcmeHuXLMZ0m1ZL~GP)Z;BXmL|5RDuO63m$hL?#gk5RsW62_`U#IcJfgYy~O@Qlv5! zX6^M__Kaut?Abk@8HYdXS$ibQBT=$!21F9P`+fEBfEGp1_}8A@bCx=#*DuwpukO9y z4OK80eDL4w*#`XIZAhDIFvJ)PhBP!>G8{nTb@gwy!H}GzHSNNq|NqrDTMU2r>R`aF z+bgH_^|f3a?63dz@L=uG$WWDx3{}g6!5SGs<5B-TGFXe>Y+m<o39^9*xq5divyvtT81GlTuYNY>mm1+Yx4&322o>ywm z-0{AqUDu!IGedpsvr;`jejV?qzP0`b&Ciy!Z$^eIWCWQ1^|z&R^-8hy zZcUY@2B&niy5!)#Oj%NEm+~^3l$UC)ti&dzXeA46QdSy|=hLLC-HmJU>RKtTd$*DW z@$$lRdGh?_JXttDe(WCKSI?oZGW6Zm;g%iS((x@kGkT5J%kd3Th8M|~e<+jlXLDs@p+(FlKM4*pNN}J*BEk(acXqT)EHFtxfI)nH(R>Vo4$*u@ zj|R!kijXOjBh`KFp8m}Eap(3#*||Mw?45_7W8YJXEs~cL@ttS*O@G`EG#aEJ-z2kU zMys&}ahz!82tO$-u*lgndGh7Il|v^m2g4P&fW7D5V6)%I&=NHVH~)0bAn5&W-?HZ6 zp~^qW{YBDuyIfW-cT0GfkAwrS+3X`0i;p^*O+Mmu_)Be#T@qY@5{PdFVqO9Re8k`1 zNBsPK#n;bA;^G3NVv$Y4!hOXD<5bPZM|?&bvG#6*YH$m1Yta5bAWLM54;eqO3-@4VF4sJAj`o$B*f&L}WKDf6?ZhlcJRaG`|{3m&82~zs_<-d^=DrBIq@$zS1Tr%Fe(=}^&sQM;3;>_tBiHPu3 zdXxs)zj0-vy#MYbj3ZRiJpq!LZdAvV6n{xd^pmU%Be=&V6H)?|PS8#wptIrOKG1v0 z&nPuj@e&>7D z@}4I(P?k2@fzc?*Nq&+#!C#FnBh4rt{4SmxBJaLktn}EE8ia8fls%t5m8*Q&@IcK? z`1hIp{f$o$`=|f9Pznn*SyGSUFrNka!E*gtq5SwqQ)KIAm$bLVfn(#PwIxoPm&So> zV`cS<1lhhNMd}yFVSZzQCl)*%Du}@uW!i8aL)3PFkAdq-_~nytH9_n>M=SKmTwl z#$F`(dBLz-+KP{ah8n<$X8H7YCFB9=?`yd*G_d5C^zYZMPEwpn-k|MJkCNSf;P7C1 z_nnFI$&ZSqzSbmjXNJhkX~EF@Ak0soVq5-ILP>R$kKFFgfrek+ z8>$&(Y_n~fNAdU=ey6WYNcM-$2Vfkb^3GcY^6`g7Qdt%*#S;UiFwdy&@tLd)axio? z(WrDZoH`5}rN4C8jhLG_*emQ8oZt^G^aGb6C{?nos)$v;$#=@e@eH3Wg>JZuS(uA7*laTF)B*g|Y2v5d zZQqs#`Bw>S;O@u}-2A0q_B4e3Mv|uLP%&!;IuZ;9s}SCF{}r@LO@4Q5zp| z^BwX@7_nnM_?sL@`-?r7NPhe}H9Dt1@71@JSTKYlbrT9(F3N4rf{EVm>6u|w~}(1#y5 zM8iL4X0R--G06w-6=1IOWijSp*7RWQd$|EpR2V3WYvUvh+#DP03*Oh{mYfs_xy30N zsF(zEOuQ}4HfddEQ@_J-jeeBxl$FLvN^+ozW9U2L&{sNmy>Usrk~d{L1u~zBZ`V~t z$OrFFRE;v3H646V6ev012G0aPnKLs?R(1hXmt8vB?dqGyk7dcw-O;=Zc@y)H%TMRY z&fX+>Y*(`E+mj^kzEvnc`^hwLtPOJ+fbSY*Hu_#TFGQLao8^5h2}7s!q+Hd);j zBkj#rSy~?@YgX80W49Z+5-khnMajH5QLvq8=y{Syz;g-;IPWM@e;Mv}{sS)PA3Uxxdk|HvH$tsnUo^AtaD z6Jra?Xw$|7Id(WjzIQQQE5xjHVVPKg@B)^qgLokjN~FF$;t?ktju7UJ<|mFm~pOM%gyFLTCi?1+c{`^%o433Ba99_Bw5{x1+R z36a`Gq0-T8miOMyl^gHmU_K($_1VzL+0#R$8GgC2AQ1fHD+vxC*em!0*z7j=SMWn5 z;uyvdEzR-JbLc(z*=|G3Q-L|cvrfB@;%@p_`uMpsL(y+A;^7d5_XhNjI@rF{4DJhs zzYNAR!O*`L#Cy4rwHyA)U%EPNvT=Qa;x%F;$CZ`B{_n6hQKxi(xwqm!#H2y+5Al$R`YP4v{5QVX}Og8RN)-4(7rJOi~Ux%$X4cezYJq zw1TVr;UE0L3I0+Ie#}J7NIqsv($;E|c76lDZNQ#^__78%;z{*`??rqG-&?=fs`{FZ zKFcugt-yN&9DL*5Jn6)@>ncML4}@Ue!sPs!6uI(hjx=Db7R{wZhd!xil^ucI5y4!x$gOAGUUhsmz2&6lA7`mX{-&C z6>S#qMGod6TQ+q^%kp*$EEh(|)eNkMXWze`?x zE(07AEGZbP-H!Yx%An?W{W`bu?E%0>jHQ&n!jCji;jck1XUF`*hGtvf`;F4QHbLno z{UP%`C;Cf4oV|W+ocuj({>sbga_pc(nwNx0Q{CtsyqPV3_v0ejxdm}?XOyg6Zk1iV zZduk84W2e5PK<_LxumAT0{!6}#Yjt240zD2uJv@gq`5vCzsK>0TMB=3!NbMc%xUDeqj*lrHFI4eYYDDGGA5s#swr;)S-BSfxh=@J}nd z;$_te}-c$dJGN zaiJQ^YcFL2XS^CCeg1-ZW~p3cMZV&Y)vFSqe^$Br%0$`RlL9+*df~5CTv&>jfczgC z>MP7)*R63YUs+odD^EX}Ef>yaDBWGZ)-Hz+BuVckyByf#fQ;gSH&@myw}6+!F+R+} z8(FZ2OxeCU7UPVTom-vo330$=kqv8YvZ^Z<{vi^+H6D5vFZFd6S=kv2zi9(z3*L#v zJ1+I^woO*_m8D^C*RZebw8&f6a%A`Rc-gnhA)7ba<0W1(`XyGma6Vn0`d$|D zq*!Tfc0gus6?2A$_$rKLD*j!iiZDn zNoQ*mS~UE&9lAe`zq!F8+c2NJ*SRc8_U(4bI?UVV^;Y@e-{b>prqcPgCKI?n9P?_G z%TJ{u_A|=n4G!qNUG`#3>$@GYyvrf;=UJ3LVXR9G#7|5!rdzFn zh&!&lQV1U(Eo-1NjL+Izo#@{sQ;Q>1&4c;no}G#4(~g+NE)(8WKGhl0Js;~XKZOXP@eXRO`c?eyb|T&*-XeV zRW@QSwr_DGo^;?FPS}`5o_Kr$>;XA@T{!TQpL68$_YrrjjRv1&$OrHX+k32Xbe~gp zfg5*kjmKQX%40hms%_m6CwsQpW!Kg?If7@l_r%CY@8_s@yJ6=~oJ&&J-+m(paaK5d zj1}XV0G^D5Y@EufPW&K@~?!VSL=q2kc_v%#Uwk@EQI6pSND`I8RB5xtN}TZ;|cAE0Wrp~%5G zZemyq`Nsj%^l4_~%$ol9-_q=#Izas7{|(*A^6ELS31(YI$6%0PE|2SVL^bLIgu{AA=jga6BIumJ>Zbz@KLY7lrGm^OOrE4 z9CGTgL(Uun*8O%go18uFl#{r28uzY4=U;u%qipCf=JEQKZ1}lw#Al&$_GG%OUlRx2 zD3B*FdNB8}dFbOZ;NF5-YG;Q-7NI`0eH+J|sdA2G;J-C1-H5fLF`h!q7jS_8b^Kh% z8q+u~Z(osiqD=!Bm{Y}AUmS-sMQcr!`Pob({~HLFAHTUrv&q_;IH|3U zLp{QbxXp;V2FK|h&22ROAB%s$f4crN{vkKczfV2RfjxwCw)e@%zXbKgf|AZ-LjI zpCGTlptY+nr-0Kk<>U8r<)ioV5Mw9Fg)^xAA-1D#t>~~~PEE+i(xnOU(dDNz5$mQQ zA4$SEUC7&kf1?}nibvhw7aYjEKTvUgBkZ5}V^Lq5G1a2!KjR-Gk42EudViiegWulPgZvdd&m$Xs`Neaoa`K29zhN_nQ<2XG z%W2HvniX-fyaRE^{tVP4!r^OOate9f+LejG=9K0pn{3+P##mjzkcxM*q5nD1`$Xsl z{K|4S^alF>e4*n1>PqOp@_*!j@9IC}Ao73x5*u;>){Xp-qxqpOhdih*9`gV`0{*Uc z7vl0n$b~p9s%E@zcZN)ufLb|fQ~MrEgD(m~Y?3CsFy@`TPRv6hYBXU=k7uKnIvY6~ z>lkGvVJhD3-NLxSAqV!Rg1>|0_>nZoJ`&s&4*!#hIWf!OgDKFtRMei65I-VjCVp@d zYtZ3gtlwj-7&F(1>KEJbj9dA(pdc^(N6hnJpjNG8)BdUdsS`qwi;U|(xidQ}9QB77 z@Mt{Z#yII{bHE3(?#y}$W12+RsRx{in8WHPdv;}D{UktAQjD@|XPV^Z2Fl)DY4BNy zoe(eV*y2){a}octu2g`QhuYB$)RcRW8?a`vZVlqf9Ufda%Kp6`<=;Bn9f*svkUIhY zfn+&#+=CiO5^7a0jK!w%^$t8!3I5|)nQP}{hb#Z5>%YeTA&7tM;5@9;13zmZ)c-2* zKe_QW^8ZYY|Ed4Wf$=!xyKPG%YG1&=49_7q;x{|nTsTj}cswd@jEwRF=5%quPjc;p zbyknZC_Atgyn4A4_JUj#F#~gYH)`u#Lt*3Z+?+sJ1uR@&=z^~IZuLkSYF>Nc&*#rY zJ#Z5AV@C$+jfnrYCO|Jdcs>d7o(mW?{Oynpxo-=&@W{bb*o+Hn6%Hl;Su>(x+Xa~8 zWXMzF{}I~1!Vmw?`Uh&zVWEC%y=e{jzXAI1gM5*-TIP*h$6Ep)uyHN)e-wXvOCt0e zu_)pO)+u-GNLT#B8t%5uX~1X1c+#+Ljy$$09yaTe)KsIY1+osp*qXIj>Pu%kVlK#z zzGcfs4{88Ld2DwY=FN%ucA$2ZsdAd%HNp4 zy*sz3Bi0B|b^k4!(opv{V$RbMn=o%m1%_0$zQMejYqM;ORpP?D z?y=n-)X~BvJ0lc!lq2cs!MGm-E`(nI{^i7varU5ILoV3dldQ&Cikc&RH!%=D>%N?W z@%*3qukBUQ`M(SLa_K?_*4)j?x2yPPZL&OmCKG0FC9IS4toez>wT=TaP3^xy>aAvaaLxS9D)B_27k7( zI}JX}sCb|Q-)U`eqBfg_b@y1r#d#_gSl*EcTXCrvuLu0kH6f0X`f~nE7WgI^x`g}} z{%`6O3u2}$+)DsAF#px~PmBL*P!m8dgSD}`>R7e@Oa5;FR>sUmtV;x7-6AR~K>64W z(0|2$Z3)W$55fMY0zWx-=k^TL_kbUIvk7`nxo(I3Z{M0Cb7otW9Q3swfAq<u^G;GcTEQ!j-8ROIc(GDyYe`Uw)I~ci) zihm$~cS5k@hN40<)}0vt>-<-T-&+1d-OwBLzaI5=t_RPZ9Rm`pbogCBO@iKlOhpaBoD7ZzXhe5BQfk(A?RPYCKDn z{U?m!Qu?p*f9Ag${}VrbLK@<~naGiuD-b{VpEaTHUCdT`5f$l=nkM*<`mf_B|Lq&a z9}fNh7XEBChci&$XI+Kz9mDQD52L@i_rni1x^TV~ekdRForHR09%2O(d}SDXYnHN! zin1u=2Z+UJ|ImNpr~WTl9FKKgu0zGjlgL>%ZAek^4|5q}qHj-4(fps5|Bw5>YUIQl zx|5J2kaUKz~4E_e+P-5`tOB54skR2FATUj=lZ^n zzvjp}nvfiVdcFm*Wjgc>v1XSWwvdT+)>z0tU-AFA{%i85|KnO4_bV}vkH^?)8^q6? z?v>~Az}-p8{<-F%gq8(517dGvUvY5$^#%_@DjK z|5N`DQvXNoe@AaR*02H)3)1g-5Rds`eRq7{&tHR|&v4F&Vdr)aV)JO&mq~F;Ce})p zqs~G9z7lgX?*H5>HtX4tBBP;fv?9 zz&UQkKdZszta}g}F@6_+jf(&1C!TpK7kq0`_TLQrnHk|&tHItM7j+5sHTV`Kf8>?a z|2E2h)c!U6nTr1ydv4m8s%(dQh87@(D_vm5*vu+EAU=H#_?vMCW81QYX4Gy?YM&AJ zD(nXTRilnO4L+InKe@=H>MzHUTdnlM&oxKpKOCde!L?I=6}vM}qc7w7;^pt>g1@mg z30ohtf2IGL|I5veKpbdAtv?WPxEB9#zGly4jVnjVys1Iszb4}M)_?Lp?7w$wI@V@Q zvIlWs9{Qu7UohXKYP1#QW`!{xT*P%KP0zu3;JtX*3wf@h+@$iK`EyL@&w%%mQ4>U- zhdgx8&P-L0<2o(zkINrCjc1l352^sjQ+oFfGjTr>*Z0x*+hWn~Md6vcnkc0!v<1rK5cZqS0T=FsZPBie zA>U?BvJ$li@_!@t3U#8^xo?jLefeS?-Xs^!VLvFiiZLAJ?~RRE)%p+p->CfQ|FW~f zkjF^FXq91A{BPZm$pp3 zE}3tUgaqcJu&tFb$X#NfuUOkzVa2%>`iAx4S_|xq`vy@2ap#k{Re*PJm>y6>LVwxkAZP7`Ins4Hd?2n{29kH#?;n-;QvS0|7Z)eiS9Lt zs9ELVy-479Dc{X`V@&zv6L~7vNjTB#82C1?Zs(l zjvFM;J?(-2j8yfp#(Fd4W(E#3Y&uF_c$RrokjfqSj?NK`Jy&)m$VWG(su+JieE+e- zh<}v)X{Qcl>*r2o$$$Alu{?*EAwMr%jk6xyxEeL0Iml^W#C2jEi+_oq^2b^**F|l{x_=slm+)+ z+7W9zz_k_S(emVl9JN2Q1)M-zCf@`FA_gP>myrJ$`_!uS&q3gC#GW9=&dgo7AFX$5 zl3c%9ApiAeGgLmVVbjK>%fFNHe`_-Ag0&j+n2qV<_CC@tu|CdP{^_F$h~1);&Yw8! zM6J(-=0J19KLm~CY2NSiw?4n*B2E93Rs2i&C%TarVs4o4Q|FJNZuAd7or(PklTaH^ zRG5g37>Sjbwf!Hpa<9JzIn@;CR5olmOSKoDD^M}U*;DDV1T|0n+xj@T7rwd4iM?T1 z&p~d$_=nHv_a7cRbDZg@@f_Ui!a8gKxWWZFy0Bls2-(MAO(+_BH4^X)@Z;Hs-`CIi zjbg0Hkn5%vN2&E4#$pMsV8p-JcLIH9WA4(7dc!L(=F8uFSPV?WhBXLay!zS{g;~eX zxoB!|A;06^Uc_!_oGbG0_H9WjuF$dR_=tZo_P%mYBm4Gv!p89HW93ob(@Xtlop0}M zC-%#7-!}FXB>G@30#TPtl^32#f^H;&_kxtI=(g|Om;P-J>U5`1WWi?!sC|cw#mP&I zQ4-yOuq)P=0#$8+^^`q3lYxnQF9Q_Drbg_4yQ}Fw*Z+y1^*>$4x{Z^2xt2hms_sz- zNA-|4w+yPvV3#|h8J$)$w%_&b^ zOh%l8u_MRjJ9?a`_oesESg`?P+PpCdYwM6VzMqqALQO0O^OA$L0UooVACb@n)N3~+ zsyde557$3+{3FA45ALB3SieN`k@_4H3-Ryh<=$QmKhN37A=J57UqU?@`61(U_N|Z4 z`$#UEGYkH2q2}9~v9Dnx);+tij>E=13!AXMv3X;xS`&7||CN?l;CJ!&6?k`iJmdXy zY^+OcLahJF^ZBa&LtjbXZ$XU0IECu~{M!iDLYWhA%sT#tC2r_HYQNzB;lYNla7>oICka% zIyN46^k$0O1Mdwiy)!h}^kaEYg}wgMFkk-AlW`s9oFyeAJwmZ z&FKt8JqPPU7?a*=QNyamIU8&D^bOo^%y$9<{pHQ;GqC@;4u5;q@!$IUTed;|_y6!& zh2-Z)kIj?bzqj7#`lBDmpYfivaX-cT2*j5BI~|j%4{P|fF)`m)@&62y zdS*VJyJF*8IFbb^7EqPb6}Nwbu!q${?wg2>$C0+)&ExR*U0&E zh48()EsxvVU&85qUH`84HT^enP?oH9@~HEgexFBPqYZoKzxsXl?fu*PT))nveqH0} z@pJtdVtf4jMEng5bbqknv%7b87XAIt#b=XxbfvrUS-NVq}(qG@XvpeD@9V-}#G&SJTzCKCbCBC#dyiNip3{fV z^}cwWI$u%Ylwba{h8?#4bzk3x8oBSr-?_evM+}CqzBy<3hkp{EzW&wi!$S>UQxCqn zStaMrO~m?T6l@kXywUIezjEZ5b8{mVr+o#Tmj~4X`QGgB>t6B2H~-@M=Q~dm`q;l) zw=WyM{^LLT_VsmF3=K8@#KhA`Okg+_~#2_xV?XTar26Se+zp1&Sv*Of9nzG!f!|J)s4sqVr9(5eZ+~3 z8~L{bs`Wj5K6+ih@BQrPwLu*9ruFgA`Pg&#yM)na$G)eZ_u)IL@oyJKe~*6a9@g|| z!<090Ke#v4`1^tWt~0l9W8*)t{qc_%f6V0tbx82dxr*EetK`P z@g`#B5gFF=2JW55Z=QR%(VSXTZH4uP(dX4st2cb>n*OfpYqZZHJvSXcS9|r0vlE literal 0 HcmV?d00001 diff --git a/src/uq_desktop_processor/assets/img/icon.png b/src/uq_desktop_processor/assets/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..610137d0196cd8d1125e06c77c93ecb08ad7388b GIT binary patch literal 837385 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%0D?a;8^EV>okU8I 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

A@8c=m< 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 ^72K#qU9$hf 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 |>BPw3TsYs<^#H)2G8n^xWd% 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

jV8krTSm`9-*F2 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

tV?d?`S2f7`@i}^Q?in41fwME9UZQ&8AwKo# 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

2+SB*fKCAy8cIR6g6W5^se$!GvptlQIMU_ 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

O{_Wx(^O`GI6&OFbb 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

  • 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 z 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�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 literal 0 HcmV?d00001 diff --git a/src/uq_desktop_processor/evaluation/finetuned_evaluator/utils.py b/src/uq_desktop_processor/evaluation/finetuned_evaluator/utils.py index 16c0496..662e4a3 100644 --- a/src/uq_desktop_processor/evaluation/finetuned_evaluator/utils.py +++ b/src/uq_desktop_processor/evaluation/finetuned_evaluator/utils.py @@ -88,9 +88,7 @@ def _load_checkpoint_and_model( # Create the classifier head with the correct shape model = ViTMultiHead(model_name, num_outputs=num_outputs, image_size=image_size).to(device) - def _resize_backbone_pos_embed_if_needed( - state_dict_in: dict[str, Any], model_in: nn.Module - ) -> dict[str, Any]: + def _resize_backbone_pos_embed_if_needed(state_dict_in: dict[str, Any], model_in: nn.Module) -> dict[str, Any]: """ Resize checkpoint positional embeddings to the current model's image size if needed. @@ -155,10 +153,10 @@ def _resize_backbone_pos_embed_if_needed( # Ensure the spatial tokens form a perfect square if ( - source_size * source_size != source_grid_tokens - or target_size * target_size != target_grid_tokens - or source_grid_tokens <= 0 - or target_grid_tokens <= 0 + source_size * source_size != source_grid_tokens + or target_size * target_size != target_grid_tokens + or source_grid_tokens <= 0 + or target_grid_tokens <= 0 ): log.warning("Cannot infer square token grid. Falling back to model defaults.") state_dict_copy = dict(state_dict_in)