From 768ad484d730f0dd2462c61342936649ae05df26 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 3 Oct 2024 10:07:28 -0700 Subject: [PATCH 01/18] Refactor h3_utils to use h3ronpy --- space2stats_api/src/poetry.lock | 121 +++++++------- space2stats_api/src/pyproject.toml | 3 +- space2stats_api/src/space2stats/h3_utils.py | 176 ++++++-------------- space2stats_api/src/tests/test_h3_utils.py | 7 +- 4 files changed, 123 insertions(+), 184 deletions(-) diff --git a/space2stats_api/src/poetry.lock b/space2stats_api/src/poetry.lock index ee06e2af..a5dae79b 100644 --- a/space2stats_api/src/poetry.lock +++ b/space2stats_api/src/poetry.lock @@ -767,6 +767,30 @@ all = ["flake8", "numpy", "pylint", "pytest", "pytest-cov"] numpy = ["numpy"] test = ["flake8", "pylint", "pytest", "pytest-cov"] +[[package]] +name = "h3ronpy" +version = "0.21.0" +description = "Data science toolkit for the H3 geospatial grid" +optional = false +python-versions = "*" +files = [ + {file = "h3ronpy-0.21.0-cp38-abi3-macosx_10_14_x86_64.whl", hash = "sha256:49ac8d38a0cb8e2c9ea598473268b22fa99787669a141c8a20fc006ae1879602"}, + {file = "h3ronpy-0.21.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ca20696ea508268c1666f6aa9ebb4df4563e5c6dedb50e158dcafcca19ababf0"}, + {file = "h3ronpy-0.21.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38489065e325da510fc1d552e4f096d0c7886ca3c52aeae5f7d5d720577462c"}, + {file = "h3ronpy-0.21.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5161bc3b4678df105fdb966e8561d5f28fbd6e6d2a0c0bffc6d798611a0857b0"}, + {file = "h3ronpy-0.21.0-cp38-abi3-win_amd64.whl", hash = "sha256:a76042a1c13ddfc35d37b0180b56e1a293744fe14b81205b3d5e15222a98dc17"}, +] + +[package.dependencies] +numpy = "<2" +pyarrow = ">=10.0" +Shapely = ">=1.7" + +[package.extras] +pandas = ["geopandas (>=0.10)"] +polars = ["polars (>=1.0)"] +test = ["h3 (>=3.7)", "pytest (>=6)", "pytest-benchmark", "rasterio"] + [[package]] name = "httpcore" version = "1.0.6" @@ -1089,64 +1113,47 @@ files = [ [[package]] name = "numpy" -version = "2.1.1" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.10" -files = [ - {file = "numpy-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8a0e34993b510fc19b9a2ce7f31cb8e94ecf6e924a40c0c9dd4f62d0aac47d9"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dd86dfaf7c900c0bbdcb8b16e2f6ddf1eb1fe39c6c8cca6e94844ed3152a8fd"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:5889dd24f03ca5a5b1e8a90a33b5a0846d8977565e4ae003a63d22ecddf6782f"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:59ca673ad11d4b84ceb385290ed0ebe60266e356641428c845b39cd9df6713ab"}, - {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13ce49a34c44b6de5241f0b38b07e44c1b2dcacd9e36c30f9c2fcb1bb5135db7"}, - {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913cc1d311060b1d409e609947fa1b9753701dac96e6581b58afc36b7ee35af6"}, - {file = "numpy-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:caf5d284ddea7462c32b8d4a6b8af030b6c9fd5332afb70e7414d7fdded4bfd0"}, - {file = "numpy-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:57eb525e7c2a8fdee02d731f647146ff54ea8c973364f3b850069ffb42799647"}, - {file = "numpy-2.1.1-cp310-cp310-win32.whl", hash = "sha256:9a8e06c7a980869ea67bbf551283bbed2856915f0a792dc32dd0f9dd2fb56728"}, - {file = "numpy-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d10c39947a2d351d6d466b4ae83dad4c37cd6c3cdd6d5d0fa797da56f710a6ae"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d07841fd284718feffe7dd17a63a2e6c78679b2d386d3e82f44f0108c905550"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5613cfeb1adfe791e8e681128f5f49f22f3fcaa942255a6124d58ca59d9528f"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0b8cc2715a84b7c3b161f9ebbd942740aaed913584cae9cdc7f8ad5ad41943d0"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b49742cdb85f1f81e4dc1b39dcf328244f4d8d1ded95dea725b316bd2cf18c95"}, - {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8d5f8a8e3bc87334f025194c6193e408903d21ebaeb10952264943a985066ca"}, - {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d51fc141ddbe3f919e91a096ec739f49d686df8af254b2053ba21a910ae518bf"}, - {file = "numpy-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:98ce7fb5b8063cfdd86596b9c762bf2b5e35a2cdd7e967494ab78a1fa7f8b86e"}, - {file = "numpy-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24c2ad697bd8593887b019817ddd9974a7f429c14a5469d7fad413f28340a6d2"}, - {file = "numpy-2.1.1-cp311-cp311-win32.whl", hash = "sha256:397bc5ce62d3fb73f304bec332171535c187e0643e176a6e9421a6e3eacef06d"}, - {file = "numpy-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ae8ce252404cdd4de56dcfce8b11eac3c594a9c16c231d081fb705cf23bd4d9e"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c803b7934a7f59563db459292e6aa078bb38b7ab1446ca38dd138646a38203e"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6435c48250c12f001920f0751fe50c0348f5f240852cfddc5e2f97e007544cbe"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3269c9eb8745e8d975980b3a7411a98976824e1fdef11f0aacf76147f662b15f"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fac6e277a41163d27dfab5f4ec1f7a83fac94e170665a4a50191b545721c6521"}, - {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd8f556cdc8cfe35e70efb92463082b7f43dd7e547eb071ffc36abc0ca4699b"}, - {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b9cd92c8f8e7b313b80e93cedc12c0112088541dcedd9197b5dee3738c1201"}, - {file = "numpy-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:afd9c680df4de71cd58582b51e88a61feed4abcc7530bcd3d48483f20fc76f2a"}, - {file = "numpy-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8661c94e3aad18e1ea17a11f60f843a4933ccaf1a25a7c6a9182af70610b2313"}, - {file = "numpy-2.1.1-cp312-cp312-win32.whl", hash = "sha256:950802d17a33c07cba7fd7c3dcfa7d64705509206be1606f196d179e539111ed"}, - {file = "numpy-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:3fc5eabfc720db95d68e6646e88f8b399bfedd235994016351b1d9e062c4b270"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:046356b19d7ad1890c751b99acad5e82dc4a02232013bd9a9a712fddf8eb60f5"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e5a9cb2be39350ae6c8f79410744e80154df658d5bea06e06e0ac5bb75480d5"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d4c57b68c8ef5e1ebf47238e99bf27657511ec3f071c465f6b1bccbef12d4136"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:8ae0fd135e0b157365ac7cc31fff27f07a5572bdfc38f9c2d43b2aff416cc8b0"}, - {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981707f6b31b59c0c24bcda52e5605f9701cb46da4b86c2e8023656ad3e833cb"}, - {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ca4b53e1e0b279142113b8c5eb7d7a877e967c306edc34f3b58e9be12fda8df"}, - {file = "numpy-2.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e097507396c0be4e547ff15b13dc3866f45f3680f789c1a1301b07dadd3fbc78"}, - {file = "numpy-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7506387e191fe8cdb267f912469a3cccc538ab108471291636a96a54e599556"}, - {file = "numpy-2.1.1-cp313-cp313-win32.whl", hash = "sha256:251105b7c42abe40e3a689881e1793370cc9724ad50d64b30b358bbb3a97553b"}, - {file = "numpy-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:f212d4f46b67ff604d11fff7cc62d36b3e8714edf68e44e9760e19be38c03eb0"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:920b0911bb2e4414c50e55bd658baeb78281a47feeb064ab40c2b66ecba85553"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bab7c09454460a487e631ffc0c42057e3d8f2a9ddccd1e60c7bb8ed774992480"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:cea427d1350f3fd0d2818ce7350095c1a2ee33e30961d2f0fef48576ddbbe90f"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:e30356d530528a42eeba51420ae8bf6c6c09559051887196599d96ee5f536468"}, - {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8dfa9e94fc127c40979c3eacbae1e61fda4fe71d84869cc129e2721973231ef"}, - {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910b47a6d0635ec1bd53b88f86120a52bf56dcc27b51f18c7b4a2e2224c29f0f"}, - {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:13cc11c00000848702322af4de0147ced365c81d66053a67c2e962a485b3717c"}, - {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53e27293b3a2b661c03f79aa51c3987492bd4641ef933e366e0f9f6c9bf257ec"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7be6a07520b88214ea85d8ac8b7d6d8a1839b0b5cb87412ac9f49fa934eb15d5"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:52ac2e48f5ad847cd43c4755520a2317f3380213493b9d8a4c5e37f3b87df504"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a95ca3560a6058d6ea91d4629a83a897ee27c00630aed9d933dff191f170cd"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:99f4a9ee60eed1385a86e82288971a51e71df052ed0b2900ed30bc840c0f2e39"}, - {file = "numpy-2.1.1.tar.gz", hash = "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd"}, +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] @@ -2331,4 +2338,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "4674935c1f00ffea4e75ccb15577785d14a5b8b6ced763ceb972f9d80650016d" +content-hash = "b02f69014cb169e7b32eadc52b66c2dac50afe243402a9311965395b420aaaec" diff --git a/space2stats_api/src/pyproject.toml b/space2stats_api/src/pyproject.toml index 27887df6..ea93c5b7 100644 --- a/space2stats_api/src/pyproject.toml +++ b/space2stats_api/src/pyproject.toml @@ -21,7 +21,8 @@ starlette-cramjam = ">=0.3,<0.4" mangum = "*" asgi-s3-response-middleware = "^0.0.4" boto3 = "^1.35.11" -numpy = "^2.1.1" +numpy = "^1.24.0" +h3ronpy = "^0.21.0" [tool.poetry.group.lambda.dependencies] mangum = "*" diff --git a/space2stats_api/src/space2stats/h3_utils.py b/space2stats_api/src/space2stats/h3_utils.py index de597c48..e8f946cf 100644 --- a/space2stats_api/src/space2stats/h3_utils.py +++ b/space2stats_api/src/space2stats/h3_utils.py @@ -1,145 +1,77 @@ -from typing import Any, Dict, Iterable, List, Literal, Optional, Set +from typing import Any, Dict, List, Literal -import h3 -from shapely.geometry import MultiPolygon, Point, Polygon, mapping, shape +import pyarrow as pa +from h3ronpy import ContainmentMode +from h3ronpy.arrow.vector import ( + cells_to_wkb_points, + cells_to_wkb_polygons, + geometry_to_cells, +) +from shapely import wkb +from shapely.geometry import mapping, shape -# https://h3geo.org/docs/core-library/restable -MAX_RESOLUTION = 15 - - -def _recursive_polyfill( - aoi_geojson: Dict[str, Any], resolution: int, original_resolution: int -) -> Set[str]: - # Attempt to get H3 IDs at the current resolution - h3_ids = h3.polyfill(aoi_geojson, resolution, geo_json_conformant=True) - - # If valid H3 IDs are found, return them - if h3_ids: - return {h3.h3_to_parent(h3_id, original_resolution) for h3_id in h3_ids} - - # If we haven't reached the maximum resolution, try the next higher resolution - if resolution < MAX_RESOLUTION: - return _recursive_polyfill(aoi_geojson, resolution + 1, original_resolution) - - return set() - - -def _find_within(aoi_geojson: Dict[str, Any], h3_ids: Iterable[str]) -> Set[str]: - # Convert AOI GeoJSON to Shapely geometry - aoi_shape = shape(aoi_geojson) - - # Find H3 IDs that are within the polygon - contained_h3_ids = [ - h3_id - for h3_id in h3_ids - if aoi_shape.contains(Polygon(h3.h3_to_geo_boundary(h3_id, geo_json=True))) - ] - - return set(contained_h3_ids) - - -def _find_touches(aoi_geojson: Dict[str, Any], h3_ids: Iterable[str]) -> Set[str]: - aoi_shape = shape(aoi_geojson) - - neighbors = set() - for h3_id in h3_ids: - parent_id = h3.h3_to_parent(h3_id, h3.h3_get_resolution(h3_id) - 1) - - for n_h3_id in h3.h3_to_children( - parent_id, h3.h3_get_resolution(parent_id) + 1 - ): - boundary = Polygon(h3.h3_to_geo_boundary(n_h3_id, geo_json=True)) - if h3.h3_indexes_are_neighbors(h3_id, n_h3_id) and aoi_shape.intersects( - boundary - ): - neighbors.add(n_h3_id) - - return neighbors.union(h3_ids) - - -def _generate_h3_ids( - aoi_geojson: Dict[str, Any], - resolution: int, - spatial_join_method: Literal["touches", "within", "centroid"], -) -> Set[str]: - if spatial_join_method not in ["touches", "within", "centroid"]: - raise ValueError(f"Invalid spatial join method: {spatial_join_method}") - - # Generate H3 hexagons covering the AOI - # Polyfill defines containment based on centroid: - # https://h3geo.org/docs/3.x/api/regions/#polyfill - h3_ids = _recursive_polyfill(aoi_geojson, resolution, resolution) - - if spatial_join_method == "within": - h3_ids = _find_within(aoi_geojson, h3_ids) - - if spatial_join_method == "touches": - h3_ids = _find_touches(aoi_geojson, h3_ids) - - return h3_ids +CONTAINMENT_MODE_MAP = { + "centroid": ContainmentMode.ContainsCentroid, + "touches": ContainmentMode.IntersectsBoundary, + "within": ContainmentMode.ContainsBoundary, +} def generate_h3_ids( aoi_geojson: Dict[str, Any], resolution: int, - spatial_join_method: Literal["touches", "within", "centroid"], -) -> Set[str]: + spatial_join_method: Literal["touches", "within", "centroid"] = "centroid", +) -> List[int]: """ - Generate H3 hexagon IDs for a given AOI GeoJSON object, supporting both Polygon and MultiPolygon. - - Parameters: - aoi_geojson (Dict[str, Any]): The AOI GeoJSON object. - resolution (int): The H3 resolution. - spatial_join_method (str): The spatial join method to use. - - Returns: - Set[str]: A set of H3 hexagon IDs. + Generate H3 IDs using h3ronpy's geometry_to_cells with the correct containment mode. + Returns the H3 IDs in uint64 format for geometry creation. """ - if spatial_join_method not in ["touches", "within", "centroid"]: - raise ValueError("Invalid spatial join method") + geom = shape(aoi_geojson) + containment_mode = CONTAINMENT_MODE_MAP.get(spatial_join_method) - aoi_shape = shape(aoi_geojson) + if containment_mode is None: + raise ValueError(f"Invalid spatial join method: {spatial_join_method}") - if isinstance(aoi_shape, MultiPolygon): - h3_ids = set() - for geom in aoi_shape.geoms: - # Convert each geometry to GeoJSON - geom_geojson = mapping(geom) - h3_ids.update( - _generate_h3_ids(geom_geojson, resolution, spatial_join_method) - ) - else: - # Single polygon case - h3_ids = _generate_h3_ids(aoi_geojson, resolution, spatial_join_method) + # Generate H3 IDs as uint64 + h3_ids_uint64 = geometry_to_cells( + geom, resolution, containment_mode=containment_mode + ) - return h3_ids + return h3_ids_uint64 def generate_h3_geometries( - h3_ids: List[str], geometry_type: Optional[str] -) -> List[Dict[str, Any]]: + h3_ids_uint64: List[int], geometry_type: Literal["polygon", "point"] = "polygon" +) -> List[Dict]: """ - Generate geometries (polygon or point) for a list of H3 hexagon IDs. + Generate geometries (GeoJSON polygons or points) for a list of H3 hexagon IDs (as uint64). Parameters: - h3_ids (List[str]): A list of H3 hexagon IDs. + h3_ids_uint64 (List[int]): A list of H3 hexagon IDs in uint64 format. geometry_type (Optional[str]): The type of geometry to generate ('polygon' or 'point'). Returns: - List[Dict[str, Any]]: A list of geometries in GeoJSON format. + List[Dict]: A list of GeoJSON geometries (Polygon or Point). """ - if geometry_type not in ["polygon", "point"]: - raise ValueError("Invalid geometry type") - - geometries = [] - for h3_id in h3_ids: - if geometry_type == "polygon": - hex_boundary = h3.h3_to_geo_boundary(h3_id, geo_json=True) - geometries.append(mapping(Polygon(hex_boundary))) - elif geometry_type == "point": - # h3_to_geo does not have geo_json parameter to invert order of coords - x, y = h3.h3_to_geo(h3_id) - geometries.append(mapping(Point(y, x))) - - return geometries + if geometry_type == "polygon": + # Convert H3 cells to WKB polygons + wkb_geometries = cells_to_wkb_polygons(h3_ids_uint64) + elif geometry_type == "point": + # Convert H3 cells to WKB points (centroid of each hexagon) + wkb_geometries = cells_to_wkb_points(h3_ids_uint64) + else: + raise ValueError("Invalid geometry type. Use 'polygon' or 'point'.") + + # Convert pyarrow Array to GeoJSON geometries + geojson_geometries = [] + for geom in wkb_geometries: + if isinstance(geom, pa.Scalar): + # Convert to buffer and then to bytes + shapely_geom = wkb.loads(geom.as_buffer().to_pybytes()) + # Convert Shapely geometry to GeoJSON-like dict + geojson_geometries.append(mapping(shapely_geom)) + else: + raise TypeError(f"Expected pyarrow Scalar, but got {type(geom).__name__}") + + return geojson_geometries diff --git a/space2stats_api/src/tests/test_h3_utils.py b/space2stats_api/src/tests/test_h3_utils.py index 86031780..6de9de7a 100644 --- a/space2stats_api/src/tests/test_h3_utils.py +++ b/space2stats_api/src/tests/test_h3_utils.py @@ -1,4 +1,5 @@ import pytest +from h3ronpy.arrow import cells_parse from shapely.geometry import MultiPolygon, Polygon, mapping from space2stats.h3_utils import generate_h3_geometries, generate_h3_ids @@ -83,7 +84,7 @@ def test_generate_h3_sliver_polygon_touches(): "touches", ) - for h in ["867a74817ffffff", "867a74807ffffff"]: + for h in cells_parse(["867a74817ffffff", "867a74807ffffff"]): assert h in data, f"Missing {h} in generated hexagons" assert len(data) == 2 @@ -123,9 +124,7 @@ def test_generate_h3_sliver_polygon_centroid(): 6, "centroid", ) - h = "867a74817ffffff" - assert "867a74817ffffff" in data, f"{h} not in generated hexagons" - assert len(data) == 1 + assert len(data) == 0 if __name__ == "__main__": From 4283cc8793df70bbf366cfcc13d5523b3c8a95d6 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 3 Oct 2024 10:53:34 -0700 Subject: [PATCH 02/18] Update lib.py for use of h3ronpy --- space2stats_api/src/space2stats/lib.py | 15 ++++++++++++--- space2stats_api/src/tests/test_module.py | 3 +-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/space2stats_api/src/space2stats/lib.py b/space2stats_api/src/space2stats/lib.py index 6b8e4eb7..b3bf2f59 100644 --- a/space2stats_api/src/space2stats/lib.py +++ b/space2stats_api/src/space2stats/lib.py @@ -3,6 +3,7 @@ import psycopg as pg from geojson_pydantic import Feature +from h3ronpy.arrow import cells_to_string from psycopg import Connection from .h3_utils import generate_h3_geometries, generate_h3_ids @@ -36,7 +37,7 @@ def __exit__(self, exc_type, exc_value, traceback) -> None: if self.conn: self.conn.close() - def _get_summaries(self, fields: List[str], h3_ids: List[str]): + def _get_summaries(self, fields: List[str], h3_ids: List[int]): colnames = ["hex_id"] + fields cols = [pg.sql.Identifier(c) for c in colnames] sql_query = pg.sql.SQL( @@ -53,7 +54,7 @@ def _get_summaries(self, fields: List[str], h3_ids: List[str]): cur.execute( sql_query, [ - h3_ids, + cells_to_string(h3_ids).to_pylist(), ], ) rows = cur.fetchall() @@ -72,6 +73,10 @@ def summaries( if not isinstance(aoi, Feature): aoi = AoiModel.model_validate(aoi) + invalid_fields = [field for field in fields if field not in self.fields()] + if invalid_fields: + raise ValueError(f"Invalid fields: {invalid_fields}") + # Get H3 ids from geometry resolution = 6 h3_ids = generate_h3_ids( @@ -137,6 +142,10 @@ def aggregate( if not isinstance(aoi, Feature): aoi = AoiModel.model_validate(aoi) + invalid_fields = [field for field in fields if field not in self.fields()] + if invalid_fields: + raise ValueError(f"Invalid fields: {invalid_fields}") + # Get H3 ids from geometry resolution = 6 h3_ids = list( @@ -168,7 +177,7 @@ def aggregate( with self.conn.cursor() as cur: cur.execute( sql_query, - [h3_ids], + [cells_to_string(h3_ids).to_pylist()], ) row = cur.fetchone() # Get a single row of results colnames = [desc[0] for desc in cur.description] diff --git a/space2stats_api/src/tests/test_module.py b/space2stats_api/src/tests/test_module.py index 4e2be5ee..1e61ac1f 100644 --- a/space2stats_api/src/tests/test_module.py +++ b/space2stats_api/src/tests/test_module.py @@ -1,4 +1,3 @@ -import psycopg as pg import pytest from geojson_pydantic import Feature from space2stats.lib import Settings, StatsTable @@ -151,7 +150,7 @@ def test_aggregate_invalid_field(mock_env, database, aoi_example): ) with StatsTable.connect(settings) as stats_table: - with pytest.raises(pg.errors.UndefinedColumn): + with pytest.raises(ValueError): stats_table.aggregate( aoi=aoi_example, spatial_join_method="centroid", From 66e3aeaec59cb03dd4b90c75b46e6f5b213bc851 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 3 Oct 2024 10:58:16 -0700 Subject: [PATCH 03/18] Update ValueError for invalid fields --- space2stats_api/src/space2stats/api/app.py | 4 ++-- space2stats_api/src/tests/test_api.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/space2stats_api/src/space2stats/api/app.py b/space2stats_api/src/space2stats/api/app.py index 182d7a1a..1556543a 100644 --- a/space2stats_api/src/space2stats/api/app.py +++ b/space2stats_api/src/space2stats/api/app.py @@ -62,8 +62,8 @@ def get_summary(body: SummaryRequest, table: StatsTable = Depends(stats_table)): body.fields, body.geometry, ) - except pg.errors.UndefinedColumn as e: - raise HTTPException(status_code=400, detail=e.diag.message_primary) from e + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) from e @app.post("/aggregate", response_model=Dict[str, float]) def get_aggregate(body: AggregateRequest, table: StatsTable = Depends(stats_table)): diff --git a/space2stats_api/src/tests/test_api.py b/space2stats_api/src/tests/test_api.py index b1e6d68a..bb9b76a9 100644 --- a/space2stats_api/src/tests/test_api.py +++ b/space2stats_api/src/tests/test_api.py @@ -53,7 +53,7 @@ def test_bad_fields_validated(client): response = client.post("/summary", json=request_payload) assert response.status_code == 400 - assert response.json() == {"error": 'column "a_non_existent_field" does not exist'} + assert response.json() == {"error": "Invalid fields: ['a_non_existent_field']"} @pytest.mark.parametrize("aggregation_type", ["sum", "avg", "count", "max", "min"]) From 1507512867d034c9f9ea6c27808e1a36cd75b9a0 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 3 Oct 2024 11:25:45 -0700 Subject: [PATCH 04/18] Add documentation on bug --- notebooks/user-docs/space2stats_api_bug.ipynb | 344 ++++++++++++++++++ space2stats_api/src/space2stats/h3_utils.py | 10 +- 2 files changed, 350 insertions(+), 4 deletions(-) create mode 100644 notebooks/user-docs/space2stats_api_bug.ipynb diff --git a/notebooks/user-docs/space2stats_api_bug.ipynb b/notebooks/user-docs/space2stats_api_bug.ipynb new file mode 100644 index 00000000..9af5affc --- /dev/null +++ b/notebooks/user-docs/space2stats_api_bug.ipynb @@ -0,0 +1,344 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import Dict\n", + "\n", + "import numpy as np\n", + "import requests\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "from shapely.geometry import shape\n", + "from lonboard import Map, ScatterplotLayer\n", + "from geojson_pydantic import Feature, Polygon" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "BASE_URL = \"http://localhost:8000\"\n", + "FIELDS_ENDPOINT = f\"{BASE_URL}/fields\"\n", + "SUMMARY_ENDPOINT = f\"{BASE_URL}/summary\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Available Fields: ['sum_pop_2020', 'ogc_fid', 'sum_pop_f_0_2020', 'sum_pop_f_10_2020', 'sum_pop_f_15_2020', 'sum_pop_f_1_2020', 'sum_pop_f_20_2020', 'sum_pop_f_25_2020', 'sum_pop_f_30_2020', 'sum_pop_f_35_2020', 'sum_pop_f_40_2020', 'sum_pop_f_45_2020', 'sum_pop_f_50_2020', 'sum_pop_f_55_2020', 'sum_pop_f_5_2020', 'sum_pop_f_60_2020', 'sum_pop_f_65_2020', 'sum_pop_f_70_2020', 'sum_pop_f_75_2020', 'sum_pop_f_80_2020', 'sum_pop_m_0_2020', 'sum_pop_m_10_2020', 'sum_pop_m_15_2020', 'sum_pop_m_1_2020', 'sum_pop_m_20_2020', 'sum_pop_m_25_2020', 'sum_pop_m_30_2020', 'sum_pop_m_35_2020', 'sum_pop_m_40_2020', 'sum_pop_m_45_2020', 'sum_pop_m_50_2020', 'sum_pop_m_55_2020', 'sum_pop_m_5_2020', 'sum_pop_m_60_2020', 'sum_pop_m_65_2020', 'sum_pop_m_70_2020', 'sum_pop_m_75_2020', 'sum_pop_m_80_2020', 'sum_pop_m_2020', 'sum_pop_f_2020']\n" + ] + } + ], + "source": [ + "response = requests.get(FIELDS_ENDPOINT)\n", + "if response.status_code != 200:\n", + " raise Exception(f\"Failed to get fields: {response.text}\")\n", + "\n", + "available_fields = response.json()\n", + "print(\"Available Fields:\", available_fields)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "AOIModel = Feature[Polygon, Dict]\n", + "\n", + "# ~kenya\n", + "aoi = {\n", + " \"type\": \"Feature\",\n", + " \"geometry\": {\n", + " \"type\": \"Polygon\",\n", + " \"coordinates\": [\n", + " [\n", + " [33.78593974945852, 5.115816884114494],\n", + " [33.78593974945852, -4.725410543134203],\n", + " [41.94362577283266, -4.725410543134203],\n", + " [41.94362577283266, 5.115816884114494],\n", + " [33.78593974945852, 5.115816884114494]\n", + " ]\n", + " ]\n", + " },\n", + " \"properties\": {\n", + " \"name\": \"Updated AOI\"\n", + " }\n", + "}\n", + " \n", + " \n", + "\n", + "feat = AOIModel(**aoi)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Define the Request Payload\n", + "request_payload = {\n", + " \"aoi\": aoi,\n", + " \"spatial_join_method\": \"centroid\",\n", + " \"fields\": [\"sum_pop_2020\"], \n", + " \"geometry\": \"point\"\n", + "}\n", + "\n", + "# Get Summary Data\n", + "response = requests.post(SUMMARY_ENDPOINT, json=request_payload)\n", + "if response.status_code != 200:\n", + " raise Exception(f\"Failed to get summary: {response.text}\")\n", + "\n", + "summary_data = response.json()\n", + "df = pd.DataFrame(summary_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hex_idgeometrysum_pop_2020
0866a4a017ffffffPOINT (36.07869 36.07869)676.912804
1866a4a01fffffffPOINT (36.13482 36.13482)347.182722
2866a4a04fffffffPOINT (36.33929 36.33929)285.943490
3866a4a057ffffffPOINT (36.23708 36.23708)279.463912
4866a4a05fffffffPOINT (36.29318 36.29318)235.258474
............
2580186969ed97ffffffPOINT (34.80875 34.80875)196.448391
2580286969ed9fffffffPOINT (34.75041 34.75041)296.740893
2580386969eda7ffffffPOINT (34.77046 34.77046)154.818453
2580486969edafffffffPOINT (34.7121 34.7121)157.875350
2580586969edb7ffffffPOINT (34.81878 34.81878)236.127331
\n", + "

25806 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " hex_id geometry sum_pop_2020\n", + "0 866a4a017ffffff POINT (36.07869 36.07869) 676.912804\n", + "1 866a4a01fffffff POINT (36.13482 36.13482) 347.182722\n", + "2 866a4a04fffffff POINT (36.33929 36.33929) 285.943490\n", + "3 866a4a057ffffff POINT (36.23708 36.23708) 279.463912\n", + "4 866a4a05fffffff POINT (36.29318 36.29318) 235.258474\n", + "... ... ... ...\n", + "25801 86969ed97ffffff POINT (34.80875 34.80875) 196.448391\n", + "25802 86969ed9fffffff POINT (34.75041 34.75041) 296.740893\n", + "25803 86969eda7ffffff POINT (34.77046 34.77046) 154.818453\n", + "25804 86969edafffffff POINT (34.7121 34.7121) 157.875350\n", + "25805 86969edb7ffffff POINT (34.81878 34.81878) 236.127331\n", + "\n", + "[25806 rows x 3 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['geometry'] = df['geometry'].apply(lambda geom: shape(geom))\n", + "gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326')\n", + "gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "dcab21a133cc4fe5b7419ea14c15fe52", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "Map(basemap_style=\n", + "[\n", + " [\n", + " 2…" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Define custom breaks and corresponding RGBA colors\n", + "breaks = [0, 1, 1000, 10000, 50000, 100000, 200000, gdf[\"sum_pop_2020\"].max()]\n", + "colors = np.array([\n", + " [211, 211, 211, 255], # Light gray for 0\n", + " [255, 255, 0, 255], # Yellow for 1-1000\n", + " [255, 165, 0, 255], # Orange for 1000-10000\n", + " [255, 0, 0, 255], # Red for 10000-50000\n", + " [128, 0, 128, 255], # Purple for 50000-100000\n", + " [0, 0, 255, 255], # Blue for 100000-200000\n", + " [0, 0, 139, 255], # Dark blue for 200000+\n", + "])\n", + "\n", + "# Function to assign colors based on custom bins\n", + "def assign_color(value, breaks, colors):\n", + " for i in range(len(breaks) - 1):\n", + " if breaks[i] <= value < breaks[i + 1]:\n", + " return colors[i]\n", + " return colors[-1] # In case value exceeds all breaks\n", + "\n", + "# Map sum_pop_2020 values to colors using the custom function\n", + "gdf['color'] = gdf[\"sum_pop_2020\"].apply(lambda x: assign_color(x, breaks, colors))\n", + "colors = np.uint8(gdf['color'].tolist())\n", + "\n", + "# Create the scatterplot layer with the assigned colors\n", + "layer = ScatterplotLayer.from_geopandas(gdf, get_radius=2000, get_fill_color=colors)\n", + "\n", + "m = Map(layer)\n", + "m" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/space2stats_api/src/space2stats/h3_utils.py b/space2stats_api/src/space2stats/h3_utils.py index e8f946cf..01222704 100644 --- a/space2stats_api/src/space2stats/h3_utils.py +++ b/space2stats_api/src/space2stats/h3_utils.py @@ -66,12 +66,14 @@ def generate_h3_geometries( # Convert pyarrow Array to GeoJSON geometries geojson_geometries = [] for geom in wkb_geometries: - if isinstance(geom, pa.Scalar): - # Convert to buffer and then to bytes - shapely_geom = wkb.loads(geom.as_buffer().to_pybytes()) + if isinstance(geom, pa.LargeBinaryScalar): + # Convert the LargeBinaryScalar to bytes + shapely_geom = wkb.loads(geom.as_py()) # Convert Shapely geometry to GeoJSON-like dict geojson_geometries.append(mapping(shapely_geom)) else: - raise TypeError(f"Expected pyarrow Scalar, but got {type(geom).__name__}") + raise TypeError( + f"Expected pa.LargeBinaryScalar, but got {type(geom).__name__}" + ) return geojson_geometries From a32650d350147eb2d67cdf1a13f9913debe4522b Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 3 Oct 2024 14:17:34 -0700 Subject: [PATCH 05/18] Fix issue with Point generation h3ronpy currently has a bug with cells_to_wkb_points which returns matching coordinates. --- notebooks/user-docs/space2stats_api_bug.ipynb | 344 ------------------ .../user-docs/space2stats_api_demo.ipynb | 54 +-- space2stats_api/src/space2stats/h3_utils.py | 47 ++- 3 files changed, 50 insertions(+), 395 deletions(-) delete mode 100644 notebooks/user-docs/space2stats_api_bug.ipynb diff --git a/notebooks/user-docs/space2stats_api_bug.ipynb b/notebooks/user-docs/space2stats_api_bug.ipynb deleted file mode 100644 index 9af5affc..00000000 --- a/notebooks/user-docs/space2stats_api_bug.ipynb +++ /dev/null @@ -1,344 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from typing import Dict\n", - "\n", - "import numpy as np\n", - "import requests\n", - "import pandas as pd\n", - "import geopandas as gpd\n", - "from shapely.geometry import shape\n", - "from lonboard import Map, ScatterplotLayer\n", - "from geojson_pydantic import Feature, Polygon" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "BASE_URL = \"http://localhost:8000\"\n", - "FIELDS_ENDPOINT = f\"{BASE_URL}/fields\"\n", - "SUMMARY_ENDPOINT = f\"{BASE_URL}/summary\"" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Available Fields: ['sum_pop_2020', 'ogc_fid', 'sum_pop_f_0_2020', 'sum_pop_f_10_2020', 'sum_pop_f_15_2020', 'sum_pop_f_1_2020', 'sum_pop_f_20_2020', 'sum_pop_f_25_2020', 'sum_pop_f_30_2020', 'sum_pop_f_35_2020', 'sum_pop_f_40_2020', 'sum_pop_f_45_2020', 'sum_pop_f_50_2020', 'sum_pop_f_55_2020', 'sum_pop_f_5_2020', 'sum_pop_f_60_2020', 'sum_pop_f_65_2020', 'sum_pop_f_70_2020', 'sum_pop_f_75_2020', 'sum_pop_f_80_2020', 'sum_pop_m_0_2020', 'sum_pop_m_10_2020', 'sum_pop_m_15_2020', 'sum_pop_m_1_2020', 'sum_pop_m_20_2020', 'sum_pop_m_25_2020', 'sum_pop_m_30_2020', 'sum_pop_m_35_2020', 'sum_pop_m_40_2020', 'sum_pop_m_45_2020', 'sum_pop_m_50_2020', 'sum_pop_m_55_2020', 'sum_pop_m_5_2020', 'sum_pop_m_60_2020', 'sum_pop_m_65_2020', 'sum_pop_m_70_2020', 'sum_pop_m_75_2020', 'sum_pop_m_80_2020', 'sum_pop_m_2020', 'sum_pop_f_2020']\n" - ] - } - ], - "source": [ - "response = requests.get(FIELDS_ENDPOINT)\n", - "if response.status_code != 200:\n", - " raise Exception(f\"Failed to get fields: {response.text}\")\n", - "\n", - "available_fields = response.json()\n", - "print(\"Available Fields:\", available_fields)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "AOIModel = Feature[Polygon, Dict]\n", - "\n", - "# ~kenya\n", - "aoi = {\n", - " \"type\": \"Feature\",\n", - " \"geometry\": {\n", - " \"type\": \"Polygon\",\n", - " \"coordinates\": [\n", - " [\n", - " [33.78593974945852, 5.115816884114494],\n", - " [33.78593974945852, -4.725410543134203],\n", - " [41.94362577283266, -4.725410543134203],\n", - " [41.94362577283266, 5.115816884114494],\n", - " [33.78593974945852, 5.115816884114494]\n", - " ]\n", - " ]\n", - " },\n", - " \"properties\": {\n", - " \"name\": \"Updated AOI\"\n", - " }\n", - "}\n", - " \n", - " \n", - "\n", - "feat = AOIModel(**aoi)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Define the Request Payload\n", - "request_payload = {\n", - " \"aoi\": aoi,\n", - " \"spatial_join_method\": \"centroid\",\n", - " \"fields\": [\"sum_pop_2020\"], \n", - " \"geometry\": \"point\"\n", - "}\n", - "\n", - "# Get Summary Data\n", - "response = requests.post(SUMMARY_ENDPOINT, json=request_payload)\n", - "if response.status_code != 200:\n", - " raise Exception(f\"Failed to get summary: {response.text}\")\n", - "\n", - "summary_data = response.json()\n", - "df = pd.DataFrame(summary_data)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
hex_idgeometrysum_pop_2020
0866a4a017ffffffPOINT (36.07869 36.07869)676.912804
1866a4a01fffffffPOINT (36.13482 36.13482)347.182722
2866a4a04fffffffPOINT (36.33929 36.33929)285.943490
3866a4a057ffffffPOINT (36.23708 36.23708)279.463912
4866a4a05fffffffPOINT (36.29318 36.29318)235.258474
............
2580186969ed97ffffffPOINT (34.80875 34.80875)196.448391
2580286969ed9fffffffPOINT (34.75041 34.75041)296.740893
2580386969eda7ffffffPOINT (34.77046 34.77046)154.818453
2580486969edafffffffPOINT (34.7121 34.7121)157.875350
2580586969edb7ffffffPOINT (34.81878 34.81878)236.127331
\n", - "

25806 rows × 3 columns

\n", - "
" - ], - "text/plain": [ - " hex_id geometry sum_pop_2020\n", - "0 866a4a017ffffff POINT (36.07869 36.07869) 676.912804\n", - "1 866a4a01fffffff POINT (36.13482 36.13482) 347.182722\n", - "2 866a4a04fffffff POINT (36.33929 36.33929) 285.943490\n", - "3 866a4a057ffffff POINT (36.23708 36.23708) 279.463912\n", - "4 866a4a05fffffff POINT (36.29318 36.29318) 235.258474\n", - "... ... ... ...\n", - "25801 86969ed97ffffff POINT (34.80875 34.80875) 196.448391\n", - "25802 86969ed9fffffff POINT (34.75041 34.75041) 296.740893\n", - "25803 86969eda7ffffff POINT (34.77046 34.77046) 154.818453\n", - "25804 86969edafffffff POINT (34.7121 34.7121) 157.875350\n", - "25805 86969edb7ffffff POINT (34.81878 34.81878) 236.127331\n", - "\n", - "[25806 rows x 3 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['geometry'] = df['geometry'].apply(lambda geom: shape(geom))\n", - "gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326')\n", - "gdf" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "dcab21a133cc4fe5b7419ea14c15fe52", - "version_major": 2, - "version_minor": 1 - }, - "text/plain": [ - "Map(basemap_style=\n", - "[\n", - " [\n", - " 2…" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Define custom breaks and corresponding RGBA colors\n", - "breaks = [0, 1, 1000, 10000, 50000, 100000, 200000, gdf[\"sum_pop_2020\"].max()]\n", - "colors = np.array([\n", - " [211, 211, 211, 255], # Light gray for 0\n", - " [255, 255, 0, 255], # Yellow for 1-1000\n", - " [255, 165, 0, 255], # Orange for 1000-10000\n", - " [255, 0, 0, 255], # Red for 10000-50000\n", - " [128, 0, 128, 255], # Purple for 50000-100000\n", - " [0, 0, 255, 255], # Blue for 100000-200000\n", - " [0, 0, 139, 255], # Dark blue for 200000+\n", - "])\n", - "\n", - "# Function to assign colors based on custom bins\n", - "def assign_color(value, breaks, colors):\n", - " for i in range(len(breaks) - 1):\n", - " if breaks[i] <= value < breaks[i + 1]:\n", - " return colors[i]\n", - " return colors[-1] # In case value exceeds all breaks\n", - "\n", - "# Map sum_pop_2020 values to colors using the custom function\n", - "gdf['color'] = gdf[\"sum_pop_2020\"].apply(lambda x: assign_color(x, breaks, colors))\n", - "colors = np.uint8(gdf['color'].tolist())\n", - "\n", - "# Create the scatterplot layer with the assigned colors\n", - "layer = ScatterplotLayer.from_geopandas(gdf, get_radius=2000, get_fill_color=colors)\n", - "\n", - "m = Map(layer)\n", - "m" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.9" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/notebooks/user-docs/space2stats_api_demo.ipynb b/notebooks/user-docs/space2stats_api_demo.ipynb index 2d7f0619..7bf7da24 100644 --- a/notebooks/user-docs/space2stats_api_demo.ipynb +++ b/notebooks/user-docs/space2stats_api_demo.ipynb @@ -23,7 +23,7 @@ "metadata": {}, "outputs": [], "source": [ - "BASE_URL = \"https://space2stats.ds.io\"\n", + "BASE_URL = \"http://localhost:8000\"\n", "FIELDS_ENDPOINT = f\"{BASE_URL}/fields\"\n", "SUMMARY_ENDPOINT = f\"{BASE_URL}/summary\"" ] @@ -141,31 +141,31 @@ " \n", " 0\n", " 866a4a017ffffff\n", - " POINT (36.40245 -0.10117)\n", + " POINT (35.90001 0.6494)\n", " 676.912804\n", " \n", " \n", " 1\n", " 866a4a01fffffff\n", - " POINT (36.29170 -0.39057)\n", + " POINT (34.79718 2.12642)\n", " 347.182722\n", " \n", " \n", " 2\n", " 866a4a04fffffff\n", - " POINT (39.40696 -2.61300)\n", + " POINT (39.42863 -0.40995)\n", " 285.943490\n", " \n", " \n", " 3\n", " 866a4a057ffffff\n", - " POINT (35.34318 -1.13463)\n", + " POINT (36.91381 3.93637)\n", " 279.463912\n", " \n", " \n", " 4\n", " 866a4a05fffffff\n", - " POINT (34.80333 2.72332)\n", + " POINT (35.69251 -1.6086)\n", " 235.258474\n", " \n", " \n", @@ -177,31 +177,31 @@ " \n", " 25801\n", " 86969ed97ffffff\n", - " POINT (35.56103 -0.82817)\n", + " POINT (39.98378 -3.73064)\n", " 196.448391\n", " \n", " \n", " 25802\n", " 86969ed9fffffff\n", - " POINT (41.42538 3.56386)\n", + " POINT (34.59534 2.69625)\n", " 296.740893\n", " \n", " \n", " 25803\n", " 86969eda7ffffff\n", - " POINT (37.98080 -3.00927)\n", + " POINT (41.47496 -0.99731)\n", " 154.818453\n", " \n", " \n", " 25804\n", " 86969edafffffff\n", - " POINT (39.24303 4.54271)\n", + " POINT (37.33826 3.60893)\n", " 157.875350\n", " \n", " \n", " 25805\n", " 86969edb7ffffff\n", - " POINT (40.62723 -1.21057)\n", + " POINT (40.73842 -4.35757)\n", " 236.127331\n", " \n", " \n", @@ -211,17 +211,17 @@ ], "text/plain": [ " hex_id geometry sum_pop_2020\n", - "0 866a4a017ffffff POINT (36.40245 -0.10117) 676.912804\n", - "1 866a4a01fffffff POINT (36.29170 -0.39057) 347.182722\n", - "2 866a4a04fffffff POINT (39.40696 -2.61300) 285.943490\n", - "3 866a4a057ffffff POINT (35.34318 -1.13463) 279.463912\n", - "4 866a4a05fffffff POINT (34.80333 2.72332) 235.258474\n", + "0 866a4a017ffffff POINT (35.90001 0.6494) 676.912804\n", + "1 866a4a01fffffff POINT (34.79718 2.12642) 347.182722\n", + "2 866a4a04fffffff POINT (39.42863 -0.40995) 285.943490\n", + "3 866a4a057ffffff POINT (36.91381 3.93637) 279.463912\n", + "4 866a4a05fffffff POINT (35.69251 -1.6086) 235.258474\n", "... ... ... ...\n", - "25801 86969ed97ffffff POINT (35.56103 -0.82817) 196.448391\n", - "25802 86969ed9fffffff POINT (41.42538 3.56386) 296.740893\n", - "25803 86969eda7ffffff POINT (37.98080 -3.00927) 154.818453\n", - "25804 86969edafffffff POINT (39.24303 4.54271) 157.875350\n", - "25805 86969edb7ffffff POINT (40.62723 -1.21057) 236.127331\n", + "25801 86969ed97ffffff POINT (39.98378 -3.73064) 196.448391\n", + "25802 86969ed9fffffff POINT (34.59534 2.69625) 296.740893\n", + "25803 86969eda7ffffff POINT (41.47496 -0.99731) 154.818453\n", + "25804 86969edafffffff POINT (37.33826 3.60893) 157.875350\n", + "25805 86969edb7ffffff POINT (40.73842 -4.35757) 236.127331\n", "\n", "[25806 rows x 3 columns]" ] @@ -239,24 +239,24 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fc98ebd574fd4a989e4040baf6218300", + "model_id": "a916785affa547218fd0bb1c80afe06b", "version_major": 2, - "version_minor": 0 + "version_minor": 1 }, "text/plain": [ - "Map(layers=[ScatterplotLayer(get_fill_color=\n", + "Map(layers=[ScatterplotLayer(get_fill_color=\n", "[\n", " [\n", " 2…" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -309,7 +309,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/space2stats_api/src/space2stats/h3_utils.py b/space2stats_api/src/space2stats/h3_utils.py index 01222704..b3fe0fa7 100644 --- a/space2stats_api/src/space2stats/h3_utils.py +++ b/space2stats_api/src/space2stats/h3_utils.py @@ -2,13 +2,13 @@ import pyarrow as pa from h3ronpy import ContainmentMode -from h3ronpy.arrow.vector import ( - cells_to_wkb_points, +from h3ronpy.arrow.vector import ( # Import cells_to_coordinates for point geometries + cells_to_coordinates, cells_to_wkb_polygons, geometry_to_cells, ) from shapely import wkb -from shapely.geometry import mapping, shape +from shapely.geometry import Point, mapping, shape CONTAINMENT_MODE_MAP = { "centroid": ContainmentMode.ContainsCentroid, @@ -43,37 +43,36 @@ def generate_h3_ids( def generate_h3_geometries( h3_ids_uint64: List[int], geometry_type: Literal["polygon", "point"] = "polygon" ) -> List[Dict]: - """ - Generate geometries (GeoJSON polygons or points) for a list of H3 hexagon IDs (as uint64). - - Parameters: - h3_ids_uint64 (List[int]): A list of H3 hexagon IDs in uint64 format. - geometry_type (Optional[str]): - The type of geometry to generate ('polygon' or 'point'). - - Returns: - List[Dict]: A list of GeoJSON geometries (Polygon or Point). - """ if geometry_type == "polygon": - # Convert H3 cells to WKB polygons - wkb_geometries = cells_to_wkb_polygons(h3_ids_uint64) + return _get_polygon(h3_ids_uint64) elif geometry_type == "point": - # Convert H3 cells to WKB points (centroid of each hexagon) - wkb_geometries = cells_to_wkb_points(h3_ids_uint64) + return _get_point(h3_ids_uint64) else: raise ValueError("Invalid geometry type. Use 'polygon' or 'point'.") - # Convert pyarrow Array to GeoJSON geometries + +def _get_polygon(h3_ids_uint64: List[int]) -> List[Dict]: + wkb_geometries = cells_to_wkb_polygons(h3_ids_uint64) geojson_geometries = [] for geom in wkb_geometries: - if isinstance(geom, pa.LargeBinaryScalar): - # Convert the LargeBinaryScalar to bytes + if isinstance(geom, pa.LargeBinaryScalar) or isinstance(geom, pa.BinaryScalar): shapely_geom = wkb.loads(geom.as_py()) - # Convert Shapely geometry to GeoJSON-like dict - geojson_geometries.append(mapping(shapely_geom)) + geojson_geom = mapping(shapely_geom) + geojson_geometries.append(geojson_geom) else: raise TypeError( - f"Expected pa.LargeBinaryScalar, but got {type(geom).__name__}" + f"Expected pa.LargeBinaryScalar or pa.BinaryScalar, but got {type(geom).__name__}" ) + return geojson_geometries + +def _get_point(h3_ids_uint64: List[int]) -> List[Dict]: + coords_table = cells_to_coordinates(h3_ids_uint64) + latitudes = coords_table["lat"].to_numpy() + longitudes = coords_table["lng"].to_numpy() + + geojson_geometries = [] + for lat, lon in zip(latitudes, longitudes): + point_geom = Point(lon, lat) + geojson_geometries.append(mapping(point_geom)) return geojson_geometries From 536d36ff1f324027158d2cf3b74b3035006c69b3 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Fri, 4 Oct 2024 14:11:48 -0700 Subject: [PATCH 06/18] Integrate release from h3ronpy that solves cells_to_wkb_points --- space2stats_api/src/poetry.lock | 44 ++++++++++----------- space2stats_api/src/space2stats/h3_utils.py | 42 +++++--------------- space2stats_api/src/tests/test_h3_utils.py | 17 ++++++-- 3 files changed, 45 insertions(+), 58 deletions(-) diff --git a/space2stats_api/src/poetry.lock b/space2stats_api/src/poetry.lock index a5dae79b..5e6c5168 100644 --- a/space2stats_api/src/poetry.lock +++ b/space2stats_api/src/poetry.lock @@ -123,17 +123,17 @@ testing = ["boto3-stubs[s3] (>=1.35.11)", "coverage", "moto (>=5.0.13)", "pytest [[package]] name = "boto3" -version = "1.35.31" +version = "1.35.34" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.31-py3-none-any.whl", hash = "sha256:2e9af74d10d8af7610a8d8468d2914961f116912a024fce17351825260385a52"}, - {file = "boto3-1.35.31.tar.gz", hash = "sha256:8c593af260c4ea3eb6f079c09908f94494ca2222aa4e40a7ff490fab1cee8b39"}, + {file = "boto3-1.35.34-py3-none-any.whl", hash = "sha256:291e7b97a34967ed93297e6171f1bebb8529e64633dd48426760e3fdef1cdea8"}, + {file = "boto3-1.35.34.tar.gz", hash = "sha256:57e6ee8504e7929bc094bb2afc879943906064179a1e88c23b4812e2c6f61532"}, ] [package.dependencies] -botocore = ">=1.35.31,<1.36.0" +botocore = ">=1.35.34,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -142,13 +142,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.31" +version = "1.35.34" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.31-py3-none-any.whl", hash = "sha256:4cee814875bc78656aef4011d3d6b2231e96f53ea3661ee428201afb579d5c31"}, - {file = "botocore-1.35.31.tar.gz", hash = "sha256:f7bfa910cf2cbcc8c2307c1cf7b93495d614c2d699883417893e0a337fe4eb63"}, + {file = "botocore-1.35.34-py3-none-any.whl", hash = "sha256:ccb0fe397b11b81c9abc0c87029d17298e17bf658d8db5c0c5a551a12a207e7a"}, + {file = "botocore-1.35.34.tar.gz", hash = "sha256:789b6501a3bb4a9591c1fe10da200cc315c1fa5df5ada19c720d8ef06439b3e3"}, ] [package.dependencies] @@ -157,7 +157,7 @@ python-dateutil = ">=2.1,<3.0.0" urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} [package.extras] -crt = ["awscrt (==0.21.5)"] +crt = ["awscrt (==0.22.0)"] [[package]] name = "certifi" @@ -769,16 +769,16 @@ test = ["flake8", "pylint", "pytest", "pytest-cov"] [[package]] name = "h3ronpy" -version = "0.21.0" +version = "0.21.1" description = "Data science toolkit for the H3 geospatial grid" optional = false python-versions = "*" files = [ - {file = "h3ronpy-0.21.0-cp38-abi3-macosx_10_14_x86_64.whl", hash = "sha256:49ac8d38a0cb8e2c9ea598473268b22fa99787669a141c8a20fc006ae1879602"}, - {file = "h3ronpy-0.21.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ca20696ea508268c1666f6aa9ebb4df4563e5c6dedb50e158dcafcca19ababf0"}, - {file = "h3ronpy-0.21.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38489065e325da510fc1d552e4f096d0c7886ca3c52aeae5f7d5d720577462c"}, - {file = "h3ronpy-0.21.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5161bc3b4678df105fdb966e8561d5f28fbd6e6d2a0c0bffc6d798611a0857b0"}, - {file = "h3ronpy-0.21.0-cp38-abi3-win_amd64.whl", hash = "sha256:a76042a1c13ddfc35d37b0180b56e1a293744fe14b81205b3d5e15222a98dc17"}, + {file = "h3ronpy-0.21.1-cp38-abi3-macosx_10_14_x86_64.whl", hash = "sha256:c0bc8b87da6de7f83c783581fae72a41af560bbb924b7f18c103fa9e73196781"}, + {file = "h3ronpy-0.21.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6b3f15b86652c3fafdbaaaf977962317d7367176a1c1b13e688daff8c5e0c964"}, + {file = "h3ronpy-0.21.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:109c2424685096354c1390cec3842b65ea9fe8b4afb956ce918b604b7a68ad6b"}, + {file = "h3ronpy-0.21.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f69297204daf93875882692ff0c6cd253de0da5f94835598a54d01abb5be740b"}, + {file = "h3ronpy-0.21.1-cp38-abi3-win_amd64.whl", hash = "sha256:613bdee812ca31d27f2750ef0d453a6257461465adc4bd891a43db70226ad6be"}, ] [package.dependencies] @@ -787,7 +787,7 @@ pyarrow = ">=10.0" Shapely = ">=1.7" [package.extras] -pandas = ["geopandas (>=0.10)"] +pandas = ["fiona (<1.10)", "geopandas (>=0.10)"] polars = ["polars (>=1.0)"] test = ["h3 (>=3.7)", "pytest (>=6)", "pytest-benchmark", "rasterio"] @@ -1986,13 +1986,13 @@ tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asy [[package]] name = "rich" -version = "13.9.1" +version = "13.9.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-13.9.1-py3-none-any.whl", hash = "sha256:b340e739f30aa58921dc477b8adaa9ecdb7cecc217be01d93730ee1bc8aa83be"}, - {file = "rich-13.9.1.tar.gz", hash = "sha256:097cffdf85db1babe30cc7deba5ab3a29e1b9885047dab24c57e9a7f8a9c1466"}, + {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, + {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, ] [package.dependencies] @@ -2169,13 +2169,13 @@ test = ["brotlipy", "httpx", "pytest", "pytest-cov"] [[package]] name = "tomli" -version = "2.0.1" +version = "2.0.2" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, + {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, ] [[package]] diff --git a/space2stats_api/src/space2stats/h3_utils.py b/space2stats_api/src/space2stats/h3_utils.py index b3fe0fa7..9c3a60fc 100644 --- a/space2stats_api/src/space2stats/h3_utils.py +++ b/space2stats_api/src/space2stats/h3_utils.py @@ -1,14 +1,13 @@ from typing import Any, Dict, List, Literal -import pyarrow as pa from h3ronpy import ContainmentMode from h3ronpy.arrow.vector import ( # Import cells_to_coordinates for point geometries - cells_to_coordinates, + cells_to_wkb_points, cells_to_wkb_polygons, geometry_to_cells, ) -from shapely import wkb -from shapely.geometry import Point, mapping, shape +from shapely import from_wkb, to_geojson +from shapely.geometry import shape CONTAINMENT_MODE_MAP = { "centroid": ContainmentMode.ContainsCentroid, @@ -44,35 +43,12 @@ def generate_h3_geometries( h3_ids_uint64: List[int], geometry_type: Literal["polygon", "point"] = "polygon" ) -> List[Dict]: if geometry_type == "polygon": - return _get_polygon(h3_ids_uint64) + wkb_geometries = cells_to_wkb_polygons(h3_ids_uint64) elif geometry_type == "point": - return _get_point(h3_ids_uint64) + wkb_geometries = cells_to_wkb_points(h3_ids_uint64) else: - raise ValueError("Invalid geometry type. Use 'polygon' or 'point'.") + raise ValueError( + f"Invalid geometry type. Use 'polygon' or 'point', not {geometry_type}" + ) - -def _get_polygon(h3_ids_uint64: List[int]) -> List[Dict]: - wkb_geometries = cells_to_wkb_polygons(h3_ids_uint64) - geojson_geometries = [] - for geom in wkb_geometries: - if isinstance(geom, pa.LargeBinaryScalar) or isinstance(geom, pa.BinaryScalar): - shapely_geom = wkb.loads(geom.as_py()) - geojson_geom = mapping(shapely_geom) - geojson_geometries.append(geojson_geom) - else: - raise TypeError( - f"Expected pa.LargeBinaryScalar or pa.BinaryScalar, but got {type(geom).__name__}" - ) - return geojson_geometries - - -def _get_point(h3_ids_uint64: List[int]) -> List[Dict]: - coords_table = cells_to_coordinates(h3_ids_uint64) - latitudes = coords_table["lat"].to_numpy() - longitudes = coords_table["lng"].to_numpy() - - geojson_geometries = [] - for lat, lon in zip(latitudes, longitudes): - point_geom = Point(lon, lat) - geojson_geometries.append(mapping(point_geom)) - return geojson_geometries + return to_geojson(from_wkb(wkb_geometries)) diff --git a/space2stats_api/src/tests/test_h3_utils.py b/space2stats_api/src/tests/test_h3_utils.py index 6de9de7a..163d5d0b 100644 --- a/space2stats_api/src/tests/test_h3_utils.py +++ b/space2stats_api/src/tests/test_h3_utils.py @@ -1,5 +1,6 @@ import pytest from h3ronpy.arrow import cells_parse +from shapely import from_geojson from shapely.geometry import MultiPolygon, Polygon, mapping from space2stats.h3_utils import generate_h3_geometries, generate_h3_ids @@ -50,11 +51,15 @@ def test_generate_h3_ids_centroid_multipolygon(): def test_generate_h3_geometries_polygon_multipolygon(): h3_ids = generate_h3_ids(aoi_geojson_multi, resolution, "touches") geometries = generate_h3_geometries(h3_ids, "polygon") + print(geometries) assert len(geometries) == len( h3_ids ), "Expected the same number of geometries as H3 IDs" for geom in geometries: - assert geom["type"] == "Polygon", "Expected Polygon geometry for MultiPolygon" + geojson = from_geojson(geom) + assert ( + geojson.geom_type == "Polygon" + ), "Expected Polygon geometry for MultiPolygon" def test_generate_h3_geometries_point_multipolygon(): @@ -63,8 +68,14 @@ def test_generate_h3_geometries_point_multipolygon(): assert len(geometries) == len( h3_ids ), "Expected the same number of geometries as H3 IDs" - for geom in geometries: - assert geom["type"] == "Point", "Expected Point geometry for MultiPolygon" + print(geometries) + for g in geometries: + geojson = from_geojson(g) + print(dir(geojson)) + assert geojson.geom_type == "Point" + assert len(geojson.coords) == 1 + assert len(geojson.coords[0]) == 2 + assert geojson.coords[0][0] != geojson.coords[0][1] def test_generate_h3_sliver_polygon_touches(): From 5299454c7954a0ee167616abc2a2157cd495b0c1 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Fri, 4 Oct 2024 14:27:17 -0700 Subject: [PATCH 07/18] Remove looping on geometries --- space2stats_api/src/space2stats/lib.py | 2 +- space2stats_api/src/tests/test_api.py | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/space2stats_api/src/space2stats/lib.py b/space2stats_api/src/space2stats/lib.py index b3bf2f59..bd515bf0 100644 --- a/space2stats_api/src/space2stats/lib.py +++ b/space2stats_api/src/space2stats/lib.py @@ -101,7 +101,7 @@ def summaries( for idx, row in enumerate(rows): summary = {"hex_id": row[0]} - if geometry and geometries: + if geometry and geometries is not None: summary["geometry"] = geometries[idx] summary.update( diff --git a/space2stats_api/src/tests/test_api.py b/space2stats_api/src/tests/test_api.py index bb9b76a9..f57abf31 100644 --- a/space2stats_api/src/tests/test_api.py +++ b/space2stats_api/src/tests/test_api.py @@ -1,4 +1,5 @@ import pytest +from shapely import from_geojson aoi = { "type": "Feature", @@ -114,7 +115,8 @@ def test_get_summary_with_geometry_multipolygon(client): for summary in response_json: assert "hex_id" in summary assert "geometry" in summary - assert summary["geometry"]["type"] == "Polygon" + geometry = from_geojson(summary["geometry"]) + assert geometry.geom_type == "Polygon" assert len(summary) == len(request_payload["fields"]) + 2 @@ -135,7 +137,8 @@ def test_get_summary_with_geometry_polygon(client): for summary in response_json: assert "hex_id" in summary assert "geometry" in summary - assert summary["geometry"]["type"] == "Polygon" + geometry = from_geojson(summary["geometry"]) + assert geometry.geom_type == "Polygon" assert len(summary) == len(request_payload["fields"]) + 2 @@ -148,6 +151,7 @@ def test_get_summary_with_geometry_point(client): } response = client.post("/summary", json=request_payload) + print(response.json()) assert response.status_code == 200 response_json = response.json() assert len(response_json) > 0, "Test query failed to return any summaries" @@ -156,7 +160,8 @@ def test_get_summary_with_geometry_point(client): for summary in response_json: assert "hex_id" in summary assert "geometry" in summary - assert summary["geometry"]["type"] == "Point" + geometry = from_geojson(summary["geometry"]) + assert geometry.geom_type == "Point" assert len(summary) == len(request_payload["fields"]) + 2 From ac4fdd3bcc763cc2cda6c5b597761c80c9e1037d Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Fri, 4 Oct 2024 14:54:27 -0700 Subject: [PATCH 08/18] Update user documentation --- .../user-docs/space2stats_api_demo.ipynb | 198 ++++- .../space2stats_py_package_demo.ipynb | 738 ++++++++++++------ 2 files changed, 671 insertions(+), 265 deletions(-) diff --git a/notebooks/user-docs/space2stats_api_demo.ipynb b/notebooks/user-docs/space2stats_api_demo.ipynb index 7bf7da24..e79fc152 100644 --- a/notebooks/user-docs/space2stats_api_demo.ipynb +++ b/notebooks/user-docs/space2stats_api_demo.ipynb @@ -85,9 +85,142 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hex_idgeometrysum_pop_2020
0866a4a017ffffff{\"type\":\"Point\",\"coordinates\":[36.078694056627...676.912804
1866a4a01fffffff{\"type\":\"Point\",\"coordinates\":[36.134817927246...347.182722
2866a4a04fffffff{\"type\":\"Point\",\"coordinates\":[36.339286712001...285.943490
3866a4a057ffffff{\"type\":\"Point\",\"coordinates\":[36.237081352434...279.463912
4866a4a05fffffff{\"type\":\"Point\",\"coordinates\":[36.293182542907...235.258474
............
2580186969ed97ffffff{\"type\":\"Point\",\"coordinates\":[34.808746693532...196.448391
2580286969ed9fffffff{\"type\":\"Point\",\"coordinates\":[34.750412026186...296.740893
2580386969eda7ffffff{\"type\":\"Point\",\"coordinates\":[34.770464787099...154.818453
2580486969edafffffff{\"type\":\"Point\",\"coordinates\":[34.712102323801...157.875350
2580586969edb7ffffff{\"type\":\"Point\",\"coordinates\":[34.818784182799...236.127331
\n", + "

25806 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " hex_id geometry \\\n", + "0 866a4a017ffffff {\"type\":\"Point\",\"coordinates\":[36.078694056627... \n", + "1 866a4a01fffffff {\"type\":\"Point\",\"coordinates\":[36.134817927246... \n", + "2 866a4a04fffffff {\"type\":\"Point\",\"coordinates\":[36.339286712001... \n", + "3 866a4a057ffffff {\"type\":\"Point\",\"coordinates\":[36.237081352434... \n", + "4 866a4a05fffffff {\"type\":\"Point\",\"coordinates\":[36.293182542907... \n", + "... ... ... \n", + "25801 86969ed97ffffff {\"type\":\"Point\",\"coordinates\":[34.808746693532... \n", + "25802 86969ed9fffffff {\"type\":\"Point\",\"coordinates\":[34.750412026186... \n", + "25803 86969eda7ffffff {\"type\":\"Point\",\"coordinates\":[34.770464787099... \n", + "25804 86969edafffffff {\"type\":\"Point\",\"coordinates\":[34.712102323801... \n", + "25805 86969edb7ffffff {\"type\":\"Point\",\"coordinates\":[34.818784182799... \n", + "\n", + " sum_pop_2020 \n", + "0 676.912804 \n", + "1 347.182722 \n", + "2 285.943490 \n", + "3 279.463912 \n", + "4 235.258474 \n", + "... ... \n", + "25801 196.448391 \n", + "25802 296.740893 \n", + "25803 154.818453 \n", + "25804 157.875350 \n", + "25805 236.127331 \n", + "\n", + "[25806 rows x 3 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Define the Request Payload\n", "request_payload = {\n", @@ -103,12 +236,13 @@ " raise Exception(f\"Failed to get summary: {response.text}\")\n", "\n", "summary_data = response.json()\n", - "df = pd.DataFrame(summary_data)" + "df = pd.DataFrame(summary_data)\n", + "df" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -141,31 +275,31 @@ " \n", " 0\n", " 866a4a017ffffff\n", - " POINT (35.90001 0.6494)\n", + " POINT (36.07869 5.11252)\n", " 676.912804\n", " \n", " \n", " 1\n", " 866a4a01fffffff\n", - " POINT (34.79718 2.12642)\n", + " POINT (36.13482 5.09047)\n", " 347.182722\n", " \n", " \n", " 2\n", " 866a4a04fffffff\n", - " POINT (39.42863 -0.40995)\n", + " POINT (36.33929 5.11542)\n", " 285.943490\n", " \n", " \n", " 3\n", " 866a4a057ffffff\n", - " POINT (36.91381 3.93637)\n", + " POINT (36.23708 5.10296)\n", " 279.463912\n", " \n", " \n", " 4\n", " 866a4a05fffffff\n", - " POINT (35.69251 -1.6086)\n", + " POINT (36.29318 5.0809)\n", " 235.258474\n", " \n", " \n", @@ -177,31 +311,31 @@ " \n", " 25801\n", " 86969ed97ffffff\n", - " POINT (39.98378 -3.73064)\n", + " POINT (34.80875 -3.47225)\n", " 196.448391\n", " \n", " \n", " 25802\n", " 86969ed9fffffff\n", - " POINT (34.59534 2.69625)\n", + " POINT (34.75041 -3.44944)\n", " 296.740893\n", " \n", " \n", " 25803\n", " 86969eda7ffffff\n", - " POINT (41.47496 -0.99731)\n", + " POINT (34.77046 -3.5715)\n", " 154.818453\n", " \n", " \n", " 25804\n", " 86969edafffffff\n", - " POINT (37.33826 3.60893)\n", + " POINT (34.7121 -3.54868)\n", " 157.875350\n", " \n", " \n", " 25805\n", " 86969edb7ffffff\n", - " POINT (40.73842 -4.35757)\n", + " POINT (34.81878 -3.53328)\n", " 236.127331\n", " \n", " \n", @@ -211,52 +345,54 @@ ], "text/plain": [ " hex_id geometry sum_pop_2020\n", - "0 866a4a017ffffff POINT (35.90001 0.6494) 676.912804\n", - "1 866a4a01fffffff POINT (34.79718 2.12642) 347.182722\n", - "2 866a4a04fffffff POINT (39.42863 -0.40995) 285.943490\n", - "3 866a4a057ffffff POINT (36.91381 3.93637) 279.463912\n", - "4 866a4a05fffffff POINT (35.69251 -1.6086) 235.258474\n", + "0 866a4a017ffffff POINT (36.07869 5.11252) 676.912804\n", + "1 866a4a01fffffff POINT (36.13482 5.09047) 347.182722\n", + "2 866a4a04fffffff POINT (36.33929 5.11542) 285.943490\n", + "3 866a4a057ffffff POINT (36.23708 5.10296) 279.463912\n", + "4 866a4a05fffffff POINT (36.29318 5.0809) 235.258474\n", "... ... ... ...\n", - "25801 86969ed97ffffff POINT (39.98378 -3.73064) 196.448391\n", - "25802 86969ed9fffffff POINT (34.59534 2.69625) 296.740893\n", - "25803 86969eda7ffffff POINT (41.47496 -0.99731) 154.818453\n", - "25804 86969edafffffff POINT (37.33826 3.60893) 157.875350\n", - "25805 86969edb7ffffff POINT (40.73842 -4.35757) 236.127331\n", + "25801 86969ed97ffffff POINT (34.80875 -3.47225) 196.448391\n", + "25802 86969ed9fffffff POINT (34.75041 -3.44944) 296.740893\n", + "25803 86969eda7ffffff POINT (34.77046 -3.5715) 154.818453\n", + "25804 86969edafffffff POINT (34.7121 -3.54868) 157.875350\n", + "25805 86969edb7ffffff POINT (34.81878 -3.53328) 236.127331\n", "\n", "[25806 rows x 3 columns]" ] }, - "execution_count": 6, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df['geometry'] = df['geometry'].apply(lambda geom: shape(geom))\n", + "from shapely import from_geojson\n", + "\n", + "df['geometry'] = df['geometry'].apply(lambda geom: from_geojson(geom))\n", "gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326')\n", "gdf" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a916785affa547218fd0bb1c80afe06b", + "model_id": "267540ef06104b718e9f18ffd4225440", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "Map(layers=[ScatterplotLayer(get_fill_color=\n", + "Map(layers=[ScatterplotLayer(get_fill_color=\n", "[\n", " [\n", " 2…" ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -309,7 +445,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/notebooks/user-docs/space2stats_py_package_demo.ipynb b/notebooks/user-docs/space2stats_py_package_demo.ipynb index a0bdff5a..4e9dbb66 100644 --- a/notebooks/user-docs/space2stats_py_package_demo.ipynb +++ b/notebooks/user-docs/space2stats_py_package_demo.ipynb @@ -2,17 +2,92 @@ "cells": [ { "cell_type": "code", - "execution_count": 39, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", + "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", + "\u001b[0mFound existing installation: space2stats 0.1.0\n", + "Uninstalling space2stats-0.1.0:\n", + " Successfully uninstalled space2stats-0.1.0\n", + "Note: you may need to restart the kernel to use updated packages.\n", + "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", + "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", + "\u001b[0mCollecting git+https://github.com/worldbank/DECAT_Space2Stats.git@feature/h3ronpy#subdirectory=space2stats_api/src\n", + " Cloning https://github.com/worldbank/DECAT_Space2Stats.git (to revision feature/h3ronpy) to /private/var/folders/md/g6df9cs96bv_bv1kslvxkb4c0000gn/T/pip-req-build-o_n4xv_w\n", + " Running command git clone --filter=blob:none --quiet https://github.com/worldbank/DECAT_Space2Stats.git /private/var/folders/md/g6df9cs96bv_bv1kslvxkb4c0000gn/T/pip-req-build-o_n4xv_w\n", + " Running command git checkout -b feature/h3ronpy --track origin/feature/h3ronpy\n", + " Switched to a new branch 'feature/h3ronpy'\n", + " branch 'feature/h3ronpy' set up to track 'origin/feature/h3ronpy'.\n", + " Resolved https://github.com/worldbank/DECAT_Space2Stats.git to commit 5299454c7954a0ee167616abc2a2157cd495b0c1\n", + " Installing build dependencies ... \u001b[?25ldone\n", + "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n", + "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25hRequirement already satisfied: asgi-s3-response-middleware<0.0.5,>=0.0.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.0.4)\n", + "Requirement already satisfied: boto3<2.0.0,>=1.35.11 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (1.35.34)\n", + "Requirement already satisfied: fastapi>=0.112.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.115.0)\n", + "Requirement already satisfied: geojson-pydantic in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (1.1.1)\n", + "Requirement already satisfied: h3 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (3.7.7)\n", + "Requirement already satisfied: h3ronpy<0.22.0,>=0.21.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.21.1)\n", + "Requirement already satisfied: httpx in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.27.2)\n", + "Requirement already satisfied: mangum in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.19.0)\n", + "Requirement already satisfied: numpy<2.0.0,>=1.24.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (1.26.4)\n", + "Requirement already satisfied: orjson in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (3.10.7)\n", + "Requirement already satisfied: pandas in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (2.2.3)\n", + "Requirement already satisfied: psycopg[binary,pool] in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (3.2.3)\n", + "Requirement already satisfied: pydantic-settings>=2.0.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (2.5.2)\n", + "Requirement already satisfied: shapely in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (2.0.6)\n", + "Requirement already satisfied: starlette-cramjam<0.4,>=0.3 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.3.3)\n", + "Requirement already satisfied: typing_extensions in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (4.12.2)\n", + "Requirement already satisfied: starlette>=0.38.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from asgi-s3-response-middleware<0.0.5,>=0.0.4->space2stats==0.1.0) (0.38.6)\n", + "Requirement already satisfied: botocore<1.36.0,>=1.35.34 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from boto3<2.0.0,>=1.35.11->space2stats==0.1.0) (1.35.34)\n", + "Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from boto3<2.0.0,>=1.35.11->space2stats==0.1.0) (1.0.1)\n", + "Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from boto3<2.0.0,>=1.35.11->space2stats==0.1.0) (0.10.2)\n", + "Requirement already satisfied: pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from fastapi>=0.112.0->space2stats==0.1.0) (2.9.2)\n", + "Requirement already satisfied: pyarrow>=10.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from h3ronpy<0.22.0,>=0.21.0->space2stats==0.1.0) (17.0.0)\n", + "Requirement already satisfied: anyio in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (4.6.0)\n", + "Requirement already satisfied: certifi in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (1.0.6)\n", + "Requirement already satisfied: idna in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (3.10)\n", + "Requirement already satisfied: sniffio in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (1.3.1)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpcore==1.*->httpx->space2stats==0.1.0) (0.14.0)\n", + "Requirement already satisfied: python-dotenv>=0.21.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pydantic-settings>=2.0.0->space2stats==0.1.0) (1.0.1)\n", + "Requirement already satisfied: cramjam<2.9,>=2.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from starlette-cramjam<0.4,>=0.3->space2stats==0.1.0) (2.8.4)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pandas->space2stats==0.1.0) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pandas->space2stats==0.1.0) (2024.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pandas->space2stats==0.1.0) (2024.2)\n", + "Requirement already satisfied: psycopg-binary==3.2.3 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from psycopg[binary,pool]->space2stats==0.1.0) (3.2.3)\n", + "Requirement already satisfied: psycopg-pool in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from psycopg[binary,pool]->space2stats==0.1.0) (3.2.3)\n", + "Requirement already satisfied: urllib3!=2.2.0,<3,>=1.25.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from botocore<1.36.0,>=1.35.34->boto3<2.0.0,>=1.35.11->space2stats==0.1.0) (2.2.3)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi>=0.112.0->space2stats==0.1.0) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi>=0.112.0->space2stats==0.1.0) (2.23.4)\n", + "Requirement already satisfied: six>=1.5 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from python-dateutil>=2.8.2->pandas->space2stats==0.1.0) (1.16.0)\n", + "Building wheels for collected packages: space2stats\n", + " Building wheel for space2stats (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25h Created wheel for space2stats: filename=space2stats-0.1.0-py3-none-any.whl size=18428 sha256=ea6987e1b55fe30bed14d734f35195abc39985520ecc888928d1c0df698bc0dc\n", + " Stored in directory: /private/var/folders/md/g6df9cs96bv_bv1kslvxkb4c0000gn/T/pip-ephem-wheel-cache-x7ltnsoy/wheels/99/9f/50/575302cb376b7ead3e96482cd92b0bf444bc829e19cc250c03\n", + "Successfully built space2stats\n", + "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", + "\u001b[0mInstalling collected packages: space2stats\n", + "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", + "\u001b[0mSuccessfully installed space2stats-0.1.0\n", + "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", + "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", + "\u001b[0mNote: you may need to restart the kernel to use updated packages.\n" + ] + } + ], "source": [ - "%%capture\n", - "%pip install \"git+https://github.com/worldbank/DECAT_Space2Stats.git#subdirectory=space2stats_api/src\"" + "%pip install \"git+https://github.com/worldbank/DECAT_Space2Stats.git@feature/h3ronpy#subdirectory=space2stats_api/src\"" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -26,7 +101,7 @@ "from lonboard import Map, ScatterplotLayer\n", "from geojson_pydantic import Feature, Polygon\n", "\n", - "from space2stats import StatsTable" + "from space2stats import StatsTable\n" ] }, { @@ -48,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -57,7 +132,7 @@ "True" ] }, - "execution_count": 45, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -68,7 +143,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -116,7 +191,7 @@ " 'sum_pop_f_2020']" ] }, - "execution_count": 42, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -130,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -163,7 +238,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -213,8 +288,32 @@ " \n", " \n", " 0\n", + " 866a4a00fffffff\n", + " {\"type\":\"Point\",\"coordinates\":[36.180976490229...\n", + " 476.538185\n", + " 6157253\n", + " 6.070529\n", + " 32.703007\n", + " 27.829216\n", + " 22.437599\n", + " 23.757664\n", + " 20.835018\n", + " ...\n", + " 4.712565\n", + " 5.091442\n", + " 31.273582\n", + " 2.852396\n", + " 2.619311\n", + " 1.270194\n", + " 0.888411\n", + " 0.582864\n", + " 234.480238\n", + " 242.057947\n", + " \n", + " \n", + " 1\n", " 866a4a017ffffff\n", - " {'type': 'Point', 'coordinates': (38.494790325...\n", + " {\"type\":\"Point\",\"coordinates\":[36.078694056627...\n", " 676.912804\n", " 6157254\n", " 8.924362\n", @@ -236,9 +335,9 @@ " 340.830624\n", " \n", " \n", - " 1\n", + " 2\n", " 866a4a01fffffff\n", - " {'type': 'Point', 'coordinates': (40.094390450...\n", + " {\"type\":\"Point\",\"coordinates\":[36.134817927246...\n", " 347.182722\n", " 6157255\n", " 4.515680\n", @@ -260,9 +359,33 @@ " 175.423497\n", " \n", " \n", - " 2\n", + " 3\n", + " 866a4a047ffffff\n", + " {\"type\":\"Point\",\"coordinates\":[36.283201202805...\n", + " 380.988678\n", + " 6157259\n", + " 4.853342\n", + " 26.145809\n", + " 22.249249\n", + " 17.938692\n", + " 18.994072\n", + " 16.657440\n", + " ...\n", + " 3.767660\n", + " 4.070570\n", + " 25.002991\n", + " 2.280469\n", + " 2.094120\n", + " 1.015510\n", + " 0.710278\n", + " 0.465995\n", + " 187.465175\n", + " 193.523504\n", + " \n", + " \n", + " 4\n", " 866a4a04fffffff\n", - " {'type': 'Point', 'coordinates': (34.462341228...\n", + " {\"type\":\"Point\",\"coordinates\":[36.339286712001...\n", " 285.943490\n", " 6157260\n", " 3.642580\n", @@ -284,120 +407,265 @@ " 145.245222\n", " \n", " \n", - " 3\n", - " 866a4a057ffffff\n", - " {'type': 'Point', 'coordinates': (41.436122880...\n", - " 279.463912\n", - " 6157261\n", - " 3.560037\n", - " 19.178549\n", - " 16.320332\n", - " 13.158442\n", - " 13.932587\n", - " 12.218613\n", - " ...\n", - " 2.763665\n", - " 2.985856\n", - " 18.340267\n", - " 1.672776\n", - " 1.536084\n", - " 0.744900\n", - " 0.521005\n", - " 0.341818\n", - " 137.509998\n", - " 141.953914\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 4\n", - " 866a4a05fffffff\n", - " {'type': 'Point', 'coordinates': (41.251660148...\n", - " 235.258474\n", - " 6157262\n", - " 2.996913\n", - " 16.144897\n", - " 13.738791\n", - " 11.077046\n", - " 11.728739\n", - " 10.285879\n", - " ...\n", - " 2.326510\n", - " 2.513555\n", - " 15.439214\n", - " 1.408177\n", - " 1.293108\n", - " 0.627072\n", - " 0.438593\n", - " 0.287750\n", - " 115.758746\n", - " 119.499727\n", + " 26184\n", + " 86969ed97ffffff\n", + " {\"type\":\"Point\",\"coordinates\":[34.808746693532...\n", + " 196.448391\n", + " 8710025\n", + " 4.108127\n", + " 14.176966\n", + " 11.835453\n", + " 15.015658\n", + " 8.398741\n", + " 6.313566\n", + " ...\n", + " 1.962373\n", + " 1.294143\n", + " 16.514441\n", + " 1.084920\n", + " 0.696495\n", + " 0.607390\n", + " 0.353109\n", + " 0.295762\n", + " 96.252689\n", + " 100.195702\n", + " \n", + " \n", + " 26185\n", + " 86969ed9fffffff\n", + " {\"type\":\"Point\",\"coordinates\":[34.750412026186...\n", + " 296.740893\n", + " 8710026\n", + " 6.205442\n", + " 21.414711\n", + " 17.877789\n", + " 22.681580\n", + " 12.686538\n", + " 9.536821\n", + " ...\n", + " 2.964221\n", + " 1.954840\n", + " 24.945534\n", + " 1.638802\n", + " 1.052075\n", + " 0.917481\n", + " 0.533381\n", + " 0.446756\n", + " 145.392433\n", + " 151.348460\n", + " \n", + " \n", + " 26186\n", + " 86969eda7ffffff\n", + " {\"type\":\"Point\",\"coordinates\":[34.770464787099...\n", + " 154.818453\n", + " 8710027\n", + " 3.237562\n", + " 11.172684\n", + " 9.327369\n", + " 11.833648\n", + " 6.618940\n", + " 4.975640\n", + " ...\n", + " 1.546521\n", + " 1.019898\n", + " 13.014819\n", + " 0.855011\n", + " 0.548899\n", + " 0.478677\n", + " 0.278281\n", + " 0.233086\n", + " 75.855508\n", + " 78.962945\n", + " \n", + " \n", + " 26187\n", + " 86969edafffffff\n", + " {\"type\":\"Point\",\"coordinates\":[34.712102323801...\n", + " 157.875350\n", + " 8710028\n", + " 3.301488\n", + " 11.393290\n", + " 9.511538\n", + " 12.067303\n", + " 6.749631\n", + " 5.073884\n", + " ...\n", + " 1.577057\n", + " 1.040035\n", + " 13.271797\n", + " 0.871894\n", + " 0.559737\n", + " 0.488128\n", + " 0.283775\n", + " 0.237688\n", + " 77.353279\n", + " 80.522071\n", + " \n", + " \n", + " 26188\n", + " 86969edb7ffffff\n", + " {\"type\":\"Point\",\"coordinates\":[34.818784182799...\n", + " 236.127331\n", + " 8710029\n", + " 4.937892\n", + " 17.040451\n", + " 14.225995\n", + " 18.048544\n", + " 10.095131\n", + " 7.588790\n", + " ...\n", + " 2.358737\n", + " 1.555536\n", + " 19.850052\n", + " 1.304053\n", + " 0.837174\n", + " 0.730072\n", + " 0.424430\n", + " 0.355500\n", + " 115.693951\n", + " 120.433380\n", " \n", " \n", "\n", - "

5 rows × 42 columns

\n", + "

26189 rows × 42 columns

\n", "" ], "text/plain": [ - " hex_id geometry \\\n", - "0 866a4a017ffffff {'type': 'Point', 'coordinates': (38.494790325... \n", - "1 866a4a01fffffff {'type': 'Point', 'coordinates': (40.094390450... \n", - "2 866a4a04fffffff {'type': 'Point', 'coordinates': (34.462341228... \n", - "3 866a4a057ffffff {'type': 'Point', 'coordinates': (41.436122880... \n", - "4 866a4a05fffffff {'type': 'Point', 'coordinates': (41.251660148... \n", + " hex_id geometry \\\n", + "0 866a4a00fffffff {\"type\":\"Point\",\"coordinates\":[36.180976490229... \n", + "1 866a4a017ffffff {\"type\":\"Point\",\"coordinates\":[36.078694056627... \n", + "2 866a4a01fffffff {\"type\":\"Point\",\"coordinates\":[36.134817927246... \n", + "3 866a4a047ffffff {\"type\":\"Point\",\"coordinates\":[36.283201202805... \n", + "4 866a4a04fffffff {\"type\":\"Point\",\"coordinates\":[36.339286712001... \n", + "... ... ... \n", + "26184 86969ed97ffffff {\"type\":\"Point\",\"coordinates\":[34.808746693532... \n", + "26185 86969ed9fffffff {\"type\":\"Point\",\"coordinates\":[34.750412026186... \n", + "26186 86969eda7ffffff {\"type\":\"Point\",\"coordinates\":[34.770464787099... \n", + "26187 86969edafffffff {\"type\":\"Point\",\"coordinates\":[34.712102323801... \n", + "26188 86969edb7ffffff {\"type\":\"Point\",\"coordinates\":[34.818784182799... \n", + "\n", + " sum_pop_2020 ogc_fid sum_pop_f_0_2020 sum_pop_f_10_2020 \\\n", + "0 476.538185 6157253 6.070529 32.703007 \n", + "1 676.912804 6157254 8.924362 49.524105 \n", + "2 347.182722 6157255 4.515680 24.773327 \n", + "3 380.988678 6157259 4.853342 26.145809 \n", + "4 285.943490 6157260 3.642580 19.623219 \n", + "... ... ... ... ... \n", + "26184 196.448391 8710025 4.108127 14.176966 \n", + "26185 296.740893 8710026 6.205442 21.414711 \n", + "26186 154.818453 8710027 3.237562 11.172684 \n", + "26187 157.875350 8710028 3.301488 11.393290 \n", + "26188 236.127331 8710029 4.937892 17.040451 \n", "\n", - " sum_pop_2020 ogc_fid sum_pop_f_0_2020 sum_pop_f_10_2020 \\\n", - "0 676.912804 6157254 8.924362 49.524105 \n", - "1 347.182722 6157255 4.515680 24.773327 \n", - "2 285.943490 6157260 3.642580 19.623219 \n", - "3 279.463912 6157261 3.560037 19.178549 \n", - "4 235.258474 6157262 2.996913 16.144897 \n", + " sum_pop_f_15_2020 sum_pop_f_1_2020 sum_pop_f_20_2020 \\\n", + "0 27.829216 22.437599 23.757664 \n", + "1 36.898296 32.985901 28.963400 \n", + "2 19.462585 16.690670 15.832314 \n", + "3 22.249249 17.938692 18.994072 \n", + "4 16.698730 13.463530 14.255625 \n", + "... ... ... ... \n", + "26184 11.835453 15.015658 8.398741 \n", + "26185 17.877789 22.681580 12.686538 \n", + "26186 9.327369 11.833648 6.618940 \n", + "26187 9.511538 12.067303 6.749631 \n", + "26188 14.225995 18.048544 10.095131 \n", "\n", - " sum_pop_f_15_2020 sum_pop_f_1_2020 sum_pop_f_20_2020 sum_pop_f_25_2020 \\\n", - "0 36.898296 32.985901 28.963400 33.645473 \n", - "1 19.462585 16.690670 15.832314 16.429201 \n", - "2 16.698730 13.463530 14.255625 12.501910 \n", - "3 16.320332 13.158442 13.932587 12.218613 \n", - "4 13.738791 11.077046 11.728739 10.285879 \n", + " sum_pop_f_25_2020 ... sum_pop_m_50_2020 sum_pop_m_55_2020 \\\n", + "0 20.835018 ... 4.712565 5.091442 \n", + "1 33.645473 ... 6.732327 4.131749 \n", + "2 16.429201 ... 3.445144 2.752507 \n", + "3 16.657440 ... 3.767660 4.070570 \n", + "4 12.501910 ... 2.827743 3.055085 \n", + "... ... ... ... ... \n", + "26184 6.313566 ... 1.962373 1.294143 \n", + "26185 9.536821 ... 2.964221 1.954840 \n", + "26186 4.975640 ... 1.546521 1.019898 \n", + "26187 5.073884 ... 1.577057 1.040035 \n", + "26188 7.588790 ... 2.358737 1.555536 \n", "\n", - " ... sum_pop_m_50_2020 sum_pop_m_55_2020 sum_pop_m_5_2020 \\\n", - "0 ... 6.732327 4.131749 53.380043 \n", - "1 ... 3.445144 2.752507 25.548544 \n", - "2 ... 2.827743 3.055085 18.765499 \n", - "3 ... 2.763665 2.985856 18.340267 \n", - "4 ... 2.326510 2.513555 15.439214 \n", + " sum_pop_m_5_2020 sum_pop_m_60_2020 sum_pop_m_65_2020 \\\n", + "0 31.273582 2.852396 2.619311 \n", + "1 53.380043 3.240541 2.475817 \n", + "2 25.548544 1.827761 1.524122 \n", + "3 25.002991 2.280469 2.094120 \n", + "4 18.765499 1.711561 1.571700 \n", + "... ... ... ... \n", + "26184 16.514441 1.084920 0.696495 \n", + "26185 24.945534 1.638802 1.052075 \n", + "26186 13.014819 0.855011 0.548899 \n", + "26187 13.271797 0.871894 0.559737 \n", + "26188 19.850052 1.304053 0.837174 \n", "\n", - " sum_pop_m_60_2020 sum_pop_m_65_2020 sum_pop_m_70_2020 sum_pop_m_75_2020 \\\n", - "0 3.240541 2.475817 0.702667 0.399492 \n", - "1 1.827761 1.524122 0.585427 0.381080 \n", - "2 1.711561 1.571700 0.762171 0.533085 \n", - "3 1.672776 1.536084 0.744900 0.521005 \n", - "4 1.408177 1.293108 0.627072 0.438593 \n", + " sum_pop_m_70_2020 sum_pop_m_75_2020 sum_pop_m_80_2020 \\\n", + "0 1.270194 0.888411 0.582864 \n", + "1 0.702667 0.399492 0.129285 \n", + "2 0.585427 0.381080 0.209030 \n", + "3 1.015510 0.710278 0.465995 \n", + "4 0.762171 0.533085 0.349744 \n", + "... ... ... ... \n", + "26184 0.607390 0.353109 0.295762 \n", + "26185 0.917481 0.533381 0.446756 \n", + "26186 0.478677 0.278281 0.233086 \n", + "26187 0.488128 0.283775 0.237688 \n", + "26188 0.730072 0.424430 0.355500 \n", "\n", - " sum_pop_m_80_2020 sum_pop_m_2020 sum_pop_f_2020 \n", - "0 0.129285 336.082180 340.830624 \n", - "1 0.209030 171.759225 175.423497 \n", - "2 0.349744 140.698267 145.245222 \n", - "3 0.341818 137.509998 141.953914 \n", - "4 0.287750 115.758746 119.499727 \n", + " sum_pop_m_2020 sum_pop_f_2020 \n", + "0 234.480238 242.057947 \n", + "1 336.082180 340.830624 \n", + "2 171.759225 175.423497 \n", + "3 187.465175 193.523504 \n", + "4 140.698267 145.245222 \n", + "... ... ... \n", + "26184 96.252689 100.195702 \n", + "26185 145.392433 151.348460 \n", + "26186 75.855508 78.962945 \n", + "26187 77.353279 80.522071 \n", + "26188 115.693951 120.433380 \n", "\n", - "[5 rows x 42 columns]" + "[26189 rows x 42 columns]" ] }, - "execution_count": 44, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with StatsTable.connect() as stats_table:\n", - " data = stats_table.summaries(aoi=feat, spatial_join_method=\"centroid\", fields=fields, geometry=\"point\")\n", + " data = stats_table.summaries(aoi=feat, spatial_join_method=\"touches\", fields=fields, geometry=\"point\")\n", " df = pd.DataFrame(data)\n", "\n", - "df.head()" + "df" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -447,8 +715,32 @@ " \n", " \n", " 0\n", + " 866a4a00fffffff\n", + " POINT (36.18098 5.12501)\n", + " 476.538185\n", + " 6157253\n", + " 6.070529\n", + " 32.703007\n", + " 27.829216\n", + " 22.437599\n", + " 23.757664\n", + " 20.835018\n", + " ...\n", + " 4.712565\n", + " 5.091442\n", + " 31.273582\n", + " 2.852396\n", + " 2.619311\n", + " 1.270194\n", + " 0.888411\n", + " 0.582864\n", + " 234.480238\n", + " 242.057947\n", + " \n", + " \n", + " 1\n", " 866a4a017ffffff\n", - " POINT (38.49479 -0.20685)\n", + " POINT (36.07869 5.11252)\n", " 676.912804\n", " 6157254\n", " 8.924362\n", @@ -470,9 +762,9 @@ " 340.830624\n", " \n", " \n", - " 1\n", + " 2\n", " 866a4a01fffffff\n", - " POINT (40.09439 0.52663)\n", + " POINT (36.13482 5.09047)\n", " 347.182722\n", " 6157255\n", " 4.515680\n", @@ -494,9 +786,33 @@ " 175.423497\n", " \n", " \n", - " 2\n", + " 3\n", + " 866a4a047ffffff\n", + " POINT (36.2832 5.13748)\n", + " 380.988678\n", + " 6157259\n", + " 4.853342\n", + " 26.145809\n", + " 22.249249\n", + " 17.938692\n", + " 18.994072\n", + " 16.657440\n", + " ...\n", + " 3.767660\n", + " 4.070570\n", + " 25.002991\n", + " 2.280469\n", + " 2.094120\n", + " 1.015510\n", + " 0.710278\n", + " 0.465995\n", + " 187.465175\n", + " 193.523504\n", + " \n", + " \n", + " 4\n", " 866a4a04fffffff\n", - " POINT (34.46234 5.05804)\n", + " POINT (36.33929 5.11542)\n", " 285.943490\n", " 6157260\n", " 3.642580\n", @@ -518,54 +834,6 @@ " 145.245222\n", " \n", " \n", - " 3\n", - " 866a4a057ffffff\n", - " POINT (41.43612 -4.68139)\n", - " 279.463912\n", - " 6157261\n", - " 3.560037\n", - " 19.178549\n", - " 16.320332\n", - " 13.158442\n", - " 13.932587\n", - " 12.218613\n", - " ...\n", - " 2.763665\n", - " 2.985856\n", - " 18.340267\n", - " 1.672776\n", - " 1.536084\n", - " 0.744900\n", - " 0.521005\n", - " 0.341818\n", - " 137.509998\n", - " 141.953914\n", - " \n", - " \n", - " 4\n", - " 866a4a05fffffff\n", - " POINT (41.25166 -0.09407)\n", - " 235.258474\n", - " 6157262\n", - " 2.996913\n", - " 16.144897\n", - " 13.738791\n", - " 11.077046\n", - " 11.728739\n", - " 10.285879\n", - " ...\n", - " 2.326510\n", - " 2.513555\n", - " 15.439214\n", - " 1.408177\n", - " 1.293108\n", - " 0.627072\n", - " 0.438593\n", - " 0.287750\n", - " 115.758746\n", - " 119.499727\n", - " \n", - " \n", " ...\n", " ...\n", " ...\n", @@ -590,9 +858,9 @@ " ...\n", " \n", " \n", - " 25801\n", + " 26184\n", " 86969ed97ffffff\n", - " POINT (36.22291 0.63262)\n", + " POINT (34.80875 -3.47225)\n", " 196.448391\n", " 8710025\n", " 4.108127\n", @@ -614,9 +882,9 @@ " 100.195702\n", " \n", " \n", - " 25802\n", + " 26185\n", " 86969ed9fffffff\n", - " POINT (36.93237 -1.31051)\n", + " POINT (34.75041 -3.44944)\n", " 296.740893\n", " 8710026\n", " 6.205442\n", @@ -638,9 +906,9 @@ " 151.348460\n", " \n", " \n", - " 25803\n", + " 26186\n", " 86969eda7ffffff\n", - " POINT (37.92797 0.89329)\n", + " POINT (34.77046 -3.5715)\n", " 154.818453\n", " 8710027\n", " 3.237562\n", @@ -662,9 +930,9 @@ " 78.962945\n", " \n", " \n", - " 25804\n", + " 26187\n", " 86969edafffffff\n", - " POINT (39.02185 -1.07532)\n", + " POINT (34.7121 -3.54868)\n", " 157.875350\n", " 8710028\n", " 3.301488\n", @@ -686,9 +954,9 @@ " 80.522071\n", " \n", " \n", - " 25805\n", + " 26188\n", " 86969edb7ffffff\n", - " POINT (36.5281 3.44777)\n", + " POINT (34.81878 -3.53328)\n", " 236.127331\n", " 8710029\n", " 4.937892\n", @@ -711,122 +979,124 @@ " \n", " \n", "\n", - "

25806 rows × 42 columns

\n", + "

26189 rows × 42 columns

\n", "" ], "text/plain": [ " hex_id geometry sum_pop_2020 ogc_fid \\\n", - "0 866a4a017ffffff POINT (38.49479 -0.20685) 676.912804 6157254 \n", - "1 866a4a01fffffff POINT (40.09439 0.52663) 347.182722 6157255 \n", - "2 866a4a04fffffff POINT (34.46234 5.05804) 285.943490 6157260 \n", - "3 866a4a057ffffff POINT (41.43612 -4.68139) 279.463912 6157261 \n", - "4 866a4a05fffffff POINT (41.25166 -0.09407) 235.258474 6157262 \n", + "0 866a4a00fffffff POINT (36.18098 5.12501) 476.538185 6157253 \n", + "1 866a4a017ffffff POINT (36.07869 5.11252) 676.912804 6157254 \n", + "2 866a4a01fffffff POINT (36.13482 5.09047) 347.182722 6157255 \n", + "3 866a4a047ffffff POINT (36.2832 5.13748) 380.988678 6157259 \n", + "4 866a4a04fffffff POINT (36.33929 5.11542) 285.943490 6157260 \n", "... ... ... ... ... \n", - "25801 86969ed97ffffff POINT (36.22291 0.63262) 196.448391 8710025 \n", - "25802 86969ed9fffffff POINT (36.93237 -1.31051) 296.740893 8710026 \n", - "25803 86969eda7ffffff POINT (37.92797 0.89329) 154.818453 8710027 \n", - "25804 86969edafffffff POINT (39.02185 -1.07532) 157.875350 8710028 \n", - "25805 86969edb7ffffff POINT (36.5281 3.44777) 236.127331 8710029 \n", + "26184 86969ed97ffffff POINT (34.80875 -3.47225) 196.448391 8710025 \n", + "26185 86969ed9fffffff POINT (34.75041 -3.44944) 296.740893 8710026 \n", + "26186 86969eda7ffffff POINT (34.77046 -3.5715) 154.818453 8710027 \n", + "26187 86969edafffffff POINT (34.7121 -3.54868) 157.875350 8710028 \n", + "26188 86969edb7ffffff POINT (34.81878 -3.53328) 236.127331 8710029 \n", "\n", " sum_pop_f_0_2020 sum_pop_f_10_2020 sum_pop_f_15_2020 \\\n", - "0 8.924362 49.524105 36.898296 \n", - "1 4.515680 24.773327 19.462585 \n", - "2 3.642580 19.623219 16.698730 \n", - "3 3.560037 19.178549 16.320332 \n", - "4 2.996913 16.144897 13.738791 \n", + "0 6.070529 32.703007 27.829216 \n", + "1 8.924362 49.524105 36.898296 \n", + "2 4.515680 24.773327 19.462585 \n", + "3 4.853342 26.145809 22.249249 \n", + "4 3.642580 19.623219 16.698730 \n", "... ... ... ... \n", - "25801 4.108127 14.176966 11.835453 \n", - "25802 6.205442 21.414711 17.877789 \n", - "25803 3.237562 11.172684 9.327369 \n", - "25804 3.301488 11.393290 9.511538 \n", - "25805 4.937892 17.040451 14.225995 \n", + "26184 4.108127 14.176966 11.835453 \n", + "26185 6.205442 21.414711 17.877789 \n", + "26186 3.237562 11.172684 9.327369 \n", + "26187 3.301488 11.393290 9.511538 \n", + "26188 4.937892 17.040451 14.225995 \n", "\n", " sum_pop_f_1_2020 sum_pop_f_20_2020 sum_pop_f_25_2020 ... \\\n", - "0 32.985901 28.963400 33.645473 ... \n", - "1 16.690670 15.832314 16.429201 ... \n", - "2 13.463530 14.255625 12.501910 ... \n", - "3 13.158442 13.932587 12.218613 ... \n", - "4 11.077046 11.728739 10.285879 ... \n", + "0 22.437599 23.757664 20.835018 ... \n", + "1 32.985901 28.963400 33.645473 ... \n", + "2 16.690670 15.832314 16.429201 ... \n", + "3 17.938692 18.994072 16.657440 ... \n", + "4 13.463530 14.255625 12.501910 ... \n", "... ... ... ... ... \n", - "25801 15.015658 8.398741 6.313566 ... \n", - "25802 22.681580 12.686538 9.536821 ... \n", - "25803 11.833648 6.618940 4.975640 ... \n", - "25804 12.067303 6.749631 5.073884 ... \n", - "25805 18.048544 10.095131 7.588790 ... \n", + "26184 15.015658 8.398741 6.313566 ... \n", + "26185 22.681580 12.686538 9.536821 ... \n", + "26186 11.833648 6.618940 4.975640 ... \n", + "26187 12.067303 6.749631 5.073884 ... \n", + "26188 18.048544 10.095131 7.588790 ... \n", "\n", " sum_pop_m_50_2020 sum_pop_m_55_2020 sum_pop_m_5_2020 \\\n", - "0 6.732327 4.131749 53.380043 \n", - "1 3.445144 2.752507 25.548544 \n", - "2 2.827743 3.055085 18.765499 \n", - "3 2.763665 2.985856 18.340267 \n", - "4 2.326510 2.513555 15.439214 \n", + "0 4.712565 5.091442 31.273582 \n", + "1 6.732327 4.131749 53.380043 \n", + "2 3.445144 2.752507 25.548544 \n", + "3 3.767660 4.070570 25.002991 \n", + "4 2.827743 3.055085 18.765499 \n", "... ... ... ... \n", - "25801 1.962373 1.294143 16.514441 \n", - "25802 2.964221 1.954840 24.945534 \n", - "25803 1.546521 1.019898 13.014819 \n", - "25804 1.577057 1.040035 13.271797 \n", - "25805 2.358737 1.555536 19.850052 \n", + "26184 1.962373 1.294143 16.514441 \n", + "26185 2.964221 1.954840 24.945534 \n", + "26186 1.546521 1.019898 13.014819 \n", + "26187 1.577057 1.040035 13.271797 \n", + "26188 2.358737 1.555536 19.850052 \n", "\n", " sum_pop_m_60_2020 sum_pop_m_65_2020 sum_pop_m_70_2020 \\\n", - "0 3.240541 2.475817 0.702667 \n", - "1 1.827761 1.524122 0.585427 \n", - "2 1.711561 1.571700 0.762171 \n", - "3 1.672776 1.536084 0.744900 \n", - "4 1.408177 1.293108 0.627072 \n", + "0 2.852396 2.619311 1.270194 \n", + "1 3.240541 2.475817 0.702667 \n", + "2 1.827761 1.524122 0.585427 \n", + "3 2.280469 2.094120 1.015510 \n", + "4 1.711561 1.571700 0.762171 \n", "... ... ... ... \n", - "25801 1.084920 0.696495 0.607390 \n", - "25802 1.638802 1.052075 0.917481 \n", - "25803 0.855011 0.548899 0.478677 \n", - "25804 0.871894 0.559737 0.488128 \n", - "25805 1.304053 0.837174 0.730072 \n", + "26184 1.084920 0.696495 0.607390 \n", + "26185 1.638802 1.052075 0.917481 \n", + "26186 0.855011 0.548899 0.478677 \n", + "26187 0.871894 0.559737 0.488128 \n", + "26188 1.304053 0.837174 0.730072 \n", "\n", " sum_pop_m_75_2020 sum_pop_m_80_2020 sum_pop_m_2020 sum_pop_f_2020 \n", - "0 0.399492 0.129285 336.082180 340.830624 \n", - "1 0.381080 0.209030 171.759225 175.423497 \n", - "2 0.533085 0.349744 140.698267 145.245222 \n", - "3 0.521005 0.341818 137.509998 141.953914 \n", - "4 0.438593 0.287750 115.758746 119.499727 \n", + "0 0.888411 0.582864 234.480238 242.057947 \n", + "1 0.399492 0.129285 336.082180 340.830624 \n", + "2 0.381080 0.209030 171.759225 175.423497 \n", + "3 0.710278 0.465995 187.465175 193.523504 \n", + "4 0.533085 0.349744 140.698267 145.245222 \n", "... ... ... ... ... \n", - "25801 0.353109 0.295762 96.252689 100.195702 \n", - "25802 0.533381 0.446756 145.392433 151.348460 \n", - "25803 0.278281 0.233086 75.855508 78.962945 \n", - "25804 0.283775 0.237688 77.353279 80.522071 \n", - "25805 0.424430 0.355500 115.693951 120.433380 \n", + "26184 0.353109 0.295762 96.252689 100.195702 \n", + "26185 0.533381 0.446756 145.392433 151.348460 \n", + "26186 0.278281 0.233086 75.855508 78.962945 \n", + "26187 0.283775 0.237688 77.353279 80.522071 \n", + "26188 0.424430 0.355500 115.693951 120.433380 \n", "\n", - "[25806 rows x 42 columns]" + "[26189 rows x 42 columns]" ] }, - "execution_count": 26, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df['geometry'] = df['geometry'].apply(lambda geom: shape(geom))\n", + "from shapely import from_geojson\n", + "\n", + "df['geometry'] = df['geometry'].apply(lambda geom: from_geojson(geom))\n", "gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326')\n", "gdf" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e472e297d8dc4c5582193eab628f4d44", + "model_id": "b73e90e5014643d2a3b7f9ef33032f8f", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "Map(layers=[ScatterplotLayer(get_fill_color=\n", + "Map(layers=[ScatterplotLayer(get_fill_color=\n", "[\n", " [\n", " 2…" ] }, - "execution_count": 38, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } From 9e8c7d7cae4ed5389246004f40073a4b54f66de0 Mon Sep 17 00:00:00 2001 From: Zac Deziel Date: Fri, 11 Oct 2024 07:56:31 -0700 Subject: [PATCH 09/18] Update user doc notebooks (#76) * create stac catalog from sample kenya data * testing metadata * update metadata files * typo * Update catalog with link to self and title based on stac-check best practice * Move METADATA to space2stats_ingest * fix sources link * rewrite catalog with self link and item titles * Rename duplicated variable gdf to adm_gdf * Corrected the color breaks * Adapt based on h3ronpy and adapt colormap * Change formatting, ensure clear runs, and remove unused imports * Add nbqa pre-commit for notebooks --------- Co-authored-by: Andres Chamorro --- .pre-commit-config.yaml | 22 +- .../space2stats_api_adm_example.ipynb | 570 +++ .../user-docs/space2stats_api_demo.ipynb | 269 +- .../space2stats_py_package_demo.ipynb | 276 +- .../Space2Stats Metadata Content.xlsx | Bin 0 -> 31482 bytes .../METADATA/metadata.ipynb | 3586 +++++++++++++++++ .../METADATA/stac/catalog.json | 36 + .../METADATA/stac/space2stats/sources.json | 126 + .../stac/space2stats/space2stats.json | 308 ++ 9 files changed, 4939 insertions(+), 254 deletions(-) create mode 100644 notebooks/user-docs/space2stats_api_adm_example.ipynb create mode 100644 space2stats_api/src/space2stats_ingest/METADATA/Space2Stats Metadata Content.xlsx create mode 100644 space2stats_api/src/space2stats_ingest/METADATA/metadata.ipynb create mode 100644 space2stats_api/src/space2stats_ingest/METADATA/stac/catalog.json create mode 100644 space2stats_api/src/space2stats_ingest/METADATA/stac/space2stats/sources.json create mode 100644 space2stats_api/src/space2stats_ingest/METADATA/stac/space2stats/space2stats.json diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5e4b1cca..fcf1fb0d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,4 +22,24 @@ repos: files: ^space2stats_api/ exclude: ^space2stats/env/ additional_dependencies: - - types-requests \ No newline at end of file + - types-requests + + - repo: https://github.com/nbQA-dev/nbQA + rev: 1.8.7 + hooks: + - id: nbqa-ruff + args: ["--fix"] + # Match all `.ipynb` files under `notebooks/user-docs/` + files: ^notebooks/user-docs/.*\.ipynb$ + - id: nbqa-isort + args: ["--profile=black"] + additional_dependencies: [isort==5.6.4] + # Match all `.ipynb` files under `notebooks/user-docs/` + files: ^notebooks/user-docs/.*\.ipynb$ + - id: nbqa-black + # Match all `.ipynb` files under `notebooks/user-docs/` + files: ^notebooks/user-docs/.*\.ipynb$ + - id: nbqa-pyupgrade + args: ["--py37-plus"] + # Match all `.ipynb` files under `notebooks/user-docs/` + files: ^notebooks/user-docs/.*\.ipynb$ \ No newline at end of file diff --git a/notebooks/user-docs/space2stats_api_adm_example.ipynb b/notebooks/user-docs/space2stats_api_adm_example.ipynb new file mode 100644 index 00000000..64e3d8ab --- /dev/null +++ b/notebooks/user-docs/space2stats_api_adm_example.ipynb @@ -0,0 +1,570 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "from typing import Dict\n", + "\n", + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd\n", + "import requests\n", + "from lonboard import Map, PolygonLayer, ScatterplotLayer\n", + "from shapely import from_geojson" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "BASE_URL = \"http://127.0.0.1:8000\"\n", + "FIELDS_ENDPOINT = f\"{BASE_URL}/fields\"\n", + "SUMMARY_ENDPOINT = f\"{BASE_URL}/summary\"\n", + "AGGREGATION_ENDPOINT = f\"{BASE_URL}/aggregate\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def fetch_admin_boundaries(iso3: str, adm: str) -> gpd.GeoDataFrame:\n", + " \"\"\"Fetch administrative boundaries from GeoBoundaries API.\"\"\"\n", + " url = f\"https://www.geoboundaries.org/api/current/gbOpen/{iso3}/{adm}/\"\n", + " res = requests.get(url).json()\n", + " return gpd.read_file(res[\"gjDownloadURL\"])\n", + "\n", + "\n", + "def fetch_summary_data(feature: Dict) -> pd.DataFrame:\n", + " \"\"\"Fetch summary data for each administrative feature.\"\"\"\n", + " request_payload = {\n", + " \"aoi\": feature,\n", + " \"spatial_join_method\": \"touches\",\n", + " \"fields\": [\"sum_pop_2020\"],\n", + " \"geometry\": \"point\",\n", + " }\n", + " response = requests.post(SUMMARY_ENDPOINT, json=request_payload)\n", + " if response.status_code != 200:\n", + " raise Exception(f\"Failed to get summary: {response.text}\")\n", + "\n", + " summary_data = response.json()\n", + " if not summary_data:\n", + " print(f\"Failed to get summary for {feature['id']}\")\n", + " return pd.DataFrame() # Return an empty DataFrame if no data\n", + "\n", + " df = pd.DataFrame(summary_data)\n", + " df[\"adm_id\"] = int(feature[\"id\"])\n", + " df[\"adm_name\"] = feature[\"properties\"][\"shapeName\"]\n", + " df[\"geometry\"] = df[\"geometry\"].apply(lambda geom: from_geojson(geom))\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Turkana 0\n", + "Marsabit 1\n", + "Mandera 2\n", + "Wajir 3\n", + "West Pokot 4\n", + "Samburu 5\n", + "Isiolo 6\n", + "Baringo 7\n", + "Elgeyo-Marakwet 8\n", + "Trans Nzoia 9\n", + "Bungoma 10\n", + "Garissa 11\n", + "Uasin Gishu 12\n", + "Kakamega 13\n", + "Laikipia 14\n", + "Busia 15\n", + "Meru 16\n", + "Nandi 17\n", + "Siaya 18\n", + "Nakuru 19\n", + "Vihiga 20\n", + "Nyandarua 21\n", + "Tharaka 22\n", + "Kericho 23\n", + "Kisumu 24\n", + "Nyeri 25\n", + "Tana River 26\n", + "Kitui 27\n", + "Kirinyaga 28\n", + "Embu 29\n", + "Homa Bay 30\n", + "Bomet 31\n", + "Nyamira 32\n", + "Narok 33\n", + "Kisii 34\n", + "Murang'a 35\n", + "Migori 36\n", + "Kiambu 37\n", + "Machakos 38\n", + "Kajiado 39\n", + "Nairobi 40\n", + "Makueni 41\n", + "Lamu 42\n", + "Kilifi 43\n", + "Taita Taveta 44\n", + "Kwale 45\n", + "Mombasa 46\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hex_idgeometrysum_pop_2020adm_idadm_name
0866a4a407ffffffPOINT (35.80117 4.9048)554.6550210Turkana
1866a4a417ffffffPOINT (35.75483 4.8701)207.9770460Turkana
2866a4a41fffffffPOINT (35.81106 4.84803)637.2188170Turkana
3866a4a427ffffffPOINT (35.79128 4.96154)948.8767300Turkana
4866a4a437ffffffPOINT (35.74495 4.92687)112.8057800Turkana
\n", + "
" + ], + "text/plain": [ + " hex_id geometry sum_pop_2020 adm_id adm_name\n", + "0 866a4a407ffffff POINT (35.80117 4.9048) 554.655021 0 Turkana\n", + "1 866a4a417ffffff POINT (35.75483 4.8701) 207.977046 0 Turkana\n", + "2 866a4a41fffffff POINT (35.81106 4.84803) 637.218817 0 Turkana\n", + "3 866a4a427ffffff POINT (35.79128 4.96154) 948.876730 0 Turkana\n", + "4 866a4a437ffffff POINT (35.74495 4.92687) 112.805780 0 Turkana" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ISO3 = \"KEN\"\n", + "ADM = \"ADM1\"\n", + "adm_boundaries = fetch_admin_boundaries(ISO3, ADM)\n", + "geojson_str = adm_boundaries.to_json()\n", + "adm_geojson = json.loads(geojson_str)\n", + "adm_features = adm_geojson[\"features\"]\n", + "\n", + "gdfs = []\n", + "for i, feature in enumerate(adm_features):\n", + " df = fetch_summary_data(feature)\n", + " if not df.empty:\n", + " gdfs.append(gpd.GeoDataFrame(df, geometry=\"geometry\", crs=\"EPSG:4326\"))\n", + " print(feature[\"properties\"][\"shapeName\"], i)\n", + "\n", + "# Concatenate all GeoDataFrames into a single GeoDataFrame\n", + "gdf = pd.concat(gdfs, ignore_index=True)\n", + "\n", + "# Display the GeoDataFrame structure\n", + "gdf.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Define custom breaks and corresponding RGBA colors for visualization\n", + "breaks = [\n", + " gdf[\"sum_pop_2020\"].min(),\n", + " 1,\n", + " 1000,\n", + " 10000,\n", + " 50000,\n", + " 100000,\n", + " 200000,\n", + " gdf[\"sum_pop_2020\"].max(),\n", + "]\n", + "colors = np.array(\n", + " [\n", + " [211, 211, 211, 255], # Light gray for 0\n", + " [255, 255, 0, 255], # Yellow for 1-1000\n", + " [255, 165, 0, 255], # Orange for 1000-10000\n", + " [255, 0, 0, 255], # Red for 10000-50000\n", + " [128, 0, 128, 255], # Purple for 50000-100000\n", + " [0, 0, 255, 255], # Blue for 100000-200000\n", + " [0, 0, 139, 255], # Dark blue for 200000+\n", + " ]\n", + ")\n", + "\n", + "\n", + "def assign_color(value: float) -> list:\n", + " \"\"\"Assign colors based on population value.\"\"\"\n", + " for i in range(len(breaks) - 1):\n", + " if breaks[i] <= value < breaks[i + 1]:\n", + " return colors[i].tolist() # Convert to list\n", + " return colors[-1].tolist() # In case value exceeds all breaks" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fcab8e1932cd43d49f23111a0f39c97b", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "Map(layers=[ScatterplotLayer(get_fill_color=\n", + "[\n", + " [\n", + " 2…" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Map sum_pop_2020 values to colors using the custom function\n", + "gdf[\"color\"] = gdf[\"sum_pop_2020\"].apply(assign_color)\n", + "\n", + "# Flatten the color list into a 2D array for ScatterplotLayer\n", + "color_list = np.array(gdf[\"color\"].tolist(), dtype=np.uint8)\n", + "\n", + "# Create the scatterplot layer with the assigned colors\n", + "layer = ScatterplotLayer.from_geopandas(gdf, get_radius=2000, get_fill_color=color_list)\n", + "\n", + "# Create the map with the scatterplot layer\n", + "m = Map(layer)\n", + "m" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def fetch_aggregated_population(row):\n", + " request_payload = {\n", + " \"aoi\": {\n", + " \"type\": \"Feature\",\n", + " \"geometry\": row.geometry.__geo_interface__,\n", + " \"properties\": {},\n", + " },\n", + " \"spatial_join_method\": \"touches\",\n", + " \"fields\": [\"sum_pop_2020\"],\n", + " \"aggregation_type\": \"sum\",\n", + " }\n", + "\n", + " response = requests.post(AGGREGATION_ENDPOINT, json=request_payload)\n", + "\n", + " if response.status_code == 200:\n", + " result = response.json()\n", + " return result.get(\"sum_pop_2020\", 0)\n", + " else:\n", + " print(response.content)\n", + " return 0" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geometryshapeNameshapeISOshapeIDshapeGroupshapeTypesum_pop_2020
0POLYGON ((36.05061 4.45622, 35.94395 4.54803, ...TurkanaKE-4332016919B72266624462344KENADM11.374176e+06
1POLYGON ((36.60089 2.40574, 36.60138 2.4053, 3...MarsabitKE-2532016919B63496705134089KENADM14.460342e+05
2POLYGON ((40.99195 2.17919, 40.99245 2.25188, ...ManderaKE-2432016919B2031803566233KENADM12.815273e+06
3POLYGON ((38.96255 2.09739, 38.96272 2.09718, ...WajirKE-4632016919B89873713911655KENADM11.930365e+06
4POLYGON ((34.94278 2.45547, 34.93892 2.45551, ...West PokotKE-4732016919B96045830258165KENADM19.429576e+05
\n", + "
" + ], + "text/plain": [ + " geometry shapeName shapeISO \\\n", + "0 POLYGON ((36.05061 4.45622, 35.94395 4.54803, ... Turkana KE-43 \n", + "1 POLYGON ((36.60089 2.40574, 36.60138 2.4053, 3... Marsabit KE-25 \n", + "2 POLYGON ((40.99195 2.17919, 40.99245 2.25188, ... Mandera KE-24 \n", + "3 POLYGON ((38.96255 2.09739, 38.96272 2.09718, ... Wajir KE-46 \n", + "4 POLYGON ((34.94278 2.45547, 34.93892 2.45551, ... West Pokot KE-47 \n", + "\n", + " shapeID shapeGroup shapeType sum_pop_2020 \n", + "0 32016919B72266624462344 KEN ADM1 1.374176e+06 \n", + "1 32016919B63496705134089 KEN ADM1 4.460342e+05 \n", + "2 32016919B2031803566233 KEN ADM1 2.815273e+06 \n", + "3 32016919B89873713911655 KEN ADM1 1.930365e+06 \n", + "4 32016919B96045830258165 KEN ADM1 9.429576e+05 " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "adm_gdf = gpd.GeoDataFrame.from_features(adm_features)\n", + "adm_gdf[\"sum_pop_2020\"] = adm_gdf.apply(fetch_aggregated_population, axis=1)\n", + "adm_gdf.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "breaks = [\n", + " adm_gdf[\"sum_pop_2020\"].min(),\n", + " 10_000,\n", + " 100_000,\n", + " 1_000_000,\n", + " 5_000_000,\n", + " 10_000_000,\n", + " 20_000_000,\n", + " gdf[\"sum_pop_2020\"].max(),\n", + "]\n", + "colors = np.array(\n", + " [\n", + " [211, 211, 211, 125], # Light gray with transparency for 0 - 10,000\n", + " [255, 255, 0, 125], # Yellow with transparency for 10,000 - 100,000\n", + " [255, 165, 0, 125], # Orange with transparency for 100,000 - 1,000,000\n", + " [255, 0, 0, 125], # Red with transparency for 1,000,000 - 5,000,000\n", + " [128, 0, 128, 125], # Purple with transparency for 5,000,000 - 10,000,000\n", + " [0, 0, 255, 125], # Blue with transparency for 10,000,000 - 20,000,000\n", + " [0, 0, 139, 125], # Dark blue with transparency for 20,000,000 - max\n", + " ]\n", + ")\n", + "\n", + "\n", + "def assign_color(value: float) -> list:\n", + " \"\"\"Assign colors based on population value, including transparency.\"\"\"\n", + " for i in range(len(breaks) - 1):\n", + " if breaks[i] <= value < breaks[i + 1]:\n", + " return colors[i].tolist() # Convert to list\n", + " return colors[-1].tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages/lonboard/_geoarrow/ops/reproject.py:23: UserWarning: No CRS exists on data. If no data is shown on the map, double check that your CRS is WGS84.\n", + " warn(\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "94fb588e3bdc4ba99ccd323f7aec0889", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "Map(layers=[PolygonLayer(get_fill_color=\n", + "[\n", + " [\n", + " 255,\n", + "…" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Assign colors to each row in gdf based on sum_pop_2020\n", + "adm_gdf[\"color\"] = adm_gdf[\"sum_pop_2020\"].apply(assign_color)\n", + "\n", + "# Convert the list of colors into a 2D numpy array of uint8\n", + "color_array = np.array(adm_gdf[\"color\"].tolist(), dtype=np.uint8)\n", + "\n", + "# Create the polygon layer using PolygonLayer, referencing the color_array\n", + "layer = PolygonLayer.from_geopandas(\n", + " adm_gdf,\n", + " get_fill_color=color_array, # Pass the 2D numpy array for the colors\n", + " get_line_color=[0, 0, 0, 255], # Optional: Black outline\n", + " line_width_min_pixels=1,\n", + ")\n", + "\n", + "# Create the map with the polygon layer\n", + "m = Map(layer)\n", + "m" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "spacestats", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/user-docs/space2stats_api_demo.ipynb b/notebooks/user-docs/space2stats_api_demo.ipynb index e79fc152..aca1f875 100644 --- a/notebooks/user-docs/space2stats_api_demo.ipynb +++ b/notebooks/user-docs/space2stats_api_demo.ipynb @@ -2,24 +2,24 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from typing import Dict\n", "\n", + "import geopandas as gpd\n", "import numpy as np\n", - "import requests\n", "import pandas as pd\n", - "import geopandas as gpd\n", - "from shapely.geometry import shape\n", + "import requests\n", + "from geojson_pydantic import Feature, Polygon\n", "from lonboard import Map, ScatterplotLayer\n", - "from geojson_pydantic import Feature, Polygon" + "from shapely import from_geojson" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -69,23 +69,43 @@ " [33.78593974945852, -4.725410543134203],\n", " [41.94362577283266, -4.725410543134203],\n", " [41.94362577283266, 5.115816884114494],\n", - " [33.78593974945852, 5.115816884114494]\n", + " [33.78593974945852, 5.115816884114494],\n", " ]\n", - " ]\n", + " ],\n", " },\n", - " \"properties\": {\n", - " \"name\": \"Updated AOI\"\n", - " }\n", + " \"properties\": {\"name\": \"Updated AOI\"},\n", "}\n", - " \n", - " \n", + "\n", "\n", "feat = AOIModel(**aoi)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# Define the Request Payload\n", + "request_payload = {\n", + " \"aoi\": aoi,\n", + " \"spatial_join_method\": \"touches\",\n", + " \"fields\": [\"sum_pop_2020\"],\n", + " \"geometry\": \"point\",\n", + "}\n", + "\n", + "# Get Summary Data\n", + "response = requests.post(SUMMARY_ENDPOINT, json=request_payload)\n", + "if response.status_code != 200:\n", + " raise Exception(f\"Failed to get summary: {response.text}\")\n", + "\n", + "summary_data = response.json()\n", + "df = pd.DataFrame(summary_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -117,33 +137,33 @@ " \n", " \n", " 0\n", + " 866a4a00fffffff\n", + " {\"type\":\"Point\",\"coordinates\":[36.180976490229...\n", + " 476.538185\n", + " \n", + " \n", + " 1\n", " 866a4a017ffffff\n", " {\"type\":\"Point\",\"coordinates\":[36.078694056627...\n", " 676.912804\n", " \n", " \n", - " 1\n", + " 2\n", " 866a4a01fffffff\n", " {\"type\":\"Point\",\"coordinates\":[36.134817927246...\n", " 347.182722\n", " \n", " \n", - " 2\n", - " 866a4a04fffffff\n", - " {\"type\":\"Point\",\"coordinates\":[36.339286712001...\n", - " 285.943490\n", - " \n", - " \n", " 3\n", - " 866a4a057ffffff\n", - " {\"type\":\"Point\",\"coordinates\":[36.237081352434...\n", - " 279.463912\n", + " 866a4a047ffffff\n", + " {\"type\":\"Point\",\"coordinates\":[36.283201202805...\n", + " 380.988678\n", " \n", " \n", " 4\n", - " 866a4a05fffffff\n", - " {\"type\":\"Point\",\"coordinates\":[36.293182542907...\n", - " 235.258474\n", + " 866a4a04fffffff\n", + " {\"type\":\"Point\",\"coordinates\":[36.339286712001...\n", + " 285.943490\n", " \n", " \n", " ...\n", @@ -152,97 +172,82 @@ " ...\n", " \n", " \n", - " 25801\n", + " 26184\n", " 86969ed97ffffff\n", " {\"type\":\"Point\",\"coordinates\":[34.808746693532...\n", " 196.448391\n", " \n", " \n", - " 25802\n", + " 26185\n", " 86969ed9fffffff\n", " {\"type\":\"Point\",\"coordinates\":[34.750412026186...\n", " 296.740893\n", " \n", " \n", - " 25803\n", + " 26186\n", " 86969eda7ffffff\n", " {\"type\":\"Point\",\"coordinates\":[34.770464787099...\n", " 154.818453\n", " \n", " \n", - " 25804\n", + " 26187\n", " 86969edafffffff\n", " {\"type\":\"Point\",\"coordinates\":[34.712102323801...\n", " 157.875350\n", " \n", " \n", - " 25805\n", + " 26188\n", " 86969edb7ffffff\n", " {\"type\":\"Point\",\"coordinates\":[34.818784182799...\n", " 236.127331\n", " \n", " \n", "\n", - "

25806 rows × 3 columns

\n", + "

26189 rows × 3 columns

\n", "" ], "text/plain": [ " hex_id geometry \\\n", - "0 866a4a017ffffff {\"type\":\"Point\",\"coordinates\":[36.078694056627... \n", - "1 866a4a01fffffff {\"type\":\"Point\",\"coordinates\":[36.134817927246... \n", - "2 866a4a04fffffff {\"type\":\"Point\",\"coordinates\":[36.339286712001... \n", - "3 866a4a057ffffff {\"type\":\"Point\",\"coordinates\":[36.237081352434... \n", - "4 866a4a05fffffff {\"type\":\"Point\",\"coordinates\":[36.293182542907... \n", + "0 866a4a00fffffff {\"type\":\"Point\",\"coordinates\":[36.180976490229... \n", + "1 866a4a017ffffff {\"type\":\"Point\",\"coordinates\":[36.078694056627... \n", + "2 866a4a01fffffff {\"type\":\"Point\",\"coordinates\":[36.134817927246... \n", + "3 866a4a047ffffff {\"type\":\"Point\",\"coordinates\":[36.283201202805... \n", + "4 866a4a04fffffff {\"type\":\"Point\",\"coordinates\":[36.339286712001... \n", "... ... ... \n", - "25801 86969ed97ffffff {\"type\":\"Point\",\"coordinates\":[34.808746693532... \n", - "25802 86969ed9fffffff {\"type\":\"Point\",\"coordinates\":[34.750412026186... \n", - "25803 86969eda7ffffff {\"type\":\"Point\",\"coordinates\":[34.770464787099... \n", - "25804 86969edafffffff {\"type\":\"Point\",\"coordinates\":[34.712102323801... \n", - "25805 86969edb7ffffff {\"type\":\"Point\",\"coordinates\":[34.818784182799... \n", + "26184 86969ed97ffffff {\"type\":\"Point\",\"coordinates\":[34.808746693532... \n", + "26185 86969ed9fffffff {\"type\":\"Point\",\"coordinates\":[34.750412026186... \n", + "26186 86969eda7ffffff {\"type\":\"Point\",\"coordinates\":[34.770464787099... \n", + "26187 86969edafffffff {\"type\":\"Point\",\"coordinates\":[34.712102323801... \n", + "26188 86969edb7ffffff {\"type\":\"Point\",\"coordinates\":[34.818784182799... \n", "\n", " sum_pop_2020 \n", - "0 676.912804 \n", - "1 347.182722 \n", - "2 285.943490 \n", - "3 279.463912 \n", - "4 235.258474 \n", + "0 476.538185 \n", + "1 676.912804 \n", + "2 347.182722 \n", + "3 380.988678 \n", + "4 285.943490 \n", "... ... \n", - "25801 196.448391 \n", - "25802 296.740893 \n", - "25803 154.818453 \n", - "25804 157.875350 \n", - "25805 236.127331 \n", + "26184 196.448391 \n", + "26185 296.740893 \n", + "26186 154.818453 \n", + "26187 157.875350 \n", + "26188 236.127331 \n", "\n", - "[25806 rows x 3 columns]" + "[26189 rows x 3 columns]" ] }, - "execution_count": 7, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# Define the Request Payload\n", - "request_payload = {\n", - " \"aoi\": aoi,\n", - " \"spatial_join_method\": \"centroid\",\n", - " \"fields\": [\"sum_pop_2020\"], \n", - " \"geometry\": \"point\"\n", - "}\n", - "\n", - "# Get Summary Data\n", - "response = requests.post(SUMMARY_ENDPOINT, json=request_payload)\n", - "if response.status_code != 200:\n", - " raise Exception(f\"Failed to get summary: {response.text}\")\n", - "\n", - "summary_data = response.json()\n", - "df = pd.DataFrame(summary_data)\n", "df" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -274,33 +279,33 @@ " \n", " \n", " 0\n", + " 866a4a00fffffff\n", + " POINT (36.18098 5.12501)\n", + " 476.538185\n", + " \n", + " \n", + " 1\n", " 866a4a017ffffff\n", " POINT (36.07869 5.11252)\n", " 676.912804\n", " \n", " \n", - " 1\n", + " 2\n", " 866a4a01fffffff\n", " POINT (36.13482 5.09047)\n", " 347.182722\n", " \n", " \n", - " 2\n", - " 866a4a04fffffff\n", - " POINT (36.33929 5.11542)\n", - " 285.943490\n", - " \n", - " \n", " 3\n", - " 866a4a057ffffff\n", - " POINT (36.23708 5.10296)\n", - " 279.463912\n", + " 866a4a047ffffff\n", + " POINT (36.2832 5.13748)\n", + " 380.988678\n", " \n", " \n", " 4\n", - " 866a4a05fffffff\n", - " POINT (36.29318 5.0809)\n", - " 235.258474\n", + " 866a4a04fffffff\n", + " POINT (36.33929 5.11542)\n", + " 285.943490\n", " \n", " \n", " ...\n", @@ -309,117 +314,129 @@ " ...\n", " \n", " \n", - " 25801\n", + " 26184\n", " 86969ed97ffffff\n", " POINT (34.80875 -3.47225)\n", " 196.448391\n", " \n", " \n", - " 25802\n", + " 26185\n", " 86969ed9fffffff\n", " POINT (34.75041 -3.44944)\n", " 296.740893\n", " \n", " \n", - " 25803\n", + " 26186\n", " 86969eda7ffffff\n", " POINT (34.77046 -3.5715)\n", " 154.818453\n", " \n", " \n", - " 25804\n", + " 26187\n", " 86969edafffffff\n", " POINT (34.7121 -3.54868)\n", " 157.875350\n", " \n", " \n", - " 25805\n", + " 26188\n", " 86969edb7ffffff\n", " POINT (34.81878 -3.53328)\n", " 236.127331\n", " \n", " \n", "\n", - "

25806 rows × 3 columns

\n", + "

26189 rows × 3 columns

\n", "" ], "text/plain": [ " hex_id geometry sum_pop_2020\n", - "0 866a4a017ffffff POINT (36.07869 5.11252) 676.912804\n", - "1 866a4a01fffffff POINT (36.13482 5.09047) 347.182722\n", - "2 866a4a04fffffff POINT (36.33929 5.11542) 285.943490\n", - "3 866a4a057ffffff POINT (36.23708 5.10296) 279.463912\n", - "4 866a4a05fffffff POINT (36.29318 5.0809) 235.258474\n", + "0 866a4a00fffffff POINT (36.18098 5.12501) 476.538185\n", + "1 866a4a017ffffff POINT (36.07869 5.11252) 676.912804\n", + "2 866a4a01fffffff POINT (36.13482 5.09047) 347.182722\n", + "3 866a4a047ffffff POINT (36.2832 5.13748) 380.988678\n", + "4 866a4a04fffffff POINT (36.33929 5.11542) 285.943490\n", "... ... ... ...\n", - "25801 86969ed97ffffff POINT (34.80875 -3.47225) 196.448391\n", - "25802 86969ed9fffffff POINT (34.75041 -3.44944) 296.740893\n", - "25803 86969eda7ffffff POINT (34.77046 -3.5715) 154.818453\n", - "25804 86969edafffffff POINT (34.7121 -3.54868) 157.875350\n", - "25805 86969edb7ffffff POINT (34.81878 -3.53328) 236.127331\n", + "26184 86969ed97ffffff POINT (34.80875 -3.47225) 196.448391\n", + "26185 86969ed9fffffff POINT (34.75041 -3.44944) 296.740893\n", + "26186 86969eda7ffffff POINT (34.77046 -3.5715) 154.818453\n", + "26187 86969edafffffff POINT (34.7121 -3.54868) 157.875350\n", + "26188 86969edb7ffffff POINT (34.81878 -3.53328) 236.127331\n", "\n", - "[25806 rows x 3 columns]" + "[26189 rows x 3 columns]" ] }, - "execution_count": 9, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "from shapely import from_geojson\n", - "\n", - "df['geometry'] = df['geometry'].apply(lambda geom: from_geojson(geom))\n", - "gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326')\n", + "df[\"geometry\"] = df[\"geometry\"].apply(lambda geom: from_geojson(geom))\n", + "gdf = gpd.GeoDataFrame(df, geometry=\"geometry\", crs=\"EPSG:4326\")\n", "gdf" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "267540ef06104b718e9f18ffd4225440", + "model_id": "897d8bcee7ee4431893b3ba08ee67363", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "Map(layers=[ScatterplotLayer(get_fill_color=\n", + "Map(layers=[ScatterplotLayer(get_fill_color=\n", "[\n", " [\n", " 2…" ] }, - "execution_count": 10, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Define custom breaks and corresponding RGBA colors\n", - "breaks = [0, 1, 1000, 10000, 50000, 100000, 200000, gdf[\"sum_pop_2020\"].max()]\n", - "colors = np.array([\n", - " [211, 211, 211, 255], # Light gray for 0\n", - " [255, 255, 0, 255], # Yellow for 1-1000\n", - " [255, 165, 0, 255], # Orange for 1000-10000\n", - " [255, 0, 0, 255], # Red for 10000-50000\n", - " [128, 0, 128, 255], # Purple for 50000-100000\n", - " [0, 0, 255, 255], # Blue for 100000-200000\n", - " [0, 0, 139, 255], # Dark blue for 200000+\n", - "])\n", + "breaks = [\n", + " gdf[\"sum_pop_2020\"].min(),\n", + " 1,\n", + " 1000,\n", + " 10000,\n", + " 50000,\n", + " 100000,\n", + " 200000,\n", + " gdf[\"sum_pop_2020\"].max(),\n", + "]\n", + "colors = np.array(\n", + " [\n", + " [211, 211, 211, 255], # Light gray for 0\n", + " [255, 255, 0, 255], # Yellow for 1-1000\n", + " [255, 165, 0, 255], # Orange for 1000-10000\n", + " [255, 0, 0, 255], # Red for 10000-50000\n", + " [128, 0, 128, 255], # Purple for 50000-100000\n", + " [0, 0, 255, 255], # Blue for 100000-200000\n", + " [0, 0, 139, 255], # Dark blue for 200000+\n", + " ]\n", + ")\n", "\n", "# Function to assign colors based on custom bins\n", + "\n", + "\n", "def assign_color(value, breaks, colors):\n", " for i in range(len(breaks) - 1):\n", " if breaks[i] <= value < breaks[i + 1]:\n", " return colors[i]\n", " return colors[-1] # In case value exceeds all breaks\n", "\n", + "\n", "# Map sum_pop_2020 values to colors using the custom function\n", - "gdf['color'] = gdf[\"sum_pop_2020\"].apply(lambda x: assign_color(x, breaks, colors))\n", - "colors = np.uint8(gdf['color'].tolist())\n", + "gdf[\"color\"] = gdf[\"sum_pop_2020\"].apply(lambda x: assign_color(x, breaks, colors))\n", + "colors = np.uint8(gdf[\"color\"].tolist())\n", "\n", "# Create the scatterplot layer with the assigned colors\n", "layer = ScatterplotLayer.from_geopandas(gdf, get_radius=2000, get_fill_color=colors)\n", @@ -431,7 +448,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "spacestats", "language": "python", "name": "python3" }, @@ -445,7 +462,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/notebooks/user-docs/space2stats_py_package_demo.ipynb b/notebooks/user-docs/space2stats_py_package_demo.ipynb index 4e9dbb66..533b44ec 100644 --- a/notebooks/user-docs/space2stats_py_package_demo.ipynb +++ b/notebooks/user-docs/space2stats_py_package_demo.ipynb @@ -1,90 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mFound existing installation: space2stats 0.1.0\n", - "Uninstalling space2stats-0.1.0:\n", - " Successfully uninstalled space2stats-0.1.0\n", - "Note: you may need to restart the kernel to use updated packages.\n", - "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mCollecting git+https://github.com/worldbank/DECAT_Space2Stats.git@feature/h3ronpy#subdirectory=space2stats_api/src\n", - " Cloning https://github.com/worldbank/DECAT_Space2Stats.git (to revision feature/h3ronpy) to /private/var/folders/md/g6df9cs96bv_bv1kslvxkb4c0000gn/T/pip-req-build-o_n4xv_w\n", - " Running command git clone --filter=blob:none --quiet https://github.com/worldbank/DECAT_Space2Stats.git /private/var/folders/md/g6df9cs96bv_bv1kslvxkb4c0000gn/T/pip-req-build-o_n4xv_w\n", - " Running command git checkout -b feature/h3ronpy --track origin/feature/h3ronpy\n", - " Switched to a new branch 'feature/h3ronpy'\n", - " branch 'feature/h3ronpy' set up to track 'origin/feature/h3ronpy'.\n", - " Resolved https://github.com/worldbank/DECAT_Space2Stats.git to commit 5299454c7954a0ee167616abc2a2157cd495b0c1\n", - " Installing build dependencies ... \u001b[?25ldone\n", - "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n", - "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n", - "\u001b[?25hRequirement already satisfied: asgi-s3-response-middleware<0.0.5,>=0.0.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.0.4)\n", - "Requirement already satisfied: boto3<2.0.0,>=1.35.11 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (1.35.34)\n", - "Requirement already satisfied: fastapi>=0.112.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.115.0)\n", - "Requirement already satisfied: geojson-pydantic in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (1.1.1)\n", - "Requirement already satisfied: h3 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (3.7.7)\n", - "Requirement already satisfied: h3ronpy<0.22.0,>=0.21.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.21.1)\n", - "Requirement already satisfied: httpx in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.27.2)\n", - "Requirement already satisfied: mangum in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.19.0)\n", - "Requirement already satisfied: numpy<2.0.0,>=1.24.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (1.26.4)\n", - "Requirement already satisfied: orjson in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (3.10.7)\n", - "Requirement already satisfied: pandas in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (2.2.3)\n", - "Requirement already satisfied: psycopg[binary,pool] in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (3.2.3)\n", - "Requirement already satisfied: pydantic-settings>=2.0.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (2.5.2)\n", - "Requirement already satisfied: shapely in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (2.0.6)\n", - "Requirement already satisfied: starlette-cramjam<0.4,>=0.3 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (0.3.3)\n", - "Requirement already satisfied: typing_extensions in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from space2stats==0.1.0) (4.12.2)\n", - "Requirement already satisfied: starlette>=0.38.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from asgi-s3-response-middleware<0.0.5,>=0.0.4->space2stats==0.1.0) (0.38.6)\n", - "Requirement already satisfied: botocore<1.36.0,>=1.35.34 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from boto3<2.0.0,>=1.35.11->space2stats==0.1.0) (1.35.34)\n", - "Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from boto3<2.0.0,>=1.35.11->space2stats==0.1.0) (1.0.1)\n", - "Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from boto3<2.0.0,>=1.35.11->space2stats==0.1.0) (0.10.2)\n", - "Requirement already satisfied: pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from fastapi>=0.112.0->space2stats==0.1.0) (2.9.2)\n", - "Requirement already satisfied: pyarrow>=10.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from h3ronpy<0.22.0,>=0.21.0->space2stats==0.1.0) (17.0.0)\n", - "Requirement already satisfied: anyio in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (4.6.0)\n", - "Requirement already satisfied: certifi in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (2024.8.30)\n", - "Requirement already satisfied: httpcore==1.* in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (1.0.6)\n", - "Requirement already satisfied: idna in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (3.10)\n", - "Requirement already satisfied: sniffio in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpx->space2stats==0.1.0) (1.3.1)\n", - "Requirement already satisfied: h11<0.15,>=0.13 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from httpcore==1.*->httpx->space2stats==0.1.0) (0.14.0)\n", - "Requirement already satisfied: python-dotenv>=0.21.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pydantic-settings>=2.0.0->space2stats==0.1.0) (1.0.1)\n", - "Requirement already satisfied: cramjam<2.9,>=2.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from starlette-cramjam<0.4,>=0.3->space2stats==0.1.0) (2.8.4)\n", - "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pandas->space2stats==0.1.0) (2.9.0.post0)\n", - "Requirement already satisfied: pytz>=2020.1 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pandas->space2stats==0.1.0) (2024.2)\n", - "Requirement already satisfied: tzdata>=2022.7 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pandas->space2stats==0.1.0) (2024.2)\n", - "Requirement already satisfied: psycopg-binary==3.2.3 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from psycopg[binary,pool]->space2stats==0.1.0) (3.2.3)\n", - "Requirement already satisfied: psycopg-pool in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from psycopg[binary,pool]->space2stats==0.1.0) (3.2.3)\n", - "Requirement already satisfied: urllib3!=2.2.0,<3,>=1.25.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from botocore<1.36.0,>=1.35.34->boto3<2.0.0,>=1.35.11->space2stats==0.1.0) (2.2.3)\n", - "Requirement already satisfied: annotated-types>=0.6.0 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi>=0.112.0->space2stats==0.1.0) (0.7.0)\n", - "Requirement already satisfied: pydantic-core==2.23.4 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from pydantic!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.7.4->fastapi>=0.112.0->space2stats==0.1.0) (2.23.4)\n", - "Requirement already satisfied: six>=1.5 in /opt/anaconda3/envs/spacestats/lib/python3.11/site-packages (from python-dateutil>=2.8.2->pandas->space2stats==0.1.0) (1.16.0)\n", - "Building wheels for collected packages: space2stats\n", - " Building wheel for space2stats (pyproject.toml) ... \u001b[?25ldone\n", - "\u001b[?25h Created wheel for space2stats: filename=space2stats-0.1.0-py3-none-any.whl size=18428 sha256=ea6987e1b55fe30bed14d734f35195abc39985520ecc888928d1c0df698bc0dc\n", - " Stored in directory: /private/var/folders/md/g6df9cs96bv_bv1kslvxkb4c0000gn/T/pip-ephem-wheel-cache-x7ltnsoy/wheels/99/9f/50/575302cb376b7ead3e96482cd92b0bf444bc829e19cc250c03\n", - "Successfully built space2stats\n", - "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mInstalling collected packages: space2stats\n", - "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mSuccessfully installed space2stats-0.1.0\n", - "\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Ignoring invalid distribution ~umpy (/opt/anaconda3/envs/spacestats/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mNote: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "%pip install \"git+https://github.com/worldbank/DECAT_Space2Stats.git@feature/h3ronpy#subdirectory=space2stats_api/src\"" - ] - }, { "cell_type": "code", "execution_count": 1, @@ -93,15 +8,14 @@ "source": [ "from typing import Dict\n", "\n", + "import geopandas as gpd\n", "import numpy as np\n", - "from dotenv import load_dotenv\n", "import pandas as pd\n", - "import geopandas as gpd\n", - "from shapely.geometry import shape\n", - "from lonboard import Map, ScatterplotLayer\n", + "from dotenv import load_dotenv\n", "from geojson_pydantic import Feature, Polygon\n", - "\n", - "from space2stats import StatsTable\n" + "from lonboard import Map, ScatterplotLayer\n", + "from shapely import from_geojson\n", + "from space2stats import StatsTable" ] }, { @@ -222,16 +136,13 @@ " [33.78593974945852, -4.725410543134203],\n", " [41.94362577283266, -4.725410543134203],\n", " [41.94362577283266, 5.115816884114494],\n", - " [33.78593974945852, 5.115816884114494]\n", + " [33.78593974945852, 5.115816884114494],\n", " ]\n", - " ]\n", + " ],\n", " },\n", - " \"properties\": {\n", - " \"name\": \"Updated AOI\"\n", - " }\n", + " \"properties\": {\"name\": \"Updated AOI\"},\n", "}\n", - " \n", - " \n", + "\n", "\n", "feat = AOIModel(**aoi)" ] @@ -240,6 +151,106 @@ "cell_type": "code", "execution_count": 5, "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hex_idgeometrysum_pop_2020
0866a4a00fffffff{\"type\":\"Point\",\"coordinates\":[36.180976490229...476.538185
1866a4a017ffffff{\"type\":\"Point\",\"coordinates\":[36.078694056627...676.912804
2866a4a01fffffff{\"type\":\"Point\",\"coordinates\":[36.134817927246...347.182722
3866a4a047ffffff{\"type\":\"Point\",\"coordinates\":[36.283201202805...380.988678
4866a4a04fffffff{\"type\":\"Point\",\"coordinates\":[36.339286712001...285.943490
\n", + "
" + ], + "text/plain": [ + " hex_id geometry \\\n", + "0 866a4a00fffffff {\"type\":\"Point\",\"coordinates\":[36.180976490229... \n", + "1 866a4a017ffffff {\"type\":\"Point\",\"coordinates\":[36.078694056627... \n", + "2 866a4a01fffffff {\"type\":\"Point\",\"coordinates\":[36.134817927246... \n", + "3 866a4a047ffffff {\"type\":\"Point\",\"coordinates\":[36.283201202805... \n", + "4 866a4a04fffffff {\"type\":\"Point\",\"coordinates\":[36.339286712001... \n", + "\n", + " sum_pop_2020 \n", + "0 476.538185 \n", + "1 676.912804 \n", + "2 347.182722 \n", + "3 380.988678 \n", + "4 285.943490 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with StatsTable.connect() as stats_table:\n", + " data = stats_table.summaries(\n", + " aoi=feat,\n", + " spatial_join_method=\"touches\",\n", + " fields=[\"sum_pop_2020\"],\n", + " geometry=\"point\",\n", + " )\n", + " df = pd.DataFrame(data)\n", + "\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -650,14 +661,16 @@ "[26189 rows x 42 columns]" ] }, - "execution_count": 5, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with StatsTable.connect() as stats_table:\n", - " data = stats_table.summaries(aoi=feat, spatial_join_method=\"touches\", fields=fields, geometry=\"point\")\n", + " data = stats_table.summaries(\n", + " aoi=feat, spatial_join_method=\"touches\", fields=fields, geometry=\"point\"\n", + " )\n", " df = pd.DataFrame(data)\n", "\n", "df" @@ -665,7 +678,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -1064,66 +1077,75 @@ "[26189 rows x 42 columns]" ] }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "from shapely import from_geojson\n", - "\n", - "df['geometry'] = df['geometry'].apply(lambda geom: from_geojson(geom))\n", - "gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326')\n", + "df[\"geometry\"] = df[\"geometry\"].apply(lambda geom: from_geojson(geom))\n", + "gdf = gpd.GeoDataFrame(df, geometry=\"geometry\", crs=\"EPSG:4326\")\n", "gdf" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b73e90e5014643d2a3b7f9ef33032f8f", + "model_id": "6868905940b74debbc4b3f7cd62770a5", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "Map(layers=[ScatterplotLayer(get_fill_color=\n", - "[\n", - " [\n", - " 2…" + "Map(custom_attribution='', layers=(ScatterplotLayer(get_fill_color=arro3.core.ChunkedArrayRK!5*P#-02BZm004jh0I^l=u?G+UfCdr(00{sbNK??(#>v>mNmt3; z&e&0#*3H@qzW@Y?JP!cqi~hfl|H2#?OBuCUrH2=O{PqF|)D$dC=A8#lZ8|+z3loQY zl!7{ls^8ItQSz|qDnuqC$L{hCQjC?5IN>n|BVKT#vS~u)F>VTEGc3}BlJd%WYM=`9 z`t;&;udXyMX>kM;E_w+t;`Diyt*%uYq};7>P{c{-T0+8#%MS7szT0tvGcUD4V zzH%ONZ{O)fys;a}Ekmw~;GnLmS_w;XzKOnpW zZ&|22-?J-mVSbBzxDWYY&1glkuYd-ffZAe-a7Zy}NvX@oljsG~hdceqnpPC_%wTFT zn1faaV$5Sz&~7i3J^ZD2+_QQIbM07quwQ+hpP_9iwZ}xWBE%hyy|Q{V?3L0hG}zB? zru+vcXXk0cvd>LeMO!{xR51Rn;sgd9z2EB>1BF0g_wUryIeX-EU`H@UB)@YAx?_-= zKB={FfH7WO=b{mA(j!8%`EpOZE+;F(zzFo4{@Q+*_z4r8D%)!+QO3-zV?x(>!xj&!tte*atL{|oE+zZrUYg0v(s1ANG3 zz$d|2JJ%{D;fxiX@R799J0L^)yB=G5Tv5yWqsVus{6<`ltSZ+W_w;*{+CsNNcuyC^ z6k&*fER)$*l^)6W-@m~S5*dLaHFKP)1sam|3+o%Tu33d0a zLm-j~kM5ZV)$)h&zF72IKOF1@9j+jjy4ewJaZ$b(0+~F$Zw3oH(Sa2IJ&grrSh;dX z8u2YY>_PXAQ2SGx(np|=J!xQpppwVI`{yJA5LjC0;!(REBk0^GShn>W!}v&+Qd={%(B{h`HyvP8qt+RC(*idV$F?Ah;~58)Nh%Pu0CDcy$lK_OVT06b4tIf&F6B1z!r$#>62SZ=;cCe9kG zo{8IxfgZ`)WEljEF9xKV_M`nzm>%TGKm{SxM0U~nKQM;77O2Id57dDbBg>bhtk}X6 zr&1UbY|}q|*N(LNUtUEOYPAeW51>uyuIgomDTBI3=SFq_b4rW^SD~T-XX6e_JgVxp$$s&DeK2R#vKZ^NcHJ06sV-CNTw!kXuoq=p*6?`f zTL{xt2QeCE2^<=xh->2Wp1|s=(Z^kyjs><<5Bu*m-ZYuO&ck8dSE4_(fvWf#Wz zM@Ec)Z8PCd)$Dn{Y$hcb001TcIN%om{B1V>Ee!lm6AJj{HGk3m*FM^kr7e5up+hbM z-$S=vcZlDYz??lW0(F{TU07mnz8i9>oix6^rei0dL^KHwk>F!U!p)qrwZ1pm6w2By zsS&ARl2HQ{T1}@(R6p*Ht^-HL6;T*j!hkOT*LwSS)_Df2ByMxuO*ZWkK DOfo_P%cQBFR%D zoSx+|alwrTJN~uc5j#@LGxAcP(OeATS$_>SAHYa(iXo z)aR^HZ2>+LAyg3YQ7ce_^@u1xm zeF0DtFY$5<&@Xmt&~6=VjP=bs*Q|$~Q~fuQ+m2<1{yS}A${MDr1s+hkmPLmx9~p=K zn@G#$Cjqo{7z)@j+!YE+dlhlUhT1e0wGSC}Yxm2hab$bB#2b~Sh= zcbcd=HZ|I@QS#xadx~i1wUvf=n%yQ!Z2|2y6U_nhpb;w$$engXq33R)PArz8%liQ4 zO%%X(5MrAusDU2rPNG~{pJj$$u`lf01{iTO!{&?XhsD$tS|p`>UHc8)!IS!s_3m~T zF+mq70`j~&0XCSjzzw~$=%Wzcs=oo>Gk}XTQys+6=Hn!{(fHg+Z9rYp%bnNV>7#+ zk~bfBVD@y;IAid*(W#6RU9m>B!hkl`TQHBMZ~3h~MA} zxUbZeR>h<1CghbG*7j`Op~b;j1wd>A0`EPxDpO9N#Ev_43}#+v>@ucMO;18^F%hh# zD2|Z{bb=8?e~{f?zUf7FuBB@P#&|s36EQIZuzivr5mSY?U3z&Jmsr6;1XtZSVCTE$ z(%|Ym={*jJM2XwO^z?NM@i8#99yW(pHbkl;ju;TQ+5o!;z#?qV%C-T_qJeeP1W$ef zG7u{B#o#*D!iO|m0y$6$Ys`#EHgKw=_%^YAP=BVZbMl5W$@}^<=pTjri~CZs@|J=8 z@Ijv=HJ7A1a|@s-bNF}paz}K(=agg9G}TpS6kaxe0b*?)V5OvI7ro-fd7jc5ro379 zFBQoh0h9BtaDMZtU@4{Jm4SK>@Pp`fj}Ru1Y`%sPESdr+_4 z9DpnCXX~wSE1K@SgwMU@E?x=+S%h`R|hTFPtg;Mfon{i=q&hQ>W{$icQVxxB)D~wI6nEUa%DNGt$Cw4WQ{nSQ9T4uk1=K9Tj z)}nU-X3rbiU|@Q>3!?``+dAaYRYt<0u%a>x&d4F=nfE=)DCipNnD;Z3{<~Dv(rAYt zUFnrI!MEXPl#Z?fww@!H1z+04OC$9yU8;f0-8W?7SWiB&M*->vM%DTq2r6f(lsq+m@uZO zmk@2s_VeV)YEuwg7r8s!D6VF-!}VMI;Nnk?r3c3=Vz$}ETT6gn`NMn|N)Zv~n2+js zyx`40afA?G8HhJsWp#2;dmPL(=^qn~?iLXqS+&@@g18iFKXLM*mhI8uYMofd7=5vg zciAP7qMjx=D}1z6XkY3O%h<^E+sF&MWM}N*KXk!@F`ejjoS1Kp*(GXy*%Ju%`2JFa zzp*HN)durBbcim=$}5ngMhbWwq&tF8yu-W-fy8RlrJG3|uIH6ZSM$-AsmC)p+uT^! z(WOg$Or3o-@AQ7XKRmWxOusmOdA+;E{JcMFDd`-@otWhNXxFMd9G!gBZqf*w0!#<+yHIW_Bm@By>;^-mmT+zmW{o0N|Q;Aw+yI*WWQQ>zMh1z?*|xV z>b)9adeZ};H96fL^S|WQs!!{}38b2QJ0ElZhW#|rD;xp9t>k*G*(A;z?xnMyLeAhE6qYpo4H@Lq?2h5aCA)dt|*dH4XE?g3{0 zAZ@h6`EqGk-*BHMc7>t(c9X?ngJ+njzUeyTfPo+p_uUZd=F8uE+u86NC2FQ}m=7WV z#3`5|ix2?}H-AqT4zQR$&oNeO^^LxAQR{nk%Qb4`@_msOPh;R)`ZaL2PyYjc34fg} z8a1sEJ&Ke#ysg0>CI(VKlL1p(Y$Dp0%MvVI!_C*99-NXHy>L2gZw=sGDFEmj7fgj= zF{m9)s1L%d_hy3?RNycvv8UVafMvS%QG*an@t%}0E=_4;UYeCai861D36=mY3rR5@ zz{NUYW5TP#Mhd3lNO%S55w;(`q+`8^12sDv>9K+XH7Xy@0ZW46Y637RJ7b;xCp##< zVFSIM`uxguaC@N^Ew*N6%yH8tClDoa=X^Q-aPxHoBDl_(A%Fpq6qX9n_u=#aPU`VF zH(0&EO`fVG1|WiDO5wuqjXE+GGYWdxi^J%EDdu$>)T~!^D?xWnN(z_+wfBt*vnj6; zRTgEk^_!$?Q<>^o<0l4|;br!t=RcNmYdQPD zmGRIW96Fqtw(m)SK?FZn%%ik)8c+39R!^23R*%V8Mgt>TL^Xlw-NiCOK~+GRWKXFKF*@zH zhLpvCf)r3L1wPP$d>Uz%h(LlPRqT%-5MF8ipzs>BMw^o9=shV6PnTCXy+CBGgQK5$ zlsbi!!_D2`tV2V}!8wpjm5bz(4mJ!aE7NrlPv8hwNZ>@#e=eCsNpXE~82ODiVYa~z zuU$kv!7;Mttk-hm*C6lId{m4FCtZQI-zFa(I`5I?lc$U~TQ1#R&mxq6Y3Cz*m zkUjM9LcSztU~0lbamB81Id1{UR*AynA?IP8wp4qpwr*ol(RFJ}bqgeIMj}P;7gF6U zsX6-Rn>pm%(ABObgjs!ToC;~G-EzO;GdQwPPJ4wFi93sdD_*Wx zd})P2X1`pcf3{(rran-cU(RwY;(uzxnEtY1N!qq6^vEHXWaoTp9b}sj5QG&PY7H{2 zr4R1bSxD8GgXz|gPAk5f;Slx84Jjz!V`^@B4|yKMiw`xIL?RfCVQfH##$Ik~&zZ03_q4G7>7w&q+IMpCE~ua!&I4lQqnT zsXyi=H=Qum_JwM%3-O1%hJ_>_gTi@(^G`JF(x^I8rdD`_1beAp*r=w{fu(O0?Glbx zo!NFIT*B1CM3%Ax6$qdAJeDcPQDGL^VUPxfRd(5WbiKrO4|0tY0xXS{ta*rEJtrqe z>E3!w-^4t0KE>1MuUXc@KLGILrdO$hkK<8zx^~!lYKh7>X?fHm%ZfTp(Uz&BW}lA) z?KrSV#Id6zh-F3Vju>MOmyHoXhVeXDD?oDWbWx_|Qtt?}yf76%txjGJL;a%NnMu95 zXp>sb(JC3F{eof|_+50lxRtD|CCX2D1+7h|n1_0SFq(E?ZLS&JdV?4Z8roTrqly=bSLOwr^|hvUfsOxeD-l;u%szVms@Id=MIR%_RE?w z-G&_2S$?`W(qpgUjNZ&JyWQBE|F(z=S0xnwL^ph_t%$^uUq*>xq{BJXPg3Yv1ciF% z7<(j*197Em>S(Bl-;==mEhJZ>0>8Pd}Ah2IZi?cGfwdoXQ!=wOU^nPqF}&v zFxaL`N`(Q60s}Ph{!Whzf)4gQ!%aVqHk`>z0cqVSje#G4^HzHP^?FjquRt**Kjmn2WDP?<}e z;-T;@_-(F)9lN22{5&hR$;^qNi&Q+Iuw~$Nfh%-({sDALdb_Yu;EP$Z>+Q|G?m7$R zNH5E&6QYa9(t94gZsL*)+w`vO^Y(e59IWkoe_4S&;NwQW8nC~zTHLOEvQnAs9=}X- zD^hpwjurazvrYQ_18JB9QJ7XC4w+vfpnN?k0>3754n$nbNHi`wk{MAP2+bU#K+8xL z-dn_L_l8<2P|lKKVbtvQy_*}+Sss}^_NsiQGQs_qEoCA~DKYpGEqDMWL;xj8fnc>9 z6R3lW5k;v`uK~ZZq(L65XTTWP*%I?+HB-*Q0cD<}TRdOp>B}lVm198HPgIa}&1Z(& zA3{zb3@G9LjPt~#L1kwh=%2R+GjUpGdQ|Zs#_>t+#-b_dlmt|)m2`}Tf?d$aEM(xw z4fx<$s^aiz84`q)ei?HK(*)S#F${VI`p`)~lcTEpVcjn>3rFAJ-*r-9p1-FGDFK+O z(1V)fB}K(_iS#>cWmbyE&<~(9|M`mnJ8+pyYrctLbhIQ)IyOqzVmD+RNG=9CvYJ3g z&ktar7bMX~)-Z(DBDNepg0~e_gGD!2gJrHT=IA=ZU}Ed5LH&$o!MaUk=^=0PH-gqO zkR0F_q#W>z*I=B%9Q|%d4OSs8qJ^`pKt7)PN!<1oPyWZsqLxBTO7>owT4HjHN@Yk~ znyN;baf(S*fqX=2(yvDH2CA!|SOQY~nS|uInO;Z4!a%|TAK z2h;Sv8Cr1BDZgLf43V}fdxW6^GPyB#Ueo(d;>ENGdzxo6YWtg`>l1V7Q_fpMzP+zf zrWx#UUs7&l$e=zEn2B;R5D6ezR%2bQH)kD>|TMZa>3U!1~o3D%(m> z*_5Dam|z1DS&(E_$>~M9_kbJn(~`uqO3Z;Lei6lcy{S1ZGos7D@CuGz3HoFY+EmLOHEuGl7TIxsZ5sQupj&m=Zh*8R2*n345v4-hQ2 zenlvc`BSx?5PYTSvPH>l!oDPeOUs{^l%v-5@ixjewd(M8boYAy_a=|8XREu9n!dB+ zvyWHH-R8yU$pP5NwbSSR;qJ2oCto{vIcu)P`jo8txob(yonzJcr~R>S=fx~&>;0)u z6YqQexWZPP1%xUI_U!i_ zhV>5~teKS9dZMvBE_y4VAfkTcP^A?U)K99B@gX)L2^ zIxvEBRR1h(NJ}7n#7JO`=eG*pmkjj>a0wDb}(0WL9>^N*7XK*njVUnID z7&Deyc6@h`6NEU*h=`yXGI|7QI1&6zR12ccLiHOoVHY(R9+iF!6z% zW5|=fJcPd7( zoWO^#y+B*+(v?5okzZ*r75Z&JlLrjr&zmXcoU9stA(an8|HY=@jF<{m=>XH#r!rR} zlCNRAS*$j$B!cHyC-`>asmszC{~N_*9{w%7QsOP@IX|g|w+zhRCtOk_dHxMyr>3URmTkwB}?T zq-n4w`Faw%24dt$hxhip%*Hp8sr5Flw&y=)q*=fH%jAG=H24mguh`H4{-3;{ze3GU zX2#aWbbtN+6=gnCACJUhL+(U-;e&Q`ePh{;CE3`Tv`SnjHp))IZfHD{S7BmIXv0DR zBH_4KATRonDqzc#G{X-J(|#8VL0o@~H%&IaL{za)oM|PY;Q|vW`q5re@|fe}aqDzF z)1Kxbng-RAkfPfmcf*qvwUkCYo8oK9PR{HlE0z?6U<_gN3`PAWxtiW4xFI#I%tPJn@&r#B-3 z(HTs#gsX~&!6Zi^Xw@IVdEAG*M$T7&ne?;4$rGbMm# z%mK;8jZ2)T$u@ENFmf;R`K_v#%A=?oQ@Yx9%{XPT!HaoHzSSXk&@EfSP*vY4c(r;% zvrS4&PZ#r$bv1hzCC_!_n(i#+gv1?whtLK$ShzN?pcwTW#UO1!2Yzo)pqP}8gZXu) zpeUtA$hNN$b-~CB;0L5YEWR_`4=pF-O+QeZf$b|rKAlQ ziK61ge5~&0`#ai(Zs*6<$u-;Y9NBeGU+3HNXlm!@HRpZx&Ke3`hxg6RaU$BL_x+)4 zEY8X*Hcr|VL3qto<+kA^X{5eC?CUikUv?k8Kwkns!jVhq#pn=_jwb#|k8|~T&nmXs zz_&K;PRr#Myz6G-nDi=AiXS_Q-Q7kLPXzK+H z!bW?H@q<=w#y701dP^^uNA?-Y4wm{=ldit^An+hY$k`PDiBC9;1VAwB$CWQY?DHXo zB@m8x4HQT7ie2Us;t|A_t7TYgf@th{HzEA}ZO3nS^9~RUFAEI(ho*;dczMeJZv7B&NNBY6fH0H~ zEurjR8deucnM;|haKOkSD(y&#d(r)q;k9IMt|PdvfR3QwVl}T{lQ=WUjSq$V>mVNS zs4YFra@M-+63QJH+?5@5=AS-a%S>i#+iX`7A$qc2^RZy{^80GuFv%3w*OUP~gP*|jI-BV$~Nor2a7G+yt@ zijcZja$_RRGb{>qrb5Y`s(6*Tb&HLjl`(BDZ^`%x^)2DqjY2D0Fjb=XNQ38cqhjvV z=Say_Jr$IEc@|w?$^=W^8C_l%RsdPYG)QMTU2WP)ZCdUmHD5!-ejk$F8U@8||6xnG zeLwX3%J&cx?4(0Ol#=@Nwx~+TiF6T7jFsvdsp~SPo1l(QpWs!h~eM{Ygm`r~0^To*OK{n<$Bx zEuWE&(0do%K%0r?G|>taf4g9a=h!^C>Zf3!)rJZsacU*XjDRx4r+Fsz(dg3nCc`jK zV;5Lcsrte5YV2n4Q{iRW!#i;exiNMVnTM>S%jd}8`EM&$+I^JuZ{m~_FJt$#<3-1| z19Kj-Arz^p(NTfLg!@GXI-HC%_-9t5#P2`5?&yt}Ew)9>a3sYLaYo9y6r>sD^st0i zj!nx_;i1beXLRSE(sHMj0Y9|MuCw9Ik2r#wAD9;RQ=ZH@B_4-z?ZN!I5uB@~{9*Gh zL*r0sN!tvIIPWgewms(^3EWLjlRL&Jt==Zn8&Ov$zgo{k4Gt|k$NFULEW*xnT}j3_ zls%^5%ujtPk^S^Cveq_l0_N(^?P2H3UZQX$Ct#aOME){^HI&4v7rB%^H7Zc8s-UJG{i^aW5$e@fWJylQZf z_F{LRW;_@nGEz!+46R}NWv4@H*~|VC0YCe-VI)u8+QlN+q=APVq+O

TH2CSf@hs z62@b_dK#Pis+|Z1c4gj1?vxF(!J$bL+=9f|r%=5VELno9vA*KEHd1}vd|cwsn>8vOgfX2Ul1E7< z{N5cMi%rOwu2>^GrMo(pO;9qUwwEUU9npyx#iR4(y~+4TY}6Va_%!Tqc;x_CjZ~<~ zU$wy7zgyx-5Uz^jA`D?f8y?FP5VBMU!kFmp-hU1#al{m2y8F_3mm zlJ~Cfi0iHEA8e04gfcmL6TBFVlIO-_`%n=&8%3P5ZnRSnL`bk5s$Y$(cTGPz05#2JQxJPj#CjB~Pp)QtBMV8nw1rY&IO3}UZeaM!Or7EvCd%;5e z{hZqXGy%Z^<#U;1~!4oEwgE8 zdy|84O^)^SsZT|qd#IYXCh;-Uihwft0T~`>=~n(~jh<@D0wGAS63-1>NwXBccB@F6 zd!4BbDlh0BH>0g(zhC<@W!P?cxwuHpC>1GD$e0m%M<0404bNJiKj|zGw zn46kfjUcRmJ7RIXT|0c~twTLPkL`~-9H}hjckcJ7gYM`!xTO{%=&fw=ov0-ia?bddiPFQyS()o(@ibs+G$JTl#>I!AAVjb*E}(L9w;-_%w%DWRBHM*kziM1~NA84JFje^xYx2|wjT$v$=G(ctF}ucb(3_CQ=ZAn&xRZa060|&@WKKCo zzbreYm^o>Jvs~It1l(#Z3)83o_ac`R?;~1H1_hAA2E482y0Ruijgqb4KRqJuZ&}<_ zk_v&D^GVE6!Lc`E?wud2po#W%fe*t2wm3vkUyoP$>RX6!i3;=g&$WupaW+@;qlvfs zv1n3am&0q1-GS+Ik2>)~pQFtWt`?&A9++XBV?BvLGkJ#JqCaVuVc*{IC8v(2dYW_r z{CEa<;YvP2zc!DYcED_y`v-@l?!M05>D=v4KarI-X+QgrA;Oku(fq8YzMj*x% zHh*;p8d5Mr#7q)z-)CQiyxyGr9RdH3s!ZmK+6Mfk!&i&|0LcGPWix#TVjR8XHv=d|ceh@%e*Kn{Zk$j$l6~Dr4I5g+z{-YXno2^Zz4Id{ zpIDQ0|Hx_$2R3w-E}8Z6iE~9aEbR1a1&pqXtBiP!%$Mjc zN{7@9+zw9|-6PYv%5y2CH9$6|s-D%sg^>j(qlP-l$HXup`qH~dcDZTs{9*m_K?-kA ziT7ht(eAl1vBP&YpYC}PEIp(LH;cNN?j;c!x*96y24is|%RxPUX>PG8xA@)W(~9$% z8&mgz46ZPA`0nLq)@lBH*^y5y{;E&6T%BBnu$~WWNh@*=w*%T}U0uc6^xc3oyN8El zBGugUToZSaiPzOccSCzsaS$rUjxYE{8@29k+S3|o&VF04$vL!H=E;G;yI4<$iX!K% z;UZY4Ol?%1d?|tKcqQkG0|7IGEs}|m%(Lg{HoDL)UMydItkBeYC-7I|N?CwJ@K(kSysD*)MME3>AWhkN}ZaF^yVuIHM|p;GWMk`Mn0+wK5?9 zm05?KOHI}Q6D2EgZmN24S{21x?0(CobGgys3IicP7B6z5#DqpGZ(WHPLc1I}ct5-E z2taFLlR{{7Cg47IOl3&fZAMXt^vwzZ6<}-oOz&_gykL)%+Uc3vI*4N&GDK*NKlw)q z`%SNXhuR}0BY_)TXIvv#d2+(8#6fGtS52xbhsFH030-S1TII?D{t)WYyJufR#coiG2 zJ-8I1fV{zPe%`IWmk!NVO|Hc-`!@B@KY+0o-Qqx%- z&n9ydIAZs88`L5008^|W_XsJ=U6m1jy5|hDWBaI#Qm-Yx4gp+;(y%e9;op;*fmt<@ z3PA|%Y>B|WQv)tU2JuLUgguz$89Ax$MDv%B+&BlH`NS6*nIWtiT6i(Njd?cY-5hFJRDk2|Eee5C3ENrls4 z)Kz`MU4M=~r=DYl1=>`rkN4~#uGoS8aj`8#X`mXBr(H*uPP@btloerjE?o^NBj&>z z5sw<2)D`!wKD~l5n`63c@w|2@nh9xNavy@fEuzS_%8~5QPY44d3&pqDBuzMpJQ$;v z>W9CvRevwEL^#NzI*?8ND0t;>@I`PU1Vn!GnOcyNxATJopB`o*G$7F6!m~}?K6Cbd z`C`jAG-0}ri)yxvC=IJj+vUyBd()0LSl+H|o_9(m$XekM8{d3}hkAa_F5K}Ve(HS8 zAU>lEcK(2B@IrK#bi4+&$;2Abn-H3vT-qL~3=#%S!cP@{#|baZ9#O<;=%d(DOcSc2 zTAD`cPyB{g$PhT-33vE@2FTUoH};)PV~}igntFZCWN(CQ;1*JYdpRG$j^?~s0na_J zfm|6+ zmQ(rwimriUGcQl~?K0cCj2f1abtCWt$vI*Jk#sJ4lmSrBh$dBv-QjP=wTidQ@}_ue zaKiNC&-6B@D}w2U=|B6#u~as@aa02qh=8-HT1s3Z%4dEV5#wkog&=s^nbX=iLkwn9 zEmPS6JavaWFeYks^BaT@VkXR(P*$n}&=a}per2XKqp>y_8+F1qIzAlbC-AS3Rke2X zm&xQ+hy8S741o*W>5drQaUby(Er8-bTeF*A%jIo>(g8FATpIs1pbiq}yt5QYxU@!! zO%p;^Ug>S+iR#&xsZFkN1@t783Q*<>ZA?dogDcEcWc|8cXa+MV8vg(@`d+AZft3O# zdJZ+!XaCi3(ZA;4G+d@HKc1C(PmXo;7Cs0M_}#+BuDF^#@bKAe?n>{jReSj$j~<5X ztBTgVjhwxnlzQu?d+XvgT%J}!gt~2M0z!UJtg)lAP&$Dbh$P?8_mwK(8X=?f08bZ4 zxTC8mk;4f^Q10uq%ja{$lawWe>I((m@CSVng}^C~7{YAxTa{Y5<1>EI^#y;?mCEIF zVV!WQmFG8?H;rUA@mM~NJkYhAUaZ-lx>8>#JPeK~UtLi>)U9$h#q-?M z(#ie)=Ey3VPtMAwpGm2^AWUu=0Kb?Rjz;dQm^~K;`A`YMl78 zv~my{DKgBgw77qEL-t+{?#LCs!Y8>#OdZ{0%o*%22rCr}>h?usvrFMHS0??9fb-j( z^#OTV4m?vwygH)*S`Z?IJJdABN~Xiz#was~tO6IehAJ1g(17x{nEujif}ypAfRg}M zw}yJS8p@5jb9;|HBBxTpwwu-6`qiuUMRxtAdV$_YpIO-VVjNIuD(DOqc1w-za`RyQ zS;*c26wE!Rjrv~qS=g!!6}S2Np3_6sFw8NE9HGi<83Vb29O8KH^@|2X!Ejeak@2`q(|sXX9zCx6lbb|g zpqDkd>BW?8Ic$2Dm8#6%{e6eDI0bVy;}$_0o?IdCg+btS96cL!E}ro_I@sHdr$E_OaH*Ph45q29JObYa^aa=&!M`3GvVxBRlV6{nT-MdObm zE?K6@y*^x>;=~3tMV~XVek(xhykbK%@>@?|D2|z80zr@`_rvG_K1O8Ot3t{T4U}SV zJAaRel4O=*DxUGONKUQ&72`mcRBwP)(%|7=HLW+I1oCy6OK?mlvQ9;nP0$HSS7R~7 z{q8oF#;x+Ag=f2ToWgY9!79RfZ@2Rj>$YIpDi7WJf|_U`Jev{R2Ee%udRFPTQOX`A z=3D2Vhy_?{eoC&DwM9=86BX~pvq__Ti}ps9eB*R@eHUi=nJ1B)Ep`@zVrC0-P^t%m zskDhh6}N_2UPue?>1yIX(;E1VQ8Uol5*56StBzmWvO44uNZXYRHLQh8Ew7YCZBX7n zWj@`wYaQno!YgUD1{2N#0^TirJ68>OMr$C8!6wMyditNH`|pO!(gf!6&v~u(31*Eg z(89%-MvdapvT{0xec5p`C$mLhW(z6y+#P|^3X7EJw~dO?8MTJwUZo$wn)@F|E`Z4E zS?;M_I2O;P90fdx_@WJGZM%69H^oS(FnJyXsWz72EGjECzh->u9xqgzvFc{QDm!a5 z?+hdNjG?wqn`I`8FD4E-k#I}LlkFliszyP%oRF+C)taO!NfQ!;N@uZz=^;;wPs26T zfS*-$I1g0@B{Su*be9n$KkR2`Bu0_1Y&fm1k@`7jv&ScvDKg{{gHeG_hSlo2Ic9wu zmzzqZE1l3B9LFAS=Fkkm3RO=L97X*N*F9AQMVow&(j)9Yu87WSw1`zVniL8)s> z!~}{$Mvsas_DWu{#Yyal^j3ZOm2GrS1^wry%crQ7Yh((}8y?l=zm9*9tBYhqd__iF zzBVU_{$4cwsj&D*ru*L|7ymoo{jY+H@`P@gzX}b++64Ew#5IY7re?H3XJEDTxcO6l zTh}jyC-^ls4H_a=n}?0c#2Y?8nttYtH_ejs(i`K63DQu(i?OoHwudy$&yMqiX+d)^ zfeOHIjnUgyRhiJSXY>fWUok+b(fV@tE{`zpoLc2RE-@D6P0-ZD}B^q+X1^Y`}=Z5kuoDG z<9h|ebg75!Rar9^={mOkD&VzjMI2D5efs)5nMJMC+}2t40l!O%w{o$Y$)I791U-%d zF`gmi^U)xK@28>yEB}2|75L0J6V@$?j|E?PTnr zXzb+lXAMsGAI=$Q4a{xMl*T32}VUgFI68aJFgvl$GN~`?<*y2La4`x?*Sj@DPk{`7t@^rD^x;e?i!S)#E#Y*V) zJpu&doXVjsV3b=xtB>PXnZXutar8{q!yVZg+DazkT$`2{CGgAP5@qUf(+H+26v47X z<*`!AD~hDy?;GQc8#e4r9No{v;UljL+Fk6bhWV4%^WMVG?3<#cEV|#gTPVRh2$b~C zl_u`@jsad=Pes*{UvqbhZl}xr%P3bJt zl(n`-cT$_x)K0tPFia@T@A7Fc)8D~Ip@C)t6Gim19&gFRw>fpTtet?|^i!Z+BQXU{ ziwZzjhUvx6jo?3GK04MdP>zm6c$#02d%kwc2s+I$&s+AC?jm_!_fD1vf7C5p!!49w z<5Ie6LH@c)u2FsFtSGq=zWRW89iw$w0#-6TuH7uP*(#VM@5Oyoga-dWJGP_CL0Ban z!{n3m)PT{Op$)gntRiKLRmM`UYPy zRl2{Le^ky$$7a%_2Ypq};Kg0S4!|Rc5>SZ+)X$WKUNpMWrS+BZ#aX)`DZgK`h_jj} zNv>kyy5UVmjqm7J8Ql$3Ac>&ir{lxhucxUTSp#;o&)IXMl^>XH^bU;8lv3ln>W>*(wJ7P+Fv9`F$fT=NSWCYjw#== z!S|oV=7&bh^W5$zi*3V+qJ}9k`L032t@@4f#&h2wK6of~MC=Yi2U}jhGn9EtpW?s0cIC6jDn@B9lkBq3~P3ioa z>VFo3|9324{BJDy{|^fa3yVu7zU<}tSCI=606Bo6v!j!(wVJgRow<{-^~sD{NQk5s$2NUmT3iIkJ@q(xthTY_jNKLnCFPM7=v!K5Su!K`&%rtw2) zXx?s|gzut*`@AMQgbF5Wd$l6RJF0!V;plr6SX&x*z#R6zfE|tSuQTpnAgfM8_c(TH z+jd`-548!T$Zrwf{fvR?D@!L01`=vzPM+|+OkTy>$s;U7J!(!tYBV{GQSx_Nw(_x* z)moGD-9(mgOkFU>jbhVG_mZZ#GgBob^TZhv82A&D7!QNkHx{UDmd@+>;>tiuhO&Zmw^2s%%{UrCYpr5qd^f+*fuqrT|9eDpYe*Plxz0{Wn>v(r$z-|fT#px#B9yT6*f_l z9>+pAu;SD&Wz+l~a+n}FofzKeSn)3};Z8j#o7&cpnV#5qbEql4MVA{?4}DnO0&0Yx zcf!H)j@T*m=U?K>8!*RK=9a!o;Gx9Bc>>kGV}FyT^*dBZ$+&4lcG8Ie=D9;Gg{K4~ z@SG~hHK@UBl6^U0JEi-V6CgJ&V^abR08qsKuQ1{-clrMoBmV5~?6M+$=;VF++xfT3 z))H$b7`wI$8;}W4t&=Vpd4gfX0t(BA)7Bo%OClD!e!hnkZ5R*N&gSW^0Ijba#Px2s z@iM(`mn=&A<(MPCQftNB)vyXM6OY~ZhVGL~bNA!E-(3TXqXq>-z$CV=r)(sMwseDc zwCTo(m<2}iQAPUnW3^zv?|O}kwEzm#RNlPKdvMI?u;6^m(?%z=XiHBnHga&Z(o?_g zob5PNXsb~k5_snn@Fh zh@7&6D^z(9D*`-XEoN1XtqhV&2Qa<@dY7zedOdZg30bV=^*`D>>!_->?T^!aXb=!M zbV_%JbO?fUcc(O>q=ZO!Bi+&{B@H6ojewGRKpI4TNA7zMIG6k4&)*pLFc<^I9_usq zTIajhUURNB=PU<(Ha9;d3_cOF)n{$AU?GN6RHxWtlK%NQFtq3RUHVdmQ#;oOj0$8~ zN)Hmd@%PfPCkzLgHEr`0APwjU6JWT+vz_ebjta)KsGe#vf@k_cUvb zd|$4Xi>Vl)M_h2kz^9c?OA_iLB$NxUjZ$vex#csiYbX?V}lwosJVWjkwBaWIBKxR1wGhh2L7b zKcFxC=;UJYC`}@1_rt`fS-kh?C%Vo{9$TqriG;*F#Cv?@1Z$2ISQ6-bAhAU_Gc-N_ zqOzjkF{q!1^|*+Jwz%VG>FE`X^g@T9ho_H}tYHS32507Dj9TUqQKwhdqNO8~y#jKm zaz{{{lSAOmlx@$~+djXI9ckZ8uk#dHC5g`NxVIVve1CxFkKd^+g7g+gw39`=cDrW| z3S`=yaPAa$>eS?`Oyl~+0Qu?O_a*iw)ECXfdur~#q`IF0RXXW9#i);M5D}U}=-etg z4C{$Kc|)v{Q+#t_v|k%x!QVeXjzsNkV`Bwq*U$~(szlYPQQD;d>nFWV`r#&U+Y zWd|^M%4LhhLx`YX;ows=ex1pPggxNO4_SK0EZ94#dxRava*P6k3UG*D+lm%r*A|2V zkgG*X%u5dO%7`uU6ycoYVh7F1&$>UTt!^f=9opBEF&AZMo?8q{#BeKABwwt5b3gBu zkP2XnUSe-~(uf0E4!;WE*rSRG$A`2_n0x;;A+iNkqclkq%I_K9nO?yB6e~a@Stq}Y zAjvY!E;Zv#>R8d|PeOC7dzVL+4`YW;qMLPpzgi~@Nl z2VMtj{>Ln_4CuD`e9|D?k5Wa*uOkmxs%z9WYm(n`USW;vf<;incj7J<~yy-iH7O|{h z6Q`AoB#Sq^`aN0>F)}F_`y|SO4aw5u^bk|!9yQwYeUmj>7mmf%c%lahZ8Das(beeT zTkeL%>||-UBdHVW^z7)YXo_CtlkAfkSQLdF+`MaF+?Ruuf}S`>%l6gm)RGR)&AZBM zE4G|$Cn~`PO)Ce;hch1*K+#hS++JpI3v7rRD z(j=|P0i*n|7BQ>~IgGHri~^E%cz~5N?TS+=4u2Zvwn-;2Tr7DkwWU3XS)X1O=Q8M~w^Rm?5 z7e}yX!%CJBBTTHsr+w%b0Eaq}H#$2brc>T2TvAh*q7)6r3NZKuSds=CuulRn+*4m? z+hcz!+W0;aEdOJ+N#Q7)VY7t7mdpanw^;dku>~_3XO!Xo$1m?P?S-Xmh)yC3ozY7t zxJskg-XA<94kLOb29>VtzbYXVu)YM%U$7|28xBqFpWATR{{HLaF@MizoRc1f@pa7X zhWeex8ua%)MWV0lDTpc&oeb=?4XXIxWj0xvG+X%nKn|F<&;GUQD+XFL=qSKM(Q@f9 zJS<;E%vITwcp=fn4VCg>A@E}MLeos z&*qiU7HZ7VmwToI*oiDZc#vv!%GT@vgDz)Ilzyd>`H|w|4q+2x^D6vAU1)xbbW}(w zC0!#V(QhP=@9qdMie-~zU;A}j8c3~su6|ONP74t2kY89Z5GNg95VLUE{_eUa;@c|! z0dL_2z-OkmjNBj|4{0Sycci2??AI#B_N$3Ai(KD*pM2=KFmrtA2g5^H^7WVLhSu2D zSY3XDzQ&&l5{y?v%NnK~2M9;L=G*ba0e5vrw3R&^#6Azei}DthJ()uV<^QZR$5P}m z53@<(=z5#~q>==&v^&G=CC`Li5B$=8;t!3K1aAS}p!Z4$xK@W>he$(mzjq0sKVvjK z>t^R#EgpT%V8)t-R5U_T$ahR~NW0WBs>)a)lp8|l?S#10?AEOVLZw$uI6;G=UW*X} zG)j4gA_`iz_W9G|kD;^1@4=;?PG-qS#BVKk`DKs}B8plowsMx%T%`F%7rX(Uz`Af% zlj@YTx$!5`*5Y4u1dxOQyOF5~q73^e=c||+6mvvnMyai7@-!!U-fNeC*;JT`E5!~m z2#ZI1n*sZ+d;Yi(O(m~sYiH-@;Vz9%j-XK7zHD-SLlXvUfEE^>`$wWehIxMV);0h+ z@gubX<=W7#7`8Q1v-iRwuYR__=-e}|;Kw-pe!sO_k*z4sM5?6myc#QizDJEUdi&VJVb+=-@0HP z`E2mp>i8+fGF>yG3w9%QzV|%BGiw_@uNXX;7n{TQHnalJ=s*?6-GbdwHds{_6NFs~ zhXh5wBazh3FvhddY+o#&BhTR7-UXCZz{3Qjp~M%l9XqFqg{wfQ=#|m}XglwSiV@8k z?ksqKBZh-Z=Lunp3D(Et@E%{G$AQ${g#kDYHR|^RM|vBwZQ4aWQwBIyb->E6_w-7%YNL3`ThF9k_=yi$+)yv0Pgy z_QLvjIdcxjlcY(GR_bBq$?l8AlN`v z4K1#2tiNooB6%O+!58neOTJ8k;teg0jML%!p$|4}WMAQZ*Zc58;rDG+^^F8xQyN;) zA0mkrQeNR2Yu#HQ<6;DnbLDxSQz%Tum+24>*nLdcb`sc$9tdsXl;mv_U45nYuc`A)PDNw7V9CX2lgV(})Hb7O+VU(InRWHD}((0hC zCqa^|=aSj3*sz}FJvgw}$1+AE(uVlWR?;IS8m`nuZca_ozPxn=HUvg_gwih zMWU!w=8$k0s-$)z2vD5?Qi0>HhN~v4O;`l-t;Xe6HG#8zi@uTx7Funlz|Da&t3H?E z{pkyml-(-g+(Z3VBQ|ZXd%6KdE?+~Jv8JKIjQDBNyJXybrl5^7U(TNLW=RA5015>m z`YhgoZ(o^I&*Y{yk3?ERS=8TK*T^xul$>wO@{al<`IwutU;fdtd`qsp8q^ovwGXK9 z01coFfy%t6wq&q-B}$}eozn6_t-PbrI^ zRST1DJe_S6-1J(C_{`9kMIwzJUXXSnPwCHNWYOam>oV`=AlX0fj26{=ruOh+WlHJA zof{_M`Omhuz&5eiU%MWzqD22&^Vc*|$tI8$vkMgT9I;PtHM45#4YPgO+o@6U3i3yj zzI`$@%t51|MH!{JjF&u-o~=9sn_~|~0K`@`O#Lx&l7`feX7zQBesOo>z3N332!&^= z`9vY$8i_F=(Ie|2MoOY9m_+x$B`Go6%)msyHSTb_XGrpSMCQxvi0#TxtEC$lYSHQE zRSd0KxWn9?%Khe`Dav&!3s!$@-8KZ(Y>sxs&2r-SQEY^`ROoHbjC@4qdS4!(xzWPn z`tcba?m~a_?AHU4u#r*n>>r^L9ai}0>f_|Z_RwPC?tn|2#_h)XM&O+ugyukF$|&%a zIq>hFy^LJH&vO5_LueZzfDTTn0AJxh8q2gXyu#^+^7so(H*Z*8>C_Kq;1VgKm|vV% zhB>JlRg)|6gfxlVkMuSi3nIb1nc~EOS6}IZ%~ce=p`2oA8JXY{wLHcr+58l^&pXK( z1l@LPt!mpe^+pMH0-hMK2{j5#jPvPM517f4|0E-I5SyX}`ro_M?Liei5wKspv!mgC zZ;|)GSCsx*F#l6;O{2tqr&tOC1^q%yZY-zCuM`8w=0w?8Wlfoptok=n3fNfEUx4&B z>AzWd>?a)y<F(`W0jwNNOk8BZ$3C}e%_S<`l4dz zb_VRS{1Q@h97;jy5rs}WO8&DBKdcmk_>wPM)0#EpJ?;y#S1sP+7k55^h%sx6nc%_X z1YgAh=NUA0FuC&hv6whGoBg31xWCg2f)y7Sqv$aAJG~(65fE*GWX68dOnk-IZe$Dv z*YYKx(F!-!vR0Uk&GiDrI2Rh51@DH_r-4zVp{w7VLgU?rSzFDhK8TW#4PQ{RP&z$y zsMlhsMP(Ilo7RQ5&01A*wqHQ)0nNPp(2*3@DqM?VhVDbfbV4ucAf@d{FRwgGYM2r; zfh;}R{qNL*{eU0EbjV&r1hgjkPpqQ6C>(Bv)!nM2VnPiKkAM<-Ut0BZx=Ix$$# z;&Jju#!nCOFB%GL;Z2-WTBU@L=jzgH?{yGZ{ffD4x!mIw`m$k4+1YOZ_+zmxm!WN*JEsXO1()pK+j6;JRb$>%wUMLa-=YQ&**`vMv2EZ? z>sO*ifBF6OJTu)(QT6EVZD-ATDA~Dcnz1@%9d@d2nWKXoyUyCF3^&TtF%jXIss@1x zwQ+xp?wLS67Gr$B31*Hund!05pSKua!7!v2ebkbfCWL8>%@heucL#WIVp3GSB{!lr zu3iz`z_!N2r_xbzUbhK~JM(W8QM00haXf*Q}fxi$rb5=uaB4;h;tlh0rAVKk1-cW4@T|__G|81F&t^Dy(KqEE@ALp zc7U&hpJ1{p2**&VX|NW{*$3y}wY1}Ta8?H6!i#JZ&-0PO$kp!QXpb7saR0q^gNMkz zVvg1XVLrUy(!0&+6MbOe_qzuTp~#IQJXkfwPU1mvJs2U0sw){r%OsAYF8A|LtfFyG!biF%URPP1I$!GT z%2PZiI48pKjbN#Z=}kgBkES^!Quki z^E}yHJN!oR3wum8bsX-+dGne9`0M-gKF(am@(GjLFNQNa<~JfRa%YFtwe?k^rI= z*y?ki_48%5hX*zR?>X&^2atl_=VmwzW$6f;9Zs`7b#?-IL2AKb_kjgSW|jQB4#Ac` zg91c6UgcbBn3_za4f@PybYr?V|3nt?bKBLc_BVk0BCafvQ^Vj9mz5iiqPvD=jFe~g zaobqcC%`a`r2vzF56;#8HAbbyh8<3!bn8aX(4dmdK?n?NcFHc=Q(Y9PF-1vsb-QBi zEQVFib;6>@toX#${#1pf5_*{an%!Y3d)Vul1ayiDOuZ%71(e zhv(@pJ7*l^G^;Nxchn=esJPI=F&bPpw~#z2A}?ytij8-VhYUs>=<3kp>Fpb(@1NR7 z+FemJ-bSrD;v@e=0wqmSA^(9jm6c_=vKZm{oXl#0r2dOL?MOA8HPbrqm;8I__~%vd zRSvHIb``7;u7~Q+N+5Olar(k`Qx`dTI&D~zj9_8tU38Xrht)tNMLsfg{|UYbv3R7oCfZ>ykX>^Ww9;JzEWAzlv}i9sd}-FULI%9#T1!V*6KD0JUSYfJp`~gNVS$6i$+el8!{%tZX!zxuz8+OH*)A5 zXiF@z0)4sJfKu}#hLUm_Sh!ptq7Oz`=Jqkw?X3~!sqq-Fd-dyJ|hLsW!J|h z{y38Pufr36r@#h}(my|eLv3L&Y-k9}jmrXY^XY>gn9-XaTKG+&4a>DI>>OQIsws45 zNBByN4|dp)Pk-euh_sh}PnuEX9Dc$@7arjSl!g^q2TkDPzIxr9PXES_mVKx3%NwE3 zws{Zs)^JMRNN}@;=B7{X(4ZwS$`SONW)YXhu}AW2xz|!|x#~H%{IU~0HY$GTKn6TR z7(Y#x`*Fz)2yj1<{EpB15r{Rrph>6O{_Im+LoatE9YT|#M}121JnDO!!=4ul;PB%= zztMCPXem0to%?qxxIRq^t|jufr2-x;unNGZYQZY-&ITE}7^EGs%7u=}6RvSfp*9mq z%PN@kYsy(IJ;(n6EsJ@LG4njX3b+{S3GP=54vUGZB<1E%;UAc(sbFM5O z4z;QKy?U+Cu3ot@KU)<$mPttan4oihVr4J1i+{%c3Q`DtWxF3@`~mf)g^f1F42q=$8O2Cnb83>!EmcnRrN$Nl*AoE4wj zjtL?LJFE?2#s0*}UPumF(a>E&H7l=TBJC2z44;~mR|UZf9h`k{{d{MhO|(v;nExb$ ztGC+UGWa(#h-3SIE(6AF5uE=dgDW54-!k|&GQj2je=Y;pJ%rsOa0f-fE5yIpH2R-b z{JQ^&MfnvlvXDSb91GXq7HZO)txSaIg;zz4TB=9cN1cDLR5GmUrM-wQz@f7PG7oQw zb0zYNmHd`3Aze-YROJLROL2m1Uf7kL88*n4bOmlDgv#Kgbj<4hQ+1}bc$ zEo-36(u$$<$C&)aUepg0GhCH*sSEsh;ClM6^%gV?6F5lW?kbHp^mFy+9W@)3_ODOf^2-dTF!M-C@2OTvPDDDWdP7T&-atDUfNUuPL+Ok}P*nuH+6$fy~2tO#zYINx6E1 zLQ)`;^j%X3sIDlGDf=J+kZFdl0f~%Pfa|0~kWC@enp`(E1|O#dkHb^QBqxvr$QZwC zLZTq#7~C202ML4>b-M)YBD|8H*VDxw7vdOITG`lg_ujwPV(ijRN<+&-^<6ObYe3AjGJ4oSIv==vt* zzAPl=&gb*?sfAkrbx6R~ZQMz@y#s!ef~R>W<<95x_Wtipik=oE^dkow<{8do%GSB~b?o>Q7sXkT-FA*XCw(JN+BY|FMSy+4{Eo`(|rnqZ_UN@Fe|q zhC>2wyAN*yOiUri;Lf@Bw!`fvz}XBEaOc-}+v{}`z-)dKaF-7ZvNyMVCpTG~mUpxM zdV0ETfZt>ZSl`XMHpe0F>$VkllO=9@H|yG_gJj({1#Yrr?eAt?8wQZ9+v~}jEM>== ftlyr;t0&+e5`YH>c0oZ=fPX~6wK{X1e*gD>5A8ge literal 0 HcmV?d00001 diff --git a/space2stats_api/src/space2stats_ingest/METADATA/metadata.ipynb b/space2stats_api/src/space2stats_ingest/METADATA/metadata.ipynb new file mode 100644 index 00000000..01808b1e --- /dev/null +++ b/space2stats_api/src/space2stats_ingest/METADATA/metadata.ipynb @@ -0,0 +1,3586 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Metadata" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook creates a SpatioTemporal Asset Catalog (STAC) catalog and item for the Space2Stats database. It reads the source parquet file and an additional metadata spreadsheet to create STAC compliant metadata." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import Dict\n", + "import requests\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "from shapely.geometry import shape, Polygon\n", + "import h3\n", + "\n", + "import shutil\n", + "import tempfile\n", + "from pathlib import Path\n", + "\n", + "from pystac import Catalog, Item, Asset, CatalogType, get_stac_version\n", + "import fio_stac\n", + "from datetime import datetime, UTC\n", + "import ast\n", + "from os.path import join\n", + "\n", + "import git, os\n", + "git_repo = git.Repo(os.getcwd(), search_parent_directories=True)\n", + "git_root = git_repo.git.rev_parse(\"--show-toplevel\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Current Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "parquet_file = join(git_root, 'postgres', 'space2stats.parquet')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_parquet(parquet_file)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "gdf = df.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "14117882" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(gdf)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "gdf.loc[:, 'geometry'] = gdf.apply(lambda x: Polygon(h3.h3_to_geo_boundary(x['hex_id'], geo_json=True)), axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "gdf = gpd.GeoDataFrame(gdf, geometry='geometry', crs='EPSG:4326')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-179.99999562, -89.98750455, 179.99999096, 89.98750455])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf.total_bounds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create STAC" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0.0\n" + ] + } + ], + "source": [ + "print(get_stac_version())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Content" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For now, metadata fields are managed through an Excel Spreadsheet." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "overview = pd.read_excel(\"Space2Stats Metadata Content.xlsx\", sheet_name=\"DDH Dataset\", index_col=\"Field\")\n", + "nada = pd.read_excel(\"Space2Stats Metadata Content.xlsx\", sheet_name=\"NADA\", index_col=\"Field\")\n", + "feature_catalog = pd.read_excel(\"Space2Stats Metadata Content.xlsx\", sheet_name=\"Feature Catalog\")\n", + "sources = pd.read_excel(\"Space2Stats Metadata Content.xlsx\", sheet_name=\"Sources\")\n", + "sources.loc[:, \"Variables\"] = sources.apply(lambda x: ast.literal_eval(x['Variables']), axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Value
Field
TitleSpace2Stats Database
DescriptionA global dataset of geospatial variables at th...
TTLBen Stewart
Business UnitDECSC
CollaboratorAndres Chamorro
\n", + "
" + ], + "text/plain": [ + " Value\n", + "Field \n", + "Title Space2Stats Database\n", + "Description A global dataset of geospatial variables at th...\n", + "TTL Ben Stewart\n", + "Business Unit DECSC\n", + "Collaborator Andres Chamorro" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "overview.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GroupValue
Field
TitleIdentificationSpace2Stats Database
IdentifierIdentificationGLO_2024_SPACE2STATS_GEO_v01
Hierarchy levelIdentificationdataset
EditionIdentificationv.1
Edition DateIdentification2024-09-06 00:00:00
\n", + "
" + ], + "text/plain": [ + " Group Value\n", + "Field \n", + "Title Identification Space2Stats Database\n", + "Identifier Identification GLO_2024_SPACE2STATS_GEO_v01\n", + "Hierarchy level Identification dataset\n", + "Edition Identification v.1\n", + "Edition Date Identification 2024-09-06 00:00:00" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nada.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
variabledescriptiontypenodata
0hex_idH3 unique identifierstringNaN
1ogc_fidFeature unique identifiernumericNaN
2sum_pop_2020Total population, 2020numericNaN
3sum_pop_f_0_2020Total population female, ages 0 to 1, 2020numericNaN
4sum_pop_f_10_2020Total population female, ages 10 to 15, 2020numericNaN
\n", + "
" + ], + "text/plain": [ + " variable description type \\\n", + "0 hex_id H3 unique identifier string \n", + "1 ogc_fid Feature unique identifier numeric \n", + "2 sum_pop_2020 Total population, 2020 numeric \n", + "3 sum_pop_f_0_2020 Total population female, ages 0 to 1, 2020 numeric \n", + "4 sum_pop_f_10_2020 Total population female, ages 10 to 15, 2020 numeric \n", + "\n", + " nodata \n", + "0 NaN \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "feature_catalog.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ThemeNameDescriptionMethodological NotesVariablesSource DataCitation sourceOrganizationMethodResolution
0DemographicsPopulationGridded population disaggregated by gender.Global raster files are processed for each hex...[sum_pop_2020, sum_pop_f_0_2020, sum_pop_f_10_...WorldPop gridded population, 2020, Unconstrain...Stevens FR, Gaughan AE, Linard C, Tatem AJ (20...World Pop, https://www.worldpop.org/methods/po...sum100 mts
1Socio-economicNighttime LightsSum of luminosity values measured by monthly c...Monthly composites generated by NASA through t...[ntl_sum_yyyymm]World Bank - Light Every Night, https://regist...NaNNASA, World Banksum500 mts
2ExposureFlood AreaArea where flood depth is greater than 50 cm, ...Flood data combines fluvial, pluvial, and coas...[flood_area_100, flood_area_1000]Fathom 3.0 High Resolution Global Flood Maps I...Wing et al. (2024) A 30 m Global Flood Inundat...Fathom, https://www.fathom.global/sum30 mts
3ExposurePopulation Exposed to FloodsPopulation where flood depth is greater than 5...Flood data is intersected with population grid...[flood_pop_100, flood_pop_1000]Fathom 3.0 High Resolution Global Flood Maps I...Wing et al. (2024) A 30 m Global Flood Inundat...Fathom, https://www.fathom.global/sum of intersect30 mts and 100 mts
4ConflictNumber of Conflict EventsSum of conflict events (ACLED).Conflict data is filtered for event types and ...[acled_events_yyyy]Armed Conflict Location and Event Data (ACLED)...https://acleddata.com/article-categories/gener...ACLED, https://acleddata.com/countpoint data
\n", + "
" + ], + "text/plain": [ + " Theme Name \\\n", + "0 Demographics Population \n", + "1 Socio-economic Nighttime Lights \n", + "2 Exposure Flood Area \n", + "3 Exposure Population Exposed to Floods \n", + "4 Conflict Number of Conflict Events \n", + "\n", + " Description \\\n", + "0 Gridded population disaggregated by gender. \n", + "1 Sum of luminosity values measured by monthly c... \n", + "2 Area where flood depth is greater than 50 cm, ... \n", + "3 Population where flood depth is greater than 5... \n", + "4 Sum of conflict events (ACLED). \n", + "\n", + " Methodological Notes \\\n", + "0 Global raster files are processed for each hex... \n", + "1 Monthly composites generated by NASA through t... \n", + "2 Flood data combines fluvial, pluvial, and coas... \n", + "3 Flood data is intersected with population grid... \n", + "4 Conflict data is filtered for event types and ... \n", + "\n", + " Variables \\\n", + "0 [sum_pop_2020, sum_pop_f_0_2020, sum_pop_f_10_... \n", + "1 [ntl_sum_yyyymm] \n", + "2 [flood_area_100, flood_area_1000] \n", + "3 [flood_pop_100, flood_pop_1000] \n", + "4 [acled_events_yyyy] \n", + "\n", + " Source Data \\\n", + "0 WorldPop gridded population, 2020, Unconstrain... \n", + "1 World Bank - Light Every Night, https://regist... \n", + "2 Fathom 3.0 High Resolution Global Flood Maps I... \n", + "3 Fathom 3.0 High Resolution Global Flood Maps I... \n", + "4 Armed Conflict Location and Event Data (ACLED)... \n", + "\n", + " Citation source \\\n", + "0 Stevens FR, Gaughan AE, Linard C, Tatem AJ (20... \n", + "1 NaN \n", + "2 Wing et al. (2024) A 30 m Global Flood Inundat... \n", + "3 Wing et al. (2024) A 30 m Global Flood Inundat... \n", + "4 https://acleddata.com/article-categories/gener... \n", + "\n", + " Organization Method \\\n", + "0 World Pop, https://www.worldpop.org/methods/po... sum \n", + "1 NASA, World Bank sum \n", + "2 Fathom, https://www.fathom.global/ sum \n", + "3 Fathom, https://www.fathom.global/ sum of intersect \n", + "4 ACLED, https://acleddata.com/ count \n", + "\n", + " Resolution \n", + "0 100 mts \n", + "1 500 mts \n", + "2 30 mts \n", + "3 30 mts and 100 mts \n", + "4 point data " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sources.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Catalog \n", + "\n", + "Basic description of project and dataset. \n", + "Can link to World Bank metadata page with appropriate schema (DDH or NADA). \n", + "See for example, https://nada-demo.ihsn.org/index.php/catalog/55/ or https://datacatalog.worldbank.org/search/dataset/0064614/Harmonized-Sub-National-Food-Security-Data" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [], + "source": [ + "catalog = Catalog(\n", + " id=\"space2stats-catalog\", \n", + " description=overview.loc[\"Description Resource\"].values[0],\n", + " title=overview.loc[\"Title\"].values[0],\n", + " extra_fields={\n", + " \"License\": overview.loc[\"License\"].values[0],\n", + " \"Responsible Party\": nada.loc[\"Responsible party\", \"Value\"],\n", + " \"Purpose\": nada.loc[\"Purpose\", \"Value\"],\n", + " \"Keywords\": [\"space2stats\", \"sub-national\", \"h3\", \"hexagons\", \"global\"]\n", + " },\n", + " href=\"https://worldbank.github.io/DECAT_Space2Stats/stac/catalog.json\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### STAC Item\n", + "\n", + "Represent the global H3 parquet file with column descriptions for each variable." + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [], + "source": [ + "data_dict = []\n", + "for column in gdf.columns:\n", + " if column == 'geometry':\n", + " continue\n", + " data_dict.append({\n", + " \"name\": column,\n", + " \"description\": feature_catalog.loc[feature_catalog['variable'] == column, 'description'].values[0],\n", + " \"type\": str(gdf[column].dtype),\n", + " })" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [], + "source": [ + "gdf_types = gdf.dtypes.to_dict()\n", + "gdf_types = {k: str(v) for k, v in gdf_types.items()}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the [table](https://github.com/stac-extensions/table) extension here. Fio-stac also builds `vector:layers` property, not sure if it's necessary." + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "
    \n", + " \n", + " \n", + " \n", + "
  • \n", + " type\n", + " \"Feature\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " stac_version\n", + " \"1.0.0\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " id\n", + " \"space2stats\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " properties\n", + "
      \n", + " \n", + " \n", + " \n", + "
    • \n", + " name\n", + " \"Space2Stats H3 Data\"\n", + "
    • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    • \n", + " description\n", + " \"GeoParquet dataset with h3 hexagons (level 6) covering the globe. Users can access data through an API, specifying variables and areas of interest.\"\n", + "
    • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    • \n", + " table:primary_geometry\n", + " \"geometry\"\n", + "
    • \n", + " \n", + " \n", + " \n", + " \n", + "
    • \n", + " table:columns[] 37 items\n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 0\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"hex_id\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"H3 unique identifier\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"object\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 1\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_0_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 0 to 1, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 2\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_10_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 10 to 15, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 3\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_15_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 15 to 20, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 4\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_1_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 1 to 10, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 5\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_20_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 20 to 25, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 6\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_25_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 25 to 30, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 7\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_30_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 30 to 35, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 8\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_35_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 35 to 40, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 9\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_40_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 40 to 45, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 10\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_45_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 45 to 50, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 11\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_50_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 50 to 55, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 12\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_55_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 55 to 60, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 13\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_5_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 5 to 10, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 14\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_60_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 60 to 65, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 15\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_65_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 65 to 70, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 16\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_70_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 70 to 75, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 17\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_75_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 75 to 80, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 18\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_f_80_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population female, ages 80 and above, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 19\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_0_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 0 to 1, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 20\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_10_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 10 to 15, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 21\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_15_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 15 to 20, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 22\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_1_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 1 to 10, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 23\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_20_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 20 to 25, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 24\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_25_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 25 to 30, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 25\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_30_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 30 to 35, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 26\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_35_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 35 to 40, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 27\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_40_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 40 to 45, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 28\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_45_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 45 to 50, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 29\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_50_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 50 to 55, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 30\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_55_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 55 to 60, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 31\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_5_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 5 to 10, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 32\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_60_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 60 to 65, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 33\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_65_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 65 to 70, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 34\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_70_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 70 to 75, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 35\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_75_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 75 to 80, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " 36\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " name\n", + " \"sum_pop_m_80_2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " description\n", + " \"Total population male, ages 80 and above, 2020\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " type\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + " \n", + "
    • \n", + " \n", + " \n", + " \n", + " \n", + "
    • \n", + " vector:layers\n", + "
        \n", + " \n", + " \n", + " \n", + "
      • \n", + " space2stats\n", + "
          \n", + " \n", + " \n", + " \n", + "
        • \n", + " hex_id\n", + " \"object\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_0_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_10_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_15_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_1_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_20_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_25_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_30_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_35_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_40_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_45_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_50_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_55_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_5_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_60_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_65_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_70_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_75_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_f_80_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_0_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_10_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_15_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_1_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_20_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_25_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_30_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_35_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_40_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_45_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_50_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_55_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_5_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_60_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_65_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_70_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_75_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " sum_pop_m_80_2020\n", + " \"float64\"\n", + "
        • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
        • \n", + " geometry\n", + " \"geometry\"\n", + "
        • \n", + " \n", + " \n", + " \n", + "
        \n", + "
      • \n", + " \n", + " \n", + " \n", + "
      \n", + "
    • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    • \n", + " datetime\n", + " \"2024-10-07T11:21:25.944150Z\"\n", + "
    • \n", + " \n", + " \n", + " \n", + "
    \n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " geometry\n", + "
      \n", + " \n", + " \n", + " \n", + "
    • \n", + " type\n", + " \"Polygon\"\n", + "
    • \n", + " \n", + " \n", + " \n", + " \n", + "
    • \n", + " coordinates[] 1 items\n", + " \n", + "
        \n", + " \n", + " \n", + "
      • \n", + " 0[] 5 items\n", + " \n", + "
          \n", + " \n", + " \n", + "
        • \n", + " 0[] 2 items\n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 0\n", + " -179.99999561620714\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 1\n", + " -89.98750455101016\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
        • \n", + " \n", + " \n", + "
        \n", + " \n", + "
          \n", + " \n", + " \n", + "
        • \n", + " 1[] 2 items\n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 0\n", + " -179.99999561620714\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 1\n", + " 89.98750455101016\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
        • \n", + " \n", + " \n", + "
        \n", + " \n", + "
          \n", + " \n", + " \n", + "
        • \n", + " 2[] 2 items\n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 0\n", + " 179.99999096313272\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 1\n", + " 89.98750455101016\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
        • \n", + " \n", + " \n", + "
        \n", + " \n", + "
          \n", + " \n", + " \n", + "
        • \n", + " 3[] 2 items\n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 0\n", + " 179.99999096313272\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 1\n", + " -89.98750455101016\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
        • \n", + " \n", + " \n", + "
        \n", + " \n", + "
          \n", + " \n", + " \n", + "
        • \n", + " 4[] 2 items\n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 0\n", + " -179.99999561620714\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
            \n", + " \n", + " \n", + " \n", + "
          • \n", + " 1\n", + " -89.98750455101016\n", + "
          • \n", + " \n", + " \n", + " \n", + "
          \n", + " \n", + "
        • \n", + " \n", + " \n", + "
        \n", + " \n", + "
      • \n", + " \n", + " \n", + "
      \n", + " \n", + "
    • \n", + " \n", + " \n", + "
    \n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " links[] 0 items\n", + " \n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " assets\n", + "
      \n", + " \n", + "
    \n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " bbox[] 4 items\n", + " \n", + "
      \n", + " \n", + " \n", + " \n", + "
    • \n", + " 0\n", + " -179.99999561620714\n", + "
    • \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + "
      \n", + " \n", + " \n", + " \n", + "
    • \n", + " 1\n", + " -89.98750455101016\n", + "
    • \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + "
      \n", + " \n", + " \n", + " \n", + "
    • \n", + " 2\n", + " 179.99999096313272\n", + "
    • \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + "
      \n", + " \n", + " \n", + " \n", + "
    • \n", + " 3\n", + " 89.98750455101016\n", + "
    • \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + "
  • \n", + " \n", + " \n", + " \n", + "
  • \n", + " stac_extensions[] 1 items\n", + " \n", + "
      \n", + " \n", + " \n", + " \n", + "
    • \n", + " 0\n", + " \"https://stac-extensions.github.io/table/v1.2.0/schema.json\"\n", + "
    • \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + "
  • \n", + " \n", + " \n", + "
\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bb = gdf.total_bounds.tolist()\n", + "geom = Polygon.from_bounds(bb[0], bb[1], bb[2], bb[3])\n", + "\n", + "item = Item(\n", + " id=\"space2stats\",\n", + " geometry=geom.__geo_interface__,\n", + " bbox=bb,\n", + " datetime=datetime.now(),\n", + " properties={\n", + " \"name\": \"Space2Stats H3 Data\",\n", + " \"description\": \"GeoParquet dataset with h3 hexagons (level 6) covering the globe. Users can access data through an API, specifying variables and areas of interest.\", \n", + " \"table:primary_geometry\" : \"geometry\",\n", + " \"table:columns\" : data_dict,\n", + " \"vector:layers\" : {\n", + " \"space2stats\": gdf_types,\n", + " }\n", + " },\n", + " stac_extensions = ['https://stac-extensions.github.io/table/v1.2.0/schema.json']\n", + " # assets={\n", + " # \"data\": Asset(href=out_file, media_type=\"application/geo+json\")\n", + " # } \n", + ")\n", + "item" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "
    \n", + " \n", + " \n", + " \n", + "
  • \n", + " rel\n", + " \"item\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " href\n", + " \"https://worldbank.github.io/DECAT_Space2Stats/stac/space2stats/space2stats.json\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " type\n", + " \"application/json\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " title\n", + " \"Space2Stats Item\"\n", + "
  • \n", + " \n", + " \n", + " \n", + "
\n", + "
\n", + "
" + ], + "text/plain": [ + ">" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "catalog.add_item(item, title=\"Space2Stats Item\")" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n", + "[]\n" + ] + } + ], + "source": [ + "print(list(catalog.get_children()))\n", + "print(list(catalog.get_items()))" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "* \n", + " * \n" + ] + } + ], + "source": [ + "catalog.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Assets\n", + "\n", + "Can store additional information about authors, the source for input data, how it was processed etc. \n", + "Add another asset for API docs." + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "
    \n", + " \n", + " \n", + " \n", + "
  • \n", + " href\n", + " \"./sources.json\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " type\n", + " \"application/json\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " title\n", + " \"Sources Metadata\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " roles[] 1 items\n", + " \n", + "
      \n", + " \n", + " \n", + " \n", + "
    • \n", + " 0\n", + " \"metadata\"\n", + "
    • \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + "
  • \n", + " \n", + " \n", + "
\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sources_path = join(\".\", \"stac\", \"space2stats\", \"sources.json\") # \"space2stats\"\n", + "asset = Asset(\n", + " href=\"./sources.json\",\n", + " title=\"Sources Metadata\",\n", + " media_type=\"application/json\",\n", + " roles=[\"metadata\"]\n", + " )\n", + "asset" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [], + "source": [ + "item.add_asset(\"sources-metadata\", asset)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "
\n", + "
\n", + "
    \n", + " \n", + " \n", + " \n", + "
  • \n", + " href\n", + " \"https://space2stats.ds.io/docs\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " type\n", + " \"text/html\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " title\n", + " \"API Documentation\"\n", + "
  • \n", + " \n", + " \n", + " \n", + " \n", + "
  • \n", + " roles[] 1 items\n", + " \n", + "
      \n", + " \n", + " \n", + " \n", + "
    • \n", + " 0\n", + " \"metadata\"\n", + "
    • \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + "
  • \n", + " \n", + " \n", + "
\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "asset_api = Asset(\n", + " href=\"https://space2stats.ds.io/docs\",\n", + " title=\"API Documentation\",\n", + " media_type=\"text/html\",\n", + " roles=[\"metadata\"]\n", + " )\n", + "asset_api" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [], + "source": [ + "item.add_asset(\"api-docs\", asset_api)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Save Demo" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "False\n" + ] + } + ], + "source": [ + "print(catalog.get_self_href() is None)\n", + "print(item.get_self_href() is None)" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [], + "source": [ + "# catalog.normalize_hrefs(join(\".\", \"stac\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "https://worldbank.github.io/DECAT_Space2Stats/stac/catalog.json\n", + "https://worldbank.github.io/DECAT_Space2Stats/stac/space2stats/space2stats.json\n" + ] + } + ], + "source": [ + "print(catalog.get_self_href())\n", + "print(item.get_self_href())" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "catalog.save(catalog_type=CatalogType.RELATIVE_PUBLISHED, dest_href=join(\".\", \"stac\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [], + "source": [ + "sources.to_json(\n", + " sources_path, \n", + " orient = 'records',\n", + " indent = 4\n", + " )" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "titi", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/space2stats_api/src/space2stats_ingest/METADATA/stac/catalog.json b/space2stats_api/src/space2stats_ingest/METADATA/stac/catalog.json new file mode 100644 index 00000000..0076c8ed --- /dev/null +++ b/space2stats_api/src/space2stats_ingest/METADATA/stac/catalog.json @@ -0,0 +1,36 @@ +{ + "type": "Catalog", + "id": "space2stats-catalog", + "stac_version": "1.0.0", + "description": "This database contains geospatial statistics for the entire globe standardized to a hexagonal grid. The spatial unit of the dataset is the H3 level 6 (approximately 36 sq. km. per cell). The variables cover a wide range of geographic themes relevant to international development, including demographic, socio-economic, environmental, climate, and infrastructure. An API enables users to query, access, and aggregate statistics from the Space2Stats database. The purpose of this API is to facilitate the generation of sub-national geospatial aggregates for any administrative boundary set.", + "links": [ + { + "rel": "root", + "href": "./catalog.json", + "type": "application/json", + "title": "Space2Stats Database" + }, + { + "rel": "self", + "href": "https://worldbank.github.io/DECAT_Space2Stats/stac/catalog.json", + "type": "application/json" + }, + { + "rel": "item", + "href": "./space2stats/space2stats.json", + "type": "application/json", + "title": "Space2Stats Item" + } + ], + "License": "Creative Commons Attribution 4.0", + "Responsible Party": "Ben Stewart (Task Leader), Andres Chamorro (Collaborator), Development Data Group (DECDG), World Bank", + "Purpose": "The purpose of this API is to facilitate the generation of sub-national geospatial aggregates for any administrative boundary set.", + "Keywords": [ + "space2stats", + "sub-national", + "h3", + "hexagons", + "global" + ], + "title": "Space2Stats Database" +} \ No newline at end of file diff --git a/space2stats_api/src/space2stats_ingest/METADATA/stac/space2stats/sources.json b/space2stats_api/src/space2stats_ingest/METADATA/stac/space2stats/sources.json new file mode 100644 index 00000000..f346e749 --- /dev/null +++ b/space2stats_api/src/space2stats_ingest/METADATA/stac/space2stats/sources.json @@ -0,0 +1,126 @@ +[ + { + "Theme":"Demographics", + "Name":"Population", + "Description":"Gridded population disaggregated by gender.", + "Methodological Notes":"Global raster files are processed for each hexagonal grid using zonal statistics.", + "Variables":[ + "sum_pop_2020", + "sum_pop_f_0_2020", + "sum_pop_f_10_2020", + "sum_pop_f_15_2020", + "sum_pop_f_1_2020", + "sum_pop_f_20_2020", + "sum_pop_f_25_2020", + "sum_pop_f_30_2020", + "sum_pop_f_35_2020", + "sum_pop_f_40_2020", + "sum_pop_f_45_2020", + "sum_pop_f_50_2020", + "sum_pop_f_55_2020", + "sum_pop_f_5_2020", + "sum_pop_f_60_2020", + "sum_pop_f_65_2020", + "sum_pop_f_70_2020", + "sum_pop_f_75_2020", + "sum_pop_f_80_2020", + "sum_pop_m_0_2020", + "sum_pop_m_10_2020", + "sum_pop_m_15_2020", + "sum_pop_m_1_2020", + "sum_pop_m_20_2020", + "sum_pop_m_25_2020", + "sum_pop_m_30_2020", + "sum_pop_m_35_2020", + "sum_pop_m_40_2020", + "sum_pop_m_45_2020", + "sum_pop_m_50_2020", + "sum_pop_m_55_2020", + "sum_pop_m_5_2020", + "sum_pop_m_60_2020", + "sum_pop_m_65_2020", + "sum_pop_m_70_2020", + "sum_pop_m_75_2020", + "sum_pop_m_80_2020", + "sum_pop_m_2020", + "sum_pop_f_2020" + ], + "Source Data":"WorldPop gridded population, 2020, Unconstrained, UN-Adjusted, https:\/\/www.worldpop.org\/methods\/top_down_constrained_vs_unconstrained\/", + "Citation source":"Stevens FR, Gaughan AE, Linard C, Tatem AJ (2015) Disaggregating Census Data for Population Mapping Using Random Forests with Remotely-Sensed and Ancillary Data. ", + "Organization":"World Pop, https:\/\/www.worldpop.org\/methods\/populations", + "Method":"sum", + "Resolution":"100 mts" + }, + { + "Theme":"Socio-economic", + "Name":"Nighttime Lights", + "Description":"Sum of luminosity values measured by monthly composites from VIIRS satellite.", + "Methodological Notes":"Monthly composites generated by NASA through the Lights Every Night partnership.", + "Variables":[ + "ntl_sum_yyyymm" + ], + "Source Data":"World Bank - Light Every Night, https:\/\/registry.opendata.aws\/wb-light-every-night\/", + "Citation source":null, + "Organization":"NASA, World Bank", + "Method":"sum", + "Resolution":"500 mts" + }, + { + "Theme":"Exposure", + "Name":"Flood Area", + "Description":"Area where flood depth is greater than 50 cm, 1-in-100 or 1000 return period.", + "Methodological Notes":"Flood data combines fluvial, pluvial, and coastal flood exposure using the maximum value. Return period indicates likelihood of disaster (1 in 100 years).", + "Variables":[ + "flood_area_100", + "flood_area_1000" + ], + "Source Data":"Fathom 3.0 High Resolution Global Flood Maps Including Climate Scenarios, https:\/\/datacatalog.worldbank.org\/search\/dataset\/0065653\/Fathom-3-0---High-Resolution-Global-Flood-Maps-Including-Climate-Scenarios", + "Citation source":"Wing et al. (2024) A 30 m Global Flood Inundation Model for Any Climate Scenario. https:\/\/doi.org\/10.1029\/2023WR036460", + "Organization":"Fathom, https:\/\/www.fathom.global\/", + "Method":"sum", + "Resolution":"30 mts" + }, + { + "Theme":"Exposure", + "Name":"Population Exposed to Floods", + "Description":"Population where flood depth is greater than 50 cm, 1-in-100 or 1000 return period.", + "Methodological Notes":"Flood data is intersected with population grid to estimate population exposed.", + "Variables":[ + "flood_pop_100", + "flood_pop_1000" + ], + "Source Data":"Fathom 3.0 High Resolution Global Flood Maps Including Climate Scenarios, https:\/\/datacatalog.worldbank.org\/search\/dataset\/0065653\/Fathom-3-0---High-Resolution-Global-Flood-Maps-Including-Climate-Scenarios", + "Citation source":"Wing et al. (2024) A 30 m Global Flood Inundation Model for Any Climate Scenario. https:\/\/doi.org\/10.1029\/2023WR036460", + "Organization":"Fathom, https:\/\/www.fathom.global\/", + "Method":"sum of intersect", + "Resolution":"30 mts and 100 mts" + }, + { + "Theme":"Conflict", + "Name":"Number of Conflict Events", + "Description":"Sum of conflict events (ACLED).", + "Methodological Notes":"Conflict data is filtered for event types and then aggregated by hexagon (count).", + "Variables":[ + "acled_events_yyyy" + ], + "Source Data":"Armed Conflict Location and Event Data (ACLED), https:\/\/acleddata.com\/data\/", + "Citation source":"https:\/\/acleddata.com\/article-categories\/general-methodology\/", + "Organization":"ACLED, https:\/\/acleddata.com\/", + "Method":"count", + "Resolution":"point data" + }, + { + "Theme":"Conflict", + "Name":"Number of Conflict Fatalities", + "Description":"Sum of estimated fatalities from conflcit events (ACLED).", + "Methodological Notes":"Conflict data is filtered for event types and then aggregated by hexagon (sum of fatalities).", + "Variables":[ + "acled_fatalities_yyyy" + ], + "Source Data":"Armed Conflict Location and Event Data (ACLED), https:\/\/acleddata.com\/data\/", + "Citation source":"https:\/\/acleddata.com\/article-categories\/general-methodology\/", + "Organization":"ACLED, https:\/\/acleddata.com\/", + "Method":"sum", + "Resolution":"point data" + } +] \ No newline at end of file diff --git a/space2stats_api/src/space2stats_ingest/METADATA/stac/space2stats/space2stats.json b/space2stats_api/src/space2stats_ingest/METADATA/stac/space2stats/space2stats.json new file mode 100644 index 00000000..c1350885 --- /dev/null +++ b/space2stats_api/src/space2stats_ingest/METADATA/stac/space2stats/space2stats.json @@ -0,0 +1,308 @@ +{ + "type": "Feature", + "stac_version": "1.0.0", + "id": "space2stats", + "properties": { + "name": "Space2Stats H3 Data", + "description": "GeoParquet dataset with h3 hexagons (level 6) covering the globe. Users can access data through an API, specifying variables and areas of interest.", + "table:primary_geometry": "geometry", + "table:columns": [ + { + "name": "hex_id", + "description": "H3 unique identifier", + "type": "object" + }, + { + "name": "sum_pop_f_0_2020", + "description": "Total population female, ages 0 to 1, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_10_2020", + "description": "Total population female, ages 10 to 15, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_15_2020", + "description": "Total population female, ages 15 to 20, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_1_2020", + "description": "Total population female, ages 1 to 10, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_20_2020", + "description": "Total population female, ages 20 to 25, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_25_2020", + "description": "Total population female, ages 25 to 30, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_30_2020", + "description": "Total population female, ages 30 to 35, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_35_2020", + "description": "Total population female, ages 35 to 40, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_40_2020", + "description": "Total population female, ages 40 to 45, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_45_2020", + "description": "Total population female, ages 45 to 50, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_50_2020", + "description": "Total population female, ages 50 to 55, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_55_2020", + "description": "Total population female, ages 55 to 60, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_5_2020", + "description": "Total population female, ages 5 to 10, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_60_2020", + "description": "Total population female, ages 60 to 65, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_65_2020", + "description": "Total population female, ages 65 to 70, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_70_2020", + "description": "Total population female, ages 70 to 75, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_75_2020", + "description": "Total population female, ages 75 to 80, 2020", + "type": "float64" + }, + { + "name": "sum_pop_f_80_2020", + "description": "Total population female, ages 80 and above, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_0_2020", + "description": "Total population male, ages 0 to 1, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_10_2020", + "description": "Total population male, ages 10 to 15, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_15_2020", + "description": "Total population male, ages 15 to 20, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_1_2020", + "description": "Total population male, ages 1 to 10, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_20_2020", + "description": "Total population male, ages 20 to 25, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_25_2020", + "description": "Total population male, ages 25 to 30, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_30_2020", + "description": "Total population male, ages 30 to 35, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_35_2020", + "description": "Total population male, ages 35 to 40, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_40_2020", + "description": "Total population male, ages 40 to 45, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_45_2020", + "description": "Total population male, ages 45 to 50, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_50_2020", + "description": "Total population male, ages 50 to 55, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_55_2020", + "description": "Total population male, ages 55 to 60, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_5_2020", + "description": "Total population male, ages 5 to 10, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_60_2020", + "description": "Total population male, ages 60 to 65, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_65_2020", + "description": "Total population male, ages 65 to 70, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_70_2020", + "description": "Total population male, ages 70 to 75, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_75_2020", + "description": "Total population male, ages 75 to 80, 2020", + "type": "float64" + }, + { + "name": "sum_pop_m_80_2020", + "description": "Total population male, ages 80 and above, 2020", + "type": "float64" + } + ], + "vector:layers": { + "space2stats": { + "hex_id": "object", + "sum_pop_f_0_2020": "float64", + "sum_pop_f_10_2020": "float64", + "sum_pop_f_15_2020": "float64", + "sum_pop_f_1_2020": "float64", + "sum_pop_f_20_2020": "float64", + "sum_pop_f_25_2020": "float64", + "sum_pop_f_30_2020": "float64", + "sum_pop_f_35_2020": "float64", + "sum_pop_f_40_2020": "float64", + "sum_pop_f_45_2020": "float64", + "sum_pop_f_50_2020": "float64", + "sum_pop_f_55_2020": "float64", + "sum_pop_f_5_2020": "float64", + "sum_pop_f_60_2020": "float64", + "sum_pop_f_65_2020": "float64", + "sum_pop_f_70_2020": "float64", + "sum_pop_f_75_2020": "float64", + "sum_pop_f_80_2020": "float64", + "sum_pop_m_0_2020": "float64", + "sum_pop_m_10_2020": "float64", + "sum_pop_m_15_2020": "float64", + "sum_pop_m_1_2020": "float64", + "sum_pop_m_20_2020": "float64", + "sum_pop_m_25_2020": "float64", + "sum_pop_m_30_2020": "float64", + "sum_pop_m_35_2020": "float64", + "sum_pop_m_40_2020": "float64", + "sum_pop_m_45_2020": "float64", + "sum_pop_m_50_2020": "float64", + "sum_pop_m_55_2020": "float64", + "sum_pop_m_5_2020": "float64", + "sum_pop_m_60_2020": "float64", + "sum_pop_m_65_2020": "float64", + "sum_pop_m_70_2020": "float64", + "sum_pop_m_75_2020": "float64", + "sum_pop_m_80_2020": "float64", + "geometry": "geometry" + } + }, + "datetime": "2024-10-07T11:21:25.944150Z" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -179.99999561620714, + -89.98750455101016 + ], + [ + -179.99999561620714, + 89.98750455101016 + ], + [ + 179.99999096313272, + 89.98750455101016 + ], + [ + 179.99999096313272, + -89.98750455101016 + ], + [ + -179.99999561620714, + -89.98750455101016 + ] + ] + ] + }, + "links": [ + { + "rel": "root", + "href": "../catalog.json", + "type": "application/json", + "title": "Space2Stats Database" + }, + { + "rel": "parent", + "href": "../catalog.json", + "type": "application/json", + "title": "Space2Stats Database" + } + ], + "assets": { + "sources-metadata": { + "href": "./sources.json", + "type": "application/json", + "title": "Sources Metadata", + "roles": [ + "metadata" + ] + }, + "api-docs": { + "href": "https://space2stats.ds.io/docs", + "type": "text/html", + "title": "API Documentation", + "roles": [ + "metadata" + ] + } + }, + "bbox": [ + -179.99999561620714, + -89.98750455101016, + 179.99999096313272, + 89.98750455101016 + ], + "stac_extensions": [ + "https://stac-extensions.github.io/table/v1.2.0/schema.json" + ] +} \ No newline at end of file From ad87bf44b35d5397aaecdcd894d0024a21f0d4f1 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Fri, 15 Nov 2024 10:27:54 +0000 Subject: [PATCH 10/18] Add notebook dependency group and update python library example --- notebooks/user-docs/s2s_python_lib.ipynb | 892 +++++++ space2stats_api/src/poetry.lock | 3003 ++++++++++++++++++---- space2stats_api/src/pyproject.toml | 8 + 3 files changed, 3383 insertions(+), 520 deletions(-) create mode 100644 notebooks/user-docs/s2s_python_lib.ipynb diff --git a/notebooks/user-docs/s2s_python_lib.ipynb b/notebooks/user-docs/s2s_python_lib.ipynb new file mode 100644 index 00000000..f39d6d2f --- /dev/null +++ b/notebooks/user-docs/s2s_python_lib.ipynb @@ -0,0 +1,892 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Access S2S via Python Library" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "%pip install \"git+https://github.com/worldbank/DECAT_Space2Stats.git#subdirectory=space2stats_api/src\"" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import Dict\n", + "import json\n", + "\n", + "import numpy as np\n", + "from dotenv import load_dotenv\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "from shapely.geometry import shape\n", + "from lonboard import Map, ScatterplotLayer\n", + "from geojson_pydantic import Feature, Polygon\n", + "\n", + "from space2stats import StatsTable" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__Expected environment variables to be set__ from dotenv file\n", + "\n", + "\n", + "```.env\n", + "PGHOST=\n", + "PGPORT=\n", + "PGDATABASE=\n", + "PGUSER=\n", + "PGPASSWORD=\n", + "PGTABLENAME=space2stats\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "load_dotenv(\"../../space2stats_api/db.env\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['sum_pop_2020',\n", + " 'ogc_fid',\n", + " 'sum_pop_f_0_2020',\n", + " 'sum_pop_f_10_2020',\n", + " 'sum_pop_f_15_2020',\n", + " 'sum_pop_f_1_2020',\n", + " 'sum_pop_f_20_2020',\n", + " 'sum_pop_f_25_2020',\n", + " 'sum_pop_f_30_2020',\n", + " 'sum_pop_f_35_2020',\n", + " 'sum_pop_f_40_2020',\n", + " 'sum_pop_f_45_2020',\n", + " 'sum_pop_f_50_2020',\n", + " 'sum_pop_f_55_2020',\n", + " 'sum_pop_f_5_2020',\n", + " 'sum_pop_f_60_2020',\n", + " 'sum_pop_f_65_2020',\n", + " 'sum_pop_f_70_2020',\n", + " 'sum_pop_f_75_2020',\n", + " 'sum_pop_f_80_2020',\n", + " 'sum_pop_m_0_2020',\n", + " 'sum_pop_m_10_2020',\n", + " 'sum_pop_m_15_2020',\n", + " 'sum_pop_m_1_2020',\n", + " 'sum_pop_m_20_2020',\n", + " 'sum_pop_m_25_2020',\n", + " 'sum_pop_m_30_2020',\n", + " 'sum_pop_m_35_2020',\n", + " 'sum_pop_m_40_2020',\n", + " 'sum_pop_m_45_2020',\n", + " 'sum_pop_m_50_2020',\n", + " 'sum_pop_m_55_2020',\n", + " 'sum_pop_m_5_2020',\n", + " 'sum_pop_m_60_2020',\n", + " 'sum_pop_m_65_2020',\n", + " 'sum_pop_m_70_2020',\n", + " 'sum_pop_m_75_2020',\n", + " 'sum_pop_m_80_2020',\n", + " 'sum_pop_m_2020',\n", + " 'sum_pop_f_2020']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with StatsTable.connect() as stats_table:\n", + " fields = stats_table.fields()\n", + "\n", + "fields" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "AOIModel = Feature[Polygon, Dict]\n", + "\n", + "# ~kenya\n", + "aoi = {\n", + " \"type\": \"Feature\",\n", + " \"geometry\": {\n", + " \"type\": \"Polygon\",\n", + " \"coordinates\": [\n", + " [\n", + " [33.78593974945852, 5.115816884114494],\n", + " [33.78593974945852, -4.725410543134203],\n", + " [41.94362577283266, -4.725410543134203],\n", + " [41.94362577283266, 5.115816884114494],\n", + " [33.78593974945852, 5.115816884114494]\n", + " ]\n", + " ]\n", + " },\n", + " \"properties\": {\n", + " \"name\": \"Updated AOI\"\n", + " }\n", + "}\n", + " \n", + " \n", + "\n", + "feat = AOIModel(**aoi)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hex_idgeometrysum_pop_2020ogc_fidsum_pop_f_0_2020sum_pop_f_10_2020sum_pop_f_15_2020sum_pop_f_1_2020sum_pop_f_20_2020sum_pop_f_25_2020...sum_pop_m_50_2020sum_pop_m_55_2020sum_pop_m_5_2020sum_pop_m_60_2020sum_pop_m_65_2020sum_pop_m_70_2020sum_pop_m_75_2020sum_pop_m_80_2020sum_pop_m_2020sum_pop_f_2020
0866a4a017ffffff{\"type\":\"Point\",\"coordinates\":[36.078694056627...676.91280461572548.92436249.52410536.89829632.98590128.96340033.645473...6.7323274.13174953.3800433.2405412.4758170.7026670.3994920.129285336.082180340.830624
1866a4a01fffffff{\"type\":\"Point\",\"coordinates\":[36.134817927246...347.18272261572554.51568024.77332719.46258516.69067015.83231416.429201...3.4451442.75250725.5485441.8277611.5241220.5854270.3810800.209030171.759225175.423497
2866a4a04fffffff{\"type\":\"Point\",\"coordinates\":[36.339286712001...285.94349061572603.64258019.62321916.69873013.46353014.25562512.501910...2.8277433.05508518.7654991.7115611.5717000.7621710.5330850.349744140.698267145.245222
3866a4a057ffffff{\"type\":\"Point\",\"coordinates\":[36.237081352434...279.46391261572613.56003719.17854916.32033213.15844213.93258712.218613...2.7636652.98585618.3402671.6727761.5360840.7449000.5210050.341818137.509998141.953914
4866a4a05fffffff{\"type\":\"Point\",\"coordinates\":[36.293182542907...235.25847461572622.99691316.14489713.73879111.07704611.72873910.285879...2.3265102.51355515.4392141.4081771.2931080.6270720.4385930.287750115.758746119.499727
\n", + "

5 rows × 42 columns

\n", + "
" + ], + "text/plain": [ + " hex_id geometry \\\n", + "0 866a4a017ffffff {\"type\":\"Point\",\"coordinates\":[36.078694056627... \n", + "1 866a4a01fffffff {\"type\":\"Point\",\"coordinates\":[36.134817927246... \n", + "2 866a4a04fffffff {\"type\":\"Point\",\"coordinates\":[36.339286712001... \n", + "3 866a4a057ffffff {\"type\":\"Point\",\"coordinates\":[36.237081352434... \n", + "4 866a4a05fffffff {\"type\":\"Point\",\"coordinates\":[36.293182542907... \n", + "\n", + " sum_pop_2020 ogc_fid sum_pop_f_0_2020 sum_pop_f_10_2020 \\\n", + "0 676.912804 6157254 8.924362 49.524105 \n", + "1 347.182722 6157255 4.515680 24.773327 \n", + "2 285.943490 6157260 3.642580 19.623219 \n", + "3 279.463912 6157261 3.560037 19.178549 \n", + "4 235.258474 6157262 2.996913 16.144897 \n", + "\n", + " sum_pop_f_15_2020 sum_pop_f_1_2020 sum_pop_f_20_2020 sum_pop_f_25_2020 \\\n", + "0 36.898296 32.985901 28.963400 33.645473 \n", + "1 19.462585 16.690670 15.832314 16.429201 \n", + "2 16.698730 13.463530 14.255625 12.501910 \n", + "3 16.320332 13.158442 13.932587 12.218613 \n", + "4 13.738791 11.077046 11.728739 10.285879 \n", + "\n", + " ... sum_pop_m_50_2020 sum_pop_m_55_2020 sum_pop_m_5_2020 \\\n", + "0 ... 6.732327 4.131749 53.380043 \n", + "1 ... 3.445144 2.752507 25.548544 \n", + "2 ... 2.827743 3.055085 18.765499 \n", + "3 ... 2.763665 2.985856 18.340267 \n", + "4 ... 2.326510 2.513555 15.439214 \n", + "\n", + " sum_pop_m_60_2020 sum_pop_m_65_2020 sum_pop_m_70_2020 sum_pop_m_75_2020 \\\n", + "0 3.240541 2.475817 0.702667 0.399492 \n", + "1 1.827761 1.524122 0.585427 0.381080 \n", + "2 1.711561 1.571700 0.762171 0.533085 \n", + "3 1.672776 1.536084 0.744900 0.521005 \n", + "4 1.408177 1.293108 0.627072 0.438593 \n", + "\n", + " sum_pop_m_80_2020 sum_pop_m_2020 sum_pop_f_2020 \n", + "0 0.129285 336.082180 340.830624 \n", + "1 0.209030 171.759225 175.423497 \n", + "2 0.349744 140.698267 145.245222 \n", + "3 0.341818 137.509998 141.953914 \n", + "4 0.287750 115.758746 119.499727 \n", + "\n", + "[5 rows x 42 columns]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with StatsTable.connect() as stats_table:\n", + " data = stats_table.summaries(aoi=feat, spatial_join_method=\"centroid\", fields=fields, geometry=\"point\")\n", + " df = pd.DataFrame(data)\n", + "\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hex_idgeometrysum_pop_2020ogc_fidsum_pop_f_0_2020sum_pop_f_10_2020sum_pop_f_15_2020sum_pop_f_1_2020sum_pop_f_20_2020sum_pop_f_25_2020...sum_pop_m_50_2020sum_pop_m_55_2020sum_pop_m_5_2020sum_pop_m_60_2020sum_pop_m_65_2020sum_pop_m_70_2020sum_pop_m_75_2020sum_pop_m_80_2020sum_pop_m_2020sum_pop_f_2020
0866a4a017ffffffPOINT (36.07869 5.11252)676.91280461572548.92436249.52410536.89829632.98590128.96340033.645473...6.7323274.13174953.3800433.2405412.4758170.7026670.3994920.129285336.082180340.830624
1866a4a01fffffffPOINT (36.13482 5.09047)347.18272261572554.51568024.77332719.46258516.69067015.83231416.429201...3.4451442.75250725.5485441.8277611.5241220.5854270.3810800.209030171.759225175.423497
2866a4a04fffffffPOINT (36.33929 5.11542)285.94349061572603.64258019.62321916.69873013.46353014.25562512.501910...2.8277433.05508518.7654991.7115611.5717000.7621710.5330850.349744140.698267145.245222
3866a4a057ffffffPOINT (36.23708 5.10296)279.46391261572613.56003719.17854916.32033213.15844213.93258712.218613...2.7636652.98585618.3402671.6727761.5360840.7449000.5210050.341818137.509998141.953914
4866a4a05fffffffPOINT (36.29318 5.0809)235.25847461572622.99691316.14489713.73879111.07704611.72873910.285879...2.3265102.51355515.4392141.4081771.2931080.6270720.4385930.287750115.758746119.499727
..................................................................
2580186969ed97ffffffPOINT (34.80875 -3.47225)196.44839187100254.10812714.17696611.83545315.0156588.3987416.313566...1.9623731.29414316.5144411.0849200.6964950.6073900.3531090.29576296.252689100.195702
2580286969ed9fffffffPOINT (34.75041 -3.44944)296.74089387100266.20544221.41471117.87778922.68158012.6865389.536821...2.9642211.95484024.9455341.6388021.0520750.9174810.5333810.446756145.392433151.348460
2580386969eda7ffffffPOINT (34.77046 -3.5715)154.81845387100273.23756211.1726849.32736911.8336486.6189404.975640...1.5465211.01989813.0148190.8550110.5488990.4786770.2782810.23308675.85550878.962945
2580486969edafffffffPOINT (34.7121 -3.54868)157.87535087100283.30148811.3932909.51153812.0673036.7496315.073884...1.5770571.04003513.2717970.8718940.5597370.4881280.2837750.23768877.35327980.522071
2580586969edb7ffffffPOINT (34.81878 -3.53328)236.12733187100294.93789217.04045114.22599518.04854410.0951317.588790...2.3587371.55553619.8500521.3040530.8371740.7300720.4244300.355500115.693951120.433380
\n", + "

25806 rows × 42 columns

\n", + "
" + ], + "text/plain": [ + " hex_id geometry sum_pop_2020 ogc_fid \\\n", + "0 866a4a017ffffff POINT (36.07869 5.11252) 676.912804 6157254 \n", + "1 866a4a01fffffff POINT (36.13482 5.09047) 347.182722 6157255 \n", + "2 866a4a04fffffff POINT (36.33929 5.11542) 285.943490 6157260 \n", + "3 866a4a057ffffff POINT (36.23708 5.10296) 279.463912 6157261 \n", + "4 866a4a05fffffff POINT (36.29318 5.0809) 235.258474 6157262 \n", + "... ... ... ... ... \n", + "25801 86969ed97ffffff POINT (34.80875 -3.47225) 196.448391 8710025 \n", + "25802 86969ed9fffffff POINT (34.75041 -3.44944) 296.740893 8710026 \n", + "25803 86969eda7ffffff POINT (34.77046 -3.5715) 154.818453 8710027 \n", + "25804 86969edafffffff POINT (34.7121 -3.54868) 157.875350 8710028 \n", + "25805 86969edb7ffffff POINT (34.81878 -3.53328) 236.127331 8710029 \n", + "\n", + " sum_pop_f_0_2020 sum_pop_f_10_2020 sum_pop_f_15_2020 \\\n", + "0 8.924362 49.524105 36.898296 \n", + "1 4.515680 24.773327 19.462585 \n", + "2 3.642580 19.623219 16.698730 \n", + "3 3.560037 19.178549 16.320332 \n", + "4 2.996913 16.144897 13.738791 \n", + "... ... ... ... \n", + "25801 4.108127 14.176966 11.835453 \n", + "25802 6.205442 21.414711 17.877789 \n", + "25803 3.237562 11.172684 9.327369 \n", + "25804 3.301488 11.393290 9.511538 \n", + "25805 4.937892 17.040451 14.225995 \n", + "\n", + " sum_pop_f_1_2020 sum_pop_f_20_2020 sum_pop_f_25_2020 ... \\\n", + "0 32.985901 28.963400 33.645473 ... \n", + "1 16.690670 15.832314 16.429201 ... \n", + "2 13.463530 14.255625 12.501910 ... \n", + "3 13.158442 13.932587 12.218613 ... \n", + "4 11.077046 11.728739 10.285879 ... \n", + "... ... ... ... ... \n", + "25801 15.015658 8.398741 6.313566 ... \n", + "25802 22.681580 12.686538 9.536821 ... \n", + "25803 11.833648 6.618940 4.975640 ... \n", + "25804 12.067303 6.749631 5.073884 ... \n", + "25805 18.048544 10.095131 7.588790 ... \n", + "\n", + " sum_pop_m_50_2020 sum_pop_m_55_2020 sum_pop_m_5_2020 \\\n", + "0 6.732327 4.131749 53.380043 \n", + "1 3.445144 2.752507 25.548544 \n", + "2 2.827743 3.055085 18.765499 \n", + "3 2.763665 2.985856 18.340267 \n", + "4 2.326510 2.513555 15.439214 \n", + "... ... ... ... \n", + "25801 1.962373 1.294143 16.514441 \n", + "25802 2.964221 1.954840 24.945534 \n", + "25803 1.546521 1.019898 13.014819 \n", + "25804 1.577057 1.040035 13.271797 \n", + "25805 2.358737 1.555536 19.850052 \n", + "\n", + " sum_pop_m_60_2020 sum_pop_m_65_2020 sum_pop_m_70_2020 \\\n", + "0 3.240541 2.475817 0.702667 \n", + "1 1.827761 1.524122 0.585427 \n", + "2 1.711561 1.571700 0.762171 \n", + "3 1.672776 1.536084 0.744900 \n", + "4 1.408177 1.293108 0.627072 \n", + "... ... ... ... \n", + "25801 1.084920 0.696495 0.607390 \n", + "25802 1.638802 1.052075 0.917481 \n", + "25803 0.855011 0.548899 0.478677 \n", + "25804 0.871894 0.559737 0.488128 \n", + "25805 1.304053 0.837174 0.730072 \n", + "\n", + " sum_pop_m_75_2020 sum_pop_m_80_2020 sum_pop_m_2020 sum_pop_f_2020 \n", + "0 0.399492 0.129285 336.082180 340.830624 \n", + "1 0.381080 0.209030 171.759225 175.423497 \n", + "2 0.533085 0.349744 140.698267 145.245222 \n", + "3 0.521005 0.341818 137.509998 141.953914 \n", + "4 0.438593 0.287750 115.758746 119.499727 \n", + "... ... ... ... ... \n", + "25801 0.353109 0.295762 96.252689 100.195702 \n", + "25802 0.533381 0.446756 145.392433 151.348460 \n", + "25803 0.278281 0.233086 75.855508 78.962945 \n", + "25804 0.283775 0.237688 77.353279 80.522071 \n", + "25805 0.424430 0.355500 115.693951 120.433380 \n", + "\n", + "[25806 rows x 42 columns]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['geometry'] = df['geometry'].apply(lambda geom: shape(json.loads(geom)))\n", + "gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326')\n", + "gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "496338079450487fbcf9db5fbd702c87", + "version_major": 2, + "version_minor": 1 + }, + "text/plain": [ + "Map(custom_attribution='', layers=(ScatterplotLayer(get_fill_color=arro3.core.ChunkedArray=8.0.0)", "pytest"] [[package]] name = "adbc-driver-postgresql" -version = "1.2.0" +version = "1.3.0" description = "A libpq-based ADBC driver for working with PostgreSQL." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "adbc_driver_postgresql-1.2.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:2a7eee1f6c2ad0d3c1174ec8cbd87294d7c75dac17dd33e8bd15e6bba1bdd4fb"}, - {file = "adbc_driver_postgresql-1.2.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:16968814e56f1e5451ee5289a6ebdf51a9164e64d8582aec28350708e37663b6"}, - {file = "adbc_driver_postgresql-1.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba9ca7422564d4936bb11bc7c1a0f4bbebf96e413b2b25b0672d5c1155d2ceea"}, - {file = "adbc_driver_postgresql-1.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce1a0a9eb5e2f572e937019f70be3176eb9feaf8f6544ac01eed51a89b4593a9"}, - {file = "adbc_driver_postgresql-1.2.0-py3-none-win_amd64.whl", hash = "sha256:c996faf71776c80a9f92f4a13650b30bed4f462fcd787f0bf5fa25493c51302b"}, - {file = "adbc_driver_postgresql-1.2.0.tar.gz", hash = "sha256:1bf66beaf0a57d66fac642b95f97565bd5f47cddb52ae3c8f92b14925253d6df"}, + {file = "adbc_driver_postgresql-1.3.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:146df8c83bbd236c4a290f212e286aae114bc282da98334814b29ff0216d0cab"}, + {file = "adbc_driver_postgresql-1.3.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1d8c67d2c270203f53d1ccc18ed80f8a5026938ebdc319ea4fa8e3f27edd6bca"}, + {file = "adbc_driver_postgresql-1.3.0-py3-none-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ca5f7ab119441e79c5b636c238056fff04fa341c2a677728f8ca98d24906c97"}, + {file = "adbc_driver_postgresql-1.3.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d154eb8e5210811c9325c90e8ef93b6e33dd9be87dd079179b921de7c0866c71"}, + {file = "adbc_driver_postgresql-1.3.0-py3-none-win_amd64.whl", hash = "sha256:15d2cd179af465b39f028cc8f3d24258fb6b905d9076b5f47ff08c4911fa8512"}, + {file = "adbc_driver_postgresql-1.3.0.tar.gz", hash = "sha256:cf048d4c115cb336d691f41a3717abcfc0f8b92fa12fd5f47ec8af1db7a4dd13"}, ] [package.dependencies] @@ -81,13 +78,13 @@ files = [ [[package]] name = "anyio" -version = "4.6.0" +version = "4.6.2.post1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.6.0-py3-none-any.whl", hash = "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"}, - {file = "anyio-4.6.0.tar.gz", hash = "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb"}, + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, ] [package.dependencies] @@ -98,9 +95,344 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] trio = ["trio (>=0.26.1)"] +[[package]] +name = "anywidget" +version = "0.9.13" +description = "custom jupyter widgets made easy" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anywidget-0.9.13-py3-none-any.whl", hash = "sha256:43d1658f1043b8c95cd350b2f5deccb123fd37810a36f656d6163aefe8163705"}, + {file = "anywidget-0.9.13.tar.gz", hash = "sha256:c655455bf51f82182eb23c5947d37cc41f0b1ffacaf7e2b763147a2332cb3f07"}, +] + +[package.dependencies] +ipywidgets = ">=7.6.0" +psygnal = ">=0.8.1" +typing-extensions = ">=4.2.0" + +[package.extras] +dev = ["comm (>=0.1.0)", "watchfiles (>=0.18.0)"] +test = ["ipython (<8.13)", "msgspec", "mypy (==1.10.0)", "pydantic", "pytest", "pytest-cov", "ruff"] + +[[package]] +name = "appnope" +version = "0.1.4" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = ">=3.6" +files = [ + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, +] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arro3-compute" +version = "0.4.2" +description = "Rust-based compute kernels for Arrow in Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "arro3_compute-0.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a40b0f110157a87fd472e6548b5a9f8a12211adab418d18602701e57f310b1f5"}, + {file = "arro3_compute-0.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcf2f350f129a1ef3f2007ab954e45ae368af20043205a86cba2d3ace6f085da"}, + {file = "arro3_compute-0.4.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5a1902b2f5dddbf292bcf6836f008367a09401a18f2252f1929d2a2aad4fb215"}, + {file = "arro3_compute-0.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dcdf82f804c617b1a6bc5ad6b784f0657ca654751820fdd9095535f7b03ba00b"}, + {file = "arro3_compute-0.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8994cfd347f30633185c5cde259e4ef4cbd66c7af77a508e476762d955de4f7a"}, + {file = "arro3_compute-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b13a752a99b352ab395452dd194001fe3077dbb4370b0ae0829b8bcdbfd2945"}, + {file = "arro3_compute-0.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63d37a2a2479bf4632e578b3aa104012a6f82530c0c3fd15e716cb3fce79d789"}, + {file = "arro3_compute-0.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b664b11aa281b1c75d4af5ac06227be80ad4a7547ddc1f6ba0b95fc105da4b71"}, + {file = "arro3_compute-0.4.2-cp310-none-win_amd64.whl", hash = "sha256:dc788d676a67fcb817a3248c924ae53f3b76df52938320ebcdf2c1429ab1ce26"}, + {file = "arro3_compute-0.4.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:181c93db95f4e398018bc57036f3d0d91b00cb55e3a3212796768ba24781888b"}, + {file = "arro3_compute-0.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b167bfc12dc12e35234a50066d8cacd15f890598259085d0d8474cd2b5c73ea3"}, + {file = "arro3_compute-0.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d5a5037831e6d967dca1ed9e639d838be07af6ccec4a074051ad64aea5e355f"}, + {file = "arro3_compute-0.4.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:082eb64765ad5724138580383f7ccadf0ba3a4b1ff7f347f30ef92d1d5174f75"}, + {file = "arro3_compute-0.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f498f31ff24e3bd5139960e62eb706f3b3ab05b29d1c92a16e43359a25ec6ae"}, + {file = "arro3_compute-0.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2877d4805620d06fbf20cb3776a59ea011100988ebcf223ca2617984b9b7136a"}, + {file = "arro3_compute-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:729f3a2a77323c3e7dcbf484b7884676f437fe130ea1915c9664239284c35e2b"}, + {file = "arro3_compute-0.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:81cab5ebe5d40c6427df4c0bb81c70bbc72298d37c74e88336073b15cec3daf4"}, + {file = "arro3_compute-0.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fdf6a502906f8bd5974d4f8f061efa777866e820407daeb0990228d066d03a2a"}, + {file = "arro3_compute-0.4.2-cp311-none-win_amd64.whl", hash = "sha256:c75fd49a3ea692f6de145cbb094d46393af6b80350e0146ed6d6d74bf392279e"}, + {file = "arro3_compute-0.4.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:dc57c25f22f67a1da5155a4b4905d5e45a4cfe80e1b8abdab9c0eb099042c0e7"}, + {file = "arro3_compute-0.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7633adc9e9914688c9fa1e96b1201a4250377c1a1ac21a5089e2d06d02595c03"}, + {file = "arro3_compute-0.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fbe0ae3ce3c29777d3925616150e46075f8ee94451259706aafd7c233b37f27"}, + {file = "arro3_compute-0.4.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aaa4117107cb79495fcff10daf6c479e220ad616121a03126811f85c07f43bb2"}, + {file = "arro3_compute-0.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5a127020f8c4c545f8f3d5f78803d59eab0d2bdfd601cac43ecad9dd8c32f36"}, + {file = "arro3_compute-0.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:804d03bcacc1ec11bfe45e895b571508325051c80c0a8b109a341f9d3acb61b6"}, + {file = "arro3_compute-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad0c9b9206aaef3896d42b3778e06fc13654f4accde19e15006bab55dac8ccf"}, + {file = "arro3_compute-0.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e424d2fad953760e60437ccb3009b0b4b0a5d299e81dcb9a0541c3eac3d39a0e"}, + {file = "arro3_compute-0.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7b69d203cf1249fe0406d76458cb5069bb0c62dec03df88549ff9b68638fa2b6"}, + {file = "arro3_compute-0.4.2-cp312-none-win_amd64.whl", hash = "sha256:02970d693a412c7b81e0d3fd528636cf21e30c6b2241a5d26002b65c24b5bc96"}, + {file = "arro3_compute-0.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:badbf15ad1477eb23a21fa14609d6d295ebff30a422489ef8f9f4fe300995e07"}, + {file = "arro3_compute-0.4.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92841ac1a91913866617e3f9d64728b68942e93874fa48d9f22fbb025a6e8cdd"}, + {file = "arro3_compute-0.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f95f5be802dc0eeb3488e02d5b838c5b3701120dcce2558a3c149f778939f198"}, + {file = "arro3_compute-0.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e9973e1254029fa17ce72c9dfff680527a9ac069aca6eebaab4335f66f99a67"}, + {file = "arro3_compute-0.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f971bc07f87cb1f22f665706ac8caeaa54fa36781229dacd26886e2a716154e"}, + {file = "arro3_compute-0.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1eaf4304d25a13b353e54759db5dcfc0e4251acc7056a163e350a149c869216a"}, + {file = "arro3_compute-0.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c7b6c2dc9edca8afc7a31bd444068cd70ddaee684b2dba8404ad93dd037b48da"}, + {file = "arro3_compute-0.4.2-cp38-none-win_amd64.whl", hash = "sha256:f791ef30ef63f3d8270d0228715ef1825fe68c54e818e9e61aaa7ac35ee31404"}, + {file = "arro3_compute-0.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a929bee73d8924829a0c30a51e3f519bb4be3a3c1e18fe333eb6ca9bfa79bfc2"}, + {file = "arro3_compute-0.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9afa78af61f39690dece6e74106c2a2ae290f46e651c0158132c21269a43ac3"}, + {file = "arro3_compute-0.4.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3502abebc2c49554967405939ef0bc7ddf29ec72d8ecadd9e10c6ec24d88010e"}, + {file = "arro3_compute-0.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0dee3174be6d203b014b9798a22ffdf0d32b0196f45e8a0354f186b0e711aefc"}, + {file = "arro3_compute-0.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:02cb800841faa51f943710beebb6a96c90316f01bec20c424a65d46572d0dc1d"}, + {file = "arro3_compute-0.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7be0dd9d8a2fa25a3a3017a5c155b337c846aa394bf516a9bee8cc729f6ded2"}, + {file = "arro3_compute-0.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4183480823238d9faccec60f3795fabb0dd644e9f90649bedb98a238c584629c"}, + {file = "arro3_compute-0.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d2379978140b33e2978d021db31150adccd6857b1c2ed91243d4bad723db85de"}, + {file = "arro3_compute-0.4.2-cp39-none-win_amd64.whl", hash = "sha256:60769e53e85ae95d8902ff84c3b623e960bac33d4fa40b53845d309825fb452b"}, + {file = "arro3_compute-0.4.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6f0fe0e1dff8b07b22bf97fbdbb1f2660555ebe04443710a79a3d1d64d85925"}, + {file = "arro3_compute-0.4.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c37d88036433c36024e1678390585a9b4ad2ab212ad51ca609e85e402833317"}, + {file = "arro3_compute-0.4.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a9ddb2962818f5f713441715eeccbdca223adf339f95f82bca8fcd3b1fcbe59"}, + {file = "arro3_compute-0.4.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac2209452bd95060cfcb643adf24c4c4c122a699c27061f9bd0cfb6a05f8b059"}, + {file = "arro3_compute-0.4.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13c32e86d977a1885ec35d176f355aaee14e3bfce9903430c0c6dfa779c6693e"}, + {file = "arro3_compute-0.4.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fb5ad3f2eaea686e01babe23d80b7c7776661671e91c30d26441bfd9a9eabca"}, + {file = "arro3_compute-0.4.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bc87efa5e4a776cefe9c9b904ff14519e738eb7f0463bafc46892bbc36c4a554"}, + {file = "arro3_compute-0.4.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96f4c9cb6e537e7b2165a0021ce79d1778312b7108b524ef42ecd0aea87d649"}, + {file = "arro3_compute-0.4.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a03e884581de8d365dd1b23d8b8ba6bbc4d0e5bbc8458742f503e8e0aba0115"}, + {file = "arro3_compute-0.4.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eb0db5699f18a2c3093384e3714d1107f451fd682d90b56f69d8d523dda13ca"}, + {file = "arro3_compute-0.4.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c06161305aadcd0c0c4d28a8f7e1e409fa69bd510dcd9252b329f7c191a48ff"}, + {file = "arro3_compute-0.4.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:66bcfc7cb63ec77fe8711c8944c2ca66dae6147707473f1de959f22e334e26fa"}, + {file = "arro3_compute-0.4.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce412b2b4a4c0bbc5961b5d4f3ba029837c7cb2b829819fb6741d8eb663898e3"}, + {file = "arro3_compute-0.4.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:78724cbfea5a270b7662d9772ca02991b19a1600e07093f6b1ecb654b16428f7"}, + {file = "arro3_compute-0.4.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d862f21b59e50a9bdbba66d0e882493443276ddeab16950fd80464c25a0d299"}, + {file = "arro3_compute-0.4.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e92cbf9a81e4a98e5eb7ef5d459c3653e8f3aa9cdd056270569dc9d3dedafdf"}, + {file = "arro3_compute-0.4.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39aa882dea1f27be1e53c1f5e585ca9125b6f4c3f997cc17f4ea86f185a2d115"}, + {file = "arro3_compute-0.4.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e3a1e2c7abb1ac91e08def42709b5fe3e002edfeecb50803ad8d749305296a9a"}, + {file = "arro3_compute-0.4.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d0acf9dd5c9ac88f6909b3f742ecedd1cdff64a57ee65598b2da1612f1b32f6b"}, +] + +[package.dependencies] +arro3-core = "*" + +[[package]] +name = "arro3-core" +version = "0.4.2" +description = "Core library for representing Arrow data in Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "arro3_core-0.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:188b8f52dce3ee37944f655154cfa193481276e566ff7f7faf0c8aef6c021ec1"}, + {file = "arro3_core-0.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:795525ca689246987296963b6510d2f20ea3fca72246310eac07f85235145cf1"}, + {file = "arro3_core-0.4.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6f7c4c74fb47362fa1c1722899f33594152fc4c671309693e679758d4aabc71f"}, + {file = "arro3_core-0.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fe1bd737d677cd808c79ae93f3d8dabbcf5645ce18e7a427a08e2aa656a38da"}, + {file = "arro3_core-0.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88cdfb806b6c40c779c9a9b65fb1df6d079c1bf21e3c5890fc560746b5dc3a30"}, + {file = "arro3_core-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c633c375b6bf91fad9eea62a923c3f2b908209ef93dd5a40503dfc346595db81"}, + {file = "arro3_core-0.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b426c98e7596ed575a6f98b84c2497b479b834769970fd82437db25d8973e46b"}, + {file = "arro3_core-0.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5fc1557bdbb4339b70ddac824b0b2fd9e5befa1ec014331f6a5ee1100a949d33"}, + {file = "arro3_core-0.4.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:0c4f423e51022d20dbcb248dce82b209996057a90b4f8ac0610132c948a26e19"}, + {file = "arro3_core-0.4.2-cp310-none-win_amd64.whl", hash = "sha256:7b82b5fcae218f5bc04c4d2966d0460aae7421191b420c44fd5ffe9fa2269251"}, + {file = "arro3_core-0.4.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7132b800fb00f3b515e0c4ee0be4347d68ba0c83248f3cb12532811a074347b7"}, + {file = "arro3_core-0.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1dc027766e5ae91a8659113a32cc70a4a0146602d644d50254383a87e1b8d020"}, + {file = "arro3_core-0.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75bfacb4b0b62e92227bbf0b78f7a9e971382ca99eb8cc9ec13b01d3d169ad74"}, + {file = "arro3_core-0.4.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0f6a80edb578a82c154254e6a1ae022aef8040d65e746515f98ec7a3c9977a3b"}, + {file = "arro3_core-0.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84874cb24aaea76845b6bdd633fc24cf2cb12fa25c6f65cbf5c1b3cda78671cd"}, + {file = "arro3_core-0.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a710ea4003749272c0f98f34986686aed831de05fff03bab836dbd2c473bf652"}, + {file = "arro3_core-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbd621ccce42b30a5ab62f9587a9d11577bc3ad11fbe26af6756a44fb0beb122"}, + {file = "arro3_core-0.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e1279a554bd04fa4b6f78af74cac181784796a8b22e26ee81d75d7a58d7b66e6"}, + {file = "arro3_core-0.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2c34c727e4f6bdbe03734a10d63b58f58a6fd3b1a31383d1a4ee6ab7dbf7eac"}, + {file = "arro3_core-0.4.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ff9173d2a8449774856dc490717ff049b763f19dbf6a8ceb6dda1e3993cd41a1"}, + {file = "arro3_core-0.4.2-cp311-none-win_amd64.whl", hash = "sha256:7dbab08ab5a11b53215761044ed5d488a9ed4565666af556829b1b90c668082b"}, + {file = "arro3_core-0.4.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4818c4aaee1f7a82015ce12f25438c1c5fcfee8dfb7101c2c7111400d1d63d65"}, + {file = "arro3_core-0.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dd8afe0d87afc971543885307ad15595e4f4bf10cf07826289c71feca99c52ee"}, + {file = "arro3_core-0.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19bdef051ec52dde34f529f840f4432ce3fe6473dafd1300ed14a3cc2c84750e"}, + {file = "arro3_core-0.4.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:17975f730e844655eb0e897abd60b5d796716fa1fe4ded586a66bc7b73a037c6"}, + {file = "arro3_core-0.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a922fd0e592ea0aeca26eb8b3fee523d70028281d20d069a753a9cda48de85a"}, + {file = "arro3_core-0.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba82e64814e95b43059f19ba29f000e6faeedb95006f83e4b5bda3e24a7d4e02"}, + {file = "arro3_core-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:207b37364b0cb3b57b6aee0662813b609943d3b8950ec7746a8f424a856d471b"}, + {file = "arro3_core-0.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba5499d4f314458ed1c7a6eca56823a0f03ce387f22c71c5f1fe1ceff2acadd6"}, + {file = "arro3_core-0.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:55d7975169d676e64dcc5a69339ab6e2043cef654957b9121380abb9160cf8b3"}, + {file = "arro3_core-0.4.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3c84d0249d1558c21e4f0cef0794ac33e222d495640c315a8b75756764403bbe"}, + {file = "arro3_core-0.4.2-cp312-none-win_amd64.whl", hash = "sha256:9318084172d378b54ddbfe8048d59ea2918ad5ebf5b1bc0ad3c97d6e241264a2"}, + {file = "arro3_core-0.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5609b031e1156fd51a921632428cdbe0fb463c9aef1e20c968ede198b01031e2"}, + {file = "arro3_core-0.4.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d6fe170e058ca3c11262413cd2668113c37d9a3102534243e1398d91bec52634"}, + {file = "arro3_core-0.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9d3a63f88ef4c2d6b5a4e7d7cef579400f61ca3655d5c1846ac04a8996022c1"}, + {file = "arro3_core-0.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db16916617b9214dbaec1babd6eefbeca68afc5c15dd04d63cbf6dccd3ba593b"}, + {file = "arro3_core-0.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a13e1a72baa5157e487a5730afdacd04c7f53f592244f35292eccd650b77c0c"}, + {file = "arro3_core-0.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d16739e1eaf390929db425f658d396c1e9bd7fbd15ba1d58079c5395d9685c6e"}, + {file = "arro3_core-0.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2cdf9b288c2eda8a819609be7b0cd45b7aa0701a2faf89fd8c08eae5fdf8dbef"}, + {file = "arro3_core-0.4.2-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:ccbc0b2444f705e32c0a0bbaebfbb2578a9fb5a31f76aa8fbbc5c47bd54e2119"}, + {file = "arro3_core-0.4.2-cp38-none-win_amd64.whl", hash = "sha256:184638f7889dad437d2e80664d227f03cab2eb95243110694fb961deaa769130"}, + {file = "arro3_core-0.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3fc7dff046ba4a7d1171671a271b1ca28d4d84795d11f176b677c23134eb85a"}, + {file = "arro3_core-0.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afcc6114167ad9dff347e5e615a7df8adcebde4af46211cf55807ae0b938936"}, + {file = "arro3_core-0.4.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ce85e631d1d2f41d2e35fdf2e8852962943b266861849f6a728191a97ceeef64"}, + {file = "arro3_core-0.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd8b1782c000d570f2a390ed3cddcf8dfa8b8b5e78e23e4c44018cc15932e9bb"}, + {file = "arro3_core-0.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34622078587a017cae18ee8615438e5d651e49e02474cafa8b7f038e59d56ea5"}, + {file = "arro3_core-0.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dba37e822f9b47ba8ef324b36ef0c687a869c454dc6c7b06495e9af0493361c"}, + {file = "arro3_core-0.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e6d9a0a3e5deaeaaf2147bd2d7aa9b123710b0b8ab5c298d0ce7b20588e57b6"}, + {file = "arro3_core-0.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:700c628f4250818713f7e7d6891241286475a221d106a52b2695476874f57f7e"}, + {file = "arro3_core-0.4.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ffb08124400baecec32ce965be9bdf92f65f47ca5df1b8171564b55898aad707"}, + {file = "arro3_core-0.4.2-cp39-none-win_amd64.whl", hash = "sha256:5118f95d85ff25aa628179572479085cda2abcb0277fe0569b1fdfb59badb9f7"}, + {file = "arro3_core-0.4.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e28c2b208ce455a75dad8de73f6ac1d282d8dfa4b0dabf27f9c73920bc44530"}, + {file = "arro3_core-0.4.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0ae2eb0802f59310c4014dad6f0bda6f21ccadfc1bb86e1a8601d354ac148fd"}, + {file = "arro3_core-0.4.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf646d4f5f46031bf5ec430b3beb7071ca08f5e7057163e8170c9fe9826c55ae"}, + {file = "arro3_core-0.4.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:082360665986302c8926497d6cabd32e1ae5695356a887d25f4886bcca5e468f"}, + {file = "arro3_core-0.4.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aa96c469a601bef4f9e4873ba90ba21d8c55db8b9bc564767993cfed7af91e0"}, + {file = "arro3_core-0.4.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8c4b18b60f2437e7453910b6ef67b6c9f21dbab621ea55cff3fbdd46d21104f"}, + {file = "arro3_core-0.4.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c94b41691bd918e546c4527ac99d40771dceba78f4d5e17d102c9e75c89a7c1e"}, + {file = "arro3_core-0.4.2-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:56525947619bf974e2825ff64c72e37874779f07fd861498abd5977a30dfee17"}, + {file = "arro3_core-0.4.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a7913aecdb8e03dbbe8c12d6b304cc6c199d149f4220afb4f55c0607443e22"}, + {file = "arro3_core-0.4.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:680489bc38c4a3d3de9b84b863c68901f9102e48cfb313ecfc0fc7124456b89c"}, + {file = "arro3_core-0.4.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e3e00ebb9504e18a25590a74142df68cb804b4adeeb5d6a2806e3c079d769fb1"}, + {file = "arro3_core-0.4.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc2c1865e9ebabe85a966409c2c40cec14f49f8caf9e5b7135db4a63bb639148"}, + {file = "arro3_core-0.4.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:5f24bbdcedfccc3eae049e7c87d8faa3cb4a36cd35a6946154edce5c2d227a6e"}, + {file = "arro3_core-0.4.2-pp38-pypy38_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:03437e244e4e417d8d6dd328f6cd6121ca127bd2394b027036709b31384294a7"}, + {file = "arro3_core-0.4.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f534af87fe6419e4f3b026d2738891b16e57dde05a2b4326113f673e3913c0a"}, + {file = "arro3_core-0.4.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34d009c4b4a4fecd5596210fc6fdc233fb0e53fae579170c9dd8921f739d6be4"}, + {file = "arro3_core-0.4.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2af00c5f32f9ff4d75ef30fa1c8518f7235510109b6a58e7c0f19fba52023b93"}, + {file = "arro3_core-0.4.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa6c434ff9528dac250a67d0baf4e1d861dce6467056d41f26acca0171db7460"}, + {file = "arro3_core-0.4.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e5486c15ee3ff1b2b207717b538f6c95ef1f8903897177a63acc20e98fc8512"}, + {file = "arro3_core-0.4.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d87fddaaa490205f44abe892e9b9111be7db17d21faa3515092f03e71cdafc71"}, + {file = "arro3_core-0.4.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4e199de0338b19ffc6de31b4666c524d4c6667883b92e320344b286e9e16d963"}, + {file = "arro3_core-0.4.2-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:2321128c17aa90442aee92a9aeb1fdbd98255a6b14c720dc7682681eeb566ed0"}, +] + +[[package]] +name = "arro3-io" +version = "0.4.2" +description = "Rust-based readers and writers for Arrow in Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "arro3_io-0.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b813524a097dd2f276cf15b0d709a358066fe940e222ee97f32b1b6be16306a"}, + {file = "arro3_io-0.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e24751e5158b5a1c69a5f53c2c093d318fe366c9fd10258981cc083351e3be6"}, + {file = "arro3_io-0.4.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c0dd9b06f590834c4751b157d9204dbc21b7675e26fd9157703bacdcae800223"}, + {file = "arro3_io-0.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e35e7768ca890db26ae56dba7c6bb2d9546371d06e358d490bd5aae2d6f18fc"}, + {file = "arro3_io-0.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a64472eab7a1f814965e8f463327bd1c0b7f34cbc11fe6a335b532bcfa334396"}, + {file = "arro3_io-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce2156efed8fc5ef9103c601e327e36d9e226706fd3b83939138f0b0191c3db2"}, + {file = "arro3_io-0.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3df8c13af00737d97f9032a372f15d3e73e6633f30c6d8a79afb0306004be4cc"}, + {file = "arro3_io-0.4.2-cp310-none-win_amd64.whl", hash = "sha256:4d3f7bd5b577777eb4a727e85bd41de866156736b073bde513c674194920b07c"}, + {file = "arro3_io-0.4.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fa2cc5fdd80b284883235224ede8947dcb7cbe2d6242881f206f2cbf6a4edde2"}, + {file = "arro3_io-0.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:31d25591bc299a4edcc43bfb3660fa66f0da2263428bdec5d198c4f718a81331"}, + {file = "arro3_io-0.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8646aa2724d698e077ed05dab77d3386788466451c0f7fe21151e4b40cee33aa"}, + {file = "arro3_io-0.4.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7fa4c86d5c0347e854b003cb26661df700753a6ab44cbaa5d0a6e19d2a7938e7"}, + {file = "arro3_io-0.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f81b337892975fb04ff195511abae673066ed54c2aa754d667ca5a324cb8ddf"}, + {file = "arro3_io-0.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d5ad15aee0c3783aa444c695d08eea6eb4a7bac5cb6df783d6913339999a060"}, + {file = "arro3_io-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f7db7c8853798947f7c93b3426f8b744e043afafffd93ef9af1e690249b8310"}, + {file = "arro3_io-0.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e943c8573deb8304610d0fe6a8f7124139a6a845d7a456833ddfd8908d7646d0"}, + {file = "arro3_io-0.4.2-cp311-none-win_amd64.whl", hash = "sha256:08270e95880371157c383d5a992ee8745f0268ce2bea93b66916e240de5cbaf5"}, + {file = "arro3_io-0.4.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:c3d587a62133784eb4cefc73cc998e726fe1bbcad08d790a94e4ea3b3e3fd45e"}, + {file = "arro3_io-0.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f2929cfffacdbf8210b7a60db0b0272d33e23bdc4f3c0a6ec17a8eecf16de1ad"}, + {file = "arro3_io-0.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fdb50ddd7ee7d5d895f951ab430f17779c00365d2aeebc18457cf13bc7f938f"}, + {file = "arro3_io-0.4.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e3d6bcb3e9383dca126da8874ace7f82f9c5fd230a390132038b627cbf8924a"}, + {file = "arro3_io-0.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4cda77e2c4ae965268d2437f57b6e277edf039b1b2322df3f9b0c24de5c0d6f"}, + {file = "arro3_io-0.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e794f88c4927b04aecddae6390dc1422ddc0103d12f244430bc9b41f3e1f98d5"}, + {file = "arro3_io-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5b0bf9468f3bb72b4ad101d075a497c2e34a8a3aa0d5a14207c2cee2305845e"}, + {file = "arro3_io-0.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:51e37b856f11f540bf3e5d637d29e57629876f6f5f5a80f9d3b5c3eb4eb47b41"}, + {file = "arro3_io-0.4.2-cp312-none-win_amd64.whl", hash = "sha256:7cad7391806823517d7fae2881e356f8d042ac5d884931db2766b1d41cb4eadc"}, + {file = "arro3_io-0.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:479dd7427c0969292cf0e6b3263a61e60ea8d2c295fed828a9ba50d78319c87c"}, + {file = "arro3_io-0.4.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88591873367a4c5dee098284d382fffaa9316fc8018c7c60b55af903e8917423"}, + {file = "arro3_io-0.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ac49aca58f17ad757204c51ede54ce04a01919f67ff33987d0ee5f6199e207c"}, + {file = "arro3_io-0.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57b3cf25aa6c431ce4fecbf80a9a6295b294ce112dce0943989a864dabfba13e"}, + {file = "arro3_io-0.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13a64c5d70a07cbcd65e1d6bfa1fad32b28cd7d6bbf5fdf4034eb772be6743f5"}, + {file = "arro3_io-0.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bc20001aea56c0b3d469806c8ff44d1cac0650e21aebdf6b0e67f6e4a43a0c2c"}, + {file = "arro3_io-0.4.2-cp38-none-win_amd64.whl", hash = "sha256:3ecffbb7918eb3715c21724823b7b85089af6cca3dba94b16618ec65686bd137"}, + {file = "arro3_io-0.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c38895262e69693d2c9f8586566181019fa2dd4aff94e5aa046b4e0816ec45"}, + {file = "arro3_io-0.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:147d43d7a955da29ad474f8eac011f2cda67d4d0ea87b4779776ca5dcaf22ef3"}, + {file = "arro3_io-0.4.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b1cbcaee46d6ac3765adb46dece9047fe8495f9667be6100e795c1138cc3c48"}, + {file = "arro3_io-0.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72ca23b70a5c58a4df2ac0849ff850718a82ec531ef311d7db6372f309a40166"}, + {file = "arro3_io-0.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35d8bd8d03c99e1a5d2df901ba57e618caa9c1da02b056b4cb5a7f27699ca09f"}, + {file = "arro3_io-0.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48562411d63501465e2dd74f08173e057ab7c060be25956305570ec3caf94ecb"}, + {file = "arro3_io-0.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9df241a007bc52d00156298ceec053baf611f10a3553e523bd8871704dc8a723"}, + {file = "arro3_io-0.4.2-cp39-none-win_amd64.whl", hash = "sha256:26270691a152d5d1dd906958fd7c0153721d34457197a4ba418d805f5aa9c015"}, + {file = "arro3_io-0.4.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb7b296da15f4cdddb2b1c3e9bcc512bdeb36f191e6777e125178983d49846f2"}, + {file = "arro3_io-0.4.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f5a3194d8df6dbf60dcb3da02c3d21a07dda2ab5f18ae1a67ef6bc86915682c"}, + {file = "arro3_io-0.4.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d015797096996cd2b502a2e3f3091ccf92ba9ae2af866e916e44510ab5d21e69"}, + {file = "arro3_io-0.4.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8313f74640f1af23cea538107bb96fca70f6b5ebb7026d35491d9e909500bb6e"}, + {file = "arro3_io-0.4.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b2057dc6bdc868dbd912ba2ec69816bbd20907d601f8d52d04062a90b032abc"}, + {file = "arro3_io-0.4.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca5200ec24605cf8433e4d01f71639c27afc259fcfb98aab46648e2c15ef44a7"}, + {file = "arro3_io-0.4.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee07a0c839619c63d2c533021dff10d736a73d0f0143749faabf784840fec66b"}, + {file = "arro3_io-0.4.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:06ba49ecdb2ef367e96a7fa8a0ce488e0522e290424891ca4e81c898c9ca1210"}, + {file = "arro3_io-0.4.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33f4e02d5500cc694d3f019844a93e9a838277afa73668e1d23b90240d0bd875"}, + {file = "arro3_io-0.4.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cb58e9f22dde7ceae6c2fc825ddcec1837280488cbec0c3c62a2a947534db390"}, + {file = "arro3_io-0.4.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9475f96e62cbe3fb79ae5a1563ed63fcff08bc7276c81fb1d89b7f908a5168d7"}, + {file = "arro3_io-0.4.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1e9f10a56c5a4d7ac9cd095ee9b2f8329be4aeb5d58cde4a1ed97f394d6ec146"}, + {file = "arro3_io-0.4.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a4f9b082b2d0f40eb3d41dd83cee91ab934d802b3cd6855abc05e5c1462a03e"}, + {file = "arro3_io-0.4.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:029575334c9c049cfcfb9cd925e507d6a08a1b7138464b5bf673f551d2b1d674"}, + {file = "arro3_io-0.4.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a36185cf0fe4c1188c77cd583114be0fb777283270d162d0fb590bbdb6643bf7"}, + {file = "arro3_io-0.4.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:169b6a0000766a58d29d728520d4441403cf4cf642b20f71395cbf64bfe83ff3"}, +] + +[package.dependencies] +arro3-core = "*" + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + [[package]] name = "asgi-s3-response-middleware" version = "0.0.4" @@ -121,19 +453,122 @@ starlette = ">=0.38.4" lint = ["pre-commit"] testing = ["boto3-stubs[s3] (>=1.35.11)", "coverage", "moto (>=5.0.13)", "pytest"] +[[package]] +name = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] + +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "attrs" +version = "24.2.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, +] + +[package.extras] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] + +[[package]] +name = "babel" +version = "2.16.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, + {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, +] + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "bleach" +version = "6.2.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.9" +files = [ + {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, + {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, +] + +[package.dependencies] +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.5)"] + [[package]] name = "boto3" -version = "1.35.34" +version = "1.35.62" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.34-py3-none-any.whl", hash = "sha256:291e7b97a34967ed93297e6171f1bebb8529e64633dd48426760e3fdef1cdea8"}, - {file = "boto3-1.35.34.tar.gz", hash = "sha256:57e6ee8504e7929bc094bb2afc879943906064179a1e88c23b4812e2c6f61532"}, + {file = "boto3-1.35.62-py3-none-any.whl", hash = "sha256:e6574047701ab009c2b2bb17b530a3a2fb34de8698b77f8bbb34dd0c9286c117"}, + {file = "boto3-1.35.62.tar.gz", hash = "sha256:f80eefe7506aa01799b1027d03eddfd3c4a60548d6db5c32f139e1dec9f3f4f5"}, ] [package.dependencies] -botocore = ">=1.35.34,<1.36.0" +botocore = ">=1.35.62,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -142,13 +577,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.34" +version = "1.35.62" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.34-py3-none-any.whl", hash = "sha256:ccb0fe397b11b81c9abc0c87029d17298e17bf658d8db5c0c5a551a12a207e7a"}, - {file = "botocore-1.35.34.tar.gz", hash = "sha256:789b6501a3bb4a9591c1fe10da200cc315c1fa5df5ada19c720d8ef06439b3e3"}, + {file = "botocore-1.35.62-py3-none-any.whl", hash = "sha256:4c3960a33289371d96eba5116364c41e6b848b5afbed3a43f5d8c7ba36f55e1d"}, + {file = "botocore-1.35.62.tar.gz", hash = "sha256:9df762294d5c727d9ea1c48b98579729a0ba40fd317c3262a6b8d8e12fb67489"}, ] [package.dependencies] @@ -262,101 +697,116 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -384,85 +834,92 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "comm" +version = "0.2.2" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = false +python-versions = ">=3.8" +files = [ + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, +] + +[package.dependencies] +traitlets = ">=4" + +[package.extras] +test = ["pytest"] + [[package]] name = "coverage" -version = "7.6.1" +version = "7.6.5" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, - {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, - {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, - {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, - {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, - {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, - {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, - {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, - {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, - {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, - {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, - {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, - {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, - {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, - {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, - {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, - {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, - {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, + {file = "coverage-7.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d5fc459f1b62aa328b5c6943b4fa060fa63e7749e41c974929c503dc01d0527b"}, + {file = "coverage-7.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:197fc6b5e6271c4f822486cabbd91f32e73f784076b69c91179c5a9fec2d1442"}, + {file = "coverage-7.6.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a7cab0762dfbf0b0cd6eb22f7bceade31bda0f0647f9420cbb45571de4493a3"}, + {file = "coverage-7.6.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee4559597f53455d70b9935e25c21fd05aebbb8d540af04097f7cf6dc7562754"}, + {file = "coverage-7.6.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e68b894ee1a170da94b7da381527f277ec00c67f6141e79aa1ce8eebbb5561"}, + {file = "coverage-7.6.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fe4ea637711f1f1895895578972e3d0ed5efb6ef970ba0e2e26d9fad1e3c820e"}, + {file = "coverage-7.6.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1d5f036235a747cd30be433ef7ba6dab5ac41d8dc69d54094d5438c34fe8d565"}, + {file = "coverage-7.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a6ab7b88b1a614bc1db015e68048eb29b0c30ffa01be3d7d04da1f320db0f01"}, + {file = "coverage-7.6.5-cp310-cp310-win32.whl", hash = "sha256:ad712a72cd734fb4265041005011bbf61f8d6cba74e12c91f14a9cda63a80a64"}, + {file = "coverage-7.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:61e03bb66c087b74aea6c28d10a49f72eca98b95438a8db1ae6dfcdd060f9039"}, + {file = "coverage-7.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dffec9f67f4eb8bc9c5df720833f1f1ca36b73d86e6f95b422ca5210e264cc26"}, + {file = "coverage-7.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2fde790ac0024af19fc5327fd50890dad0c31b653f6d2ed91ab2810c046bfe22"}, + {file = "coverage-7.6.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3250186381ec8e9b71234fb92ef77da87d81cbf20df3364f8f5ebf7180ec030d"}, + {file = "coverage-7.6.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ecfa205ce1fab6d8e94fe011eec04f6035a6069f70c331efd7cd1cd2d33d897"}, + {file = "coverage-7.6.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15af7bfbc37de33e7df3f740cc735057606c63bbe44aee8b07339a3e7bb8ecf6"}, + {file = "coverage-7.6.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:caf4d6af23af0e0df4e40e9985f6063d7f5434f225ee4d4ed7001f1428302403"}, + {file = "coverage-7.6.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5dcf2da597fe616a41c59e29fd8d390ac2149aeed421172eef14470c7e9dcd06"}, + {file = "coverage-7.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebc76107d896a53116e5ef21998f321b630b574a65b78b01176ca64e8978b43e"}, + {file = "coverage-7.6.5-cp311-cp311-win32.whl", hash = "sha256:0e9e4cd48dca252d99bb97b14f13b5940813937cc7ec568418c1a195dec9cbcc"}, + {file = "coverage-7.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:a6eb14739a20c5a46073c8ad066ada17d91d14599ed98d724614db46fbae867b"}, + {file = "coverage-7.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9ae01c434cb0d445008257bb42dcd38112190e5bfc3a4480fde49572b16bc2ae"}, + {file = "coverage-7.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c72ef3be899f389c9f0934a9d06a28fa097ade096760102c732583c04cc31d75"}, + {file = "coverage-7.6.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2fc574b4fb082a0141d4df00079c4877d46cb98e8ec979cbd9a92426f5abd8a"}, + {file = "coverage-7.6.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bc0eba158ad9d1883efb4f1bf08f88a999e091daf30454fd5f136322e700c72"}, + {file = "coverage-7.6.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a360b282c0acbf3541cc67e8d8a2a65589ea6cfa10c7e8a48e318bf28ca90f94"}, + {file = "coverage-7.6.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b22f96d3f2425942a649d786f57ae431425c9a970afae784cd865c1ffee34bad"}, + {file = "coverage-7.6.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:70eca9c6bf742feaf3ee453c1aaa932c2ab88ca420f411d90aa43ae831127b22"}, + {file = "coverage-7.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c4bafec5da3498d498a4ca3136f5a01fded487c6a54f18aea0bcd673feedf1b"}, + {file = "coverage-7.6.5-cp312-cp312-win32.whl", hash = "sha256:edecf498cabb335e8a683eb672558355bb9536d4397c54f1e135d9b8910512a3"}, + {file = "coverage-7.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:e7c40ae56761d3c08f916019b2f8579a147f93be8e12f0f2bf4edc4ea9e1c0ab"}, + {file = "coverage-7.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:49ea4a739dc14856d7c5f935da90db123b77a850cfddcfacb490a28de8f87257"}, + {file = "coverage-7.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e0c51339a28aa43d0f2b1211e57ceeeeed5e09f4deb6fc543d939de68069e81e"}, + {file = "coverage-7.6.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:040c3d5cf4db24e7cb890bf4b547a25bd3a3516c58c9f2a22f822199ee2ad8ed"}, + {file = "coverage-7.6.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0b7e67f9d3b156ab93fce71485fadd043ab04b45d5d88623c6d94f7d16ced5b"}, + {file = "coverage-7.6.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e078bfb114025c55fdbaa802f4c13e20e6ce4e10a96918d7234656b41f69e649"}, + {file = "coverage-7.6.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:559cdb21aca30810e648ac08270535c1d2e17226ebbdf90860a060d3680cb05f"}, + {file = "coverage-7.6.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:23e2dd956277061f24d9eda7539113a9c35a9409a9935647a34ced79b8aacb75"}, + {file = "coverage-7.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3e7c4ccb41dc9830b2ca8592e401045a81740f627c7c0348bdc3b7373ce52f8e"}, + {file = "coverage-7.6.5-cp313-cp313-win32.whl", hash = "sha256:9d3565bb7deaa12d634426f113e6b106028c535667ba7756af65f00464981ba5"}, + {file = "coverage-7.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:5039410420d9ddcd5b8566d3afbb28b89d70c4481dbb283ea543263cbefa2b67"}, + {file = "coverage-7.6.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:77b640aa78d4d9f620fb2e1b2a41b0d196120c188d0a7f678761d668d6251fcc"}, + {file = "coverage-7.6.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bb3799f6279df37e369027128926de4c159e6399000316ebd7a69e55b84dc97f"}, + {file = "coverage-7.6.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55aba7ab64e8af37a18064f23f399dff10041fa3aaf201528f12004968638b9f"}, + {file = "coverage-7.6.5-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6065a988d724dd3328cb21e97378bef0549b2f8b7ac0a3376785d9f7f05dc736"}, + {file = "coverage-7.6.5-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f092d222e4286cdd1ab9707da36944c11ba6294d8c9b18534057f03e6866367"}, + {file = "coverage-7.6.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1dc99aece5f899955eece053a798e279f7fe7059dd5e2a95af82878cfe4a44e1"}, + {file = "coverage-7.6.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1b14515f83ffa7a6787e725d804c6b11dd317a6bd0373d8519a61e4a587fe534"}, + {file = "coverage-7.6.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9fa6d90130165346935541f3762933dae07e237ff7d6d780fae556039f08a470"}, + {file = "coverage-7.6.5-cp313-cp313t-win32.whl", hash = "sha256:1be9ec4c49becb35955b9d69c27e6385aedd40d233f1cf065e8430c59924b30e"}, + {file = "coverage-7.6.5-cp313-cp313t-win_amd64.whl", hash = "sha256:7ff4fd7679df56e36fc838ef227e95e3aa1b0ca0548daede7f8ae6e54479c115"}, + {file = "coverage-7.6.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:23abf0846290aa57d629c4f4181d0d56cbaa45d3999e60cb0df1d2bab7bc6bfe"}, + {file = "coverage-7.6.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4903685e8059e170182ac4681ee72d2dfbb92692225023c1e325a9d85c1be31"}, + {file = "coverage-7.6.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad9621fd9773b1461f8942da4130fbb16ee0a877eb58bc57532ea41cce20d3e"}, + {file = "coverage-7.6.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7324358a77f37ffd8ba94d3c8326eb316c972ec72264f36fc3be04cff8542465"}, + {file = "coverage-7.6.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf182001229411cd6a90d180973b345bd6fe255dbbac362100e6a625dfb107f5"}, + {file = "coverage-7.6.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4601dacd88556c94c9fb5063b9354b1fe971af9a5b25b2575faefd12bf8170a5"}, + {file = "coverage-7.6.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e5aa3d62285ef1b16f655e1ae298c6fa919209637d317934e382e9b99c28c118"}, + {file = "coverage-7.6.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8cb5601620c3d98d2c98847272acc2406333d43c9d7d49386d879bd451677429"}, + {file = "coverage-7.6.5-cp39-cp39-win32.whl", hash = "sha256:c32428f6285344caedd945236f31c46645bb10faae8702d1409bb49df218e55a"}, + {file = "coverage-7.6.5-cp39-cp39-win_amd64.whl", hash = "sha256:809e868eee27d056bc72590c69940c119775d218681b1a8ef9ba0ef8d7693e53"}, + {file = "coverage-7.6.5-pp39.pp310-none-any.whl", hash = "sha256:49145276f39f940b18a539e1e4a378e06c64a127922450ffd2fb82b9fe1ad3d9"}, + {file = "coverage-7.6.5.tar.gz", hash = "sha256:6069188329fbe0a63876719099076261ce7a1adeea95bf236cff4353a8451b0d"}, ] [package.dependencies] @@ -575,38 +1032,38 @@ dev = ["black (==22.3.0)", "hypothesis", "numpy", "pytest (>=5.30)", "pytest-ben [[package]] name = "cryptography" -version = "43.0.1" +version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-43.0.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d"}, - {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062"}, - {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962"}, - {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277"}, - {file = "cryptography-43.0.1-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a"}, - {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042"}, - {file = "cryptography-43.0.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494"}, - {file = "cryptography-43.0.1-cp37-abi3-win32.whl", hash = "sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2"}, - {file = "cryptography-43.0.1-cp37-abi3-win_amd64.whl", hash = "sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d"}, - {file = "cryptography-43.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d"}, - {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806"}, - {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85"}, - {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c"}, - {file = "cryptography-43.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1"}, - {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa"}, - {file = "cryptography-43.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4"}, - {file = "cryptography-43.0.1-cp39-abi3-win32.whl", hash = "sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47"}, - {file = "cryptography-43.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb"}, - {file = "cryptography-43.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034"}, - {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d"}, - {file = "cryptography-43.0.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289"}, - {file = "cryptography-43.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84"}, - {file = "cryptography-43.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:88cce104c36870d70c49c7c8fd22885875d950d9ee6ab54df2745f83ba0dc365"}, - {file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9d3cdb25fa98afdd3d0892d132b8d7139e2c087da1712041f6b762e4f807cc96"}, - {file = "cryptography-43.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e710bf40870f4db63c3d7d929aa9e09e4e7ee219e703f949ec4073b4294f6172"}, - {file = "cryptography-43.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7c05650fe8023c5ed0d46793d4b7d7e6cd9c04e68eabe5b0aeea836e37bdcec2"}, - {file = "cryptography-43.0.1.tar.gz", hash = "sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d"}, + {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, + {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, + {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, + {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, + {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, + {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, + {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, ] [package.dependencies] @@ -619,18 +1076,75 @@ nox = ["nox"] pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.1)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] +[[package]] +name = "debugpy" +version = "1.8.8" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6"}, + {file = "debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d"}, + {file = "debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f"}, + {file = "debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9"}, + {file = "debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318"}, + {file = "debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba"}, + {file = "debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98"}, + {file = "debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4"}, + {file = "debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996"}, + {file = "debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9"}, + {file = "debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9"}, + {file = "debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864"}, + {file = "debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804"}, + {file = "debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f"}, + {file = "debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add"}, + {file = "debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b"}, + {file = "debugpy-1.8.8-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:143ef07940aeb8e7316de48f5ed9447644da5203726fca378f3a6952a50a9eae"}, + {file = "debugpy-1.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95651bdcbfd3b27a408869a53fbefcc2bcae13b694daee5f1365b1b83a00113"}, + {file = "debugpy-1.8.8-cp38-cp38-win32.whl", hash = "sha256:26b461123a030e82602a750fb24d7801776aa81cd78404e54ab60e8b5fecdad5"}, + {file = "debugpy-1.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3cbf1833e644a3100eadb6120f25be8a532035e8245584c4f7532937edc652a"}, + {file = "debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854"}, + {file = "debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2"}, + {file = "debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2"}, + {file = "debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9"}, + {file = "debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f"}, + {file = "debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + [[package]] name = "distlib" -version = "0.3.8" +version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, ] [[package]] @@ -647,26 +1161,54 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "executing" +version = "2.1.0" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.8" +files = [ + {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, + {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + [[package]] name = "fastapi" -version = "0.115.0" +version = "0.115.5" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.115.0-py3-none-any.whl", hash = "sha256:17ea427674467486e997206a5ab25760f6b09e069f099b96f5b55a32fb6f1631"}, - {file = "fastapi-0.115.0.tar.gz", hash = "sha256:f93b4ca3529a8ebc6fc3fcf710e5efa8de3df9b41570958abf1d97d843138004"}, + {file = "fastapi-0.115.5-py3-none-any.whl", hash = "sha256:596b95adbe1474da47049e802f9a65ab2ffa9c2b07e7efee70eb8a66c9f2f796"}, + {file = "fastapi-0.115.5.tar.gz", hash = "sha256:0e7a4d0dc0d01c68df21887cce0945e72d3c48b9f4f79dfe7a7d53aa08fbb289"}, ] [package.dependencies] pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.37.2,<0.39.0" +starlette = ">=0.40.0,<0.42.0" typing-extensions = ">=4.8.0" [package.extras] all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] +[[package]] +name = "fastjsonschema" +version = "2.20.0" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, + {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + [[package]] name = "filelock" version = "3.16.1" @@ -683,15 +1225,26 @@ docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2. testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] typing = ["typing-extensions (>=4.12.2)"] +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + [[package]] name = "geojson-pydantic" -version = "1.1.1" +version = "1.1.2" description = "Pydantic data models for the GeoJSON spec." optional = false python-versions = ">=3.8" files = [ - {file = "geojson_pydantic-1.1.1-py3-none-any.whl", hash = "sha256:3d8adeee9ee0e1bb658c262fcb2e0da44090e44c0123ea95f989e484bdf123d9"}, - {file = "geojson_pydantic-1.1.1.tar.gz", hash = "sha256:9c4b3e0a384a41fc919f50766979a559efae2f04ac5936f3e7cb3e1cc28927a7"}, + {file = "geojson_pydantic-1.1.2-py3-none-any.whl", hash = "sha256:2488736307c1717469419110b31413277fc1095eb2137592d5417e6100268d0f"}, + {file = "geojson_pydantic-1.1.2.tar.gz", hash = "sha256:be3b686e059dad95caff1ea411f020333b2c6182d87fcc4f69d1cbde2cca2c09"}, ] [package.dependencies] @@ -702,6 +1255,29 @@ dev = ["bump-my-version", "pre-commit"] docs = ["mkdocs", "mkdocs-material", "pygments"] test = ["pytest", "pytest-cov", "shapely"] +[[package]] +name = "geopandas" +version = "1.0.1" +description = "Geographic pandas extensions" +optional = false +python-versions = ">=3.9" +files = [ + {file = "geopandas-1.0.1-py3-none-any.whl", hash = "sha256:01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6"}, + {file = "geopandas-1.0.1.tar.gz", hash = "sha256:b8bf70a5534588205b7a56646e2082fb1de9a03599651b3d80c99ea4c2ca08ab"}, +] + +[package.dependencies] +numpy = ">=1.22" +packaging = "*" +pandas = ">=1.4.0" +pyogrio = ">=0.7.2" +pyproj = ">=3.3.0" +shapely = ">=2.0.0" + +[package.extras] +all = ["GeoAlchemy2", "SQLAlchemy (>=1.3)", "folium", "geopy", "mapclassify", "matplotlib (>=3.5.0)", "psycopg-binary (>=3.1.0)", "pyarrow (>=8.0.0)", "xyzservices"] +dev = ["black", "codecov", "pre-commit", "pytest (>=3.1.0)", "pytest-cov", "pytest-xdist"] + [[package]] name = "h11" version = "0.14.0" @@ -715,57 +1291,54 @@ files = [ [[package]] name = "h3" -version = "3.7.7" -description = "Hierarchical hexagonal geospatial indexing system" +version = "4.1.2" +description = "Uber's hierarchical hexagonal geospatial indexing system" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "h3-3.7.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:951ecc9da0bcd5091670b13636928747bc98bc76891da0fa725524ec017cd9de"}, - {file = "h3-3.7.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26b9dd605541223ef927cc913deccb236cee024b16032f4a3e4387e2791479f2"}, - {file = "h3-3.7.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:996ebb32dc26dd607af7493149f94ce316117be6f42971f7b33bbd326ec695d2"}, - {file = "h3-3.7.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa2a4aa888cd9476788b874b4e11e178293f5b86e8461c36596bf183c242d417"}, - {file = "h3-3.7.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0256e42687470c6f0044ca78fe375fe32a654be8b5a8313b4a68f52f513389c6"}, - {file = "h3-3.7.7-cp310-cp310-win_amd64.whl", hash = "sha256:a3e2bc125490f900e0513c30480722f129bab1415f23040b6cd3a3f8d5a39336"}, - {file = "h3-3.7.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7d59018a50cd3b6d0ff0b18a54fdfcbaf2f79c13c831842f54fd2780c4b561ea"}, - {file = "h3-3.7.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e74526d941c1656fe162cc63b459b61aa83a15e257e9477b1570f26c544b51a"}, - {file = "h3-3.7.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c7398dbab685fcf3fe92f7c4c5901ab258bc66f7fa05fd1da8693375a10a549"}, - {file = "h3-3.7.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d22ea488ab5fe01c94070e9a6b3222916905a4d3f7a9d33cb2298c93fa0ffd3"}, - {file = "h3-3.7.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c94836155e8169be393980fc059f06481a14dd1913bd9cba609f6f1e8864c171"}, - {file = "h3-3.7.7-cp311-cp311-win_amd64.whl", hash = "sha256:836e74313ff55324485cd7e07783bc67df3191ec08a318035d7cd8ee0b0badab"}, - {file = "h3-3.7.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:51c2f63ef5a57e4b18ebc9c0eb56656433e280ec45ab487a514127bb6e7d6a1f"}, - {file = "h3-3.7.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d6e38dea47c220d9802af8e8bebc806f9f39358aee07b736191ff21e2c9921d"}, - {file = "h3-3.7.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e408342e94f558802a97bfcbe1baae2af8b1fd926ad9041d970ff9dbd0502099"}, - {file = "h3-3.7.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:644c3c84585aa4df62e81bc54fd305c4d6686324731de230b0ddbd7036ed172c"}, - {file = "h3-3.7.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bb4a3d5e82d0c89512dc71b4eac17976a29be29da250ba76bc94bc5b9e824f0e"}, - {file = "h3-3.7.7-cp312-cp312-win_amd64.whl", hash = "sha256:2ccff5f02589e80202597ed0b9f61ebd114e262e7dd0fe88059298602898192f"}, - {file = "h3-3.7.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ef2e71b619f984e71c4bd9d128152e2c7e3e788e2d2ec571b32cef1d295ddf38"}, - {file = "h3-3.7.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cb13f0213ed6da80e739355e5b62cfc81b7b1469af997be3384a6cbc3a1a750"}, - {file = "h3-3.7.7-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:701f72f703d892fb17e66b9fd7b6b2ad125e135b091eb7dd0ec11858b84d84d2"}, - {file = "h3-3.7.7-cp36-cp36m-win_amd64.whl", hash = "sha256:796622be7cb052690404c0ac03768183e51ae22505ce4a424b4537b2b7609fba"}, - {file = "h3-3.7.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bcd88a72d6aa97d0f3b3b87b7bfd9725a8909501e6cb9d0057d5b690b6bb37b0"}, - {file = "h3-3.7.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7358ba3f91193a2551c4a8d7ad7fd348e567b3a3581c9c161630029dfb23e07"}, - {file = "h3-3.7.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8f34b204edc2e8f7d99a6db4ed1b5d202b7ea3ec6817d373ec432dee14efe04"}, - {file = "h3-3.7.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aa0f8ce89b5e694815ee7a5172a782d58f2652267329de7008354b110b53955"}, - {file = "h3-3.7.7-cp37-cp37m-win_amd64.whl", hash = "sha256:4c851baa1c2d4f29b01157ce2a4cdb1f3879fff5c36ff7861dad1526963a17a7"}, - {file = "h3-3.7.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6f3a9da5472820b0a4add342f96fe52f65fbb8f46984383885738517b38af69e"}, - {file = "h3-3.7.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1c57da776a3c1a01e2986b1f6a31d497ee0be8fcdbaaf9b23bb90f5a90eb8f0b"}, - {file = "h3-3.7.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a5c0c0ddd9c57694ecc3b9ba99cbef2842882f8943d6edc676a365e139dbc6d"}, - {file = "h3-3.7.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c1b5a0a652719b645387231bf6d7d4dd85150e4440a4ce72a804a10e86592ae"}, - {file = "h3-3.7.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:64f76dc827fef94e9f43f95a1daea2e11f2ad2e8c55deac072f3d59bd62412d4"}, - {file = "h3-3.7.7-cp38-cp38-win_amd64.whl", hash = "sha256:c993a36120d7f5607f24ba9e39caf715eaf9cd9d44f5d5660fd85e3f4e0c6bf7"}, - {file = "h3-3.7.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eb154d2af699870b888e10476e327c895078009d2d2a6ef2d053d7dcf0e2c270"}, - {file = "h3-3.7.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c96ad74e246bb7638d413efa8199dd4c58ee929424a4dcaadb16365195f77f87"}, - {file = "h3-3.7.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52901f14f8b6e2c82075fd52c0e70176b868f621d47b5dc93f468c510e963722"}, - {file = "h3-3.7.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9d82a0fcc647e7bab36ab2e7a7392d141edc95d113ccf972e0fb7b0ddf80a0"}, - {file = "h3-3.7.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f4417d09acb36f0452346052f576923d6e4334bff3459f217d6278d40397424"}, - {file = "h3-3.7.7-cp39-cp39-win_amd64.whl", hash = "sha256:7ae774cd43b057f68dc10c99e4522fa40ed6b32ab90b2df0025595ffa15e77a0"}, - {file = "h3-3.7.7.tar.gz", hash = "sha256:33d141c3cef0725a881771fd8cb80c06a0db84a6e4ca5c647ce095ae07c61e94"}, -] - -[package.extras] -all = ["flake8", "numpy", "pylint", "pytest", "pytest-cov"] + {file = "h3-4.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5a3249ed73b6abd58d117ddd77c164111a7de82001fe0418b8bddad0ca002dde"}, + {file = "h3-4.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aae33b789cd279754434dbfe85cbc5613c7154d8833032224a2517544f99949f"}, + {file = "h3-4.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03da6f6bbaeb6225e1adccd7033f0f6615348306bbcabac687c6296bcc43b8ae"}, + {file = "h3-4.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afda9065e45b49b2d8c008ff668c7dd22adf72b8077e3e8e1062a16fc5321b4e"}, + {file = "h3-4.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d2f0cd18c99016f157529dbee7d9dc1c10d4f68a1a23c8034f0a85ee266b712a"}, + {file = "h3-4.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:9499cd0328767d5782fa9743ba541b16d6c9ac23b77633525609f814f994b2c2"}, + {file = "h3-4.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bf4d5c4d80765ad35a2b095356d925ffdabd4862f222551c662fa5d67601719e"}, + {file = "h3-4.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2d94bb16ebb1430a867d947a05f9e8aeeb826c1a57103451a3d6f7a074fb8cf4"}, + {file = "h3-4.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea237b1d07eac2ee2623c13ee7184f25ec53656bcf8bb24b343d1ee2d0e5235b"}, + {file = "h3-4.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83ff8045825883e45c30763059828ae9497dc07e3650317617216342b313ab41"}, + {file = "h3-4.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7426c5fc55f2780ac33a4898b86c2330c2676a64a96fadcd879914bf34179b64"}, + {file = "h3-4.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e88b7189bced71f81e1ffbab8c71ec305100379fd99efb093853351a570d20e1"}, + {file = "h3-4.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e6cedb9931098a3bd81b8571105384abeb75c50b2ee8d5c1335b1ac034717c07"}, + {file = "h3-4.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a77f901957f1f8a1a6aaee0380dd1ee504eb9cf15290d9944c3f8d303cefd299"}, + {file = "h3-4.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7ea3c418dc595f37ee37184dfdca670dffaa5bdf42d8383f0e1b6a6cb233b5b"}, + {file = "h3-4.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:194774640e30f849ca69ebcfd0a8b73e580ad87592a40e52f522af670bf23f7d"}, + {file = "h3-4.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:844eddfefcfbafac2fb17f93910bda00fd2fd85a4194145363f84233340d1273"}, + {file = "h3-4.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:e9c78eb4240ed737157b8e7ab764ac6bdebbb7643f6ed1d769cc638efcba558a"}, + {file = "h3-4.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:404746987c9f65e1a369729894c9aaf0f50640b134949cb7a704109f46dc49be"}, + {file = "h3-4.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e680f384b3f2f351c7435a00632acefe006429f5d6271d118c9be4968a5d38e4"}, + {file = "h3-4.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8073e4169624dd4e628055aac0d04094f76919e8798039157163a64bf7f85b07"}, + {file = "h3-4.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e64ecdcdd09514dd86a4dbaf811de8927d27a106f887412825ae8bc51dbf8ea"}, + {file = "h3-4.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4d48b0afb056e8c2dd08b265d570490c92122b842c3e1068644625a6c4aa8f8a"}, + {file = "h3-4.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:71f964d417d83ee8888f2ab9544c677b7a8a2311fb17eb9e5c23711671cb86be"}, + {file = "h3-4.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e37e72c888d0a0d60ab4386ba5d5963d4594d5df658e2c80dc083195986e07f9"}, + {file = "h3-4.1.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9d7cb5b18c29e7e68d3a67de872adb4cfe9d17c7154f7b5b526d8f3b5df1ac2e"}, + {file = "h3-4.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae2ecdc19bfcd3b1a474897c87b413d309a26e18f7ec62132ad130c7ad24d58a"}, + {file = "h3-4.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c51837406f7580b388be151be574fc34dfda43d4e9703bb3fe61029dda73af1"}, + {file = "h3-4.1.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:59dbdb9a5b661150b2e08d7f1b932ea9b2fd4f42315a7a04bc19994bf803c7c3"}, + {file = "h3-4.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:4e7ac71efbe11e6562ad03a830f337b2ae657b7adaabc0d6feafafc136677ecc"}, + {file = "h3-4.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:033175d639fbf26807ead3ba6c78e72f3093aeb8f898b543eba59a0f4d7c493d"}, + {file = "h3-4.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1e9b1d3a2bdc19e06e4ee7b2d604a30b3388da8a2ed4a40724fed1ee69bae4e1"}, + {file = "h3-4.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b53cc9061a94ca0b7ae9043e9fb24e37468186c7b68f8c846c5651cf4550f6"}, + {file = "h3-4.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9254e1ac842a1162cbb554ce354760802741402b593a14eb9baf762662491c"}, + {file = "h3-4.1.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b1ed29fb5b5ce1fe04683f541ae8443199274dad07dfb4616167b2a80e94dc47"}, + {file = "h3-4.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:7760539ee7e566c62338405526d0be27efff1818d7db618721ef7e1c78811919"}, + {file = "h3-4.1.2.tar.gz", hash = "sha256:505344f080b2fee96c1124fc0f9d9ba56c74cb46d17692b8ab5de6ce241b3ad0"}, +] + +[package.extras] +all = ["cartopy", "contextily", "geodatasets", "geopandas", "geoviews", "h3[test]", "jupyter-book", "jupyterlab", "jupyterlab-geojson", "matplotlib", "sphinx (>=7.3.3)"] numpy = ["numpy"] -test = ["flake8", "pylint", "pytest", "pytest-cov"] +test = ["flake8", "numpy", "pylint", "pytest", "pytest-cov"] [[package]] name = "h3ronpy" @@ -839,13 +1412,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "identify" -version = "2.6.1" +version = "2.6.2" description = "File identification library for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, - {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, + {file = "identify-2.6.2-py2.py3-none-any.whl", hash = "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3"}, + {file = "identify-2.6.2.tar.gz", hash = "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd"}, ] [package.extras] @@ -895,6 +1468,131 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "ipykernel" +version = "6.29.5" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, + {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=24" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "8.29.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.10" +files = [ + {file = "ipython-8.29.0-py3-none-any.whl", hash = "sha256:0188a1bd83267192123ccea7f4a8ed0a78910535dbaa3f37671dca76ebd429c8"}, + {file = "ipython-8.29.0.tar.gz", hash = "sha256:40b60e15b22591450eef73e40a027cf77bd652e757523eebc5bd7c7c498290eb"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt-toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5.13.0" +typing-extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} + +[package.extras] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "intersphinx-registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing-extensions"] +kernel = ["ipykernel"] +matplotlib = ["matplotlib"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] + +[[package]] +name = "ipywidgets" +version = "8.1.5" +description = "Jupyter interactive widgets" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245"}, + {file = "ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17"}, +] + +[package.dependencies] +comm = ">=0.1.3" +ipython = ">=6.1.0" +jupyterlab-widgets = ">=3.0.12,<3.1.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=4.0.12,<4.1.0" + +[package.extras] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jedi" +version = "0.19.2" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, +] + +[package.dependencies] +parso = ">=0.8.4,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] + [[package]] name = "jinja2" version = "3.1.4" @@ -923,6 +1621,361 @@ files = [ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] +[[package]] +name = "json5" +version = "0.9.28" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "json5-0.9.28-py3-none-any.whl", hash = "sha256:29c56f1accdd8bc2e037321237662034a7e07921e2b7223281a5ce2c46f0c4df"}, + {file = "json5-0.9.28.tar.gz", hash = "sha256:1f82f36e615bc5b42f1bbd49dbc94b12563c56408c6ffa06414ea310890e9a6e"}, +] + +[package.extras] +dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv (==0.5.1)"] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] + +[[package]] +name = "jsonschema" +version = "4.23.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.9" +files = [ + {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, + {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + +[[package]] +name = "jupyter" +version = "1.1.1" +description = "Jupyter metapackage. Install all the Jupyter components in one go." +optional = false +python-versions = "*" +files = [ + {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, + {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, +] + +[package.dependencies] +ipykernel = "*" +ipywidgets = "*" +jupyter-console = "*" +jupyterlab = "*" +nbconvert = "*" +notebook = "*" + +[[package]] +name = "jupyter-client" +version = "8.6.3" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, + {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, +] + +[package.dependencies] +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-console" +version = "6.6.3" +description = "Jupyter terminal console" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, + {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, +] + +[package.dependencies] +ipykernel = ">=6.14" +ipython = "*" +jupyter-client = ">=7.0.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +prompt-toolkit = ">=3.0.30" +pygments = "*" +pyzmq = ">=17" +traitlets = ">=5.4" + +[package.extras] +test = ["flaky", "pexpect", "pytest"] + +[[package]] +name = "jupyter-core" +version = "5.7.2" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.10.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, +] + +[package.dependencies] +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.14.2" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"}, + {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.9.0" +jupyter-server-terminals = ">=0.4.4" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = ">=1.7" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.3.0" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.3.0-py3-none-any.whl", hash = "sha256:f67e1095ad61ae04349024f0b40345062ab108a0c6998d9810fec6a3c1a70cd5"}, + {file = "jupyterlab-4.3.0.tar.gz", hash = "sha256:7c6835cbf8df0af0ec8a39332e85ff11693fb9a468205343b4fc0bfbc74817e5"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +httpx = ">=0.25.0" +ipykernel = ">=6.5.0" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2" +packaging = "*" +setuptools = ">=40.1.0" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.6.9)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.1.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.4.1)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.2.post3)", "matplotlib (==3.9.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.14.1)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.3" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, + {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, +] + +[package.dependencies] +babel = ">=2.10" +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.31" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.13" +description = "Jupyter interactive widgets for JupyterLab" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"}, + {file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"}, +] + +[[package]] +name = "lonboard" +version = "0.10.3" +description = "Fast, interactive geospatial data visualization in Jupyter." +optional = false +python-versions = "<4.0,>=3.8" +files = [ + {file = "lonboard-0.10.3-py3-none-any.whl", hash = "sha256:27c77c4021afe49d70377de5af879f9afd9fe133508c54f936fd222e4cf8d98c"}, + {file = "lonboard-0.10.3.tar.gz", hash = "sha256:0e0202279a83f05ba5dfffd6193e09d9f40b20dda3c89b3098de06b620abc1eb"}, +] + +[package.dependencies] +anywidget = ">=0.9.0,<0.10.0" +arro3-compute = ">=0.4.1" +arro3-core = ">=0.4.1" +arro3-io = ">=0.4.1" +ipywidgets = ">=7.6.0" +numpy = ">=1.14" +pyproj = ">=3.3" +traitlets = ">=5.7.1" +typing-extensions = {version = ">=4.6.0,<5.0.0", markers = "python_version < \"3.12\""} + +[package.extras] +cli = ["click (>=8.1.7,<9.0.0)", "pyogrio (>=0.8)", "shapely (>=2,<3)"] +geopandas = ["geopandas (>=0.13)", "pandas (>=2,<3)", "shapely (>=2,<3)"] +movingpandas = ["movingpandas (>=0.17)"] + [[package]] name = "mangum" version = "0.19.0" @@ -963,73 +2016,88 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.5" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.8" files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, ] +[package.dependencies] +traitlets = "*" + [[package]] name = "mdurl" version = "0.1.2" @@ -1043,32 +2111,43 @@ files = [ [[package]] name = "mirakuru" -version = "2.5.2" +version = "2.5.3" description = "Process executor (not only) for tests." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "mirakuru-2.5.2-py3-none-any.whl", hash = "sha256:90c2d90a8cf14349b2f33e6db30a16acd855499811e0312e56cf80ceacf2d3e5"}, - {file = "mirakuru-2.5.2.tar.gz", hash = "sha256:41ca583d355eb7a6cfdc21c1aea549979d685c27b57239b88725434f115a7132"}, + {file = "mirakuru-2.5.3-py3-none-any.whl", hash = "sha256:2fab68356fb98fb5358ea3ab65f5e511f34b5a0b16cfd0a0935ef15a3393f025"}, + {file = "mirakuru-2.5.3.tar.gz", hash = "sha256:39b33f8fcdf13764a6cfe936e0feeead3902a161fec438df3be7cce98f7933c6"}, ] [package.dependencies] psutil = {version = ">=4.0.0", markers = "sys_platform != \"cygwin\""} +[[package]] +name = "mistune" +version = "3.0.2" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, +] + [[package]] name = "moto" -version = "5.0.16" +version = "5.0.20" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "moto-5.0.16-py2.py3-none-any.whl", hash = "sha256:4ce1f34830307f7b3d553d77a7ef26066ab3b70006203d4226b048c9d11a3be4"}, - {file = "moto-5.0.16.tar.gz", hash = "sha256:f4afb176a964cd7a70da9bc5e053d43109614ce3cab26044bcbb53610435dff4"}, + {file = "moto-5.0.20-py2.py3-none-any.whl", hash = "sha256:b6df0041255acb973f2adcb31e3dee1379770ece0253520d4d15986d22aa06cf"}, + {file = "moto-5.0.20.tar.gz", hash = "sha256:24b1319cc66f81f40817a57ac80602a5f1862669bdd621f0d96ab989a6578255"}, ] [package.dependencies] boto3 = ">=1.9.201" -botocore = ">=1.14.0" +botocore = ">=1.14.0,<1.35.45 || >1.35.45,<1.35.46 || >1.35.46" cryptography = ">=3.3.1" Jinja2 = ">=2.10.1" python-dateutil = ">=2.1,<3.0.0" @@ -1078,7 +2157,7 @@ werkzeug = ">=0.5,<2.2.0 || >2.2.0,<2.2.1 || >2.2.1" xmltodict = "*" [package.extras] -all = ["PyYAML (>=5.1)", "antlr4-python3-runtime", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "graphql-core", "joserfc (>=0.9.0)", "jsondiff (>=1.1.2)", "jsonpath-ng", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.6)", "pyparsing (>=3.0.7)", "setuptools"] +all = ["PyYAML (>=5.1)", "antlr4-python3-runtime", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "graphql-core", "joserfc (>=0.9.0)", "jsondiff (>=1.1.2)", "jsonpath-ng", "jsonschema", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.6)", "pyparsing (>=3.0.7)", "setuptools"] apigateway = ["PyYAML (>=5.1)", "joserfc (>=0.9.0)", "openapi-spec-validator (>=0.5.0)"] apigatewayv2 = ["PyYAML (>=5.1)", "openapi-spec-validator (>=0.5.0)"] appsync = ["graphql-core"] @@ -1092,6 +2171,7 @@ events = ["jsonpath-ng"] glue = ["pyparsing (>=3.0.7)"] iotdata = ["jsondiff (>=1.1.2)"] proxy = ["PyYAML (>=5.1)", "antlr4-python3-runtime", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "graphql-core", "joserfc (>=0.9.0)", "jsondiff (>=1.1.2)", "jsonpath-ng", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.6)", "pyparsing (>=3.0.7)", "setuptools"] +quicksight = ["jsonschema"] resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "graphql-core", "joserfc (>=0.9.0)", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.6)", "pyparsing (>=3.0.7)"] s3 = ["PyYAML (>=5.1)", "py-partiql-parser (==0.5.6)"] s3crc32c = ["PyYAML (>=5.1)", "crc32c", "py-partiql-parser (==0.5.6)"] @@ -1100,6 +2180,97 @@ ssm = ["PyYAML (>=5.1)"] stepfunctions = ["antlr4-python3-runtime", "jsonpath-ng"] xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] +[[package]] +name = "nbclient" +version = "0.10.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.16.4" +description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["pyqtwebengine (>=5.15)"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] +webpdf = ["playwright"] + +[[package]] +name = "nbformat" +version = "5.10.4" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, +] + +[package.dependencies] +fastjsonschema = ">=2.15" +jsonschema = ">=2.6" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, +] + [[package]] name = "nodeenv" version = "1.9.1" @@ -1111,6 +2282,46 @@ files = [ {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] +[[package]] +name = "notebook" +version = "7.0.7" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "notebook-7.0.7-py3-none-any.whl", hash = "sha256:289b606d7e173f75a18beb1406ef411b43f97f7a9c55ba03efa3622905a62346"}, + {file = "notebook-7.0.7.tar.gz", hash = "sha256:3bcff00c17b3ac142ef5f436d50637d936b274cfa0b41f6ac0175363de9b4e09"}, +] + +[package.dependencies] +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.0.2,<5" +jupyterlab-server = ">=2.22.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" + +[package.extras] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + [[package]] name = "numpy" version = "1.26.4" @@ -1157,80 +2368,92 @@ files = [ ] [[package]] -name = "orjson" -version = "3.10.7" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +name = "orjson" +version = "3.10.11" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.8" +files = [ + {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, + {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, + {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, + {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, + {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, + {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, + {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, + {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, + {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, + {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, + {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, + {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, + {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, + {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, + {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, + {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, + {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, + {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, + {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, +] + +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." optional = false -python-versions = ">=3.8" +python-versions = ">=3.6" files = [ - {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, - {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, - {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, - {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, - {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, - {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, - {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, - {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, - {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, - {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, - {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, - {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, - {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, - {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, - {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, - {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, - {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, - {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, - {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, - {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, ] [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -1319,6 +2542,46 @@ sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-d test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.9.2)"] +[[package]] +name = "pandocfilters" +version = "1.5.1" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, +] + +[[package]] +name = "parso" +version = "0.8.4" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, +] + +[package.extras] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] + +[[package]] +name = "pexpect" +version = "4.9.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + [[package]] name = "platformdirs" version = "4.3.6" @@ -1352,24 +2615,24 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "port-for" -version = "0.7.3" +version = "0.7.4" description = "Utility that helps with local TCP ports management. It can find an unused TCP localhost port and remember the association." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "port_for-0.7.3-py3-none-any.whl", hash = "sha256:786fa1171cee23093a475d65228b4a9877d249827ceb7cd2362cb7b80d0c69d4"}, - {file = "port_for-0.7.3.tar.gz", hash = "sha256:2d597e5854a1b323b17eba8ae0630784c779857abde5e22444c88d233a60f953"}, + {file = "port_for-0.7.4-py3-none-any.whl", hash = "sha256:08404aa072651a53dcefe8d7a598ee8a1dca320d9ac44ac464da16ccf2a02c4a"}, + {file = "port_for-0.7.4.tar.gz", hash = "sha256:fc7713e7b22f89442f335ce12536653656e8f35146739eccaeff43d28436028d"}, ] [[package]] name = "pre-commit" -version = "3.8.0" +version = "4.0.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" 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"}, + {file = "pre_commit-4.0.1-py2.py3-none-any.whl", hash = "sha256:efde913840816312445dc98787724647c65473daefe420785f885e8ed9a06878"}, + {file = "pre_commit-4.0.1.tar.gz", hash = "sha256:80905ac375958c0444c65e9cebebd948b3cdb518f335a091a670a89d652139d2"}, ] [package.dependencies] @@ -1379,34 +2642,63 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[[package]] +name = "prometheus-client" +version = "0.21.0" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.21.0-py3-none-any.whl", hash = "sha256:4fa6b4dd0ac16d58bb587c04b1caae65b8c5043e85f778f42f5f632f6af2e166"}, + {file = "prometheus_client-0.21.0.tar.gz", hash = "sha256:96c83c606b71ff2b0a433c98889d275f51ffec6c5e267de37c7a2b5c9aa9233e"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.48" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, +] + +[package.dependencies] +wcwidth = "*" + [[package]] name = "psutil" -version = "6.0.0" +version = "6.1.0" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, - {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, - {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, - {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, - {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, - {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, - {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, - {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, - {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, - {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, - {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, - {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, - {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, - {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, - {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, - {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, - {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, + {file = "psutil-6.1.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ff34df86226c0227c52f38b919213157588a678d049688eded74c76c8ba4a5d0"}, + {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:c0e0c00aa18ca2d3b2b991643b799a15fc8f0563d2ebb6040f64ce8dc027b942"}, + {file = "psutil-6.1.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:000d1d1ebd634b4efb383f4034437384e44a6d455260aaee2eca1e9c1b55f047"}, + {file = "psutil-6.1.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5cd2bcdc75b452ba2e10f0e8ecc0b57b827dd5d7aaffbc6821b2a9a242823a76"}, + {file = "psutil-6.1.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:045f00a43c737f960d273a83973b2511430d61f283a44c96bf13a6e829ba8fdc"}, + {file = "psutil-6.1.0-cp27-none-win32.whl", hash = "sha256:9118f27452b70bb1d9ab3198c1f626c2499384935aaf55388211ad982611407e"}, + {file = "psutil-6.1.0-cp27-none-win_amd64.whl", hash = "sha256:a8506f6119cff7015678e2bce904a4da21025cc70ad283a53b099e7620061d85"}, + {file = "psutil-6.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6e2dcd475ce8b80522e51d923d10c7871e45f20918e027ab682f94f1c6351688"}, + {file = "psutil-6.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0895b8414afafc526712c498bd9de2b063deaac4021a3b3c34566283464aff8e"}, + {file = "psutil-6.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dcbfce5d89f1d1f2546a2090f4fcf87c7f669d1d90aacb7d7582addece9fb38"}, + {file = "psutil-6.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:498c6979f9c6637ebc3a73b3f87f9eb1ec24e1ce53a7c5173b8508981614a90b"}, + {file = "psutil-6.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d905186d647b16755a800e7263d43df08b790d709d575105d419f8b6ef65423a"}, + {file = "psutil-6.1.0-cp36-cp36m-win32.whl", hash = "sha256:6d3fbbc8d23fcdcb500d2c9f94e07b1342df8ed71b948a2649b5cb060a7c94ca"}, + {file = "psutil-6.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1209036fbd0421afde505a4879dee3b2fd7b1e14fee81c0069807adcbbcca747"}, + {file = "psutil-6.1.0-cp37-abi3-win32.whl", hash = "sha256:1ad45a1f5d0b608253b11508f80940985d1d0c8f6111b5cb637533a0e6ddc13e"}, + {file = "psutil-6.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:a8fb3752b491d246034fa4d279ff076501588ce8cbcdbb62c32fd7a377d996be"}, + {file = "psutil-6.1.0.tar.gz", hash = "sha256:353815f59a7f64cdaca1c0307ee13558a0512f6db064e92fe833784f08539c7a"}, ] [package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] +dev = ["black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "wheel"] +test = ["pytest", "pytest-xdist", "setuptools"] [[package]] name = "psycopg" @@ -1508,18 +2800,82 @@ files = [ [[package]] name = "psycopg-pool" -version = "3.2.3" +version = "3.2.4" description = "Connection Pool for Psycopg" optional = false python-versions = ">=3.8" files = [ - {file = "psycopg_pool-3.2.3-py3-none-any.whl", hash = "sha256:53bd8e640625e01b2927b2ad96df8ed8e8f91caea4597d45e7673fc7bbb85eb1"}, - {file = "psycopg_pool-3.2.3.tar.gz", hash = "sha256:bb942f123bef4b7fbe4d55421bd3fb01829903c95c0f33fd42b7e94e5ac9b52a"}, + {file = "psycopg_pool-3.2.4-py3-none-any.whl", hash = "sha256:f6a22cff0f21f06d72fb2f5cb48c618946777c49385358e0c88d062c59cbd224"}, + {file = "psycopg_pool-3.2.4.tar.gz", hash = "sha256:61774b5bbf23e8d22bedc7504707135aaf744679f8ef9b3fe29942920746a6ed"}, ] [package.dependencies] typing-extensions = ">=4.6" +[[package]] +name = "psygnal" +version = "0.11.1" +description = "Fast python callback/event system modeled after Qt Signals" +optional = false +python-versions = ">=3.8" +files = [ + {file = "psygnal-0.11.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:8d9187700fc608abefeb287bf2e0980a26c62471921ffd1a3cd223ccc554181b"}, + {file = "psygnal-0.11.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:cec87aee468a1fe564094a64bc3c30edc86ce34d7bb37ab69332c7825b873396"}, + {file = "psygnal-0.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7676e89225abc2f37ca7022c300ffd26fefaf21bdc894bc7c41dffbad5e969df"}, + {file = "psygnal-0.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c392f638aac2cdc4f13fffb904455224ae9b4dbb2f26d7f3264e4208fee5334d"}, + {file = "psygnal-0.11.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:3c04baec10f882cdf784a7312e23892416188417ad85607e6d1de2e8a9e70709"}, + {file = "psygnal-0.11.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:8f77317cbd11fbed5bfdd40ea41b4e551ee0cf37881cdbc325b67322af577485"}, + {file = "psygnal-0.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24e69ea57ee39e3677298f38a18828af87cdc0bf0aa64685d44259e608bae3ec"}, + {file = "psygnal-0.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d77f1a71fe9859c0335c87d92afe1b17c520a4137326810e94351839342d8fc7"}, + {file = "psygnal-0.11.1-cp312-cp312-macosx_10_16_arm64.whl", hash = "sha256:0b55cb42e468f3a7de75392520778604fef2bc518b7df36c639b35ce4ed92016"}, + {file = "psygnal-0.11.1-cp312-cp312-macosx_10_16_x86_64.whl", hash = "sha256:c7dd3cf809c9c1127d90c6b11fbbd1eb2d66d512ccd4d5cab048786f13d11220"}, + {file = "psygnal-0.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:885922a6e65ece9ff8ccf2b6810f435ca8067f410889f7a8fffb6b0d61421a0d"}, + {file = "psygnal-0.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1c2388360a9ffcd1381e9b36d0f794287a270d58e69bf17658a194bbf86685c1"}, + {file = "psygnal-0.11.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:2deec4bf7adbb9e3ef0513ae8b9e98bb815eb62b76a7bf1986f1d6ed626c8784"}, + {file = "psygnal-0.11.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:36cd667dd1d3e70e3fd970463a8571436e5ae58f02cc05a4a1669e6d8550d263"}, + {file = "psygnal-0.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc260f19349485bd58e276e731cf8be40d8891cc6ff1c165762bd2c1b84f1ff7"}, + {file = "psygnal-0.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fe70023fe4cf8bb6a0f27e89fd8f1cf715893dfb004b790937a0bc59d9071aab"}, + {file = "psygnal-0.11.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c9dde42a2cdf34f9c5fe0cd7515e2ab1524e3207afb37d096733c7a3dcdf388a"}, + {file = "psygnal-0.11.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c05f474b297e2577506b354132c3fed054f0444ccce6d431f299d3750c2ede4b"}, + {file = "psygnal-0.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:713dfb96a1315378ce9120376d975671ede3133de4985884a43d4b6b332faeee"}, + {file = "psygnal-0.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09c75d21eb090e2ffafb32893bc5d104b98ed237ed64bebccb45cca759c7dcf4"}, + {file = "psygnal-0.11.1-py3-none-any.whl", hash = "sha256:04255fe28828060a80320f8fda937c47bc0c21ca14f55a13eb7c494b165ea395"}, + {file = "psygnal-0.11.1.tar.gz", hash = "sha256:f9b02ca246ab0adb108c4010b4a486e464f940543201074591e50370cd7b0cc0"}, +] + +[package.extras] +dev = ["ipython", "mypy", "mypy-extensions", "pre-commit", "pyqt5", "pytest-mypy-plugins", "rich", "ruff", "typing-extensions"] +docs = ["griffe (==0.25.5)", "mkdocs (==1.4.2)", "mkdocs-material (==8.5.10)", "mkdocs-minify-plugin", "mkdocs-spellcheck[all]", "mkdocstrings (==0.20.0)", "mkdocstrings-python (==0.8.3)"] +proxy = ["wrapt"] +pydantic = ["pydantic"] +test = ["attrs", "dask", "msgspec", "numpy", "pydantic", "pyinstaller (>=4.0)", "pytest (>=6.0)", "pytest-cov", "toolz", "wrapt"] +testqt = ["pytest-qt", "qtpy"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, +] + +[package.extras] +tests = ["pytest"] + [[package]] name = "py-cpuinfo" version = "9.0.0" @@ -1716,13 +3072,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.5.2" +version = "2.6.1" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.5.2-py3-none-any.whl", hash = "sha256:2c912e55fd5794a59bf8c832b9de832dcfdf4778d79ff79b708744eed499a907"}, - {file = "pydantic_settings-2.5.2.tar.gz", hash = "sha256:f90b139682bee4d2065273d5185d71d37ea46cfe57e1b5ae184fc6a0b2484ca0"}, + {file = "pydantic_settings-2.6.1-py3-none-any.whl", hash = "sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87"}, + {file = "pydantic_settings-2.6.1.tar.gz", hash = "sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0"}, ] [package.dependencies] @@ -1748,6 +3104,94 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyogrio" +version = "0.10.0" +description = "Vectorized spatial vector file format I/O using GDAL/OGR" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pyogrio-0.10.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:046eeeae12a03a3ebc3dc5ff5a87664e4f5fc0a4fb1ea5d5c45d547fa941072b"}, + {file = "pyogrio-0.10.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:44380f4d9245c776f432526e29ce4d29238aea26adad991803c4f453474f51d3"}, + {file = "pyogrio-0.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14fd3b72b4e2dc59e264607b265c742b0c5ec2ea9e748b115f742381b28dd373"}, + {file = "pyogrio-0.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:1fea7892f4633cab04d13563e47ec2e87dc2b5cd71b9546018d123184528c151"}, + {file = "pyogrio-0.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3539596a76eb8a9d166d6f9d3f36731a8c5bd5c43901209d89dc66b9dc00f079"}, + {file = "pyogrio-0.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:eac90b2501656892c63bc500c12e71f3dbf7d66ddc5a7fb05cd480d25d1b7022"}, + {file = "pyogrio-0.10.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5b1a51431a27a1cb3e4e19558939c1423106e06e7b67d6285f4fba9c2d0a91b9"}, + {file = "pyogrio-0.10.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:216d69cd77b2b4a0c9d7d449bc239f8b77f3d73f4a05d9c738a0745b236902d8"}, + {file = "pyogrio-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2f0b75f0077ce33256aec6278c2a9c3b79bf0637ddf4f93d3ab2609f0501d96"}, + {file = "pyogrio-0.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0a47f702d29808c557d2ebea8542c23903f021eae44e16838adef2ab4281c71b"}, + {file = "pyogrio-0.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:11e6c71d12da6b445e77d0fc0198db1bd35a77e03a0685e45338cbab9ce02add"}, + {file = "pyogrio-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0d74e91a9c0ff2f9abe01b556ff663977193b2d6922208406172d0fc833beff"}, + {file = "pyogrio-0.10.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2d6558b180e020f71ab7aa7f82d592ed3305c9f698d98f6d0a4637ec7a84c4ce"}, + {file = "pyogrio-0.10.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:a99102037eead8ba491bc57825c1e395ee31c9956d7bff7b4a9e4fdbff3a13c2"}, + {file = "pyogrio-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a4c373281d7cbf560c5b61f8f3c7442103ad7f1c7ac4ef3a84572ed7a5dd2f6"}, + {file = "pyogrio-0.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:19f18411bdf836d24cdc08b9337eb3ec415e4ac4086ba64516b36b73a2e88622"}, + {file = "pyogrio-0.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1abbcdd9876f30bebf1df8a0273f6cdeb29d03259290008275c7fddebe139f20"}, + {file = "pyogrio-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e09839590d71ff832aa95c4f23fa00a2c63c3de82c1fbd4fb8d265792acfc"}, + {file = "pyogrio-0.10.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c90478209537a31dcc65664a87a04c094bb0e08efe502908a6682b8cec0259bf"}, + {file = "pyogrio-0.10.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:fec45e1963b7058e5a1aa98598aed07c0858512c833d6aad2c672c3ec98bbf04"}, + {file = "pyogrio-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28cb139f8a5d0365ede602230104b407ae52bb6b55173c8d5a35424d28c4a2c5"}, + {file = "pyogrio-0.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:cea0187fcc2d574e52af8cfab041fa0a7ad71d5ef6b94b49a3f3d2a04534a27e"}, + {file = "pyogrio-0.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:7c02b207ea8cf09c501ea3e95d29152781a00d3c32267286bc36fa457c332205"}, + {file = "pyogrio-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:02e54bcfb305af75f829044b0045f74de31b77c2d6546f7aaf96822066147848"}, + {file = "pyogrio-0.10.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ea96a1338ed7991735b955d3f84ad5f71b3bc070b6a7a42449941aedecc71768"}, + {file = "pyogrio-0.10.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:32d349600561459791a43f528a92f3e9343a59bdc9bc30b1be9376f0b80cbf16"}, + {file = "pyogrio-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82f7bd6a87bd2e9484bcb4c87ab94eee4c2f573ad148707431c8b341d7f13d99"}, + {file = "pyogrio-0.10.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6166ae81462c257ed8e151c404e316642703813cf771c95ef8e11dcdf2581e47"}, + {file = "pyogrio-0.10.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:22d57495e835fe51b88da43dfbda606c07e1f6c3b849af0c3cfc18e17467641c"}, + {file = "pyogrio-0.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:eea82171bfc07fc778b8dc87b0cdc9ac06c389bc56b0c0b6f34bf9e45fb78c0e"}, + {file = "pyogrio-0.10.0.tar.gz", hash = "sha256:ec051cb568324de878828fae96379b71858933413e185148acb6c162851ab23c"}, +] + +[package.dependencies] +certifi = "*" +numpy = "*" +packaging = "*" + +[package.extras] +benchmark = ["pytest-benchmark"] +dev = ["cython"] +geopandas = ["geopandas"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "pyproj" +version = "3.7.0" +description = "Python interface to PROJ (cartographic projections and coordinate transformations library)" +optional = false +python-versions = ">=3.10" +files = [ + {file = "pyproj-3.7.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d5c7e7d24b967e328a5efd013f466804a1f226d1106ac7efc47dcc99360dbc8f"}, + {file = "pyproj-3.7.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:448958c46bd3fe2da91c89ba551ac5835e63073ca861422c6eb1af89979dfab1"}, + {file = "pyproj-3.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f673ca345bb92afc93d4235938ca0c9a76237aa7addf42a95965c8dc8cad9b49"}, + {file = "pyproj-3.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee60895f60cbd1a9c903ab2bc22adea63004296a1c28b8775a11cf50905cf085"}, + {file = "pyproj-3.7.0-cp310-cp310-win32.whl", hash = "sha256:0dd31b0740ee010934234f848d2d092c66146cb8d0ba009a64e41d192caa7686"}, + {file = "pyproj-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:7943d85ba39e89c51b920339ff63162d63bf89da161f0acb6206b0d39b11661e"}, + {file = "pyproj-3.7.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:e66d8d42dbdf232e121546c5a1dec097caf0454e4885c09a8e03cdcee0753c03"}, + {file = "pyproj-3.7.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7764b64a0aefe40134a2828b3a40be88f6c8b7832c45d8a9f2bd592ace4b2a3b"}, + {file = "pyproj-3.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53c442c5081dc95346996f5c4323fde2caafc69c6e60b4707aa46e88244f1e04"}, + {file = "pyproj-3.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc5b305d4d5d7697885681d9b660623e328227612823d5c660e0a9566cb48838"}, + {file = "pyproj-3.7.0-cp311-cp311-win32.whl", hash = "sha256:de2b47d748dc41cccb6b3b713d4d7dc9aa1046a82141c8665026908726426abc"}, + {file = "pyproj-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:38cba7c4c5679e40242dd959133e95b908d3b912dd66291094fd13510e8517ff"}, + {file = "pyproj-3.7.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:8cbec92bdd6e9933ca08795c12717d1384e9b51cf4b1acf0d753db255a75c51e"}, + {file = "pyproj-3.7.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8c4a8e4d3ba76c3adac3c087544cf92f7f9a19ea34946904a13fca48cc1c0106"}, + {file = "pyproj-3.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82624fb42aa31f6b1a860fbc0316babd07fd712642bc31022df4e9b4056bf463"}, + {file = "pyproj-3.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e1bbb3f89c68d4a6835c40b2da8b27680eec60e8cc7cdb08c09bcc725b2b62"}, + {file = "pyproj-3.7.0-cp312-cp312-win32.whl", hash = "sha256:952515d5592167ad4436b355485f82acebed2a49b46722159e4584b75a763dd3"}, + {file = "pyproj-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0692f806224e8ed82fe4acfa57268ff444fdaf9f330689f24c0d96e59480cce1"}, + {file = "pyproj-3.7.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:94e8b903a9e83448fd2379c49dec3e8cd83c9ed36f54354e68b601cef56d5426"}, + {file = "pyproj-3.7.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:64cb5c17d6f6305a8b978a40f95560c87c5b363fcac40632337955664437875a"}, + {file = "pyproj-3.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c54e9bdda7ab9c4a5af50f9d6e6ee7704e05fafd504896b96ed1208c7aea098"}, + {file = "pyproj-3.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24fa4e9e0abba875f9524808410cc520067eaf38fd5549ed0ef7c43ac39923c9"}, + {file = "pyproj-3.7.0-cp313-cp313-win32.whl", hash = "sha256:b9e8353fc3c79dc14d1f5ac758a1a6e4eee04102c3c0b138670f121f5ac52eb4"}, + {file = "pyproj-3.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:10a8dc6ec61af97c89ff032647d743f8dc023645773da42ef43f7ae1125b3509"}, + {file = "pyproj-3.7.0.tar.gz", hash = "sha256:bf658f4aaf815d9d03c8121650b6f0b8067265c36e31bc6660b98ef144d81813"}, +] + +[package.dependencies] +certifi = "*" + [[package]] name = "pytest" version = "8.3.3" @@ -1792,17 +3236,17 @@ histogram = ["pygal", "pygaljs"] [[package]] name = "pytest-cov" -version = "5.0.0" +version = "6.0.0" description = "Pytest plugin for measuring coverage." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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"}, + {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"}, + {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"}, ] [package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} +coverage = {version = ">=7.5", extras = ["toml"]} pytest = ">=4.6" [package.extras] @@ -1871,6 +3315,17 @@ files = [ [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + [[package]] name = "pytz" version = "2024.2" @@ -1882,6 +3337,48 @@ files = [ {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] +[[package]] +name = "pywin32" +version = "308" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, + {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, + {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, + {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, + {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, + {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, + {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, + {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, + {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, + {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, + {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, + {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, + {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, + {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, + {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, + {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, + {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, + {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.14" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.14-cp310-none-win_amd64.whl", hash = "sha256:0b149c2918c7974f575ba79f5a4aad58bd859a52fa9eb1296cc22aa412aa411f"}, + {file = "pywinpty-2.0.14-cp311-none-win_amd64.whl", hash = "sha256:cf2a43ac7065b3e0dc8510f8c1f13a75fb8fde805efa3b8cff7599a1ef497bc7"}, + {file = "pywinpty-2.0.14-cp312-none-win_amd64.whl", hash = "sha256:55dad362ef3e9408ade68fd173e4f9032b3ce08f68cfe7eacb2c263ea1179737"}, + {file = "pywinpty-2.0.14-cp313-none-win_amd64.whl", hash = "sha256:074fb988a56ec79ca90ed03a896d40707131897cefb8f76f926e3834227f2819"}, + {file = "pywinpty-2.0.14-cp39-none-win_amd64.whl", hash = "sha256:5725fd56f73c0531ec218663bd8c8ff5acc43c78962fab28564871b5fce053fd"}, + {file = "pywinpty-2.0.14.tar.gz", hash = "sha256:18bd9529e4a5daf2d9719aa17788ba6013e594ae94c5a0c27e83df3278b0660e"}, +] + [[package]] name = "pyyaml" version = "6.0.2" @@ -1944,6 +3441,142 @@ files = [ {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] +[[package]] +name = "pyzmq" +version = "26.2.0" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629"}, + {file = "pyzmq-26.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a"}, + {file = "pyzmq-26.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282"}, + {file = "pyzmq-26.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea"}, + {file = "pyzmq-26.2.0-cp310-cp310-win32.whl", hash = "sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971"}, + {file = "pyzmq-26.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218"}, + {file = "pyzmq-26.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf"}, + {file = "pyzmq-26.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3"}, + {file = "pyzmq-26.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6"}, + {file = "pyzmq-26.2.0-cp311-cp311-win32.whl", hash = "sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5"}, + {file = "pyzmq-26.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9"}, + {file = "pyzmq-26.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae"}, + {file = "pyzmq-26.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3"}, + {file = "pyzmq-26.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b"}, + {file = "pyzmq-26.2.0-cp312-cp312-win32.whl", hash = "sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a"}, + {file = "pyzmq-26.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726"}, + {file = "pyzmq-26.2.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187"}, + {file = "pyzmq-26.2.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115"}, + {file = "pyzmq-26.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e"}, + {file = "pyzmq-26.2.0-cp313-cp313-win32.whl", hash = "sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad"}, + {file = "pyzmq-26.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a"}, + {file = "pyzmq-26.2.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797"}, + {file = "pyzmq-26.2.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6"}, + {file = "pyzmq-26.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0"}, + {file = "pyzmq-26.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1"}, + {file = "pyzmq-26.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097"}, + {file = "pyzmq-26.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win32.whl", hash = "sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951"}, + {file = "pyzmq-26.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f"}, + {file = "pyzmq-26.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289"}, + {file = "pyzmq-26.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640"}, + {file = "pyzmq-26.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd"}, + {file = "pyzmq-26.2.0-cp38-cp38-win32.whl", hash = "sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988"}, + {file = "pyzmq-26.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2"}, + {file = "pyzmq-26.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9"}, + {file = "pyzmq-26.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc"}, + {file = "pyzmq-26.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940"}, + {file = "pyzmq-26.2.0-cp39-cp39-win32.whl", hash = "sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec"}, + {file = "pyzmq-26.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca"}, + {file = "pyzmq-26.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6"}, + {file = "pyzmq-26.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc"}, + {file = "pyzmq-26.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4"}, + {file = "pyzmq-26.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f"}, + {file = "pyzmq-26.2.0.tar.gz", hash = "sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "referencing" +version = "0.35.1" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + [[package]] name = "requests" version = "2.32.3" @@ -1984,15 +3617,40 @@ urllib3 = ">=1.25.10,<3.0" [package.extras] tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-PyYAML", "types-requests"] +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + [[package]] name = "rich" -version = "13.9.2" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, - {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] @@ -2003,15 +3661,114 @@ typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.1 [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] +[[package]] +name = "rpds-py" +version = "0.21.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.9" +files = [ + {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, + {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, + {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, + {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, + {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, + {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, + {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, + {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, + {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, + {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, + {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, + {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, +] + [[package]] name = "s3transfer" -version = "0.10.2" +version = "0.10.3" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">=3.8" files = [ - {file = "s3transfer-0.10.2-py3-none-any.whl", hash = "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69"}, - {file = "s3transfer-0.10.2.tar.gz", hash = "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6"}, + {file = "s3transfer-0.10.3-py3-none-any.whl", hash = "sha256:263ed587a5803c6c708d3ce44dc4dfedaab4c1a32e8329bab818933d79ddcf5d"}, + {file = "s3transfer-0.10.3.tar.gz", hash = "sha256:4f50ed74ab84d474ce614475e0b8d5047ff080810aac5d01ea25231cfc944b0c"}, ] [package.dependencies] @@ -2020,25 +3777,41 @@ botocore = ">=1.33.2,<2.0a.0" [package.extras] crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] +[[package]] +name = "send2trash" +version = "1.8.3" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + [[package]] name = "setuptools" -version = "75.1.0" +version = "75.5.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"}, - {file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"}, + {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, + {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] +core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "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)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "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)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "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)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "shapely" @@ -2131,15 +3904,45 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] +[[package]] +name = "soupsieve" +version = "2.6" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, + {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + [[package]] name = "starlette" -version = "0.38.6" +version = "0.41.2" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" files = [ - {file = "starlette-0.38.6-py3-none-any.whl", hash = "sha256:4517a1409e2e73ee4951214ba012052b9e16f60e90d73cfb06192c19203bbb05"}, - {file = "starlette-0.38.6.tar.gz", hash = "sha256:863a1588f5574e70a821dadefb41e4881ea451a47a3cd1b4df359d4ffefe5ead"}, + {file = "starlette-0.41.2-py3-none-any.whl", hash = "sha256:fbc189474b4731cf30fcef52f18a8d070e3f3b46c6a04c97579e85e6ffca942d"}, + {file = "starlette-0.41.2.tar.gz", hash = "sha256:9834fd799d1a87fd346deb76158668cfa0b0d56f85caefe8268e2d97c3468b62"}, ] [package.dependencies] @@ -2167,26 +3970,85 @@ starlette = "*" dev = ["pre-commit"] test = ["brotlipy", "httpx", "pytest", "pytest-cov"] +[[package]] +name = "terminado" +version = "0.18.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] + +[[package]] +name = "tinycss2" +version = "1.4.0" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, + {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] + [[package]] name = "tomli" -version = "2.0.2" +version = "2.1.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, - {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, + {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, + {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, +] + +[[package]] +name = "tornado" +version = "6.4.1" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">=3.8" +files = [ + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, + {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, + {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, + {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, ] [[package]] name = "tqdm" -version = "4.66.5" +version = "4.67.0" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, - {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, + {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, + {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, ] [package.dependencies] @@ -2194,10 +4056,26 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "traitlets" +version = "5.14.3" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] + [[package]] name = "typer" version = "0.12.5" @@ -2215,15 +4093,26 @@ rich = ">=10.11.0" shellingham = ">=1.3.0" typing-extensions = ">=3.7.4.3" +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20241003" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446"}, + {file = "types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d"}, +] + [[package]] name = "types-requests" -version = "2.32.0.20240914" +version = "2.32.0.20241016" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.32.0.20240914.tar.gz", hash = "sha256:2850e178db3919d9bf809e434eef65ba49d0e7e33ac92d588f4a5e295fffd405"}, - {file = "types_requests-2.32.0.20240914-py3-none-any.whl", hash = "sha256:59c2f673eb55f32a99b2894faf6020e1a9f4a402ad0f192bfee0b64469054310"}, + {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, + {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, ] [package.dependencies] @@ -2251,6 +4140,20 @@ files = [ {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, ] +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + [[package]] name = "urllib3" version = "2.2.3" @@ -2270,13 +4173,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "uvicorn" -version = "0.31.0" +version = "0.32.0" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" files = [ - {file = "uvicorn-0.31.0-py3-none-any.whl", hash = "sha256:cac7be4dd4d891c363cd942160a7b02e69150dcbc7a36be04d5f4af4b17c8ced"}, - {file = "uvicorn-0.31.0.tar.gz", hash = "sha256:13bc21373d103859f68fe739608e2eb054a816dea79189bc3ca08ea89a275906"}, + {file = "uvicorn-0.32.0-py3-none-any.whl", hash = "sha256:60b8f3a5ac027dcd31448f411ced12b5ef452c646f76f02f8cc3f25d8d26fd82"}, + {file = "uvicorn-0.32.0.tar.gz", hash = "sha256:f78b36b143c16f54ccdb8190d0a26b5f1901fe5a3c777e1ab29f26391af8551e"}, ] [package.dependencies] @@ -2289,13 +4192,13 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "virtualenv" -version = "20.26.6" +version = "20.27.1" description = "Virtual Python Environment builder" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "virtualenv-20.26.6-py3-none-any.whl", hash = "sha256:7345cc5b25405607a624d8418154577459c3e0277f5466dd79c49d5e492995f2"}, - {file = "virtualenv-20.26.6.tar.gz", hash = "sha256:280aede09a2a5c317e409a00102e7077c6432c5a38f0ef938e643805a7ad2c48"}, + {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, + {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, ] [package.dependencies] @@ -2307,15 +4210,64 @@ platformdirs = ">=3.9.1,<5" 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)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + +[[package]] +name = "webcolors" +version = "24.11.1" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.9" +files = [ + {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, + {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.8.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + [[package]] name = "werkzeug" -version = "3.0.4" +version = "3.1.3" description = "The comprehensive WSGI web application library." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "werkzeug-3.0.4-py3-none-any.whl", hash = "sha256:02c9eb92b7d6c06f31a782811505d2157837cea66aaede3e217c7c27c039476c"}, - {file = "werkzeug-3.0.4.tar.gz", hash = "sha256:34f2371506b250df4d4f84bfe7b0921e4762525762bbd936614909fe25cd7306"}, + {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, + {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, ] [package.dependencies] @@ -2324,18 +4276,29 @@ MarkupSafe = ">=2.1.1" [package.extras] watchdog = ["watchdog (>=2.3)"] +[[package]] +name = "widgetsnbextension" +version = "4.0.13" +description = "Jupyter interactive widgets for Jupyter Notebook" +optional = false +python-versions = ">=3.7" +files = [ + {file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"}, + {file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"}, +] + [[package]] name = "xmltodict" -version = "0.13.0" +version = "0.14.2" description = "Makes working with XML feel like you are working with JSON" optional = false -python-versions = ">=3.4" +python-versions = ">=3.6" files = [ - {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, - {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, + {file = "xmltodict-0.14.2-py2.py3-none-any.whl", hash = "sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac"}, + {file = "xmltodict-0.14.2.tar.gz", hash = "sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553"}, ] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "b02f69014cb169e7b32eadc52b66c2dac50afe243402a9311965395b420aaaec" +content-hash = "744286122d13a456b7cfcabc5b92c8c767ecd212f8431afa29768be14af8c329" diff --git a/space2stats_api/src/pyproject.toml b/space2stats_api/src/pyproject.toml index ea93c5b7..6b79af37 100644 --- a/space2stats_api/src/pyproject.toml +++ b/space2stats_api/src/pyproject.toml @@ -37,6 +37,14 @@ pyarrow = "^17.0.0" adbc-driver-postgresql = "^1.2.0" tqdm = "^4.66.5" + +[tool.poetry.group.notebook.dependencies] +pandas = "*" +jupyter = "*" +geopandas = "*" +shapely = "*" +lonboard = "*" + [tool.poetry.group.test.dependencies] pre-commit = "*" pytest = "*" From c23af154ed54305feceac9801c468b3c28198d0e Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 21 Nov 2024 09:36:29 +0000 Subject: [PATCH 11/18] Update notebook based on nbqa --- notebooks/user-docs/s2s_python_lib.ipynb | 57 +++++++++++++----------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/notebooks/user-docs/s2s_python_lib.ipynb b/notebooks/user-docs/s2s_python_lib.ipynb index f39d6d2f..ced1148d 100644 --- a/notebooks/user-docs/s2s_python_lib.ipynb +++ b/notebooks/user-docs/s2s_python_lib.ipynb @@ -23,17 +23,16 @@ "metadata": {}, "outputs": [], "source": [ - "from typing import Dict\n", "import json\n", + "from typing import Dict\n", "\n", + "import geopandas as gpd\n", "import numpy as np\n", - "from dotenv import load_dotenv\n", "import pandas as pd\n", - "import geopandas as gpd\n", - "from shapely.geometry import shape\n", - "from lonboard import Map, ScatterplotLayer\n", + "from dotenv import load_dotenv\n", "from geojson_pydantic import Feature, Polygon\n", - "\n", + "from lonboard import Map, ScatterplotLayer\n", + "from shapely.geometry import shape\n", "from space2stats import StatsTable" ] }, @@ -155,16 +154,13 @@ " [33.78593974945852, -4.725410543134203],\n", " [41.94362577283266, -4.725410543134203],\n", " [41.94362577283266, 5.115816884114494],\n", - " [33.78593974945852, 5.115816884114494]\n", + " [33.78593974945852, 5.115816884114494],\n", " ]\n", - " ]\n", + " ],\n", " },\n", - " \"properties\": {\n", - " \"name\": \"Updated AOI\"\n", - " }\n", + " \"properties\": {\"name\": \"Updated AOI\"},\n", "}\n", - " \n", - " \n", + "\n", "\n", "feat = AOIModel(**aoi)" ] @@ -397,7 +393,9 @@ ], "source": [ "with StatsTable.connect() as stats_table:\n", - " data = stats_table.summaries(aoi=feat, spatial_join_method=\"centroid\", fields=fields, geometry=\"point\")\n", + " data = stats_table.summaries(\n", + " aoi=feat, spatial_join_method=\"centroid\", fields=fields, geometry=\"point\"\n", + " )\n", " df = pd.DataFrame(data)\n", "\n", "df.head()" @@ -810,8 +808,8 @@ } ], "source": [ - "df['geometry'] = df['geometry'].apply(lambda geom: shape(json.loads(geom)))\n", - "gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326')\n", + "df[\"geometry\"] = df[\"geometry\"].apply(lambda geom: shape(json.loads(geom)))\n", + "gdf = gpd.GeoDataFrame(df, geometry=\"geometry\", crs=\"EPSG:4326\")\n", "gdf" ] }, @@ -839,26 +837,31 @@ "source": [ "# Define custom breaks and corresponding RGBA colors\n", "breaks = [0, 1, 1000, 10000, 50000, 100000, 200000, gdf[\"sum_pop_2020\"].max()]\n", - "colors = np.array([\n", - " [211, 211, 211, 255], # Light gray for 0\n", - " [255, 255, 0, 255], # Yellow for 1-1000\n", - " [255, 165, 0, 255], # Orange for 1000-10000\n", - " [255, 0, 0, 255], # Red for 10000-50000\n", - " [128, 0, 128, 255], # Purple for 50000-100000\n", - " [0, 0, 255, 255], # Blue for 100000-200000\n", - " [0, 0, 139, 255], # Dark blue for 200000+\n", - "])\n", + "colors = np.array(\n", + " [\n", + " [211, 211, 211, 255], # Light gray for 0\n", + " [255, 255, 0, 255], # Yellow for 1-1000\n", + " [255, 165, 0, 255], # Orange for 1000-10000\n", + " [255, 0, 0, 255], # Red for 10000-50000\n", + " [128, 0, 128, 255], # Purple for 50000-100000\n", + " [0, 0, 255, 255], # Blue for 100000-200000\n", + " [0, 0, 139, 255], # Dark blue for 200000+\n", + " ]\n", + ")\n", "\n", "# Function to assign colors based on custom bins\n", + "\n", + "\n", "def assign_color(value, breaks, colors):\n", " for i in range(len(breaks) - 1):\n", " if breaks[i] <= value < breaks[i + 1]:\n", " return colors[i]\n", " return colors[-1] # In case value exceeds all breaks\n", "\n", + "\n", "# Map sum_pop_2020 values to colors using the custom function\n", - "gdf['color'] = gdf[\"sum_pop_2020\"].apply(lambda x: assign_color(x, breaks, colors))\n", - "colors = np.uint8(gdf['color'].tolist())\n", + "gdf[\"color\"] = gdf[\"sum_pop_2020\"].apply(lambda x: assign_color(x, breaks, colors))\n", + "colors = np.uint8(gdf[\"color\"].tolist())\n", "\n", "# Create the scatterplot layer with the assigned colors\n", "layer = ScatterplotLayer.from_geopandas(gdf, get_radius=2000, get_fill_color=colors)\n", From 798b7feecb608f547b36fd9db72eac650f9606c8 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 21 Nov 2024 09:45:05 +0000 Subject: [PATCH 12/18] Remove unused dependencies in core --- space2stats_api/src/poetry.lock | 442 +++++++++++++---------------- space2stats_api/src/pyproject.toml | 5 +- 2 files changed, 202 insertions(+), 245 deletions(-) diff --git a/space2stats_api/src/poetry.lock b/space2stats_api/src/poetry.lock index b3ab4a12..d144f105 100644 --- a/space2stats_api/src/poetry.lock +++ b/space2stats_api/src/poetry.lock @@ -558,17 +558,17 @@ css = ["tinycss2 (>=1.1.0,<1.5)"] [[package]] name = "boto3" -version = "1.35.62" +version = "1.35.66" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.62-py3-none-any.whl", hash = "sha256:e6574047701ab009c2b2bb17b530a3a2fb34de8698b77f8bbb34dd0c9286c117"}, - {file = "boto3-1.35.62.tar.gz", hash = "sha256:f80eefe7506aa01799b1027d03eddfd3c4a60548d6db5c32f139e1dec9f3f4f5"}, + {file = "boto3-1.35.66-py3-none-any.whl", hash = "sha256:09a610f8cf4d3c22d4ca69c1f89079e3a1c82805ce94fa0eb4ecdd4d2ba6c4bc"}, + {file = "boto3-1.35.66.tar.gz", hash = "sha256:c392b9168b65e9c23483eaccb5b68d1f960232d7f967a1e00a045ba065ce050d"}, ] [package.dependencies] -botocore = ">=1.35.62,<1.36.0" +botocore = ">=1.35.66,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -577,13 +577,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.62" +version = "1.35.66" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.62-py3-none-any.whl", hash = "sha256:4c3960a33289371d96eba5116364c41e6b848b5afbed3a43f5d8c7ba36f55e1d"}, - {file = "botocore-1.35.62.tar.gz", hash = "sha256:9df762294d5c727d9ea1c48b98579729a0ba40fd317c3262a6b8d8e12fb67489"}, + {file = "botocore-1.35.66-py3-none-any.whl", hash = "sha256:d0683e9c18bb6852f768da268086c3749d925332a664db0dd1459cfa7e96e475"}, + {file = "botocore-1.35.66.tar.gz", hash = "sha256:51f43220315f384959f02ea3266740db4d421592dd87576c18824e424b349fdb"}, ] [package.dependencies] @@ -853,73 +853,73 @@ test = ["pytest"] [[package]] name = "coverage" -version = "7.6.5" +version = "7.6.7" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ - {file = "coverage-7.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d5fc459f1b62aa328b5c6943b4fa060fa63e7749e41c974929c503dc01d0527b"}, - {file = "coverage-7.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:197fc6b5e6271c4f822486cabbd91f32e73f784076b69c91179c5a9fec2d1442"}, - {file = "coverage-7.6.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a7cab0762dfbf0b0cd6eb22f7bceade31bda0f0647f9420cbb45571de4493a3"}, - {file = "coverage-7.6.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee4559597f53455d70b9935e25c21fd05aebbb8d540af04097f7cf6dc7562754"}, - {file = "coverage-7.6.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e68b894ee1a170da94b7da381527f277ec00c67f6141e79aa1ce8eebbb5561"}, - {file = "coverage-7.6.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fe4ea637711f1f1895895578972e3d0ed5efb6ef970ba0e2e26d9fad1e3c820e"}, - {file = "coverage-7.6.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1d5f036235a747cd30be433ef7ba6dab5ac41d8dc69d54094d5438c34fe8d565"}, - {file = "coverage-7.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a6ab7b88b1a614bc1db015e68048eb29b0c30ffa01be3d7d04da1f320db0f01"}, - {file = "coverage-7.6.5-cp310-cp310-win32.whl", hash = "sha256:ad712a72cd734fb4265041005011bbf61f8d6cba74e12c91f14a9cda63a80a64"}, - {file = "coverage-7.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:61e03bb66c087b74aea6c28d10a49f72eca98b95438a8db1ae6dfcdd060f9039"}, - {file = "coverage-7.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dffec9f67f4eb8bc9c5df720833f1f1ca36b73d86e6f95b422ca5210e264cc26"}, - {file = "coverage-7.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2fde790ac0024af19fc5327fd50890dad0c31b653f6d2ed91ab2810c046bfe22"}, - {file = "coverage-7.6.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3250186381ec8e9b71234fb92ef77da87d81cbf20df3364f8f5ebf7180ec030d"}, - {file = "coverage-7.6.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ecfa205ce1fab6d8e94fe011eec04f6035a6069f70c331efd7cd1cd2d33d897"}, - {file = "coverage-7.6.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15af7bfbc37de33e7df3f740cc735057606c63bbe44aee8b07339a3e7bb8ecf6"}, - {file = "coverage-7.6.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:caf4d6af23af0e0df4e40e9985f6063d7f5434f225ee4d4ed7001f1428302403"}, - {file = "coverage-7.6.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5dcf2da597fe616a41c59e29fd8d390ac2149aeed421172eef14470c7e9dcd06"}, - {file = "coverage-7.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebc76107d896a53116e5ef21998f321b630b574a65b78b01176ca64e8978b43e"}, - {file = "coverage-7.6.5-cp311-cp311-win32.whl", hash = "sha256:0e9e4cd48dca252d99bb97b14f13b5940813937cc7ec568418c1a195dec9cbcc"}, - {file = "coverage-7.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:a6eb14739a20c5a46073c8ad066ada17d91d14599ed98d724614db46fbae867b"}, - {file = "coverage-7.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9ae01c434cb0d445008257bb42dcd38112190e5bfc3a4480fde49572b16bc2ae"}, - {file = "coverage-7.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c72ef3be899f389c9f0934a9d06a28fa097ade096760102c732583c04cc31d75"}, - {file = "coverage-7.6.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2fc574b4fb082a0141d4df00079c4877d46cb98e8ec979cbd9a92426f5abd8a"}, - {file = "coverage-7.6.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bc0eba158ad9d1883efb4f1bf08f88a999e091daf30454fd5f136322e700c72"}, - {file = "coverage-7.6.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a360b282c0acbf3541cc67e8d8a2a65589ea6cfa10c7e8a48e318bf28ca90f94"}, - {file = "coverage-7.6.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b22f96d3f2425942a649d786f57ae431425c9a970afae784cd865c1ffee34bad"}, - {file = "coverage-7.6.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:70eca9c6bf742feaf3ee453c1aaa932c2ab88ca420f411d90aa43ae831127b22"}, - {file = "coverage-7.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c4bafec5da3498d498a4ca3136f5a01fded487c6a54f18aea0bcd673feedf1b"}, - {file = "coverage-7.6.5-cp312-cp312-win32.whl", hash = "sha256:edecf498cabb335e8a683eb672558355bb9536d4397c54f1e135d9b8910512a3"}, - {file = "coverage-7.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:e7c40ae56761d3c08f916019b2f8579a147f93be8e12f0f2bf4edc4ea9e1c0ab"}, - {file = "coverage-7.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:49ea4a739dc14856d7c5f935da90db123b77a850cfddcfacb490a28de8f87257"}, - {file = "coverage-7.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e0c51339a28aa43d0f2b1211e57ceeeeed5e09f4deb6fc543d939de68069e81e"}, - {file = "coverage-7.6.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:040c3d5cf4db24e7cb890bf4b547a25bd3a3516c58c9f2a22f822199ee2ad8ed"}, - {file = "coverage-7.6.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0b7e67f9d3b156ab93fce71485fadd043ab04b45d5d88623c6d94f7d16ced5b"}, - {file = "coverage-7.6.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e078bfb114025c55fdbaa802f4c13e20e6ce4e10a96918d7234656b41f69e649"}, - {file = "coverage-7.6.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:559cdb21aca30810e648ac08270535c1d2e17226ebbdf90860a060d3680cb05f"}, - {file = "coverage-7.6.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:23e2dd956277061f24d9eda7539113a9c35a9409a9935647a34ced79b8aacb75"}, - {file = "coverage-7.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3e7c4ccb41dc9830b2ca8592e401045a81740f627c7c0348bdc3b7373ce52f8e"}, - {file = "coverage-7.6.5-cp313-cp313-win32.whl", hash = "sha256:9d3565bb7deaa12d634426f113e6b106028c535667ba7756af65f00464981ba5"}, - {file = "coverage-7.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:5039410420d9ddcd5b8566d3afbb28b89d70c4481dbb283ea543263cbefa2b67"}, - {file = "coverage-7.6.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:77b640aa78d4d9f620fb2e1b2a41b0d196120c188d0a7f678761d668d6251fcc"}, - {file = "coverage-7.6.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bb3799f6279df37e369027128926de4c159e6399000316ebd7a69e55b84dc97f"}, - {file = "coverage-7.6.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55aba7ab64e8af37a18064f23f399dff10041fa3aaf201528f12004968638b9f"}, - {file = "coverage-7.6.5-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6065a988d724dd3328cb21e97378bef0549b2f8b7ac0a3376785d9f7f05dc736"}, - {file = "coverage-7.6.5-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f092d222e4286cdd1ab9707da36944c11ba6294d8c9b18534057f03e6866367"}, - {file = "coverage-7.6.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1dc99aece5f899955eece053a798e279f7fe7059dd5e2a95af82878cfe4a44e1"}, - {file = "coverage-7.6.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1b14515f83ffa7a6787e725d804c6b11dd317a6bd0373d8519a61e4a587fe534"}, - {file = "coverage-7.6.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9fa6d90130165346935541f3762933dae07e237ff7d6d780fae556039f08a470"}, - {file = "coverage-7.6.5-cp313-cp313t-win32.whl", hash = "sha256:1be9ec4c49becb35955b9d69c27e6385aedd40d233f1cf065e8430c59924b30e"}, - {file = "coverage-7.6.5-cp313-cp313t-win_amd64.whl", hash = "sha256:7ff4fd7679df56e36fc838ef227e95e3aa1b0ca0548daede7f8ae6e54479c115"}, - {file = "coverage-7.6.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:23abf0846290aa57d629c4f4181d0d56cbaa45d3999e60cb0df1d2bab7bc6bfe"}, - {file = "coverage-7.6.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4903685e8059e170182ac4681ee72d2dfbb92692225023c1e325a9d85c1be31"}, - {file = "coverage-7.6.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad9621fd9773b1461f8942da4130fbb16ee0a877eb58bc57532ea41cce20d3e"}, - {file = "coverage-7.6.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7324358a77f37ffd8ba94d3c8326eb316c972ec72264f36fc3be04cff8542465"}, - {file = "coverage-7.6.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf182001229411cd6a90d180973b345bd6fe255dbbac362100e6a625dfb107f5"}, - {file = "coverage-7.6.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4601dacd88556c94c9fb5063b9354b1fe971af9a5b25b2575faefd12bf8170a5"}, - {file = "coverage-7.6.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e5aa3d62285ef1b16f655e1ae298c6fa919209637d317934e382e9b99c28c118"}, - {file = "coverage-7.6.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8cb5601620c3d98d2c98847272acc2406333d43c9d7d49386d879bd451677429"}, - {file = "coverage-7.6.5-cp39-cp39-win32.whl", hash = "sha256:c32428f6285344caedd945236f31c46645bb10faae8702d1409bb49df218e55a"}, - {file = "coverage-7.6.5-cp39-cp39-win_amd64.whl", hash = "sha256:809e868eee27d056bc72590c69940c119775d218681b1a8ef9ba0ef8d7693e53"}, - {file = "coverage-7.6.5-pp39.pp310-none-any.whl", hash = "sha256:49145276f39f940b18a539e1e4a378e06c64a127922450ffd2fb82b9fe1ad3d9"}, - {file = "coverage-7.6.5.tar.gz", hash = "sha256:6069188329fbe0a63876719099076261ce7a1adeea95bf236cff4353a8451b0d"}, + {file = "coverage-7.6.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:108bb458827765d538abcbf8288599fee07d2743357bdd9b9dad456c287e121e"}, + {file = "coverage-7.6.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c973b2fe4dc445cb865ab369df7521df9c27bf40715c837a113edaa2aa9faf45"}, + {file = "coverage-7.6.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c6b24007c4bcd0b19fac25763a7cac5035c735ae017e9a349b927cfc88f31c1"}, + {file = "coverage-7.6.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acbb8af78f8f91b3b51f58f288c0994ba63c646bc1a8a22ad072e4e7e0a49f1c"}, + {file = "coverage-7.6.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad32a981bcdedb8d2ace03b05e4fd8dace8901eec64a532b00b15217d3677dd2"}, + {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:34d23e28ccb26236718a3a78ba72744212aa383141961dd6825f6595005c8b06"}, + {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e25bacb53a8c7325e34d45dddd2f2fbae0dbc230d0e2642e264a64e17322a777"}, + {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af05bbba896c4472a29408455fe31b3797b4d8648ed0a2ccac03e074a77e2314"}, + {file = "coverage-7.6.7-cp310-cp310-win32.whl", hash = "sha256:796c9b107d11d2d69e1849b2dfe41730134b526a49d3acb98ca02f4985eeff7a"}, + {file = "coverage-7.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:987a8e3da7da4eed10a20491cf790589a8e5e07656b6dc22d3814c4d88faf163"}, + {file = "coverage-7.6.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7e61b0e77ff4dddebb35a0e8bb5a68bf0f8b872407d8d9f0c726b65dfabe2469"}, + {file = "coverage-7.6.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a5407a75ca4abc20d6252efeb238377a71ce7bda849c26c7a9bece8680a5d99"}, + {file = "coverage-7.6.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df002e59f2d29e889c37abd0b9ee0d0e6e38c24f5f55d71ff0e09e3412a340ec"}, + {file = "coverage-7.6.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:673184b3156cba06154825f25af33baa2671ddae6343f23175764e65a8c4c30b"}, + {file = "coverage-7.6.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e69ad502f1a2243f739f5bd60565d14a278be58be4c137d90799f2c263e7049a"}, + {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60dcf7605c50ea72a14490d0756daffef77a5be15ed1b9fea468b1c7bda1bc3b"}, + {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9c2eb378bebb2c8f65befcb5147877fc1c9fbc640fc0aad3add759b5df79d55d"}, + {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c0317288f032221d35fa4cbc35d9f4923ff0dfd176c79c9b356e8ef8ef2dff4"}, + {file = "coverage-7.6.7-cp311-cp311-win32.whl", hash = "sha256:951aade8297358f3618a6e0660dc74f6b52233c42089d28525749fc8267dccd2"}, + {file = "coverage-7.6.7-cp311-cp311-win_amd64.whl", hash = "sha256:5e444b8e88339a2a67ce07d41faabb1d60d1004820cee5a2c2b54e2d8e429a0f"}, + {file = "coverage-7.6.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f07ff574986bc3edb80e2c36391678a271d555f91fd1d332a1e0f4b5ea4b6ea9"}, + {file = "coverage-7.6.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:49ed5ee4109258973630c1f9d099c7e72c5c36605029f3a91fe9982c6076c82b"}, + {file = "coverage-7.6.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3e8796434a8106b3ac025fd15417315d7a58ee3e600ad4dbcfddc3f4b14342c"}, + {file = "coverage-7.6.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3b925300484a3294d1c70f6b2b810d6526f2929de954e5b6be2bf8caa1f12c1"}, + {file = "coverage-7.6.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c42ec2c522e3ddd683dec5cdce8e62817afb648caedad9da725001fa530d354"}, + {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0266b62cbea568bd5e93a4da364d05de422110cbed5056d69339bd5af5685433"}, + {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e5f2a0f161d126ccc7038f1f3029184dbdf8f018230af17ef6fd6a707a5b881f"}, + {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c132b5a22821f9b143f87446805e13580b67c670a548b96da945a8f6b4f2efbb"}, + {file = "coverage-7.6.7-cp312-cp312-win32.whl", hash = "sha256:7c07de0d2a110f02af30883cd7dddbe704887617d5c27cf373362667445a4c76"}, + {file = "coverage-7.6.7-cp312-cp312-win_amd64.whl", hash = "sha256:fd49c01e5057a451c30c9b892948976f5d38f2cbd04dc556a82743ba8e27ed8c"}, + {file = "coverage-7.6.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46f21663e358beae6b368429ffadf14ed0a329996248a847a4322fb2e35d64d3"}, + {file = "coverage-7.6.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40cca284c7c310d622a1677f105e8507441d1bb7c226f41978ba7c86979609ab"}, + {file = "coverage-7.6.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77256ad2345c29fe59ae861aa11cfc74579c88d4e8dbf121cbe46b8e32aec808"}, + {file = "coverage-7.6.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87ea64b9fa52bf395272e54020537990a28078478167ade6c61da7ac04dc14bc"}, + {file = "coverage-7.6.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d608a7808793e3615e54e9267519351c3ae204a6d85764d8337bd95993581a8"}, + {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdd94501d65adc5c24f8a1a0eda110452ba62b3f4aeaba01e021c1ed9cb8f34a"}, + {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82c809a62e953867cf57e0548c2b8464207f5f3a6ff0e1e961683e79b89f2c55"}, + {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb684694e99d0b791a43e9fc0fa58efc15ec357ac48d25b619f207c41f2fd384"}, + {file = "coverage-7.6.7-cp313-cp313-win32.whl", hash = "sha256:963e4a08cbb0af6623e61492c0ec4c0ec5c5cf74db5f6564f98248d27ee57d30"}, + {file = "coverage-7.6.7-cp313-cp313-win_amd64.whl", hash = "sha256:14045b8bfd5909196a90da145a37f9d335a5d988a83db34e80f41e965fb7cb42"}, + {file = "coverage-7.6.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f2c7a045eef561e9544359a0bf5784b44e55cefc7261a20e730baa9220c83413"}, + {file = "coverage-7.6.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5dd4e4a49d9c72a38d18d641135d2fb0bdf7b726ca60a103836b3d00a1182acd"}, + {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c95e0fa3d1547cb6f021ab72f5c23402da2358beec0a8e6d19a368bd7b0fb37"}, + {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f63e21ed474edd23f7501f89b53280014436e383a14b9bd77a648366c81dce7b"}, + {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead9b9605c54d15be228687552916c89c9683c215370c4a44f1f217d2adcc34d"}, + {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0573f5cbf39114270842d01872952d301027d2d6e2d84013f30966313cadb529"}, + {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:e2c8e3384c12dfa19fa9a52f23eb091a8fad93b5b81a41b14c17c78e23dd1d8b"}, + {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:70a56a2ec1869e6e9fa69ef6b76b1a8a7ef709972b9cc473f9ce9d26b5997ce3"}, + {file = "coverage-7.6.7-cp313-cp313t-win32.whl", hash = "sha256:dbba8210f5067398b2c4d96b4e64d8fb943644d5eb70be0d989067c8ca40c0f8"}, + {file = "coverage-7.6.7-cp313-cp313t-win_amd64.whl", hash = "sha256:dfd14bcae0c94004baba5184d1c935ae0d1231b8409eb6c103a5fd75e8ecdc56"}, + {file = "coverage-7.6.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37a15573f988b67f7348916077c6d8ad43adb75e478d0910957394df397d2874"}, + {file = "coverage-7.6.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b6cce5c76985f81da3769c52203ee94722cd5d5889731cd70d31fee939b74bf0"}, + {file = "coverage-7.6.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ab9763d291a17b527ac6fd11d1a9a9c358280adb320e9c2672a97af346ac2c"}, + {file = "coverage-7.6.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cf96ceaa275f071f1bea3067f8fd43bec184a25a962c754024c973af871e1b7"}, + {file = "coverage-7.6.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aee9cf6b0134d6f932d219ce253ef0e624f4fa588ee64830fcba193269e4daa3"}, + {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2bc3e45c16564cc72de09e37413262b9f99167803e5e48c6156bccdfb22c8327"}, + {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:623e6965dcf4e28a3debaa6fcf4b99ee06d27218f46d43befe4db1c70841551c"}, + {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:850cfd2d6fc26f8346f422920ac204e1d28814e32e3a58c19c91980fa74d8289"}, + {file = "coverage-7.6.7-cp39-cp39-win32.whl", hash = "sha256:c296263093f099da4f51b3dff1eff5d4959b527d4f2f419e16508c5da9e15e8c"}, + {file = "coverage-7.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:90746521206c88bdb305a4bf3342b1b7316ab80f804d40c536fc7d329301ee13"}, + {file = "coverage-7.6.7-pp39.pp310-none-any.whl", hash = "sha256:0ddcb70b3a3a57581b450571b31cb774f23eb9519c2aaa6176d3a84c9fc57671"}, + {file = "coverage-7.6.7.tar.gz", hash = "sha256:d79d4826e41441c9a118ff045e4bccb9fdbdcb1d02413e7ea6eb5c87b5439d24"}, ] [package.dependencies] @@ -1289,57 +1289,6 @@ files = [ {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] -[[package]] -name = "h3" -version = "4.1.2" -description = "Uber's hierarchical hexagonal geospatial indexing system" -optional = false -python-versions = ">=3.8" -files = [ - {file = "h3-4.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5a3249ed73b6abd58d117ddd77c164111a7de82001fe0418b8bddad0ca002dde"}, - {file = "h3-4.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aae33b789cd279754434dbfe85cbc5613c7154d8833032224a2517544f99949f"}, - {file = "h3-4.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03da6f6bbaeb6225e1adccd7033f0f6615348306bbcabac687c6296bcc43b8ae"}, - {file = "h3-4.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afda9065e45b49b2d8c008ff668c7dd22adf72b8077e3e8e1062a16fc5321b4e"}, - {file = "h3-4.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d2f0cd18c99016f157529dbee7d9dc1c10d4f68a1a23c8034f0a85ee266b712a"}, - {file = "h3-4.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:9499cd0328767d5782fa9743ba541b16d6c9ac23b77633525609f814f994b2c2"}, - {file = "h3-4.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bf4d5c4d80765ad35a2b095356d925ffdabd4862f222551c662fa5d67601719e"}, - {file = "h3-4.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2d94bb16ebb1430a867d947a05f9e8aeeb826c1a57103451a3d6f7a074fb8cf4"}, - {file = "h3-4.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea237b1d07eac2ee2623c13ee7184f25ec53656bcf8bb24b343d1ee2d0e5235b"}, - {file = "h3-4.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83ff8045825883e45c30763059828ae9497dc07e3650317617216342b313ab41"}, - {file = "h3-4.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7426c5fc55f2780ac33a4898b86c2330c2676a64a96fadcd879914bf34179b64"}, - {file = "h3-4.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e88b7189bced71f81e1ffbab8c71ec305100379fd99efb093853351a570d20e1"}, - {file = "h3-4.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e6cedb9931098a3bd81b8571105384abeb75c50b2ee8d5c1335b1ac034717c07"}, - {file = "h3-4.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a77f901957f1f8a1a6aaee0380dd1ee504eb9cf15290d9944c3f8d303cefd299"}, - {file = "h3-4.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7ea3c418dc595f37ee37184dfdca670dffaa5bdf42d8383f0e1b6a6cb233b5b"}, - {file = "h3-4.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:194774640e30f849ca69ebcfd0a8b73e580ad87592a40e52f522af670bf23f7d"}, - {file = "h3-4.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:844eddfefcfbafac2fb17f93910bda00fd2fd85a4194145363f84233340d1273"}, - {file = "h3-4.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:e9c78eb4240ed737157b8e7ab764ac6bdebbb7643f6ed1d769cc638efcba558a"}, - {file = "h3-4.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:404746987c9f65e1a369729894c9aaf0f50640b134949cb7a704109f46dc49be"}, - {file = "h3-4.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e680f384b3f2f351c7435a00632acefe006429f5d6271d118c9be4968a5d38e4"}, - {file = "h3-4.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8073e4169624dd4e628055aac0d04094f76919e8798039157163a64bf7f85b07"}, - {file = "h3-4.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e64ecdcdd09514dd86a4dbaf811de8927d27a106f887412825ae8bc51dbf8ea"}, - {file = "h3-4.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4d48b0afb056e8c2dd08b265d570490c92122b842c3e1068644625a6c4aa8f8a"}, - {file = "h3-4.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:71f964d417d83ee8888f2ab9544c677b7a8a2311fb17eb9e5c23711671cb86be"}, - {file = "h3-4.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e37e72c888d0a0d60ab4386ba5d5963d4594d5df658e2c80dc083195986e07f9"}, - {file = "h3-4.1.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9d7cb5b18c29e7e68d3a67de872adb4cfe9d17c7154f7b5b526d8f3b5df1ac2e"}, - {file = "h3-4.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae2ecdc19bfcd3b1a474897c87b413d309a26e18f7ec62132ad130c7ad24d58a"}, - {file = "h3-4.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c51837406f7580b388be151be574fc34dfda43d4e9703bb3fe61029dda73af1"}, - {file = "h3-4.1.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:59dbdb9a5b661150b2e08d7f1b932ea9b2fd4f42315a7a04bc19994bf803c7c3"}, - {file = "h3-4.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:4e7ac71efbe11e6562ad03a830f337b2ae657b7adaabc0d6feafafc136677ecc"}, - {file = "h3-4.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:033175d639fbf26807ead3ba6c78e72f3093aeb8f898b543eba59a0f4d7c493d"}, - {file = "h3-4.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1e9b1d3a2bdc19e06e4ee7b2d604a30b3388da8a2ed4a40724fed1ee69bae4e1"}, - {file = "h3-4.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b53cc9061a94ca0b7ae9043e9fb24e37468186c7b68f8c846c5651cf4550f6"}, - {file = "h3-4.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9254e1ac842a1162cbb554ce354760802741402b593a14eb9baf762662491c"}, - {file = "h3-4.1.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b1ed29fb5b5ce1fe04683f541ae8443199274dad07dfb4616167b2a80e94dc47"}, - {file = "h3-4.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:7760539ee7e566c62338405526d0be27efff1818d7db618721ef7e1c78811919"}, - {file = "h3-4.1.2.tar.gz", hash = "sha256:505344f080b2fee96c1124fc0f9d9ba56c74cb46d17692b8ab5de6ce241b3ad0"}, -] - -[package.extras] -all = ["cartopy", "contextily", "geodatasets", "geopandas", "geoviews", "h3[test]", "jupyter-book", "jupyterlab", "jupyterlab-geojson", "matplotlib", "sphinx (>=7.3.3)"] -numpy = ["numpy"] -test = ["flake8", "numpy", "pylint", "pytest", "pytest-cov"] - [[package]] name = "h3ronpy" version = "0.21.1" @@ -1366,13 +1315,13 @@ test = ["h3 (>=3.7)", "pytest (>=6)", "pytest-benchmark", "rasterio"] [[package]] name = "httpcore" -version = "1.0.6" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, - {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -1870,13 +1819,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.3.0" +version = "4.3.1" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.3.0-py3-none-any.whl", hash = "sha256:f67e1095ad61ae04349024f0b40345062ab108a0c6998d9810fec6a3c1a70cd5"}, - {file = "jupyterlab-4.3.0.tar.gz", hash = "sha256:7c6835cbf8df0af0ec8a39332e85ff11693fb9a468205343b4fc0bfbc74817e5"}, + {file = "jupyterlab-4.3.1-py3-none-any.whl", hash = "sha256:2d9a1c305bc748e277819a17a5d5e22452e533e835f4237b2f30f3b0e491e01f"}, + {file = "jupyterlab-4.3.1.tar.gz", hash = "sha256:a4a338327556443521731d82f2a6ccf926df478914ca029616621704d47c3c65"}, ] [package.dependencies] @@ -2136,13 +2085,13 @@ files = [ [[package]] name = "moto" -version = "5.0.20" +version = "5.0.21" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "moto-5.0.20-py2.py3-none-any.whl", hash = "sha256:b6df0041255acb973f2adcb31e3dee1379770ece0253520d4d15986d22aa06cf"}, - {file = "moto-5.0.20.tar.gz", hash = "sha256:24b1319cc66f81f40817a57ac80602a5f1862669bdd621f0d96ab989a6578255"}, + {file = "moto-5.0.21-py3-none-any.whl", hash = "sha256:1235b2ae3666459c9cc44504a5e73d35f4959b45e5876b2f6df2e5f4889dfb4f"}, + {file = "moto-5.0.21.tar.gz", hash = "sha256:52f63291daeff9444ef5eb14fbf69b24264567b79f184ae6aee4945d09845f06"}, ] [package.dependencies] @@ -2951,19 +2900,19 @@ files = [ [[package]] name = "pydantic" -version = "2.9.2" +version = "2.10.0" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, - {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, + {file = "pydantic-2.10.0-py3-none-any.whl", hash = "sha256:5e7807ba9201bdf61b1b58aa6eb690916c40a47acfb114b1b4fef3e7fd5b30fc"}, + {file = "pydantic-2.10.0.tar.gz", hash = "sha256:0aca0f045ff6e2f097f1fe89521115335f15049eeb8a7bef3dafe4b19a74e289"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.23.4" -typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} +pydantic-core = "2.27.0" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -2971,100 +2920,111 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.23.4" +version = "2.27.0" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, - {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, - {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, - {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, - {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, - {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, - {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, - {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, - {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, - {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, - {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, - {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, - {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, - {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, - {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, - {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, - {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, - {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, - {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, - {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, - {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, - {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, - {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, - {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, - {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, - {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, - {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, - {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, - {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, - {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, - {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, - {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, - {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, - {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, - {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, - {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, - {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, + {file = "pydantic_core-2.27.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cd2ac6b919f7fed71b17fe0b4603c092a4c9b5bae414817c9c81d3c22d1e1bcc"}, + {file = "pydantic_core-2.27.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e015833384ca3e1a0565a79f5d953b0629d9138021c27ad37c92a9fa1af7623c"}, + {file = "pydantic_core-2.27.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db72e40628967f6dc572020d04b5f800d71264e0531c6da35097e73bdf38b003"}, + {file = "pydantic_core-2.27.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df45c4073bed486ea2f18757057953afed8dd77add7276ff01bccb79982cf46c"}, + {file = "pydantic_core-2.27.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:836a4bfe0cc6d36dc9a9cc1a7b391265bf6ce9d1eb1eac62ac5139f5d8d9a6fa"}, + {file = "pydantic_core-2.27.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bf1340ae507f6da6360b24179c2083857c8ca7644aab65807023cf35404ea8d"}, + {file = "pydantic_core-2.27.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ab325fc86fbc077284c8d7f996d904d30e97904a87d6fb303dce6b3de7ebba9"}, + {file = "pydantic_core-2.27.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1da0c98a85a6c6ed702d5556db3b09c91f9b0b78de37b7593e2de8d03238807a"}, + {file = "pydantic_core-2.27.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7b0202ebf2268954090209a84f9897345719e46a57c5f2c9b7b250ca0a9d3e63"}, + {file = "pydantic_core-2.27.0-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:35380671c3c921fe8adf31ad349dc6f7588b7e928dbe44e1093789734f607399"}, + {file = "pydantic_core-2.27.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b4c19525c3538fbc0bbda6229f9682fb8199ce9ac37395880e6952798e00373"}, + {file = "pydantic_core-2.27.0-cp310-none-win32.whl", hash = "sha256:333c840a1303d1474f491e7be0b718226c730a39ead0f7dab2c7e6a2f3855555"}, + {file = "pydantic_core-2.27.0-cp310-none-win_amd64.whl", hash = "sha256:99b2863c1365f43f74199c980a3d40f18a218fbe683dd64e470199db426c4d6a"}, + {file = "pydantic_core-2.27.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4523c4009c3f39d948e01962223c9f5538602e7087a628479b723c939fab262d"}, + {file = "pydantic_core-2.27.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:84af1cf7bfdcbc6fcf5a5f70cc9896205e0350306e4dd73d54b6a18894f79386"}, + {file = "pydantic_core-2.27.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e65466b31be1070b4a5b7dbfbd14b247884cb8e8b79c64fb0f36b472912dbaea"}, + {file = "pydantic_core-2.27.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a5c022bb0d453192426221605efc865373dde43b17822a264671c53b068ac20c"}, + {file = "pydantic_core-2.27.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6bb69bf3b6500f195c3deb69c1205ba8fc3cb21d1915f1f158a10d6b1ef29b6a"}, + {file = "pydantic_core-2.27.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0aa4d1b2eba9a325897308b3124014a142cdccb9f3e016f31d3ebee6b5ea5e75"}, + {file = "pydantic_core-2.27.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e96ca781e0c01e32115912ebdf7b3fb0780ce748b80d7d28a0802fa9fbaf44e"}, + {file = "pydantic_core-2.27.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b872c86d8d71827235c7077461c502feb2db3f87d9d6d5a9daa64287d75e4fa0"}, + {file = "pydantic_core-2.27.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:82e1ad4ca170e8af4c928b67cff731b6296e6a0a0981b97b2eb7c275cc4e15bd"}, + {file = "pydantic_core-2.27.0-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:eb40f828bc2f73f777d1eb8fee2e86cd9692a4518b63b6b5aa8af915dfd3207b"}, + {file = "pydantic_core-2.27.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9a8fbf506fde1529a1e3698198fe64bfbe2e0c09557bc6a7dcf872e7c01fec40"}, + {file = "pydantic_core-2.27.0-cp311-none-win32.whl", hash = "sha256:24f984fc7762ed5f806d9e8c4c77ea69fdb2afd987b4fd319ef06c87595a8c55"}, + {file = "pydantic_core-2.27.0-cp311-none-win_amd64.whl", hash = "sha256:68950bc08f9735306322bfc16a18391fcaac99ded2509e1cc41d03ccb6013cfe"}, + {file = "pydantic_core-2.27.0-cp311-none-win_arm64.whl", hash = "sha256:3eb8849445c26b41c5a474061032c53e14fe92a11a5db969f722a2716cd12206"}, + {file = "pydantic_core-2.27.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:8117839a9bdbba86e7f9df57018fe3b96cec934c3940b591b0fd3fbfb485864a"}, + {file = "pydantic_core-2.27.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a291d0b4243a259c8ea7e2b84eb9ccb76370e569298875a7c5e3e71baf49057a"}, + {file = "pydantic_core-2.27.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84e35afd9e10b2698e6f2f32256678cb23ca6c1568d02628033a837638b3ed12"}, + {file = "pydantic_core-2.27.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58ab0d979c969983cdb97374698d847a4acffb217d543e172838864636ef10d9"}, + {file = "pydantic_core-2.27.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d06b667e53320332be2bf6f9461f4a9b78092a079b8ce8634c9afaa7e10cd9f"}, + {file = "pydantic_core-2.27.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78f841523729e43e3928a364ec46e2e3f80e6625a4f62aca5c345f3f626c6e8a"}, + {file = "pydantic_core-2.27.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:400bf470e4327e920883b51e255617dfe4496d4e80c3fea0b5a5d0bf2c404dd4"}, + {file = "pydantic_core-2.27.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:951e71da6c89d354572098bada5ba5b5dc3a9390c933af8a614e37755d3d1840"}, + {file = "pydantic_core-2.27.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2a51ce96224eadd1845150b204389623c8e129fde5a67a84b972bd83a85c6c40"}, + {file = "pydantic_core-2.27.0-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:483c2213a609e7db2c592bbc015da58b6c75af7360ca3c981f178110d9787bcf"}, + {file = "pydantic_core-2.27.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:359e7951f04ad35111b5ddce184db3391442345d0ab073aa63a95eb8af25a5ef"}, + {file = "pydantic_core-2.27.0-cp312-none-win32.whl", hash = "sha256:ee7d9d5537daf6d5c74a83b38a638cc001b648096c1cae8ef695b0c919d9d379"}, + {file = "pydantic_core-2.27.0-cp312-none-win_amd64.whl", hash = "sha256:2be0ad541bb9f059954ccf8877a49ed73877f862529575ff3d54bf4223e4dd61"}, + {file = "pydantic_core-2.27.0-cp312-none-win_arm64.whl", hash = "sha256:6e19401742ed7b69e51d8e4df3c03ad5ec65a83b36244479fd70edde2828a5d9"}, + {file = "pydantic_core-2.27.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5f2b19b8d6fca432cb3acf48cf5243a7bf512988029b6e6fd27e9e8c0a204d85"}, + {file = "pydantic_core-2.27.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c86679f443e7085ea55a7376462553996c688395d18ef3f0d3dbad7838f857a2"}, + {file = "pydantic_core-2.27.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:510b11e9c3b1a852876d1ccd8d5903684336d635214148637ceb27366c75a467"}, + {file = "pydantic_core-2.27.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb704155e73b833801c247f39d562229c0303f54770ca14fb1c053acb376cf10"}, + {file = "pydantic_core-2.27.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ce048deb1e033e7a865ca384770bccc11d44179cf09e5193a535c4c2f497bdc"}, + {file = "pydantic_core-2.27.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58560828ee0951bb125c6f2862fbc37f039996d19ceb6d8ff1905abf7da0bf3d"}, + {file = "pydantic_core-2.27.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb4785894936d7682635726613c44578c420a096729f1978cd061a7e72d5275"}, + {file = "pydantic_core-2.27.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2883b260f7a93235488699d39cbbd94fa7b175d3a8063fbfddd3e81ad9988cb2"}, + {file = "pydantic_core-2.27.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c6fcb3fa3855d583aa57b94cf146f7781d5d5bc06cb95cb3afece33d31aac39b"}, + {file = "pydantic_core-2.27.0-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e851a051f7260e6d688267eb039c81f05f23a19431bd7dfa4bf5e3cb34c108cd"}, + {file = "pydantic_core-2.27.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:edb1bfd45227dec8d50bc7c7d86463cd8728bcc574f9b07de7369880de4626a3"}, + {file = "pydantic_core-2.27.0-cp313-none-win32.whl", hash = "sha256:678f66462058dd978702db17eb6a3633d634f7aa0deaea61e0a674152766d3fc"}, + {file = "pydantic_core-2.27.0-cp313-none-win_amd64.whl", hash = "sha256:d28ca7066d6cdd347a50d8b725dc10d9a1d6a1cce09836cf071ea6a2d4908be0"}, + {file = "pydantic_core-2.27.0-cp313-none-win_arm64.whl", hash = "sha256:6f4a53af9e81d757756508b57cae1cf28293f0f31b9fa2bfcb416cc7fb230f9d"}, + {file = "pydantic_core-2.27.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:e9f9feee7f334b72ceae46313333d002b56f325b5f04271b4ae2aadd9e993ae4"}, + {file = "pydantic_core-2.27.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:225bfff5d425c34e1fd562cef52d673579d59b967d9de06178850c4802af9039"}, + {file = "pydantic_core-2.27.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c921ad596ff1a82f9c692b0758c944355abc9f0de97a4c13ca60ffc6d8dc15d4"}, + {file = "pydantic_core-2.27.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6354e18a9be37bfa124d6b288a87fb30c673745806c92956f1a25e3ae6e76b96"}, + {file = "pydantic_core-2.27.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ee4c2a75af9fe21269a4a0898c5425afb01af1f5d276063f57e2ae1bc64e191"}, + {file = "pydantic_core-2.27.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c91e3c04f5191fd3fb68764bddeaf02025492d5d9f23343b283870f6ace69708"}, + {file = "pydantic_core-2.27.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a6ebfac28fd51890a61df36ef202adbd77d00ee5aca4a3dadb3d9ed49cfb929"}, + {file = "pydantic_core-2.27.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36aa167f69d8807ba7e341d67ea93e50fcaaf6bc433bb04939430fa3dab06f31"}, + {file = "pydantic_core-2.27.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e8d89c276234579cd3d095d5fa2a44eb10db9a218664a17b56363cddf226ff3"}, + {file = "pydantic_core-2.27.0-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:5cc822ab90a70ea3a91e6aed3afac570b276b1278c6909b1d384f745bd09c714"}, + {file = "pydantic_core-2.27.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e15315691fe2253eb447503153acef4d7223dfe7e7702f9ed66539fcd0c43801"}, + {file = "pydantic_core-2.27.0-cp38-none-win32.whl", hash = "sha256:dfa5f5c0a4c8fced1422dc2ca7eefd872d5d13eb33cf324361dbf1dbfba0a9fe"}, + {file = "pydantic_core-2.27.0-cp38-none-win_amd64.whl", hash = "sha256:513cb14c0cc31a4dfd849a4674b20c46d87b364f997bbcb02282306f5e187abf"}, + {file = "pydantic_core-2.27.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:4148dc9184ab79e356dc00a4199dc0ee8647973332cb385fc29a7cced49b9f9c"}, + {file = "pydantic_core-2.27.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5fc72fbfebbf42c0856a824b8b0dc2b5cd2e4a896050281a21cfa6fed8879cb1"}, + {file = "pydantic_core-2.27.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:185ef205256cd8b38431205698531026979db89a79587725c1e55c59101d64e9"}, + {file = "pydantic_core-2.27.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:395e3e1148fa7809016231f8065f30bb0dc285a97b4dc4360cd86e17bab58af7"}, + {file = "pydantic_core-2.27.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33d14369739c5d07e2e7102cdb0081a1fa46ed03215e07f097b34e020b83b1ae"}, + {file = "pydantic_core-2.27.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7820bb0d65e3ce1e3e70b6708c2f66143f55912fa02f4b618d0f08b61575f12"}, + {file = "pydantic_core-2.27.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43b61989068de9ce62296cde02beffabcadb65672207fc51e7af76dca75e6636"}, + {file = "pydantic_core-2.27.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15e350efb67b855cd014c218716feea4986a149ed1f42a539edd271ee074a196"}, + {file = "pydantic_core-2.27.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:433689845288f9a1ee5714444e65957be26d30915f7745091ede4a83cfb2d7bb"}, + {file = "pydantic_core-2.27.0-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:3fd8bc2690e7c39eecdf9071b6a889ce7b22b72073863940edc2a0a23750ca90"}, + {file = "pydantic_core-2.27.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:884f1806609c2c66564082540cffc96868c5571c7c3cf3a783f63f2fb49bd3cd"}, + {file = "pydantic_core-2.27.0-cp39-none-win32.whl", hash = "sha256:bf37b72834e7239cf84d4a0b2c050e7f9e48bced97bad9bdf98d26b8eb72e846"}, + {file = "pydantic_core-2.27.0-cp39-none-win_amd64.whl", hash = "sha256:31a2cae5f059329f9cfe3d8d266d3da1543b60b60130d186d9b6a3c20a346361"}, + {file = "pydantic_core-2.27.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4fb49cfdb53af5041aba909be00cccfb2c0d0a2e09281bf542371c5fd36ad04c"}, + {file = "pydantic_core-2.27.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:49633583eb7dc5cba61aaf7cdb2e9e662323ad394e543ee77af265736bcd3eaa"}, + {file = "pydantic_core-2.27.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:153017e3d6cd3ce979de06d84343ca424bb6092727375eba1968c8b4693c6ecb"}, + {file = "pydantic_core-2.27.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff63a92f6e249514ef35bc795de10745be0226eaea06eb48b4bbeaa0c8850a4a"}, + {file = "pydantic_core-2.27.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5982048129f40b082c2654de10c0f37c67a14f5ff9d37cf35be028ae982f26df"}, + {file = "pydantic_core-2.27.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:91bc66f878557313c2a6bcf396e7befcffe5ab4354cfe4427318968af31143c3"}, + {file = "pydantic_core-2.27.0-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:68ef5377eb582fa4343c9d0b57a5b094046d447b4c73dd9fbd9ffb216f829e7d"}, + {file = "pydantic_core-2.27.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c5726eec789ee38f2c53b10b1821457b82274f81f4f746bb1e666d8741fcfadb"}, + {file = "pydantic_core-2.27.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c0c431e4be5c1a0c6654e0c31c661cd89e0ca956ef65305c3c3fd96f4e72ca39"}, + {file = "pydantic_core-2.27.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:8e21d927469d04b39386255bf00d0feedead16f6253dcc85e9e10ddebc334084"}, + {file = "pydantic_core-2.27.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b51f964fcbb02949fc546022e56cdb16cda457af485e9a3e8b78ac2ecf5d77e"}, + {file = "pydantic_core-2.27.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a7fd4de38f7ff99a37e18fa0098c3140286451bc823d1746ba80cec5b433a1"}, + {file = "pydantic_core-2.27.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fda87808429c520a002a85d6e7cdadbf58231d60e96260976c5b8f9a12a8e13"}, + {file = "pydantic_core-2.27.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a150392102c402c538190730fda06f3bce654fc498865579a9f2c1d2b425833"}, + {file = "pydantic_core-2.27.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c9ed88b398ba7e3bad7bd64d66cc01dcde9cfcb7ec629a6fd78a82fa0b559d78"}, + {file = "pydantic_core-2.27.0-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:9fe94d9d2a2b4edd7a4b22adcd45814b1b59b03feb00e56deb2e89747aec7bfe"}, + {file = "pydantic_core-2.27.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d8b5ee4ae9170e2775d495b81f414cc20268041c42571530513496ba61e94ba3"}, + {file = "pydantic_core-2.27.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d29e235ce13c91902ef3efc3d883a677655b3908b1cbc73dee816e5e1f8f7739"}, + {file = "pydantic_core-2.27.0.tar.gz", hash = "sha256:f57783fbaf648205ac50ae7d646f27582fc706be3977e87c3c124e7a92407b10"}, ] [package.dependencies] @@ -3762,13 +3722,13 @@ files = [ [[package]] name = "s3transfer" -version = "0.10.3" +version = "0.10.4" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">=3.8" files = [ - {file = "s3transfer-0.10.3-py3-none-any.whl", hash = "sha256:263ed587a5803c6c708d3ce44dc4dfedaab4c1a32e8329bab818933d79ddcf5d"}, - {file = "s3transfer-0.10.3.tar.gz", hash = "sha256:4f50ed74ab84d474ce614475e0b8d5047ff080810aac5d01ea25231cfc944b0c"}, + {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, + {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, ] [package.dependencies] @@ -3795,23 +3755,23 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "75.5.0" +version = "75.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" files = [ - {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, - {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, + {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, + {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] -core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "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)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "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)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "shapely" @@ -3936,13 +3896,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "starlette" -version = "0.41.2" +version = "0.41.3" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" files = [ - {file = "starlette-0.41.2-py3-none-any.whl", hash = "sha256:fbc189474b4731cf30fcef52f18a8d070e3f3b46c6a04c97579e85e6ffca942d"}, - {file = "starlette-0.41.2.tar.gz", hash = "sha256:9834fd799d1a87fd346deb76158668cfa0b0d56f85caefe8268e2d97c3468b62"}, + {file = "starlette-0.41.3-py3-none-any.whl", hash = "sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7"}, + {file = "starlette-0.41.3.tar.gz", hash = "sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835"}, ] [package.dependencies] @@ -4173,13 +4133,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "uvicorn" -version = "0.32.0" +version = "0.32.1" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" files = [ - {file = "uvicorn-0.32.0-py3-none-any.whl", hash = "sha256:60b8f3a5ac027dcd31448f411ced12b5ef452c646f76f02f8cc3f25d8d26fd82"}, - {file = "uvicorn-0.32.0.tar.gz", hash = "sha256:f78b36b143c16f54ccdb8190d0a26b5f1901fe5a3c777e1ab29f26391af8551e"}, + {file = "uvicorn-0.32.1-py3-none-any.whl", hash = "sha256:82ad92fd58da0d12af7482ecdb5f2470a04c9c9a53ced65b9bbb4a205377602e"}, + {file = "uvicorn-0.32.1.tar.gz", hash = "sha256:ee9519c246a72b1c084cea8d3b44ed6026e78a4a309cbedae9c37e4cb9fbb175"}, ] [package.dependencies] @@ -4188,7 +4148,7 @@ h11 = ">=0.8" typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] +standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] [[package]] name = "virtualenv" @@ -4301,4 +4261,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "744286122d13a456b7cfcabc5b92c8c767ecd212f8431afa29768be14af8c329" +content-hash = "8d487ee99c98da57d1321c394fcbe7731416d449382e34472d70e9ccc6990c7c" diff --git a/space2stats_api/src/pyproject.toml b/space2stats_api/src/pyproject.toml index 6b79af37..a86b837a 100644 --- a/space2stats_api/src/pyproject.toml +++ b/space2stats_api/src/pyproject.toml @@ -9,9 +9,7 @@ readme = "README.md" python = ">=3.10,<3.13" orjson = "*" fastapi = ">=0.112.0" -pandas = "*" shapely = "*" -h3 = "*" psycopg = { version = "*", extras = ["binary", "pool"] } httpx = "*" geojson-pydantic = "*" @@ -22,7 +20,7 @@ mangum = "*" asgi-s3-response-middleware = "^0.0.4" boto3 = "^1.35.11" numpy = "^1.24.0" -h3ronpy = "^0.21.0" +h3ronpy = "^0.21.1" [tool.poetry.group.lambda.dependencies] mangum = "*" @@ -37,7 +35,6 @@ pyarrow = "^17.0.0" adbc-driver-postgresql = "^1.2.0" tqdm = "^4.66.5" - [tool.poetry.group.notebook.dependencies] pandas = "*" jupyter = "*" From 701d6f95c87b6061ed6e0addc8a62fb0a1d7145b Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 21 Nov 2024 10:20:16 +0000 Subject: [PATCH 13/18] Update lock file --- space2stats_api/src/poetry.lock | 512 +++++++++++++++++++------------- 1 file changed, 310 insertions(+), 202 deletions(-) diff --git a/space2stats_api/src/poetry.lock b/space2stats_api/src/poetry.lock index e387438c..ddb1beb7 100644 --- a/space2stats_api/src/poetry.lock +++ b/space2stats_api/src/poetry.lock @@ -558,17 +558,17 @@ css = ["tinycss2 (>=1.1.0,<1.5)"] [[package]] name = "boto3" -version = "1.35.37" +version = "1.35.66" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.37-py3-none-any.whl", hash = "sha256:385ca77bf8ea4ab2d97f6e2435bdb29f77d9301e2f7ac796c2f465753c2adf3c"}, - {file = "boto3-1.35.37.tar.gz", hash = "sha256:470d981583885859fed2fd1c185eeb01cc03e60272d499bafe41b12625b158c8"}, + {file = "boto3-1.35.66-py3-none-any.whl", hash = "sha256:09a610f8cf4d3c22d4ca69c1f89079e3a1c82805ce94fa0eb4ecdd4d2ba6c4bc"}, + {file = "boto3-1.35.66.tar.gz", hash = "sha256:c392b9168b65e9c23483eaccb5b68d1f960232d7f967a1e00a045ba065ce050d"}, ] [package.dependencies] -botocore = ">=1.35.37,<1.36.0" +botocore = ">=1.35.66,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -577,13 +577,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.37" +version = "1.35.66" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.37-py3-none-any.whl", hash = "sha256:64f965d4ba7adb8d79ce044c3aef7356e05dd74753cf7e9115b80f477845d920"}, - {file = "botocore-1.35.37.tar.gz", hash = "sha256:b2b4d29bafd95b698344f2f0577bb67064adbf1735d8a0e3c7473daa59c23ba6"}, + {file = "botocore-1.35.66-py3-none-any.whl", hash = "sha256:d0683e9c18bb6852f768da268086c3749d925332a664db0dd1459cfa7e96e475"}, + {file = "botocore-1.35.66.tar.gz", hash = "sha256:51f43220315f384959f02ea3266740db4d421592dd87576c18824e424b349fdb"}, ] [package.dependencies] @@ -834,75 +834,92 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "comm" +version = "0.2.2" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = false +python-versions = ">=3.8" +files = [ + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, +] + +[package.dependencies] +traitlets = ">=4" + +[package.extras] +test = ["pytest"] + [[package]] name = "coverage" -version = "7.6.2" +version = "7.6.7" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ - {file = "coverage-7.6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9df1950fb92d49970cce38100d7e7293c84ed3606eaa16ea0b6bc27175bb667"}, - {file = "coverage-7.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:24500f4b0e03aab60ce575c85365beab64b44d4db837021e08339f61d1fbfe52"}, - {file = "coverage-7.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a663b180b6669c400b4630a24cc776f23a992d38ce7ae72ede2a397ce6b0f170"}, - {file = "coverage-7.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfde025e2793a22efe8c21f807d276bd1d6a4bcc5ba6f19dbdfc4e7a12160909"}, - {file = "coverage-7.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:087932079c065d7b8ebadd3a0160656c55954144af6439886c8bcf78bbbcde7f"}, - {file = "coverage-7.6.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9c6b0c1cafd96213a0327cf680acb39f70e452caf8e9a25aeb05316db9c07f89"}, - {file = "coverage-7.6.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6e85830eed5b5263ffa0c62428e43cb844296f3b4461f09e4bdb0d44ec190bc2"}, - {file = "coverage-7.6.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:62ab4231c01e156ece1b3a187c87173f31cbeee83a5e1f6dff17f288dca93345"}, - {file = "coverage-7.6.2-cp310-cp310-win32.whl", hash = "sha256:7b80fbb0da3aebde102a37ef0138aeedff45997e22f8962e5f16ae1742852676"}, - {file = "coverage-7.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:d20c3d1f31f14d6962a4e2f549c21d31e670b90f777ef4171be540fb7fb70f02"}, - {file = "coverage-7.6.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bb21bac7783c1bf6f4bbe68b1e0ff0d20e7e7732cfb7995bc8d96e23aa90fc7b"}, - {file = "coverage-7.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7b2e437fbd8fae5bc7716b9c7ff97aecc95f0b4d56e4ca08b3c8d8adcaadb84"}, - {file = "coverage-7.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:536f77f2bf5797983652d1d55f1a7272a29afcc89e3ae51caa99b2db4e89d658"}, - {file = "coverage-7.6.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f361296ca7054f0936b02525646b2731b32c8074ba6defab524b79b2b7eeac72"}, - {file = "coverage-7.6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7926d8d034e06b479797c199747dd774d5e86179f2ce44294423327a88d66ca7"}, - {file = "coverage-7.6.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0bbae11c138585c89fb4e991faefb174a80112e1a7557d507aaa07675c62e66b"}, - {file = "coverage-7.6.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fcad7d5d2bbfeae1026b395036a8aa5abf67e8038ae7e6a25c7d0f88b10a8e6a"}, - {file = "coverage-7.6.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f01e53575f27097d75d42de33b1b289c74b16891ce576d767ad8c48d17aeb5e0"}, - {file = "coverage-7.6.2-cp311-cp311-win32.whl", hash = "sha256:7781f4f70c9b0b39e1b129b10c7d43a4e0c91f90c60435e6da8288efc2b73438"}, - {file = "coverage-7.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:9bcd51eeca35a80e76dc5794a9dd7cb04b97f0e8af620d54711793bfc1fbba4b"}, - {file = "coverage-7.6.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ebc94fadbd4a3f4215993326a6a00e47d79889391f5659bf310f55fe5d9f581c"}, - {file = "coverage-7.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9681516288e3dcf0aa7c26231178cc0be6cac9705cac06709f2353c5b406cfea"}, - {file = "coverage-7.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d9c5d13927d77af4fbe453953810db766f75401e764727e73a6ee4f82527b3e"}, - {file = "coverage-7.6.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92f9ca04b3e719d69b02dc4a69debb795af84cb7afd09c5eb5d54b4a1ae2191"}, - {file = "coverage-7.6.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ff2ef83d6d0b527b5c9dad73819b24a2f76fdddcfd6c4e7a4d7e73ecb0656b4"}, - {file = "coverage-7.6.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:47ccb6e99a3031ffbbd6e7cc041e70770b4fe405370c66a54dbf26a500ded80b"}, - {file = "coverage-7.6.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a867d26f06bcd047ef716175b2696b315cb7571ccb951006d61ca80bbc356e9e"}, - {file = "coverage-7.6.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cdfcf2e914e2ba653101157458afd0ad92a16731eeba9a611b5cbb3e7124e74b"}, - {file = "coverage-7.6.2-cp312-cp312-win32.whl", hash = "sha256:f9035695dadfb397bee9eeaf1dc7fbeda483bf7664a7397a629846800ce6e276"}, - {file = "coverage-7.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:5ed69befa9a9fc796fe015a7040c9398722d6b97df73a6b608e9e275fa0932b0"}, - {file = "coverage-7.6.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4eea60c79d36a8f39475b1af887663bc3ae4f31289cd216f514ce18d5938df40"}, - {file = "coverage-7.6.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa68a6cdbe1bc6793a9dbfc38302c11599bbe1837392ae9b1d238b9ef3dafcf1"}, - {file = "coverage-7.6.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ec528ae69f0a139690fad6deac8a7d33629fa61ccce693fdd07ddf7e9931fba"}, - {file = "coverage-7.6.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed5ac02126f74d190fa2cc14a9eb2a5d9837d5863920fa472b02eb1595cdc925"}, - {file = "coverage-7.6.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21c0ea0d4db8a36b275cb6fb2437a3715697a4ba3cb7b918d3525cc75f726304"}, - {file = "coverage-7.6.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:35a51598f29b2a19e26d0908bd196f771a9b1c5d9a07bf20be0adf28f1ad4f77"}, - {file = "coverage-7.6.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c9192925acc33e146864b8cf037e2ed32a91fdf7644ae875f5d46cd2ef086a5f"}, - {file = "coverage-7.6.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf4eeecc9e10f5403ec06138978235af79c9a79af494eb6b1d60a50b49ed2869"}, - {file = "coverage-7.6.2-cp313-cp313-win32.whl", hash = "sha256:e4ee15b267d2dad3e8759ca441ad450c334f3733304c55210c2a44516e8d5530"}, - {file = "coverage-7.6.2-cp313-cp313-win_amd64.whl", hash = "sha256:c71965d1ced48bf97aab79fad56df82c566b4c498ffc09c2094605727c4b7e36"}, - {file = "coverage-7.6.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7571e8bbecc6ac066256f9de40365ff833553e2e0c0c004f4482facb131820ef"}, - {file = "coverage-7.6.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:078a87519057dacb5d77e333f740708ec2a8f768655f1db07f8dfd28d7a005f0"}, - {file = "coverage-7.6.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e5e92e3e84a8718d2de36cd8387459cba9a4508337b8c5f450ce42b87a9e760"}, - {file = "coverage-7.6.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebabdf1c76593a09ee18c1a06cd3022919861365219ea3aca0247ededf6facd6"}, - {file = "coverage-7.6.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12179eb0575b8900912711688e45474f04ab3934aaa7b624dea7b3c511ecc90f"}, - {file = "coverage-7.6.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:39d3b964abfe1519b9d313ab28abf1d02faea26cd14b27f5283849bf59479ff5"}, - {file = "coverage-7.6.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:84c4315577f7cd511d6250ffd0f695c825efe729f4205c0340f7004eda51191f"}, - {file = "coverage-7.6.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ff797320dcbff57caa6b2301c3913784a010e13b1f6cf4ab3f563f3c5e7919db"}, - {file = "coverage-7.6.2-cp313-cp313t-win32.whl", hash = "sha256:2b636a301e53964550e2f3094484fa5a96e699db318d65398cfba438c5c92171"}, - {file = "coverage-7.6.2-cp313-cp313t-win_amd64.whl", hash = "sha256:d03a060ac1a08e10589c27d509bbdb35b65f2d7f3f8d81cf2fa199877c7bc58a"}, - {file = "coverage-7.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c37faddc8acd826cfc5e2392531aba734b229741d3daec7f4c777a8f0d4993e5"}, - {file = "coverage-7.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab31fdd643f162c467cfe6a86e9cb5f1965b632e5e65c072d90854ff486d02cf"}, - {file = "coverage-7.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97df87e1a20deb75ac7d920c812e9326096aa00a9a4b6d07679b4f1f14b06c90"}, - {file = "coverage-7.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:343056c5e0737487a5291f5691f4dfeb25b3e3c8699b4d36b92bb0e586219d14"}, - {file = "coverage-7.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4ef1c56b47b6b9024b939d503ab487231df1f722065a48f4fc61832130b90e"}, - {file = "coverage-7.6.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fca4a92c8a7a73dee6946471bce6d1443d94155694b893b79e19ca2a540d86e"}, - {file = "coverage-7.6.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69f251804e052fc46d29d0e7348cdc5fcbfc4861dc4a1ebedef7e78d241ad39e"}, - {file = "coverage-7.6.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e8ea055b3ea046c0f66217af65bc193bbbeca1c8661dc5fd42698db5795d2627"}, - {file = "coverage-7.6.2-cp39-cp39-win32.whl", hash = "sha256:6c2ba1e0c24d8fae8f2cf0aeb2fc0a2a7f69b6d20bd8d3749fd6b36ecef5edf0"}, - {file = "coverage-7.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:2186369a654a15628e9c1c9921409a6b3eda833e4b91f3ca2a7d9f77abb4987c"}, - {file = "coverage-7.6.2-pp39.pp310-none-any.whl", hash = "sha256:667952739daafe9616db19fbedbdb87917eee253ac4f31d70c7587f7ab531b4e"}, - {file = "coverage-7.6.2.tar.gz", hash = "sha256:a5f81e68aa62bc0cfca04f7b19eaa8f9c826b53fc82ab9e2121976dc74f131f3"}, + {file = "coverage-7.6.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:108bb458827765d538abcbf8288599fee07d2743357bdd9b9dad456c287e121e"}, + {file = "coverage-7.6.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c973b2fe4dc445cb865ab369df7521df9c27bf40715c837a113edaa2aa9faf45"}, + {file = "coverage-7.6.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c6b24007c4bcd0b19fac25763a7cac5035c735ae017e9a349b927cfc88f31c1"}, + {file = "coverage-7.6.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acbb8af78f8f91b3b51f58f288c0994ba63c646bc1a8a22ad072e4e7e0a49f1c"}, + {file = "coverage-7.6.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad32a981bcdedb8d2ace03b05e4fd8dace8901eec64a532b00b15217d3677dd2"}, + {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:34d23e28ccb26236718a3a78ba72744212aa383141961dd6825f6595005c8b06"}, + {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e25bacb53a8c7325e34d45dddd2f2fbae0dbc230d0e2642e264a64e17322a777"}, + {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af05bbba896c4472a29408455fe31b3797b4d8648ed0a2ccac03e074a77e2314"}, + {file = "coverage-7.6.7-cp310-cp310-win32.whl", hash = "sha256:796c9b107d11d2d69e1849b2dfe41730134b526a49d3acb98ca02f4985eeff7a"}, + {file = "coverage-7.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:987a8e3da7da4eed10a20491cf790589a8e5e07656b6dc22d3814c4d88faf163"}, + {file = "coverage-7.6.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7e61b0e77ff4dddebb35a0e8bb5a68bf0f8b872407d8d9f0c726b65dfabe2469"}, + {file = "coverage-7.6.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a5407a75ca4abc20d6252efeb238377a71ce7bda849c26c7a9bece8680a5d99"}, + {file = "coverage-7.6.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df002e59f2d29e889c37abd0b9ee0d0e6e38c24f5f55d71ff0e09e3412a340ec"}, + {file = "coverage-7.6.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:673184b3156cba06154825f25af33baa2671ddae6343f23175764e65a8c4c30b"}, + {file = "coverage-7.6.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e69ad502f1a2243f739f5bd60565d14a278be58be4c137d90799f2c263e7049a"}, + {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60dcf7605c50ea72a14490d0756daffef77a5be15ed1b9fea468b1c7bda1bc3b"}, + {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9c2eb378bebb2c8f65befcb5147877fc1c9fbc640fc0aad3add759b5df79d55d"}, + {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c0317288f032221d35fa4cbc35d9f4923ff0dfd176c79c9b356e8ef8ef2dff4"}, + {file = "coverage-7.6.7-cp311-cp311-win32.whl", hash = "sha256:951aade8297358f3618a6e0660dc74f6b52233c42089d28525749fc8267dccd2"}, + {file = "coverage-7.6.7-cp311-cp311-win_amd64.whl", hash = "sha256:5e444b8e88339a2a67ce07d41faabb1d60d1004820cee5a2c2b54e2d8e429a0f"}, + {file = "coverage-7.6.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f07ff574986bc3edb80e2c36391678a271d555f91fd1d332a1e0f4b5ea4b6ea9"}, + {file = "coverage-7.6.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:49ed5ee4109258973630c1f9d099c7e72c5c36605029f3a91fe9982c6076c82b"}, + {file = "coverage-7.6.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3e8796434a8106b3ac025fd15417315d7a58ee3e600ad4dbcfddc3f4b14342c"}, + {file = "coverage-7.6.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3b925300484a3294d1c70f6b2b810d6526f2929de954e5b6be2bf8caa1f12c1"}, + {file = "coverage-7.6.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c42ec2c522e3ddd683dec5cdce8e62817afb648caedad9da725001fa530d354"}, + {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0266b62cbea568bd5e93a4da364d05de422110cbed5056d69339bd5af5685433"}, + {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e5f2a0f161d126ccc7038f1f3029184dbdf8f018230af17ef6fd6a707a5b881f"}, + {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c132b5a22821f9b143f87446805e13580b67c670a548b96da945a8f6b4f2efbb"}, + {file = "coverage-7.6.7-cp312-cp312-win32.whl", hash = "sha256:7c07de0d2a110f02af30883cd7dddbe704887617d5c27cf373362667445a4c76"}, + {file = "coverage-7.6.7-cp312-cp312-win_amd64.whl", hash = "sha256:fd49c01e5057a451c30c9b892948976f5d38f2cbd04dc556a82743ba8e27ed8c"}, + {file = "coverage-7.6.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46f21663e358beae6b368429ffadf14ed0a329996248a847a4322fb2e35d64d3"}, + {file = "coverage-7.6.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40cca284c7c310d622a1677f105e8507441d1bb7c226f41978ba7c86979609ab"}, + {file = "coverage-7.6.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77256ad2345c29fe59ae861aa11cfc74579c88d4e8dbf121cbe46b8e32aec808"}, + {file = "coverage-7.6.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87ea64b9fa52bf395272e54020537990a28078478167ade6c61da7ac04dc14bc"}, + {file = "coverage-7.6.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d608a7808793e3615e54e9267519351c3ae204a6d85764d8337bd95993581a8"}, + {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdd94501d65adc5c24f8a1a0eda110452ba62b3f4aeaba01e021c1ed9cb8f34a"}, + {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82c809a62e953867cf57e0548c2b8464207f5f3a6ff0e1e961683e79b89f2c55"}, + {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb684694e99d0b791a43e9fc0fa58efc15ec357ac48d25b619f207c41f2fd384"}, + {file = "coverage-7.6.7-cp313-cp313-win32.whl", hash = "sha256:963e4a08cbb0af6623e61492c0ec4c0ec5c5cf74db5f6564f98248d27ee57d30"}, + {file = "coverage-7.6.7-cp313-cp313-win_amd64.whl", hash = "sha256:14045b8bfd5909196a90da145a37f9d335a5d988a83db34e80f41e965fb7cb42"}, + {file = "coverage-7.6.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f2c7a045eef561e9544359a0bf5784b44e55cefc7261a20e730baa9220c83413"}, + {file = "coverage-7.6.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5dd4e4a49d9c72a38d18d641135d2fb0bdf7b726ca60a103836b3d00a1182acd"}, + {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c95e0fa3d1547cb6f021ab72f5c23402da2358beec0a8e6d19a368bd7b0fb37"}, + {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f63e21ed474edd23f7501f89b53280014436e383a14b9bd77a648366c81dce7b"}, + {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead9b9605c54d15be228687552916c89c9683c215370c4a44f1f217d2adcc34d"}, + {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0573f5cbf39114270842d01872952d301027d2d6e2d84013f30966313cadb529"}, + {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:e2c8e3384c12dfa19fa9a52f23eb091a8fad93b5b81a41b14c17c78e23dd1d8b"}, + {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:70a56a2ec1869e6e9fa69ef6b76b1a8a7ef709972b9cc473f9ce9d26b5997ce3"}, + {file = "coverage-7.6.7-cp313-cp313t-win32.whl", hash = "sha256:dbba8210f5067398b2c4d96b4e64d8fb943644d5eb70be0d989067c8ca40c0f8"}, + {file = "coverage-7.6.7-cp313-cp313t-win_amd64.whl", hash = "sha256:dfd14bcae0c94004baba5184d1c935ae0d1231b8409eb6c103a5fd75e8ecdc56"}, + {file = "coverage-7.6.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37a15573f988b67f7348916077c6d8ad43adb75e478d0910957394df397d2874"}, + {file = "coverage-7.6.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b6cce5c76985f81da3769c52203ee94722cd5d5889731cd70d31fee939b74bf0"}, + {file = "coverage-7.6.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ab9763d291a17b527ac6fd11d1a9a9c358280adb320e9c2672a97af346ac2c"}, + {file = "coverage-7.6.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cf96ceaa275f071f1bea3067f8fd43bec184a25a962c754024c973af871e1b7"}, + {file = "coverage-7.6.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aee9cf6b0134d6f932d219ce253ef0e624f4fa588ee64830fcba193269e4daa3"}, + {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2bc3e45c16564cc72de09e37413262b9f99167803e5e48c6156bccdfb22c8327"}, + {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:623e6965dcf4e28a3debaa6fcf4b99ee06d27218f46d43befe4db1c70841551c"}, + {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:850cfd2d6fc26f8346f422920ac204e1d28814e32e3a58c19c91980fa74d8289"}, + {file = "coverage-7.6.7-cp39-cp39-win32.whl", hash = "sha256:c296263093f099da4f51b3dff1eff5d4959b527d4f2f419e16508c5da9e15e8c"}, + {file = "coverage-7.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:90746521206c88bdb305a4bf3342b1b7316ab80f804d40c536fc7d329301ee13"}, + {file = "coverage-7.6.7-pp39.pp310-none-any.whl", hash = "sha256:0ddcb70b3a3a57581b450571b31cb774f23eb9519c2aaa6176d3a84c9fc57671"}, + {file = "coverage-7.6.7.tar.gz", hash = "sha256:d79d4826e41441c9a118ff045e4bccb9fdbdcb1d02413e7ea6eb5c87b5439d24"}, ] [package.dependencies] @@ -1948,72 +1965,72 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "3.0.1" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" files = [ - {file = "MarkupSafe-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:db842712984e91707437461930e6011e60b39136c7331e971952bb30465bc1a1"}, - {file = "MarkupSafe-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ffb4a8e7d46ed96ae48805746755fadd0909fea2306f93d5d8233ba23dda12a"}, - {file = "MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67c519635a4f64e495c50e3107d9b4075aec33634272b5db1cde839e07367589"}, - {file = "MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48488d999ed50ba8d38c581d67e496f955821dc183883550a6fbc7f1aefdc170"}, - {file = "MarkupSafe-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f31ae06f1328595d762c9a2bf29dafd8621c7d3adc130cbb46278079758779ca"}, - {file = "MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80fcbf3add8790caddfab6764bde258b5d09aefbe9169c183f88a7410f0f6dea"}, - {file = "MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3341c043c37d78cc5ae6e3e305e988532b072329639007fd408a476642a89fd6"}, - {file = "MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cb53e2a99df28eee3b5f4fea166020d3ef9116fdc5764bc5117486e6d1211b25"}, - {file = "MarkupSafe-3.0.1-cp310-cp310-win32.whl", hash = "sha256:db15ce28e1e127a0013dfb8ac243a8e392db8c61eae113337536edb28bdc1f97"}, - {file = "MarkupSafe-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:4ffaaac913c3f7345579db4f33b0020db693f302ca5137f106060316761beea9"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26627785a54a947f6d7336ce5963569b5d75614619e75193bdb4e06e21d447ad"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b954093679d5750495725ea6f88409946d69cfb25ea7b4c846eef5044194f583"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:973a371a55ce9ed333a3a0f8e0bcfae9e0d637711534bcb11e130af2ab9334e7"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244dbe463d5fb6d7ce161301a03a6fe744dac9072328ba9fc82289238582697b"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d98e66a24497637dd31ccab090b34392dddb1f2f811c4b4cd80c230205c074a3"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad91738f14eb8da0ff82f2acd0098b6257621410dcbd4df20aaa5b4233d75a50"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7044312a928a66a4c2a22644147bc61a199c1709712069a344a3fb5cfcf16915"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a4792d3b3a6dfafefdf8e937f14906a51bd27025a36f4b188728a73382231d91"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-win32.whl", hash = "sha256:fa7d686ed9883f3d664d39d5a8e74d3c5f63e603c2e3ff0abcba23eac6542635"}, - {file = "MarkupSafe-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ba25a71ebf05b9bb0e2ae99f8bc08a07ee8e98c612175087112656ca0f5c8bf"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8ae369e84466aa70f3154ee23c1451fda10a8ee1b63923ce76667e3077f2b0c4"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40f1e10d51c92859765522cbd79c5c8989f40f0419614bcdc5015e7b6bf97fc5"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a4cb365cb49b750bdb60b846b0c0bc49ed62e59a76635095a179d440540c346"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee3941769bd2522fe39222206f6dd97ae83c442a94c90f2b7a25d847d40f4729"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62fada2c942702ef8952754abfc1a9f7658a4d5460fabe95ac7ec2cbe0d02abc"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c2d64fdba74ad16138300815cfdc6ab2f4647e23ced81f59e940d7d4a1469d9"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fb532dd9900381d2e8f48172ddc5a59db4c445a11b9fab40b3b786da40d3b56b"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0f84af7e813784feb4d5e4ff7db633aba6c8ca64a833f61d8e4eade234ef0c38"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-win32.whl", hash = "sha256:cbf445eb5628981a80f54087f9acdbf84f9b7d862756110d172993b9a5ae81aa"}, - {file = "MarkupSafe-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:a10860e00ded1dd0a65b83e717af28845bb7bd16d8ace40fe5531491de76b79f"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e81c52638315ff4ac1b533d427f50bc0afc746deb949210bc85f05d4f15fd772"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:312387403cd40699ab91d50735ea7a507b788091c416dd007eac54434aee51da"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ae99f31f47d849758a687102afdd05bd3d3ff7dbab0a8f1587981b58a76152a"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c97ff7fedf56d86bae92fa0a646ce1a0ec7509a7578e1ed238731ba13aabcd1c"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7420ceda262dbb4b8d839a4ec63d61c261e4e77677ed7c66c99f4e7cb5030dd"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45d42d132cff577c92bfba536aefcfea7e26efb975bd455db4e6602f5c9f45e7"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c8817557d0de9349109acb38b9dd570b03cc5014e8aabf1cbddc6e81005becd"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a54c43d3ec4cf2a39f4387ad044221c66a376e58c0d0e971d47c475ba79c6b5"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-win32.whl", hash = "sha256:c91b394f7601438ff79a4b93d16be92f216adb57d813a78be4446fe0f6bc2d8c"}, - {file = "MarkupSafe-3.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:fe32482b37b4b00c7a52a07211b479653b7fe4f22b2e481b9a9b099d8a430f2f"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:17b2aea42a7280db02ac644db1d634ad47dcc96faf38ab304fe26ba2680d359a"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:852dc840f6d7c985603e60b5deaae1d89c56cb038b577f6b5b8c808c97580f1d"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0778de17cff1acaeccc3ff30cd99a3fd5c50fc58ad3d6c0e0c4c58092b859396"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:800100d45176652ded796134277ecb13640c1a537cad3b8b53da45aa96330453"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d06b24c686a34c86c8c1fba923181eae6b10565e4d80bdd7bc1c8e2f11247aa4"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:33d1c36b90e570ba7785dacd1faaf091203d9942bc036118fab8110a401eb1a8"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:beeebf760a9c1f4c07ef6a53465e8cfa776ea6a2021eda0d0417ec41043fe984"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bbde71a705f8e9e4c3e9e33db69341d040c827c7afa6789b14c6e16776074f5a"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-win32.whl", hash = "sha256:82b5dba6eb1bcc29cc305a18a3c5365d2af06ee71b123216416f7e20d2a84e5b"}, - {file = "MarkupSafe-3.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:730d86af59e0e43ce277bb83970530dd223bf7f2a838e086b50affa6ec5f9295"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4935dd7883f1d50e2ffecca0aa33dc1946a94c8f3fdafb8df5c330e48f71b132"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e9393357f19954248b00bed7c56f29a25c930593a77630c719653d51e7669c2a"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40621d60d0e58aa573b68ac5e2d6b20d44392878e0bfc159012a5787c4e35bc8"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f94190df587738280d544971500b9cafc9b950d32efcb1fba9ac10d84e6aa4e6"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6a387d61fe41cdf7ea95b38e9af11cfb1a63499af2759444b99185c4ab33f5b"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8ad4ad1429cd4f315f32ef263c1342166695fad76c100c5d979c45d5570ed58b"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e24bfe89c6ac4c31792793ad9f861b8f6dc4546ac6dc8f1c9083c7c4f2b335cd"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2a4b34a8d14649315c4bc26bbfa352663eb51d146e35eef231dd739d54a5430a"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-win32.whl", hash = "sha256:242d6860f1fd9191aef5fae22b51c5c19767f93fb9ead4d21924e0bcb17619d8"}, - {file = "MarkupSafe-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:93e8248d650e7e9d49e8251f883eed60ecbc0e8ffd6349e18550925e31bd029b"}, - {file = "markupsafe-3.0.1.tar.gz", hash = "sha256:3e683ee4f5d0fa2dde4db77ed8dd8a876686e3fc417655c2ece9a90576905344"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] @@ -2256,64 +2273,47 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "2.1.2" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30d53720b726ec36a7f88dc873f0eec8447fbc93d93a8f079dfac2629598d6ee"}, - {file = "numpy-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d3ca0a72dd8846eb6f7dfe8f19088060fcb76931ed592d29128e0219652884"}, - {file = "numpy-2.1.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:fc44e3c68ff00fd991b59092a54350e6e4911152682b4782f68070985aa9e648"}, - {file = "numpy-2.1.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7c1c60328bd964b53f8b835df69ae8198659e2b9302ff9ebb7de4e5a5994db3d"}, - {file = "numpy-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdb606a7478f9ad91c6283e238544451e3a95f30fb5467fbf715964341a8a86"}, - {file = "numpy-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d666cb72687559689e9906197e3bec7b736764df6a2e58ee265e360663e9baf7"}, - {file = "numpy-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6eef7a2dbd0abfb0d9eaf78b73017dbfd0b54051102ff4e6a7b2980d5ac1a03"}, - {file = "numpy-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12edb90831ff481f7ef5f6bc6431a9d74dc0e5ff401559a71e5e4611d4f2d466"}, - {file = "numpy-2.1.2-cp310-cp310-win32.whl", hash = "sha256:a65acfdb9c6ebb8368490dbafe83c03c7e277b37e6857f0caeadbbc56e12f4fb"}, - {file = "numpy-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:860ec6e63e2c5c2ee5e9121808145c7bf86c96cca9ad396c0bd3e0f2798ccbe2"}, - {file = "numpy-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b42a1a511c81cc78cbc4539675713bbcf9d9c3913386243ceff0e9429ca892fe"}, - {file = "numpy-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:faa88bc527d0f097abdc2c663cddf37c05a1c2f113716601555249805cf573f1"}, - {file = "numpy-2.1.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c82af4b2ddd2ee72d1fc0c6695048d457e00b3582ccde72d8a1c991b808bb20f"}, - {file = "numpy-2.1.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:13602b3174432a35b16c4cfb5de9a12d229727c3dd47a6ce35111f2ebdf66ff4"}, - {file = "numpy-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ebec5fd716c5a5b3d8dfcc439be82a8407b7b24b230d0ad28a81b61c2f4659a"}, - {file = "numpy-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2b49c3c0804e8ecb05d59af8386ec2f74877f7ca8fd9c1e00be2672e4d399b1"}, - {file = "numpy-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cbba4b30bf31ddbe97f1c7205ef976909a93a66bb1583e983adbd155ba72ac2"}, - {file = "numpy-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8e00ea6fc82e8a804433d3e9cedaa1051a1422cb6e443011590c14d2dea59146"}, - {file = "numpy-2.1.2-cp311-cp311-win32.whl", hash = "sha256:5006b13a06e0b38d561fab5ccc37581f23c9511879be7693bd33c7cd15ca227c"}, - {file = "numpy-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:f1eb068ead09f4994dec71c24b2844f1e4e4e013b9629f812f292f04bd1510d9"}, - {file = "numpy-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7bf0a4f9f15b32b5ba53147369e94296f5fffb783db5aacc1be15b4bf72f43b"}, - {file = "numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db"}, - {file = "numpy-2.1.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f751ed0a2f250541e19dfca9f1eafa31a392c71c832b6bb9e113b10d050cb0f1"}, - {file = "numpy-2.1.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:bd33f82e95ba7ad632bc57837ee99dba3d7e006536200c4e9124089e1bf42426"}, - {file = "numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0"}, - {file = "numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df"}, - {file = "numpy-2.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ab4754d432e3ac42d33a269c8567413bdb541689b02d93788af4131018cbf366"}, - {file = "numpy-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e585c8ae871fd38ac50598f4763d73ec5497b0de9a0ab4ef5b69f01c6a046142"}, - {file = "numpy-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9c6c754df29ce6a89ed23afb25550d1c2d5fdb9901d9c67a16e0b16eaf7e2550"}, - {file = "numpy-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e"}, - {file = "numpy-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a84498e0d0a1174f2b3ed769b67b656aa5460c92c9554039e11f20a05650f00d"}, - {file = "numpy-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4d6ec0d4222e8ffdab1744da2560f07856421b367928026fb540e1945f2eeeaf"}, - {file = "numpy-2.1.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:259ec80d54999cc34cd1eb8ded513cb053c3bf4829152a2e00de2371bd406f5e"}, - {file = "numpy-2.1.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:675c741d4739af2dc20cd6c6a5c4b7355c728167845e3c6b0e824e4e5d36a6c3"}, - {file = "numpy-2.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b2d4e667895cc55e3ff2b56077e4c8a5604361fc21a042845ea3ad67465aa8"}, - {file = "numpy-2.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43cca367bf94a14aca50b89e9bc2061683116cfe864e56740e083392f533ce7a"}, - {file = "numpy-2.1.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:76322dcdb16fccf2ac56f99048af32259dcc488d9b7e25b51e5eca5147a3fb98"}, - {file = "numpy-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:32e16a03138cabe0cb28e1007ee82264296ac0983714094380b408097a418cfe"}, - {file = "numpy-2.1.2-cp313-cp313-win32.whl", hash = "sha256:242b39d00e4944431a3cd2db2f5377e15b5785920421993770cddb89992c3f3a"}, - {file = "numpy-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:f2ded8d9b6f68cc26f8425eda5d3877b47343e68ca23d0d0846f4d312ecaa445"}, - {file = "numpy-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ffef621c14ebb0188a8633348504a35c13680d6da93ab5cb86f4e54b7e922b5"}, - {file = "numpy-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad369ed238b1959dfbade9018a740fb9392c5ac4f9b5173f420bd4f37ba1f7a0"}, - {file = "numpy-2.1.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d82075752f40c0ddf57e6e02673a17f6cb0f8eb3f587f63ca1eaab5594da5b17"}, - {file = "numpy-2.1.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:1600068c262af1ca9580a527d43dc9d959b0b1d8e56f8a05d830eea39b7c8af6"}, - {file = "numpy-2.1.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a26ae94658d3ba3781d5e103ac07a876b3e9b29db53f68ed7df432fd033358a8"}, - {file = "numpy-2.1.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13311c2db4c5f7609b462bc0f43d3c465424d25c626d95040f073e30f7570e35"}, - {file = "numpy-2.1.2-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:2abbf905a0b568706391ec6fa15161fad0fb5d8b68d73c461b3c1bab6064dd62"}, - {file = "numpy-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ef444c57d664d35cac4e18c298c47d7b504c66b17c2ea91312e979fcfbdfb08a"}, - {file = "numpy-2.1.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bdd407c40483463898b84490770199d5714dcc9dd9b792f6c6caccc523c00952"}, - {file = "numpy-2.1.2-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:da65fb46d4cbb75cb417cddf6ba5e7582eb7bb0b47db4b99c9fe5787ce5d91f5"}, - {file = "numpy-2.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c193d0b0238638e6fc5f10f1b074a6993cb13b0b431f64079a509d63d3aa8b7"}, - {file = "numpy-2.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a7d80b2e904faa63068ead63107189164ca443b42dd1930299e0d1cb041cec2e"}, - {file = "numpy-2.1.2.tar.gz", hash = "sha256:13532a088217fa624c99b843eeb54640de23b3414b14aa66d023805eb731066c"}, + {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]] @@ -3064,6 +3064,94 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyogrio" +version = "0.10.0" +description = "Vectorized spatial vector file format I/O using GDAL/OGR" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pyogrio-0.10.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:046eeeae12a03a3ebc3dc5ff5a87664e4f5fc0a4fb1ea5d5c45d547fa941072b"}, + {file = "pyogrio-0.10.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:44380f4d9245c776f432526e29ce4d29238aea26adad991803c4f453474f51d3"}, + {file = "pyogrio-0.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14fd3b72b4e2dc59e264607b265c742b0c5ec2ea9e748b115f742381b28dd373"}, + {file = "pyogrio-0.10.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:1fea7892f4633cab04d13563e47ec2e87dc2b5cd71b9546018d123184528c151"}, + {file = "pyogrio-0.10.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3539596a76eb8a9d166d6f9d3f36731a8c5bd5c43901209d89dc66b9dc00f079"}, + {file = "pyogrio-0.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:eac90b2501656892c63bc500c12e71f3dbf7d66ddc5a7fb05cd480d25d1b7022"}, + {file = "pyogrio-0.10.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5b1a51431a27a1cb3e4e19558939c1423106e06e7b67d6285f4fba9c2d0a91b9"}, + {file = "pyogrio-0.10.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:216d69cd77b2b4a0c9d7d449bc239f8b77f3d73f4a05d9c738a0745b236902d8"}, + {file = "pyogrio-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2f0b75f0077ce33256aec6278c2a9c3b79bf0637ddf4f93d3ab2609f0501d96"}, + {file = "pyogrio-0.10.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0a47f702d29808c557d2ebea8542c23903f021eae44e16838adef2ab4281c71b"}, + {file = "pyogrio-0.10.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:11e6c71d12da6b445e77d0fc0198db1bd35a77e03a0685e45338cbab9ce02add"}, + {file = "pyogrio-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0d74e91a9c0ff2f9abe01b556ff663977193b2d6922208406172d0fc833beff"}, + {file = "pyogrio-0.10.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2d6558b180e020f71ab7aa7f82d592ed3305c9f698d98f6d0a4637ec7a84c4ce"}, + {file = "pyogrio-0.10.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:a99102037eead8ba491bc57825c1e395ee31c9956d7bff7b4a9e4fdbff3a13c2"}, + {file = "pyogrio-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a4c373281d7cbf560c5b61f8f3c7442103ad7f1c7ac4ef3a84572ed7a5dd2f6"}, + {file = "pyogrio-0.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:19f18411bdf836d24cdc08b9337eb3ec415e4ac4086ba64516b36b73a2e88622"}, + {file = "pyogrio-0.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1abbcdd9876f30bebf1df8a0273f6cdeb29d03259290008275c7fddebe139f20"}, + {file = "pyogrio-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e09839590d71ff832aa95c4f23fa00a2c63c3de82c1fbd4fb8d265792acfc"}, + {file = "pyogrio-0.10.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c90478209537a31dcc65664a87a04c094bb0e08efe502908a6682b8cec0259bf"}, + {file = "pyogrio-0.10.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:fec45e1963b7058e5a1aa98598aed07c0858512c833d6aad2c672c3ec98bbf04"}, + {file = "pyogrio-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28cb139f8a5d0365ede602230104b407ae52bb6b55173c8d5a35424d28c4a2c5"}, + {file = "pyogrio-0.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:cea0187fcc2d574e52af8cfab041fa0a7ad71d5ef6b94b49a3f3d2a04534a27e"}, + {file = "pyogrio-0.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:7c02b207ea8cf09c501ea3e95d29152781a00d3c32267286bc36fa457c332205"}, + {file = "pyogrio-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:02e54bcfb305af75f829044b0045f74de31b77c2d6546f7aaf96822066147848"}, + {file = "pyogrio-0.10.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ea96a1338ed7991735b955d3f84ad5f71b3bc070b6a7a42449941aedecc71768"}, + {file = "pyogrio-0.10.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:32d349600561459791a43f528a92f3e9343a59bdc9bc30b1be9376f0b80cbf16"}, + {file = "pyogrio-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82f7bd6a87bd2e9484bcb4c87ab94eee4c2f573ad148707431c8b341d7f13d99"}, + {file = "pyogrio-0.10.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6166ae81462c257ed8e151c404e316642703813cf771c95ef8e11dcdf2581e47"}, + {file = "pyogrio-0.10.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:22d57495e835fe51b88da43dfbda606c07e1f6c3b849af0c3cfc18e17467641c"}, + {file = "pyogrio-0.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:eea82171bfc07fc778b8dc87b0cdc9ac06c389bc56b0c0b6f34bf9e45fb78c0e"}, + {file = "pyogrio-0.10.0.tar.gz", hash = "sha256:ec051cb568324de878828fae96379b71858933413e185148acb6c162851ab23c"}, +] + +[package.dependencies] +certifi = "*" +numpy = "*" +packaging = "*" + +[package.extras] +benchmark = ["pytest-benchmark"] +dev = ["cython"] +geopandas = ["geopandas"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "pyproj" +version = "3.7.0" +description = "Python interface to PROJ (cartographic projections and coordinate transformations library)" +optional = false +python-versions = ">=3.10" +files = [ + {file = "pyproj-3.7.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d5c7e7d24b967e328a5efd013f466804a1f226d1106ac7efc47dcc99360dbc8f"}, + {file = "pyproj-3.7.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:448958c46bd3fe2da91c89ba551ac5835e63073ca861422c6eb1af89979dfab1"}, + {file = "pyproj-3.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f673ca345bb92afc93d4235938ca0c9a76237aa7addf42a95965c8dc8cad9b49"}, + {file = "pyproj-3.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee60895f60cbd1a9c903ab2bc22adea63004296a1c28b8775a11cf50905cf085"}, + {file = "pyproj-3.7.0-cp310-cp310-win32.whl", hash = "sha256:0dd31b0740ee010934234f848d2d092c66146cb8d0ba009a64e41d192caa7686"}, + {file = "pyproj-3.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:7943d85ba39e89c51b920339ff63162d63bf89da161f0acb6206b0d39b11661e"}, + {file = "pyproj-3.7.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:e66d8d42dbdf232e121546c5a1dec097caf0454e4885c09a8e03cdcee0753c03"}, + {file = "pyproj-3.7.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7764b64a0aefe40134a2828b3a40be88f6c8b7832c45d8a9f2bd592ace4b2a3b"}, + {file = "pyproj-3.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53c442c5081dc95346996f5c4323fde2caafc69c6e60b4707aa46e88244f1e04"}, + {file = "pyproj-3.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc5b305d4d5d7697885681d9b660623e328227612823d5c660e0a9566cb48838"}, + {file = "pyproj-3.7.0-cp311-cp311-win32.whl", hash = "sha256:de2b47d748dc41cccb6b3b713d4d7dc9aa1046a82141c8665026908726426abc"}, + {file = "pyproj-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:38cba7c4c5679e40242dd959133e95b908d3b912dd66291094fd13510e8517ff"}, + {file = "pyproj-3.7.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:8cbec92bdd6e9933ca08795c12717d1384e9b51cf4b1acf0d753db255a75c51e"}, + {file = "pyproj-3.7.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8c4a8e4d3ba76c3adac3c087544cf92f7f9a19ea34946904a13fca48cc1c0106"}, + {file = "pyproj-3.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82624fb42aa31f6b1a860fbc0316babd07fd712642bc31022df4e9b4056bf463"}, + {file = "pyproj-3.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e1bbb3f89c68d4a6835c40b2da8b27680eec60e8cc7cdb08c09bcc725b2b62"}, + {file = "pyproj-3.7.0-cp312-cp312-win32.whl", hash = "sha256:952515d5592167ad4436b355485f82acebed2a49b46722159e4584b75a763dd3"}, + {file = "pyproj-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0692f806224e8ed82fe4acfa57268ff444fdaf9f330689f24c0d96e59480cce1"}, + {file = "pyproj-3.7.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:94e8b903a9e83448fd2379c49dec3e8cd83c9ed36f54354e68b601cef56d5426"}, + {file = "pyproj-3.7.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:64cb5c17d6f6305a8b978a40f95560c87c5b363fcac40632337955664437875a"}, + {file = "pyproj-3.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c54e9bdda7ab9c4a5af50f9d6e6ee7704e05fafd504896b96ed1208c7aea098"}, + {file = "pyproj-3.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24fa4e9e0abba875f9524808410cc520067eaf38fd5549ed0ef7c43ac39923c9"}, + {file = "pyproj-3.7.0-cp313-cp313-win32.whl", hash = "sha256:b9e8353fc3c79dc14d1f5ac758a1a6e4eee04102c3c0b138670f121f5ac52eb4"}, + {file = "pyproj-3.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:10a8dc6ec61af97c89ff032647d743f8dc023645773da42ef43f7ae1125b3509"}, + {file = "pyproj-3.7.0.tar.gz", hash = "sha256:bf658f4aaf815d9d03c8121650b6f0b8067265c36e31bc6660b98ef144d81813"}, +] + +[package.dependencies] +certifi = "*" + [[package]] name = "pystac" version = "1.11.0" @@ -3536,13 +3624,13 @@ files = [ [[package]] name = "rich" -version = "13.9.2" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, - {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] @@ -3654,13 +3742,13 @@ files = [ [[package]] name = "s3transfer" -version = "0.10.3" +version = "0.10.4" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">=3.8" files = [ - {file = "s3transfer-0.10.3-py3-none-any.whl", hash = "sha256:263ed587a5803c6c708d3ce44dc4dfedaab4c1a32e8329bab818933d79ddcf5d"}, - {file = "s3transfer-0.10.3.tar.gz", hash = "sha256:4f50ed74ab84d474ce614475e0b8d5047ff080810aac5d01ea25231cfc944b0c"}, + {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, + {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, ] [package.dependencies] @@ -3903,13 +3991,33 @@ test = ["pytest", "ruff"] [[package]] name = "tomli" -version = "2.0.2" +version = "2.1.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, - {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, + {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, + {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, +] + +[[package]] +name = "tornado" +version = "6.4.1" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">=3.8" +files = [ + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, + {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, + {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, + {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, + {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, + {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, + {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, ] [[package]] @@ -4045,13 +4153,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "uvicorn" -version = "0.31.1" +version = "0.32.1" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" files = [ - {file = "uvicorn-0.31.1-py3-none-any.whl", hash = "sha256:adc42d9cac80cf3e51af97c1851648066841e7cfb6993a4ca8de29ac1548ed41"}, - {file = "uvicorn-0.31.1.tar.gz", hash = "sha256:f5167919867b161b7bcaf32646c6a94cdbd4c3aa2eb5c17d36bb9aa5cfd8c493"}, + {file = "uvicorn-0.32.1-py3-none-any.whl", hash = "sha256:82ad92fd58da0d12af7482ecdb5f2470a04c9c9a53ced65b9bbb4a205377602e"}, + {file = "uvicorn-0.32.1.tar.gz", hash = "sha256:ee9519c246a72b1c084cea8d3b44ed6026e78a4a309cbedae9c37e4cb9fbb175"}, ] [package.dependencies] @@ -4161,16 +4269,16 @@ files = [ [[package]] name = "xmltodict" -version = "0.14.1" +version = "0.14.2" description = "Makes working with XML feel like you are working with JSON" optional = false python-versions = ">=3.6" files = [ - {file = "xmltodict-0.14.1-py2.py3-none-any.whl", hash = "sha256:3ef4a7b71c08f19047fcbea572e1d7f4207ab269da1565b5d40e9823d3894e63"}, - {file = "xmltodict-0.14.1.tar.gz", hash = "sha256:338c8431e4fc554517651972d62f06958718f6262b04316917008e8fd677a6b0"}, + {file = "xmltodict-0.14.2-py2.py3-none-any.whl", hash = "sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac"}, + {file = "xmltodict-0.14.2.tar.gz", hash = "sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553"}, ] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "932cb39d230fe1c3d1759480971d1c51a8de9a534dc306196521352f11476074" +content-hash = "3d334cb5d906e4cdf5f0e4a522cea3139f24d7965f1dd5b128f8e9cd30239e48" From d792bac3b0359ac49684746dc6064e82f1f27ed3 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 21 Nov 2024 10:57:06 +0000 Subject: [PATCH 14/18] Install h3ronpy from github while waiting for release --- space2stats_api/src/poetry.lock | 29 +++++++++++++++-------------- space2stats_api/src/pyproject.toml | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/space2stats_api/src/poetry.lock b/space2stats_api/src/poetry.lock index ddb1beb7..93515d74 100644 --- a/space2stats_api/src/poetry.lock +++ b/space2stats_api/src/poetry.lock @@ -1295,23 +1295,24 @@ version = "0.21.1" description = "Data science toolkit for the H3 geospatial grid" optional = false python-versions = "*" -files = [ - {file = "h3ronpy-0.21.1-cp38-abi3-macosx_10_14_x86_64.whl", hash = "sha256:c0bc8b87da6de7f83c783581fae72a41af560bbb924b7f18c103fa9e73196781"}, - {file = "h3ronpy-0.21.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6b3f15b86652c3fafdbaaaf977962317d7367176a1c1b13e688daff8c5e0c964"}, - {file = "h3ronpy-0.21.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:109c2424685096354c1390cec3842b65ea9fe8b4afb956ce918b604b7a68ad6b"}, - {file = "h3ronpy-0.21.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f69297204daf93875882692ff0c6cd253de0da5f94835598a54d01abb5be740b"}, - {file = "h3ronpy-0.21.1-cp38-abi3-win_amd64.whl", hash = "sha256:613bdee812ca31d27f2750ef0d453a6257461465adc4bd891a43db70226ad6be"}, -] +files = [] +develop = false [package.dependencies] -numpy = "<2" -pyarrow = ">=10.0" -Shapely = ">=1.7" +arro3-core = ">=0.4" +numpy = "*" [package.extras] -pandas = ["fiona (<1.10)", "geopandas (>=0.10)"] -polars = ["polars (>=1.0)"] -test = ["h3 (>=3.7)", "pytest (>=6)", "pytest-benchmark", "rasterio"] +pandas = ["geopandas (>=1)"] +polars = ["polars (>=1)"] +test = ["h3 (<4)", "pyarrow (>=15)", "pytest (>=6)", "pytest-benchmark", "rasterio (>=1.4)", "shapely (>=1.7)"] + +[package.source] +type = "git" +url = "https://github.com/nmandery/h3ronpy.git" +reference = "main" +resolved_reference = "ae3d0c9fe4c70c0165983e2bba2b8c0274dd7f43" +subdirectory = "h3ronpy" [[package]] name = "httpcore" @@ -4281,4 +4282,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "3d334cb5d906e4cdf5f0e4a522cea3139f24d7965f1dd5b128f8e9cd30239e48" +content-hash = "977f5b82b9d7971cf10517dc2fdfaba52fcd2a99d8f2e2ae7d8e39bf6f43885b" diff --git a/space2stats_api/src/pyproject.toml b/space2stats_api/src/pyproject.toml index f03cc4d1..af14e7c2 100644 --- a/space2stats_api/src/pyproject.toml +++ b/space2stats_api/src/pyproject.toml @@ -20,7 +20,7 @@ mangum = "*" asgi-s3-response-middleware = "^0.0.4" boto3 = "^1.35.11" numpy = "^1.24.0" -h3ronpy = "^0.21.1" +h3ronpy = { git = "https://github.com/nmandery/h3ronpy.git", branch = "main", subdirectory = "h3ronpy" } [tool.poetry.group.lambda.dependencies] mangum = "*" From 5166d40660f3a4c6e24d5fddb654ac47df90537e Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 21 Nov 2024 11:59:01 +0000 Subject: [PATCH 15/18] Fix import for new h3ronpy version --- space2stats_api/src/space2stats/h3_utils.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/space2stats_api/src/space2stats/h3_utils.py b/space2stats_api/src/space2stats/h3_utils.py index 9c3a60fc..fb44f3fc 100644 --- a/space2stats_api/src/space2stats/h3_utils.py +++ b/space2stats_api/src/space2stats/h3_utils.py @@ -1,11 +1,7 @@ from typing import Any, Dict, List, Literal from h3ronpy import ContainmentMode -from h3ronpy.arrow.vector import ( # Import cells_to_coordinates for point geometries - cells_to_wkb_points, - cells_to_wkb_polygons, - geometry_to_cells, -) +from h3ronpy.vector import cells_to_wkb_points, cells_to_wkb_polygons, geometry_to_cells from shapely import from_wkb, to_geojson from shapely.geometry import shape From b257dd99485eaa31541e8a6d506981bed89b206f Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 21 Nov 2024 12:21:44 +0000 Subject: [PATCH 16/18] Update types of h3_ids from h3ronpy --- space2stats_api/src/space2stats/h3_utils.py | 3 ++- space2stats_api/src/space2stats/lib.py | 20 ++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/space2stats_api/src/space2stats/h3_utils.py b/space2stats_api/src/space2stats/h3_utils.py index fb44f3fc..98a0f63e 100644 --- a/space2stats_api/src/space2stats/h3_utils.py +++ b/space2stats_api/src/space2stats/h3_utils.py @@ -1,5 +1,6 @@ from typing import Any, Dict, List, Literal +from arro3.core import Array from h3ronpy import ContainmentMode from h3ronpy.vector import cells_to_wkb_points, cells_to_wkb_polygons, geometry_to_cells from shapely import from_wkb, to_geojson @@ -16,7 +17,7 @@ def generate_h3_ids( aoi_geojson: Dict[str, Any], resolution: int, spatial_join_method: Literal["touches", "within", "centroid"] = "centroid", -) -> List[int]: +) -> Array: """ Generate H3 IDs using h3ronpy's geometry_to_cells with the correct containment mode. Returns the H3 IDs in uint64 format for geometry creation. diff --git a/space2stats_api/src/space2stats/lib.py b/space2stats_api/src/space2stats/lib.py index bd515bf0..68e424d3 100644 --- a/space2stats_api/src/space2stats/lib.py +++ b/space2stats_api/src/space2stats/lib.py @@ -48,8 +48,11 @@ def _get_summaries(self, fields: List[str], h3_ids: List[int]): """ ).format(pg.sql.SQL(", ").join(cols), pg.sql.Identifier(self.table_name)) - # Convert h3_ids to a list to ensure compatibility with psycopg - h3_ids = list(h3_ids) + # Convert h3_ids to integers to ensure compatibility with psycopg + h3_ids = [ + scalar.as_py() if hasattr(scalar, "as_py") else scalar for scalar in h3_ids + ] + with self.conn.cursor() as cur: cur.execute( sql_query, @@ -89,15 +92,13 @@ def summaries( return [] # Get Summaries from H3 ids - rows, colnames = self._get_summaries(fields=fields, h3_ids=list(h3_ids)) + rows, colnames = self._get_summaries(fields=fields, h3_ids=h3_ids) if not rows: return [] # Format Summaries summaries: List[Dict] = [] - geometries = ( - generate_h3_geometries(list(h3_ids), geometry) if geometry else None - ) + geometries = generate_h3_geometries(h3_ids, geometry) if geometry else None for idx, row in enumerate(rows): summary = {"hex_id": row[0]} @@ -156,6 +157,11 @@ def aggregate( ) ) + # Convert H3 scalar objects to integers + h3_ids = [ + scalar.as_py() if hasattr(scalar, "as_py") else scalar for scalar in h3_ids + ] + if not h3_ids: return {} @@ -172,8 +178,6 @@ def aggregate( pg.sql.Identifier(self.table_name), ) - # Convert h3_ids to a list to ensure compatibility with psycopg - h3_ids = list(h3_ids) with self.conn.cursor() as cur: cur.execute( sql_query, From d07bc21307f1787f110a9475ae0835a86f2a0c03 Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 21 Nov 2024 14:56:59 +0000 Subject: [PATCH 17/18] Update pyproject to use wheel from s3 --- space2stats_api/cdk/aws_stack.py | 2 +- space2stats_api/src/poetry.lock | 14 ++++++-------- space2stats_api/src/pyproject.toml | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/space2stats_api/cdk/aws_stack.py b/space2stats_api/cdk/aws_stack.py index 66aaf2f2..ad0f803a 100644 --- a/space2stats_api/cdk/aws_stack.py +++ b/space2stats_api/cdk/aws_stack.py @@ -31,7 +31,7 @@ def __init__( self, "Space2StatsFunction", entry="../src", - runtime=_lambda.Runtime.PYTHON_3_11, + runtime=_lambda.Runtime.PYTHON_3_9, index="space2stats/api/handler.py", timeout=Duration.seconds(120), handler="handler", diff --git a/space2stats_api/src/poetry.lock b/space2stats_api/src/poetry.lock index 93515d74..5214ac9a 100644 --- a/space2stats_api/src/poetry.lock +++ b/space2stats_api/src/poetry.lock @@ -1295,8 +1295,9 @@ version = "0.21.1" description = "Data science toolkit for the H3 geospatial grid" optional = false python-versions = "*" -files = [] -develop = false +files = [ + {file = "h3ronpy-0.21.1-cp39-abi3-linux_x86_64.whl", hash = "sha256:071536141bc3039fe589a1b2d965ce6292d5ff93873fa35c0b7818bcd602aedc"}, +] [package.dependencies] arro3-core = ">=0.4" @@ -1308,11 +1309,8 @@ polars = ["polars (>=1)"] test = ["h3 (<4)", "pyarrow (>=15)", "pytest (>=6)", "pytest-benchmark", "rasterio (>=1.4)", "shapely (>=1.7)"] [package.source] -type = "git" -url = "https://github.com/nmandery/h3ronpy.git" -reference = "main" -resolved_reference = "ae3d0c9fe4c70c0165983e2bba2b8c0274dd7f43" -subdirectory = "h3ronpy" +type = "url" +url = "https://temp-wheels-cdk.s3.us-east-1.amazonaws.com/h3ronpy-0.21.1-cp39-abi3-linux_x86_64.whl" [[package]] name = "httpcore" @@ -4282,4 +4280,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "977f5b82b9d7971cf10517dc2fdfaba52fcd2a99d8f2e2ae7d8e39bf6f43885b" +content-hash = "1cb3521e71698dcbc60e8a67325b04248eb07ec887f647d86be0170f11da3347" diff --git a/space2stats_api/src/pyproject.toml b/space2stats_api/src/pyproject.toml index af14e7c2..90a6971a 100644 --- a/space2stats_api/src/pyproject.toml +++ b/space2stats_api/src/pyproject.toml @@ -20,7 +20,7 @@ mangum = "*" asgi-s3-response-middleware = "^0.0.4" boto3 = "^1.35.11" numpy = "^1.24.0" -h3ronpy = { git = "https://github.com/nmandery/h3ronpy.git", branch = "main", subdirectory = "h3ronpy" } +h3ronpy = { url = "https://temp-wheels-cdk.s3.us-east-1.amazonaws.com/h3ronpy-0.21.1-cp39-abi3-linux_x86_64.whl" } [tool.poetry.group.lambda.dependencies] mangum = "*" From d9844d4cf090871c5ec1a4d505f31b836685edab Mon Sep 17 00:00:00 2001 From: Zachary Deziel Date: Thu, 21 Nov 2024 16:01:29 +0000 Subject: [PATCH 18/18] Update python version --- space2stats_api/cdk/aws_stack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/space2stats_api/cdk/aws_stack.py b/space2stats_api/cdk/aws_stack.py index ad0f803a..0a2dd5b1 100644 --- a/space2stats_api/cdk/aws_stack.py +++ b/space2stats_api/cdk/aws_stack.py @@ -31,7 +31,7 @@ def __init__( self, "Space2StatsFunction", entry="../src", - runtime=_lambda.Runtime.PYTHON_3_9, + runtime=_lambda.Runtime.PYTHON_3_10, index="space2stats/api/handler.py", timeout=Duration.seconds(120), handler="handler",